From 032250ceb4935fbbb072263cf3d5463c30f86b5c Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Tue, 20 Dec 2022 12:57:15 +0100 Subject: [PATCH 1/2] Also check error.message as digest for recoverable errors in pages --- packages/next/client/on-recoverable-error.ts | 3 ++- test/development/basic/next-dynamic.test.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/next/client/on-recoverable-error.ts b/packages/next/client/on-recoverable-error.ts index 0a1d7d0f789aac2..9a1391d755db7a8 100644 --- a/packages/next/client/on-recoverable-error.ts +++ b/packages/next/client/on-recoverable-error.ts @@ -3,6 +3,7 @@ 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 digest = err.digest || err.message const defaultOnRecoverableError = typeof reportError === 'function' ? // In modern browsers, reportError will dispatch an error event, @@ -13,6 +14,6 @@ export default function onRecoverableError(err: any) { } // Skip certain custom errors which are not expected to be reported on client - if (err.digest === NEXT_DYNAMIC_NO_SSR_CODE) return + if (digest === NEXT_DYNAMIC_NO_SSR_CODE) return defaultOnRecoverableError(err) } diff --git a/test/development/basic/next-dynamic.test.ts b/test/development/basic/next-dynamic.test.ts index 77b5a6ff7605032..7155120781cdbc4 100644 --- a/test/development/basic/next-dynamic.test.ts +++ b/test/development/basic/next-dynamic.test.ts @@ -2,7 +2,7 @@ import { join } from 'path' import cheerio from 'cheerio' import webdriver from 'next-webdriver' import { createNext, FileRef } from 'e2e-utils' -import { renderViaHTTP, check } from 'next-test-utils' +import { renderViaHTTP, check, hasRedbox } from 'next-test-utils' import { NextInstance } from 'test/lib/next-modes/base' describe('basic next/dynamic usage', () => { @@ -124,6 +124,7 @@ describe('basic next/dynamic usage', () => { () => browser.elementByCss('body').text(), /Hello World 1/ ) + expect(await hasRedbox(browser)).toBe(false) } finally { if (browser) { await browser.close() From 56582dfef07bb2c25db784a77a55e6526b954715 Mon Sep 17 00:00:00 2001 From: Jiachi Liu Date: Tue, 20 Dec 2022 13:08:17 +0100 Subject: [PATCH 2/2] use digest info --- packages/next/client/on-recoverable-error.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/next/client/on-recoverable-error.ts b/packages/next/client/on-recoverable-error.ts index 9a1391d755db7a8..932d3f9e08588ab 100644 --- a/packages/next/client/on-recoverable-error.ts +++ b/packages/next/client/on-recoverable-error.ts @@ -1,9 +1,10 @@ import { NEXT_DYNAMIC_NO_SSR_CODE } from '../shared/lib/no-ssr-error' -export default function onRecoverableError(err: any) { +export default function onRecoverableError(err: any, errorInfo: any) { + const digest = err.digest || errorInfo.digest + // Using default react onRecoverableError // x-ref: https://github.com/facebook/react/blob/d4bc16a7d69eb2ea38a88c8ac0b461d5f72cdcab/packages/react-dom/src/client/ReactDOMRoot.js#L83 - const digest = err.digest || err.message const defaultOnRecoverableError = typeof reportError === 'function' ? // In modern browsers, reportError will dispatch an error event,