aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.cpp1
-rw-r--r--src/bun.js/builtins/BunBuiltinNames.h3
-rw-r--r--src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp36
-rw-r--r--src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.h9
-rw-r--r--src/bun.js/builtins/js/ImportMetaObject.js17
5 files changed, 49 insertions, 17 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp
index 0d88ceac6..74b8eab9e 100644
--- a/src/bun.js/bindings/ZigGlobalObject.cpp
+++ b/src/bun.js/bindings/ZigGlobalObject.cpp
@@ -3063,6 +3063,7 @@ void GlobalObject::addBuiltinGlobals(JSC::VM& vm)
putDirectBuiltinFunction(vm, this, builtinNames.requireESMPrivateName(), importMetaObjectRequireESMCodeGenerator(vm), PropertyAttribute::Builtin | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly);
putDirectBuiltinFunction(vm, this, builtinNames.requirePrivateName(), importMetaObjectRequireCodeGenerator(vm), PropertyAttribute::Builtin | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly);
putDirectBuiltinFunction(vm, this, builtinNames.loadCJS2ESMPrivateName(), importMetaObjectLoadCJS2ESMCodeGenerator(vm), PropertyAttribute::Builtin | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly);
+ putDirectBuiltinFunction(vm, this, builtinNames.internalRequirePrivateName(), importMetaObjectInternalRequireCodeGenerator(vm), PropertyAttribute::Builtin | PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly);
putDirectNativeFunction(vm, this, builtinNames.createUninitializedArrayBufferPrivateName(), 1, functionCreateUninitializedArrayBuffer, ImplementationVisibility::Public, NoIntrinsic, PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly | PropertyAttribute::Function);
putDirectNativeFunction(vm, this, builtinNames.resolveSyncPrivateName(), 1, functionImportMeta__resolveSync, ImplementationVisibility::Public, NoIntrinsic, PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly | PropertyAttribute::Function);
diff --git a/src/bun.js/builtins/BunBuiltinNames.h b/src/bun.js/builtins/BunBuiltinNames.h
index eb782597a..535ae2b5c 100644
--- a/src/bun.js/builtins/BunBuiltinNames.h
+++ b/src/bun.js/builtins/BunBuiltinNames.h
@@ -35,6 +35,7 @@ using namespace JSC;
macro(WritableStream) \
macro(WritableStreamDefaultController) \
macro(WritableStreamDefaultWriter) \
+ macro(_events) \
macro(abortAlgorithm) \
macro(abortSteps) \
macro(addEventListener) \
@@ -120,6 +121,7 @@ using namespace JSC;
macro(inFlightCloseRequest) \
macro(inFlightWriteRequest) \
macro(initializeWith) \
+ macro(internalRequire) \
macro(internalStream) \
macro(internalWritable) \
macro(isAbortSignal) \
@@ -245,7 +247,6 @@ using namespace JSC;
macro(writer) \
macro(writing) \
macro(written) \
- macro(_events) \
BUN_ADDITIONAL_PRIVATE_IDENTIFIERS(macro) \
class BunBuiltinNames {
diff --git a/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp b/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp
index 360168176..a6a62ed62 100644
--- a/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp
+++ b/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp
@@ -195,18 +195,15 @@ const char* const s_importMetaObjectRequireESMCode =
"})\n" \
;
-const JSC::ConstructAbility s_importMetaObjectRequireCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
-const JSC::ConstructorKind s_importMetaObjectRequireCodeConstructorKind = JSC::ConstructorKind::None;
-const JSC::ImplementationVisibility s_importMetaObjectRequireCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
-const int s_importMetaObjectRequireCodeLength = 1133;
-static const JSC::Intrinsic s_importMetaObjectRequireCodeIntrinsic = JSC::NoIntrinsic;
-const char* const s_importMetaObjectRequireCode =
- "(function (name) {\n" \
+const JSC::ConstructAbility s_importMetaObjectInternalRequireCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
+const JSC::ConstructorKind s_importMetaObjectInternalRequireCodeConstructorKind = JSC::ConstructorKind::None;
+const JSC::ImplementationVisibility s_importMetaObjectInternalRequireCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
+const int s_importMetaObjectInternalRequireCodeLength = 983;
+static const JSC::Intrinsic s_importMetaObjectInternalRequireCodeIntrinsic = JSC::NoIntrinsic;
+const char* const s_importMetaObjectInternalRequireCode =
+ "(function (resolved) {\n" \
" \"use strict\";\n" \
- " if (typeof name !== \"string\") {\n" \
- " @throwTypeError(\"require() expects a string as its argument\");\n" \
- " }\n" \
- " const resolved = @resolveSync(name, this.path);\n" \
+ "\n" \
" var cached = @requireMap.@get(resolved);\n" \
" const last5 = resolved.substring(resolved.length - 5);\n" \
" if (cached) {\n" \
@@ -241,6 +238,23 @@ const char* const s_importMetaObjectRequireCode =
"})\n" \
;
+const JSC::ConstructAbility s_importMetaObjectRequireCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
+const JSC::ConstructorKind s_importMetaObjectRequireCodeConstructorKind = JSC::ConstructorKind::None;
+const JSC::ImplementationVisibility s_importMetaObjectRequireCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
+const int s_importMetaObjectRequireCodeLength = 222;
+static const JSC::Intrinsic s_importMetaObjectRequireCodeIntrinsic = JSC::NoIntrinsic;
+const char* const s_importMetaObjectRequireCode =
+ "(function (name) {\n" \
+ " const from = this?.path ?? arguments.callee.path;\n" \
+ "\n" \
+ " if (typeof name !== \"string\") {\n" \
+ " @throwTypeError(\"require(name) must be a string\");\n" \
+ " }\n" \
+ "\n" \
+ " return @internalRequire(@resolveSync(name, from));\n" \
+ "})\n" \
+;
+
#define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \
JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \
diff --git a/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.h b/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.h
index 5cc424ec8..d47c86980 100644
--- a/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.h
+++ b/src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.h
@@ -57,6 +57,11 @@ extern const int s_importMetaObjectRequireESMCodeLength;
extern const JSC::ConstructAbility s_importMetaObjectRequireESMCodeConstructAbility;
extern const JSC::ConstructorKind s_importMetaObjectRequireESMCodeConstructorKind;
extern const JSC::ImplementationVisibility s_importMetaObjectRequireESMCodeImplementationVisibility;
+extern const char* const s_importMetaObjectInternalRequireCode;
+extern const int s_importMetaObjectInternalRequireCodeLength;
+extern const JSC::ConstructAbility s_importMetaObjectInternalRequireCodeConstructAbility;
+extern const JSC::ConstructorKind s_importMetaObjectInternalRequireCodeConstructorKind;
+extern const JSC::ImplementationVisibility s_importMetaObjectInternalRequireCodeImplementationVisibility;
extern const char* const s_importMetaObjectRequireCode;
extern const int s_importMetaObjectRequireCodeLength;
extern const JSC::ConstructAbility s_importMetaObjectRequireCodeConstructAbility;
@@ -66,18 +71,22 @@ extern const JSC::ImplementationVisibility s_importMetaObjectRequireCodeImplemen
#define WEBCORE_FOREACH_IMPORTMETAOBJECT_BUILTIN_DATA(macro) \
macro(loadCJS2ESM, importMetaObjectLoadCJS2ESM, 1) \
macro(requireESM, importMetaObjectRequireESM, 1) \
+ macro(internalRequire, importMetaObjectInternalRequire, 1) \
macro(require, importMetaObjectRequire, 1) \
#define WEBCORE_BUILTIN_IMPORTMETAOBJECT_LOADCJS2ESM 1
#define WEBCORE_BUILTIN_IMPORTMETAOBJECT_REQUIREESM 1
+#define WEBCORE_BUILTIN_IMPORTMETAOBJECT_INTERNALREQUIRE 1
#define WEBCORE_BUILTIN_IMPORTMETAOBJECT_REQUIRE 1
#define WEBCORE_FOREACH_IMPORTMETAOBJECT_BUILTIN_CODE(macro) \
macro(importMetaObjectLoadCJS2ESMCode, loadCJS2ESM, ASCIILiteral(), s_importMetaObjectLoadCJS2ESMCodeLength) \
macro(importMetaObjectRequireESMCode, requireESM, ASCIILiteral(), s_importMetaObjectRequireESMCodeLength) \
+ macro(importMetaObjectInternalRequireCode, internalRequire, ASCIILiteral(), s_importMetaObjectInternalRequireCodeLength) \
macro(importMetaObjectRequireCode, require, ASCIILiteral(), s_importMetaObjectRequireCodeLength) \
#define WEBCORE_FOREACH_IMPORTMETAOBJECT_BUILTIN_FUNCTION_NAME(macro) \
+ macro(internalRequire) \
macro(loadCJS2ESM) \
macro(require) \
macro(requireESM) \
diff --git a/src/bun.js/builtins/js/ImportMetaObject.js b/src/bun.js/builtins/js/ImportMetaObject.js
index bb943aabf..e785723c3 100644
--- a/src/bun.js/builtins/js/ImportMetaObject.js
+++ b/src/bun.js/builtins/js/ImportMetaObject.js
@@ -158,12 +158,9 @@ function requireESM(resolved) {
return exports;
}
-function require(name) {
+function internalRequire(resolved) {
"use strict";
- if (typeof name !== "string") {
- @throwTypeError("require() expects a string as its argument");
- }
- const resolved = @resolveSync(name, this.path);
+
var cached = @requireMap.@get(resolved);
const last5 = resolved.substring(resolved.length - 5);
if (cached) {
@@ -195,4 +192,14 @@ function require(name) {
@requireMap.@set(resolved, exports);
return exports;
}
+}
+
+function require(name) {
+ const from = this?.path ?? arguments.callee.path;
+
+ if (typeof name !== "string") {
+ @throwTypeError("require(name) must be a string");
+ }
+
+ return @internalRequire(@resolveSync(name, from));
} \ No newline at end of file