UNPKG

st-bundle

Version:

CLI for watching and bundling SpringType projects.

78 lines (77 loc) 3.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("../../utils/utils"); const cssHandleResources_1 = require("../cssHandleResources"); const cssResolveModule_1 = require("../cssResolveModule"); const cssSourceMap_1 = require("../cssSourceMap"); async function renderWithLess(less, contents, options) { return new Promise((resolve, reject) => { less.render(contents, options).then(function (output) { return resolve({ css: output.css, map: output.map }); }, function (error) { return reject(error); }); }); } async function renderModule(props) { const Importer = { install: (less, manager) => { manager.addFileManager(new (class extends less.FileManager { loadFile(url, root, options, environment) { return new Promise((resolve, reject) => { const userPaths = props.options.paths || []; const paths = [root].concat(userPaths); const resolved = cssResolveModule_1.cssResolveModule({ extensions: ['.less', '.css'], paths, target: url, tryUnderscore: true, options: props.options, }); if (resolved.success) { if (props.options.breakDependantsCache) { props.module.breakDependantsCache = true; } props.module.addWeakReference(resolved.path); const contents = utils_1.readFile(resolved.path); const processed = cssHandleResources_1.cssHandleResources({ path: resolved.path, contents: contents }, { options: props.options, ctx: props.ctx, module: props.module }); return resolve({ contents: processed.contents, filename: resolved.path, options, environment }); } else { reject(`Cannot find module ${url} at ${root}`); } }); } })()); }, }; const module = props.module; 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 = [Importer]; if (props.options.less) { if (props.options.less.plugins) { pluginList = pluginList.concat(props.options.less.plugins); } } const data = await renderWithLess(props.less, processed.contents, { sourceMap: requireSourceMap && { outputSourceFiles: true }, filename: module.props.absPath, plugins: pluginList, }); let sourceMap; if (data.map) { sourceMap = cssSourceMap_1.alignCSSSourceMap({ module: props.module, sourceMap: data.map, ctx: props.ctx }); } return { map: sourceMap, css: data.css }; } exports.renderModule = renderModule; function lessHandler(props) { const { ctx, module } = props; const less = require('less'); return { render: async () => renderModule({ ctx, module, less, options: props.options }), }; } exports.lessHandler = lessHandler;