import { existsSync } from "node:fs"; import path from "node:path"; import { spawn } from "node:child_process"; const root = process.cwd(); const nodecgDir = path.join(root, "lib", "nodecg"); const sqliteLegacyDir = path.join(nodecgDir, "workspaces", "database-adapter-sqlite-legacy"); const moduleDirs = [nodecgDir, sqliteLegacyDir].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); } /** @returns {Promise} */ 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_target: "39.5.1", npm_config_disturl: "https://electronjs.org/headers", }, }); child.on("exit", (code) => { if (code === 0) { resolve(); } else { reject(new Error(`${command} ${args.join(" ")} failed with code ${code}`)); } }); }); } for (const dir of moduleDirs) { if (dir === sqliteLegacyDir) { console.log(`\n[rebuild-native] Ensuring sqlite legacy workspace deps in: ${dir}`); await run("npm", ["install"], dir); await run("npm", ["install", "bindings", "--no-save"], dir); } console.log(`\n[rebuild-native] Rebuilding better-sqlite3 in: ${dir}`); await run( "npm", ["rebuild", "better-sqlite3", "--runtime=electron", "--target=39.5.1", "--dist-url=https://electronjs.org/headers"], dir, ); } console.log("\n[rebuild-native] Done.");