diff options
author | 2022-07-04 17:17:11 -0700 | |
---|---|---|
committer | 2022-07-04 17:17:11 -0700 | |
commit | 91cada219bb9283189e71072cfa0ce4f6f30bc5b (patch) | |
tree | 97bfad12d2e6711a3210288ce9893e0f503bd0b2 /src/bun.js | |
parent | 7d3459f53d095b46b327a1725600f59e5a36934c (diff) | |
download | bun-91cada219bb9283189e71072cfa0ce4f6f30bc5b.tar.gz bun-91cada219bb9283189e71072cfa0ce4f6f30bc5b.tar.zst bun-91cada219bb9283189e71072cfa0ce4f6f30bc5b.zip |
Fix case in dynamic require()
Diffstat (limited to 'src/bun.js')
-rw-r--r-- | src/bun.js/builtins/js/ImportMetaObject.js | 17 |
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( |