From cafb886ed6d55519c95a69eb9e71e0856a38e076 Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Tue, 20 Dec 2022 17:17:40 +0100 Subject: [PATCH] Move options to stable (#44195) This PR moves `allowMiddlewareResponseBody`, `skipMiddlewareUrlNormalize` and `skipTrailingSlashRedirect` to stable. ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] [e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm build && pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md) --- packages/next/build/index.ts | 3 +-- packages/next/build/webpack-config.ts | 9 ++++----- packages/next/lib/load-custom-routes.ts | 2 +- packages/next/server/config-schema.ts | 18 +++++++++--------- packages/next/server/config-shared.ts | 9 ++++++--- packages/next/server/next-server.ts | 2 +- test/e2e/app-dir/app-middleware/next.config.js | 2 +- .../app/next.config.js | 8 +++----- 8 files changed, 26 insertions(+), 27 deletions(-) diff --git a/packages/next/build/index.ts b/packages/next/build/index.ts index b9d09a5a44f9089..b67e9ad45615fdb 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 18bc7e98ebf55d8..bf51537489005a5 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 9c3c126f6e57185..71133a30ec9e3cf 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 2090cd6e46a0c9d..f5f4293dc00f60a 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', }, @@ -375,12 +375,6 @@ const configSchema = { sharedPool: { type: 'boolean', }, - skipMiddlewareUrlNormalize: { - type: 'boolean', - }, - skipTrailingSlashRedirect: { - type: 'boolean', - }, sri: { properties: { algorithm: { @@ -697,6 +691,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 858eed14c5261c7..e91dbfbd9072472 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 @@ -507,6 +504,12 @@ export interface NextConfig extends Record { output?: 'standalone' + 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 4052b3d5d9db007..d4189e0c17c7b10 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 4ab660b86b15161..858ebde3005dccd 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 83ae7164fa5685d..5c43bb59d11b645 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 [ {