Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update all non-major dependencies (#1191)
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`20.14.15` -> `20.15.0`](https://renovatebot.com/diffs/npm/@types%2fnode/20.14.15/20.15.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/20.14.15/20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.14.15/20.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [lint-staged](https://togithub.com/lint-staged/lint-staged) | [`15.2.8` -> `15.2.9`](https://renovatebot.com/diffs/npm/lint-staged/15.2.8/15.2.9) | [![age](https://developer.mend.io/api/mc/badges/age/npm/lint-staged/15.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/lint-staged/15.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/lint-staged/15.2.8/15.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lint-staged/15.2.8/15.2.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [react](https://reactjs.org/) ([source](https://togithub.com/facebook/react/tree/HEAD/packages/react)) | [`18.2.0` -> `18.3.1`](https://renovatebot.com/diffs/npm/react/18.2.0/18.3.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react/18.2.0/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react/18.2.0/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [react-dom](https://reactjs.org/) ([source](https://togithub.com/facebook/react/tree/HEAD/packages/react-dom)) | [`18.2.0` -> `18.3.1`](https://renovatebot.com/diffs/npm/react-dom/18.2.0/18.3.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-dom/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-dom/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-dom/18.2.0/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-dom/18.2.0/18.3.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [react-router](https://togithub.com/remix-run/react-router) ([source](https://togithub.com/remix-run/react-router/tree/HEAD/packages/react-router)) | [`6.15.0` -> `6.26.1`](https://renovatebot.com/diffs/npm/react-router/6.15.0/6.26.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router/6.15.0/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router/6.15.0/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [react-router-dom](https://togithub.com/remix-run/react-router) ([source](https://togithub.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | [`6.15.0` -> `6.26.1`](https://renovatebot.com/diffs/npm/react-router-dom/6.15.0/6.26.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router-dom/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router-dom/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router-dom/6.15.0/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router-dom/6.15.0/6.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>lint-staged/lint-staged (lint-staged)</summary> ### [`v15.2.9`](https://togithub.com/lint-staged/lint-staged/blob/HEAD/CHANGELOG.md#1529) [Compare Source](https://togithub.com/lint-staged/lint-staged/compare/v15.2.8...v15.2.9) ##### Patch Changes - [#​1463](https://togithub.com/lint-staged/lint-staged/pull/1463) [`b69ce2d`](https://togithub.com/lint-staged/lint-staged/commit/b69ce2ddfd5a7ae576f4fef4afc60b8a81f3c945) Thanks [@​iiroj](https://togithub.com/iiroj)! - Set the maximum number of event listeners to the number of tasks. This should silence the console warning `MaxListenersExceededWarning: Possible EventEmitter memory leak detected`. </details> <details> <summary>facebook/react (react)</summary> ### [`v18.3.1`](https://togithub.com/facebook/react/compare/a87edf62d7d69705ddbcec9a24f0780b3db7535f...a87edf62d7d69705ddbcec9a24f0780b3db7535f) [Compare Source](https://togithub.com/facebook/react/compare/v18.3.0...v18.3.1) ### [`v18.3.0`](https://togithub.com/facebook/react/compare/v18.2.0...a87edf62d7d69705ddbcec9a24f0780b3db7535f) [Compare Source](https://togithub.com/facebook/react/compare/v18.2.0...v18.3.0) </details> <details> <summary>facebook/react (react-dom)</summary> ### [`v18.3.1`](https://togithub.com/facebook/react/compare/a87edf62d7d69705ddbcec9a24f0780b3db7535f...a87edf62d7d69705ddbcec9a24f0780b3db7535f) [Compare Source](https://togithub.com/facebook/react/compare/v18.3.0...v18.3.1) ### [`v18.3.0`](https://togithub.com/facebook/react/compare/v18.2.0...a87edf62d7d69705ddbcec9a24f0780b3db7535f) [Compare Source](https://togithub.com/facebook/react/compare/v18.2.0...v18.3.0) </details> <details> <summary>remix-run/react-router (react-router)</summary> ### [`v6.26.1`](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.1) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.1) ### [`v6.26.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6260) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.0) ##### Minor Changes - Add a new `replace(url, init?)` alternative to `redirect(url, init?)` that performs a `history.replaceState` instead of a `history.pushState` on client-side navigation redirects ([#​11811](https://togithub.com/remix-run/react-router/pull/11811)) ##### Patch Changes - Fix initial hydration behavior when using `future.v7_partialHydration` along with `unstable_patchRoutesOnMiss` ([#​11838](https://togithub.com/remix-run/react-router/pull/11838)) - During initial hydration, `router.state.matches` will now include any partial matches so that we can render ancestor `HydrateFallback` components - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.25.1`](https://togithub.com/remix-run/react-router/releases/tag/react-router%406.25.1): v6.25.1 [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.25.1) See the changelog for release notes: https://github.com/remix-run/react-router/blob/main/CHANGELOG.md#v6251 ### [`v6.25.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6250) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.25.0) ##### Minor Changes - Stabilize `future.unstable_skipActionErrorRevalidation` as `future.v7_skipActionErrorRevalidation` ([#​11769](https://togithub.com/remix-run/react-router/pull/11769)) - When this flag is enabled, actions will not automatically trigger a revalidation if they return/throw a `Response` with a `4xx`/`5xx` status code - You may still opt-into revalidation via `shouldRevalidate` - This also changes `shouldRevalidate`'s `unstable_actionStatus` parameter to `actionStatus` ##### Patch Changes - Fix regression and properly decode paths inside `useMatch` so matches/params reflect decoded params ([#​11789](https://togithub.com/remix-run/react-router/pull/11789)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.24.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6241) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.24.1) ##### Patch Changes - When using `future.v7_relativeSplatPath`, properly resolve relative paths in splat routes that are children of pathless routes ([#​11633](https://togithub.com/remix-run/react-router/pull/11633)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.24.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6240) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.24.0) ##### Minor Changes - Add support for Lazy Route Discovery (a.k.a. Fog of War) ([#​11626](https://togithub.com/remix-run/react-router/pull/11626)) - RFC: <https://togithub.com/remix-run/react-router/discussions/11113> - `unstable_patchRoutesOnMiss` docs: <https://reactrouter.com/en/main/routers/create-browser-router> ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.23.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6231) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.23.1) ##### Patch Changes - allow undefined to be resolved with `<Await>` ([#​11513](https://togithub.com/remix-run/react-router/pull/11513)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.23.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6230) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.23.0) ##### Minor Changes - Add a new `unstable_dataStrategy` configuration option ([#​11098](https://togithub.com/remix-run/react-router/pull/11098)) - This option allows Data Router applications to take control over the approach for executing route loaders and actions - The default implementation is today's behavior, to fetch all loaders in parallel, but this option allows users to implement more advanced data flows including Remix single-fetch, middleware/context APIs, automatic loader caching, and more ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.22.3`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6223) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.3) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.22.2`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6222) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.2) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.22.1`](https://togithub.com/remix-run/react-router/releases/tag/react-router%406.22.1): v6.22.1 [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.1) See the changelog for release notes: https://github.com/remix-run/react-router/blob/main/CHANGELOG.md#v6221 ### [`v6.22.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6220) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.0) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.21.3`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6213) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.3) ##### Patch Changes - Remove leftover `unstable_` prefix from `Blocker`/`BlockerFunction` types ([#​11187](https://togithub.com/remix-run/react-router/pull/11187)) ### [`v6.21.2`](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.2) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.2) ### [`v6.21.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6211) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.1) ##### Patch Changes - Fix bug with `route.lazy` not working correctly on initial SPA load when `v7_partialHydration` is specified ([#​11121](https://togithub.com/remix-run/react-router/pull/11121)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.21.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6210) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.0) ##### Minor Changes - Add a new `future.v7_relativeSplatPath` flag to implement a breaking bug fix to relative routing when inside a splat route. ([#​11087](https://togithub.com/remix-run/react-router/pull/11087)) This fix was originally added in [#​10983](https://togithub.com/remix-run/react-router/issues/10983) and was later reverted in [#​11078](https://togithub.com/remix-run/react-router/pull/11078) because it was determined that a large number of existing applications were relying on the buggy behavior (see [#​11052](https://togithub.com/remix-run/react-router/issues/11052)) **The Bug** The buggy behavior is that without this flag, the default behavior when resolving relative paths is to *ignore* any splat (`*`) portion of the current route path. **The Background** This decision was originally made thinking that it would make the concept of nested different sections of your apps in `<Routes>` easier if relative routing would *replace* the current splat: ```jsx <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="dashboard/*" element={<Dashboard />} /> </Routes> </BrowserRouter> ``` Any paths like `/dashboard`, `/dashboard/team`, `/dashboard/projects` will match the `Dashboard` route. The dashboard component itself can then render nested `<Routes>`: ```jsx function Dashboard() { return ( <div> <h2>Dashboard</h2> <nav> <Link to="/">Dashboard Home</Link> <Link to="team">Team</Link> <Link to="projects">Projects</Link> </nav> <Routes> <Route path="/" element={<DashboardHome />} /> <Route path="team" element={<DashboardTeam />} /> <Route path="projects" element={<DashboardProjects />} /> </Routes> </div> ); } ``` Now, all links and route paths are relative to the router above them. This makes code splitting and compartmentalizing your app really easy. You could render the `Dashboard` as its own independent app, or embed it into your large app without making any changes to it. **The Problem** The problem is that this concept of ignoring part of a path breaks a lot of other assumptions in React Router - namely that `"."` always means the current location pathname for that route. When we ignore the splat portion, we start getting invalid paths when using `"."`: ```jsx // If we are on URL /dashboard/team, and we want to link to /dashboard/team: function DashboardTeam() { // ❌ This is broken and results in <a href="/dashboard"> return <Link to=".">A broken link to the Current URL</Link>; // ✅ This is fixed but super unintuitive since we're already at /dashboard/team! return <Link to="./team">A broken link to the Current URL</Link>; } ``` We've also introduced an issue that we can no longer move our `DashboardTeam` component around our route hierarchy easily - since it behaves differently if we're underneath a non-splat route, such as `/dashboard/:widget`. Now, our `"."` links will, properly point to ourself *inclusive of the dynamic param value* so behavior will break from it's corresponding usage in a `/dashboard/*` route. Even worse, consider a nested splat route configuration: ```jsx <BrowserRouter> <Routes> <Route path="dashboard"> <Route path="*" element={<Dashboard />} /> </Route> </Routes> </BrowserRouter> ``` Now, a `<Link to=".">` and a `<Link to="..">` inside the `Dashboard` component go to the same place! That is definitely not correct! Another common issue arose in Data Routers (and Remix) where any `<Form>` should post to it's own route `action` if you the user doesn't specify a form action: ```jsx let router = createBrowserRouter({ path: "/dashboard", children: [ { path: "*", action: dashboardAction, Component() { // ❌ This form is broken! It throws a 405 error when it submits because // it tries to submit to /dashboard (without the splat value) and the parent // `/dashboard` route doesn't have an action return <Form method="post">...</Form>; }, }, ], }); ``` This is just a compounded issue from the above because the default location for a `Form` to submit to is itself (`"."`) - and if we ignore the splat portion, that now resolves to the parent route. **The Solution** If you are leveraging this behavior, it's recommended to enable the future flag, move your splat to it's own route, and leverage `../` for any links to "sibling" pages: ```jsx <BrowserRouter> <Routes> <Route path="dashboard"> <Route index path="*" element={<Dashboard />} /> </Route> </Routes> </BrowserRouter> function Dashboard() { return ( <div> <h2>Dashboard</h2> <nav> <Link to="..">Dashboard Home</Link> <Link to="../team">Team</Link> <Link to="../projects">Projects</Link> </nav> <Routes> <Route path="/" element={<DashboardHome />} /> <Route path="team" element={<DashboardTeam />} /> <Route path="projects" element={<DashboardProjects />} /> </Router> </div> ); } ``` This way, `.` means "the full current pathname for my route" in all cases (including static, dynamic, and splat routes) and `..` always means "my parents pathname". ##### Patch Changes - Properly handle falsy error values in ErrorBoundary's ([#​11071](https://togithub.com/remix-run/react-router/pull/11071)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.20.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6201) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.1) ##### Patch Changes - Revert the `useResolvedPath` fix for splat routes due to a large number of applications that were relying on the buggy behavior (see [https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329](https://togithub.com/remix-run/react-router/issues/11052#issuecomment-1836589329)). We plan to re-introduce this fix behind a future flag in the next minor version. ([#​11078](https://togithub.com/remix-run/react-router/pull/11078)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.20.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6200) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.0) ##### Minor Changes - Export the `PathParam` type from the public API ([#​10719](https://togithub.com/remix-run/react-router/pull/10719)) ##### Patch Changes - Fix bug with `resolveTo` in splat routes ([#​11045](https://togithub.com/remix-run/react-router/pull/11045)) - This is a follow up to [#​10983](https://togithub.com/remix-run/react-router/pull/10983) to handle the few other code paths using `getPathContributingMatches` - This removes the `UNSAFE_getPathContributingMatches` export from `@remix-run/router` since we no longer need this in the `react-router`/`react-router-dom` layers - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.19.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6190) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.19.0) ##### Minor Changes - Add `unstable_flushSync` option to `useNavigate`/`useSumbit`/`fetcher.load`/`fetcher.submit` to opt-out of `React.startTransition` and into `ReactDOM.flushSync` for state updates ([#​11005](https://togithub.com/remix-run/react-router/pull/11005)) - Remove the `unstable_` prefix from the [`useBlocker`](https://reactrouter.com/en/main/hooks/use-blocker) hook as it's been in use for enough time that we are confident in the API. We do not plan to remove the prefix from `unstable_usePrompt` due to differences in how browsers handle `window.confirm` that prevent React Router from guaranteeing consistent/correct behavior. ([#​10991](https://togithub.com/remix-run/react-router/pull/10991)) ##### Patch Changes - Fix `useActionData` so it returns proper contextual action data and not *any* action data in the tree ([#​11023](https://togithub.com/remix-run/react-router/pull/11023)) - Fix bug in `useResolvedPath` that would cause `useResolvedPath(".")` in a splat route to lose the splat portion of the URL path. ([#​10983](https://togithub.com/remix-run/react-router/pull/10983)) -⚠️ This fixes a quite long-standing bug specifically for `"."` paths inside a splat route which incorrectly dropped the splat portion of the URL. If you are relative routing via `"."` inside a splat route in your application you should double check that your logic is not relying on this buggy behavior and update accordingly. - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.18.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6180) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.18.0) ##### Patch Changes - Fix the `future` prop on `BrowserRouter`, `HashRouter` and `MemoryRouter` so that it accepts a `Partial<FutureConfig>` instead of requiring all flags to be included. ([#​10962](https://togithub.com/remix-run/react-router/pull/10962)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.17.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6170) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.17.0) ##### Patch Changes - Fix `RouterProvider` `future` prop type to be a `Partial<FutureConfig>` so that not all flags must be specified ([#​10900](https://togithub.com/remix-run/react-router/pull/10900)) - Updated dependencies: - `@remix-run/[email protected]` ### [`v6.16.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#6160) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.16.0) ##### Minor Changes - In order to move towards stricter TypeScript support in the future, we're aiming to replace current usages of `any` with `unknown` on exposed typings for user-provided data. To do this in Remix v2 without introducing breaking changes in React Router v6, we have added generics to a number of shared types. These continue to default to `any` in React Router and are overridden with `unknown` in Remix. In React Router v7 we plan to move these to `unknown` as a breaking change. ([#​10843](https://togithub.com/remix-run/react-router/pull/10843)) - `Location` now accepts a generic for the `location.state` value - `ActionFunctionArgs`/`ActionFunction`/`LoaderFunctionArgs`/`LoaderFunction` now accept a generic for the `context` parameter (only used in SSR usages via `createStaticHandler`) - The return type of `useMatches` (now exported as `UIMatch`) accepts generics for `match.data` and `match.handle` - both of which were already set to `unknown` - Move the `@private` class export `ErrorResponse` to an `UNSAFE_ErrorResponseImpl` export since it is an implementation detail and there should be no construction of `ErrorResponse` instances in userland. This frees us up to export a `type ErrorResponse` which correlates to an instance of the class via `InstanceType`. Userland code should only ever be using `ErrorResponse` as a type and should be type-narrowing via `isRouteErrorResponse`. ([#​10811](https://togithub.com/remix-run/react-router/pull/10811)) - Export `ShouldRevalidateFunctionArgs` interface ([#​10797](https://togithub.com/remix-run/react-router/pull/10797)) - Removed private/internal APIs only required for the Remix v1 backwards compatibility layer and no longer needed in Remix v2 (`_isFetchActionRedirect`, `_hasFetcherDoneAnything`) ([#​10715](https://togithub.com/remix-run/react-router/pull/10715)) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` </details> <details> <summary>remix-run/react-router (react-router-dom)</summary> ### [`v6.26.1`](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.1) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.1) ### [`v6.26.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6260) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.26.0) ##### Minor Changes - Add a new `replace(url, init?)` alternative to `redirect(url, init?)` that performs a `history.replaceState` instead of a `history.pushState` on client-side navigation redirects ([#​11811](https://togithub.com/remix-run/react-router/pull/11811)) ##### Patch Changes - Fix initial hydration behavior when using `future.v7_partialHydration` along with `unstable_patchRoutesOnMiss` ([#​11838](https://togithub.com/remix-run/react-router/pull/11838)) - During initial hydration, `router.state.matches` will now include any partial matches so that we can render ancestor `HydrateFallback` components - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.25.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6251) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.25.1) ##### Patch Changes - Memoize some `RouterProvider` internals to reduce unnecessary re-renders ([#​11803](https://togithub.com/remix-run/react-router/pull/11803)) - Updated dependencies: - `[email protected]` ### [`v6.25.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6250) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.25.0) ##### Minor Changes - Stabilize `future.unstable_skipActionErrorRevalidation` as `future.v7_skipActionErrorRevalidation` ([#​11769](https://togithub.com/remix-run/react-router/pull/11769)) - When this flag is enabled, actions will not automatically trigger a revalidation if they return/throw a `Response` with a `4xx`/`5xx` status code - You may still opt-into revalidation via `shouldRevalidate` - This also changes `shouldRevalidate`'s `unstable_actionStatus` parameter to `actionStatus` ##### Patch Changes - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.24.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6241) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.24.1) ##### Patch Changes - Remove `polyfill.io` reference from warning message because the domain was sold and has since been determined to serve malware ([#​11741](https://togithub.com/remix-run/react-router/pull/11741)) - See <https://sansec.io/research/polyfill-supply-chain-attack> - Export `NavLinkRenderProps` type for easier typing of custom `NavLink` callback ([#​11553](https://togithub.com/remix-run/react-router/pull/11553)) - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.24.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6240) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.24.0) ##### Minor Changes - Add support for Lazy Route Discovery (a.k.a. Fog of War) ([#​11626](https://togithub.com/remix-run/react-router/pull/11626)) - RFC: <https://togithub.com/remix-run/react-router/discussions/11113> - `unstable_patchRoutesOnMiss` docs: <https://reactrouter.com/en/main/routers/create-browser-router> ##### Patch Changes - Fix `fetcher.submit` types - remove incorrect `navigate`/`fetcherKey`/`unstable_viewTransition` options because they are only relevant for `useSubmit` ([#​11631](https://togithub.com/remix-run/react-router/pull/11631)) - Allow falsy `location.state` values passed to `<StaticRouter>` ([#​11495](https://togithub.com/remix-run/react-router/pull/11495)) - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.23.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6231) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.23.1) ##### Patch Changes - Check for `document` existence when checking `startViewTransition` ([#​11544](https://togithub.com/remix-run/react-router/pull/11544)) - Change the `react-router-dom/server` import back to `react-router-dom` instead of `index.ts` ([#​11514](https://togithub.com/remix-run/react-router/pull/11514)) - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.23.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6230) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.23.0) ##### Minor Changes - Add a new `unstable_dataStrategy` configuration option ([#​11098](https://togithub.com/remix-run/react-router/pull/11098)) - This option allows Data Router applications to take control over the approach for executing route loaders and actions - The default implementation is today's behavior, to fetch all loaders in parallel, but this option allows users to implement more advanced data flows including Remix single-fetch, middleware/context APIs, automatic loader caching, and more ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.22.3`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6223) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.3) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.22.2`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6222) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.2) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.22.1`](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.1) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.1) ### [`v6.22.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6220) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.22.0) ##### Minor Changes - Include a `window__reactRouterVersion` tag for CWV Report detection ([#​11222](https://togithub.com/remix-run/react-router/pull/11222)) ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.21.3`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6213) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.3) ##### Patch Changes - Fix `NavLink` `isPending` when a `basename` is used ([#​11195](https://togithub.com/remix-run/react-router/pull/11195)) - Remove leftover `unstable_` prefix from `Blocker`/`BlockerFunction` types ([#​11187](https://togithub.com/remix-run/react-router/pull/11187)) - Updated dependencies: - `[email protected]` ### [`v6.21.2`](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.2) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.2) ### [`v6.21.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6211) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.1) ##### Patch Changes - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.21.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6210) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.21.0) ##### Minor Changes - Add a new `future.v7_relativeSplatPath` flag to implement a breaking bug fix to relative routing when inside a splat route. ([#​11087](https://togithub.com/remix-run/react-router/pull/11087)) This fix was originally added in [#​10983](https://togithub.com/remix-run/react-router/issues/10983) and was later reverted in [#​11078](https://togithub.com/remix-run/react-router/pull/11078) because it was determined that a large number of existing applications were relying on the buggy behavior (see [#​11052](https://togithub.com/remix-run/react-router/issues/11052)) **The Bug** The buggy behavior is that without this flag, the default behavior when resolving relative paths is to *ignore* any splat (`*`) portion of the current route path. **The Background** This decision was originally made thinking that it would make the concept of nested different sections of your apps in `<Routes>` easier if relative routing would *replace* the current splat: ```jsx <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="dashboard/*" element={<Dashboard />} /> </Routes> </BrowserRouter> ``` Any paths like `/dashboard`, `/dashboard/team`, `/dashboard/projects` will match the `Dashboard` route. The dashboard component itself can then render nested `<Routes>`: ```jsx function Dashboard() { return ( <div> <h2>Dashboard</h2> <nav> <Link to="/">Dashboard Home</Link> <Link to="team">Team</Link> <Link to="projects">Projects</Link> </nav> <Routes> <Route path="/" element={<DashboardHome />} /> <Route path="team" element={<DashboardTeam />} /> <Route path="projects" element={<DashboardProjects />} /> </Routes> </div> ); } ``` Now, all links and route paths are relative to the router above them. This makes code splitting and compartmentalizing your app really easy. You could render the `Dashboard` as its own independent app, or embed it into your large app without making any changes to it. **The Problem** The problem is that this concept of ignoring part of a path breaks a lot of other assumptions in React Router - namely that `"."` always means the current location pathname for that route. When we ignore the splat portion, we start getting invalid paths when using `"."`: ```jsx // If we are on URL /dashboard/team, and we want to link to /dashboard/team: function DashboardTeam() { // ❌ This is broken and results in <a href="/dashboard"> return <Link to=".">A broken link to the Current URL</Link>; // ✅ This is fixed but super unintuitive since we're already at /dashboard/team! return <Link to="./team">A broken link to the Current URL</Link>; } ``` We've also introduced an issue that we can no longer move our `DashboardTeam` component around our route hierarchy easily - since it behaves differently if we're underneath a non-splat route, such as `/dashboard/:widget`. Now, our `"."` links will, properly point to ourself *inclusive of the dynamic param value* so behavior will break from it's corresponding usage in a `/dashboard/*` route. Even worse, consider a nested splat route configuration: ```jsx <BrowserRouter> <Routes> <Route path="dashboard"> <Route path="*" element={<Dashboard />} /> </Route> </Routes> </BrowserRouter> ``` Now, a `<Link to=".">` and a `<Link to="..">` inside the `Dashboard` component go to the same place! That is definitely not correct! Another common issue arose in Data Routers (and Remix) where any `<Form>` should post to it's own route `action` if you the user doesn't specify a form action: ```jsx let router = createBrowserRouter({ path: "/dashboard", children: [ { path: "*", action: dashboardAction, Component() { // ❌ This form is broken! It throws a 405 error when it submits because // it tries to submit to /dashboard (without the splat value) and the parent // `/dashboard` route doesn't have an action return <Form method="post">...</Form>; }, }, ], }); ``` This is just a compounded issue from the above because the default location for a `Form` to submit to is itself (`"."`) - and if we ignore the splat portion, that now resolves to the parent route. **The Solution** If you are leveraging this behavior, it's recommended to enable the future flag, move your splat to it's own route, and leverage `../` for any links to "sibling" pages: ```jsx <BrowserRouter> <Routes> <Route path="dashboard"> <Route index path="*" element={<Dashboard />} /> </Route> </Routes> </BrowserRouter> function Dashboard() { return ( <div> <h2>Dashboard</h2> <nav> <Link to="..">Dashboard Home</Link> <Link to="../team">Team</Link> <Link to="../projects">Projects</Link> </nav> <Routes> <Route path="/" element={<DashboardHome />} /> <Route path="team" element={<DashboardTeam />} /> <Route path="projects" element={<DashboardProjects />} /> </Router> </div> ); } ``` This way, `.` means "the full current pathname for my route" in all cases (including static, dynamic, and splat routes) and `..` always means "my parents pathname". ##### Patch Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.20.1`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6201) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.1) ##### Patch Changes - Revert the `useResolvedPath` fix for splat routes due to a large number of applications that were relying on the buggy behavior (see [https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329](https://togithub.com/remix-run/react-router/issues/11052#issuecomment-1836589329)). We plan to re-introduce this fix behind a future flag in the next minor version. ([#​11078](https://togithub.com/remix-run/react-router/pull/11078)) - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.20.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6200) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.20.0) ##### Minor Changes - Export the `PathParam` type from the public API ([#​10719](https://togithub.com/remix-run/react-router/pull/10719)) ##### Patch Changes - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.19.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6190) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.19.0) ##### Minor Changes - Add `unstable_flushSync` option to `useNavigate`/`useSumbit`/`fetcher.load`/`fetcher.submit` to opt-out of `React.startTransition` and into `ReactDOM.flushSync` for state updates ([#​11005](https://togithub.com/remix-run/react-router/pull/11005)) - Allow `unstable_usePrompt` to accept a `BlockerFunction` in addition to a `boolean` ([#​10991](https://togithub.com/remix-run/react-router/pull/10991)) ##### Patch Changes - Fix issue where a changing fetcher `key` in a `useFetcher` that remains mounted wasn't getting picked up ([#​11009](https://togithub.com/remix-run/react-router/pull/11009)) - Fix `useFormAction` which was incorrectly inheriting the `?index` query param from child route `action` submissions ([#​11025](https://togithub.com/remix-run/react-router/pull/11025)) - Fix `NavLink` `active` logic when `to` location has a trailing slash ([#​10734](https://togithub.com/remix-run/react-router/pull/10734)) - Updated dependencies: - `[email protected]` - `@remix-run/[email protected]` ### [`v6.18.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6180) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.18.0) ##### Minor Changes - Add support for manual fetcher key specification via `useFetcher({ key: string })` so you can access the same fetcher instance from different components in your application without prop-drilling ([RFC](https://togithub.com/remix-run/remix/discussions/7698)) ([#​10960](https://togithub.com/remix-run/react-router/pull/10960)) - Fetcher keys are now also exposed on the fetchers returned from `useFetchers` so that they can be looked up by `key` - Add `navigate`/`fetcherKey` params/props to `useSumbit`/`Form` to support kicking off a fetcher submission under the hood with an optionally user-specified `key` ([#​10960](https://togithub.com/remix-run/react-router/pull/10960)) - Invoking a fetcher in this way is ephemeral and stateless - If you need to access the state of one of these fetchers, you will need to leverage `useFetcher({ key })` to look it up elsewhere ##### Patch Changes - Adds a fetcher context to `RouterProvider` that holds completed fetcher data, in preparation for the upcoming future flag that will change the fetcher persistence/cleanup behavior ([#​10961](https://togithub.com/remix-run/react-router/pull/10961)) - Fix the `future` prop on `BrowserRouter`, `HashRouter` and `MemoryRouter` so that it accepts a `Partial<FutureConfig>` instead of requiring all flags to be included. ([#​10962](https://togithub.com/remix-run/react-router/pull/10962)) - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.17.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6170) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.17.0) ##### Minor Changes - Add experimental support for the [View Transitions API](https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition) via `document.startViewTransition` to enable CSS animated transitions on SPA navigations in your application. ([#​10916](https://togithub.com/remix-run/react-router/pull/10916)) The simplest approach to enabling a View Transition in your React Router app is via the new `<Link unstable_viewTransition>` prop. This will cause the navigation DOM update to be wrapped in `document.startViewTransition` which will enable transitions for the DOM update. Without any additional CSS styles, you'll get a basic cross-fade animation for your page. If you need to apply more fine-grained styles for your animations, you can leverage the `unstable_useViewTransitionState` hook which will tell you when a transition is in progress and you can use that to apply classes or styles: ```jsx function ImageLink(to, src, alt) { let isTransitioning = unstable_useViewTransitionState(to); return ( <Link to={to} unstable_viewTransition> <img src={src} alt={alt} style={{ viewTransitionName: isTransitioning ? "image-expand" : "", }} /> </Link> ); } ``` You can also use the `<NavLink unstable_viewTransition>` shorthand which will manage the hook usage for you and automatically add a `transitioning` class to the `<a>` during the transition: ```css a.transitioning img { view-transition-name: "image-expand"; } ``` ```jsx <NavLink to={to} unstable_viewTransition> <img src={src} alt={alt} /> </NavLink> ``` For an example usage of View Transitions with React Router, check out [our fork](https://togithub.com/brophdawg11/react-router-records) of the [Astro Records](https://togithub.com/Charca/astro-records) demo. For more information on using the View Transitions API, please refer to the [Smooth and simple transitions with the View Transitions API](https://developer.chrome.com/docs/web-platform/view-transitions/) guide from the Google Chrome team. Please note, that because the `ViewTransition` API is a DOM API, we now export a specific `RouterProvider` from `react-router-dom` with this functionality. If you are importing `RouterProvider` from `react-router`, then it will not support view transitions. ([#​10928](https://togithub.com/remix-run/react-router/pull/10928) ##### Patch Changes - Log a warning and fail gracefully in `ScrollRestoration` when `sessionStorage` is unavailable ([#​10848](https://togithub.com/remix-run/react-router/pull/10848)) - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ### [`v6.16.0`](https://togithub.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#6160) [Compare Source](https://togithub.com/remix-run/react-router/compare/[email protected]@6.16.0) ##### Minor Changes - Updated dependencies: - `@remix-run/[email protected]` - `[email protected]` ##### Patch Changes - Properly encode rendered URIs in server rendering to avoid hydration errors ([#​10769](https://togithub.com/remix-run/react-router/pull/10769)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "* 0-4 * * 3" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View the [repository job log](https://developer.mend.io/github/brave/brave-variations). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yNi4xIiwidXBkYXRlZEluVmVyIjoiMzguMjYuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
- Loading branch information