import { build, type Config, defineConfig, parse, type TokenNormalized, } from "@terrazzo/parser"; import pluginCss from "@terrazzo/plugin-css"; export function prefixToken(token: TokenNormalized) { return `--morkdeck-${token.$type}-${token.id.replace(/\./g, "-")}`; } const configBase: Config = { plugins: [ pluginCss({ variableName: prefixToken, baseSelector: ":root", }), ], }; export async function compileCss(themePath?: string) { const config = defineConfig(configBase, { cwd: new URL(import.meta.url), }); const tokensUrl = new URL("./tokens", import.meta.url); const files: Array<{ src: string; filename: URL }> = []; const tokenSources = Deno.readDir(tokensUrl); for await (const source of tokenSources) { if (source.isFile) { const filename = new URL(`tokens/${source.name}`, tokensUrl); files.push({ filename, src: await Deno.readTextFile(filename), }); } } if (themePath) { const themeUrl = new URL(themePath, Deno.cwd()); files.push({ filename: new URL(themePath, Deno.cwd()), src: await Deno.readTextFile(themeUrl), }); } const { tokens, sources } = await parse(files, { config }); const buildResult = await build(tokens, { sources, config }); return buildResult.outputFiles.map((f) => f.contents).join("\n\n"); }