diff --git a/config.d.ts b/config.d.ts index 8960a80..7d9cfce 100644 --- a/config.d.ts +++ b/config.d.ts @@ -9,6 +9,18 @@ export interface Config { name?: string description?: string version?: [number, number, number] + + metadata?: { + authors?: string[] + license?: string + url?: string + } + + subpacks?: { + folder_name?: string + name?: string + memory_performance_tier?: number + }[] } global_variables?: Record } diff --git a/package.json b/package.json index 18977be..6aceaa5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "asajs", - "version": "4.0.0-indev-2", + "version": "4.0.0-indev-3", "description": "Create your Minecraft JSON-UI resource packs using JavaScript", "keywords": [ "Minecraft", diff --git a/resources/asajs.config.cjs b/resources/asajs.config.cjs index 7e4026f..61c33d7 100644 --- a/resources/asajs.config.cjs +++ b/resources/asajs.config.cjs @@ -3,7 +3,12 @@ * @type {import('asajs/config.d.ts').Config} */ export const config = { + packinfo: { + name: "AsaJS", + description: "Create your Minecraft JSON-UI resource packs using JavaScript.", + }, compiler: { enabled: true, + linked: false, }, } diff --git a/src/compilers/Configuration.ts b/src/compilers/Configuration.ts index f34c6ca..758a087 100644 --- a/src/compilers/Configuration.ts +++ b/src/compilers/Configuration.ts @@ -7,6 +7,10 @@ if (!fs.existsSync("asajs.config.cjs")) { fs.copyFileSync("node_modules/asajs/resources/asajs.config.cjs", "asajs.config.cjs") } +if (!fs.existsSync(".gitignore")) { + fs.writeFileSync(".gitignore", `node_modules`, "utf-8") +} + export const config: Config = require(path.resolve(process.cwd(), "asajs.config.cjs")).config export let isBuildMode = config.compiler?.enabled ?? false diff --git a/src/compilers/ui/builder.ts b/src/compilers/ui/builder.ts index 1343fa2..a4d4acc 100644 --- a/src/compilers/ui/builder.ts +++ b/src/compilers/ui/builder.ts @@ -5,6 +5,7 @@ import { genManifest } from "./manifest.js" import { UI } from "../../components/UI.js" import { Type } from "../../types/enums/Type.js" import fs from "fs/promises" +import { BuildCache } from "./buildcache.js" async function buildUI() { const build = Memory.build() @@ -15,10 +16,6 @@ async function buildUI() { if (config.global_variables) build.set("ui/_global_variables.json", config.global_variables) - build.set("build.json", { - files: Array.from(build.keys()), - }) - const out = await Promise.all( build.entries().map(async ([file, value]) => { const outFile = `build/${file}` @@ -46,6 +43,7 @@ async function buildUI() { await Promise.all([ fs.writeFile("build/manifest.json", await genManifest(), "utf-8"), fs.writeFile("build/.gitignore", [...out, "manifest.json"].join("\n"), "utf-8"), + BuildCache.set("build-files", [...out, "manifest.json"]), fs .stat("build/pack_icon.png") .catch(() => fs.copyFile("node_modules/asajs/resources/pack_icon.png", "build/pack_icon.png")), diff --git a/src/compilers/ui/linker.ts b/src/compilers/ui/linker.ts index ca33802..dfba894 100644 --- a/src/compilers/ui/linker.ts +++ b/src/compilers/ui/linker.ts @@ -1,7 +1,6 @@ import fs from "fs/promises" import { BuildCache } from "./buildcache.js" import { RandomString } from "../../components/Utils.js" -import { prevData } from "./prevdata.js" import path from "path" import { getGamedataPath } from "./installer.js" @@ -25,7 +24,8 @@ function genUUID(): string { } export async function clearBuild() { - await Promise.all(prevData.files.map(file => fs.rm(`build/${file}`).catch(() => null))) + const files: string[] = (await BuildCache.get("build-files")) || [] + await Promise.all(files.map(file => fs.rm(`build/${file}`).catch(() => null))) } export async function createBuildFolder() { diff --git a/src/compilers/ui/manifest.ts b/src/compilers/ui/manifest.ts index 7b22595..f80653e 100644 --- a/src/compilers/ui/manifest.ts +++ b/src/compilers/ui/manifest.ts @@ -7,10 +7,11 @@ export async function genManifest() { format_version: 2, header: { name: config.packinfo?.name || "AsaJS", - description: config.packinfo?.description || "A framework for creating UIs for AsaJS.", + description: + config.packinfo?.description || "Create your Minecraft JSON-UI resource packs using JavaScript.", uuid: uuid1, version: config.packinfo?.version || [4, 0, 0], - min_engine_version: [1, 21, 132], + min_engine_version: [1, 21, 80], }, modules: [ { @@ -20,5 +21,7 @@ export async function genManifest() { version: [4, 0, 0], }, ], + subpacks: config.packinfo?.subpacks, + metadata: config.packinfo?.metadata, }) } diff --git a/src/compilers/ui/prevdata.ts b/src/compilers/ui/prevdata.ts deleted file mode 100644 index 1d34dfe..0000000 --- a/src/compilers/ui/prevdata.ts +++ /dev/null @@ -1,11 +0,0 @@ -import fs from "fs" - -export let prevData: { - files: string[] -} - -try { - prevData = JSON.parse(fs.readFileSync("build/build.json", "utf-8")) -} catch (error) { - prevData = { files: [] } -} diff --git a/src/components/Utils.ts b/src/components/Utils.ts index 42920e6..bbf3e16 100644 --- a/src/components/Utils.ts +++ b/src/components/Utils.ts @@ -144,6 +144,12 @@ export function Modify>(namespace: T, const memoryUI = MemoryModify[paths[namespace][name]]?.[name] // @ts-ignore if (memoryUI) return memoryUI as ModifyUI, VanillaElementChilds> + if (!paths[namespace]) { + throw new Error(`Namespace '${namespace}' does not exist`) + // @ts-ignore + } else if (!paths[namespace][name]) { + throw new Error(`Element '${name}' does not exist in namespace '${namespace}'`) + } // @ts-ignore const modifyUI = new ModifyUI, VanillaElementChilds>( namespace,