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),
);