import console from "node:console"; import { existsSync, mkdtempSync, readFileSync, rmSync } from "node:fs"; import { tmpdir } from "node:os"; import { join, relative, resolve } from "node:path"; import { spawnSync } from "node:child_process"; import process from "node:process"; const root = resolve(import.meta.dirname, ".."); const source = join(root, "editors", "vscode", "src", "extension.js"); const destination = join(root, "editors", "vscode", "src", "extension.bundle.cjs"); const check = process.argv.includes("--check"); const temporary = check ? mkdtempSync(join(tmpdir(), "wrnexus-editor-extension-")) : null; const output = temporary ? join(temporary, "extension.bundle.cjs") : destination; try { const built = spawnSync( process.env.WRNEXUS_BUN_BINARY || "bun", ["build", source, "--target=node", "--format=cjs", "--external=vscode", `--outfile=${output}`], { cwd: root, encoding: "utf8" }, ); if (built.status !== 0) throw new Error(built.stderr || built.stdout || "extension bundle failed"); if (check) { if (!existsSync(destination) || readFileSync(destination).compare(readFileSync(output)) !== 0) throw new Error( `${relative(root, destination)} is stale. Run bun run --cwd editors/vscode build.`, ); console.log(`Verified ${relative(root, destination)} matches extension sources.`); } else console.log(`Built ${relative(root, destination)}.`); } finally { if (temporary) rmSync(temporary, { recursive: true, force: true }); }