UNPKG

atomizer-plugins

Version:

Atomizer plugins for esbuild, Rollup, Vite and Webpack

64 lines (63 loc) 2.58 kB
"use strict"; 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;