-
BREAKING CHANGE: Move
@remix-run/form-data-parser,@remix-run/headers, and@remix-run/route-patterntopeerDependencies. -
BREAKING CHANGE: Rename
InferRouteHandler=>BuildRouteHandlerand add aMethodgeneric parameter to build aRouteHandlertype from a string, route pattern, or route. -
BREAKING CHANGE: Removed support for passing a
Routeobject toredirect()response helper. Useredirect(routes.home.href())instead. -
BREAKING CHANGE: Move
html(),json(), andredirect()response helpers to@remix-run/fetch-router/response-helpersexport -
Always run global middleware, even when no route matches
-
More precise type inference for
router.get(),router.post(), etc. route handlers. -
Add support for nesting route maps via object spread syntax
import { route, resources } from '@remix-run/fetch-router' let routes = route({ brands: { ...resources('brands', { only: ['index', 'show'] }), products: resources('brands/:brandId/products', { only: ['index', 'show'] }), }, }) routes.brands.index // Route<'GET', '/brands'> routes.brands.show // Route<'GET', '/brands/:id'> routes.brands.products.index // Route<'GET', '/brands/:brandId/products'> routes.brands.products.show // Route<'GET', '/brands/:brandId/products/:id'>
-
Add support for
URLobjects inredirect()response helper -
Add support for
request.signalabort, which now short-circuits the middleware chain.router.fetch()will now throwDOMExceptionwitherror.name === 'AbortError'when a request is aborted -
Fix an issue where
Router'sfetchwasn't spec-compliant -
Provide empty
context.formDatatoPOST/PUT/etc handlers whenparseFormData: false