diff options
author | 2023-01-18 14:59:39 -0800 | |
---|---|---|
committer | 2023-01-18 14:59:39 -0800 | |
commit | 7012d2fb7407739d8cb8eb09e726ac288a485683 (patch) | |
tree | 9088d270fb275dbc30a3aeca03501769fd1e7e3c | |
parent | 2db04ef9d9ddf6531b0a77c3b0867bc80388a039 (diff) | |
download | bun-7012d2fb7407739d8cb8eb09e726ac288a485683.tar.gz bun-7012d2fb7407739d8cb8eb09e726ac288a485683.tar.zst bun-7012d2fb7407739d8cb8eb09e726ac288a485683.zip |
Fixes #1831
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 1 | ||||
-rw-r--r-- | src/bun.js/builtins/BunBuiltinNames.h | 3 | ||||
-rw-r--r-- | src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.cpp | 36 | ||||
-rw-r--r-- | src/bun.js/builtins/cpp/ImportMetaObjectBuiltins.h | 9 | ||||
-rw-r--r-- | src/bun.js/builtins/js/ImportMetaObject.js | 17 |
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 |