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)
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)
Removed private/internal APIs only required for the Remix v1 backwards compatibility layer and no longer needed in Remix v2 (_isFetchActionRedirect, _hasFetcherDoneAnything) (#10715)
Patch Changes
Properly encode rendered URIs in server rendering to avoid hydration errors (#10769)
Add method/url to error message on aborted query/queryRoute calls (#10793)
Fix a race-condition with loader/action-thrown errors on route.lazy routes (#10778)
Fix type for actionResult on the arguments object passed to shouldRevalidate (#10779)
Add's a new redirectDocument() function which allows users to specify that a redirect from a loader/action should trigger a document reload (via window.location) instead of attempting to navigate to the redirected location via React Router (#10705)
Patch Changes
Ensure useRevalidator is referentially stable across re-renders if revalidations are not actively occurring (#10707)
Ensure hash history always includes a leading slash on hash pathnames (#10753)
Fixes an edge-case affecting web extensions in Firefox that use URLSearchParams and the useSearchParams hook (#10620)
Reorder effects in unstable_usePrompt to avoid throwing an exception if the prompt is unblocked and a navigation is performed synchronously (#10687, #10718)
SSR: Do not include hash in useFormAction() for unspecified actions since it cannot be determined on the server and causes hydration issues (#10758)
SSR: Fix an issue in queryRoute that was not always identifying thrown Response instances (#10717)
react-router-native: Update @ungap/url-search-params dependency from ^0.1.4 to ^0.2.2 (#10590)
Add missing <Form state> prop to populate history.state on submission navigations (#10630)
Trigger an error if a defer promise resolves/rejects with undefined in order to match the behavior of loaders and actions which must return a value or null (#10690)
Properly handle fetcher redirects interrupted by normal navigations (#10674)
Initial-load fetchers should not automatically revalidate on GET navigations (#10688)
Properly decode element id when emulating hash scrolling via <ScrollRestoration> (#10682)
Typescript: Enhance the return type of Route.lazy to prohibit returning an empty object (#10634)
SSR: Support proper hydration of Error subclasses such as ReferenceError/TypeError (#10633)
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)
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)
Removed private/internal APIs only required for the Remix v1 backwards compatibility layer and no longer needed in Remix v2 (_isFetchActionRedirect, _hasFetcherDoneAnything) (#10715)
Patch Changes
Updated dependencies:
@remix-run/router@1.9.0
6.15.0
Minor Changes
Add's a new redirectDocument() function which allows users to specify that a redirect from a loader/action should trigger a document reload (via window.location) instead of attempting to navigate to the redirected location via React Router (#10705)
Patch Changes
Ensure useRevalidator is referentially stable across re-renders if revalidations are not actively occurring (#10707)
Updated dependencies:
@remix-run/router@1.8.0
6.14.2
Patch Changes
Updated dependencies:
@remix-run/router@1.7.2
6.14.1
Patch Changes
Fix loop in unstable_useBlocker when used with an unstable blocker function (#10652)
Fix issues with reused blockers on subsequent navigations (#10656)
Updated dependencies:
@remix-run/router@1.7.1
6.14.0
Patch Changes
Strip basename from locations provided to unstable_useBlocker functions to match useLocation (#10573)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps react-router from 6.3.0 to 6.16.0.
Release notes
Sourced from react-router's releases.
... (truncated)
Changelog
Sourced from react-router's changelog.
... (truncated)
Commits
13fb25a
chore: Update version for release (#10866)6bd6fb9
chore: Update version for release (pre) (#10849)9b1d184
chore: Update version for release (pre) (#10844)b6614b0
Add generics for Remix type enhancements (#10843)3069e52
chore: Update version for release (pre) (#10828)a4495de
Export proper ErrorResponse type (#10811)ae75cdc
Export ShouldRevalidateFunctionArgs interface (#10797)6a08757
Organize imports (#10777)e79cb77
chore: Update version for release (#10776)cd1e25a
chore: Update version for release (pre) (#10771)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show