Lumi/scripts/verify-preflight.js
2026-07-17 22:10:00 +02:00

37 lines
1.6 KiB
JavaScript

const path = require("path");
const root = path.join(__dirname, "..");
const minimumNodeMajor = 18;
function fail(message, details = []) {
console.error(`Verification preflight failed: ${message}`);
for (const detail of details) console.error(`- ${detail}`);
process.exitCode = 1;
}
const nodeMajor = Number.parseInt(process.versions.node.split(".")[0], 10);
if (!Number.isFinite(nodeMajor) || nodeMajor < minimumNodeMajor) {
fail(`Lumi requires Node.js ${minimumNodeMajor} or newer; this process is ${process.version}.`, [
"Install a supported Node.js release, reopen the terminal, then run npm install."
]);
} else {
try {
const BetterSqlite3 = require("better-sqlite3");
const database = new BetterSqlite3(":memory:");
database.prepare("SELECT 1 AS ready").get();
database.close();
} catch (error) {
fail("The better-sqlite3 native module is missing or incompatible with this Node.js installation.", [
`Node: ${process.version} (${process.platform} ${process.arch})`,
`Module error: ${error.message}`,
`From ${root}, run npm install. Do not use --ignore-scripts because native modules must be built or downloaded.`,
"If Node.js was upgraded after installation, run npm rebuild better-sqlite3 or remove node_modules and run npm install again.",
"On Linux, ensure a compiler toolchain and Python are available if no prebuilt binary exists."
]);
}
}
if (!process.exitCode) {
console.log(`Verification preflight passed: Node ${process.version}, better-sqlite3 loaded (${process.platform} ${process.arch}).`);
}