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