import path from "path";
import { fileURLToPath } from "url";
import { execSync } from "child_process";
import { writeFileSync, readFileSync, copyFileSync } from "fs";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const SLIM_PKG_DIR = path.join(__dirname, "pkg-slim");
console.log("=========================================");
console.log(" building wasm package for web target");
console.log("=========================================");
execSync(
"wasm-pack build --out-dir pkg-slim --target web --release",
{ stdio: "inherit" },
);
console.log("=========================================");
console.log(" copying and compiling shim file ");
console.log("=========================================");
copyFileSync(
path.join(__dirname, "slim-shim.ts"),
path.join(SLIM_PKG_DIR, "index.ts"),
);
execSync(
"pnpm exec tsc pkg-slim/index.ts --outDir pkg-slim --target esnext --module esnext --declaration --moduleResolution bundler",
{ stdio: "inherit" },
);
console.log("=========================================");
console.log(" base64 encoding wasm file");
console.log("=========================================");
const wasmFile = path.join(SLIM_PKG_DIR, "keyhive_wasm_bg.wasm");
const base64File = path.join(SLIM_PKG_DIR, "keyhive_wasm_bg.wasm.base64.js");
const wasmBase64 = Buffer.from(readFileSync(wasmFile))
.toString("base64")
.trim();
const fileContents = `
export const wasmBase64 = "${wasmBase64}";
`;
writeFileSync(base64File, fileContents);
const typesFile = path.join(SLIM_PKG_DIR, "keyhive_wasm_bg.wasm.base64.d.ts");
const typesContents = `
declare module "keyhive_wasm_bg.wasm" {
export const wasmBase64: string;
}
`;
writeFileSync(typesFile, typesContents);