2022-04-01 15:45:11 +00:00
|
|
|
import * as fs from "fs";
|
|
|
|
import * as path from "path";
|
2022-07-16 15:53:27 +00:00
|
|
|
import { tmpdir } from "os";
|
2022-04-02 03:58:04 +00:00
|
|
|
import app from "./styleTree/app";
|
2022-09-08 22:47:27 +00:00
|
|
|
import themes, { internalThemes, experimentalThemes } from "./themes";
|
2022-04-04 21:39:28 +00:00
|
|
|
import snakeCase from "./utils/snakeCase";
|
2022-09-08 21:34:21 +00:00
|
|
|
import Theme from "./themes/common/theme";
|
2022-04-01 15:45:11 +00:00
|
|
|
|
2022-09-08 21:34:21 +00:00
|
|
|
const themeDirectory = `${__dirname}/../../assets/themes`;
|
|
|
|
const internalDirectory = `${themeDirectory}/internal`;
|
2022-09-08 22:47:27 +00:00
|
|
|
const experimentsDirectory = `${themeDirectory}/experiments`;
|
2022-07-16 15:53:27 +00:00
|
|
|
const tempDirectory = fs.mkdtempSync(path.join(tmpdir(), "build-themes"));
|
2022-05-16 22:11:22 +00:00
|
|
|
|
|
|
|
// Clear existing themes
|
2022-09-08 21:34:21 +00:00
|
|
|
function clearThemes(themeDirectory: string) {
|
|
|
|
for (const file of fs.readdirSync(themeDirectory)) {
|
|
|
|
if (file.endsWith(".json")) {
|
|
|
|
const name = file.replace(/\.json$/, "");
|
|
|
|
if (!themes.find((theme) => theme.name === name)) {
|
|
|
|
fs.unlinkSync(path.join(themeDirectory, file));
|
|
|
|
}
|
2022-05-18 21:17:26 +00:00
|
|
|
}
|
2022-05-18 21:07:32 +00:00
|
|
|
}
|
2022-05-16 22:11:22 +00:00
|
|
|
}
|
|
|
|
|
2022-09-08 21:34:21 +00:00
|
|
|
clearThemes(themeDirectory);
|
|
|
|
clearThemes(internalDirectory);
|
2022-09-08 22:47:27 +00:00
|
|
|
clearThemes(experimentsDirectory);
|
2022-09-08 21:34:21 +00:00
|
|
|
|
|
|
|
function writeThemes(themes: Theme[], outputDirectory: string) {
|
|
|
|
for (let theme of themes) {
|
|
|
|
let styleTree = snakeCase(app(theme));
|
|
|
|
let styleTreeJSON = JSON.stringify(styleTree, null, 2);
|
|
|
|
let tempPath = path.join(tempDirectory, `${theme.name}.json`);
|
|
|
|
let outPath = path.join(outputDirectory, `${theme.name}.json`);
|
|
|
|
fs.writeFileSync(tempPath, styleTreeJSON);
|
|
|
|
fs.renameSync(tempPath, outPath);
|
|
|
|
console.log(`- ${outPath} created`);
|
|
|
|
}
|
2022-04-01 15:45:11 +00:00
|
|
|
}
|
2022-09-08 21:34:21 +00:00
|
|
|
|
|
|
|
// Write new themes to theme directory
|
|
|
|
writeThemes(themes, themeDirectory);
|
|
|
|
writeThemes(internalThemes, internalDirectory);
|
2022-09-08 22:47:27 +00:00
|
|
|
writeThemes(experimentalThemes, experimentsDirectory);
|