Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Finish cleaning up digest from onRecoverableError #28686

Merged
merged 1 commit into from
Mar 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/react-dom/src/client/ReactDOMRoot.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export type CreateRootOptions = {
) => void,
onRecoverableError?: (
error: mixed,
errorInfo: {+digest?: ?string, +componentStack?: ?string},
errorInfo: {+componentStack?: ?string},
) => void,
};

Expand All @@ -71,7 +71,7 @@ export type HydrateRootOptions = {
) => void,
onRecoverableError?: (
error: mixed,
errorInfo: {+digest?: ?string, +componentStack?: ?string},
errorInfo: {+componentStack?: ?string},
) => void,
formState?: ReactFormState<any, any> | null,
};
Expand Down
8 changes: 2 additions & 6 deletions packages/react-reconciler/src/ReactCapturedValue.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ export type CapturedValue<T> = {
+value: T,
source: Fiber | null,
stack: string | null,
digest: string | null,
};

export function createCapturedValueAtFiber<T>(
Expand All @@ -43,22 +42,19 @@ export function createCapturedValueAtFiber<T>(
value,
source,
stack,
digest: null,
};
}

export function createCapturedValueFromError(
value: Error,
digest: ?string,
stack: ?string,
stack: null | string,
): CapturedValue<Error> {
if (typeof stack === 'string') {
CapturedStacks.set(value, stack);
}
return {
value,
source: null,
stack: stack != null ? stack : null,
digest: digest != null ? digest : null,
stack: stack,
};
}
8 changes: 5 additions & 3 deletions packages/react-reconciler/src/ReactFiberBeginWork.js
Original file line number Diff line number Diff line change
Expand Up @@ -2735,7 +2735,9 @@ function updateDehydratedSuspenseComponent(
// get an update and we'll never be able to hydrate the final content. Let's just try the
// client side render instead.
let digest: ?string;
let message, stack, componentStack;
let message;
let stack = null;
let componentStack = null;
if (__DEV__) {
({digest, message, stack, componentStack} =
getSuspenseInstanceFallbackErrorDetails(suspenseInstance));
Expand All @@ -2762,8 +2764,7 @@ function updateDehydratedSuspenseComponent(
(error: any).digest = digest;
capturedValue = createCapturedValueFromError(
error,
digest,
componentStack,
componentStack === undefined ? null : componentStack,
);
}
return retrySuspenseComponentWithoutHydrating(
Expand Down Expand Up @@ -2906,6 +2907,7 @@ function updateDehydratedSuspenseComponent(
'There was an error while hydrating this Suspense boundary. ' +
'Switched to client rendering.',
),
null,
);
return retrySuspenseComponentWithoutHydrating(
current,
Expand Down
2 changes: 1 addition & 1 deletion packages/react-reconciler/src/ReactFiberErrorLogger.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ export function defaultOnCaughtError(

export function defaultOnRecoverableError(
error: mixed,
errorInfo: {+digest?: ?string, +componentStack?: ?string},
errorInfo: {+componentStack?: ?string},
) {
reportGlobalError(error);
}
Expand Down
4 changes: 2 additions & 2 deletions packages/react-reconciler/src/ReactFiberReconciler.js
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ export function createContainer(
) => void,
onRecoverableError: (
error: mixed,
errorInfo: {+digest?: ?string, +componentStack?: ?string},
errorInfo: {+componentStack?: ?string},
) => void,
transitionCallbacks: null | TransitionTracingCallbacks,
): OpaqueRoot {
Expand Down Expand Up @@ -313,7 +313,7 @@ export function createHydrationContainer(
) => void,
onRecoverableError: (
error: mixed,
errorInfo: {+digest?: ?string, +componentStack?: ?string},
errorInfo: {+componentStack?: ?string},
) => void,
transitionCallbacks: null | TransitionTracingCallbacks,
formState: ReactFormState<any, any> | null,
Expand Down
2 changes: 1 addition & 1 deletion packages/react-reconciler/src/ReactFiberRoot.js
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ export function createFiberRoot(
) => void,
onRecoverableError: (
error: mixed,
errorInfo: {+digest?: ?string, +componentStack?: ?string},
errorInfo: {+componentStack?: ?string},
) => void,
transitionCallbacks: null | TransitionTracingCallbacks,
formState: ReactFormState<any, any> | null,
Expand Down
38 changes: 11 additions & 27 deletions packages/react-reconciler/src/ReactFiberWorkLoop.js
Original file line number Diff line number Diff line change
Expand Up @@ -3128,37 +3128,21 @@ function commitRootImpl(
}

function makeErrorInfo(componentStack: ?string) {
const errorInfo = {
componentStack,
};
if (__DEV__) {
const errorInfo = {
componentStack,
};
return new Proxy(errorInfo, {
get(target, prop, receiver) {
if (prop === 'digest') {
console.error(
'You are accessing "digest" from the errorInfo object passed to onRecoverableError.' +
' This property is no longer provided as part of errorInfo but can be accessed as a property' +
' of the Error instance itself.',
);
}
return Reflect.get(target, prop, receiver);
},
has(target, prop) {
if (prop === 'digest') {
console.error(
'You are accessing "digest" from the errorInfo object passed to onRecoverableError.' +
' This property is no longer provided as part of errorInfo but can be accessed as a property' +
' of the Error instance itself.',
);
}
return Reflect.has(target, prop);
Object.defineProperty((errorInfo: any), 'digest', {
get() {
console.error(
'You are accessing "digest" from the errorInfo object passed to onRecoverableError.' +
' This property is no longer provided as part of errorInfo but can be accessed as a property' +
' of the Error instance itself.',
);
},
});
} else {
return {
componentStack,
};
}
return errorInfo;
}

function releaseRootPooledCache(root: FiberRoot, remainingLanes: Lanes) {
Expand Down
2 changes: 1 addition & 1 deletion packages/react-reconciler/src/ReactInternalTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ type BaseFiberRootProperties = {
) => void,
onRecoverableError: (
error: mixed,
errorInfo: {+digest?: ?string, +componentStack?: ?string},
errorInfo: {+componentStack?: ?string},
) => void,

formState: ReactFormState<any, any> | null,
Expand Down