isaaccss
Version:
Inline-Style-as-a-Class CSS engine
41 lines (40 loc) • 1.71 kB
JavaScript
import { cssify, postcssify, transform } from "./api/index.js";
import isaaccssRollupPlugin, { resolveIsaaccssRollupPluginOptions } from "./rollup.js";
const isaaccssVitePlugin = (options) => {
const plugins = [];
{
const rollupPlugin = isaaccssRollupPlugin(options);
plugins.push({
name: "isaaccss:build",
apply: "build",
transform: rollupPlugin.transform.handler,
generateBundle: rollupPlugin.generateBundle.handler,
});
}
{
const { filter, transformOptions, cssifyOptions } = resolveIsaaccssRollupPluginOptions(options);
const cssMap = new Map();
const virtualCssPrefix = "virtual:isaaccss:";
const virtualCssSuffix = ".css";
plugins.push({
name: "isaaccss:serve",
apply: "serve",
resolveId: source => (source.startsWith(virtualCssPrefix) ? source : undefined),
load: id => (id.startsWith(virtualCssPrefix) ? cssMap.get(id) : undefined),
async transform(code, id) {
if (id.startsWith(virtualCssPrefix) || !filter(id)) {
return;
}
const result = transform(code, id, { ...transformOptions, compress: false });
const css = await postcssify(cssify(result.classes.values(), cssifyOptions), options?.postcss);
if (css) {
const virtualCss = virtualCssPrefix + id + virtualCssSuffix;
cssMap.set(virtualCss, css);
return `import "${virtualCss}";${result.code}`;
}
},
});
}
return plugins;
};
export default isaaccssVitePlugin;