Files
Chris Tate 37a25ebf7f Support stable bundled loaders and native console imports
- Statically resolve stable let/var createRequire bindings while rejecting mutation, escape, and early use.
- Compile node:console output methods to native process streams and retain explicit custom Console refusals.
2026-09-27 22:20:25 -05:00

44 lines
1.4 KiB
TypeScript

import { createRequire, isBuiltin, syncBuiltinESMExports } from "node:module";
const require = createRequire(import.meta.url);
const local = require("./local.cjs");
var bundledRequire = createRequire(import.meta.url);
let stableRequire = createRequire(import.meta.url);
const bundledLocal = bundledRequire("./local.cjs");
const stableFactory = stableRequire("./factory.cjs") as (value: string) => string;
console.log("bundled:", bundledLocal.add(10, 20), stableFactory("stable"));
console.log("local:", local.add(19, 23), local.label);
const projectAlias = require("#local");
console.log("alias:", projectAlias.add(2, 3), projectAlias.label);
const { add: plus, label } = require("./local.cjs") as { add(a: number, b: number): number; label: string };
console.log("destructure:", plus(7, 8), label);
const decorate = require("./factory.cjs") as (value: string) => string;
console.log("factory:", decorate("static"));
require("./side.cjs");
require("./side.cjs");
console.log(
"builtins:",
isBuiltin("fs"),
isBuiltin("node:fs"),
isBuiltin("test"),
isBuiltin("node:test"),
isBuiltin("node:nope"),
);
function checkBuiltin(name: string): boolean {
return isBuiltin(name);
}
const runtimeName = process.argv.length > 2 ? process.argv[2]! : "node:fs";
console.log("runtime builtin:", checkBuiltin(runtimeName));
syncBuiltinESMExports();
console.log("sync: undefined");