Fix case in dynamic require()

This commit is contained in:
Jarred Sumner
2022-07-04 17:17:11 -07:00
parent 7d3459f53d
commit 91cada219b
2 changed files with 24 additions and 5 deletions

View File

@@ -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(

View File

@@ -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,