aboutsummaryrefslogtreecommitdiff
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
parent7d3459f53d095b46b327a1725600f59e5a36934c (diff)
downloadbun-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.js17
-rw-r--r--test/bun.js/react-dom.test.tsx12
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,