build-noise-core.mjs

1.8 KB · raw

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