1import { execFileSync } from "node:child_process";2import {3 copyFileSync,4 mkdirSync,5 readFileSync,6 writeFileSync,7} from "node:fs";8import { createHash } from "node:crypto";9import { dirname, resolve } from "node:path";10import { fileURLToPath } from "node:url";1112const repository = resolve(dirname(fileURLToPath(import.meta.url)), "..");13const core = resolve(repository, "crypto-core");14const generated = resolve(core, "generated");15const destination = resolve(repository, "src/shared/noise-core-wasm");16const wasm = resolve(generated, "peach_noise_core_bg.wasm");1718function run(command, args) {19 execFileSync(command, args, { cwd: core, stdio: "inherit" });20}2122run("cargo", ["fmt", "--check"]);23run("cargo", ["test", "--locked"]);24run("cargo", [25 "build",26 "--locked",27 "--target",28 "wasm32-unknown-unknown",29 "--release",30]);31run("wasm-bindgen", [32 "--target",33 "web",34 "--out-dir",35 generated,36 resolve(37 core,38 "target/wasm32-unknown-unknown/release/peach_noise_core.wasm",39 ),40]);4142mkdirSync(destination, { recursive: true });43for (const file of [44 "peach_noise_core.js",45 "peach_noise_core.d.ts",46 "peach_noise_core_bg.wasm",47 "peach_noise_core_bg.wasm.d.ts",48]) {49 copyFileSync(resolve(generated, file), resolve(destination, file));50}5152const bytes = readFileSync(wasm);53const base64 = bytes.toString("base64");54const chunks = base64.match(/.{1,120}/g) ?? [];55writeFileSync(56 resolve(destination, "peach_noise_core_bytes.ts"),57 [58 "// Generated by scripts/build-noise-core.mjs. Do not edit.",59 "export const PEACH_NOISE_CORE_WASM_BASE64 = [",60 ...chunks.map((chunk) => ` "${chunk}",`),61 '].join("");',62 "",63 ].join("\n"),64);6566const digest = createHash("sha256").update(bytes).digest("hex");67console.log(`Peach Noise WASM SHA-256: ${digest}`);68