atomizer-plugins
Version:
Atomizer plugins for esbuild, Rollup, Vite and Webpack
64 lines (63 loc) • 2.58 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.webpack = exports.vite = exports.rollup = exports.esbuild = exports.unplugin = void 0;
const atomizer_1 = __importDefault(require("atomizer"));
const unplugin_1 = require("unplugin");
const fs_extra_1 = require("fs-extra");
const lodash_es_1 = require("lodash-es");
exports.unplugin = (0, unplugin_1.createUnplugin)((options) => {
const atomizer = new atomizer_1.default({
verbose: options.verbose,
});
const lookup = new Map();
let lastComputedCss = null;
const isDev = process.env.NODE_ENV === 'development';
const writeToFile = (0, lodash_es_1.debounce)(() => {
const classes = Array.from(lookup.values()).flat();
const config = atomizer.getConfig(classes, options.config);
const css = atomizer.getCss(config, options.cssOptions);
// don't try to write if contents are gonna be same
if (lastComputedCss === css) {
return;
}
lastComputedCss = css;
const source = css;
const fileName = options.outfile || 'atomizer.css';
(0, fs_extra_1.outputFile)(fileName, source, (e) => { });
}, 1000, { leading: true });
return {
name: 'unplugin-atomizer',
/* Extract atomic css classes from each file that has changed */
transform(code, id) {
// Skip css files as atomizer classes do not exist there
if (id.includes('.css') || id.includes('.scss')) {
return null;
}
// Find atomic classes and add them to our cache
lookup.set(id, atomizer.findClassNames(code));
// only execute in dev mode to avoid writing to disk for production builds
// buildEnd will handle production builds
if (isDev) {
writeToFile();
}
return null;
},
/* Vite only hook to parse entry point files */
transformIndexHtml(html) {
lookup.set('html-entry-point', atomizer.findClassNames(html));
writeToFile();
return html;
},
/* Hook used to at the end of the build lifecycle */
buildEnd() {
writeToFile();
},
};
});
exports.esbuild = exports.unplugin.esbuild;
exports.rollup = exports.unplugin.rollup;
exports.vite = exports.unplugin.vite;
exports.webpack = exports.unplugin.webpack;
;