No description
Find a file
JJ Kasper 1149cccd94
Add client router filter handling (#46283)
This adds a new client router filter for app paths and redirects so that
we correctly hard navigate when a transition for one of this paths is
encountered. This fixes the longstanding issue where redirects weren't
applied on the client so a redirect that matches a dynamic route as well
would transition to the dynamic route on client transition but not on
direct visit. Similarly this ensures we hard navigate to app paths from
pages even if a page dynamic route matches the path.

The specific filter leveraged here is a bloom filter as we can tolerate
some false matches (currently targeting an error rate of `2%`) as they
just trigger a hard navigation which should be acceptable and this also
avoids needing to send an entire manifest with the related paths.

We can leverage a manifest for the generated SSG paths as well in a
follow-up to fix `fallback: false` routes not being navigated correctly
on client-transition in some cases as well.


The filter is initially behind an `experimental.clientRouterFilter` flag
in `next.config.js` although this is auto-enabled when leveraging app
directory to ensure proper transitions.

fixes NEXT-609
closes: https://github.com/vercel/next.js/pull/46235
x-ref: [slack
thread](https://vercel.slack.com/archives/C035J346QQL/p1677028663246719)

x-ref: https://github.com/vercel/next.js/issues/41344
x-ref: https://github.com/vercel/next.js/issues/40062
x-ref: https://github.com/vercel/next.js/issues/37889
x-ref: https://github.com/vercel/next.js/discussions/26426
x-ref: https://github.com/vercel/next.js/issues/35837

## Bug

- [x] Related issues linked using `fixes #number`
- [x] Integration tests added
- [ ] Errors have a helpful link attached, see
[`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md)
2023-02-22 22:02:31 -08:00
.devcontainer Remove devcontainer network host argument (#44157) 2022-12-19 16:38:20 -08:00
.github Update Edge Runtime docs page (#46239) 2023-02-22 20:40:21 -08:00
.husky Replace pre-commit with husky (#38350) 2022-07-06 11:14:16 -05:00
.vscode Add tests for parallel routes / interception and handle router state patch merging client-side (#45615) 2023-02-13 16:12:44 +01:00
bench fix typo in comment and unused variable remove (#45307) 2023-02-02 14:55:23 -08:00
contributing Fix adding-exmaples.md doc (#46051) 2023-02-17 22:35:12 -08:00
docs Update Edge Runtime docs page (#46239) 2023-02-22 20:40:21 -08:00
errors feat: add contentDispositionType config to Image Optimization API (#46254) 2023-02-22 19:56:51 +00:00
examples feat: add OTEL instrumentation for next-server + OTEL example (#46198) 2023-02-22 16:08:22 +01:00
packages Add client router filter handling (#46283) 2023-02-22 22:02:31 -08:00
scripts chore(ci): add job to test codemods (#46068) 2023-02-20 04:42:02 +00:00
test Add client router filter handling (#46283) 2023-02-22 22:02:31 -08:00
.alexignore Enable Alex documentation linting for docs (#26598) 2021-06-25 11:40:50 -05:00
.alexrc Add section to next/future/image docs about Known Browser Bugs (#39759) 2022-08-20 00:21:00 +00:00
.eslintignore refactor: Latest Tigris sdk and example using decorators (#44256) 2023-01-18 20:44:18 -08:00
.eslintrc.json Replace eslint rule for no-shadow with typescript-eslint/no-shadow (#44936) 2023-01-16 16:02:59 -08:00
.gitattributes the way towards webpack 5 typings (#29105) 2021-09-21 19:17:16 +02:00
.gitignore Include tsconfig.json in tests (#45879) 2023-02-14 18:37:09 -08:00
.npmrc declare pnpm7 as engine (#37303) 2022-05-30 13:13:36 +00:00
.prettierignore hmr error improvements (#30616) 2023-01-06 20:35:16 +01:00
.prettierignore_staged hmr error improvements (#30616) 2023-01-06 20:35:16 +01:00
.prettierrc.json Prettier trailingComma default value to es5 since 2.0 (#14391) 2020-06-22 13:25:24 +02:00
azure-pipelines.yml Update to latest version of pnpm (#44791) 2023-01-11 17:36:52 -08:00
CODE_OF_CONDUCT.md updated code of conduct to v2.1 (#34208) 2022-02-10 18:11:42 -06:00
contributing.md refactor: split up CONTRIBUTING.md (#40515) 2022-09-16 14:54:58 -07:00
jest.config.js Allow unit tests to be written in packages/next/src (#45222) 2023-01-24 14:32:09 +00:00
jest.replay.config.js Add Replay integration for dev e2e tests (#40955) 2022-09-29 14:45:10 -07:00
lerna.json v13.1.7-canary.27 2023-02-22 13:47:53 -08:00
license.md Update license year (#44403) 2023-01-01 11:12:49 +01:00
lint-staged.config.js Run dev tests against default CNA templates (#45211) 2023-01-24 11:01:03 -08:00
package.json Update app-dir react bundle to leverage edge build (#46208) 2023-02-23 00:24:26 +01:00
plopfile.js Revert "Fix new-error command" (#45221) 2023-01-24 16:47:48 -08:00
pnpm-lock.yaml Update app-dir react bundle to leverage edge build (#46208) 2023-02-23 00:24:26 +01:00
pnpm-workspace.yaml misc: add benchmarking script for edge rendering (#40716) 2022-09-27 17:57:16 +02:00
readme.md Monorepo (#5341) 2018-10-01 01:02:10 +02:00
release.js Fix labels for release sections 2021-11-21 13:11:54 +01:00
run-tests.js test(integration): emits successful test output for continue on error (#46008) 2023-02-16 15:44:38 -08:00
test-file.txt Add additional file serving tests (#12479) 2020-05-04 11:58:19 -05:00
tsconfig-tsec.json Integrate tsec into the linting process (#33746) 2022-02-24 16:59:18 -08:00
tsconfig.json Adds tests to ensure eslint-plugin-next's available rules are properly exported and recommended rules are correctly defined. (#38183) 2022-06-30 11:31:33 -05:00
tsec-exemptions.json Move core files to src folder and move JS files to TypeScript (#44405) 2023-01-03 10:05:50 +01:00
turbo.json Fix turbo cache miss due to depending on gitignored files (#45166) 2023-01-24 11:53:07 +00:00
UPGRADING.md Move upgrading guide to /docs (#10727) 2020-02-28 23:46:18 +01:00
vercel.json Silence GH Comments for Preview URLs (#18766) 2020-11-03 21:59:47 +00:00

Next.js

Getting Started

Visit https://nextjs.org/learn to get started with Next.js.

Documentation

Visit https://nextjs.org/docs to view the full documentation.

Who is using Next.js?

Next.js is used by the world's leading companies. Check out the Next.js Showcase to learn more.

Community

The Next.js community can be found on GitHub Discussions, where you can ask questions, voice ideas, and share your projects.

To chat with other community members you can join the Next.js Discord.

Our Code of Conduct applies to all Next.js community channels.

Contributing

Please see our contributing.md.

Good First Issues

We have a list of good first issues that contain bugs that have a relatively limited scope. This is a great place to get started, gain experience, and get familiar with our contribution process.

Authors

Security

If you believe you have found a security vulnerability in Next.js, we encourage you to responsibly disclose this and not open a public issue. We will investigate all legitimate reports. Email security@vercel.com to disclose any security vulnerabilities.

https://vercel.com/security