rsnext/packages/next
Zack Tanner 0b87ba29c4
fix: infinite dev reloads when parallel route is treated a page entry (#52061)
### What?
When there's a parallel route adjacent to a tree that has no page
component, it's treated as an invalid entry in `handleAppPing` during
dev HMR, which causes an infinite refresh cycle

### Why?
In #51413, an update was made to `next-app-loader` to support layout
files in parallel routes. Part of this change updated the parallel
segment matching logic to mark the parallel page entry as `[
'@parallel', [ 'page$' ] ]` rather than `[ '@parallel', 'page$' ]`.

This resulted in `handleAppPing` looking for the corresponding page
entry at `client@app@/@parallel/page$/page` (note the `PAGE_SEGMENT`
marker) rather than `client@app@/@parallel/page`, causing the path to be
marked invalid on HMR pings, and triggering an endless fastRefresh.

### How?
A simple patch to fix this would fix this is to update `getEntryKey` to
replace any `PAGE_SEGMENT`'s that leak into the entry which I did in
59a972f53339cf6e444e3bf5be45bf115a24c31a.

The other option that's currently implemented here is to only insert
PAGE_SEGMENT as an array in the scenario where there isn't a page
adjacent to the parallel segment. This is to ensure that the
`parallelKey` is `children` rather than the `@parallel` slot when in
[`createSubtreePropsFromSegmentPath`](59a972f533/packages/next/src/build/webpack/loaders/next-app-loader.ts (L298)).
This seems to not cause any regressions with the issue being fixed in
51413, and also solves this case, but I'm just not 100% sure if this
might break another scenario that I'm not thinking of.

Closes NEXT-1337
Fixes #51951
2023-07-04 12:37:00 +02:00
..
compat
font Remove experimental fontLoaders option from next.config.js (#46886) 2023-03-13 21:34:43 +00:00
image-types Add unstable_getImgProps export from next/image (#51205) 2023-06-29 01:35:08 +00:00
legacy
navigation-types/compat Return null for useParams in pages (#47490) 2023-03-25 10:05:44 +01:00
src fix: infinite dev reloads when parallel route is treated a page entry (#52061) 2023-07-04 12:37:00 +02:00
types make stdout blocking on macos (#51883) 2023-06-27 14:55:27 +00:00
amp.d.ts
amp.js
app.d.ts
app.js
babel.d.ts
babel.js
cache.d.ts Update cache methods for app dir (#49165) 2023-05-03 13:21:58 -07:00
cache.js Update cache methods for app dir (#49165) 2023-05-03 13:21:58 -07:00
client.d.ts
client.js
config.d.ts
config.js
constants.d.ts
constants.js
document.d.ts
document.js
dynamic.d.ts
dynamic.js
error.d.ts
error.js
head.d.ts
head.js
headers.d.ts
headers.js
image.d.ts Add unstable_getImgProps export from next/image (#51205) 2023-06-29 01:35:08 +00:00
image.js Add unstable_getImgProps export from next/image (#51205) 2023-06-29 01:35:08 +00:00
index.d.ts Update revalidate handling for app (#49062) 2023-05-02 08:19:02 -07:00
jest.d.ts
jest.js
license.md
link.d.ts
link.js
navigation.d.ts
navigation.js
package.json v13.4.9-canary.1 2023-07-04 08:30:06 +00:00
README.md
router.d.ts
router.js
script.d.ts
script.js
server.d.ts Update revalidate handling for app (#49062) 2023-05-02 08:19:02 -07:00
server.js Update revalidate handling for app (#49062) 2023-05-02 08:19:02 -07:00
taskfile-ncc.js
taskfile-swc.js fix: webpack target should match node engines (#51852) 2023-06-26 22:15:44 +00:00
taskfile-watch.js
taskfile.js Support react profiling option for app dir client components (#51947) 2023-06-29 00:00:11 +00:00
tsconfig.json next/navigation Typescript support for pages/ (#45919) 2023-02-14 17:26:01 -08:00
web-vitals.d.ts add useReportWebVitals that makes use of web-vitals package (#47319) 2023-03-24 10:13:50 +00:00
web-vitals.js add useReportWebVitals that makes use of web-vitals package (#47319) 2023-03-24 10:13:50 +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