87 lines
2.4 KiB
JavaScript
87 lines
2.4 KiB
JavaScript
// This file allows using Node.js in combination with
|
|
// all available plugins. Usage: "node run <script>"
|
|
import * as util from "node:util";
|
|
import * as zlib from "node:zlib";
|
|
import * as url from "node:url";
|
|
import process from "node:process";
|
|
|
|
if (!zlib.zstdCompress) {
|
|
const brand = process.versions.bun
|
|
? `bun ${process.versions.bun}`
|
|
: process.versions.deno
|
|
? `deno ${process.versions.deno}`
|
|
: null;
|
|
|
|
globalThis.console.error(
|
|
`sitegen depends on a node.js-compatibile runtime\n` +
|
|
`this is node.js version ${process.version}${
|
|
brand ? ` (${brand})` : ""
|
|
}\n\n` +
|
|
`get node.js --> https://nodejs.org/en/download/current`,
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
// Disable experimental warnings (Type Stripping, etc)
|
|
const { emit: originalEmit } = process;
|
|
const warnings = ["ExperimentalWarning"];
|
|
process.emit = function (event, error) {
|
|
return event === "warning" && warnings.includes(error.name)
|
|
? false
|
|
: originalEmit.apply(process, arguments);
|
|
};
|
|
|
|
// Init hooks
|
|
const hot = await import("./framework/hot.ts");
|
|
await import("#debug");
|
|
|
|
const console = hot.load("@paperclover/console");
|
|
globalThis.console["log"] = console.info;
|
|
globalThis.console.info = console.info;
|
|
globalThis.console.warn = console.warn;
|
|
globalThis.console.error = console.error;
|
|
globalThis.console.debug = console.scoped("dbg");
|
|
|
|
// Load with hooks
|
|
if (process.argv[1].startsWith(import.meta.filename.slice(0, -".js".length))) {
|
|
if (process.argv.length == 2) {
|
|
console.error("usage: node run <script> [...args]");
|
|
process.exit(1);
|
|
}
|
|
let found;
|
|
for (const dir of ["./", "./src/", "./framework/"]) {
|
|
try {
|
|
found = hot.resolveFrom(import.meta.filename, dir + process.argv[2]);
|
|
break;
|
|
} catch (e) {
|
|
continue;
|
|
}
|
|
}
|
|
if (!found) {
|
|
console.error("Cannot find script: " + process.argv[2]);
|
|
process.exit(1);
|
|
}
|
|
process.argv = [process.argv[0], ...process.argv.slice(2)];
|
|
try {
|
|
const mod = await hot.load(found);
|
|
if (mod.main) mod.main();
|
|
else if (mod.default?.fetch) {
|
|
const protocol = "http";
|
|
const { serve } = hot.load("@hono/node-server");
|
|
serve({
|
|
fetch: mod.default.fetch,
|
|
}, ({ address, port }) => {
|
|
if (address === "::") address = "::1";
|
|
console.info(url.format({
|
|
protocol,
|
|
hostname: address,
|
|
port,
|
|
}));
|
|
});
|
|
}
|
|
} catch (e) {
|
|
console.error(util.inspect(e));
|
|
}
|
|
}
|
|
|
|
export { hot };
|