import ScriptUtils from "./ScriptUtils" import { writeFileSync } from "fs" import { FixLegacyTheme, UpdateLegacyLayer, } from "../src/Models/ThemeConfig/Conversion/LegacyJsonConvert" import Translations from "../src/UI/i18n/Translations" import { Translation } from "../src/UI/i18n/Translation" import { LayerConfigJson } from "../src/Models/ThemeConfig/Json/LayerConfigJson" import themeconfig from "../src/assets/schemas/layoutconfigmeta.json" import layerconfig from "../src/assets/schemas/layerconfigmeta.json" import { Utils } from "../src/Utils" import { ConfigMeta } from "../src/UI/Studio/configMeta" import { ConversionContext } from "../src/Models/ThemeConfig/Conversion/ConversionContext" /* * This script reads all theme and layer files and reformats them inplace * Use with caution, make a commit beforehand! */ const themeAttributesOrder = Utils.Dedup( (themeconfig).filter((c) => c.path.length === 1).map((c) => c.path[0]) ) const layerAttributesOrder = Utils.Dedup( (layerconfig).filter((c) => c.path.length === 1).map((c) => c.path[0]) ) const t: Translation = Translations.t.general.add.addNew t.OnEveryLanguage((txt, ln) => { console.log(ln, txt) return txt }) function reorder(object: object, order: string[]) { const allKeys = new Set(Object.keys(object)) const copy = {} for (const key of order) { copy[key] = object[key] allKeys.delete(key) } for (const key of allKeys) { copy[key] = object[key] } return copy } const layerFiles = ScriptUtils.getLayerFiles() for (const layerFile of layerFiles) { try { const fixed = ( new UpdateLegacyLayer().convertStrict( layerFile.parsed, ConversionContext.construct([layerFile.path.split("/").at(-1)], ["update legacy"]) ) ) const reordered = reorder(fixed, layerAttributesOrder) writeFileSync(layerFile.path, JSON.stringify(reordered, null, " ") + "\n") } catch (e) { console.error("COULD NOT LINT LAYER" + layerFile.path + ":\n\t" + e) } } const themeFiles = ScriptUtils.getThemeFiles() for (const themeFile of themeFiles) { try { const fixed = new FixLegacyTheme().convertStrict( themeFile.parsed, ConversionContext.construct([themeFile.path.split("/").at(-1)], ["update legacy layer"]) ) // extractInlineLayer(fixed) const endsWithNewline = themeFile.raw.at(-1) === "\n" const ordered = reorder(fixed, themeAttributesOrder) writeFileSync( themeFile.path, JSON.stringify(ordered, null, " ") + (endsWithNewline ? "\n" : "") ) } catch (e) { console.error("COULD NOT LINT THEME" + themeFile.path + ":\n\t" + e) } }