@postenbring/hedwig-css
Version:
Styles for [Hedwig Design System](https://github.com/bring/hedwig-design-system).
45 lines (36 loc) • 1.25 kB
JavaScript
// @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);