Skip to content

Commit

Permalink
feat(config): warn usage of non exist exprimental features
Browse files Browse the repository at this point in the history
  • Loading branch information
SukkaW committed Jun 17, 2022
1 parent 28e26c6 commit 01f2aa6
Showing 1 changed file with 38 additions and 7 deletions.
45 changes: 38 additions & 7 deletions packages/next/server/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,24 @@ const experimentalWarning = execOnce(
}
)

const notExistedExperimentalFeatureWarning = execOnce(
(configFileName: string, features: string[]) => {
const s = features.length > 1 ? 's' : ''
const dont = features.length > 1 ? 'do not' : 'does not'
const exist = features.length > 1 ? 'exist' : 'exists'
const them = features.length > 1 ? 'them' : 'it'
Log.warn(
chalk.bold(
`You have defined experimental feature${s} (${features.join(
', '
)}) in ${configFileName} that ${dont} ${exist} in this version of Next.js.`
)
)
Log.warn(`Please remove ${them} from your configuration.`)
console.warn()
}
)

function assignDefaults(userConfig: { [key: string]: any }) {
const configFileName = userConfig.configFileName
if (typeof userConfig.exportTrailingSlash !== 'undefined') {
Expand Down Expand Up @@ -79,16 +97,29 @@ function assignDefaults(userConfig: { [key: string]: any }) {
}

if (key === 'experimental' && typeof value === 'object') {
const enabledExperimentalFeatures = (
Object.keys(value) as (keyof ExperimentalConfig)[]
).filter(
// defaultConfig is pre-defined, thus defaultConfig.experimental can not be undefined
(featureName) =>
const notExistedExperimentalFeatures: string[] = []
const enabledExperimentalFeatures: (keyof ExperimentalConfig)[] = []

for (const featureName of Object.keys(
value
) as (keyof ExperimentalConfig)[]) {
if (!(featureName in defaultConfig.experimental!)) {
notExistedExperimentalFeatures.push(featureName)
} else if (
value[featureName] !== defaultConfig.experimental![featureName]
)
) {
enabledExperimentalFeatures.push(featureName)
}
}

if (notExistedExperimentalFeatures.length > 0) {
notExistedExperimentalFeatureWarning(
configFileName,
notExistedExperimentalFeatures
)
}
if (enabledExperimentalFeatures.length > 0) {
experimentalWarning(configFileName, Object.keys(value))
experimentalWarning(configFileName, enabledExperimentalFeatures)
}
}

Expand Down

0 comments on commit 01f2aa6

Please sign in to comment.