aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/builtins
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-25 04:41:20 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-25 04:41:20 -0700
commit8fbd92e37de61766a72fe0c4a1c98a5fb058c00c (patch)
treec8cbe1fa0b0d5251f0835057b9fdd3e3bc51651a /src/bun.js/builtins
parent7bb75f55530e52447b9c68bc5b0908bf734ba184 (diff)
downloadbun-8fbd92e37de61766a72fe0c4a1c98a5fb058c00c.tar.gz
bun-8fbd92e37de61766a72fe0c4a1c98a5fb058c00c.tar.zst
bun-8fbd92e37de61766a72fe0c4a1c98a5fb058c00c.zip
Cleanup some of the require code
Diffstat (limited to 'src/bun.js/builtins')
-rw-r--r--src/bun.js/builtins/BunBuiltinNames.h2
-rw-r--r--src/bun.js/builtins/cpp/JSZigGlobalObjectBuiltins.cpp183
-rw-r--r--src/bun.js/builtins/cpp/WebCoreJSBuiltinInternals.h1
-rw-r--r--src/bun.js/builtins/js/JSZigGlobalObject.js24
4 files changed, 118 insertions, 92 deletions
diff --git a/src/bun.js/builtins/BunBuiltinNames.h b/src/bun.js/builtins/BunBuiltinNames.h
index 6acd30a8b..c41d368b4 100644
--- a/src/bun.js/builtins/BunBuiltinNames.h
+++ b/src/bun.js/builtins/BunBuiltinNames.h
@@ -62,6 +62,7 @@ using namespace JSC;
macro(closedPromise) \
macro(closedPromiseCapability) \
macro(code) \
+ macro(commonJSSymbol) \
macro(connect) \
macro(consumeReadableStream) \
macro(controlledReadableStream) \
@@ -177,6 +178,7 @@ using namespace JSC;
macro(releaseLock) \
macro(removeEventListener) \
macro(require) \
+ macro(requireMap) \
macro(requireModule) \
macro(resolve) \
macro(resolveSync) \
diff --git a/src/bun.js/builtins/cpp/JSZigGlobalObjectBuiltins.cpp b/src/bun.js/builtins/cpp/JSZigGlobalObjectBuiltins.cpp
index 421ba1181..583a035d8 100644
--- a/src/bun.js/builtins/cpp/JSZigGlobalObjectBuiltins.cpp
+++ b/src/bun.js/builtins/cpp/JSZigGlobalObjectBuiltins.cpp
@@ -49,7 +49,7 @@ namespace WebCore {
const JSC::ConstructAbility s_jsZigGlobalObjectRequireCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_jsZigGlobalObjectRequireCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_jsZigGlobalObjectRequireCodeLength = 1221;
+const int s_jsZigGlobalObjectRequireCodeLength = 1162;
static const JSC::Intrinsic s_jsZigGlobalObjectRequireCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_jsZigGlobalObjectRequireCode =
"(function (name) {\n" \
@@ -59,36 +59,36 @@ const char* const s_jsZigGlobalObjectRequireCode =
" }\n" \
" \n" \
" const resolved = this.resolveSync(name, this.path);\n" \
- " var requireCache = (globalThis[Symbol.for(\"_requireCache\")] ||= new @Map);\n" \
- " var cached = requireCache.@get(resolved);\n" \
+ " var cached = @requireMap.@get(resolved);\n" \
+ " const last5 = resolved.substring(resolved.length - 5);\n" \
" if (cached) {\n" \
- " if (resolved.endsWith(\".node\")) {\n" \
+ " if (last5 === \".node\") {\n" \
" return cached.exports;\n" \
" }\n" \
"\n" \
" return cached;\n" \
" }\n" \
"\n" \
- "\n" \
+ " \n" \
" //\n" \
- " if (resolved.endsWith(\".json\")) {\n" \
+ " if (last5 === \".json\") {\n" \
" var fs = (globalThis[Symbol.for(\"_fs\")] ||= Bun.fs());\n" \
" var exports = JSON.parse(fs.readFileSync(resolved, \"utf8\"));\n" \
- " requireCache.@set(resolved, exports);\n" \
+ " @requireMap.@set(resolved, exports);\n" \
" return exports;\n" \
- " } else if (resolved.endsWith(\".node\")) {\n" \
+ " } else if (last5 === \".node\") {\n" \
" var module = { exports: {} };\n" \
" globalThis.process.dlopen(module, resolved);\n" \
- " requireCache.@set(resolved, module);\n" \
+ " @requireMap.@set(resolved, module);\n" \
" return module.exports;\n" \
- " } else if (resolved.endsWith(\".toml\")) {\n" \
+ " } else if (last5 === \".toml\") {\n" \
" var fs = (globalThis[Symbol.for(\"_fs\")] ||= Bun.fs());\n" \
" var exports = Bun.TOML.parse(fs.readFileSync(resolved, \"utf8\"));\n" \
- " requireCache.@set(resolved, exports);\n" \
+ " @requireMap.@set(resolved, exports);\n" \
" return exports;\n" \
" } else {\n" \
" var exports = this.requireModule(this, resolved);\n" \
- " requireCache.@set(resolved, exports);\n" \
+ " @requireMap.@set(resolved, exports);\n" \
" return exports;\n" \
" }\n" \
"})\n" \
@@ -96,94 +96,117 @@ const char* const s_jsZigGlobalObjectRequireCode =
const JSC::ConstructAbility s_jsZigGlobalObjectLoadModuleCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_jsZigGlobalObjectLoadModuleCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_jsZigGlobalObjectLoadModuleCodeLength = 2783;
+const int s_jsZigGlobalObjectLoadModuleCodeLength = 2750;
static const JSC::Intrinsic s_jsZigGlobalObjectLoadModuleCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_jsZigGlobalObjectLoadModuleCode =
"(function (meta, resolvedSpecifier) {\n" \
" \"use strict\";\n" \
- " var queue = @createFIFO();\n" \
- " var key = resolvedSpecifier;\n" \
- " \n" \
- " var Loader = globalThis.Loader;\n" \
- " var registry = Loader.registry;\n" \
- " while (key) {\n" \
- " @fulfillModuleSync(key);\n" \
- " var entry = registry.@get(key);\n" \
+ " var Loader = globalThis.Loader;\n" \
"\n" \
- " //\n" \
- " //\n" \
- " //\n" \
- " //\n" \
- " var sourceCodeObject = @getPromiseInternalField(entry.fetch, @promiseFieldReactionsOrResult);\n" \
- " \n" \
+ " var queue = @createFIFO();\n" \
+ " var key = resolvedSpecifier;\n" \
+ " var registry = Loader.registry;\n" \
+ " while (key) {\n" \
+ " @fulfillModuleSync(key);\n" \
+ " var entry = registry.@get(key);\n" \
+ "\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " var sourceCodeObject = @getPromiseInternalField(\n" \
+ " entry.fetch,\n" \
+ " @promiseFieldReactionsOrResult\n" \
+ " );\n" \
+ "\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " var moduleRecordPromise = Loader.parseModule(key, sourceCodeObject);\n" \
+ " var module = entry.module;\n" \
+ " if (!module && moduleRecordPromise && @isPromise(moduleRecordPromise)) {\n" \
+ " var reactionsOrResult = @getPromiseInternalField(\n" \
+ " moduleRecordPromise,\n" \
+ " @promiseFieldReactionsOrResult\n" \
+ " );\n" \
+ " var flags = @getPromiseInternalField(\n" \
+ " moduleRecordPromise,\n" \
+ " @promiseFieldFlags\n" \
+ " );\n" \
+ " var state = flags & @promiseStateMask;\n" \
"\n" \
" //\n" \
+ " if (\n" \
+ " state === @promiseStatePending ||\n" \
+ " (reactionsOrResult && @isPromise(reactionsOrResult))\n" \
+ " ) {\n" \
+ " @throwTypeError(`require() async module \\\"${key}\\\" is unsupported`);\n" \
+ " } else if (state === @promiseStateRejected) {\n" \
+ " //\n" \
+ " //\n" \
+ " @throwTypeError(\n" \
+ " `${\n" \
+ " reactionsOrResult?.message ?? \"An error occurred\"\n" \
+ " } while parsing module \\\"${key}\\\"`\n" \
+ " );\n" \
+ " }\n" \
+ " entry.module = module = reactionsOrResult;\n" \
+ " } else if (moduleRecordPromise && !module) {\n" \
+ " entry.module = module = moduleRecordPromise;\n" \
+ " }\n" \
+ "\n" \
+ " //\n" \
+ " @setStateToMax(entry, @ModuleLink);\n" \
+ " var dependenciesMap = module.dependenciesMap;\n" \
+ " var requestedModules = Loader.requestedModules(module);\n" \
+ " var dependencies = @newArrayWithSize(requestedModules.length);\n" \
+ "\n" \
+ " for (var i = 0, length = requestedModules.length; i < length; ++i) {\n" \
+ " var depName = requestedModules[i];\n" \
+ "\n" \
" //\n" \
" //\n" \
- " var moduleRecordPromise = Loader.parseModule(key, sourceCodeObject);\n" \
- " var module = entry.module;\n" \
- " if (!module && moduleRecordPromise && @isPromise(moduleRecordPromise)) {\n" \
- " var reactionsOrResult = @getPromiseInternalField(moduleRecordPromise, @promiseFieldReactionsOrResult);\n" \
- " var flags = @getPromiseInternalField(moduleRecordPromise, @promiseFieldFlags);\n" \
- " var state = flags & @promiseStateMask;\n" \
+ " var depKey =\n" \
+ " depName[0] === \"/\"\n" \
+ " ? depName\n" \
+ " : Loader.resolveSync(depName, key, @undefined);\n" \
+ " var depEntry = Loader.ensureRegistered(depKey);\n" \
"\n" \
- " //\n" \
- " if (state === @promiseStatePending || (reactionsOrResult && @isPromise(reactionsOrResult))) {\n" \
- " @throwTypeError(`require() async module \\\"${key}\\\" is unsupported`);\n" \
- " \n" \
- " } else if (state === @promiseStateRejected) {\n" \
- " //\n" \
- " //\n" \
- " @throwTypeError(`${reactionsOrResult?.message ?? \"An error occurred\"} while parsing module \\\"${key}\\\"`);\n" \
- " }\n" \
- " entry.module = module = reactionsOrResult;\n" \
- " } else if (moduleRecordPromise && !module) {\n" \
- " entry.module = module = moduleRecordPromise;\n" \
+ " if (depEntry.state < @ModuleLink) {\n" \
+ " queue.push(depKey);\n" \
" }\n" \
"\n" \
- " //\n" \
- " @setStateToMax(entry, @ModuleLink);\n" \
- " var dependenciesMap = module.dependenciesMap;\n" \
- " var requestedModules = Loader.requestedModules(module);\n" \
- " var dependencies = @newArrayWithSize(requestedModules.length);\n" \
- " \n" \
- " for (var i = 0, length = requestedModules.length; i < length; ++i) {\n" \
- " var depName = requestedModules[i];\n" \
- "\n" \
- " //\n" \
- " //\n" \
- " var depKey = depName[0] === '/' ? depName : Loader.resolveSync(depName, key, @undefined);\n" \
- " var depEntry = Loader.ensureRegistered(depKey);\n" \
- "\n" \
- " if (depEntry.state < @ModuleLink) {\n" \
- " queue.push(depKey);\n" \
- " }\n" \
- "\n" \
- " @putByValDirect(dependencies, i, depEntry);\n" \
- " dependenciesMap.@set(depName, depEntry);\n" \
- " }\n" \
- "\n" \
- " entry.dependencies = dependencies;\n" \
- " key = queue.shift();\n" \
- " while (key && ((registry.@get(key)?.state ?? @ModuleFetch) >= @ModuleLink)) {\n" \
- " key = queue.shift();\n" \
- " }\n" \
+ " @putByValDirect(dependencies, i, depEntry);\n" \
+ " dependenciesMap.@set(depName, depEntry);\n" \
" }\n" \
"\n" \
- " var linkAndEvaluateResult = Loader.linkAndEvaluateModule(resolvedSpecifier, @undefined);\n" \
- " if (linkAndEvaluateResult && @isPromise(linkAndEvaluateResult)) {\n" \
- " //\n" \
- " //\n" \
- " @throwTypeError(`require() async module \\\"${resolvedSpecifier}\\\" is unsupported`);\n" \
+ " entry.dependencies = dependencies;\n" \
+ " key = queue.shift();\n" \
+ " while (key && (registry.@get(key)?.state ?? @ModuleFetch) >= @ModuleLink) {\n" \
+ " key = queue.shift();\n" \
" }\n" \
+ " }\n" \
+ "\n" \
+ " var linkAndEvaluateResult = Loader.linkAndEvaluateModule(\n" \
+ " resolvedSpecifier,\n" \
+ " @undefined\n" \
+ " );\n" \
+ " if (linkAndEvaluateResult && @isPromise(linkAndEvaluateResult)) {\n" \
+ " //\n" \
+ " //\n" \
+ " @throwTypeError(\n" \
+ " `require() async module \\\"${resolvedSpecifier}\\\" is unsupported`\n" \
+ " );\n" \
+ " }\n" \
+ "\n" \
+ " return Loader.registry.@get(resolvedSpecifier);\n" \
"\n" \
- " return Loader.registry.@get(resolvedSpecifier);\n" \
"})\n" \
;
const JSC::ConstructAbility s_jsZigGlobalObjectRequireModuleCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
const JSC::ConstructorKind s_jsZigGlobalObjectRequireModuleCodeConstructorKind = JSC::ConstructorKind::None;
-const int s_jsZigGlobalObjectRequireModuleCodeLength = 613;
+const int s_jsZigGlobalObjectRequireModuleCodeLength = 606;
static const JSC::Intrinsic s_jsZigGlobalObjectRequireModuleCodeIntrinsic = JSC::NoIntrinsic;
const char* const s_jsZigGlobalObjectRequireModuleCode =
"(function (meta, resolved) {\n" \
@@ -200,7 +223,7 @@ const char* const s_jsZigGlobalObjectRequireModuleCode =
" }\n" \
" var exports = Loader.getModuleNamespaceObject(entry.module);\n" \
" var commonJS = exports.default;\n" \
- " if (commonJS && @isObject(commonJS) && Symbol.for(\"CommonJS\") in commonJS) {\n" \
+ " if (commonJS && @isObject(commonJS) && @commonJSSymbol in commonJS) {\n" \
" return commonJS();\n" \
" }\n" \
" return exports;\n" \
diff --git a/src/bun.js/builtins/cpp/WebCoreJSBuiltinInternals.h b/src/bun.js/builtins/cpp/WebCoreJSBuiltinInternals.h
index fc5e2406a..cefa5fd8c 100644
--- a/src/bun.js/builtins/cpp/WebCoreJSBuiltinInternals.h
+++ b/src/bun.js/builtins/cpp/WebCoreJSBuiltinInternals.h
@@ -82,6 +82,7 @@ namespace Zig { class GlobalObject; }
namespace Zig { class GlobalObject; }
namespace Zig { class GlobalObject; }
namespace Zig { class GlobalObject; }
+namespace Zig { class GlobalObject; }
/*
* Copyright (c) 2015 Igalia
* Copyright (c) 2015 Igalia S.L.
diff --git a/src/bun.js/builtins/js/JSZigGlobalObject.js b/src/bun.js/builtins/js/JSZigGlobalObject.js
index 7b82067ec..bb08bb107 100644
--- a/src/bun.js/builtins/js/JSZigGlobalObject.js
+++ b/src/bun.js/builtins/js/JSZigGlobalObject.js
@@ -30,36 +30,36 @@ function require(name) {
}
const resolved = this.resolveSync(name, this.path);
- var requireCache = (globalThis[Symbol.for("_requireCache")] ||= new @Map);
- var cached = requireCache.@get(resolved);
+ var cached = @requireMap.@get(resolved);
+ const last5 = resolved.substring(resolved.length - 5);
if (cached) {
- if (resolved.endsWith(".node")) {
+ if (last5 === ".node") {
return cached.exports;
}
return cached;
}
-
+
// TODO: remove this hardcoding
- if (resolved.endsWith(".json")) {
+ if (last5 === ".json") {
var fs = (globalThis[Symbol.for("_fs")] ||= Bun.fs());
var exports = JSON.parse(fs.readFileSync(resolved, "utf8"));
- requireCache.@set(resolved, exports);
+ @requireMap.@set(resolved, exports);
return exports;
- } else if (resolved.endsWith(".node")) {
+ } else if (last5 === ".node") {
var module = { exports: {} };
globalThis.process.dlopen(module, resolved);
- requireCache.@set(resolved, module);
+ @requireMap.@set(resolved, module);
return module.exports;
- } else if (resolved.endsWith(".toml")) {
+ } else if (last5 === ".toml") {
var fs = (globalThis[Symbol.for("_fs")] ||= Bun.fs());
var exports = Bun.TOML.parse(fs.readFileSync(resolved, "utf8"));
- requireCache.@set(resolved, exports);
+ @requireMap.@set(resolved, exports);
return exports;
} else {
var exports = this.requireModule(this, resolved);
- requireCache.@set(resolved, exports);
+ @requireMap.@set(resolved, exports);
return exports;
}
}
@@ -182,7 +182,7 @@ function requireModule(meta, resolved) {
}
var exports = Loader.getModuleNamespaceObject(entry.module);
var commonJS = exports.default;
- if (commonJS && @isObject(commonJS) && Symbol.for("CommonJS") in commonJS) {
+ if (commonJS && @isObject(commonJS) && @commonJSSymbol in commonJS) {
return commonJS();
}
return exports;