2023-02-25 19:46:33 +03:00
|
|
|
import fs from "fs"
|
|
|
|
import path from "path"
|
|
|
|
import { ColorScheme, Meta } from "./themes/common/colorScheme"
|
2022-09-21 22:39:59 +03:00
|
|
|
|
2023-02-25 19:46:33 +03:00
|
|
|
const colorSchemes: ColorScheme[] = []
|
|
|
|
export default colorSchemes
|
2022-09-21 22:39:59 +03:00
|
|
|
|
2023-02-25 19:46:33 +03:00
|
|
|
const schemeMeta: Meta[] = []
|
|
|
|
export { schemeMeta }
|
2023-01-27 04:27:42 +03:00
|
|
|
|
2023-02-25 19:46:33 +03:00
|
|
|
const staffColorSchemes: ColorScheme[] = []
|
|
|
|
export { staffColorSchemes }
|
2022-09-21 22:39:59 +03:00
|
|
|
|
2023-02-25 19:46:33 +03:00
|
|
|
const experimentalColorSchemes: ColorScheme[] = []
|
|
|
|
export { experimentalColorSchemes }
|
2022-09-21 22:39:59 +03:00
|
|
|
|
2023-02-25 19:46:33 +03:00
|
|
|
const themes_directory = path.resolve(`${__dirname}/themes`)
|
2023-01-27 04:27:42 +03:00
|
|
|
|
2023-02-25 19:46:33 +03:00
|
|
|
function for_all_color_schemes_in(
|
|
|
|
themesPath: string,
|
|
|
|
callback: (module: any, path: string) => void
|
|
|
|
) {
|
|
|
|
for (const fileName of fs.readdirSync(themesPath)) {
|
|
|
|
if (fileName == "template.ts") continue
|
|
|
|
const filePath = path.join(themesPath, fileName)
|
2022-09-21 22:39:59 +03:00
|
|
|
|
2023-02-25 19:46:33 +03:00
|
|
|
if (fs.statSync(filePath).isFile()) {
|
|
|
|
const colorScheme = require(filePath)
|
|
|
|
callback(colorScheme, path.basename(filePath))
|
|
|
|
}
|
2022-09-21 22:39:59 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-27 04:27:42 +03:00
|
|
|
function fillColorSchemes(themesPath: string, colorSchemes: ColorScheme[]) {
|
2023-02-25 19:46:33 +03:00
|
|
|
for_all_color_schemes_in(themesPath, (colorScheme, _path) => {
|
|
|
|
if (colorScheme.dark) colorSchemes.push(colorScheme.dark)
|
|
|
|
if (colorScheme.light) colorSchemes.push(colorScheme.light)
|
|
|
|
})
|
2023-01-27 04:27:42 +03:00
|
|
|
}
|
|
|
|
|
2023-02-25 19:46:33 +03:00
|
|
|
fillColorSchemes(themes_directory, colorSchemes)
|
|
|
|
fillColorSchemes(path.resolve(`${themes_directory}/staff`), staffColorSchemes)
|
2023-01-27 04:27:42 +03:00
|
|
|
|
|
|
|
function fillMeta(themesPath: string, meta: Meta[]) {
|
2023-02-25 19:46:33 +03:00
|
|
|
for_all_color_schemes_in(themesPath, (colorScheme, path) => {
|
|
|
|
if (colorScheme.meta) {
|
|
|
|
meta.push(colorScheme.meta)
|
|
|
|
} else {
|
|
|
|
throw Error(`Public theme ${path} must have a meta field`)
|
|
|
|
}
|
|
|
|
})
|
2023-01-27 04:27:42 +03:00
|
|
|
}
|
|
|
|
|
2023-02-25 19:46:33 +03:00
|
|
|
fillMeta(themes_directory, schemeMeta)
|