UNPKG

@minna-ui/rollup-plugin-emit-css

Version:

Optimise and emit CSS in rollup.

83 lines 3.33 kB
"use strict"; // 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