feat: build system

This commit is contained in:
Asaki Yuki 2026-01-27 18:53:08 +07:00
parent 0c8a9cc622
commit 53375ea11c
9 changed files with 83 additions and 9 deletions

View file

@ -1,6 +1,6 @@
import { AnimationKeyframe } from "../components/AnimationKeyframe.js"
import { Class } from "../components/Class.js"
import { UI } from "../components/UI.js"
import { ModifyUI, UI } from "../components/UI.js"
import { AnimType } from "../types/enums/AnimType.js"
import { Renderer } from "../types/enums/Renderer.js"
import { Type } from "../types/enums/Type.js"
@ -13,6 +13,8 @@ interface FileInterface {
}
type Files = Map<string, FileInterface>
export const MemoryModify: Record<string, Record<string, unknown>> = {}
export class Memory extends Class {
protected static files: Files = new Map<string, FileInterface>()

7
src/compilers/Random.ts Normal file
View file

@ -0,0 +1,7 @@
import { RandomString } from "../components/Utils.js"
const namespaces = Array.from({ length: 15 }, () => RandomString(16))
export function RandomNamespace() {
return namespaces[Math.floor(Math.random() * namespaces.length)]
}

View file

@ -55,3 +55,9 @@ FuntionMap.set("sqrt", number => {
value: rtn,
}
})
FuntionMap.set("translatable", key => {
return {
value: `'%' + ${key}`,
}
})

View file

@ -1,8 +1,38 @@
import { isBuildMode } from "../Configuration.js"
import { Memory } from "../Memory.js"
import { createBuildFolder } from "./linker.js"
import fs from "fs/promises"
async function buildUI() {
const build = Memory.build()
let i = 0
build.set("ui/ui_defs.json", {
ui_defs: Array.from(build.keys()),
})
await Promise.all(
build.entries().map(async ([file, value]) => {
const outFile = `build/build/${file}`
await fs
.stat(outFile.split(/\\|\//g).slice(0, -1).join("/"))
.catch(async () => await fs.mkdir(outFile.split(/\\|\//g).slice(0, -1).join("/"), { recursive: true }))
await fs.writeFile(outFile, JSON.stringify(value), "utf-8")
i++
}),
)
return i - 1
}
if (isBuildMode) {
process.on("beforeExit", () => {
console.log(JSON.stringify(Memory.build(), null, 2))
let first = true
process.on("beforeExit", async () => {
if (first) {
await createBuildFolder()
await buildUI()
}
first = false
})
}

View file

@ -0,0 +1,12 @@
import fs from "fs/promises"
export async function clearBuild() {
await fs.rm("build/build", { recursive: true, force: true })
}
export async function createBuildFolder() {
return fs
.stat("build")
.catch(() => fs.mkdir("build"))
.then(() => clearBuild())
}