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