aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-04 17:17:11 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-04 17:17:11 -0700
commit91cada219bb9283189e71072cfa0ce4f6f30bc5b (patch)
tree97bfad12d2e6711a3210288ce9893e0f503bd0b2 /src
parent7d3459f53d095b46b327a1725600f59e5a36934c (diff)
downloadbun-91cada219bb9283189e71072cfa0ce4f6f30bc5b.tar.gz
bun-91cada219bb9283189e71072cfa0ce4f6f30bc5b.tar.zst
bun-91cada219bb9283189e71072cfa0ce4f6f30bc5b.zip
Fix case in dynamic require()
Diffstat (limited to 'src')
-rw-r--r--src/bun.js/builtins/js/ImportMetaObject.js17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/bun.js/builtins/js/ImportMetaObject.js b/src/bun.js/builtins/js/ImportMetaObject.js
index bb08bb107..40e60ed22 100644
--- a/src/bun.js/builtins/js/ImportMetaObject.js
+++ b/src/bun.js/builtins/js/ImportMetaObject.js
@@ -66,14 +66,20 @@ function require(name) {
function loadModule(meta, resolvedSpecifier) {
"use strict";
- var Loader = globalThis.Loader;
var queue = @createFIFO();
var key = resolvedSpecifier;
- var registry = Loader.registry;
while (key) {
- @fulfillModuleSync(key);
- var entry = registry.@get(key);
+ // we need to explicitly check because state could be @ModuleFetch
+ // it will throw this error if we do not:
+ // @throwTypeError("Requested module is already fetched.");
+ var entry = Loader.registry.@get(key);
+
+ if (!entry || entry.state <= @ModuleFetch) {
+ @fulfillModuleSync(key);
+ entry = Loader.registry.@get(key);
+ }
+
// entry.fetch is a Promise<SourceCode>
// SourceCode is not a string, it's a JSC::SourceCode object
@@ -147,9 +153,10 @@ function loadModule(meta, resolvedSpecifier) {
entry.dependencies = dependencies;
key = queue.shift();
- while (key && (registry.@get(key)?.state ?? @ModuleFetch) >= @ModuleLink) {
+ while (key && (Loader.registry.@get(key)?.state ?? @ModuleFetch) >= @ModuleLink) {
key = queue.shift();
}
+
}
var linkAndEvaluateResult = Loader.linkAndEvaluateModule(