diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index b9d09a5a44f9..b67e9ad45615 100644 --- a/packages/next/build/index.ts +++ b/packages/next/build/index.ts @@ -797,8 +797,7 @@ export default async function build( header: RSC, varyHeader: RSC_VARY_HEADER, }, - skipMiddlewareUrlNormalize: - config.experimental.skipMiddlewareUrlNormalize, + skipMiddlewareUrlNormalize: config.skipMiddlewareUrlNormalize, } }) diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index dc097efb1db8..ead6383ada78 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -302,13 +302,13 @@ export function getDefineEnv({ 'process.env.__NEXT_I18N_DOMAINS': JSON.stringify(config.i18n?.domains), 'process.env.__NEXT_ANALYTICS_ID': JSON.stringify(config.analyticsId), 'process.env.__NEXT_ALLOW_MIDDLEWARE_RESPONSE_BODY': JSON.stringify( - config.experimental.allowMiddlewareResponseBody + config.allowMiddlewareResponseBody ), 'process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE': JSON.stringify( - config.experimental.skipMiddlewareUrlNormalize + config.skipMiddlewareUrlNormalize ), 'process.env.__NEXT_MANUAL_TRAILING_SLASH': JSON.stringify( - config.experimental?.skipTrailingSlashRedirect + config.skipTrailingSlashRedirect ), 'process.env.__NEXT_HAS_WEB_VITALS_ATTRIBUTION': JSON.stringify( config.experimental.webVitalsAttribution && @@ -2062,8 +2062,7 @@ export default async function getBaseWebpackConfig( dev, sriEnabled: !dev && !!config.experimental.sri?.algorithm, hasFontLoaders: !!config.experimental.fontLoaders, - allowMiddlewareResponseBody: - !!config.experimental.allowMiddlewareResponseBody, + allowMiddlewareResponseBody: !!config.allowMiddlewareResponseBody, }), isClient && new BuildManifestPlugin({ diff --git a/packages/next/lib/load-custom-routes.ts b/packages/next/lib/load-custom-routes.ts index 9c3c126f6e57..71133a30ec9e 100644 --- a/packages/next/lib/load-custom-routes.ts +++ b/packages/next/lib/load-custom-routes.ts @@ -659,7 +659,7 @@ export default async function loadCustomRoutes( ) } - if (!config.experimental?.skipTrailingSlashRedirect) { + if (!config.skipTrailingSlashRedirect) { if (config.trailingSlash) { redirects.unshift( { diff --git a/packages/next/server/config-schema.ts b/packages/next/server/config-schema.ts index 297c6a2c402e..e6613681b08c 100644 --- a/packages/next/server/config-schema.ts +++ b/packages/next/server/config-schema.ts @@ -7,6 +7,9 @@ const configSchema = { type: 'object', additionalProperties: false, properties: { + allowMiddlewareResponseBody: { + type: 'boolean', + }, amp: { additionalProperties: false, properties: { @@ -269,9 +272,6 @@ const configSchema = { appDir: { type: 'boolean', }, - allowMiddlewareResponseBody: { - type: 'boolean', - }, externalDir: { type: 'boolean', }, @@ -369,12 +369,6 @@ const configSchema = { sharedPool: { type: 'boolean', }, - skipMiddlewareUrlNormalize: { - type: 'boolean', - }, - skipTrailingSlashRedirect: { - type: 'boolean', - }, sri: { properties: { algorithm: { @@ -691,6 +685,12 @@ const configSchema = { serverRuntimeConfig: { type: 'object', }, + skipMiddlewareUrlNormalize: { + type: 'boolean', + }, + skipTrailingSlashRedirect: { + type: 'boolean', + }, staticPageGenerationTimeout: { type: 'number', }, diff --git a/packages/next/server/config-shared.ts b/packages/next/server/config-shared.ts index d500549748df..91f07605df99 100644 --- a/packages/next/server/config-shared.ts +++ b/packages/next/server/config-shared.ts @@ -80,9 +80,6 @@ export interface NextJsWebpackConfig { export interface ExperimentalConfig { fetchCache?: boolean - allowMiddlewareResponseBody?: boolean - skipMiddlewareUrlNormalize?: boolean - skipTrailingSlashRedirect?: boolean optimisticClientCache?: boolean middlewarePrefetch?: 'strict' | 'flexible' legacyBrowsers?: boolean @@ -506,6 +503,12 @@ export interface NextConfig extends Record { // A list of packages that should always be transpiled and bundled in the server transpilePackages?: string[] + + allowMiddlewareResponseBody?: boolean + + skipMiddlewareUrlNormalize?: boolean + + skipTrailingSlashRedirect?: boolean /** * Enable experimental features. Note that all experimental features are subject to breaking changes in the future. diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index 4052b3d5d9db..d4189e0c17c7 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -1716,7 +1716,7 @@ export default class NextNodeServer extends BaseServer { let url: string - if (this.nextConfig.experimental.skipMiddlewareUrlNormalize) { + if (this.nextConfig.skipMiddlewareUrlNormalize) { url = getRequestMeta(params.request, '__NEXT_INIT_URL')! } else { // For middleware to "fetch" we must always provide an absolute URL diff --git a/test/e2e/app-dir/app-middleware/next.config.js b/test/e2e/app-dir/app-middleware/next.config.js index 4ab660b86b15..858ebde3005d 100644 --- a/test/e2e/app-dir/app-middleware/next.config.js +++ b/test/e2e/app-dir/app-middleware/next.config.js @@ -1,6 +1,6 @@ module.exports = { + allowMiddlewareResponseBody: true, experimental: { appDir: true, - allowMiddlewareResponseBody: true, }, } diff --git a/test/e2e/skip-trailing-slash-redirect/app/next.config.js b/test/e2e/skip-trailing-slash-redirect/app/next.config.js index 83ae7164fa56..5c43bb59d11b 100644 --- a/test/e2e/skip-trailing-slash-redirect/app/next.config.js +++ b/test/e2e/skip-trailing-slash-redirect/app/next.config.js @@ -1,10 +1,8 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - experimental: { - skipTrailingSlashRedirect: true, - skipMiddlewareUrlNormalize: true, - allowMiddlewareResponseBody: true, - }, + allowMiddlewareResponseBody: true, + skipMiddlewareUrlNormalize: true, + skipTrailingSlashRedirect: true, async redirects() { return [ {