Skip to content

Commit 4110b94

Browse files
committedSep 22, 2022
make digest a public api on the Error value
1 parent 5c58f1b commit 4110b94

File tree

4 files changed

+20
-18
lines changed

4 files changed

+20
-18
lines changed
 

‎packages/react-client/src/ReactFlightClient.js

+9-5
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ function createBlockedChunk<T>(response: Response): BlockedChunk<T> {
193193

194194
function createErrorChunk<T>(
195195
response: Response,
196-
error: Error,
196+
error: ErrorWithDigest,
197197
): ErroredChunk<T> {
198198
// $FlowFixMe Flow doesn't support functions as constructors
199199
return new Chunk(ERRORED, null, error, response);
@@ -628,7 +628,7 @@ export function resolveSymbol(
628628
chunks.set(id, createInitializedChunk(response, Symbol.for(name)));
629629
}
630630

631-
type ErrorWithDigest = Error & {_digest?: string};
631+
type ErrorWithDigest = Error & {digest?: string};
632632
export function resolveErrorProd(
633633
response: Response,
634634
id: number,
@@ -641,9 +641,13 @@ export function resolveErrorProd(
641641
'resolveErrorProd should never be called in development mode. Use resolveErrorDev instead. This is a bug in React.',
642642
);
643643
}
644-
const error = new Error('An error occurred in the Server Components render.');
644+
const error = new Error(
645+
'An error occurred in the Server Components render. The specific message is omitted in production' +
646+
' builds to avoid leaking sensitive details. A digest property is included on this error instance which' +
647+
' may provide additional details about the nature of the error.',
648+
);
645649
error.stack = '';
646-
(error: any)._digest = digest;
650+
(error: any).digest = digest;
647651
const errorWithDigest: ErrorWithDigest = (error: any);
648652
const chunks = response._chunks;
649653
const chunk = chunks.get(id);
@@ -674,7 +678,7 @@ export function resolveErrorDev(
674678
'An error occurred in the Server Components render but no message was provided',
675679
);
676680
error.stack = stack;
677-
(error: any)._digest = digest;
681+
(error: any).digest = digest;
678682
const errorWithDigest: ErrorWithDigest = (error: any);
679683
const chunks = response._chunks;
680684
const chunk = chunks.get(id);

‎packages/react-client/src/__tests__/ReactFlight-test.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,12 @@ describe('ReactFlight', () => {
4949
expect(this.state.error.message).toContain(
5050
this.props.expectedMessage,
5151
);
52-
expect(this.state.error._digest).toBe('a dev digest');
52+
expect(this.state.error.digest).toBe('a dev digest');
5353
} else {
5454
expect(this.state.error.message).toBe(
5555
'An error occurred in the Server Components render.',
5656
);
57-
expect(this.state.error._digest).toContain(
58-
this.props.expectedMessage,
59-
);
57+
expect(this.state.error.digest).toContain(this.props.expectedMessage);
6058
}
6159
}
6260
render() {

‎packages/react-server-dom-webpack/src/__tests__/ReactFlightDOM-test.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ describe('ReactFlightDOM', () => {
336336
fallback={e => (
337337
<p>
338338
{__DEV__ ? e.message + ' + ' : null}
339-
{e._digest}
339+
{e.digest}
340340
</p>
341341
)}>
342342
{children}
@@ -642,7 +642,7 @@ describe('ReactFlightDOM', () => {
642642
fallback={e => (
643643
<p>
644644
{__DEV__ ? e.message + ' + ' : null}
645-
{e._digest}
645+
{e.digest}
646646
</p>
647647
)}>
648648
<Suspense fallback={<p>(loading)</p>}>
@@ -818,7 +818,7 @@ describe('ReactFlightDOM', () => {
818818
fallback={e => (
819819
<p>
820820
{__DEV__ ? e.message + ' + ' : null}
821-
{e._digest}
821+
{e.digest}
822822
</p>
823823
)}>
824824
<Suspense fallback={<p>(loading)</p>}>

‎packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -177,15 +177,15 @@ describe('ReactFlightDOMBrowser', () => {
177177
if (__DEV__) {
178178
errorBoundaryFn = e => (
179179
<p>
180-
{e.message} + {e._digest}
180+
{e.message} + {e.digest}
181181
</p>
182182
);
183183
} else {
184184
errorBoundaryFn = e => {
185185
expect(e.message).toBe(
186186
'An error occurred in the Server Components render.',
187187
);
188-
return <p>{e._digest}</p>;
188+
return <p>{e.digest}</p>;
189189
};
190190
}
191191

@@ -513,15 +513,15 @@ describe('ReactFlightDOMBrowser', () => {
513513
if (__DEV__) {
514514
errorBoundaryFn = e => (
515515
<p>
516-
{e.message} + {e._digest}
516+
{e.message} + {e.digest}
517517
</p>
518518
);
519519
} else {
520520
errorBoundaryFn = e => {
521521
expect(e.message).toBe(
522522
'An error occurred in the Server Components render.',
523523
);
524-
return <p>{e._digest}</p>;
524+
return <p>{e.digest}</p>;
525525
};
526526
}
527527

@@ -720,8 +720,8 @@ describe('ReactFlightDOMBrowser', () => {
720720
render() {
721721
if (this.state.error) {
722722
return __DEV__
723-
? this.state.error.message + ' + ' + this.state.error._digest
724-
: this.state.error._digest;
723+
? this.state.error.message + ' + ' + this.state.error.digest
724+
: this.state.error.digest;
725725
}
726726
return this.props.children;
727727
}

0 commit comments

Comments
 (0)