UNPKG

st-bundle

Version:

CLI for watching and bundling SpringType projects.

75 lines (74 loc) 2.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = require("path"); const postcss = require("postcss"); const atImport = require("postcss-import"); const utils_1 = require("../../utils/utils"); const cssHandleResources_1 = require("../cssHandleResources"); const cssResolveModule_1 = require("../cssResolveModule"); const cssSourceMap_1 = require("../cssSourceMap"); async function callPostCSS(plugins, css, options, logger) { return new Promise((resolve, reject) => { postcss(plugins) .process(css, options) .then(resolve) .catch(reject); }); } async function renderModule(props) { function loader(url, opts) { const data = cssHandleResources_1.cssHandleResources({ path: url, contents: utils_1.readFile(url) }, { options: props.options, fileRoot: path.dirname(url), ctx: props.ctx, url: url, module: props.module, }); return data.contents; } function resolver(url, root, importOptions) { const userPaths = props.options.paths || []; const paths = [root].concat(userPaths); const resolved = cssResolveModule_1.cssResolveModule({ extensions: ['.css', '.scss', '.sass'], paths, target: url, tryUnderscore: true, options: props.options, }); if (resolved.success) { if (props.options.breakDependantsCache) { props.module.breakDependantsCache = true; } props.module.addWeakReference(resolved.path); return resolved.path; } } const requireSourceMap = props.module.isCSSSourceMapRequired(); // handle root resources const processed = cssHandleResources_1.cssHandleResources({ path: props.module.props.absPath, contents: props.module.contents }, { options: props.options, ctx: props.ctx, module: props.module }); let pluginList = [atImport({ load: loader, resolve: resolver })]; if (props.options.postCSS) { if (props.options.postCSS.plugins) { pluginList = pluginList.concat(props.options.postCSS.plugins); } } const data = await callPostCSS(pluginList, processed.contents, { from: props.module.props.absPath, to: props.module.props.absPath, map: requireSourceMap && { inline: false }, }, props.ctx.log); let sourceMap; if (data.map) { sourceMap = cssSourceMap_1.alignCSSSourceMap({ module: props.module, sourceMap: data.map, ctx: props.ctx }); } return { map: sourceMap, css: data.css && data.css.toString() }; } exports.renderModule = renderModule; function postCSSHandler(props) { const { ctx, module } = props; return { render: async () => renderModule({ ctx, module, options: props.options }), }; } exports.postCSSHandler = postCSSHandler;