diff --git a/test/development/app-dir/dynamic-io-dev-cache-scope/next.config.js b/test/development/app-dir/dynamic-io-dev-cache-scope/next.config.js
index ac4afcf43219..b0b2ad8d2353 100644
--- a/test/development/app-dir/dynamic-io-dev-cache-scope/next.config.js
+++ b/test/development/app-dir/dynamic-io-dev-cache-scope/next.config.js
@@ -4,6 +4,7 @@
const nextConfig = {
experimental: {
dynamicIO: true,
+ ppr: true,
},
}
diff --git a/test/development/app-dir/dynamic-io-dev-errors/next.config.js b/test/development/app-dir/dynamic-io-dev-errors/next.config.js
index ac4afcf43219..b0b2ad8d2353 100644
--- a/test/development/app-dir/dynamic-io-dev-errors/next.config.js
+++ b/test/development/app-dir/dynamic-io-dev-errors/next.config.js
@@ -4,6 +4,7 @@
const nextConfig = {
experimental: {
dynamicIO: true,
+ ppr: true,
},
}
diff --git a/test/development/app-dir/dynamic-io-dev-warmup/next.config.js b/test/development/app-dir/dynamic-io-dev-warmup/next.config.js
index bb76fc99dc6b..9026854a15ea 100644
--- a/test/development/app-dir/dynamic-io-dev-warmup/next.config.js
+++ b/test/development/app-dir/dynamic-io-dev-warmup/next.config.js
@@ -1,5 +1,6 @@
module.exports = {
experimental: {
dynamicIO: true,
+ ppr: true,
},
}
diff --git a/test/development/app-dir/dynamic-io-warnings/next.config.js b/test/development/app-dir/dynamic-io-warnings/next.config.js
index bb76fc99dc6b..9026854a15ea 100644
--- a/test/development/app-dir/dynamic-io-warnings/next.config.js
+++ b/test/development/app-dir/dynamic-io-warnings/next.config.js
@@ -1,5 +1,6 @@
module.exports = {
experimental: {
dynamicIO: true,
+ ppr: true,
},
}
diff --git a/test/e2e/app-dir/dynamic-io-dynamic-imports/bundled/next.config.js b/test/e2e/app-dir/dynamic-io-dynamic-imports/bundled/next.config.js
index 10cc99d480a1..b8faf416637f 100644
--- a/test/e2e/app-dir/dynamic-io-dynamic-imports/bundled/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-dynamic-imports/bundled/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
prerenderEarlyExit: false,
},
diff --git a/test/e2e/app-dir/dynamic-io-dynamic-imports/dynamic-io-dynamic-imports.test.ts b/test/e2e/app-dir/dynamic-io-dynamic-imports/dynamic-io-dynamic-imports.test.ts
index 938c2db8ab2e..a5e32066337e 100644
--- a/test/e2e/app-dir/dynamic-io-dynamic-imports/dynamic-io-dynamic-imports.test.ts
+++ b/test/e2e/app-dir/dynamic-io-dynamic-imports/dynamic-io-dynamic-imports.test.ts
@@ -17,11 +17,10 @@ describe('async imports in dynamicIO', () => {
await next.readFile('.next/prerender-manifest.json')
)
- let prerenderedRoutes = Object.keys(prerenderManifest.routes).sort()
-
- if (process.env.__NEXT_EXPERIMENTAL_PPR === 'true') {
- // For the purpose of this test we don't consider an incomplete shell.
- prerenderedRoutes = prerenderedRoutes.filter((route) => {
+ // For the purpose of this test we don't consider an incomplete shell.
+ const prerenderedRoutes = Object.keys(prerenderManifest.routes)
+ .sort()
+ .filter((route) => {
const filename = route.replace(/^\//, '').replace(/^$/, 'index')
try {
return next
@@ -37,7 +36,6 @@ describe('async imports in dynamicIO', () => {
}
}
})
- }
expect(prerenderedRoutes).toMatchInlineSnapshot(`
[
diff --git a/test/e2e/app-dir/dynamic-io-dynamic-imports/external/next.config.js b/test/e2e/app-dir/dynamic-io-dynamic-imports/external/next.config.js
index 026621644ec9..4968320760cd 100644
--- a/test/e2e/app-dir/dynamic-io-dynamic-imports/external/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-dynamic-imports/external/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
},
serverExternalPackages: ['external-esm-pkg-with-async-import'],
diff --git a/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.platform-dynamic.test.ts b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.platform-dynamic.test.ts
index 268c63cfc768..f2cfe9f952ee 100644
--- a/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.platform-dynamic.test.ts
+++ b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.platform-dynamic.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
const stackStart = /\s+at /
function createExpectError(cliOutput: string) {
@@ -75,15 +73,9 @@ function runTests(options: { withMinification: boolean }) {
throw new Error('expected build not to fail for fully static project')
}
- if (WITH_PPR) {
- expect(next.cliOutput).toContain('◐ / ')
- const $ = await next.render$('/')
- expect($('[data-fallback]').length).toBe(2)
- } else {
- expect(next.cliOutput).toContain('ƒ / ')
- const $ = await next.render$('/')
- expect($('[data-fallback]').length).toBe(0)
- }
+ expect(next.cliOutput).toContain('◐ / ')
+ const $ = await next.render$('/')
+ expect($('[data-fallback]').length).toBe(2)
})
})
diff --git a/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.test.ts b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.test.ts
index 54d46b635fc0..3b32bfb96d07 100644
--- a/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.test.ts
+++ b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.sync-dynamic.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
const stackStart = /\s+at /
function createExpectError(cliOutput: string) {
@@ -75,15 +73,9 @@ function runTests(options: { withMinification: boolean }) {
throw new Error('expected build not to fail for fully static project')
}
- if (WITH_PPR) {
- expect(next.cliOutput).toContain('◐ / ')
- const $ = await next.render$('/')
- expect($('[data-fallback]').length).toBe(2)
- } else {
- expect(next.cliOutput).toContain('ƒ / ')
- const $ = await next.render$('/')
- expect($('[data-fallback]').length).toBe(2)
- }
+ expect(next.cliOutput).toContain('◐ / ')
+ const $ = await next.render$('/')
+ expect($('[data-fallback]').length).toBe(2)
})
})
@@ -162,15 +154,9 @@ function runTests(options: { withMinification: boolean }) {
throw new Error('expected build not to fail for fully static project')
}
- if (WITH_PPR) {
- expect(next.cliOutput).toContain('◐ / ')
- const $ = await next.render$('/')
- expect($('[data-fallback]').length).toBe(2)
- } else {
- expect(next.cliOutput).toContain('ƒ / ')
- const $ = await next.render$('/')
- expect($('[data-fallback]').length).toBe(0)
- }
+ expect(next.cliOutput).toContain('◐ / ')
+ const $ = await next.render$('/')
+ expect($('[data-fallback]').length).toBe(2)
})
})
@@ -249,15 +235,9 @@ function runTests(options: { withMinification: boolean }) {
throw new Error('expected build not to fail for fully static project')
}
- if (WITH_PPR) {
- expect(next.cliOutput).toContain('◐ / ')
- const $ = await next.render$('/')
- expect($('[data-fallback]').length).toBe(2)
- } else {
- expect(next.cliOutput).toContain('ƒ / ')
- const $ = await next.render$('/')
- expect($('[data-fallback]').length).toBe(0)
- }
+ expect(next.cliOutput).toContain('◐ / ')
+ const $ = await next.render$('/')
+ expect($('[data-fallback]').length).toBe(2)
})
})
diff --git a/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts
index 337fd4bdea38..c904b560dd77 100644
--- a/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts
+++ b/test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
const stackStart = /\s+at /
function createExpectError(cliOutput: string) {
@@ -205,16 +203,10 @@ function runTests(options: { withMinification: boolean }) {
throw new Error('expected build not to fail for fully static project')
}
- if (WITH_PPR) {
- expect(next.cliOutput).toContain('◐ / ')
- const $ = await next.render$('/')
- expect($('#dynamic').text()).toBe('Dynamic')
- expect($('[data-fallback]').length).toBe(1)
- } else {
- expect(next.cliOutput).toContain('ƒ / ')
- const $ = await next.render$('/')
- expect($('#dynamic').text()).toBe('Dynamic')
- }
+ expect(next.cliOutput).toContain('◐ / ')
+ const $ = await next.render$('/')
+ expect($('#dynamic').text()).toBe('Dynamic')
+ expect($('[data-fallback]').length).toBe(1)
})
})
@@ -379,16 +371,11 @@ function runTests(options: { withMinification: boolean }) {
// Turbopack doesn't support disabling minification yet
withMinification || isTurbopack ? undefined : 'IndirectionTwo'
)
- if (WITH_PPR) {
- // React currently fatals the render in canary because we don't have access to the prerender API there. with a fatal only
- // one task actually reports and error at the moment. We should fix upstream but for now we exclude the second error when PPR is off
- // because we are using canary React and renderToReadableStream rather than experimental React and prerender
- expectError(
- 'Route "/": A component accessed data, headers, params, searchParams, or a short-lived cache without a Suspense boundary nor a "use cache" above it.',
- // Turbopack doesn't support disabling minification yet
- withMinification || isTurbopack ? undefined : 'IndirectionThree'
- )
- }
+ expectError(
+ 'Route "/": A component accessed data, headers, params, searchParams, or a short-lived cache without a Suspense boundary nor a "use cache" above it.',
+ // Turbopack doesn't support disabling minification yet
+ withMinification || isTurbopack ? undefined : 'IndirectionThree'
+ )
expectError('Error occurred prerendering page "/"')
expectError('exiting the build.')
})
@@ -421,36 +408,18 @@ function runTests(options: { withMinification: boolean }) {
}
})
- if (WITH_PPR) {
- it('should partially prerender when all dynamic components are inside a Suspense boundary', async () => {
- try {
- await next.start()
- } catch {
- throw new Error(
- 'expected build not to fail for fully static project'
- )
- // we expect the build to fail
- }
-
- expect(next.cliOutput).toContain('◐ / ')
- const $ = await next.render$('/')
- expect($('[data-fallback]').length).toBe(2)
- })
- } else {
- it('should not error the build when all dynamic components are inside a Suspense boundary', async () => {
- try {
- await next.start()
- } catch {
- throw new Error(
- 'expected build not to fail for fully static project'
- )
- }
+ it('should partially prerender when all dynamic components are inside a Suspense boundary', async () => {
+ try {
+ await next.start()
+ } catch {
+ throw new Error('expected build not to fail for fully static project')
+ // we expect the build to fail
+ }
- expect(next.cliOutput).toContain('ƒ / ')
- const $ = await next.render$('/')
- expect($('[data-fallback]').length).toBe(2)
- })
- }
+ expect(next.cliOutput).toContain('◐ / ')
+ const $ = await next.render$('/')
+ expect($('[data-fallback]').length).toBe(2)
+ })
})
})
}
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-boundary/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-dynamic-route/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-error-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-error-route/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-error-route/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-error-route/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-route/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-with-suspense/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-with-suspense/next.config.js
index a3d79eebc79c..3a95d8820b36 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-with-suspense/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-metadata-static-with-suspense/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
pprFallbacks: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
dynamicIO: true,
serverMinification: true,
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js
index a4a933871151..56a3077126ed 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-root/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: false,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-dynamic-route/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/dynamic-viewport-static-route/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/lazy-module-init/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/lazy-module-init/next.config.js
index a4a933871151..56a3077126ed 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/lazy-module-init/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/lazy-module-init/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: false,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/prospective-render-errors/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/prospective-render-errors/next.config.js
index a4a933871151..56a3077126ed 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/prospective-render-errors/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/prospective-render-errors/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: false,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/static/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-with-fallback/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-client-search-without-fallback/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-with-fallback/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-cookies-without-fallback/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-random-with-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-random-with-fallback/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-random-with-fallback/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-random-with-fallback/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-random-without-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-random-without-fallback/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-random-without-fallback/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-random-without-fallback/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-with-fallback/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-errors/fixtures/sync-server-search-without-fallback/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-request-apis/dynamic-io-request-apis.test.ts b/test/e2e/app-dir/dynamic-io-request-apis/dynamic-io-request-apis.test.ts
index 07efcdd2484e..b7b126558c31 100644
--- a/test/e2e/app-dir/dynamic-io-request-apis/dynamic-io-request-apis.test.ts
+++ b/test/e2e/app-dir/dynamic-io-request-apis/dynamic-io-request-apis.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
const stackStart = /\s+at /
function createExpectError(cliOutput: string) {
@@ -62,11 +60,9 @@ describe(`Request Promises`, () => {
}
const expectError = createExpectError(next.cliOutput)
- if (WITH_PPR) {
- expectError(
- 'Error: During prerendering, `params` rejects when the prerender is complete'
- )
- }
+ expectError(
+ 'Error: During prerendering, `params` rejects when the prerender is complete'
+ )
expectError(
'Error: During prerendering, `searchParams` rejects when the prerender is complete'
)
@@ -104,11 +100,9 @@ describe(`Request Promises`, () => {
}
const expectError = createExpectError(next.cliOutput)
- if (WITH_PPR) {
- expectError(
- 'Error: During prerendering, `params` rejects when the prerender is complete'
- )
- }
+ expectError(
+ 'Error: During prerendering, `params` rejects when the prerender is complete'
+ )
expectError(
'Error: During prerendering, `searchParams` rejects when the prerender is complete'
)
diff --git a/test/e2e/app-dir/dynamic-io-request-apis/fixtures/reject-hanging-promises-dynamic/next.config.js b/test/e2e/app-dir/dynamic-io-request-apis/fixtures/reject-hanging-promises-dynamic/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-request-apis/fixtures/reject-hanging-promises-dynamic/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-request-apis/fixtures/reject-hanging-promises-dynamic/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io-request-apis/fixtures/reject-hanging-promises-static/next.config.js b/test/e2e/app-dir/dynamic-io-request-apis/fixtures/reject-hanging-promises-static/next.config.js
index b23633baadc7..c790206c375e 100644
--- a/test/e2e/app-dir/dynamic-io-request-apis/fixtures/reject-hanging-promises-static/next.config.js
+++ b/test/e2e/app-dir/dynamic-io-request-apis/fixtures/reject-hanging-promises-static/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
serverMinification: true,
},
diff --git a/test/e2e/app-dir/dynamic-io/app/node-crypto/random-int/up-to/uncached/page.tsx b/test/e2e/app-dir/dynamic-io/app/node-crypto/random-int/up-to/uncached/page.tsx
index a7d32639c0e0..fa2a29a7860d 100644
--- a/test/e2e/app-dir/dynamic-io/app/node-crypto/random-int/up-to/uncached/page.tsx
+++ b/test/e2e/app-dir/dynamic-io/app/node-crypto/random-int/up-to/uncached/page.tsx
@@ -5,7 +5,11 @@ import { SentinelValue } from '../../../../getSentinelValue'
export default async function Page() {
await new Promise((r) => process.nextTick(r))
const first = crypto.randomInt(128)
- const second = crypto.randomInt(128)
+ let second = crypto.randomInt(128)
+ while (first === second) {
+ // Ensure that the second value is different from the first
+ second = crypto.randomInt(128)
+ }
return (
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts
index 94570682a7e1..20270c4c361b 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.connection.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
describe('dynamic-io', () => {
const { next, isNextDev, skipped } = nextTestSetup({
files: __dirname,
@@ -12,46 +10,29 @@ describe('dynamic-io', () => {
return
}
- if (WITH_PPR) {
- it('should partially prerender pages that use connection', async () => {
- let $ = await next.render$('/connection/static-behavior/boundary', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#foo').text()).toBe('foo')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#foo').text()).toBe('foo')
- }
- })
- } else {
- it('should produce dynamic pages when using connection', async () => {
- let $ = await next.render$('/connection/static-behavior/boundary', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#foo').text()).toBe('foo')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#foo').text()).toBe('foo')
- }
- })
- }
+ it('should partially prerender pages that use connection', async () => {
+ let $ = await next.render$('/connection/static-behavior/boundary', {})
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#foo').text()).toBe('foo')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#foo').text()).toBe('foo')
+ }
+ })
- if (WITH_PPR) {
- it('should be able to pass connection as a promise to another component and trigger an intermediate Suspense boundary', async () => {
- const $ = await next.render$('/connection/static-behavior/pass-deeply')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#fallback').length).toBe(0)
- expect($('#page').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#fallback').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- }
- })
- }
+ it('should be able to pass connection as a promise to another component and trigger an intermediate Suspense boundary', async () => {
+ const $ = await next.render$('/connection/static-behavior/pass-deeply')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#fallback').length).toBe(0)
+ expect($('#page').text()).toBe('at runtime')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#fallback').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
})
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts
index 6113f3863142..dde36ca12092 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.cookies.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
describe('dynamic-io', () => {
const { next, isNextDev, skipped } = nextTestSetup({
files: __dirname,
@@ -12,72 +10,44 @@ describe('dynamic-io', () => {
return
}
- if (WITH_PPR) {
- it('should partially prerender pages that use async cookies', async () => {
- let $ = await next.render$('/cookies/static-behavior/async', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#x-sentinel').text()).toBe('hello')
- }
- })
-
- it('should partially prerender pages that use sync cookies', async () => {
- let $ = await next.render$('/cookies/static-behavior/sync', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#x-sentinel').text()).toBe('hello')
- }
- })
- } else {
- it('should produce dynamic pages when using async or sync cookies', async () => {
- let $ = await next.render$('/cookies/static-behavior/sync', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- }
-
- $ = await next.render$('/cookies/static-behavior/async', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- }
- })
- }
+ it('should partially prerender pages that use async cookies', async () => {
+ let $ = await next.render$('/cookies/static-behavior/async', {})
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#x-sentinel').text()).toBe('hello')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#x-sentinel').text()).toBe('hello')
+ }
+ })
- if (WITH_PPR) {
- it('should be able to pass cookies as a promise to another component and trigger an intermediate Suspense boundary', async () => {
- const $ = await next.render$('/cookies/static-behavior/pass-deeply')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#fallback').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#fallback').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- }
- })
- }
+ it('should partially prerender pages that use sync cookies', async () => {
+ let $ = await next.render$('/cookies/static-behavior/sync', {})
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#x-sentinel').text()).toBe('hello')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#x-sentinel').text()).toBe('hello')
+ }
+ })
+
+ it('should be able to pass cookies as a promise to another component and trigger an intermediate Suspense boundary', async () => {
+ const $ = await next.render$('/cookies/static-behavior/pass-deeply')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#fallback').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#fallback').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
it('should be able to access cookie properties asynchronously', async () => {
let $ = await next.render$('/cookies/exercise/async', {})
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.date.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.date.test.ts
index f2b4a48033a1..80df46dfe8af 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.date.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.date.test.ts
@@ -1,6 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
+import expect from 'expect'
describe('dynamic-io', () => {
const { next, isNextDev, skipped } = nextTestSetup({
@@ -36,12 +35,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#value').text()).toMatch(/^\d+$/)
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#value').text()).toMatch(/^\d+$/)
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#value').text()).toMatch(/^\d+$/)
}
@@ -66,12 +61,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#value').text()).toContain('GMT')
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#value').text()).toContain('GMT')
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#value').text()).toContain('GMT')
}
@@ -96,12 +87,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#value').text()).toContain('GMT')
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#value').text()).toContain('GMT')
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#value').text()).toContain('GMT')
}
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts
index 98966384ed9d..5ea305fbe0e8 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.headers.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
describe('dynamic-io', () => {
const { next, isNextDev, skipped } = nextTestSetup({
files: __dirname,
@@ -12,72 +10,44 @@ describe('dynamic-io', () => {
return
}
- if (WITH_PPR) {
- it('should partially prerender pages that use async headers', async () => {
- let $ = await next.render$('/headers/static-behavior/async', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#x-sentinel').text()).toBe('hello')
- }
- })
-
- it('should partially prerender pages that use sync headers', async () => {
- let $ = await next.render$('/headers/static-behavior/sync', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#x-sentinel').text()).toBe('hello')
- }
- })
- } else {
- it('should produce dynamic pages when using async or sync headers', async () => {
- let $ = await next.render$('/headers/static-behavior/sync', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- }
-
- $ = await next.render$('/headers/static-behavior/async', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#x-sentinel').text()).toBe('hello')
- }
- })
- }
+ it('should partially prerender pages that use async headers', async () => {
+ let $ = await next.render$('/headers/static-behavior/async', {})
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#x-sentinel').text()).toBe('hello')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#x-sentinel').text()).toBe('hello')
+ }
+ })
- if (WITH_PPR) {
- it('should be able to pass headers as a promise to another component and trigger an intermediate Suspense boundary', async () => {
- const $ = await next.render$('/headers/static-behavior/pass-deeply')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#fallback').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#fallback').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- }
- })
- }
+ it('should partially prerender pages that use sync headers', async () => {
+ let $ = await next.render$('/headers/static-behavior/sync', {})
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#x-sentinel').text()).toBe('hello')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#x-sentinel').text()).toBe('hello')
+ }
+ })
+
+ it('should be able to pass headers as a promise to another component and trigger an intermediate Suspense boundary', async () => {
+ const $ = await next.render$('/headers/static-behavior/pass-deeply')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#fallback').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#fallback').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
it('should be able to access headers properties asynchronously', async () => {
let $ = await next.render$('/headers/exercise/async', {})
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.node-crypto.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.node-crypto.test.ts
index 9f5f10ce6f53..27fc2a1b90b8 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.node-crypto.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.node-crypto.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
describe('dynamic-io', () => {
const { next, isNextDev, skipped } = nextTestSetup({
files: __dirname,
@@ -36,12 +34,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
@@ -66,12 +60,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
@@ -96,12 +86,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
@@ -126,12 +112,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
@@ -156,12 +138,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
@@ -186,12 +164,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
@@ -216,12 +190,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
@@ -249,12 +219,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
@@ -279,12 +245,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts
index 7283a98f12b5..8d9cf142e332 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.params.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
// cSpell:words lowcard highcard
describe('dynamic-io', () => {
const { next, isNextDev, skipped } = nextTestSetup({
@@ -28,382 +26,189 @@ describe('dynamic-io', () => {
}
describe('Async Params', () => {
- if (WITH_PPR) {
- it('should partially prerender pages that await params in a server components', async () => {
- expect(getLines('Route "/params')).toEqual([])
-
- let $ = await next.render$(
- '/params/semantics/one/build/async/layout-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- }
+ it('should partially prerender pages that await params in a server components', async () => {
+ expect(getLines('Route "/params')).toEqual([])
- $ = await next.render$(
- '/params/semantics/one/run/async/layout-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
+ let $ = await next.render$(
+ '/params/semantics/one/build/async/layout-access/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
- $ = await next.render$(
- '/params/semantics/one/build/async/page-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ expect(getLines('Route "/params')).toEqual([])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ }
- $ = await next.render$(
- '/params/semantics/one/run/async/page-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ $ = await next.render$(
+ '/params/semantics/one/run/async/layout-access/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
- it('should partially prerender pages that use params in a client components', async () => {
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
expect(getLines('Route "/params')).toEqual([])
+ }
- let $ = await next.render$(
- '/params/semantics/one/build/async/layout-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
+ $ = await next.render$(
+ '/params/semantics/one/build/async/page-access/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
- $ = await next.render$(
- '/params/semantics/one/run/async/layout-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ expect(getLines('Route "/params')).toEqual([])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- $ = await next.render$(
- '/params/semantics/one/build/async/page-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
+ $ = await next.render$(
+ '/params/semantics/one/run/async/page-access/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
- $ = await next.render$(
- '/params/semantics/one/run/async/page-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
- } else {
- it('should prerender pages that await params in a server component when prebuilt', async () => {
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/async/layout-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([])
+ }
+ })
- $ = await next.render$(
- '/params/semantics/one/build/async/page-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ it('should partially prerender pages that use params in a client components', async () => {
+ expect(getLines('Route "/params')).toEqual([])
- it('should prerender pages that `use` params in a client component when prebuilt', async () => {
+ let $ = await next.render$(
+ '/params/semantics/one/build/async/layout-access/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/async/layout-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- $ = await next.render$(
- '/params/semantics/one/build/async/page-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // TODO at the moment pages receive searchParams which are not know at build time
- // and always dynamic. We have to pessimistically assume they are accessed and thus
- // we cannot actually produce a static shell without PPR.
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ $ = await next.render$(
+ '/params/semantics/one/run/async/layout-access/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
- it('should render pages that await params in a server component when not prebuilt', async () => {
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/run/async/layout-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/run/async/page-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- it('should render pages that `use` params in a client component when not prebuilt', async () => {
+ $ = await next.render$(
+ '/params/semantics/one/build/async/page-access/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/run/async/layout-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- $ = await next.render$(
- '/params/semantics/one/run/async/page-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
- }
+ $ = await next.render$(
+ '/params/semantics/one/run/async/page-access/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([])
+ }
+ })
it('should fully prerender pages that check individual param keys after awaiting params in a server component', async () => {
expect(getLines('Route "/params')).toEqual([])
@@ -466,30 +271,16 @@ describe('dynamic-io', () => {
expect($('#param-has-foo').text()).toBe('false')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- // With PPR fallbacks the first visit is still partially prerendered
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // without PPR the first visit is dynamic
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- }
+ // With PPR fallbacks the first visit is still partially prerendered
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-has-lowcard').text()).toBe('true')
+ expect($('#param-has-highcard').text()).toBe('true')
+ expect($('#param-has-foo').text()).toBe('false')
+ expect(getLines('Route "/params')).toEqual([])
}
$ = await next.render$('/params/semantics/one/run/async/page-has/server')
@@ -503,30 +294,16 @@ describe('dynamic-io', () => {
expect($('#param-has-foo').text()).toBe('false')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- // With PPR fallbacks the first visit is still partially prerendered
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // without PPR the first visit is dynamic
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- }
+ // With PPR fallbacks the first visit is still partially prerendered
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-has-lowcard').text()).toBe('true')
+ expect($('#param-has-highcard').text()).toBe('true')
+ expect($('#param-has-foo').text()).toBe('false')
+ expect(getLines('Route "/params')).toEqual([])
}
})
@@ -568,31 +345,14 @@ describe('dynamic-io', () => {
expect($('#param-has-foo').text()).toBe('false')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // When dynamicIO is on and PPR is off the search params passed to a client page
- // are enough to mark the whole route as dynamic. This is because we can't know if
- // you are going to use those searchParams in an update on the client so we can't infer
- // anything about your lack of use during SSR. In the future we will update searchParams
- // written to the client to actually derive those params from location and thus not
- // require dynamic
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- }
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-has-lowcard').text()).toBe('true')
+ expect($('#param-has-highcard').text()).toBe('true')
+ expect($('#param-has-foo').text()).toBe('false')
+ expect(getLines('Route "/params')).toEqual([])
}
$ = await next.render$(
@@ -608,30 +368,16 @@ describe('dynamic-io', () => {
expect($('#param-has-foo').text()).toBe('false')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- // With PPR fallbacks the first visit is still partially prerendered
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // without PPR the first visit is dynamic
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- }
+ // With PPR fallbacks the first visit is still partially prerendered
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-has-lowcard').text()).toBe('true')
+ expect($('#param-has-highcard').text()).toBe('true')
+ expect($('#param-has-foo').text()).toBe('false')
+ expect(getLines('Route "/params')).toEqual([])
}
$ = await next.render$('/params/semantics/one/run/async/page-has/client')
@@ -645,859 +391,422 @@ describe('dynamic-io', () => {
expect($('#param-has-foo').text()).toBe('false')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- // With PPR fallbacks the first visit is still partially prerendered
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // When dynamicIO is on and PPR is off the search params passed to a client page
- // are enough to mark the whole route as dynamic. This is because we can't know if
- // you are going to use those searchParams in an update on the client so we can't infer
- // anything about your lack of use during SSR. In the future we will update searchParams
- // written to the client to actually derive those params from location and thus not
- // require dynamic
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- }
+ // With PPR fallbacks the first visit is still partially prerendered
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-has-lowcard').text()).toBe('true')
+ expect($('#param-has-highcard').text()).toBe('true')
+ expect($('#param-has-foo').text()).toBe('false')
+ expect(getLines('Route "/params')).toEqual([])
}
})
- if (WITH_PPR) {
- it('should partially prerender pages that spread awaited params in a server component', async () => {
+ it('should partially prerender pages that spread awaited params in a server component', async () => {
+ expect(getLines('Route "/params')).toEqual([])
+ let $ = await next.render$(
+ '/params/semantics/one/build/async/layout-spread/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/async/layout-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/build/async/page-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/run/async/layout-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/run/async/page-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
-
- it('should partially prerender pages that spread `use`ed params in a client component', async () => {
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/async/layout-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/build/async/page-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/run/async/layout-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
+ }
- $ = await next.render$(
- '/params/semantics/one/run/async/page-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
- } else {
- it('should prerender pages that spread awaited params in a server component when prebuilt', async () => {
+ $ = await next.render$(
+ '/params/semantics/one/build/async/page-spread/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/async/layout-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/build/async/page-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- it('should prerender pages that spread `use`ed params in a client component when prebuilt', async () => {
+ $ = await next.render$(
+ '/params/semantics/one/run/async/layout-spread/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/async/layout-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- $ = await next.render$(
- '/params/semantics/one/build/async/page-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // TODO at the moment pages receive searchParams which are not know at build time
- // and always dynamic. We have to pessimistically assume they are accessed and thus
- // we cannot actually produce a static shell without PPR.
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ $ = await next.render$(
+ '/params/semantics/one/run/async/page-spread/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ }
+ })
- it('should render pages that spread awaited params in a server component when not prebuilt', async () => {
- let $ = await next.render$(
- '/params/semantics/one/run/async/layout-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- } else {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- }
+ it('should partially prerender pages that spread `use`ed params in a client component', async () => {
+ expect(getLines('Route "/params')).toEqual([])
+ let $ = await next.render$(
+ '/params/semantics/one/build/async/layout-spread/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- $ = await next.render$(
- '/params/semantics/one/run/async/page-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- } else {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- }
- })
+ $ = await next.render$(
+ '/params/semantics/one/build/async/page-spread/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- it('should render pages that spread `use`ed params in a client component when not prebuilt', async () => {
- let $ = await next.render$(
- '/params/semantics/one/run/async/layout-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- }
+ $ = await next.render$(
+ '/params/semantics/one/run/async/layout-spread/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- $ = await next.render$(
- '/params/semantics/one/run/async/page-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- }
- })
- }
+ $ = await next.render$(
+ '/params/semantics/one/run/async/page-spread/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ }
+ })
})
describe('Synchronous Params access', () => {
- if (WITH_PPR) {
- it('should partially prerender pages that access params synchronously in a server components', async () => {
- expect(getLines('Route "/params')).toEqual([])
-
- let $ = await next.render$(
- '/params/semantics/one/build/sync/layout-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- }
+ it('should partially prerender pages that access params synchronously in a server components', async () => {
+ expect(getLines('Route "/params')).toEqual([])
- $ = await next.render$(
- '/params/semantics/one/run/sync/layout-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
+ let $ = await next.render$(
+ '/params/semantics/one/build/sync/layout-access/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ }
- $ = await next.render$(
- '/params/semantics/one/build/sync/page-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
+ $ = await next.render$(
+ '/params/semantics/one/run/sync/layout-access/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
- $ = await next.render$(
- '/params/semantics/one/run/sync/page-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- it('should partially prerender pages that access params synchronously in a client components', async () => {
+ $ = await next.render$(
+ '/params/semantics/one/build/sync/page-access/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
expect(getLines('Route "/params')).toEqual([])
+ }
- let $ = await next.render$(
- '/params/semantics/one/build/sync/layout-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
+ $ = await next.render$(
+ '/params/semantics/one/run/sync/page-access/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
- $ = await next.render$(
- '/params/semantics/one/run/sync/layout-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([])
+ }
+ })
- $ = await next.render$(
- '/params/semantics/one/build/sync/page-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
+ it('should partially prerender pages that access params synchronously in a client components', async () => {
+ expect(getLines('Route "/params')).toEqual([])
- $ = await next.render$(
- '/params/semantics/one/run/sync/page-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
- } else {
- it('should prerender pages that access params synchronously in a server component when prebuilt', async () => {
+ let $ = await next.render$(
+ '/params/semantics/one/build/sync/layout-access/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/sync/layout-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
+ }
- $ = await next.render$(
- '/params/semantics/one/build/sync/page-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ $ = await next.render$(
+ '/params/semantics/one/run/sync/layout-access/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
- it('should prerender pages that access params synchronously in a client component when prebuilt', async () => {
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/sync/layout-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
+ }
- $ = await next.render$(
- '/params/semantics/one/build/sync/page-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- // TODO at the moment pages receive searchParams which are not know at build time
- // and always dynamic. We have to pessimistically assume they are accessed and thus
- // we cannot actually produce a static shell without PPR.
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('build')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ $ = await next.render$(
+ '/params/semantics/one/build/sync/page-access/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
- it('should render pages that access params synchronously in a server component when not prebuilt', async () => {
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('build')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/run/sync/layout-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
+ }
- $ = await next.render$(
- '/params/semantics/one/run/sync/page-access/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ $ = await next.render$(
+ '/params/semantics/one/run/sync/page-access/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
- it('should render pages that access params synchronously in a client component when not prebuilt', async () => {
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-lowcard').text()).toBe('one')
+ expect($('#param-highcard').text()).toBe('run')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/run/sync/layout-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/run/sync/page-access/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-lowcard').text()).toBe('one')
- expect($('#param-highcard').text()).toBe('run')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
- }
+ }
+ })
it('should fully prerender pages that check individual param keys directly on the params prop in a server component', async () => {
expect(getLines('Route "/params')).toEqual([])
@@ -1556,28 +865,16 @@ describe('dynamic-io', () => {
expect($('#param-has-foo').text()).toBe('false')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- // With PPR fallbacks the first visit is fully prerendered
- // because has-checking doesn't postpone even with ppr fallbacks
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // without PPR the first visit is dynamic
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- }
+ // With PPR fallbacks the first visit is fully prerendered
+ // because has-checking doesn't postpone even with ppr fallbacks
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-has-lowcard').text()).toBe('true')
+ expect($('#param-has-highcard').text()).toBe('true')
+ expect($('#param-has-foo').text()).toBe('false')
+ expect(getLines('Route "/params')).toEqual([])
}
$ = await next.render$('/params/semantics/one/run/sync/page-has/server')
@@ -1591,28 +888,16 @@ describe('dynamic-io', () => {
expect($('#param-has-foo').text()).toBe('false')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- // With PPR fallbacks the first visit is fully prerendered
- // because has-checking doesn't postpone even with ppr fallbacks
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // without PPR the first visit is dynamic
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- }
+ // With PPR fallbacks the first visit is fully prerendered
+ // because has-checking doesn't postpone even with ppr fallbacks
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-has-lowcard').text()).toBe('true')
+ expect($('#param-has-highcard').text()).toBe('true')
+ expect($('#param-has-foo').text()).toBe('false')
+ expect(getLines('Route "/params')).toEqual([])
}
})
@@ -1652,31 +937,14 @@ describe('dynamic-io', () => {
expect($('#param-has-foo').text()).toBe('false')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // When dynamicIO is on and PPR is off the search params passed to a client page
- // are enough to mark the whole route as dynamic. This is because we can't know if
- // you are going to use those searchParams in an update on the client so we can't infer
- // anything about your lack of use during SSR. In the future we will update searchParams
- // written to the client to actually derive those params from location and thus not
- // require dynamic
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- }
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-has-lowcard').text()).toBe('true')
+ expect($('#param-has-highcard').text()).toBe('true')
+ expect($('#param-has-foo').text()).toBe('false')
+ expect(getLines('Route "/params')).toEqual([])
}
$ = await next.render$('/params/semantics/one/run/sync/layout-has/client')
@@ -1690,28 +958,16 @@ describe('dynamic-io', () => {
expect($('#param-has-foo').text()).toBe('false')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- // With PPR fallbacks the first visit is fully prerendered
- // because has-checking doesn't postpone even with ppr fallbacks
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // without PPR the first visit is dynamic
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- }
+ // With PPR fallbacks the first visit is fully prerendered
+ // because has-checking doesn't postpone even with ppr fallbacks
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-has-lowcard').text()).toBe('true')
+ expect($('#param-has-highcard').text()).toBe('true')
+ expect($('#param-has-foo').text()).toBe('false')
+ expect(getLines('Route "/params')).toEqual([])
}
$ = await next.render$('/params/semantics/one/run/sync/page-has/client')
@@ -1725,491 +981,238 @@ describe('dynamic-io', () => {
expect($('#param-has-foo').text()).toBe('false')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- // With PPR fallbacks the first visit is still fully prerendered
- // has-checking keys isn't dynamic and since we aren't awaiting the
- // whole params object we end up with a complete prerender even
- // for the fallback page.
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- } else {
- // When dynamicIO is on and PPR is off the search params passed to a client page
- // are enough to mark the whole route as dynamic. This is because we can't know if
- // you are going to use those searchParams in an update on the client so we can't infer
- // anything about your lack of use during SSR. In the future we will update searchParams
- // written to the client to actually derive those params from location and thus not
- // require dynamic
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-has-lowcard').text()).toBe('true')
- expect($('#param-has-highcard').text()).toBe('true')
- expect($('#param-has-foo').text()).toBe('false')
- expect(getLines('Route "/params')).toEqual([])
- }
+ // With PPR fallbacks the first visit is still fully prerendered
+ // has-checking keys isn't dynamic and since we aren't awaiting the
+ // whole params object we end up with a complete prerender even
+ // for the fallback page.
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-has-lowcard').text()).toBe('true')
+ expect($('#param-has-highcard').text()).toBe('true')
+ expect($('#param-has-foo').text()).toBe('false')
+ expect(getLines('Route "/params')).toEqual([])
}
})
- if (WITH_PPR) {
- it('should partially prerender pages that spread params without awaiting first in a server component', async () => {
+ it('should partially prerender pages that spread params without awaiting first in a server component', async () => {
+ expect(getLines('Route "/params')).toEqual([])
+ let $ = await next.render$(
+ '/params/semantics/one/build/sync/layout-spread/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`...params` or similar expression'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/sync/layout-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/build/sync/page-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/run/sync/layout-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/run/sync/page-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ }
- it('should partially prerender pages that spread params without `use`ing them first in a client component', async () => {
+ $ = await next.render$(
+ '/params/semantics/one/build/sync/page-spread/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`...params` or similar expression'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/sync/layout-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/build/sync/page-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/run/sync/layout-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
+ }
- $ = await next.render$(
- '/params/semantics/one/run/sync/page-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#highcard-fallback').text()).toBe(
- 'loading highcard children'
- )
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
- } else {
- it('should prerender pages that spread params without awaiting first in a server component when prebuilt', async () => {
+ $ = await next.render$(
+ '/params/semantics/one/run/sync/layout-spread/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`...params` or similar expression'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/sync/layout-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/build/sync/page-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ }
- it('should prerender pages that spread params without `use`ing first in a client component when prebuilt', async () => {
+ $ = await next.render$(
+ '/params/semantics/one/run/sync/page-spread/server'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`...params` or similar expression'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/build/sync/layout-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#lowcard').text()).toBe('at buildtime')
- expect($('#highcard').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
-
- $ = await next.render$(
- '/params/semantics/one/build/sync/page-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- // TODO at the moment pages receive searchParams which are not know at build time
- // and always dynamic. We have to pessimistically assume they are accessed and thus
- // we cannot actually produce a static shell without PPR.
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('build')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ }
+ })
- it('should prerender pages that spread params without awaiting first in a server component when not prebuilt', async () => {
+ it('should partially prerender pages that spread params without `use`ing them first in a client component', async () => {
+ expect(getLines('Route "/params')).toEqual([])
+ let $ = await next.render$(
+ '/params/semantics/one/build/sync/layout-spread/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`...params` or similar expression'),
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/run/sync/layout-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- ])
- } else {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
+ }
- $ = await next.render$(
- '/params/semantics/one/run/sync/page-spread/server'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- ])
- } else {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
+ $ = await next.render$(
+ '/params/semantics/one/build/sync/page-spread/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`...params` or similar expression'),
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('build')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ }
- it('should prerender pages that spread params without `use`ing first in a client component when not prebuilt', async () => {
+ $ = await next.render$(
+ '/params/semantics/one/run/sync/layout-spread/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`...params` or similar expression'),
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
expect(getLines('Route "/params')).toEqual([])
- let $ = await next.render$(
- '/params/semantics/one/run/sync/layout-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at runtime')
-
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
+ }
- $ = await next.render$(
- '/params/semantics/one/run/sync/page-spread/client'
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([
- expect.stringContaining('`...params` or similar expression'),
- expect.stringContaining('`params.lowcard`'),
- expect.stringContaining('`params.highcard`'),
- ])
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#lowcard').text()).toBe('at runtime')
- expect($('#highcard').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#param-copied-lowcard').text()).toBe('one')
- expect($('#param-copied-highcard').text()).toBe('run')
- expect($('#param-key-count').text()).toBe('2')
- expect(getLines('Route "/params')).toEqual([])
- }
- })
- }
+ $ = await next.render$(
+ '/params/semantics/one/run/sync/page-spread/client'
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#lowcard').text()).toBe('at runtime')
+ expect($('#highcard').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([
+ expect.stringContaining('`...params` or similar expression'),
+ expect.stringContaining('`params.lowcard`'),
+ expect.stringContaining('`params.highcard`'),
+ ])
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#lowcard').text()).toBe('at buildtime')
+ expect($('#highcard').text()).toBe('at buildtime')
+ expect($('#highcard-fallback').text()).toBe('loading highcard children')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#param-copied-lowcard').text()).toBe('one')
+ expect($('#param-copied-highcard').text()).toBe('run')
+ expect($('#param-key-count').text()).toBe('2')
+ expect(getLines('Route "/params')).toEqual([])
+ }
+ })
})
describe('Param Shadowing', () => {
@@ -2227,11 +1230,7 @@ describe('dynamic-io', () => {
expect($('#param-status').text()).toBe('qux')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- }
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#param-dyn').text()).toBe('foo')
expect($('#param-then').text()).toBe('bar')
@@ -2252,11 +1251,7 @@ describe('dynamic-io', () => {
expect($('#param-status').text()).toBe('qux')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- }
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#param-dyn').text()).toBe('foo')
expect($('#param-then').text()).toBe('bar')
@@ -2280,11 +1275,7 @@ describe('dynamic-io', () => {
expect($('#param-status').text()).toBe('qux')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- }
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#param-dyn').text()).toBe('foo')
expect($('#param-then').text()).toBe('bar')
@@ -2305,11 +1296,7 @@ describe('dynamic-io', () => {
expect($('#param-status').text()).toBe('qux')
expect(getLines('Route "/params')).toEqual([])
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- }
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#param-dyn').text()).toBe('foo')
expect($('#param-then').text()).toBe('bar')
@@ -2339,11 +1326,7 @@ describe('dynamic-io', () => {
expect.stringContaining('`params.value`'),
])
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- }
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#param-dyn').text()).toBe('foo')
expect($('#param-then').text()).toEqual(
@@ -2372,11 +1355,7 @@ describe('dynamic-io', () => {
expect.stringContaining('`params.value`'),
])
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- }
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#param-dyn').text()).toBe('foo')
expect($('#param-then').text()).toEqual(
@@ -2410,11 +1389,7 @@ describe('dynamic-io', () => {
expect.stringContaining('`params.value`'),
])
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- }
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#param-dyn').text()).toBe('foo')
expect($('#param-then').text()).toEqual(
@@ -2445,11 +1420,7 @@ describe('dynamic-io', () => {
expect.stringContaining('`params.value`'),
])
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- }
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#param-dyn').text()).toBe('foo')
expect($('#param-then').text()).toEqual(
@@ -2484,14 +1455,10 @@ describe('dynamic-io', () => {
line.includes('/params/generate-static-params/[slug]')
) {
let nextLine = lines[i++]
- if (WITH_PPR) {
- // when PPR is on (in this test suite) we also turn on fallbacks.
- // we expect the fallback shell first
- expect(nextLine).toContain(
- '/params/generate-static-params/[slug]'
- )
- nextLine = lines[i++]
- }
+ // we expect the fallback shell first
+ expect(nextLine).toContain('/params/generate-static-params/[slug]')
+ nextLine = lines[i++]
+
expect(nextLine).toMatch(
/\/params\/generate-static-params\/\d+\/page/
)
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.random.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.random.test.ts
index 679bece90840..19e856d9e778 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.random.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.random.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
describe('dynamic-io', () => {
const { next, isNextDev, skipped } = nextTestSetup({
files: __dirname,
@@ -33,11 +31,8 @@ describe('dynamic-io', () => {
if (isNextDev) {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
}
})
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts
index a2fd659d9fb6..42ce81d1ce6a 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.search.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
describe('dynamic-io', () => {
const { next, isNextDev, skipped } = nextTestSetup({
files: __dirname,
@@ -26,399 +24,211 @@ describe('dynamic-io', () => {
return warnings
}
- if (WITH_PPR) {
- it('should partially prerender pages that await searchParams in a server component', async () => {
- let $ = await next.render$('/search/async/server/await?sentinel=hello')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('main').text()).toContain('inner loading...')
- expect($('main').text()).not.toContain('outer loading...')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- }
- })
-
- it('should partially prerender pages that `use` searchParams in a server component', async () => {
- let $ = await next.render$('/search/async/server/use?sentinel=hello')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('main').text()).toContain('inner loading...')
- expect($('main').text()).not.toContain('outer loading...')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- }
- })
-
- it('should partially prerender pages that `use` searchParams in a client component', async () => {
- let $ = await next.render$('/search/async/client/use?sentinel=hello')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('main').text()).toContain('inner loading...')
- expect($('main').text()).not.toContain('outer loading...')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- }
- })
- } else {
- it('should not prerender pages that await searchParams in a server component', async () => {
- let $ = await next.render$('/search/async/server/await?sentinel=hello')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- }
- })
-
- it('should not prerender pages that `use` searchParams in a server component', async () => {
- let $ = await next.render$('/search/async/server/use?sentinel=hello')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- }
- })
-
- it('should not prerender pages that `use` searchParams in a client component', async () => {
- let $ = await next.render$('/search/async/client/use?sentinel=hello')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- }
- })
- }
-
- if (WITH_PPR) {
- it('should partially prerender pages that access a searchParam property synchronously in a server component', async () => {
- let $ = await next.render$('/search/sync/server/access?sentinel=hello')
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining('`searchParams.sentinel`'),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at buildtime')
- expect($('main').text()).not.toContain('inner loading...')
- // This test case aborts synchronously and the later component render
- // triggers the outer boundary
- expect($('main').text()).toContain('outer loading...')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- }
- })
-
- it('should partially prerender pages that access a searchParam property synchronously in a client component', async () => {
- let $ = await next.render$('/search/sync/client/access?sentinel=hello')
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining('`searchParams.sentinel`'),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at buildtime')
- expect($('main').text()).toContain('inner loading...')
- expect($('main').text()).not.toContain('outer loading...')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- }
- })
-
- it('should partially prerender pages that checks for the existence of a searchParam property synchronously in a server component', async () => {
- let $ = await next.render$('/search/sync/server/has?sentinel=hello')
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#has-sentinel').text()).toBe('true')
- expect($('#has-foo').text()).toBe('false')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining(
- '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar'
- ),
- expect.stringContaining(
- '`Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar'
- ),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at buildtime')
- expect($('main').text()).not.toContain('inner loading...')
- // This test case aborts synchronously and the later component render
- // triggers the outer boundary
- expect($('main').text()).toContain('outer loading...')
- expect($('#has-sentinel').text()).toBe('true')
- expect($('#has-foo').text()).toBe('false')
- expect($('#page').text()).toBe('at runtime')
- }
- })
+ it('should partially prerender pages that await searchParams in a server component', async () => {
+ let $ = await next.render$('/search/async/server/await?sentinel=hello')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#value').text()).toBe('hello')
+ expect($('#page').text()).toBe('at runtime')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('main').text()).toContain('inner loading...')
+ expect($('main').text()).not.toContain('outer loading...')
+ expect($('#value').text()).toBe('hello')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
- it('should partially prerender pages that checks for the existence of a searchParam property synchronously in a client component', async () => {
- let $ = await next.render$('/search/sync/client/has?sentinel=hello')
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#has-sentinel').text()).toBe('true')
- expect($('#has-foo').text()).toBe('false')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining(
- '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar'
- ),
- expect.stringContaining(
- '`Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar'
- ),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at buildtime')
- expect($('main').text()).toContain('inner loading...')
- expect($('main').text()).not.toContain('outer loading...')
- expect($('#has-sentinel').text()).toBe('true')
- expect($('#has-foo').text()).toBe('false')
- expect($('#page').text()).toBe('at runtime')
- }
- })
+ it('should partially prerender pages that `use` searchParams in a server component', async () => {
+ let $ = await next.render$('/search/async/server/use?sentinel=hello')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#value').text()).toBe('hello')
+ expect($('#page').text()).toBe('at runtime')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('main').text()).toContain('inner loading...')
+ expect($('main').text()).not.toContain('outer loading...')
+ expect($('#value').text()).toBe('hello')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
- it('should partially prerender pages that spreads ...searchParam synchronously in a server component', async () => {
- let $ = await next.render$(
- '/search/sync/server/spread?sentinel=hello&foo=foo&then=bar&value=baz'
- )
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('[data-value]').length).toBe(3)
- expect($('#value-sentinel').text()).toBe('hello')
- expect($('#value-foo').text()).toBe('foo')
- expect($('#value-value').text()).toBe('baz')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining(
- 'conflict with builtin or well-known property names: `then`'
- ),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at buildtime')
- expect($('main').text()).not.toContain('inner loading...')
- // This test case aborts synchronously and the later component render
- // triggers the outer boundary
- expect($('main').text()).toContain('outer loading...')
- expect($('[data-value]').length).toBe(3)
- expect($('#value-sentinel').text()).toBe('hello')
- expect($('#value-foo').text()).toBe('foo')
- expect($('#value-value').text()).toBe('baz')
- expect($('#page').text()).toBe('at runtime')
- }
- })
+ it('should partially prerender pages that `use` searchParams in a client component', async () => {
+ let $ = await next.render$('/search/async/client/use?sentinel=hello')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#value').text()).toBe('hello')
+ expect($('#page').text()).toBe('at runtime')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('main').text()).toContain('inner loading...')
+ expect($('main').text()).not.toContain('outer loading...')
+ expect($('#value').text()).toBe('hello')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
- it('should partially prerender pages that spreads ...searchParam synchronously in a client component', async () => {
- let $ = await next.render$(
- '/search/sync/client/spread?sentinel=hello&foo=foo&then=bar&value=baz'
- )
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('[data-value]').length).toBe(3)
- expect($('#value-sentinel').text()).toBe('hello')
- expect($('#value-foo').text()).toBe('foo')
- expect($('#value-value').text()).toBe('baz')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining(
- 'conflict with builtin or well-known property names: `then`'
- ),
- expect.stringContaining('`searchParams.sentinel`'),
- expect.stringContaining('`searchParams.foo`'),
- expect.stringContaining('`searchParams.value`'),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at buildtime')
- expect($('main').text()).toContain('inner loading...')
- expect($('main').text()).not.toContain('outer loading...')
- expect($('[data-value]').length).toBe(3)
- expect($('#value-sentinel').text()).toBe('hello')
- expect($('#value-foo').text()).toBe('foo')
- expect($('#value-value').text()).toBe('baz')
- expect($('#page').text()).toBe('at runtime')
- }
- })
- } else {
- it('should not prerender a page that accesses a searchParam property synchronously in a server component', async () => {
- let $ = await next.render$('/search/sync/server/access?sentinel=hello')
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining('`searchParams.sentinel`'),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- }
- })
+ it('should partially prerender pages that access a searchParam property synchronously in a server component', async () => {
+ let $ = await next.render$('/search/sync/server/access?sentinel=hello')
+ let searchWarnings = getLines('Route "/search')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#value').text()).toBe('hello')
+ expect($('#page').text()).toBe('at runtime')
+ expect(searchWarnings).toEqual([
+ expect.stringContaining('`searchParams.sentinel`'),
+ ])
+ } else {
+ expect(searchWarnings).toHaveLength(0)
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('main').text()).not.toContain('inner loading...')
+ // This test case aborts synchronously and the later component render
+ // triggers the outer boundary
+ expect($('main').text()).toContain('outer loading...')
+ expect($('#value').text()).toBe('hello')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
- it('should not prerender a page that accesses a searchParam property synchronously in a client component', async () => {
- let $ = await next.render$('/search/sync/client/access?sentinel=hello')
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining('`searchParams.sentinel`'),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- expect($('#page').text()).toBe('at runtime')
- }
- })
+ it('should partially prerender pages that access a searchParam property synchronously in a client component', async () => {
+ let $ = await next.render$('/search/sync/client/access?sentinel=hello')
+ let searchWarnings = getLines('Route "/search')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#value').text()).toBe('hello')
+ expect($('#page').text()).toBe('at runtime')
+ expect(searchWarnings).toEqual([
+ expect.stringContaining('`searchParams.sentinel`'),
+ ])
+ } else {
+ expect(searchWarnings).toHaveLength(0)
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('main').text()).toContain('inner loading...')
+ expect($('main').text()).not.toContain('outer loading...')
+ expect($('#value').text()).toBe('hello')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
- it('should not prerender a page that checks for the existence of a searchParam property synchronously in a server component', async () => {
- let $ = await next.render$('/search/sync/server/has?sentinel=hello')
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#has-sentinel').text()).toBe('true')
- expect($('#has-foo').text()).toBe('false')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining(
- '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar'
- ),
- expect.stringContaining(
- '`Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar'
- ),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at runtime')
- expect($('#has-sentinel').text()).toBe('true')
- expect($('#has-foo').text()).toBe('false')
- expect($('#page').text()).toBe('at runtime')
- }
- })
+ it('should partially prerender pages that checks for the existence of a searchParam property synchronously in a server component', async () => {
+ let $ = await next.render$('/search/sync/server/has?sentinel=hello')
+ let searchWarnings = getLines('Route "/search')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#has-sentinel').text()).toBe('true')
+ expect($('#has-foo').text()).toBe('false')
+ expect($('#page').text()).toBe('at runtime')
+ expect(searchWarnings).toEqual([
+ expect.stringContaining(
+ '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar'
+ ),
+ expect.stringContaining(
+ '`Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar'
+ ),
+ ])
+ } else {
+ expect(searchWarnings).toHaveLength(0)
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('main').text()).not.toContain('inner loading...')
+ // This test case aborts synchronously and the later component render
+ // triggers the outer boundary
+ expect($('main').text()).toContain('outer loading...')
+ expect($('#has-sentinel').text()).toBe('true')
+ expect($('#has-foo').text()).toBe('false')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
- it('should not prerender a page that checks for the existence of a searchParam property synchronously in a client component', async () => {
- let $ = await next.render$('/search/sync/client/has?sentinel=hello')
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#has-sentinel').text()).toBe('true')
- expect($('#has-foo').text()).toBe('false')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining(
- '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar'
- ),
- expect.stringContaining(
- '`Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar'
- ),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at runtime')
- expect($('#has-sentinel').text()).toBe('true')
- expect($('#has-foo').text()).toBe('false')
- expect($('#page').text()).toBe('at runtime')
- }
- })
+ it('should partially prerender pages that checks for the existence of a searchParam property synchronously in a client component', async () => {
+ let $ = await next.render$('/search/sync/client/has?sentinel=hello')
+ let searchWarnings = getLines('Route "/search')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#has-sentinel').text()).toBe('true')
+ expect($('#has-foo').text()).toBe('false')
+ expect($('#page').text()).toBe('at runtime')
+ expect(searchWarnings).toEqual([
+ expect.stringContaining(
+ '`Reflect.has(searchParams, "sentinel")`, `"sentinel" in searchParams`, or similar'
+ ),
+ expect.stringContaining(
+ '`Reflect.has(searchParams, "foo")`, `"foo" in searchParams`, or similar'
+ ),
+ ])
+ } else {
+ expect(searchWarnings).toHaveLength(0)
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('main').text()).toContain('inner loading...')
+ expect($('main').text()).not.toContain('outer loading...')
+ expect($('#has-sentinel').text()).toBe('true')
+ expect($('#has-foo').text()).toBe('false')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
- it('should not prerender a page that spreads ...searchParam synchronously in a server component', async () => {
- let $ = await next.render$(
- '/search/sync/server/spread?sentinel=hello&foo=foo&then=bar&value=baz'
- )
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('[data-value]').length).toBe(3)
- expect($('#value-sentinel').text()).toBe('hello')
- expect($('#value-foo').text()).toBe('foo')
- expect($('#value-value').text()).toBe('baz')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining(
- 'conflict with builtin or well-known property names: `then`'
- ),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at runtime')
- expect($('[data-value]').length).toBe(3)
- expect($('#value-sentinel').text()).toBe('hello')
- expect($('#value-foo').text()).toBe('foo')
- expect($('#value-value').text()).toBe('baz')
- expect($('#page').text()).toBe('at runtime')
- }
- })
+ it('should partially prerender pages that spreads ...searchParam synchronously in a server component', async () => {
+ let $ = await next.render$(
+ '/search/sync/server/spread?sentinel=hello&foo=foo&then=bar&value=baz'
+ )
+ let searchWarnings = getLines('Route "/search')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('[data-value]').length).toBe(3)
+ expect($('#value-sentinel').text()).toBe('hello')
+ expect($('#value-foo').text()).toBe('foo')
+ expect($('#value-value').text()).toBe('baz')
+ expect($('#page').text()).toBe('at runtime')
+ expect(searchWarnings).toEqual([
+ expect.stringContaining(
+ 'conflict with builtin or well-known property names: `then`'
+ ),
+ ])
+ } else {
+ expect(searchWarnings).toHaveLength(0)
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('main').text()).not.toContain('inner loading...')
+ // This test case aborts synchronously and the later component render
+ // triggers the outer boundary
+ expect($('main').text()).toContain('outer loading...')
+ expect($('[data-value]').length).toBe(3)
+ expect($('#value-sentinel').text()).toBe('hello')
+ expect($('#value-foo').text()).toBe('foo')
+ expect($('#value-value').text()).toBe('baz')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
- it('should not prerender a page that spreads ...searchParam synchronously in a client component', async () => {
- let $ = await next.render$(
- '/search/sync/client/spread?sentinel=hello&foo=foo&then=bar&value=baz'
- )
- let searchWarnings = getLines('Route "/search')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('[data-value]').length).toBe(3)
- expect($('#value-sentinel').text()).toBe('hello')
- expect($('#value-foo').text()).toBe('foo')
- expect($('#value-value').text()).toBe('baz')
- expect($('#page').text()).toBe('at runtime')
- expect(searchWarnings).toEqual([
- expect.stringContaining(
- 'conflict with builtin or well-known property names: `then`'
- ),
- expect.stringContaining('`searchParams.sentinel`'),
- expect.stringContaining('`searchParams.foo`'),
- expect.stringContaining('`searchParams.value`'),
- ])
- } else {
- expect(searchWarnings).toHaveLength(0)
- expect($('#layout').text()).toBe('at runtime')
- expect($('[data-value]').length).toBe(3)
- expect($('#value-sentinel').text()).toBe('hello')
- expect($('#value-foo').text()).toBe('foo')
- expect($('#value-value').text()).toBe('baz')
- expect($('#page').text()).toBe('at runtime')
- }
- })
- }
+ it('should partially prerender pages that spreads ...searchParam synchronously in a client component', async () => {
+ let $ = await next.render$(
+ '/search/sync/client/spread?sentinel=hello&foo=foo&then=bar&value=baz'
+ )
+ let searchWarnings = getLines('Route "/search')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('[data-value]').length).toBe(3)
+ expect($('#value-sentinel').text()).toBe('hello')
+ expect($('#value-foo').text()).toBe('foo')
+ expect($('#value-value').text()).toBe('baz')
+ expect($('#page').text()).toBe('at runtime')
+ expect(searchWarnings).toEqual([
+ expect.stringContaining(
+ 'conflict with builtin or well-known property names: `then`'
+ ),
+ expect.stringContaining('`searchParams.sentinel`'),
+ expect.stringContaining('`searchParams.foo`'),
+ expect.stringContaining('`searchParams.value`'),
+ ])
+ } else {
+ expect(searchWarnings).toHaveLength(0)
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('main').text()).toContain('inner loading...')
+ expect($('main').text()).not.toContain('outer loading...')
+ expect($('[data-value]').length).toBe(3)
+ expect($('#value-sentinel').text()).toBe('hello')
+ expect($('#value-foo').text()).toBe('foo')
+ expect($('#value-value').text()).toBe('baz')
+ expect($('#page').text()).toBe('at runtime')
+ }
+ })
})
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.server-action.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.server-action.test.ts
index afda00a755e0..04bd962f6559 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.server-action.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.server-action.test.ts
@@ -25,18 +25,13 @@ describe('dynamic-io', () => {
expect(await browser.elementByCss('p').text()).toBe('result')
})
- const isExperimentalReact = Boolean(process.env.__NEXT_EXPERIMENTAL_PPR)
- if (isExperimentalReact && isNextDev) {
- // TODO(react-time-info): Remove this branch for experimental React in dev mode when the
- // issue is resolved where the inclusion of server timings in the RSC
- // payload makes the serialized bound args not suitable to be used as a
- // cache key.
+ if (isNextDev) {
+ // TODO(react-time-info): For experimental React in dev mode, the
+ // inclusion of server timings in the RSC payload makes the serialized
+ // bound args not suitable to be used as a cache key. When this is fixed
+ // we expect this error not to be logged anymore.
expect(next.cliOutput).toMatch('Error: Route "/server-action-inline"')
- } else {
- expect(next.cliOutput).not.toMatch('Error: Route "/server-action-inline"')
- }
- if (isNextDev) {
await assertNoRedbox(browser)
}
})
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts
index fbc68d0af393..9b1035d3c3f7 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.test.ts
@@ -1,9 +1,5 @@
/* eslint-disable jest/no-standalone-expect */
import { nextTestSetup } from 'e2e-utils'
-import { retry } from 'next-test-utils'
-import { Playwright } from 'next-webdriver'
-
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
describe('dynamic-io', () => {
const { next, isNextDev, skipped } = nextTestSetup({
@@ -15,68 +11,6 @@ describe('dynamic-io', () => {
return
}
- if (isNextDev && !WITH_PPR) {
- async function hasStaticIndicator(browser: Playwright) {
- await browser.elementByCss('[data-nextjs-dev-tools-button]').click()
-
- return await browser.eval(
- () =>
- document
- .querySelector('nextjs-portal')
- .shadowRoot.querySelector('[data-nextjs-route-type]')
- .getAttribute('data-nextjs-route-type') === 'static'
- )
- }
-
- it('should not have static indicator on dynamic method route', async () => {
- const browser = await next.browser('/cases/dynamic_api_cookies')
-
- await retry(async () => {
- expect(await browser.eval('!!window.next.router ? "yes": "no"')).toBe(
- 'yes'
- )
- })
-
- expect(await hasStaticIndicator(browser)).toBe(false)
- })
-
- it('should not have static indicator on dynamic IO route', async () => {
- const browser = await next.browser('/cases/fetch_mixed')
-
- await retry(async () => {
- expect(await browser.eval('!!window.next.router ? "yes": "no"')).toBe(
- 'yes'
- )
- })
-
- expect(await hasStaticIndicator(browser)).toBe(false)
- })
-
- it('should have static indicator on static route', async () => {
- const browser = await next.browser('/cases/static')
-
- await retry(async () => {
- expect(await browser.eval('!!window.next.router ? "yes": "no"')).toBe(
- 'yes'
- )
- })
-
- expect(await hasStaticIndicator(browser)).toBe(true)
- })
-
- it('should have static indicator on not-found route', async () => {
- const browser = await next.browser('/cases/not-found')
-
- await retry(async () => {
- expect(await browser.eval('!!window.next.router ? "yes": "no"')).toBe(
- 'yes'
- )
-
- expect(await hasStaticIndicator(browser)).toBe(true)
- })
- })
- }
-
it('should not have route specific errors', async () => {
expect(next.cliOutput).not.toMatch('Error: Route "/')
expect(next.cliOutput).not.toMatch('Error occurred prerendering page')
@@ -150,37 +84,20 @@ describe('dynamic-io', () => {
}
})
- if (WITH_PPR) {
- it('should partially prerender pages that take longer than a task to render', async () => {
- let $ = await next.render$('/cases/task', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- // The inner slot is computed during the prerender but is hidden
- // it gets revealed when the resume happens
- expect($('#inner').text()).toBe('at buildtime')
- }
- })
- } else {
- it('should not prerender pages that take longer than a single task to render', async () => {
- let $ = await next.render$('/cases/task', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- // The inner slot is computed during the prerender but is hidden
- // it gets revealed when the resume happens
- expect($('#inner').text()).toBe('at runtime')
- }
- })
- }
+ it('should partially prerender pages that take longer than a task to render', async () => {
+ let $ = await next.render$('/cases/task', {})
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#inner').text()).toBe('at runtime')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ // The inner slot is computed during the prerender but is hidden
+ // it gets revealed when the resume happens
+ expect($('#inner').text()).toBe('at buildtime')
+ }
+ })
it('should prerender pages that only use cached fetches', async () => {
const $ = await next.render$('/cases/fetch_cached', {})
@@ -193,33 +110,18 @@ describe('dynamic-io', () => {
}
})
- if (WITH_PPR) {
- it('should partially prerender pages that use at least one fetch without cache', async () => {
- let $ = await next.render$('/cases/fetch_mixed', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#inner').text()).toBe('at buildtime')
- }
- })
- } else {
- it('should not prerender pages that use at least one fetch without cache', async () => {
- let $ = await next.render$('/cases/fetch_mixed', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- }
- })
- }
+ it('should partially prerender pages that use at least one fetch without cache', async () => {
+ let $ = await next.render$('/cases/fetch_mixed', {})
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#inner').text()).toBe('at runtime')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#inner').text()).toBe('at buildtime')
+ }
+ })
it('should prerender pages that only use cached (unstable_cache) IO', async () => {
const $ = await next.render$('/cases/io_cached', {})
@@ -254,125 +156,61 @@ describe('dynamic-io', () => {
}
})
- if (WITH_PPR) {
- it('should partially prerender pages that do any uncached IO', async () => {
- let $ = await next.render$('/cases/io_mixed', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#inner').text()).toBe('at buildtime')
- }
- })
- } else {
- it('should not prerender pages that do any uncached IO', async () => {
- let $ = await next.render$('/cases/io_mixed', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- }
- })
- }
+ it('should partially prerender pages that do any uncached IO', async () => {
+ let $ = await next.render$('/cases/io_mixed', {})
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#inner').text()).toBe('at runtime')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#inner').text()).toBe('at buildtime')
+ }
+ })
- if (WITH_PPR) {
- it('should partially prerender pages that do any uncached IO (use cache)', async () => {
- let $ = await next.render$('/cases/use_cache_mixed', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#inner').text()).toBe('at buildtime')
- }
- })
- } else {
- it('should not prerender pages that do any uncached IO (use cache)', async () => {
- let $ = await next.render$('/cases/use_cache_mixed', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- }
- })
- }
+ it('should partially prerender pages that do any uncached IO (use cache)', async () => {
+ let $ = await next.render$('/cases/use_cache_mixed', {})
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#inner').text()).toBe('at runtime')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#inner').text()).toBe('at buildtime')
+ }
+ })
- if (WITH_PPR) {
- it('should partially prerender pages that use `cookies()`', async () => {
- let $ = await next.render$('/cases/dynamic_api_cookies', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#inner').text()).toBe('at buildtime')
- expect($('#value').text()).toBe('hello')
- }
- })
- } else {
- it('should not prerender pages that use `cookies()`', async () => {
- let $ = await next.render$('/cases/dynamic_api_cookies', {})
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- }
- })
- }
+ it('should partially prerender pages that use `cookies()`', async () => {
+ let $ = await next.render$('/cases/dynamic_api_cookies', {})
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#inner').text()).toBe('at runtime')
+ expect($('#value').text()).toBe('hello')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#inner').text()).toBe('at buildtime')
+ expect($('#value').text()).toBe('hello')
+ }
+ })
- if (WITH_PPR) {
- it('should partially prerender pages that use `headers()`', async () => {
- let $ = await next.render$('/cases/dynamic_api_headers')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#inner').text()).toBe('at buildtime')
- expect($('#value').text()).toBe('hello')
- }
- })
- } else {
- it('should not prerender pages that use `headers()`', async () => {
- let $ = await next.render$('/cases/dynamic_api_headers')
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('hello')
- }
- })
- }
+ it('should partially prerender pages that use `headers()`', async () => {
+ let $ = await next.render$('/cases/dynamic_api_headers')
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#inner').text()).toBe('at runtime')
+ expect($('#value').text()).toBe('hello')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#inner').text()).toBe('at buildtime')
+ expect($('#value').text()).toBe('hello')
+ }
+ })
it('should fully prerender pages that use `unstable_noStore()`', async () => {
let $ = await next.render$('/cases/dynamic_api_no_store', {})
@@ -387,83 +225,43 @@ describe('dynamic-io', () => {
}
})
- if (WITH_PPR) {
- it('should partially prerender pages that use `searchParams` in Server Components', async () => {
- let $ = await next.render$(
- '/cases/dynamic_api_search_params_server?sentinel=my+sentinel',
- {}
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('my sentinel')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- expect($('#inner').text()).toBe('at buildtime')
- expect($('#value').text()).toBe('my sentinel')
- }
- })
- } else {
- it('should not prerender pages that use `searchParams` in Server Components', async () => {
- let $ = await next.render$(
- '/cases/dynamic_api_search_params_server?sentinel=my+sentinel',
- {}
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('my sentinel')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('my sentinel')
- }
- })
- }
+ it('should partially prerender pages that use `searchParams` in Server Components', async () => {
+ let $ = await next.render$(
+ '/cases/dynamic_api_search_params_server?sentinel=my+sentinel',
+ {}
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#inner').text()).toBe('at runtime')
+ expect($('#value').text()).toBe('my sentinel')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ expect($('#inner').text()).toBe('at buildtime')
+ expect($('#value').text()).toBe('my sentinel')
+ }
+ })
- if (WITH_PPR) {
- it('should partially prerender pages that use `searchParams` in Client Components', async () => {
- let $ = await next.render$(
- '/cases/dynamic_api_search_params_client?sentinel=my+sentinel',
- {}
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('my sentinel')
- } else {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at buildtime')
- // The second component renders before the first one aborts so we end up
- // capturing the static value during buildtime
- expect($('#inner').text()).toBe('at buildtime')
- expect($('#value').text()).toBe('my sentinel')
- }
- })
- } else {
- it('should not prerender pages that use `searchParams` in Client Components', async () => {
- let $ = await next.render$(
- '/cases/dynamic_api_search_params_client?sentinel=my+sentinel',
- {}
- )
- if (isNextDev) {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('my sentinel')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#inner').text()).toBe('at runtime')
- expect($('#value').text()).toBe('my sentinel')
- }
- })
- }
+ it('should partially prerender pages that use `searchParams` in Client Components', async () => {
+ let $ = await next.render$(
+ '/cases/dynamic_api_search_params_client?sentinel=my+sentinel',
+ {}
+ )
+ if (isNextDev) {
+ expect($('#layout').text()).toBe('at runtime')
+ expect($('#page').text()).toBe('at runtime')
+ expect($('#inner').text()).toBe('at runtime')
+ expect($('#value').text()).toBe('my sentinel')
+ } else {
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page').text()).toBe('at buildtime')
+ // The second component renders before the first one aborts so we end up
+ // capturing the static value during buildtime
+ expect($('#inner').text()).toBe('at buildtime')
+ expect($('#value').text()).toBe('my sentinel')
+ }
+ })
it('can prerender pages with parallel routes that are static', async () => {
const $ = await next.render$('/cases/parallel/static', {})
@@ -501,15 +299,9 @@ describe('dynamic-io', () => {
expect($('#page-slot').text()).toBe('at runtime')
expect($('#page-children').text()).toBe('at runtime')
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page-slot').text()).toBe('at runtime')
- expect($('#page-children').text()).toBe('at buildtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page-slot').text()).toBe('at runtime')
- expect($('#page-children').text()).toBe('at runtime')
- }
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page-slot').text()).toBe('at runtime')
+ expect($('#page-children').text()).toBe('at buildtime')
}
})
@@ -533,15 +325,9 @@ describe('dynamic-io', () => {
expect($('#page-slot').text()).toBe('at runtime')
expect($('#page-children').text()).toBe('at runtime')
} else {
- if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page-slot').text()).toBe('at runtime')
- expect($('#page-children').text()).toBe('at buildtime')
- } else {
- expect($('#layout').text()).toBe('at runtime')
- expect($('#page-slot').text()).toBe('at runtime')
- expect($('#page-children').text()).toBe('at runtime')
- }
+ expect($('#layout').text()).toBe('at buildtime')
+ expect($('#page-slot').text()).toBe('at runtime')
+ expect($('#page-children').text()).toBe('at buildtime')
}
})
})
diff --git a/test/e2e/app-dir/dynamic-io/dynamic-io.web-crypto.test.ts b/test/e2e/app-dir/dynamic-io/dynamic-io.web-crypto.test.ts
index 1b5ac0400ad1..67459e87e231 100644
--- a/test/e2e/app-dir/dynamic-io/dynamic-io.web-crypto.test.ts
+++ b/test/e2e/app-dir/dynamic-io/dynamic-io.web-crypto.test.ts
@@ -1,7 +1,5 @@
import { nextTestSetup } from 'e2e-utils'
-const WITH_PPR = !!process.env.__NEXT_EXPERIMENTAL_PPR
-
describe('dynamic-io', () => {
const { next, isNextDev, skipped } = nextTestSetup({
files: __dirname,
@@ -36,12 +34,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
@@ -66,12 +60,8 @@ describe('dynamic-io', () => {
expect($('#layout').text()).toBe('at runtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
- } else if (WITH_PPR) {
- expect($('#layout').text()).toBe('at buildtime')
- expect($('#page').text()).toBe('at runtime')
- expect($('#first').text()).not.toEqual($('#second').text())
} else {
- expect($('#layout').text()).toBe('at runtime')
+ expect($('#layout').text()).toBe('at buildtime')
expect($('#page').text()).toBe('at runtime')
expect($('#first').text()).not.toEqual($('#second').text())
}
diff --git a/test/e2e/app-dir/dynamic-io/next.config.js b/test/e2e/app-dir/dynamic-io/next.config.js
index 18a5238c3afd..16e8384b655b 100644
--- a/test/e2e/app-dir/dynamic-io/next.config.js
+++ b/test/e2e/app-dir/dynamic-io/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
},
}
diff --git a/test/e2e/app-dir/node-extensions/fixtures/random/dynamic-io/next.config.js b/test/e2e/app-dir/node-extensions/fixtures/random/dynamic-io/next.config.js
index 18a5238c3afd..16e8384b655b 100644
--- a/test/e2e/app-dir/node-extensions/fixtures/random/dynamic-io/next.config.js
+++ b/test/e2e/app-dir/node-extensions/fixtures/random/dynamic-io/next.config.js
@@ -3,7 +3,7 @@
*/
const nextConfig = {
experimental: {
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
dynamicIO: true,
},
}
diff --git a/test/e2e/app-dir/server-source-maps/fixtures/default/next.config.js b/test/e2e/app-dir/server-source-maps/fixtures/default/next.config.js
index 3ebbb3f52663..1e411141b940 100644
--- a/test/e2e/app-dir/server-source-maps/fixtures/default/next.config.js
+++ b/test/e2e/app-dir/server-source-maps/fixtures/default/next.config.js
@@ -4,6 +4,7 @@
const nextConfig = {
experimental: {
cpus: 1,
+ ppr: true,
dynamicIO: true,
serverSourceMaps: true,
},
diff --git a/test/e2e/app-dir/use-cache-close-over-function/next.config.js b/test/e2e/app-dir/use-cache-close-over-function/next.config.js
index 2e3b04951d3b..6bc18129e2da 100644
--- a/test/e2e/app-dir/use-cache-close-over-function/next.config.js
+++ b/test/e2e/app-dir/use-cache-close-over-function/next.config.js
@@ -4,6 +4,7 @@
const nextConfig = {
experimental: {
dynamicIO: true,
+ ppr: true,
serverSourceMaps: true,
},
}
diff --git a/test/e2e/app-dir/use-cache-custom-handler/next.config.js b/test/e2e/app-dir/use-cache-custom-handler/next.config.js
index 0220588c2b3c..41cd9084f6b0 100644
--- a/test/e2e/app-dir/use-cache-custom-handler/next.config.js
+++ b/test/e2e/app-dir/use-cache-custom-handler/next.config.js
@@ -4,6 +4,7 @@
const nextConfig = {
experimental: {
dynamicIO: true,
+ ppr: true,
cacheHandlers: {
default: require.resolve('./handler.js'),
legacy: require.resolve('./legacy-handler.js'),
diff --git a/test/e2e/app-dir/use-cache-hanging-inputs/next.config.js b/test/e2e/app-dir/use-cache-hanging-inputs/next.config.js
index df2126c94163..64f02de79dfb 100644
--- a/test/e2e/app-dir/use-cache-hanging-inputs/next.config.js
+++ b/test/e2e/app-dir/use-cache-hanging-inputs/next.config.js
@@ -5,7 +5,7 @@ const nextConfig = {
experimental: {
dynamicIO: true,
prerenderEarlyExit: false,
- ppr: process.env.__NEXT_EXPERIMENTAL_PPR === 'true',
+ ppr: true,
},
}
diff --git a/test/e2e/app-dir/use-cache-metadata-route-handler/next.config.js b/test/e2e/app-dir/use-cache-metadata-route-handler/next.config.js
index ac4afcf43219..b0b2ad8d2353 100644
--- a/test/e2e/app-dir/use-cache-metadata-route-handler/next.config.js
+++ b/test/e2e/app-dir/use-cache-metadata-route-handler/next.config.js
@@ -4,6 +4,7 @@
const nextConfig = {
experimental: {
dynamicIO: true,
+ ppr: true,
},
}
diff --git a/test/e2e/app-dir/use-cache-route-handler-only/next.config.js b/test/e2e/app-dir/use-cache-route-handler-only/next.config.js
index ac4afcf43219..b0b2ad8d2353 100644
--- a/test/e2e/app-dir/use-cache-route-handler-only/next.config.js
+++ b/test/e2e/app-dir/use-cache-route-handler-only/next.config.js
@@ -4,6 +4,7 @@
const nextConfig = {
experimental: {
dynamicIO: true,
+ ppr: true,
},
}
diff --git a/test/ppr-tests-manifest.json b/test/ppr-tests-manifest.json
index 69e18fb51067..69b57d258673 100644
--- a/test/ppr-tests-manifest.json
+++ b/test/ppr-tests-manifest.json
@@ -83,19 +83,20 @@
"test/development/acceptance-app/**/*.test.{t,j}s{,x}"
],
"exclude": [
- "test/integration/app-dir-export/**/*",
- "test/e2e/app-dir/next-font/**/*",
- "test/e2e/app-dir/ppr/**/*",
- "test/e2e/app-dir/ppr-*/**/*",
- "test/e2e/app-dir/app-prefetch*/**/*",
- "test/e2e/app-dir/searchparams-static-bailout/searchparams-static-bailout.test.ts",
+ "test/development/app-dir/dynamic-io-*/**/*",
+ "test/e2e/app-dir/app-client-cache/client-cache.defaults.test.ts",
"test/e2e/app-dir/app-client-cache/client-cache.experimental.test.ts",
"test/e2e/app-dir/app-client-cache/client-cache.original.test.ts",
- "test/e2e/app-dir/app-client-cache/client-cache.defaults.test.ts",
- "test/e2e/app-dir/react-max-headers-length/react-max-headers-length.test.ts",
+ "test/e2e/app-dir/app-prefetch*/**/*",
+ "test/e2e/app-dir/dynamic-io-*/**/*",
+ "test/e2e/app-dir/dynamic-io/**/*",
+ "test/e2e/app-dir/empty-fallback-shells/**/*",
"test/e2e/app-dir/front-redirect-issue/front-redirect-issue.test.ts",
- "test/e2e/app-dir/static-shell-debugging/static-shell-debugging.test.ts",
- "test/e2e/app-dir/dynamic-io-errors/dynamic-io-errors.prospective-fallback.test.ts",
+ "test/e2e/app-dir/next-font/**/*",
+ "test/e2e/app-dir/ppr-*/**/*",
+ "test/e2e/app-dir/ppr/**/*",
+ "test/e2e/app-dir/react-max-headers-length/react-max-headers-length.test.ts",
+ "test/e2e/app-dir/searchparams-static-bailout/searchparams-static-bailout.test.ts",
"test/e2e/app-dir/segment-cache/basic/segment-cache-basic.test.ts",
"test/e2e/app-dir/segment-cache/export/segment-cache-output-export.test.ts",
"test/e2e/app-dir/segment-cache/incremental-opt-in/segment-cache-incremental-opt-in.test.ts",
@@ -103,6 +104,13 @@
"test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts",
"test/e2e/app-dir/segment-cache/revalidation/segment-cache-revalidation.test.ts",
"test/e2e/app-dir/segment-cache/staleness/segment-cache-stale-time.test.ts",
+ "test/e2e/app-dir/static-shell-debugging/static-shell-debugging.test.ts",
+ "test/e2e/app-dir/use-cache-close-over-function/**/*",
+ "test/e2e/app-dir/use-cache-custom-handler/**/*",
+ "test/e2e/app-dir/use-cache-hanging-inputs/**/*",
+ "test/e2e/app-dir/use-cache-metadata-route-handler/**/*",
+ "test/e2e/app-dir/use-cache-route-handler-only/**/*",
+ "test/integration/app-dir-export/**/*",
"test/production/app-dir/build-output-tree-view/build-output-tree-view.test.ts",
"test/production/app-dir/global-default-cache-handler/global-default-cache-handler.test.ts"
]