forked from louisdevzz/foxfang
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfoxfang.cjs
More file actions
executable file
·81 lines (69 loc) · 2.01 KB
/
foxfang.cjs
File metadata and controls
executable file
·81 lines (69 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/usr/bin/env node
// Suppress Node.js warnings (e.g., SQLite experimental)
process.env.NODE_NO_WARNINGS = '1';
process.removeAllListeners('warning');
const nodeModule = require("node:module");
const { dirname, join } = require("node:path");
const { existsSync } = require("node:fs");
const MIN_NODE_MAJOR = 18;
const MIN_NODE_MINOR = 0;
const MIN_NODE_VERSION = `${MIN_NODE_MAJOR}.${MIN_NODE_MINOR}`;
const parseNodeVersion = (rawVersion) => {
const [majorRaw = "0", minorRaw = "0"] = rawVersion.split(".");
return {
major: Number(majorRaw),
minor: Number(minorRaw),
};
};
const isSupportedNodeVersion = (version) =>
version.major > MIN_NODE_MAJOR ||
(version.major === MIN_NODE_MAJOR && version.minor >= MIN_NODE_MINOR);
const ensureSupportedNodeVersion = () => {
if (isSupportedNodeVersion(parseNodeVersion(process.versions.node))) {
return;
}
process.stderr.write(
`foxfang: Node.js v${MIN_NODE_VERSION}+ is required (current: v${process.versions.node}).\n` +
"If you use nvm, run:\n" +
` nvm install ${MIN_NODE_MAJOR}\n` +
` nvm use ${MIN_NODE_MAJOR}\n` +
` nvm alias default ${MIN_NODE_MAJOR}\n`,
);
process.exit(1);
};
ensureSupportedNodeVersion();
// Enable compile cache for faster startup
if (nodeModule.enableCompileCache && !process.env.NODE_DISABLE_COMPILE_CACHE) {
try {
nodeModule.enableCompileCache();
} catch {
// Ignore errors
}
}
// Check for dist version first (production), then src (development)
const entryPoints = [
join(__dirname, "dist", "cli", "entry.js"),
join(__dirname, "src", "cli", "entry.ts"),
];
let loaded = false;
for (const entry of entryPoints) {
if (existsSync(entry)) {
try {
require(entry);
loaded = true;
break;
} catch (err) {
if (err.code === "MODULE_NOT_FOUND" || err.code === "ENOENT") {
continue;
}
throw err;
}
}
}
if (!loaded) {
process.stderr.write(
"foxfang: Failed to load entry point.\n" +
"Please run: pnpm build\n",
);
process.exit(1);
}