From 91cada219bb9283189e71072cfa0ce4f6f30bc5b Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Mon, 4 Jul 2022 17:17:11 -0700 Subject: Fix case in dynamic require() --- src/bun.js/builtins/js/ImportMetaObject.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'src/bun.js/builtins/js/ImportMetaObject.js') 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 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( -- cgit v1.2.3