build_themes.ts

 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`)