Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions packages/next/src/build/define-env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,9 @@ export function getDefineEnv({
'process.env.__NEXT_CLIENT_SEGMENT_CACHE': Boolean(
config.experimental.clientSegmentCache
),
'process.env.__NEXT_CLIENT_PARAM_PARSING': Boolean(
config.experimental.clientParamParsing
),
'process.env.__NEXT_CLIENT_VALIDATE_RSC_REQUEST_HEADERS': Boolean(
config.experimental.validateRSCRequestHeaders
),
Expand Down
3 changes: 3 additions & 0 deletions packages/next/src/build/templates/app-page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,9 @@ export async function handler(
clientSegmentCache: Boolean(
nextConfig.experimental.clientSegmentCache
),
clientParamParsing: Boolean(
nextConfig.experimental.clientParamParsing
),
dynamicOnHover: Boolean(nextConfig.experimental.dynamicOnHover),
inlineCss: Boolean(nextConfig.experimental.inlineCss),
authInterrupts: Boolean(nextConfig.experimental.authInterrupts),
Expand Down
1 change: 1 addition & 0 deletions packages/next/src/build/templates/edge-ssr-app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ async function requestHandler(
staleTimes: nextConfig.experimental.staleTimes,
cacheComponents: Boolean(nextConfig.experimental.cacheComponents),
clientSegmentCache: Boolean(nextConfig.experimental.clientSegmentCache),
clientParamParsing: Boolean(nextConfig.experimental.clientParamParsing),
dynamicOnHover: Boolean(nextConfig.experimental.dynamicOnHover),
inlineCss: Boolean(nextConfig.experimental.inlineCss),
authInterrupts: Boolean(nextConfig.experimental.authInterrupts),
Expand Down
1 change: 1 addition & 0 deletions packages/next/src/export/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,7 @@ async function exportAppImpl(
nextConfig.experimental.clientSegmentCache === 'client-only'
? 'client-only'
: Boolean(nextConfig.experimental.clientSegmentCache),
clientParamParsing: nextConfig.experimental.clientParamParsing ?? false,
dynamicOnHover: nextConfig.experimental.dynamicOnHover ?? false,
inlineCss: nextConfig.experimental.inlineCss ?? false,
authInterrupts: !!nextConfig.experimental.authInterrupts,
Expand Down
1 change: 1 addition & 0 deletions packages/next/src/server/app-render/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ export interface RenderOptsPartial {
clientTraceMetadata: string[] | undefined
cacheComponents: boolean
clientSegmentCache: boolean | 'client-only'
clientParamParsing: boolean
dynamicOnHover: boolean
inlineCss: boolean
authInterrupts: boolean
Expand Down
2 changes: 2 additions & 0 deletions packages/next/src/server/base-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,8 @@ export default abstract class Server<
this.nextConfig.experimental.clientSegmentCache === 'client-only'
? 'client-only'
: Boolean(this.nextConfig.experimental.clientSegmentCache),
clientParamParsing:
this.nextConfig.experimental.clientParamParsing ?? false,
dynamicOnHover: this.nextConfig.experimental.dynamicOnHover ?? false,
inlineCss: this.nextConfig.experimental.inlineCss ?? false,
authInterrupts: !!this.nextConfig.experimental.authInterrupts,
Expand Down
1 change: 1 addition & 0 deletions packages/next/src/server/config-schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,7 @@ export const configSchema: zod.ZodType<NextConfig> = z.lazy(() =>
clientSegmentCache: z
.union([z.boolean(), z.literal('client-only')])
.optional(),
clientParamParsing: z.boolean().optional(),
dynamicOnHover: z.boolean().optional(),
disableOptimizedLoading: z.boolean().optional(),
disablePostcssPresetEnv: z.boolean().optional(),
Expand Down
2 changes: 2 additions & 0 deletions packages/next/src/server/config-shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,7 @@ export interface ExperimentalConfig {
linkNoTouchStart?: boolean
caseSensitiveRoutes?: boolean
clientSegmentCache?: boolean | 'client-only'
clientParamParsing?: boolean
dynamicOnHover?: boolean
appDocumentPreloading?: boolean
preloadEntriesOnStart?: boolean
Expand Down Expand Up @@ -1400,6 +1401,7 @@ export const defaultConfig = Object.freeze({
linkNoTouchStart: false,
caseSensitiveRoutes: false,
clientSegmentCache: false,
clientParamParsing: false,
dynamicOnHover: false,
appDocumentPreloading: undefined,
preloadEntriesOnStart: true,
Expand Down
19 changes: 19 additions & 0 deletions packages/next/src/server/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1715,6 +1715,25 @@ function enforceExperimentalFeatures(
}
}

// TODO: Remove this once we've made Client Param Parsing the default.
if (
process.env.__NEXT_EXPERIMENTAL_PPR === 'true' &&
// We do respect an explicit value in the user config.
(config.experimental.clientParamParsing === undefined ||
(isDefaultConfig && !config.experimental.clientParamParsing))
) {
config.experimental.clientParamParsing = true

if (configuredExperimentalFeatures) {
addConfiguredExperimentalFeature(
configuredExperimentalFeatures,
'clientParamParsing',
true,
'enabled by `__NEXT_EXPERIMENTAL_PPR`'
)
}
}

// TODO: Remove this once we've made Cache Components the default.
if (
process.env.__NEXT_EXPERIMENTAL_CACHE_COMPONENTS === 'true' &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ describe('build-output-prerender', () => {
✓ ppr (enabled by \`__NEXT_EXPERIMENTAL_CACHE_COMPONENTS\`)
✓ cacheComponents
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`experimental.cacheComponents\`)"
`)
} else {
Expand All @@ -35,6 +36,7 @@ describe('build-output-prerender', () => {
✓ ppr (enabled by \`__NEXT_EXPERIMENTAL_CACHE_COMPONENTS\`)
✓ cacheComponents
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`experimental.cacheComponents\`)"
`)
}
Expand All @@ -46,6 +48,7 @@ describe('build-output-prerender', () => {
✓ ppr (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ cacheComponents
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`experimental.cacheComponents\`)"
`)
} else {
Expand All @@ -55,6 +58,7 @@ describe('build-output-prerender', () => {
✓ ppr (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ cacheComponents
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`experimental.cacheComponents\`)"
`)
}
Expand Down Expand Up @@ -131,6 +135,7 @@ describe('build-output-prerender', () => {
✓ serverSourceMaps (enabled by \`--debug-prerender\`)
⨯ prerenderEarlyExit (disabled by \`--debug-prerender\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`--debug-prerender\`)"
`)
} else {
Expand All @@ -144,6 +149,7 @@ describe('build-output-prerender', () => {
⨯ serverMinification (disabled by \`--debug-prerender\`)
⨯ prerenderEarlyExit (disabled by \`--debug-prerender\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`--debug-prerender\`)"
`)
}
Expand All @@ -159,6 +165,7 @@ describe('build-output-prerender', () => {
✓ serverSourceMaps (enabled by \`--debug-prerender\`)
⨯ prerenderEarlyExit (disabled by \`--debug-prerender\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`--debug-prerender\`)"
`)
} else {
Expand All @@ -172,6 +179,7 @@ describe('build-output-prerender', () => {
⨯ serverMinification (disabled by \`--debug-prerender\`)
⨯ prerenderEarlyExit (disabled by \`--debug-prerender\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`--debug-prerender\`)"
`)
}
Expand Down Expand Up @@ -251,6 +259,7 @@ describe('build-output-prerender', () => {
✓ ppr (enabled by \`__NEXT_EXPERIMENTAL_CACHE_COMPONENTS\`)
✓ cacheComponents (enabled by \`__NEXT_EXPERIMENTAL_CACHE_COMPONENTS\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`experimental.cacheComponents\`)"
`)
} else {
Expand All @@ -260,6 +269,7 @@ describe('build-output-prerender', () => {
✓ ppr (enabled by \`__NEXT_EXPERIMENTAL_CACHE_COMPONENTS\`)
✓ cacheComponents (enabled by \`__NEXT_EXPERIMENTAL_CACHE_COMPONENTS\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`experimental.cacheComponents\`)"
`)
}
Expand All @@ -269,14 +279,16 @@ describe('build-output-prerender', () => {
"▲ Next.js x.y.z (Turbopack)
- Experiments (use with caution):
✓ ppr (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)"
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)"
`)
} else {
expect(getPreambleOutput(next.cliOutput)).toMatchInlineSnapshot(`
"▲ Next.js x.y.z
- Experiments (use with caution):
✓ ppr (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)"
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)"
`)
}
} else {
Expand Down Expand Up @@ -315,6 +327,7 @@ describe('build-output-prerender', () => {
✓ serverSourceMaps (enabled by \`--debug-prerender\`)
⨯ prerenderEarlyExit (disabled by \`--debug-prerender\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`--debug-prerender\`)"
`)
} else {
Expand All @@ -328,6 +341,7 @@ describe('build-output-prerender', () => {
⨯ serverMinification (disabled by \`--debug-prerender\`)
⨯ prerenderEarlyExit (disabled by \`--debug-prerender\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`--debug-prerender\`)"
`)
}
Expand All @@ -342,6 +356,7 @@ describe('build-output-prerender', () => {
✓ serverSourceMaps (enabled by \`--debug-prerender\`)
⨯ prerenderEarlyExit (disabled by \`--debug-prerender\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`--debug-prerender\`)"
`)
} else {
Expand All @@ -354,6 +369,7 @@ describe('build-output-prerender', () => {
⨯ serverMinification (disabled by \`--debug-prerender\`)
⨯ prerenderEarlyExit (disabled by \`--debug-prerender\`)
✓ clientSegmentCache (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ clientParamParsing (enabled by \`__NEXT_EXPERIMENTAL_PPR\`)
✓ enablePrerenderSourceMaps (enabled by \`--debug-prerender\`)"
`)
}
Expand Down