Fix error handling in `resolveClientReference` (#31332)
When a React Server Consumer Manifest does not include an entry for a client reference ID, we must not try to look up the export name (or `'*'`) for the client reference. Otherwise this will fail with `TypeError: Cannot read properties of undefined (reading '...')` instead of the custom error we intended to throw.
Hendrik Liebau committed
Oct 23, 2024 at 17:36 UTC
2dc5bebd46d5254f9a02fd58d408acb33c288639
4 files changed
+12
-12
packages/react-server-dom-turbopack/src/client/ReactFlightClientConfigBundlerNode.js
+3
-3
@@ -62,19 +62,19 @@ export function resolveClientReference<T>(
62
metadata: ClientReferenceMetadata,
63
): ClientReference<T> {
64
const moduleExports = bundlerConfig[metadata[ID]];
65
- let resolvedModuleData = moduleExports[metadata[NAME]];
65
+ let resolvedModuleData = moduleExports && moduleExports[metadata[NAME]];
66
let name;
67
if (resolvedModuleData) {
68
// The potentially aliased name.
69
name = resolvedModuleData.name;
70
} else {
71
// If we don't have this specific name, we might have the full module.
72
- resolvedModuleData = moduleExports['*'];
72
+ resolvedModuleData = moduleExports && moduleExports['*'];
73
if (!resolvedModuleData) {
74
throw new Error(
75
'Could not find the module "' +
76
metadata[ID] +
77
- '" in the React SSR Manifest. ' +
77
+ '" in the React Server Consumer Manifest. ' +
78
'This is probably a bug in the React Server Components bundler.',
79
);
80
}
packages/react-server-dom-turbopack/src/client/ReactFlightClientConfigBundlerTurbopack.js
+3
-3
@@ -68,19 +68,19 @@ export function resolveClientReference<T>(
68
): ClientReference<T> {
69
if (bundlerConfig) {
70
const moduleExports = bundlerConfig[metadata[ID]];
71
- let resolvedModuleData = moduleExports[metadata[NAME]];
71
+ let resolvedModuleData = moduleExports && moduleExports[metadata[NAME]];
72
let name;
73
if (resolvedModuleData) {
74
// The potentially aliased name.
75
name = resolvedModuleData.name;
76
} else {
77
// If we don't have this specific name, we might have the full module.
78
- resolvedModuleData = moduleExports['*'];
78
+ resolvedModuleData = moduleExports && moduleExports['*'];
79
if (!resolvedModuleData) {
80
throw new Error(
81
'Could not find the module "' +
82
metadata[ID] +
83
- '" in the React SSR Manifest. ' +
83
+ '" in the React Server Consumer Manifest. ' +
84
'This is probably a bug in the React Server Components bundler.',
85
);
86
}
packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerNode.js
+3
-3
@@ -62,19 +62,19 @@ export function resolveClientReference<T>(
62
metadata: ClientReferenceMetadata,
63
): ClientReference<T> {
64
const moduleExports = bundlerConfig[metadata[ID]];
65
- let resolvedModuleData = moduleExports[metadata[NAME]];
65
+ let resolvedModuleData = moduleExports && moduleExports[metadata[NAME]];
66
let name;
67
if (resolvedModuleData) {
68
// The potentially aliased name.
69
name = resolvedModuleData.name;
70
} else {
71
// If we don't have this specific name, we might have the full module.
72
- resolvedModuleData = moduleExports['*'];
72
+ resolvedModuleData = moduleExports && moduleExports['*'];
73
if (!resolvedModuleData) {
74
throw new Error(
75
'Could not find the module "' +
76
metadata[ID] +
77
- '" in the React SSR Manifest. ' +
77
+ '" in the React Server Consumer Manifest. ' +
78
'This is probably a bug in the React Server Components bundler.',
79
);
80
}
packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js
+3
-3
@@ -68,19 +68,19 @@ export function resolveClientReference<T>(
68
): ClientReference<T> {
69
if (bundlerConfig) {
70
const moduleExports = bundlerConfig[metadata[ID]];
71
- let resolvedModuleData = moduleExports[metadata[NAME]];
71
+ let resolvedModuleData = moduleExports && moduleExports[metadata[NAME]];
72
let name;
73
if (resolvedModuleData) {
74
// The potentially aliased name.
75
name = resolvedModuleData.name;
76
} else {
77
// If we don't have this specific name, we might have the full module.
78
- resolvedModuleData = moduleExports['*'];
78
+ resolvedModuleData = moduleExports && moduleExports['*'];
79
if (!resolvedModuleData) {
80
throw new Error(
81
'Could not find the module "' +
82
metadata[ID] +
83
- '" in the React SSR Manifest. ' +
83
+ '" in the React Server Consumer Manifest. ' +
84
'This is probably a bug in the React Server Components bundler.',
85
);
86
}