Skip to content

Commit 904602b

Browse files
committed
Include regular stack trace in serialized errors from Fizz (#28684)
We previously only included the component stack. Cleaned up the fields in Fizz server that wasn't using consistent hidden classes in dev vs prod. Added a prefix to errors serialized from server rendering. It can be a bit confusing to see where this error came from otherwise since it didn't come from elsewhere on the client. It's really kind of confusing with other recoverable errors that happen on the client too. DiffTrain build for [b9149cc](b9149cc)
1 parent a180cdd commit 904602b

24 files changed

+671
-468
lines changed

compiled/facebook-www/REVISION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5d4b7587da52dd81bc5c366b909c4511e2970cd1
1+
b9149cc6e6442389accf1f7c34a77ba2e6e52b5e

compiled/facebook-www/ReactART-dev.classic.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ if (__DEV__) {
6666
return self;
6767
}
6868

69-
var ReactVersion = "19.0.0-www-classic-b8b7775c";
69+
var ReactVersion = "19.0.0-www-classic-3ce339ba";
7070

7171
var LegacyRoot = 0;
7272
var ConcurrentRoot = 1;
@@ -17563,7 +17563,7 @@ if (__DEV__) {
1756317563
// get an update and we'll never be able to hydrate the final content. Let's just try the
1756417564
// client side render instead.
1756517565
var digest;
17566-
var message, stack;
17566+
var message, stack, componentStack;
1756717567

1756817568
{
1756917569
var _getSuspenseInstanceF =
@@ -17572,6 +17572,7 @@ if (__DEV__) {
1757217572
digest = _getSuspenseInstanceF.digest;
1757317573
message = _getSuspenseInstanceF.message;
1757417574
stack = _getSuspenseInstanceF.stack;
17575+
componentStack = _getSuspenseInstanceF.componentStack;
1757517576
}
1757617577

1757717578
var capturedValue = null; // TODO: Figure out a better signal than encoding a magic digest value.
@@ -17585,13 +17586,18 @@ if (__DEV__) {
1758517586
} else {
1758617587
error = new Error(
1758717588
"The server could not finish this Suspense boundary, likely " +
17588-
"due to an error during server rendering. Switched to " +
17589-
"client rendering."
17589+
"due to an error during server rendering. " +
17590+
"Switched to client rendering."
1759017591
);
17591-
}
17592+
} // Replace the stack with the server stack
1759217593

17594+
error.stack = stack || "";
1759317595
error.digest = digest;
17594-
capturedValue = createCapturedValueFromError(error, digest, stack);
17596+
capturedValue = createCapturedValueFromError(
17597+
error,
17598+
digest,
17599+
componentStack
17600+
);
1759517601
}
1759617602

1759717603
return retrySuspenseComponentWithoutHydrating(

compiled/facebook-www/ReactART-dev.modern.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ if (__DEV__) {
6666
return self;
6767
}
6868

69-
var ReactVersion = "19.0.0-www-modern-c4adbf64";
69+
var ReactVersion = "19.0.0-www-modern-78997ebd";
7070

7171
var LegacyRoot = 0;
7272
var ConcurrentRoot = 1;
@@ -17257,7 +17257,7 @@ if (__DEV__) {
1725717257
// get an update and we'll never be able to hydrate the final content. Let's just try the
1725817258
// client side render instead.
1725917259
var digest;
17260-
var message, stack;
17260+
var message, stack, componentStack;
1726117261

1726217262
{
1726317263
var _getSuspenseInstanceF =
@@ -17266,6 +17266,7 @@ if (__DEV__) {
1726617266
digest = _getSuspenseInstanceF.digest;
1726717267
message = _getSuspenseInstanceF.message;
1726817268
stack = _getSuspenseInstanceF.stack;
17269+
componentStack = _getSuspenseInstanceF.componentStack;
1726917270
}
1727017271

1727117272
var capturedValue = null; // TODO: Figure out a better signal than encoding a magic digest value.
@@ -17279,13 +17280,18 @@ if (__DEV__) {
1727917280
} else {
1728017281
error = new Error(
1728117282
"The server could not finish this Suspense boundary, likely " +
17282-
"due to an error during server rendering. Switched to " +
17283-
"client rendering."
17283+
"due to an error during server rendering. " +
17284+
"Switched to client rendering."
1728417285
);
17285-
}
17286+
} // Replace the stack with the server stack
1728617287

17288+
error.stack = stack || "";
1728717289
error.digest = digest;
17288-
capturedValue = createCapturedValueFromError(error, digest, stack);
17290+
capturedValue = createCapturedValueFromError(
17291+
error,
17292+
digest,
17293+
componentStack
17294+
);
1728917295
}
1729017296

1729117297
return retrySuspenseComponentWithoutHydrating(

compiled/facebook-www/ReactART-prod.classic.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5069,6 +5069,7 @@ function updateSuspenseComponent(current, workInProgress, renderLanes) {
50695069
else if ((pushPrimaryTreeSuspenseHandler(workInProgress), shim$2()))
50705070
(JSCompiler_temp = shim$2().digest),
50715071
(nextProps = Error(formatProdErrorMessage(419))),
5072+
(nextProps.stack = ""),
50725073
(nextProps.digest = JSCompiler_temp),
50735074
(JSCompiler_temp = createCapturedValueFromError(
50745075
nextProps,
@@ -10616,7 +10617,7 @@ var slice = Array.prototype.slice,
1061610617
return null;
1061710618
},
1061810619
bundleType: 0,
10619-
version: "19.0.0-www-classic-03341623",
10620+
version: "19.0.0-www-classic-859a948c",
1062010621
rendererPackageName: "react-art"
1062110622
};
1062210623
var internals$jscomp$inline_1324 = {
@@ -10647,7 +10648,7 @@ var internals$jscomp$inline_1324 = {
1064710648
scheduleRoot: null,
1064810649
setRefreshHandler: null,
1064910650
getCurrentFiber: null,
10650-
reconcilerVersion: "19.0.0-www-classic-03341623"
10651+
reconcilerVersion: "19.0.0-www-classic-859a948c"
1065110652
};
1065210653
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
1065310654
var hook$jscomp$inline_1325 = __REACT_DEVTOOLS_GLOBAL_HOOK__;

compiled/facebook-www/ReactART-prod.modern.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4818,6 +4818,7 @@ function updateSuspenseComponent(current, workInProgress, renderLanes) {
48184818
else if ((pushPrimaryTreeSuspenseHandler(workInProgress), shim$2()))
48194819
(JSCompiler_temp = shim$2().digest),
48204820
(nextProps = Error(formatProdErrorMessage(419))),
4821+
(nextProps.stack = ""),
48214822
(nextProps.digest = JSCompiler_temp),
48224823
(JSCompiler_temp = createCapturedValueFromError(
48234824
nextProps,
@@ -10271,7 +10272,7 @@ var slice = Array.prototype.slice,
1027110272
return null;
1027210273
},
1027310274
bundleType: 0,
10274-
version: "19.0.0-www-modern-672a54bb",
10275+
version: "19.0.0-www-modern-323b75ff",
1027510276
rendererPackageName: "react-art"
1027610277
};
1027710278
var internals$jscomp$inline_1304 = {
@@ -10302,7 +10303,7 @@ var internals$jscomp$inline_1304 = {
1030210303
scheduleRoot: null,
1030310304
setRefreshHandler: null,
1030410305
getCurrentFiber: null,
10305-
reconcilerVersion: "19.0.0-www-modern-672a54bb"
10306+
reconcilerVersion: "19.0.0-www-modern-323b75ff"
1030610307
};
1030710308
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
1030810309
var hook$jscomp$inline_1305 = __REACT_DEVTOOLS_GLOBAL_HOOK__;

compiled/facebook-www/ReactDOM-dev.classic.js

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22604,7 +22604,7 @@ if (__DEV__) {
2260422604
// get an update and we'll never be able to hydrate the final content. Let's just try the
2260522605
// client side render instead.
2260622606
var digest;
22607-
var message, stack;
22607+
var message, stack, componentStack;
2260822608

2260922609
{
2261022610
var _getSuspenseInstanceF =
@@ -22613,6 +22613,7 @@ if (__DEV__) {
2261322613
digest = _getSuspenseInstanceF.digest;
2261422614
message = _getSuspenseInstanceF.message;
2261522615
stack = _getSuspenseInstanceF.stack;
22616+
componentStack = _getSuspenseInstanceF.componentStack;
2261622617
}
2261722618

2261822619
var capturedValue = null; // TODO: Figure out a better signal than encoding a magic digest value.
@@ -22626,13 +22627,18 @@ if (__DEV__) {
2262622627
} else {
2262722628
error = new Error(
2262822629
"The server could not finish this Suspense boundary, likely " +
22629-
"due to an error during server rendering. Switched to " +
22630-
"client rendering."
22630+
"due to an error during server rendering. " +
22631+
"Switched to client rendering."
2263122632
);
22632-
}
22633+
} // Replace the stack with the server stack
2263322634

22635+
error.stack = stack || "";
2263422636
error.digest = digest;
22635-
capturedValue = createCapturedValueFromError(error, digest, stack);
22637+
capturedValue = createCapturedValueFromError(
22638+
error,
22639+
digest,
22640+
componentStack
22641+
);
2263622642
}
2263722643

2263822644
return retrySuspenseComponentWithoutHydrating(
@@ -36358,7 +36364,7 @@ if (__DEV__) {
3635836364
return root;
3635936365
}
3636036366

36361-
var ReactVersion = "19.0.0-www-classic-7d681296";
36367+
var ReactVersion = "19.0.0-www-classic-02ab69c6";
3636236368

3636336369
function createPortal$1(
3636436370
children,
@@ -45317,22 +45323,24 @@ if (__DEV__) {
4531745323
}
4531845324
function getSuspenseInstanceFallbackErrorDetails(instance) {
4531945325
var dataset = instance.nextSibling && instance.nextSibling.dataset;
45320-
var digest, message, stack;
45326+
var digest, message, stack, componentStack;
4532145327

4532245328
if (dataset) {
4532345329
digest = dataset.dgst;
4532445330

4532545331
{
4532645332
message = dataset.msg;
4532745333
stack = dataset.stck;
45334+
componentStack = dataset.cstck;
4532845335
}
4532945336
}
4533045337

4533145338
{
4533245339
return {
4533345340
message: message,
4533445341
digest: digest,
45335-
stack: stack
45342+
stack: stack,
45343+
componentStack: componentStack
4533645344
};
4533745345
}
4533845346
}

compiled/facebook-www/ReactDOM-dev.modern.js

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22496,7 +22496,7 @@ if (__DEV__) {
2249622496
// get an update and we'll never be able to hydrate the final content. Let's just try the
2249722497
// client side render instead.
2249822498
var digest;
22499-
var message, stack;
22499+
var message, stack, componentStack;
2250022500

2250122501
{
2250222502
var _getSuspenseInstanceF =
@@ -22505,6 +22505,7 @@ if (__DEV__) {
2250522505
digest = _getSuspenseInstanceF.digest;
2250622506
message = _getSuspenseInstanceF.message;
2250722507
stack = _getSuspenseInstanceF.stack;
22508+
componentStack = _getSuspenseInstanceF.componentStack;
2250822509
}
2250922510

2251022511
var capturedValue = null; // TODO: Figure out a better signal than encoding a magic digest value.
@@ -22518,13 +22519,18 @@ if (__DEV__) {
2251822519
} else {
2251922520
error = new Error(
2252022521
"The server could not finish this Suspense boundary, likely " +
22521-
"due to an error during server rendering. Switched to " +
22522-
"client rendering."
22522+
"due to an error during server rendering. " +
22523+
"Switched to client rendering."
2252322524
);
22524-
}
22525+
} // Replace the stack with the server stack
2252522526

22527+
error.stack = stack || "";
2252622528
error.digest = digest;
22527-
capturedValue = createCapturedValueFromError(error, digest, stack);
22529+
capturedValue = createCapturedValueFromError(
22530+
error,
22531+
digest,
22532+
componentStack
22533+
);
2252822534
}
2252922535

2253022536
return retrySuspenseComponentWithoutHydrating(
@@ -36206,7 +36212,7 @@ if (__DEV__) {
3620636212
return root;
3620736213
}
3620836214

36209-
var ReactVersion = "19.0.0-www-modern-439124ba";
36215+
var ReactVersion = "19.0.0-www-modern-d6e2d0b4";
3621036216

3621136217
function createPortal$1(
3621236218
children,
@@ -46015,22 +46021,24 @@ if (__DEV__) {
4601546021
}
4601646022
function getSuspenseInstanceFallbackErrorDetails(instance) {
4601746023
var dataset = instance.nextSibling && instance.nextSibling.dataset;
46018-
var digest, message, stack;
46024+
var digest, message, stack, componentStack;
4601946025

4602046026
if (dataset) {
4602146027
digest = dataset.dgst;
4602246028

4602346029
{
4602446030
message = dataset.msg;
4602546031
stack = dataset.stck;
46032+
componentStack = dataset.cstck;
4602646033
}
4602746034
}
4602846035

4602946036
{
4603046037
return {
4603146038
message: message,
4603246039
digest: digest,
46033-
stack: stack
46040+
stack: stack,
46041+
componentStack: componentStack
4603446042
};
4603546043
}
4603646044
}

compiled/facebook-www/ReactDOM-prod.classic.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6063,6 +6063,7 @@ function updateSuspenseComponent(current, workInProgress, renderLanes) {
60636063
if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;
60646064
JSCompiler_temp = digest;
60656065
nextProps = Error(formatProdErrorMessage(419));
6066+
nextProps.stack = "";
60666067
nextProps.digest = JSCompiler_temp;
60676068
JSCompiler_temp = createCapturedValueFromError(
60686069
nextProps,
@@ -17107,7 +17108,7 @@ Internals.Events = [
1710717108
var devToolsConfig$jscomp$inline_1732 = {
1710817109
findFiberByHostInstance: getClosestInstanceFromNode,
1710917110
bundleType: 0,
17110-
version: "19.0.0-www-classic-b1be4296",
17111+
version: "19.0.0-www-classic-540c4c3d",
1711117112
rendererPackageName: "react-dom"
1711217113
};
1711317114
var internals$jscomp$inline_2160 = {
@@ -17137,7 +17138,7 @@ var internals$jscomp$inline_2160 = {
1713717138
scheduleRoot: null,
1713817139
setRefreshHandler: null,
1713917140
getCurrentFiber: null,
17140-
reconcilerVersion: "19.0.0-www-classic-b1be4296"
17141+
reconcilerVersion: "19.0.0-www-classic-540c4c3d"
1714117142
};
1714217143
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
1714317144
var hook$jscomp$inline_2161 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -17587,4 +17588,4 @@ exports.useFormState = function (action, initialState, permalink) {
1758717588
exports.useFormStatus = function () {
1758817589
return ReactCurrentDispatcher$2.current.useHostTransitionStatus();
1758917590
};
17590-
exports.version = "19.0.0-www-classic-b1be4296";
17591+
exports.version = "19.0.0-www-classic-540c4c3d";

compiled/facebook-www/ReactDOM-prod.modern.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5915,6 +5915,7 @@ function updateSuspenseComponent(current, workInProgress, renderLanes) {
59155915
if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;
59165916
JSCompiler_temp = digest;
59175917
nextProps = Error(formatProdErrorMessage(419));
5918+
nextProps.stack = "";
59185919
nextProps.digest = JSCompiler_temp;
59195920
JSCompiler_temp = createCapturedValueFromError(
59205921
nextProps,
@@ -16621,7 +16622,7 @@ Internals.Events = [
1662116622
var devToolsConfig$jscomp$inline_1693 = {
1662216623
findFiberByHostInstance: getClosestInstanceFromNode,
1662316624
bundleType: 0,
16624-
version: "19.0.0-www-modern-44929488",
16625+
version: "19.0.0-www-modern-04f7fd59",
1662516626
rendererPackageName: "react-dom"
1662616627
};
1662716628
var internals$jscomp$inline_2122 = {
@@ -16651,7 +16652,7 @@ var internals$jscomp$inline_2122 = {
1665116652
scheduleRoot: null,
1665216653
setRefreshHandler: null,
1665316654
getCurrentFiber: null,
16654-
reconcilerVersion: "19.0.0-www-modern-44929488"
16655+
reconcilerVersion: "19.0.0-www-modern-04f7fd59"
1665516656
};
1665616657
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
1665716658
var hook$jscomp$inline_2123 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
@@ -16954,4 +16955,4 @@ exports.useFormState = function (action, initialState, permalink) {
1695416955
exports.useFormStatus = function () {
1695516956
return ReactCurrentDispatcher$2.current.useHostTransitionStatus();
1695616957
};
16957-
exports.version = "19.0.0-www-modern-44929488";
16958+
exports.version = "19.0.0-www-modern-04f7fd59";

0 commit comments

Comments
 (0)