aboutsummaryrefslogtreecommitdiff
path: root/test/exports/generate-exports.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'test/exports/generate-exports.mjs')
-rw-r--r--test/exports/generate-exports.mjs211
1 files changed, 211 insertions, 0 deletions
diff --git a/test/exports/generate-exports.mjs b/test/exports/generate-exports.mjs
new file mode 100644
index 000000000..04565ac15
--- /dev/null
+++ b/test/exports/generate-exports.mjs
@@ -0,0 +1,211 @@
+// This generates a list of all the shapes of all builtin modules and their typeof values.
+//
+// To run:
+//
+// bun generate-exports.mjs > node-exports.bun-${version}.json
+// bun generate-exports.mjs bun > bun-exports.bun-${version}.json
+// node generate-exports.mjs > node-exports.node-$(node --version).json
+//
+import { createRequire } from "node:module";
+import process from "node:process";
+
+const nodeBuiltins = [
+ "_http_agent",
+ "_http_client",
+ "_http_common",
+ "_http_incoming",
+ "_http_outgoing",
+ "_http_server",
+ "_stream_duplex",
+ "_stream_passthrough",
+ "_stream_readable",
+ "_stream_transform",
+ "_stream_wrap",
+ "_stream_writable",
+ "_tls_common",
+ "_tls_wrap",
+ "assert",
+ "assert/strict",
+ "async_hooks",
+ "buffer",
+ "child_process",
+ "cluster",
+ "console",
+ "constants",
+ "crypto",
+ "dgram",
+ "diagnostics_channel",
+ "dns",
+ "dns/promises",
+ "domain",
+ "events",
+ "fs",
+ "fs/promises",
+ "http",
+ "http2",
+ "https",
+ "inspector",
+ "inspector/promises",
+ "module",
+ "net",
+ "os",
+ "path",
+ "path/posix",
+ "path/win32",
+ "perf_hooks",
+ "process",
+ "punycode",
+ "querystring",
+ "readline",
+ "readline/promises",
+ "repl",
+ "stream",
+ "stream/consumers",
+ "stream/promises",
+ "stream/web",
+ "string_decoder",
+ "sys",
+ "test/reporters",
+ "timers",
+ "timers/promises",
+ "tls",
+ "trace_events",
+ "tty",
+ "url",
+ "util",
+ "util/types",
+ "v8",
+ "vm",
+ "wasi",
+ "worker_threads",
+ "zlib",
+]
+ .map(a => "node:" + a)
+ .sort();
+
+const bunBuiltins = [
+ "buffer",
+ "bun:ffi",
+ "bun:jsc",
+ "bun:main",
+ "bun:sqlite",
+ "bun:events_native",
+ "detect-libc",
+ "node:assert",
+ "node:assert/strict",
+ "node:async_hooks",
+ "node:buffer",
+ "node:child_process",
+ "node:cluster",
+ "node:crypto",
+ "node:dgram",
+ "node:diagnostics_channel",
+ "node:dns",
+ "node:dns/promises",
+ "node:events",
+ "node:fs",
+ "node:fs/promises",
+ "node:http",
+ "node:http2",
+ "node:https",
+ "node:inspector",
+ "node:module",
+ "node:net",
+ "node:os",
+ "node:path",
+ "node:path/posix",
+ "node:path/win32",
+ "node:perf_hooks",
+ "node:process",
+ "node:readline",
+ "node:readline/promises",
+ "node:repl",
+ "node:stream",
+ "node:stream/consumers",
+ "node:stream/promises",
+ "node:stream/web",
+ "node:string_decoder",
+ "node:timers",
+ "node:timers/promises",
+ "node:tls",
+ "node:trace_events",
+ "node:tty",
+ "node:url",
+ "node:util",
+ "node:util/types",
+ "node:v8",
+ "node:vm",
+ "node:wasi",
+ "node:zlib",
+].sort();
+
+const require = createRequire(import.meta.url);
+
+const imported = {};
+const required = {};
+const errors = {};
+
+function resolveNested([key, v], stop) {
+ let nested;
+ if ((v && typeof v === "object") || typeof v === "function") {
+ const entries = Object.fromEntries(
+ Object.entries(v)
+ .map(([ak, av]) => {
+ var display = typeof av;
+
+ if (av && (typeof av === "function" || typeof av === "object")) {
+ const list = Object.fromEntries(
+ Object.entries(av)
+ .map(([ak2, av2]) => [ak2, typeof av2])
+ .sort(),
+ );
+
+ for (let key in list) {
+ display = list;
+ break;
+ }
+ }
+
+ return [ak, display];
+ })
+ .sort(),
+ );
+
+ for (let key in entries) {
+ nested = entries;
+ break;
+ }
+ }
+
+ return [key, nested || typeof v];
+}
+
+async function processBuiltins(builtins) {
+ for (const builtin of builtins) {
+ try {
+ imported[builtin] = Object.fromEntries(
+ Object.entries(await import(builtin))
+ .map(resolveNested)
+ .sort(),
+ );
+ required[builtin] = Object.fromEntries(Object.entries(require(builtin)).map(resolveNested).sort());
+ } catch ({ name, message }) {
+ errors[builtin] = { name, message };
+ }
+ }
+}
+
+process.stdout.write(
+ JSON.stringify(
+ {
+ builtins: await processBuiltins(process.argv.at(-1) === "bun" ? bunBuiltins : nodeBuiltins),
+ import: imported,
+ require: required,
+ runtime: typeof Bun !== "undefined" ? "bun" : "node",
+ version: typeof Bun !== "undefined" ? Bun.version : process.version,
+ errors,
+ },
+ null,
+ 2,
+ ),
+);