import fs from "fs/promises" import url from "url" import { type Theme } from "../Theme.js" /** * Write theme variables to get autocomplete while developing. Only works from node. * * ```ts * // src/bin/generateThemeVars.ts * * import { theme } from "../theme.js" // import theme instance * import { writeTheme } from "metamorphisis/node/writeTheme.js" * * // write relative to file * writeTheme(theme, import.meta.url, "../assets/variables.scss") * ``` * In package.json: * * ```json * "scripts": { * "gen:theme": "pnpm ts-node src/bin/generateThemeVars.ts" * } * ``` * * @env node */ export async function writeTheme(theme: Theme, metaUrl: string, filepath: string): Promise { const location = url.fileURLToPath(new URL(filepath, metaUrl)) const css = Object.entries(theme.css).map(([key, val]) => `${key}: ${val};`).join("\n") const content = `/* Auto generated by metamorphisis Theme.write. For autocomplete purposes only. */\n${css}\n` await fs.writeFile(location, content) }