import { build } from "esbuild"; import { readFile, writeFile, mkdir, cp, rm } from "node:fs/promises"; await writeFile( "engine/script-host.ts", "export const workerSource=" + JSON.stringify(await readFile("engine/script-worker.js", "utf8")) + ";\n", ); await mkdir("public/engine", { recursive: true }); await build({ entryPoints: ["engine/player-entry.ts"], bundle: true, format: "esm", target: "es2022", minify: true, outfile: "public/engine/player.js", logLevel: "warning", }); await mkdir("public/studio", { recursive: true }); await build({ entryPoints: ["editor/local.tsx"], bundle: true, format: "esm", target: "es2022", minify: true, outfile: "public/studio/editor.js", define: { "process.env.NODE_ENV": '"production"' }, logLevel: "warning", }); await writeFile( "public/studio/index.html", 'Forma Engine
', ); console.log("Editor and standalone player built."); const nativeFiles = [ "package.json", "package-lock.json", "build.mjs", "cleanup.cjs", "options.mjs", "setup-android.mjs", "desktop/main.cjs", "desktop/protocol.cjs", "desktop/icon.png", "desktop/icon.ico", "android/settings.gradle", "android/build.gradle", "android/gradle.properties", "android/app/build.gradle", "android/app/src/main/AndroidManifest.xml", "android/app/src/main/res/drawable/forma_icon.xml", "android/app/src/main/java/com/forma/shell/MainActivity.java", ]; await rm("public/build-targets", { recursive: true, force: true }); for (const file of nativeFiles) { await mkdir( "public/build-targets/" + file.split("/").slice(0, -1).join("/"), { recursive: true }, ); await cp("native/" + file, "public/build-targets/" + file); } await writeFile( "public/build-targets/manifest.json", JSON.stringify(nativeFiles), );