import * as fs from "fs"; import { tmpdir } from "os"; import * as path from "path"; import colorSchemes, { staffColorSchemes, } from "./colorSchemes"; import app from "./styleTree/app"; import { ColorScheme } from "./themes/common/colorScheme"; import snakeCase from "./utils/snakeCase"; const assetsDirectory = `${__dirname}/../../assets` const themeDirectory = `${assetsDirectory}/themes`; const staffDirectory = `${themeDirectory}/staff`; const tempDirectory = fs.mkdtempSync(path.join(tmpdir(), "build-themes")); // Clear existing themes function clearThemes(themeDirectory: string) { if (!fs.existsSync(themeDirectory)) { fs.mkdirSync(themeDirectory, { recursive: true }); } else { for (const file of fs.readdirSync(themeDirectory)) { if (file.endsWith(".json")) { const name = file.replace(/\.json$/, ""); if (!colorSchemes.find((colorScheme) => colorScheme.name === name)) { fs.unlinkSync(path.join(themeDirectory, file)); } } } } } clearThemes(themeDirectory); clearThemes(staffDirectory); function writeThemes(colorSchemes: ColorScheme[], outputDirectory: string) { for (let colorScheme of colorSchemes) { let styleTree = snakeCase(app(colorScheme)); let styleTreeJSON = JSON.stringify(styleTree, null, 2); let tempPath = path.join(tempDirectory, `${colorScheme.name}.json`); let outPath = path.join(outputDirectory, `${colorScheme.name}.json`); fs.writeFileSync(tempPath, styleTreeJSON); fs.renameSync(tempPath, outPath); console.log(`- ${outPath} created`); } } // Write new themes to theme directory writeThemes(colorSchemes, themeDirectory); writeThemes(staffColorSchemes, staffDirectory);