@minna-ui/rollup-plugin-emit-css
Version:
Optimise and emit CSS in rollup.
83 lines • 3.33 kB
JavaScript
;
// TODO: Add source map support
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable no-restricted-syntax */
const clean_css_1 = __importDefault(require("clean-css"));
const path_1 = require("path");
const rollup_pluginutils_1 = require("rollup-pluginutils");
function emitCss({ combine = true, debug = false, emitEmpty = true, exclude = [], fileName, include = [/\.(p|post)?css$/], optimize = process.env.NODE_ENV === 'production', } = {}) {
const filter = rollup_pluginutils_1.createFilter(include, exclude);
const styles = new Map();
return {
name: 'emit-css',
transform(code, id) {
if (!filter(id))
return undefined;
styles.set(id, code);
return {
code: '',
};
},
// eslint-disable-next-line sort-keys
generateBundle(outputOpts) {
if (!styles.size)
return;
const processCss = (css, id) => {
if ((!css || !/\S/.test(css)) && !emitEmpty) {
if (debug)
this.warn('CSS empty, not emitting file');
return;
}
if (optimize) {
const cleancss = new clean_css_1.default({
sourceMap: false,
...(typeof optimize === 'object' ? optimize : {}),
});
const result = cleancss.minify(css);
for (const err of result.warnings)
this.warn(err);
for (const err of result.errors)
this.error(err);
// eslint-disable-next-line no-param-reassign
css = result.styles;
}
const name = id.replace(path_1.extname(id), '');
this.emitFile({
name: `${name}.css`,
source: css,
type: 'asset',
});
};
try {
if (combine) {
let css = '';
for (const id of styles.keys()) {
css += styles.get(id) || '';
}
if (!fileName && !outputOpts.name && !outputOpts.file) {
this.error("Couldn't get name from one of fileName, rollup#output.name, or rollup#output.file");
}
const inferredName = fileName ||
outputOpts.name ||
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
path_1.basename(outputOpts.file);
processCss(css, inferredName);
}
else {
for (const id of styles.keys()) {
processCss(styles.get(id), path_1.basename(id));
}
}
}
catch (err) {
this.error(err);
}
},
};
}
exports.emitCss = emitCss;
exports.default = emitCss;
//# sourceMappingURL=index.js.map