1import * as fs from "fs"
2import { tmpdir } from "os"
3import * as path from "path"
4import app from "./style_tree/app"
5import { Theme, create_theme } from "./theme/create_theme"
6import { themes } from "./themes"
7import { useThemeStore } from "./theme"
8
9const assets_directory = `${__dirname}/../../assets`
10const temp_directory = fs.mkdtempSync(path.join(tmpdir(), "build-themes"))
11
12function clear_themes(theme_directory: string) {
13 if (!fs.existsSync(theme_directory)) {
14 fs.mkdirSync(theme_directory, { recursive: true })
15 } else {
16 for (const file of fs.readdirSync(theme_directory)) {
17 if (file.endsWith(".json")) {
18 fs.unlinkSync(path.join(theme_directory, file))
19 }
20 }
21 }
22}
23
24const all_themes: Theme[] = themes.map((theme) =>
25 create_theme(theme)
26)
27
28function write_themes(themes: Theme[], output_directory: string) {
29 clear_themes(output_directory)
30 for (const theme of themes) {
31 const { setTheme } = useThemeStore.getState()
32 setTheme(theme)
33
34 const style_tree = app()
35 const style_tree_json = JSON.stringify(style_tree, null, 2)
36 const temp_path = path.join(temp_directory, `${theme.name}.json`)
37 const out_path = path.join(
38 output_directory,
39 `${theme.name}.json`
40 )
41 fs.writeFileSync(temp_path, style_tree_json)
42 fs.renameSync(temp_path, out_path)
43 console.log(`- ${out_path} created`)
44 }
45}
46
47write_themes(all_themes, `${assets_directory}/themes`)