unplugin-lightningcss
Version:
Lightning CSS integration for Vite, Rollup, esbuild, Webpack, Vue CLI, and more.
60 lines (57 loc) • 1.6 kB
JavaScript
import { transformCss, transformCssModule } from "./transform-ChRj8fQC.js";
import path from "node:path";
import { createUnplugin } from "unplugin";
//#region src/core/options.ts
function resolveOption(options) {
return {
include: options.include || [/\.css$/],
exclude: options.exclude || [/node_modules/],
enforce: "enforce" in options ? options.enforce : "pre",
options: options.options || {}
};
}
//#endregion
//#region src/index.ts
const plugin = createUnplugin((rawOptions = {}) => {
const options = resolveOption(rawOptions);
const transformedFiles = new Map();
const name = "unplugin-lightningcss";
return {
name,
enforce: options.enforce,
resolveId(id, importer) {
if (id.endsWith(".module_built.css")) return id;
if (id.endsWith(".module.css")) return `${path.resolve(path.dirname(importer || ""), id)}?css_module`;
},
transform: {
filter: { id: {
include: options.include,
exclude: options.exclude
} },
handler(code, id) {
return transformCss(id, code, options.options);
}
},
load: {
filter: { id: { include: [/\.module_built\.css$/, /\?css_module$/] } },
async handler(id) {
if (id.endsWith(".module_built.css")) {
const code$1 = transformedFiles.get(id);
return {
id,
code: code$1
};
}
const { code, map, exports, id: compiledId } = await transformCssModule(id, options.options);
transformedFiles.set(compiledId, code);
return {
code: `import "${compiledId}";\n${exports}`,
map
};
}
}
};
});
var src_default = plugin;
//#endregion
export { src_default };