st-bundle
Version:
CLI for watching and bundling SpringType projects.
92 lines (91 loc) • 3.56 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const postcss = require("postcss");
const cssDevModuleRender_1 = require("../../stylesheet/cssDevModuleRender");
const pluginStrings_1 = require("../pluginStrings");
function setEmpty() { }
exports.setEmpty = setEmpty;
async function createCSSModule(props) {
let targetJSON;
return new Promise((resolve, reject) => {
postcss([
require('postcss-modules')({
getJSON: function (cssFileName, json, outputFileName) {
targetJSON = json;
},
}),
])
.process(props.css, {
from: props.module.props.absPath,
to: props.module.props.absPath,
map: props.module.isCSSSourceMapRequired() && { inline: false },
})
.then(result => {
return resolve({ json: targetJSON, css: result.css, map: result.map });
});
});
}
function cssContextHandler(props) {
const { ctx, processor, shared } = props;
const supported = props.ctx.config.supportsStylesheet() || shared.asText;
if (!supported) {
props.module.contents = 'module.exports = {}';
return;
}
if (shared.asModule) {
if (!ctx.isInstalled('postcss-modules')) {
ctx.fatal(`Fatal error when capturing ${props.module.props.absPath}`, [
'Module "postcss-modules" is required, Please install it using the following command',
'npm install postcss-modules --save-dev',
]);
return;
}
}
ctx.ict.promise(async () => {
try {
// reset errored status
props.module.errored = false;
const data = await processor.render();
const rendererProps = {
data,
ctx,
options: props.options,
module: props.module,
useDefault: props.shared.useDefault,
};
if (shared.asModule) {
const result = await createCSSModule({ css: data.css, module: props.module, shared: props.shared });
data.json = result.json;
data.map = undefined;
data.css = result.css;
props.module.isCSSModule = true;
}
else if (shared.asText) {
props.module.isCSSText = true;
props.module.notStylesheet();
props.module.contents = pluginStrings_1.wrapContents(JSON.stringify(data.css), props.shared.useDefault);
return;
}
if (ctx.config.production) {
props.module.css = data;
if (shared.asModule && data.json) {
props.module.contents = pluginStrings_1.wrapContents(JSON.stringify(data.json), props.shared.useDefault);
}
}
else {
cssDevModuleRender_1.cssDevModuleRender(Object.assign({}, rendererProps));
}
}
catch (e) {
// prevent module from being cached
props.module.errored = true;
let errMessage = e.message ? e.message : `Uknown error in file ${props.module.props.absPath}`;
props.module.contents = `console.error(${JSON.stringify(errMessage)})`;
ctx.log.error('$error in $file', {
error: e.message,
file: props.module.props.absPath,
});
}
});
}
exports.cssContextHandler = cssContextHandler;