import { existsSync } from "node:fs"; import path from "node:path"; import { spawn } from "node:child_process"; const root = process.cwd(); const candidates = [ path.join(root, "lib", "nodecg"), path.join(root, "lib", "nodecg", "workspaces", "database-adapter-sqlite-legacy"), ]; const moduleDirs = candidates.filter((dir) => existsSync(path.join(dir, "package.json"))); if (moduleDirs.length === 0) { console.error("No NodeCG package folders found. Expected lib/nodecg and/or workspaces."); process.exit(1); } function run(command, args, cwd) { return new Promise((resolve, reject) => { const child = spawn(command, args, { cwd, stdio: "inherit", shell: process.platform === "win32", env: { ...process.env, npm_config_runtime: "electron", npm_config_build_from_source: "false", }, }); child.on("exit", (code) => { if (code === 0) { resolve(); } else { reject(new Error(`${command} ${args.join(" ")} failed with code ${code}`)); } }); }); } for (const dir of moduleDirs) { console.log(`\n[rebuild-native] Rebuilding native modules in: ${dir}`); await run("npx", ["electron-rebuild", "--force", "--only", "better-sqlite3"], dir); } console.log("\n[rebuild-native] Done.");