83 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "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));
 | |
| }
 |