From caa08957de6bf3b92388a7822510686a2a6c19da Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Fri, 18 Oct 2024 10:16:29 -0400 Subject: [PATCH] Add deprecation warnings for v7 flags in v6 (#11750) --- .changeset/ninety-queens-thank.md | 9 +++ package.json | 8 +- .../__tests__/exports-test.tsx | 1 + .../__tests__/scroll-restoration-test.tsx | 16 +++- packages/react-router-dom/index.tsx | 12 +++ .../__tests__/exports-test.tsx | 1 + .../__tests__/Router-basename-test.tsx | 6 +- .../react-router/__tests__/Routes-test.tsx | 4 +- .../descendant-routes-warning-test.tsx | 15 +++- packages/react-router/index.ts | 2 + packages/react-router/lib/components.tsx | 8 ++ packages/react-router/lib/deprecations.ts | 77 +++++++++++++++++++ packages/router/utils.ts | 7 ++ 13 files changed, 155 insertions(+), 11 deletions(-) create mode 100644 .changeset/ninety-queens-thank.md create mode 100644 packages/react-router/lib/deprecations.ts diff --git a/.changeset/ninety-queens-thank.md b/.changeset/ninety-queens-thank.md new file mode 100644 index 0000000000..d24f0befce --- /dev/null +++ b/.changeset/ninety-queens-thank.md @@ -0,0 +1,9 @@ +--- +"react-router-dom": minor +"react-router": minor +"@remix-run/router": minor +--- + +- Log deprecation warnings for v7 flags +- Add deprecation warnings to `json`/`defer` in favor of returning raw objects + - These methods will be removed in React Router v7 diff --git a/package.json b/package.json index 3edd2894c7..0b3813669c 100644 --- a/package.json +++ b/package.json @@ -108,16 +108,16 @@ "none": "58.1 kB" }, "packages/react-router/dist/react-router.production.min.js": { - "none": "15.0 kB" + "none": "16.5 kB" }, "packages/react-router/dist/umd/react-router.production.min.js": { - "none": "17.5 kB" + "none": "19.0 kB" }, "packages/react-router-dom/dist/react-router-dom.production.min.js": { - "none": "17.3 kB" + "none": "17.5 kB" }, "packages/react-router-dom/dist/umd/react-router-dom.production.min.js": { - "none": "23.8 kB" + "none": "24.0 kB" } }, "pnpm": { diff --git a/packages/react-router-dom/__tests__/exports-test.tsx b/packages/react-router-dom/__tests__/exports-test.tsx index dcf2e22ba7..1df240e667 100644 --- a/packages/react-router-dom/__tests__/exports-test.tsx +++ b/packages/react-router-dom/__tests__/exports-test.tsx @@ -2,6 +2,7 @@ import * as ReactRouter from "react-router"; import * as ReactRouterDOM from "react-router-dom"; let nonReExportedKeys = new Set([ + "UNSAFE_logV6DeprecationWarnings", "UNSAFE_mapRouteProperties", "UNSAFE_useRoutesImpl", ]); diff --git a/packages/react-router-dom/__tests__/scroll-restoration-test.tsx b/packages/react-router-dom/__tests__/scroll-restoration-test.tsx index 42e2231c86..756e114ed6 100644 --- a/packages/react-router-dom/__tests__/scroll-restoration-test.tsx +++ b/packages/react-router-dom/__tests__/scroll-restoration-test.tsx @@ -39,9 +39,21 @@ describe(`ScrollRestoration`, () => { children: testPages, }, ], - { basename: "/base", window: testWindow } + { + basename: "/base", + window: testWindow, + future: { + v7_fetcherPersist: true, + v7_normalizeFormMethod: true, + v7_partialHydration: true, + v7_skipActionErrorRevalidation: true, + v7_relativeSplatPath: true, + }, + } + ); + let { container } = render( + ); - let { container } = render(); expect(getHtml(container)).toMatch("On page 1"); diff --git a/packages/react-router-dom/index.tsx b/packages/react-router-dom/index.tsx index 1c7e6f766e..88080f9e64 100644 --- a/packages/react-router-dom/index.tsx +++ b/packages/react-router-dom/index.tsx @@ -33,6 +33,7 @@ import { UNSAFE_DataRouterStateContext as DataRouterStateContext, UNSAFE_NavigationContext as NavigationContext, UNSAFE_RouteContext as RouteContext, + UNSAFE_logV6DeprecationWarnings as logV6DeprecationWarnings, UNSAFE_mapRouteProperties as mapRouteProperties, UNSAFE_useRouteId as useRouteId, UNSAFE_useRoutesImpl as useRoutesImpl, @@ -716,6 +717,11 @@ export function RouterProvider({ [router.future.v7_relativeSplatPath] ); + React.useEffect( + () => logV6DeprecationWarnings(future, router.future), + [future, router.future] + ); + // The fragment and {null} here are important! We need them to keep React 18's // useId happy when we are server-rendering since we may have a