1import * as fs from "fs"
2import { tmpdir } from "os"
3import * as path from "path"
4import { colorSchemes, staffColorSchemes } from "./colorSchemes"
5import app from "./styleTree/app"
6import { ColorScheme } from "./themes/common/colorScheme"
7import snakeCase from "./utils/snakeCase"
8
9const assetsDirectory = `${__dirname}/../../assets`
10const themeDirectory = `${assetsDirectory}/themes`
11const staffDirectory = `${themeDirectory}/staff`
12
13const tempDirectory = fs.mkdtempSync(path.join(tmpdir(), "build-themes"))
14
15// Clear existing themes
16function clearThemes(themeDirectory: string) {
17 if (!fs.existsSync(themeDirectory)) {
18 fs.mkdirSync(themeDirectory, { recursive: true })
19 } else {
20 for (const file of fs.readdirSync(themeDirectory)) {
21 if (file.endsWith(".json")) {
22 const name = file.replace(/\.json$/, "")
23 if (
24 !colorSchemes.find(
25 (colorScheme) => colorScheme.name === name
26 )
27 ) {
28 fs.unlinkSync(path.join(themeDirectory, file))
29 }
30 }
31 }
32 }
33}
34
35clearThemes(themeDirectory)
36clearThemes(staffDirectory)
37
38function writeThemes(colorSchemes: ColorScheme[], outputDirectory: string) {
39 for (let colorScheme of colorSchemes) {
40 let styleTree = snakeCase(app(colorScheme))
41 let styleTreeJSON = JSON.stringify(styleTree, null, 2)
42 let tempPath = path.join(tempDirectory, `${colorScheme.name}.json`)
43 let outPath = path.join(outputDirectory, `${colorScheme.name}.json`)
44 fs.writeFileSync(tempPath, styleTreeJSON)
45 fs.renameSync(tempPath, outPath)
46 console.log(`- ${outPath} created`)
47 }
48}
49
50// Write new themes to theme directory
51writeThemes(colorSchemes, themeDirectory)
52writeThemes(staffColorSchemes, staffDirectory)