2021-02-27 07:19:35 +01:00
|
|
|
import os from 'os'
|
2021-10-24 23:04:26 +02:00
|
|
|
import type { webpack5 } from 'next/dist/compiled/webpack/webpack'
|
2021-06-30 13:44:40 +02:00
|
|
|
import { Header, Redirect, Rewrite } from '../lib/load-custom-routes'
|
2021-09-09 00:03:52 +02:00
|
|
|
import {
|
|
|
|
ImageConfig,
|
|
|
|
ImageConfigComplete,
|
|
|
|
imageConfigDefault,
|
|
|
|
} from './image-config'
|
2021-02-27 07:19:35 +01:00
|
|
|
|
2021-09-09 00:03:52 +02:00
|
|
|
export type NextConfigComplete = Required<NextConfig> & {
|
|
|
|
images: ImageConfigComplete
|
2021-09-24 00:52:05 +02:00
|
|
|
typescript: Required<TypeScriptConfig>
|
2021-10-16 14:22:42 +02:00
|
|
|
configOrigin?: string
|
|
|
|
configFile?: string
|
2021-10-22 01:04:40 +02:00
|
|
|
configFileName: string
|
2021-07-12 23:38:57 +02:00
|
|
|
}
|
|
|
|
|
2021-07-21 18:12:33 +02:00
|
|
|
export interface I18NConfig {
|
|
|
|
defaultLocale: string
|
|
|
|
domains?: DomainLocale[]
|
|
|
|
localeDetection?: false
|
|
|
|
locales: string[]
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface DomainLocale {
|
|
|
|
defaultLocale: string
|
|
|
|
domain: string
|
|
|
|
http?: true
|
|
|
|
locales?: string[]
|
|
|
|
}
|
|
|
|
|
2021-07-23 21:15:26 +02:00
|
|
|
export interface ESLintConfig {
|
2021-07-25 15:48:46 +02:00
|
|
|
/** Only run ESLint on these directories with `next lint` and `next build`. */
|
2021-07-23 21:15:26 +02:00
|
|
|
dirs?: string[]
|
|
|
|
/** Do not run ESLint during production builds (`next build`). */
|
|
|
|
ignoreDuringBuilds?: boolean
|
|
|
|
}
|
|
|
|
|
2021-08-24 16:08:18 +02:00
|
|
|
export interface TypeScriptConfig {
|
|
|
|
/** Do not run TypeScript during production builds (`next build`). */
|
|
|
|
ignoreBuildErrors?: boolean
|
2021-09-24 00:52:05 +02:00
|
|
|
/** Relative path to a custom tsconfig file */
|
|
|
|
tsconfigPath?: string
|
2021-08-24 16:08:18 +02:00
|
|
|
}
|
|
|
|
|
2021-02-27 07:19:35 +01:00
|
|
|
export type NextConfig = { [key: string]: any } & {
|
2021-07-21 18:12:33 +02:00
|
|
|
i18n?: I18NConfig | null
|
2021-02-27 07:19:35 +01:00
|
|
|
|
2021-07-23 21:15:26 +02:00
|
|
|
eslint?: ESLintConfig
|
2021-08-24 16:08:18 +02:00
|
|
|
typescript?: TypeScriptConfig
|
2021-07-23 21:15:26 +02:00
|
|
|
|
2021-02-27 07:19:35 +01:00
|
|
|
headers?: () => Promise<Header[]>
|
2021-03-26 16:19:48 +01:00
|
|
|
rewrites?: () => Promise<
|
|
|
|
| Rewrite[]
|
|
|
|
| {
|
|
|
|
beforeFiles: Rewrite[]
|
|
|
|
afterFiles: Rewrite[]
|
|
|
|
fallback: Rewrite[]
|
|
|
|
}
|
|
|
|
>
|
2021-02-27 07:19:35 +01:00
|
|
|
redirects?: () => Promise<Redirect[]>
|
2021-07-12 23:38:57 +02:00
|
|
|
|
2022-01-23 20:34:08 +01:00
|
|
|
/**
|
|
|
|
* @deprecated This option has been removed as webpack 5 is now default
|
|
|
|
*/
|
2021-06-07 22:48:29 +02:00
|
|
|
webpack5?: false
|
2021-06-14 16:20:34 +02:00
|
|
|
excludeDefaultMomentLocales?: boolean
|
2021-02-27 07:19:35 +01:00
|
|
|
|
2021-08-12 17:42:57 +02:00
|
|
|
webpack?:
|
|
|
|
| ((
|
|
|
|
config: any,
|
|
|
|
context: {
|
|
|
|
dir: string
|
|
|
|
dev: boolean
|
|
|
|
isServer: boolean
|
|
|
|
buildId: string
|
|
|
|
config: NextConfigComplete
|
|
|
|
defaultLoaders: { babel: any }
|
|
|
|
totalPages: number
|
|
|
|
webpack: any
|
|
|
|
}
|
|
|
|
) => any)
|
|
|
|
| null
|
|
|
|
|
2021-07-12 23:38:57 +02:00
|
|
|
trailingSlash?: boolean
|
|
|
|
env?: { [key: string]: string }
|
|
|
|
distDir?: string
|
|
|
|
cleanDistDir?: boolean
|
|
|
|
assetPrefix?: string
|
|
|
|
useFileSystemPublicRoutes?: boolean
|
2021-08-13 00:26:44 +02:00
|
|
|
generateBuildId?: () => string | null | Promise<string | null>
|
2021-07-12 23:38:57 +02:00
|
|
|
generateEtags?: boolean
|
|
|
|
pageExtensions?: string[]
|
|
|
|
compress?: boolean
|
2021-08-12 17:42:57 +02:00
|
|
|
poweredByHeader?: boolean
|
2021-07-12 23:38:57 +02:00
|
|
|
images?: ImageConfig
|
|
|
|
devIndicators?: {
|
|
|
|
buildActivity?: boolean
|
2021-11-03 22:17:36 +01:00
|
|
|
buildActivityPosition?:
|
|
|
|
| 'bottom-right'
|
|
|
|
| 'bottom-left'
|
|
|
|
| 'top-right'
|
|
|
|
| 'top-left'
|
2021-07-12 23:38:57 +02:00
|
|
|
}
|
|
|
|
onDemandEntries?: {
|
|
|
|
maxInactiveAge?: number
|
|
|
|
pagesBufferLength?: number
|
|
|
|
}
|
|
|
|
amp?: {
|
|
|
|
canonicalBase?: string
|
|
|
|
}
|
|
|
|
basePath?: string
|
|
|
|
sassOptions?: { [key: string]: any }
|
|
|
|
productionBrowserSourceMaps?: boolean
|
|
|
|
optimizeFonts?: boolean
|
2021-07-20 20:42:29 +02:00
|
|
|
reactStrictMode?: boolean
|
|
|
|
publicRuntimeConfig?: { [key: string]: any }
|
|
|
|
serverRuntimeConfig?: { [key: string]: any }
|
2021-08-03 02:38:42 +02:00
|
|
|
httpAgentOptions?: { keepAlive?: boolean }
|
2021-07-20 20:42:29 +02:00
|
|
|
future?: {
|
2021-06-07 22:48:29 +02:00
|
|
|
/**
|
2022-01-23 20:34:08 +01:00
|
|
|
* @deprecated This option has been removed as webpack 5 is now default
|
2021-06-07 22:48:29 +02:00
|
|
|
*/
|
|
|
|
webpack5?: false
|
2021-03-26 16:19:48 +01:00
|
|
|
}
|
2021-10-26 06:22:45 +02:00
|
|
|
outputFileTracing?: boolean
|
2021-10-20 21:06:43 +02:00
|
|
|
staticPageGenerationTimeout?: number
|
2021-09-21 19:17:16 +02:00
|
|
|
crossOrigin?: false | 'anonymous' | 'use-credentials'
|
2021-10-25 13:49:11 +02:00
|
|
|
swcMinify?: boolean
|
2021-07-20 20:42:29 +02:00
|
|
|
experimental?: {
|
2021-11-25 18:41:20 +01:00
|
|
|
disablePostcssPresetEnv?: boolean
|
2021-11-16 10:18:05 +01:00
|
|
|
removeConsole?:
|
|
|
|
| boolean
|
|
|
|
| {
|
|
|
|
exclude?: string[]
|
|
|
|
}
|
2021-11-26 14:45:03 +01:00
|
|
|
reactRemoveProperties?:
|
|
|
|
| boolean
|
|
|
|
| {
|
|
|
|
properties?: string[]
|
|
|
|
}
|
2021-11-09 11:05:31 +01:00
|
|
|
styledComponents?: boolean
|
2021-08-06 16:07:36 +02:00
|
|
|
swcMinify?: boolean
|
2021-12-02 05:16:15 +01:00
|
|
|
swcFileReading?: boolean
|
2021-03-26 16:19:48 +01:00
|
|
|
cpus?: number
|
2021-08-12 21:54:49 +02:00
|
|
|
sharedPool?: boolean
|
2021-03-26 16:19:48 +01:00
|
|
|
plugins?: boolean
|
|
|
|
profiling?: boolean
|
2021-07-22 04:42:33 +02:00
|
|
|
isrFlushToDisk?: boolean
|
2021-03-26 16:19:48 +01:00
|
|
|
reactMode?: 'legacy' | 'concurrent' | 'blocking'
|
|
|
|
workerThreads?: boolean
|
|
|
|
pageEnv?: boolean
|
|
|
|
optimizeImages?: boolean
|
|
|
|
optimizeCss?: boolean
|
|
|
|
scrollRestoration?: boolean
|
|
|
|
externalDir?: boolean
|
|
|
|
conformance?: boolean
|
|
|
|
amp?: {
|
|
|
|
optimizer?: any
|
|
|
|
validator?: string
|
|
|
|
skipValidation?: boolean
|
|
|
|
}
|
2021-05-18 23:49:50 +02:00
|
|
|
reactRoot?: boolean
|
|
|
|
disableOptimizedLoading?: boolean
|
|
|
|
gzipSize?: boolean
|
2021-06-09 16:51:56 +02:00
|
|
|
craCompat?: boolean
|
2021-07-10 18:49:02 +02:00
|
|
|
esmExternals?: boolean | 'loose'
|
2021-07-21 19:39:38 +02:00
|
|
|
isrMemoryCacheSize?: number
|
2021-08-11 05:06:42 +02:00
|
|
|
concurrentFeatures?: boolean
|
2021-10-01 16:40:07 +02:00
|
|
|
serverComponents?: boolean
|
2021-10-13 17:23:50 +02:00
|
|
|
fullySpecified?: boolean
|
2021-10-21 13:14:57 +02:00
|
|
|
urlImports?: NonNullable<webpack5.Configuration['experiments']>['buildHttp']
|
2021-11-04 10:23:28 +01:00
|
|
|
outputFileTracingRoot?: string
|
2021-11-09 18:03:20 +01:00
|
|
|
outputStandalone?: boolean
|
2022-02-01 19:18:55 +01:00
|
|
|
relay?: {
|
|
|
|
src: string
|
|
|
|
artifactDirectory?: string
|
|
|
|
language?: 'typescript' | 'flow'
|
|
|
|
}
|
2021-02-27 07:19:35 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export const defaultConfig: NextConfig = {
|
2021-07-12 23:38:57 +02:00
|
|
|
env: {},
|
2021-02-27 07:19:35 +01:00
|
|
|
webpack: null,
|
|
|
|
webpackDevMiddleware: null,
|
2021-08-24 16:08:18 +02:00
|
|
|
eslint: {
|
|
|
|
ignoreDuringBuilds: false,
|
|
|
|
},
|
|
|
|
typescript: {
|
|
|
|
ignoreBuildErrors: false,
|
2021-09-24 00:52:05 +02:00
|
|
|
tsconfigPath: 'tsconfig.json',
|
2021-08-24 16:08:18 +02:00
|
|
|
},
|
2021-02-27 07:19:35 +01:00
|
|
|
distDir: '.next',
|
2021-06-14 16:20:34 +02:00
|
|
|
cleanDistDir: true,
|
2021-02-27 07:19:35 +01:00
|
|
|
assetPrefix: '',
|
|
|
|
configOrigin: 'default',
|
|
|
|
useFileSystemPublicRoutes: true,
|
|
|
|
generateBuildId: () => null,
|
|
|
|
generateEtags: true,
|
|
|
|
pageExtensions: ['tsx', 'ts', 'jsx', 'js'],
|
|
|
|
target: 'server',
|
|
|
|
poweredByHeader: true,
|
|
|
|
compress: true,
|
|
|
|
analyticsId: process.env.VERCEL_ANALYTICS_ID || '',
|
|
|
|
images: imageConfigDefault,
|
|
|
|
devIndicators: {
|
|
|
|
buildActivity: true,
|
2021-11-03 22:17:36 +01:00
|
|
|
buildActivityPosition: 'bottom-right',
|
2021-02-27 07:19:35 +01:00
|
|
|
},
|
|
|
|
onDemandEntries: {
|
2021-10-11 19:12:16 +02:00
|
|
|
maxInactiveAge: 15 * 1000,
|
2021-02-27 07:19:35 +01:00
|
|
|
pagesBufferLength: 2,
|
|
|
|
},
|
|
|
|
amp: {
|
|
|
|
canonicalBase: '',
|
|
|
|
},
|
|
|
|
basePath: '',
|
|
|
|
sassOptions: {},
|
|
|
|
trailingSlash: false,
|
|
|
|
i18n: null,
|
|
|
|
productionBrowserSourceMaps: false,
|
2021-04-05 19:47:03 +02:00
|
|
|
optimizeFonts: true,
|
2021-10-06 17:40:01 +02:00
|
|
|
webpack5: undefined,
|
2021-07-12 23:38:57 +02:00
|
|
|
excludeDefaultMomentLocales: true,
|
|
|
|
serverRuntimeConfig: {},
|
|
|
|
publicRuntimeConfig: {},
|
|
|
|
reactStrictMode: false,
|
2021-08-03 02:38:42 +02:00
|
|
|
httpAgentOptions: {
|
|
|
|
keepAlive: true,
|
|
|
|
},
|
2021-10-26 06:22:45 +02:00
|
|
|
outputFileTracing: true,
|
2021-10-20 21:06:43 +02:00
|
|
|
staticPageGenerationTimeout: 60,
|
2021-10-25 13:49:11 +02:00
|
|
|
swcMinify: false,
|
2021-02-27 07:19:35 +01:00
|
|
|
experimental: {
|
|
|
|
cpus: Math.max(
|
|
|
|
1,
|
|
|
|
(Number(process.env.CIRCLE_NODE_TOTAL) ||
|
|
|
|
(os.cpus() || { length: 1 }).length) - 1
|
|
|
|
),
|
2021-10-20 21:06:43 +02:00
|
|
|
sharedPool: true,
|
2021-02-27 07:19:35 +01:00
|
|
|
plugins: false,
|
|
|
|
profiling: false,
|
2021-07-22 04:42:33 +02:00
|
|
|
isrFlushToDisk: true,
|
2021-02-27 07:19:35 +01:00
|
|
|
workerThreads: false,
|
|
|
|
pageEnv: false,
|
|
|
|
optimizeImages: false,
|
|
|
|
optimizeCss: false,
|
|
|
|
scrollRestoration: false,
|
2021-03-19 17:43:46 +01:00
|
|
|
externalDir: false,
|
2021-04-24 22:19:07 +02:00
|
|
|
reactRoot: Number(process.env.NEXT_PRIVATE_REACT_ROOT) > 0,
|
2021-06-12 13:26:47 +02:00
|
|
|
disableOptimizedLoading: false,
|
2021-05-14 16:29:49 +02:00
|
|
|
gzipSize: true,
|
2021-12-02 05:16:15 +01:00
|
|
|
swcFileReading: true,
|
2021-06-09 16:51:56 +02:00
|
|
|
craCompat: false,
|
2021-10-13 23:11:52 +02:00
|
|
|
esmExternals: true,
|
2021-07-21 19:39:38 +02:00
|
|
|
// default to 50MB limit
|
|
|
|
isrMemoryCacheSize: 50 * 1024 * 1024,
|
2021-08-11 05:06:42 +02:00
|
|
|
concurrentFeatures: false,
|
2021-10-01 16:40:07 +02:00
|
|
|
serverComponents: false,
|
2021-10-13 17:23:50 +02:00
|
|
|
fullySpecified: false,
|
2021-11-04 10:23:28 +01:00
|
|
|
outputFileTracingRoot: process.env.NEXT_PRIVATE_OUTPUT_TRACE_ROOT || '',
|
2021-11-09 18:03:20 +01:00
|
|
|
outputStandalone: !!process.env.NEXT_PRIVATE_STANDALONE,
|
2021-02-27 07:19:35 +01:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
export function normalizeConfig(phase: string, config: any) {
|
|
|
|
if (typeof config === 'function') {
|
|
|
|
config = config(phase, { defaultConfig })
|
|
|
|
|
|
|
|
if (typeof config.then === 'function') {
|
|
|
|
throw new Error(
|
2021-03-29 10:25:00 +02:00
|
|
|
'> Promise returned in next config. https://nextjs.org/docs/messages/promise-in-next-config'
|
2021-02-27 07:19:35 +01:00
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return config
|
|
|
|
}
|