From 35036e81e93c49f362a03a9e25a672669bf0d327 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Mon, 19 Dec 2022 20:12:45 +0100 Subject: [PATCH 1/2] Align onRecoverableError callback between pages and app dir --- packages/next/client/app-index.tsx | 19 +------------------ packages/next/client/index.tsx | 7 ++----- packages/next/client/on-recoverable-error.ts | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 23 deletions(-) create mode 100644 packages/next/client/on-recoverable-error.ts diff --git a/packages/next/client/app-index.tsx b/packages/next/client/app-index.tsx index f9dc21c51b5b493..09d024418ac1339 100644 --- a/packages/next/client/app-index.tsx +++ b/packages/next/client/app-index.tsx @@ -7,7 +7,7 @@ import { createFromReadableStream } from 'next/dist/compiled/react-server-dom-we import { HeadManagerContext } from '../shared/lib/head-manager-context' import { GlobalLayoutRouterContext } from '../shared/lib/app-router-context' -import { NEXT_DYNAMIC_NO_SSR_CODE } from '../shared/lib/no-ssr-error' +import onRecoverableError from './on-recoverable-error' /// @@ -130,23 +130,6 @@ if (document.readyState === 'loading') { DOMContentLoaded() } -function onRecoverableError(err: any) { - // Using default react onRecoverableError - // x-ref: https://github.com/facebook/react/blob/d4bc16a7d69eb2ea38a88c8ac0b461d5f72cdcab/packages/react-dom/src/client/ReactDOMRoot.js#L83 - const defaultOnRecoverableError = - typeof reportError === 'function' - ? // In modern browsers, reportError will dispatch an error event, - // emulating an uncaught JavaScript error. - reportError - : (error: any) => { - window.console.error(error) - } - - // Skip certain custom errors which are not expected to be reported on client - if (err.digest === NEXT_DYNAMIC_NO_SSR_CODE) return - defaultOnRecoverableError(err) -} - const nextServerDataLoadingGlobal = ((self as any).__next_f = (self as any).__next_f || []) nextServerDataLoadingGlobal.forEach(nextServerDataCallback) diff --git a/packages/next/client/index.tsx b/packages/next/client/index.tsx index 66bb9a6b88eb9e7..4bb816ec9931446 100644 --- a/packages/next/client/index.tsx +++ b/packages/next/client/index.tsx @@ -44,6 +44,7 @@ import { } from '../shared/lib/router/adapters' import { SearchParamsContext } from '../shared/lib/hooks-client-context' import { NEXT_DYNAMIC_NO_SSR_CODE } from '../shared/lib/no-ssr-error' +import onRecoverableError from './on-recoverable-error' /// @@ -507,11 +508,7 @@ function renderReactElement( if (!reactRoot) { // Unlike with createRoot, you don't need a separate root.render() call here reactRoot = ReactDOM.hydrateRoot(domEl, reactEl, { - onRecoverableError(err: any) { - // Skip certain custom errors which are not expected to throw on client - if (err.message === NEXT_DYNAMIC_NO_SSR_CODE) return - throw err - }, + onRecoverableError, }) // TODO: Remove shouldHydrate variable when React 18 is stable as it can depend on `reactRoot` existing shouldHydrate = false diff --git a/packages/next/client/on-recoverable-error.ts b/packages/next/client/on-recoverable-error.ts new file mode 100644 index 000000000000000..0a1d7d0f789aac2 --- /dev/null +++ b/packages/next/client/on-recoverable-error.ts @@ -0,0 +1,18 @@ +import { NEXT_DYNAMIC_NO_SSR_CODE } from '../shared/lib/no-ssr-error' + +export default function onRecoverableError(err: any) { + // Using default react onRecoverableError + // x-ref: https://github.com/facebook/react/blob/d4bc16a7d69eb2ea38a88c8ac0b461d5f72cdcab/packages/react-dom/src/client/ReactDOMRoot.js#L83 + const defaultOnRecoverableError = + typeof reportError === 'function' + ? // In modern browsers, reportError will dispatch an error event, + // emulating an uncaught JavaScript error. + reportError + : (error: any) => { + window.console.error(error) + } + + // Skip certain custom errors which are not expected to be reported on client + if (err.digest === NEXT_DYNAMIC_NO_SSR_CODE) return + defaultOnRecoverableError(err) +} From da43e477a9588dce87f456e0a2726fb9973446c5 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Mon, 19 Dec 2022 20:20:37 +0100 Subject: [PATCH 2/2] remove unused import --- packages/next/client/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/next/client/index.tsx b/packages/next/client/index.tsx index 4bb816ec9931446..bd35576b64db1cd 100644 --- a/packages/next/client/index.tsx +++ b/packages/next/client/index.tsx @@ -43,7 +43,6 @@ import { PathnameContextProviderAdapter, } from '../shared/lib/router/adapters' import { SearchParamsContext } from '../shared/lib/hooks-client-context' -import { NEXT_DYNAMIC_NO_SSR_CODE } from '../shared/lib/no-ssr-error' import onRecoverableError from './on-recoverable-error' ///