Skip to content
Merged
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
13 changes: 12 additions & 1 deletion packages/next/config.js
Original file line number Diff line number Diff line change
@@ -1 +1,12 @@
module.exports = require('./dist/shared/lib/runtime-config.external')
let hasWarned = false

module.exports = (() => {
if (!hasWarned) {
console.warn(
// ANSI code aligns with Next.js warning style from picocolors.
' \x1b[33m\x1b[1m⚠\x1b[22m\x1b[39m Runtime config is deprecated and will be removed in Next.js 16. Please remove the usage of "next/config" from your project.'
)
hasWarned = true
}
return require('./dist/shared/lib/runtime-config.external')
})()
6 changes: 4 additions & 2 deletions packages/next/src/server/config-shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1235,14 +1235,16 @@ export interface NextConfig extends Record<string, any> {
/**
* Add public (in browser) runtime configuration to your app
*
* @see [Runtime configuration](https://nextjs.org/docs/pages/api-reference/config/next-config-js/runtime-configuration
* @see [Runtime configuration](https://nextjs.org/docs/pages/api-reference/config/next-config-js/runtime-configuration)
* @deprecated Runtime config is deprecated and will be removed in Next.js 16.
*/
publicRuntimeConfig?: { [key: string]: any }

/**
* Add server runtime configuration to your app
*
* @see [Runtime configuration](https://nextjs.org/docs/pages/api-reference/config/next-config-js/runtime-configuration
* @see [Runtime configuration](https://nextjs.org/docs/pages/api-reference/config/next-config-js/runtime-configuration)
* @deprecated Runtime config is deprecated and will be removed in Next.js 16.
*/
serverRuntimeConfig?: { [key: string]: any }

Expand Down
13 changes: 13 additions & 0 deletions packages/next/src/server/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,19 @@ function checkDeprecations(
silent
)

warnOptionHasBeenDeprecated(
userConfig,
'publicRuntimeConfig',
`Runtime config is deprecated and the \`publicRuntimeConfig\` configuration option will be removed in Next.js 16.`,
silent
)
warnOptionHasBeenDeprecated(
userConfig,
'serverRuntimeConfig',
`Runtime config is deprecated and the \`serverRuntimeConfig\` configuration option will be removed in Next.js 16.`,
silent
)

if (userConfig.experimental?.dynamicIO !== undefined) {
warnOptionHasBeenDeprecated(
userConfig,
Expand Down
6 changes: 6 additions & 0 deletions packages/next/src/shared/lib/runtime-config.external.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
let runtimeConfig: any

/**
* @deprecated Runtime config is deprecated and will be removed in Next.js 16.
*/
export default () => {
return runtimeConfig
}

/**
* @deprecated Runtime config is deprecated and will be removed in Next.js 16.
*/
export function setConfig(configValue: any): void {
runtimeConfig = configValue
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { ReactNode } from 'react'
export default function Root({ children }: { children: ReactNode }) {
return (
<html>
<body>{children}</body>
</html>
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import getConfig from 'next/config'

export default function Page() {
getConfig()
return <p>hello world</p>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { nextTestSetup } from 'e2e-utils'

describe('deprecation-warning-runtime-config', () => {
const { next } = nextTestSetup({
files: __dirname,
})

it('should warn when imported "next/config" module', async () => {
// Navigate to "/" for dev server to execute the code
await next.browser('/')

expect(next.cliOutput).toContain(
'Runtime config is deprecated and will be removed in Next.js 16. Please remove the usage of "next/config" from your project.'
)
})
})
13 changes: 13 additions & 0 deletions test/e2e/app-dir/deprecation-warning-runtime-config/next.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
publicRuntimeConfig: {
foo: 'bar',
},
serverRuntimeConfig: {
foo: 'bar',
},
}

module.exports = nextConfig
8 changes: 8 additions & 0 deletions test/e2e/deprecation-warnings/deprecation-warnings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ describe('deprecation-warnings', () => {
// Should warn about experimental.instrumentationHook
expect(logs).toContain('experimental.instrumentationHook')
expect(logs).toContain('no longer needed')

// Should warn about publicRuntimeConfig
expect(logs).toContain('publicRuntimeConfig')
expect(logs).toContain('will be removed in Next.js 16')

// Should warn about serverRuntimeConfig
expect(logs).toContain('serverRuntimeConfig')
expect(logs).toContain('will be removed in Next.js 16')
})
})
})
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/** @type {import('next').NextConfig} */
module.exports = {
// Explicitly configure deprecated options
amp: {
Expand All @@ -6,4 +7,10 @@ module.exports = {
experimental: {
instrumentationHook: true,
},
publicRuntimeConfig: {
foo: 'bar',
},
serverRuntimeConfig: {
foo: 'bar',
},
}
Loading