UNPKG

@postenbring/hedwig-css

Version:

Styles for [Hedwig Design System](https://github.com/bring/hedwig-design-system).

45 lines (36 loc) 1.25 kB
// @ts-check import { readFile, writeFile } from "node:fs/promises"; import { transform } from "lightningcss"; // Read the input file const file = await readFile(new URL("../dist/index.css", import.meta.url), "utf8"); /** @type {Set<string>} */ const allClasses = new Set([]); transform({ filename: "", code: Buffer.from(file), visitor: { Selector(_selector) { inner(_selector); /** @typedef {import('lightningcss').Selector} Selector */ /** @param {Selector} selector */ function inner(selector) { for (const selectorComponent of selector) { if (selectorComponent.type === "class") { allClasses.add(selectorComponent.name); } // Extract classnames from pseudo selectors if ("selectors" in selectorComponent && selectorComponent.selectors) { const childSelectors = [selectorComponent.selectors].flat(2); inner(childSelectors); } } } }, }, }); // Output the result const output = `// Autogenerated file, do not edit export type ClassNames = | ${[...allClasses].map((className) => `"${className}"`).join("\n | ")}; `; await writeFile(new URL("../dist/classnames.d.ts", import.meta.url), output);