You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
3.0 KiB
83 lines
3.0 KiB
4 years ago
|
"use strict";
|
||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
|
};
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.doCompileStyle = exports.compileStyleAsync = exports.compileStyle = void 0;
|
||
|
const postcss = require('postcss');
|
||
|
const trim_1 = __importDefault(require("./stylePlugins/trim"));
|
||
|
const scoped_1 = __importDefault(require("./stylePlugins/scoped"));
|
||
|
const styleProcessors_1 = require("./styleProcessors");
|
||
|
function compileStyle(options) {
|
||
|
return doCompileStyle(Object.assign(Object.assign({}, options), { isAsync: false }));
|
||
|
}
|
||
|
exports.compileStyle = compileStyle;
|
||
|
function compileStyleAsync(options) {
|
||
|
return Promise.resolve(doCompileStyle(Object.assign(Object.assign({}, options), { isAsync: true })));
|
||
|
}
|
||
|
exports.compileStyleAsync = compileStyleAsync;
|
||
|
function doCompileStyle(options) {
|
||
|
const { filename, id, scoped = true, trim = true, preprocessLang, postcssOptions, postcssPlugins } = options;
|
||
|
const preprocessor = preprocessLang && styleProcessors_1.processors[preprocessLang];
|
||
|
const preProcessedSource = preprocessor && preprocess(options, preprocessor);
|
||
|
const map = preProcessedSource ? preProcessedSource.map : options.map;
|
||
|
const source = preProcessedSource ? preProcessedSource.code : options.source;
|
||
|
const plugins = (postcssPlugins || []).slice();
|
||
|
if (trim) {
|
||
|
plugins.push(trim_1.default());
|
||
|
}
|
||
|
if (scoped) {
|
||
|
plugins.push(scoped_1.default(id));
|
||
|
}
|
||
|
const postCSSOptions = Object.assign(Object.assign({}, postcssOptions), { to: filename, from: filename });
|
||
|
if (map) {
|
||
|
postCSSOptions.map = {
|
||
|
inline: false,
|
||
|
annotation: false,
|
||
|
prev: map
|
||
|
};
|
||
|
}
|
||
|
let result, code, outMap;
|
||
|
const errors = [];
|
||
|
if (preProcessedSource && preProcessedSource.errors.length) {
|
||
|
errors.push(...preProcessedSource.errors);
|
||
|
}
|
||
|
try {
|
||
|
result = postcss(plugins).process(source, postCSSOptions);
|
||
|
// In async mode, return a promise.
|
||
|
if (options.isAsync) {
|
||
|
return result
|
||
|
.then((result) => ({
|
||
|
code: result.css || '',
|
||
|
map: result.map && result.map.toJSON(),
|
||
|
errors,
|
||
|
rawResult: result
|
||
|
}))
|
||
|
.catch((error) => ({
|
||
|
code: '',
|
||
|
map: undefined,
|
||
|
errors: [...errors, error.message],
|
||
|
rawResult: undefined
|
||
|
}));
|
||
|
}
|
||
|
// force synchronous transform (we know we only have sync plugins)
|
||
|
code = result.css;
|
||
|
outMap = result.map;
|
||
|
}
|
||
|
catch (e) {
|
||
|
errors.push(e);
|
||
|
}
|
||
|
return {
|
||
|
code: code || ``,
|
||
|
map: outMap && outMap.toJSON(),
|
||
|
errors,
|
||
|
rawResult: result
|
||
|
};
|
||
|
}
|
||
|
exports.doCompileStyle = doCompileStyle;
|
||
|
function preprocess(options, preprocessor) {
|
||
|
return preprocessor.render(options.source, options.map, Object.assign({
|
||
|
filename: options.filename
|
||
|
}, options.preprocessOptions));
|
||
|
}
|