more binding
This commit is contained in:
parent
e9902febfd
commit
a3c734862a
8 changed files with 3013 additions and 300 deletions
|
|
@ -7,41 +7,57 @@ const schema = PFFS.readFileJSON("ui.schema.json").definitions
|
|||
const enumPath = "src/types/enums/"
|
||||
|
||||
const index: string[] = []
|
||||
const bagBindings = new Set(schema["hc:bag_binding"].enum)
|
||||
for (const key in schema) {
|
||||
const data = schema[key]
|
||||
if (data.enum) {
|
||||
const enumName = key.match(/\w+$/)?.[0].toCamelCase(true)!
|
||||
index.push(`export { ${enumName} } from "./${enumName}.js"`)
|
||||
const count = new Map<string, number>()
|
||||
|
||||
const fileData: string[] = [`export enum ${enumName} {`]
|
||||
const ext = async (extendData: string[] = []) => {
|
||||
if (data.enum) {
|
||||
const enumName = key.match(/\w+$/)?.[0].toCamelCase(true)!
|
||||
index.push(`export { ${enumName} } from "./${enumName}.js"`)
|
||||
const count = new Map<string, number>()
|
||||
|
||||
for (const value of data.enum as string[]) {
|
||||
if (enumName === "ButtonId") {
|
||||
const values = value.match(/\w+/g)!
|
||||
const name =
|
||||
values[0] === "button" ? values.slice(1).join("_").toUpperCase() : values.join("_").toUpperCase()
|
||||
if (name === undefined) continue
|
||||
fileData.push(` ${count.get(name) ? `${name}_${count.get(name)}` : name} = "${value}",`)
|
||||
const fileData: string[] = [`export enum ${enumName} {`]
|
||||
|
||||
count.set(name, (count.get(name) || 0) + 1)
|
||||
} else {
|
||||
let name = value.match(/\w+$/g)?.join("_")?.toUpperCase()!
|
||||
if (name === undefined) continue
|
||||
if (/\d/.test(name?.[0])) name = "_" + name
|
||||
fileData.push(` ${count.get(name) ? `${name}_${count.get(name)}` : name} = "${value}",`)
|
||||
count.set(name, (count.get(name) || 0) + 1)
|
||||
for (const value of Array.from(new Set([...data.enum, ...extendData])) as string[]) {
|
||||
if (enumName === "ButtonId") {
|
||||
const values = value.match(/\w+/g)!
|
||||
const name =
|
||||
values[0] === "button"
|
||||
? values.slice(1).join("_").toUpperCase()
|
||||
: values.join("_").toUpperCase()
|
||||
if (name === undefined) continue
|
||||
fileData.push(` ${count.get(name) ? `${name}_${count.get(name)}` : name} = "${value}",`)
|
||||
|
||||
count.set(name, (count.get(name) || 0) + 1)
|
||||
} else {
|
||||
let name = value.match(/\w+$/g)?.join("_")?.toUpperCase()!
|
||||
if (name === undefined) continue
|
||||
if (/\d/.test(name?.[0])) name = "_" + name
|
||||
fileData.push(` ${count.get(name) ? `${name}_${count.get(name)}` : name} = "${value}",`)
|
||||
count.set(name, (count.get(name) || 0) + 1)
|
||||
}
|
||||
}
|
||||
|
||||
if (enumName === "Type") {
|
||||
fileData.push(` UNKNOWN = "unknown",`)
|
||||
}
|
||||
|
||||
fileData.push("}")
|
||||
|
||||
await fs
|
||||
.writeFile(`${enumPath}${enumName}.ts`, fileData.join("\n"))
|
||||
.then(() => console.log(`Generated enum ${enumName} with ${data.enum.length} values`))
|
||||
}
|
||||
|
||||
if (enumName === "Type") {
|
||||
fileData.push(` UNKNOWN = "unknown",`)
|
||||
}
|
||||
|
||||
fileData.push("}")
|
||||
|
||||
fs.writeFile(`${enumPath}${enumName}.ts`, fileData.join("\n"))
|
||||
}
|
||||
|
||||
await fs
|
||||
.readFile(`extends/${key.match(/\w+$/)?.[0]}.txt`, "utf-8")
|
||||
.then(async data => {
|
||||
const extendData = data.split("\r\n").filter(line => !bagBindings.has(line))
|
||||
await ext(extendData).then(v => console.log(`Extended ${key} with ${extendData.length} values`))
|
||||
})
|
||||
.catch(() => ext())
|
||||
}
|
||||
|
||||
fs.writeFile(`${enumPath}index.ts`, index.join("\n"))
|
||||
|
|
|
|||
Reference in a new issue