diff options
author | 2022-07-04 17:17:11 -0700 | |
---|---|---|
committer | 2022-07-04 17:17:11 -0700 | |
commit | 91cada219bb9283189e71072cfa0ce4f6f30bc5b (patch) | |
tree | 97bfad12d2e6711a3210288ce9893e0f503bd0b2 | |
parent | 7d3459f53d095b46b327a1725600f59e5a36934c (diff) | |
download | bun-91cada219bb9283189e71072cfa0ce4f6f30bc5b.tar.gz bun-91cada219bb9283189e71072cfa0ce4f6f30bc5b.tar.zst bun-91cada219bb9283189e71072cfa0ce4f6f30bc5b.zip |
Fix case in dynamic require()
Diffstat (limited to '')
-rw-r--r-- | src/bun.js/builtins/js/ImportMetaObject.js | 17 | ||||
-rw-r--r-- | test/bun.js/react-dom.test.tsx | 12 |
2 files changed, 24 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( diff --git a/test/bun.js/react-dom.test.tsx b/test/bun.js/react-dom.test.tsx index 6c7884073..d204e88e0 100644 --- a/test/bun.js/react-dom.test.tsx +++ b/test/bun.js/react-dom.test.tsx @@ -11,6 +11,7 @@ import { describe, expect, it } from "bun:test"; import { renderToReadableStream as renderToReadableStreamBrowser } from "react-dom/server.browser"; import { gc } from "./gc"; import { renderToReadableStream as renderToReadableStreamBun } from "./reactdom-bun"; +import React from "react"; Object.defineProperty(renderToReadableStreamBrowser, "name", { value: "server.browser", @@ -88,6 +89,17 @@ const fixtures = [ ], ]; +describe("React", () => { + it("React.createContext works", () => { + expect(typeof React.createContext).toBe("function"); + const pleaseDontThrow = React.createContext({ foo: true }); + expect(pleaseDontThrow.$$typeof.description).toBe("react.context"); + + const pleaseDontThrow2 = React.default.createContext({ foo: true }); + expect(pleaseDontThrow2.$$typeof.description).toBe("react.context"); + }); +}); + describe("ReactDOM", () => { for (let renderToReadableStream of [ renderToReadableStreamBun, |