Throw an error if an action/loader function returns undefined as revalidations need to know whether the loader has previously been executed. undefined also causes issues during SSR stringification for hydration. You should always ensure your loader/action returns a value, and you may return null if you don't wish to return anything. (#9511)
Properly handle redirects to external domains (#9590, #9654)
Preserve the HTTP method on 307/308 redirects (#9597)
This change removes the internal module-level routerSingleton we create and maintain inside our data routers since it was causing a number of headaches for non-simple use cases:
Unit tests are a pain because you need to find a way to reset the singleton in-between tests
Use use a _resetModuleScope singleton for our tests
...but this isn't exposed to users who may want to do their own tests around our router
The JSX children <Route> objects cause non-intuitive behavior based on idiomatic react expectations
Conditional runtime <Route>'s won't get picked up
Adding new <Route>'s during local dev won't get picked up during HMR
Using external state in your elements doesn't work as one might expect (see #9225)
Instead, we are going to lift the singleton out into user-land, so that they create the router singleton and manage it outside the react tree - which is what react 18 is encouraging with useSyncExternalStore anyways! This also means that since users create the router - there's no longer any difference in the rendering aspect for memory/browser/hash routers (which only impacts router/history creation) - so we can get rid of those and trim to a simple RouterProvider
// Before
function App() {
<DataBrowserRouter>
<Route path="/" element={<Layout />}>
<Route index element={<Home />}>
</Route>
<DataBrowserRouter>
}
// After
let router = createBrowserRouter([{
path: "/",
element: <Layout />,
children: [{
index: true,
Stabilize unstable_patchRoutesOnNavigation (#11973)
Add new PatchRoutesOnNavigationFunctionArgs type for convenience (#11967)
Patch Changes
Fix bug when submitting to the current contextual route (parent route with an index child) when an ?index param already exists from a prior submission (#12003)
Fix useFormAction bug - when removing ?index param it would not keep other non-Remix index params (#12003)
Fix bug with fetchers not persisting preventScrollReset through redirects during concurrent fetches (#11999)
Avoid unnecessary console.error on fetcher abort due to back-to-back revalidation calls (#12050)
Fix bugs with partialHydration when hydrating with errors (#12070)
Remove internal cache to fix issues with interrupted patchRoutesOnNavigation calls (#12055)
⚠️ This may be a breaking change if you were relying on this behavior in the unstable_ API
We used to cache in-progress calls to patchRoutesOnNavigation internally so that multiple navigations with the same start/end would only execute the function once and use the same promise
However, this approach was at odds with patch short circuiting if a navigation was interrupted (and the request.signal aborted) since the first invocation's patch would no-op
This cache also made some assumptions as to what a valid cache key might be - and is oblivious to any other application-state changes that may have occurred
So, the cache has been removed because in most cases, repeated calls to something like import() for async routes will already be cached automatically - and if not it's easy enough for users to implement this cache in userland
Remove internal discoveredRoutes FIFO queue from unstable_patchRoutesOnNavigation (#11977)
⚠️ This may be a breaking change if you were relying on this behavior in the unstable_ API
This was originally implemented as an optimization but it proved to be a bit too limiting
If you need this optimization you can implement your own cache inside patchRoutesOnNavigation
Fix types for RouteObject within PatchRoutesOnNavigationFunction's patch method so it doesn't expect agnostic route objects passed to patch (#11967)
Expose errors thrown from patchRoutesOnNavigation directly to useRouteError instead of wrapping them in a 400 ErrorResponse instance (#12111)
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 major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
- `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
- `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency
- `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Bumps the all-node-dependencies group with 4 updates in the / directory: @swc/core, @types/node, eslint and react-router-dom.
Updates
@swc/core
from 1.7.39 to 1.7.40Changelog
Sourced from
@swc/core
's changelog.Commits
75e237b
chore: Publish1.7.40
withswc_core
v1.0.6
a5ea327
chore: Publish1.7.40-nightly-20241026.1
withswc_core
v1.0.6
17b05f2
chore: Publish crates withswc_core
v1.0.6
78500af
fix(typescript): Check whether the method is abstract when checking `is_overl...b8d255b
chore(deps): update dependency swc-plugin-coverage-instrument to ^0.0.25 (#9676)dacb6cf
chore: Publish crates withswc_core
v1.0.5
715c42c
fix(bindings/node): AddVisitTsPropertySignature
(#9670)ba2a942
fix(es/codegen): Improve EndsWithAlphaNum (#9675)8f45eaf
fix(bindings): Update napi to handle string with\0
(#9665)602c667
doc(contributing): Document changeset (#9667)Updates
@types/node
from 22.8.0 to 22.8.1Commits
Updates
eslint
from 8.57.1 to 9.13.0Release notes
Sourced from eslint's releases.
... (truncated)
Changelog
Sourced from eslint's changelog.
... (truncated)
Commits
1a7cdbf
9.13.0627d5bf
Build: changelog update for 9.13.068d2d9d
chore: upgrade to@eslint/js@9.13.0
and@eslint/core@^0.7.0
(#19034)2211f0a
chore: package.json update for@eslint/js
release381c32b
feat: Allow languages to providedefaultLanguageOptions
(#19003)78836d4
fix: update thecomplexity
rule type (#19027)c7abaef
perf: using Node.js compile cache (#19012)bf723bd
feat: Improve eslintrc warning message (#19023)1d7c077
chore: add pkg.type "commonjs" (#19011)abdbfa8
docs: markLintMessage#nodeType
as deprecated (#19019)Updates
react-router-dom
from 5.3.4 to 6.27.0Release notes
Sourced from react-router-dom's releases.
... (truncated)
Changelog
Sourced from react-router-dom's changelog.
... (truncated)
Commits
8cfb4a7
chore: Update version for release (#12121)cde8139
chore: Update version for release (pre) (#12112)9a62e35
chore: Update version for release (pre) (#12101)0389eba
Fix issues with contextual routing and index params (#12003)73fcb9b
Stabilize viewTransiton and flushSync options (#11989)8c9e2b6
Fix types for PatchRoutesOnNavigationFunction (#11967)09c1978
Stabilize unstable_dataStrategy (#11974)25e4981
Stabilize unstable_patchRoutesOnNavigation (#11973)eeb86ab
chore: Update version for release (#11968)7cbe349
chore: Update version for release (pre) (#11955)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