Skip to content

Commit 52d2009

Browse files
authored
refactor: use async server reference (#704)
1 parent 85af393 commit 52d2009

File tree

5 files changed

+11
-21
lines changed

5 files changed

+11
-21
lines changed

packages/react-server/src/features/client-component/server.tsx

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,7 @@ import type { BundlerConfig, ImportManifestEntry } from "../../types/react";
1111

1212
/* @__NO_SIDE_EFFECTS__ */
1313
export function registerClientReference(id: string, name: string) {
14-
// reuse everything but { $$async: true }.
15-
// `$$async` is not strictly necessary if we use `__webpack_chunk_load__` trick
16-
// but for now, we go with async `__webpack_require__` for simplicity.
17-
const reference = ReactServer.registerClientReference({}, id, name);
18-
return Object.defineProperties(
19-
{},
20-
{
21-
...Object.getOwnPropertyDescriptors(reference),
22-
$$async: { value: true },
23-
},
24-
);
14+
return ReactServer.registerClientReference({}, id, name);
2515
}
2616

2717
export function createBundlerConfig(): BundlerConfig {
@@ -33,7 +23,12 @@ export function createBundlerConfig(): BundlerConfig {
3323
let [id, name] = $$id.split("#");
3424
tinyassert(id);
3525
tinyassert(name);
36-
return { id, name, chunks: [] } satisfies ImportManifestEntry;
26+
return {
27+
id,
28+
name,
29+
chunks: [],
30+
async: true,
31+
} satisfies ImportManifestEntry;
3732
},
3833
},
3934
);

packages/react-server/src/features/client-component/ssr.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export function createModuleMap(): ModuleMap {
6262
id,
6363
name,
6464
chunks: [],
65+
async: true,
6566
} satisfies ImportManifestEntry;
6667
},
6768
},

packages/react-server/src/features/server-action/server.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export function createActionBundlerConfig(): BundlerConfig {
4040
id,
4141
name,
4242
chunks: [],
43+
async: true,
4344
} satisfies ImportManifestEntry;
4445
},
4546
},

packages/react-server/src/plugin/index.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -410,12 +410,6 @@ export function vitePluginReactServer(
410410
"__webpack_chunk_load__",
411411
"__vite_react_server_webpack_chunk_load__",
412412
);
413-
414-
// make server reference async for simplicity (stale chunkCache, etc...)
415-
// see TODO in https://github.com/facebook/react/blob/33a32441e991e126e5e874f831bd3afc237a3ecf/packages/react-server-dom-webpack/src/ReactFlightClientConfigBundlerWebpack.js#L131-L132
416-
code = code.replaceAll("if (isAsyncImport(metadata))", "if (true)");
417-
code = code.replaceAll("4 === metadata.length", "true");
418-
419413
return { code, map: null };
420414
}
421415
return;

packages/react-server/src/types/react.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
export interface ImportManifestEntry {
77
id: string;
88
name: string;
9-
// TODO
109
chunks: string[];
10+
async: boolean;
1111
}
1212

1313
export interface BundlerConfig {
@@ -22,14 +22,13 @@ export type ModuleMap = {
2222

2323
export interface SsrManifest {
2424
moduleMap: ModuleMap;
25-
// TODO
2625
serverModuleMap?: unknown;
26+
// TODO: preload on ssr https://github.com/hi-ogawa/experiments/pull/83
2727
moduleLoading?: unknown;
2828
}
2929

3030
export type WebpackRequire = (id: string) => Promise<unknown>;
3131

32-
// TODO
3332
export type WebpackChunkLoad = (id: string) => Promise<unknown>;
3433

3534
export type CallServerCallback = (id: any, args: any) => Promise<unknown>;

0 commit comments

Comments
 (0)