rollup-plugin-scss-lit
Version:
Rollup plugin for importing Sass sources as constructable stylesheets to projects using lit (lit-html and lit-element) or fast-element.
67 lines (57 loc) • 1.8 kB
JavaScript
;
var pluginutils = require('@rollup/pluginutils');
var node_path = require('node:path');
var node_url = require('node:url');
var sass = require('sass');
var rollupCopyTransformCss = require('rollup-copy-transform-css');
function escapeTaggedTemplate(source) {
return source
.replaceAll('\\', '\\\\')
.replaceAll('`', '\\`')
.replaceAll('$', '\\$')
}
function cssToModule(css, tag, specifier) {
return `import { ${tag} } from '${specifier}';
export default ${tag}\`${escapeTaggedTemplate(css)}\`;`
}
function handleError({ message, reason, column, line }) {
/* c8 ignore next 2 */
if (reason) {
this.error(reason,{ column, line });
} else {
this.error(message);
}
}
function litScss({
include = ['**/*.scss'], exclude, minify, options, plugins,
tag = 'css', specifier = 'lit'
} = {}) {
const filter = pluginutils.createFilter(include, exclude);
const processor = (minify || plugins) && rollupCopyTransformCss.createProcessor({ minify, plugins });
return {
name: 'lit-scss',
load(id) {
if (filter(id)) {
this.addWatchFile(node_path.resolve(id));
}
},
async transform(source, id) { // eslint-disable-line consistent-return
if (filter(id)) {
try {
let { css, loadedUrls } = sass.compileString(source, options);
for (const url of loadedUrls) {
this.addWatchFile(node_url.fileURLToPath(url));
}
if (processor) {
({ css } = await processor.process(css, { from: id, map: false }));
}
return { code: cssToModule(css, tag, specifier), map: { mappings: '' } }
} catch (err) {
handleError.call(this, err);
}
}
}
}
}
exports.litScss = litScss;
//# sourceMappingURL=index.cjs.map