"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); 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)); }