aboutsummaryrefslogtreecommitdiff
path: root/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js')
-rw-r--r--src/js/builtins.d.ts2
-rw-r--r--src/js/builtins/Module.ts15
-rw-r--r--src/js/out/WebCoreJSBuiltins.cpp12
-rw-r--r--src/js/out/WebCoreJSBuiltins.h11
-rw-r--r--src/js/private.d.ts2
5 files changed, 35 insertions, 7 deletions
diff --git a/src/js/builtins.d.ts b/src/js/builtins.d.ts
index ee7bd68cf..99bf4d98e 100644
--- a/src/js/builtins.d.ts
+++ b/src/js/builtins.d.ts
@@ -438,7 +438,7 @@ declare function $createCommonJSModule(
id: string,
exports: any,
hasEvaluated: boolean,
- parent: CommonJSModuleRecord,
+ parent: CommonJSModuleRecord | undefined,
): CommonJSModuleRecord;
declare function $overridableRequire(this: CommonJSModuleRecord, id: string): any;
diff --git a/src/js/builtins/Module.ts b/src/js/builtins/Module.ts
index b074d3488..3c9c2f1a0 100644
--- a/src/js/builtins/Module.ts
+++ b/src/js/builtins/Module.ts
@@ -9,7 +9,7 @@ export function require(this: CommonJSModuleRecord, id: string) {
// overridableRequire can be overridden by setting `Module.prototype.require`
export function overridableRequire(this: CommonJSModuleRecord, id: string) {
- const existing = $requireMap.$get(id) || $requireMap.$get((id = $resolveSync(id, this.path, false)));
+ const existing = $requireMap.$get(id) || $requireMap.$get((id = $resolveSync(id, this?.path ?? ".", false)));
if (existing) {
// Scenario where this is necessary:
//
@@ -46,8 +46,7 @@ export function overridableRequire(this: CommonJSModuleRecord, id: string) {
//
// Note: we do not need to wrap this in a try/catch, if it throws the C++ code will
// clear the module from the map.
- //
- var out = this.$require(id, mod);
+ var out = mod.$require(id, this?.id);
// -1 means we need to lookup the module from the ESM registry.
if (out === -1) {
@@ -86,3 +85,13 @@ export function requireNativeModule(id: string) {
}
return $requireESM(id).default;
}
+
+/** require('node:module')._load */
+export function moduleLoad(request: string, parentPath: CommonJSModuleRecord, isMain: string) {
+ // TODO: `isMain` does four things in node
+ // - sets `process.mainModule`
+ // - sets `module.require.main`
+ // - sets `module.id` to "."
+ // - would pass true to the third argument of _resolveFilename if overridden
+ return $overridableRequire.$call(parentPath, request);
+}
diff --git a/src/js/out/WebCoreJSBuiltins.cpp b/src/js/out/WebCoreJSBuiltins.cpp
index 31246276b..1cea1826b 100644
--- a/src/js/out/WebCoreJSBuiltins.cpp
+++ b/src/js/out/WebCoreJSBuiltins.cpp
@@ -786,13 +786,21 @@ const int s_moduleMainCodeLength = 68;
static const JSC::Intrinsic s_moduleMainCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_moduleMainCode = "(function () {\"use strict\";\n return @requireMap.@get(Bun.main);\n})\n";
+// moduleLoad
+const JSC::ConstructAbility s_moduleModuleLoadCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
+const JSC::ConstructorKind s_moduleModuleLoadCodeConstructorKind = JSC::ConstructorKind::None;
+const JSC::ImplementationVisibility s_moduleModuleLoadCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
+const int s_moduleModuleLoadCodeLength = 115;
+static const JSC::Intrinsic s_moduleModuleLoadCodeIntrinsic = JSC::NoIntrinsic;
+const char* const s_moduleModuleLoadCode = "(function (request, parentPath, isMain) {\"use strict\";\n return @overridableRequire.@call(parentPath, request);\n})\n";
+
// overridableRequire
const JSC::ConstructAbility s_moduleOverridableRequireCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_moduleOverridableRequireCodeConstructorKind = JSC::ConstructorKind::None;
const JSC::ImplementationVisibility s_moduleOverridableRequireCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
-const int s_moduleOverridableRequireCodeLength = 888;
+const int s_moduleOverridableRequireCodeLength = 900;
static const JSC::Intrinsic s_moduleOverridableRequireCodeIntrinsic = JSC::NoIntrinsic;
-const char* const s_moduleOverridableRequireCode = "(function (id) {\"use strict\";\n const existing = @requireMap.@get(id) || @requireMap.@get(id = @resolveSync(id, this.path, !1));\n if (existing)\n return @evaluateCommonJSModule(existing), existing.exports;\n if (id.endsWith(\".node\"))\n return @internalRequire(id);\n const mod = @createCommonJSModule(id, {}, !1, this);\n @requireMap.@set(id, mod);\n var out = this.@require(id, mod);\n if (out === -1) {\n try {\n out = @requireESM(id);\n } catch (exception) {\n throw @requireMap.@delete(id), exception;\n }\n const esm = @Loader.registry.@get(id);\n if (esm\?.evaluated && (esm.state \?\? 0) >= @ModuleReady) {\n const namespace = @Loader.getModuleNamespaceObject(esm.module);\n return mod.exports = namespace.__esModule \? namespace : Object.create(namespace, { __esModule: { value: !0 } });\n }\n }\n return @evaluateCommonJSModule(mod), mod.exports;\n})\n";
+const char* const s_moduleOverridableRequireCode = "(function (id) {\"use strict\";\n const existing = @requireMap.@get(id) || @requireMap.@get(id = @resolveSync(id, this\?.path \?\? \".\", !1));\n if (existing)\n return @evaluateCommonJSModule(existing), existing.exports;\n if (id.endsWith(\".node\"))\n return @internalRequire(id);\n const mod = @createCommonJSModule(id, {}, !1, this);\n @requireMap.@set(id, mod);\n var out = mod.@require(id, this\?.id);\n if (out === -1) {\n try {\n out = @requireESM(id);\n } catch (exception) {\n throw @requireMap.@delete(id), exception;\n }\n const esm = @Loader.registry.@get(id);\n if (esm\?.evaluated && (esm.state \?\? 0) >= @ModuleReady) {\n const namespace = @Loader.getModuleNamespaceObject(esm.module);\n return mod.exports = namespace.__esModule \? namespace : Object.create(namespace, { __esModule: { value: !0 } });\n }\n }\n return @evaluateCommonJSModule(mod), mod.exports;\n})\n";
// require
const JSC::ConstructAbility s_moduleRequireCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
diff --git a/src/js/out/WebCoreJSBuiltins.h b/src/js/out/WebCoreJSBuiltins.h
index 3c6ade197..5b8c0b267 100644
--- a/src/js/out/WebCoreJSBuiltins.h
+++ b/src/js/out/WebCoreJSBuiltins.h
@@ -1506,6 +1506,14 @@ extern const JSC::ConstructAbility s_moduleMainCodeConstructAbility;
extern const JSC::ConstructorKind s_moduleMainCodeConstructorKind;
extern const JSC::ImplementationVisibility s_moduleMainCodeImplementationVisibility;
+// moduleLoad
+#define WEBCORE_BUILTIN_MODULE_MODULELOAD 1
+extern const char* const s_moduleModuleLoadCode;
+extern const int s_moduleModuleLoadCodeLength;
+extern const JSC::ConstructAbility s_moduleModuleLoadCodeConstructAbility;
+extern const JSC::ConstructorKind s_moduleModuleLoadCodeConstructorKind;
+extern const JSC::ImplementationVisibility s_moduleModuleLoadCodeImplementationVisibility;
+
// overridableRequire
#define WEBCORE_BUILTIN_MODULE_OVERRIDABLEREQUIRE 1
extern const char* const s_moduleOverridableRequireCode;
@@ -1540,6 +1548,7 @@ extern const JSC::ImplementationVisibility s_moduleRequireResolveCodeImplementat
#define WEBCORE_FOREACH_MODULE_BUILTIN_DATA(macro) \
macro(main, moduleMain, 0) \
+ macro(moduleLoad, moduleModuleLoad, 3) \
macro(overridableRequire, moduleOverridableRequire, 1) \
macro(require, moduleRequire, 1) \
macro(requireNativeModule, moduleRequireNativeModule, 1) \
@@ -1547,6 +1556,7 @@ extern const JSC::ImplementationVisibility s_moduleRequireResolveCodeImplementat
#define WEBCORE_FOREACH_MODULE_BUILTIN_CODE(macro) \
macro(moduleMainCode, main, "get main"_s, s_moduleMainCodeLength) \
+ macro(moduleModuleLoadCode, moduleLoad, ASCIILiteral(), s_moduleModuleLoadCodeLength) \
macro(moduleOverridableRequireCode, overridableRequire, ASCIILiteral(), s_moduleOverridableRequireCodeLength) \
macro(moduleRequireCode, require, ASCIILiteral(), s_moduleRequireCodeLength) \
macro(moduleRequireNativeModuleCode, requireNativeModule, ASCIILiteral(), s_moduleRequireNativeModuleCodeLength) \
@@ -1554,6 +1564,7 @@ extern const JSC::ImplementationVisibility s_moduleRequireResolveCodeImplementat
#define WEBCORE_FOREACH_MODULE_BUILTIN_FUNCTION_NAME(macro) \
macro(main) \
+ macro(moduleLoad) \
macro(overridableRequire) \
macro(require) \
macro(requireNativeModule) \
diff --git a/src/js/private.d.ts b/src/js/private.d.ts
index 77f4d5536..2ca8d630f 100644
--- a/src/js/private.d.ts
+++ b/src/js/private.d.ts
@@ -215,7 +215,7 @@ interface BunLazyModules {
declare var $exports: any;
interface CommonJSModuleRecord {
- $require(id: string, mod: any): any;
+ $require(this: CommonJSModuleRecord, id: string, parent: string | undefined): any;
children: CommonJSModuleRecord[];
exports: any;
id: string;