mapcomplete/scripts/lint.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

81 lines
2.8 KiB
TypeScript
Raw Normal View History

2021-09-26 18:21:29 +02:00
import ScriptUtils from "./ScriptUtils"
2022-08-22 14:46:55 +02:00
import { writeFileSync } from "fs"
import {
FixLegacyTheme,
UpdateLegacyLayer,
2023-09-19 14:04:13 +02:00
} 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"
2023-10-30 18:08:49 +01:00
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"
2023-11-02 04:35:32 +01:00
import { ConversionContext } from "../src/Models/ThemeConfig/Conversion/ConversionContext"
2021-09-26 18:21:29 +02:00
/*
* This script reads all theme and layer files and reformats them inplace
* Use with caution, make a commit beforehand!
2021-09-26 19:56:40 +02:00
*/
2023-10-30 18:08:49 +01:00
const themeAttributesOrder = Utils.Dedup(
(<ConfigMeta[]>themeconfig).filter((c) => c.path.length === 1).map((c) => c.path[0])
)
const layerAttributesOrder = Utils.Dedup(
(<ConfigMeta[]>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
})
2023-10-30 18:08:49 +01:00
function reorder(object: object, order: string[]) {
const allKeys = new Set<string>(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
}
2021-09-26 19:56:40 +02:00
const layerFiles = ScriptUtils.getLayerFiles()
for (const layerFile of layerFiles) {
2021-11-21 03:48:05 +01:00
try {
const fixed = <LayerConfigJson>(
new UpdateLegacyLayer().convertStrict(
layerFile.parsed,
2023-10-30 13:45:44 +01:00
ConversionContext.construct([layerFile.path.split("/").at(-1)], ["update legacy"])
2022-09-08 21:40:48 +02:00
)
)
2023-10-30 18:08:49 +01:00
const reordered = reorder(fixed, layerAttributesOrder)
writeFileSync(layerFile.path, JSON.stringify(reordered, null, " ") + "\n")
2021-11-21 03:48:05 +01:00
} catch (e) {
console.error("COULD NOT LINT LAYER" + layerFile.path + ":\n\t" + e)
}
2021-09-26 19:56:40 +02:00
}
2021-09-26 19:59:51 +02:00
2021-09-26 19:56:40 +02:00
const themeFiles = ScriptUtils.getThemeFiles()
for (const themeFile of themeFiles) {
2021-11-21 03:48:05 +01:00
try {
2022-02-09 03:48:55 +01:00
const fixed = new FixLegacyTheme().convertStrict(
themeFile.parsed,
2023-10-30 13:45:44 +01:00
ConversionContext.construct([themeFile.path.split("/").at(-1)], ["update legacy layer"])
2022-09-08 21:40:48 +02:00
)
2024-01-24 23:45:20 +01:00
// extractInlineLayer(fixed)
2023-10-30 13:45:44 +01:00
const endsWithNewline = themeFile.raw.at(-1) === "\n"
2023-10-30 18:08:49 +01:00
const ordered = reorder(fixed, themeAttributesOrder)
2023-10-30 13:45:44 +01:00
writeFileSync(
themeFile.path,
2023-10-30 18:08:49 +01:00
JSON.stringify(ordered, null, " ") + (endsWithNewline ? "\n" : "")
2023-10-30 13:45:44 +01:00
)
2021-11-21 03:48:05 +01:00
} catch (e) {
console.error("COULD NOT LINT THEME" + themeFile.path + ":\n\t" + e)
}
2021-09-26 19:58:11 +02:00
}