@minna-ui/rollup-plugin-postcss
Version:
PostCSS runner rollup plugin for use in Minna UI projects.
63 lines • 2.56 kB
JavaScript
;
/* eslint-disable no-restricted-syntax */
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const deepmerge_1 = __importDefault(require("deepmerge"));
const postcss_1 = __importDefault(require("postcss"));
const postcss_load_config_1 = __importDefault(require("postcss-load-config"));
// @ts-ignore
const postcss_scss_1 = __importDefault(require("postcss-scss"));
const rollup_pluginutils_1 = require("rollup-pluginutils");
/**
* Rollup plugin to process imported styles via PostCSS.
*/
function postcssRollup({ exclude = [/node_modules\/@minna-ui/], include = [/\.(p|post)?css$/], ...options } = {}) {
const filter = rollup_pluginutils_1.createFilter(include, exclude);
return {
name: 'postcss',
async transform(code, id) {
if (!filter(id))
return;
try {
const context = deepmerge_1.default({
from: id,
map: {
annotation: false,
inline: false,
},
syntax: postcss_scss_1.default,
to: id,
}, options);
const { plugins, options: opts } = await postcss_load_config_1.default(context);
const result = await postcss_1.default(plugins).process(code, opts);
for (const warn of result.warnings()) {
this.warn(warn.toString(), { column: warn.column, line: warn.line });
}
// register file dependencies so rollup can watch them for changes
for (const msg of result.messages) {
if (msg.type === 'dependency') {
this.addWatchFile(msg.file);
}
}
// eslint-disable-next-line consistent-return
return {
code: result.css,
map: (result.map && result.map.toString()) || undefined,
};
}
catch (err) {
if (err.name === 'CssSyntaxError') {
process.stderr.write(err.message + err.showSourceCode());
}
else {
this.error(err);
}
}
},
};
}
exports.postcss = postcssRollup;
exports.default = postcssRollup;
//# sourceMappingURL=plugin.js.map