From c57c32029598ce29152c2454b0850d38d6f13e53 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Thu, 21 Mar 2024 13:39:55 +0100 Subject: [PATCH] WIP manual --- packages/next/src/client/components/layout-router.tsx | 4 ++++ .../next/src/client/components/react-dev-overlay/shared.ts | 2 +- .../src/client/components/router-reducer/ppr-navigations.ts | 6 ++++-- .../server/future/route-modules/pages/builtin/_error.tsx | 5 +++++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/next/src/client/components/layout-router.tsx b/packages/next/src/client/components/layout-router.tsx index c9807a34e66f63..34851604d9a3c3 100644 --- a/packages/next/src/client/components/layout-router.tsx +++ b/packages/next/src/client/components/layout-router.tsx @@ -84,7 +84,9 @@ function walkAddRefetch( } return treeToRecreate + // @ts-expect-error FIXME: `findDOMNode` was removed in React 19. } +// @ts-expect-error FIXME: `findDOMNode` was removed in React 19. // TODO-APP: Replace with new React API for finding dom nodes without a `ref` when available /** @@ -98,11 +100,13 @@ function findDOMNode( // Only apply strict mode warning when not in production if (process.env.NODE_ENV !== 'production') { const originalConsoleError = console.error + // @ts-expect-error FIXME: `findDOMNode` was removed in React 19. try { console.error = (...messages) => { // Ignore strict mode warning for the findDomNode call below if (!messages[0].includes('Warning: %s is deprecated in StrictMode.')) { originalConsoleError(...messages) + // @ts-expect-error FIXME: `findDOMNode` was removed in React 19. } } return ReactDOM.findDOMNode(instance) diff --git a/packages/next/src/client/components/react-dev-overlay/shared.ts b/packages/next/src/client/components/react-dev-overlay/shared.ts index 3151721c09ca6c..cd7c7c8884bbe6 100644 --- a/packages/next/src/client/components/react-dev-overlay/shared.ts +++ b/packages/next/src/client/components/react-dev-overlay/shared.ts @@ -94,7 +94,7 @@ export const INITIAL_OVERLAY_STATE: OverlayState = { } export function useErrorOverlayReducer() { - return useReducer>((_state, action) => { + return useReducer((_state: OverlayState, action: BusEvent): OverlayState => { switch (action.type) { case ACTION_BUILD_OK: { return { ..._state, buildError: null } diff --git a/packages/next/src/client/components/router-reducer/ppr-navigations.ts b/packages/next/src/client/components/router-reducer/ppr-navigations.ts index 891a343763eec7..cc191e978b38e8 100644 --- a/packages/next/src/client/components/router-reducer/ppr-navigations.ts +++ b/packages/next/src/client/components/router-reducer/ppr-navigations.ts @@ -524,8 +524,10 @@ function createPendingCacheNode( // Create a deferred promise. This will be fulfilled once the dynamic // response is received from the server. - rsc: createDeferredRsc(), - head: isLeafSegment ? createDeferredRsc() : null, + // TODO: Double check why we need to type-cast here. + // It's likely some conflict between the bounded `ReactNode = AwaitedReactNode | Promise` and the unbounded `Promise` + rsc: createDeferredRsc() as React.ReactNode, + head: isLeafSegment ? (createDeferredRsc() as React.ReactNode) : null, lazyDataResolved: false, } } diff --git a/packages/next/src/server/future/route-modules/pages/builtin/_error.tsx b/packages/next/src/server/future/route-modules/pages/builtin/_error.tsx index b88bb824b263ff..cdb863452bed3e 100644 --- a/packages/next/src/server/future/route-modules/pages/builtin/_error.tsx +++ b/packages/next/src/server/future/route-modules/pages/builtin/_error.tsx @@ -19,5 +19,10 @@ export const routeModule = new PagesRouteModule({ App, Document, }, + // @ts-expect-error Actual type error. + // `userland` does not specify any props it'll pass. + // But `moduleError` is a component where the `statusCode` prop is required. + // Either `statusCode` needs to be optional or `PagesRouteModule` needs to ensure via types that it'll somewher inject to require props + // e.g. by saying it accepts components with any props not components with no props i.e. {}. userland: moduleError, })