| import os from 'os' | |
| import type { webpack } from 'next/dist/compiled/webpack/webpack' | |
| import type { Header, Redirect, Rewrite } from '../lib/load-custom-routes' | |
| import { imageConfigDefault } from '../shared/lib/image-config' | |
| import type { | |
| ImageConfig, | |
| ImageConfigComplete, | |
| } from '../shared/lib/image-config' | |
| import type { SubresourceIntegrityAlgorithm } from '../build/webpack/plugins/subresource-integrity-plugin' | |
| import type { WEB_VITALS } from '../shared/lib/utils' | |
| import type { NextParsedUrlQuery } from './request-meta' | |
| import type { SizeLimit } from '../types' | |
| import type { SupportedTestRunners } from '../cli/next-test' | |
| import type { ExperimentalPPRConfig } from './lib/experimental/ppr' | |
| import { INFINITE_CACHE } from '../lib/constants' | |
| import { isStableBuild } from '../shared/lib/errors/canary-only-config-error' | |
| import type { FallbackRouteParam } from '../build/static-paths/types' | |
| export type NextConfigComplete = Required<Omit<NextConfig, 'configFile'>> & { | |
| images: Required<ImageConfigComplete> | |
| typescript: TypeScriptConfig | |
| configFile: string | undefined | |
| configFileName: string | |
| // override NextConfigComplete.experimental.htmlLimitedBots to string | |
| // because it's not defined in NextConfigComplete.experimental | |
| htmlLimitedBots: string | undefined | |
| experimental: ExperimentalConfig | |
| // The root directory of the distDir. Generally the same as `distDir` but when `isolatedDevBuild` | |
| // is true it is the parent directory of `distDir`. This is used to ensure that the bundler doesn't | |
| // traverse into the output directory. | |
| distDirRoot: string | |
| } | |
| export type I18NDomains = readonly DomainLocale[] | |
| export interface I18NConfig { | |
| defaultLocale: string | |
| domains?: I18NDomains | |
| localeDetection?: false | |
| locales: readonly string[] | |
| } | |
| export interface DomainLocale { | |
| defaultLocale: string | |
| domain: string | |
| http?: true | |
| locales?: readonly string[] | |
| } | |
| export interface TypeScriptConfig { | |
| /** Do not run TypeScript during production builds (`next build`). */ | |
| ignoreBuildErrors?: boolean | |
| /** Relative path to a custom tsconfig file */ | |
| tsconfigPath?: string | |
| } | |
| export interface EmotionConfig { | |
| sourceMap?: boolean | |
| autoLabel?: 'dev-only' | 'always' | 'never' | |
| labelFormat?: string | |
| importMap?: { | |
| [importName: string]: { | |
| [exportName: string]: { | |
| canonicalImport?: [string, string] | |
| styledBaseImport?: [string, string] | |
| } | |
| } | |
| } | |
| } | |
| export interface StyledComponentsConfig { | |
| /** | |
| * Enabled by default in development, disabled in production to reduce file size, | |
| * setting this will override the default for all environments. | |
| */ | |
| displayName?: boolean | |
| topLevelImportPaths?: string[] | |
| ssr?: boolean | |
| fileName?: boolean | |
| meaninglessFileNames?: string[] | |
| minify?: boolean | |
| transpileTemplateLiterals?: boolean | |
| namespace?: string | |
| pure?: boolean | |
| cssProp?: boolean | |
| } | |
| export type JSONValue = | |
| | string | |
| | number | |
| | boolean | |
| | JSONValue[] | |
| | { [k: string]: JSONValue } | |
| // At the moment, Turbopack options must be JSON-serializable, so restrict values. | |
| export type TurbopackLoaderOptions = Record<string, JSONValue> | |
| export type TurbopackLoaderItem = | |
| | string | |
| | { | |
| loader: string | |
| options?: TurbopackLoaderOptions | |
| } | |
| export type TurbopackLoaderBuiltinCondition = | |
| | 'browser' | |
| | 'foreign' | |
| | 'development' | |
| | 'production' | |
| | 'node' | |
| | 'edge-light' | |
| export type TurbopackRuleCondition = | |
| | { all: TurbopackRuleCondition[] } | |
| | { any: TurbopackRuleCondition[] } | |
| | { not: TurbopackRuleCondition } | |
| | TurbopackLoaderBuiltinCondition | |
| | { | |
| path?: string | RegExp | |
| content?: RegExp | |
| } | |
| export type TurbopackRuleConfigItem = { | |
| loaders: TurbopackLoaderItem[] | |
| as?: string | |
| condition?: TurbopackRuleCondition | |
| } | |
| /** | |
| * This can be an object representing a single configuration, or a list of | |
| * loaders and/or rule configuration objects. | |
| * | |
| * - A list of loader path strings or objects is the "shorthand" syntax. | |
| * - A list of rule configuration objects can be useful when each configuration | |
| * object has different `condition` fields, but still match the same top-level | |
| * path glob. | |
| */ | |
| export type TurbopackRuleConfigCollection = | |
| | TurbopackRuleConfigItem | |
| | (TurbopackLoaderItem | TurbopackRuleConfigItem)[] | |
| export interface TurbopackOptions { | |
| /** | |
| * (`next --turbopack` only) A mapping of aliased imports to modules to load in their place. | |
| * | |
| * @see [Resolve Alias](https://nextjs.org/docs/app/api-reference/config/next-config-js/turbopack#resolving-aliases) | |
| */ | |
| resolveAlias?: Record< | |
| string, | |
| string | string[] | Record<string, string | string[]> | |
| > | |
| /** | |
| * (`next --turbopack` only) A list of extensions to resolve when importing files. | |
| * | |
| * @see [Resolve Extensions](https://nextjs.org/docs/app/api-reference/config/next-config-js/turbopack#resolving-custom-extensions) | |
| */ | |
| resolveExtensions?: string[] | |
| /** | |
| * (`next --turbopack` only) A list of webpack loaders to apply when running with Turbopack. | |
| * | |
| * @see [Turbopack Loaders](https://nextjs.org/docs/app/api-reference/config/next-config-js/turbopack#configuring-webpack-loaders) | |
| */ | |
| rules?: Record<string, TurbopackRuleConfigCollection> | |
| /** | |
| * This is the repo root usually and only files above this | |
| * directory can be resolved by turbopack. | |
| */ | |
| root?: string | |
| /** | |
| * Enables generation of debug IDs in JavaScript bundles and source maps. | |
| * These debug IDs help with debugging and error tracking by providing stable identifiers. | |
| * | |
| * @see https://github.com/tc39/ecma426/blob/main/proposals/debug-id.md TC39 Debug ID Proposal | |
| */ | |
| debugIds?: boolean | |
| } | |
| export interface WebpackConfigContext { | |
| /** Next.js root directory */ | |
| dir: string | |
| /** Indicates if the compilation will be done in development */ | |
| dev: boolean | |
| /** It's `true` for server-side compilation, and `false` for client-side compilation */ | |
| isServer: boolean | |
| /** The build id, used as a unique identifier between builds */ | |
| buildId: string | |
| /** The next.config.js merged with default values */ | |
| config: NextConfigComplete | |
| /** Default loaders used internally by Next.js */ | |
| defaultLoaders: { | |
| /** Default babel-loader configuration */ | |
| babel: any | |
| } | |
| /** Number of total Next.js pages */ | |
| totalPages: number | |
| /** The webpack configuration */ | |
| webpack: any | |
| /** The current server runtime */ | |
| nextRuntime?: 'nodejs' | 'edge' | |
| } | |
| export interface NextJsWebpackConfig { | |
| ( | |
| /** Existing Webpack config */ | |
| config: any, | |
| context: WebpackConfigContext | |
| ): any | |
| } | |
| /** | |
| * Set of options for React Compiler that Next.js currently supports. | |
| * | |
| * These options may be changed in breaking ways at any time without notice | |
| * while support for React Compiler is experimental. | |
| * | |
| * @see https://react.dev/reference/react-compiler/configuration | |
| */ | |
| export interface ReactCompilerOptions { | |
| /** | |
| * Controls the strategy for determining which functions the React Compiler | |
| * will optimize. | |
| * | |
| * The default is `'infer'`, which uses intelligent heuristics to identify | |
| * React components and hooks. | |
| * | |
| * When using `infer`, Next.js applies its own heuristics before calling | |
| * `react-compiler`. This improves compilation performance by avoiding extra | |
| * invocations of Babel and reducing redundant parsing of code. | |
| * | |
| * @see https://react.dev/reference/react-compiler/compilationMode | |
| */ | |
| compilationMode?: 'infer' | 'annotation' | 'all' | |
| /** | |
| * Controls how the React Compiler handles errors during compilation. | |
| * | |
| * The default is `'none'`, which skips components which cannot be compiled. | |
| * | |
| * @see https://react.dev/reference/react-compiler/panicThreshold | |
| */ | |
| panicThreshold?: 'none' | 'critical_errors' | 'all_errors' | |
| } | |
| export interface IncomingRequestLoggingConfig { | |
| /** | |
| * A regular expression array to match incoming requests that should not be logged. | |
| * You can specify multiple patterns to match incoming requests that should not be logged. | |
| */ | |
| ignore?: RegExp[] | |
| } | |
| export interface LoggingConfig { | |
| fetches?: { | |
| fullUrl?: boolean | |
| /** | |
| * If true, fetch requests that are restored from the HMR cache are logged | |
| * during an HMR refresh request, i.e. when editing a server component. | |
| */ | |
| hmrRefreshes?: boolean | |
| } | |
| /** | |
| * If set to false, incoming request logging is disabled. | |
| * You can specify a pattern to match incoming requests that should not be logged. | |
| */ | |
| incomingRequests?: boolean | IncomingRequestLoggingConfig | |
| } | |
| export interface ExperimentalConfig { | |
| adapterPath?: string | |
| useSkewCookie?: boolean | |
| /** @deprecated use top-level `cacheHandlers` instead */ | |
| cacheHandlers?: NextConfig['cacheHandlers'] | |
| multiZoneDraftMode?: boolean | |
| appNavFailHandling?: boolean | |
| prerenderEarlyExit?: boolean | |
| linkNoTouchStart?: boolean | |
| caseSensitiveRoutes?: boolean | |
| /** | |
| * Custom header name to use for CDN cache control instead of the default | |
| * 'CDN-Cache-Control'. This can be used to target specific CDN providers | |
| * that do not support `CDN-Cache-Control` and have their own custom header. | |
| */ | |
| cdnCacheControlHeader?: string | |
| /** | |
| * The origins that are allowed to write the rewritten headers when | |
| * performing a non-relative rewrite. When undefined, no non-relative | |
| * rewrites will get the rewrite headers. | |
| */ | |
| clientParamParsingOrigins?: string[] | |
| dynamicOnHover?: boolean | |
| preloadEntriesOnStart?: boolean | |
| clientRouterFilter?: boolean | |
| clientRouterFilterRedirects?: boolean | |
| /** | |
| * This config can be used to override the cache behavior for the client router. | |
| * These values indicate the time, in seconds, that the cache should be considered | |
| * reusable. When the `prefetch` Link prop is left unspecified, this will use the `dynamic` value. | |
| * When the `prefetch` Link prop is set to `true`, this will use the `static` value. | |
| */ | |
| staleTimes?: { | |
| dynamic?: number | |
| /** Must be greater than or equal to 30 seconds, to ensure prefetching is not completely wasteful */ | |
| static?: number | |
| } | |
| /** | |
| * @deprecated use top-level `cacheLife` instead | |
| */ | |
| cacheLife?: NextConfig['cacheLife'] | |
| // decimal for percent for possible false positives | |
| // e.g. 0.01 for 10% potential false matches lower | |
| // percent increases size of the filter | |
| clientRouterFilterAllowedRate?: number | |
| /** | |
| * @deprecated Use `externalProxyRewritesResolve` instead. | |
| */ | |
| externalMiddlewareRewritesResolve?: boolean | |
| externalProxyRewritesResolve?: boolean | |
| extensionAlias?: Record<string, any> | |
| allowedRevalidateHeaderKeys?: string[] | |
| fetchCacheKeyPrefix?: string | |
| imgOptConcurrency?: number | null | |
| imgOptTimeoutInSeconds?: number | |
| imgOptMaxInputPixels?: number | |
| imgOptSequentialRead?: boolean | null | |
| imgOptSkipMetadata?: boolean | null | |
| optimisticClientCache?: boolean | |
| /** | |
| * @deprecated use config.expireTime instead | |
| */ | |
| expireTime?: number | |
| /** | |
| * @deprecated Use `proxyPrefetch` instead. | |
| */ | |
| middlewarePrefetch?: 'strict' | 'flexible' | |
| proxyPrefetch?: 'strict' | 'flexible' | |
| manualClientBasePath?: boolean | |
| /** | |
| * CSS Chunking strategy. Defaults to `true` ("loose" mode), which guesses dependencies | |
| * between CSS files to keep ordering of them. | |
| * An alternative is 'strict', which will try to keep correct ordering as | |
| * much as possible, even when this leads to many requests. | |
| */ | |
| cssChunking?: boolean | 'strict' | |
| disablePostcssPresetEnv?: boolean | |
| cpus?: number | |
| memoryBasedWorkersCount?: boolean | |
| proxyTimeout?: number | |
| isrFlushToDisk?: boolean | |
| workerThreads?: boolean | |
| // optimizeCss can be boolean or critters' option object | |
| // Use Record<string, unknown> as critters doesn't export its Option type | |
| // https://github.com/GoogleChromeLabs/critters/blob/a590c05f9197b656d2aeaae9369df2483c26b072/packages/critters/src/index.d.ts | |
| optimizeCss?: boolean | Record<string, unknown> | |
| nextScriptWorkers?: boolean | |
| scrollRestoration?: boolean | |
| externalDir?: boolean | |
| disableOptimizedLoading?: boolean | |
| /** @deprecated A no-op as of Next 16, size metrics were removed from the build output. */ | |
| gzipSize?: boolean | |
| craCompat?: boolean | |
| esmExternals?: boolean | 'loose' | |
| fullySpecified?: boolean | |
| urlImports?: NonNullable<webpack.Configuration['experiments']>['buildHttp'] | |
| swcTraceProfiling?: boolean | |
| forceSwcTransforms?: boolean | |
| swcPlugins?: Array<[string, Record<string, unknown>]> | |
| largePageDataBytes?: number | |
| /** | |
| * If set to `false`, webpack won't fall back to polyfill Node.js modules in the browser | |
| * Full list of old polyfills is accessible here: | |
| * [webpack/webpack#ModuleNotoundError.js#L13-L42](https://github.com/webpack/webpack/blob/2a0536cf510768111a3a6dceeb14cb79b9f59273/lib/ModuleNotFoundError.js#L13-L42) | |
| */ | |
| fallbackNodePolyfills?: false | |
| sri?: { | |
| algorithm?: SubresourceIntegrityAlgorithm | |
| } | |
| webVitalsAttribution?: Array<(typeof WEB_VITALS)[number]> | |
| /** | |
| * Automatically apply the "modularizeImports" optimization to imports of the specified packages. | |
| */ | |
| optimizePackageImports?: string[] | |
| /** | |
| * Optimize React APIs for server builds. | |
| */ | |
| optimizeServerReact?: boolean | |
| /** | |
| * Type-checks props and return values of pages. | |
| * Requires literal values for segment config (e.g. `export const dynamic = 'force-static' as const`). | |
| */ | |
| strictRouteTypes?: boolean | |
| /** | |
| * Displays an indicator when a React Transition has no other indicator rendered. | |
| * This includes displaying an indicator on client-side navigations. | |
| */ | |
| transitionIndicator?: boolean | |
| /** | |
| * A target memory limit for turbo, in bytes. | |
| */ | |
| turbopackMemoryLimit?: number | |
| /** | |
| * Enable minification. Defaults to true in build mode and false in dev mode. | |
| */ | |
| turbopackMinify?: boolean | |
| /** | |
| * Enable support for `with {type: "module"}` for ESM imports. | |
| */ | |
| turbopackImportTypeBytes?: boolean | |
| /** | |
| * Enable scope hoisting. Defaults to true in build mode. Always disabled in development mode. | |
| */ | |
| turbopackScopeHoisting?: boolean | |
| /** | |
| * Enable nested async chunking for client side assets. Defaults to true in build mode and false in dev mode. | |
| * This optimization computes all possible paths through dynamic imports in the applications to figure out the modules needed at dynamic imports for every path. | |
| */ | |
| turbopackClientSideNestedAsyncChunking?: boolean | |
| /** | |
| * Enable nested async chunking for server side assets. Defaults to false in dev and build mode. | |
| * This optimization computes all possible paths through dynamic imports in the applications to figure out the modules needed at dynamic imports for every path. | |
| */ | |
| turbopackServerSideNestedAsyncChunking?: boolean | |
| /** | |
| * Enable filesystem cache for the turbopack dev server. | |
| * | |
| * Defaults to `true`. | |
| */ | |
| turbopackFileSystemCacheForDev?: boolean | |
| /** | |
| * Enable filesystem cache for the turbopack build. | |
| * | |
| * Defaults to `false`. | |
| */ | |
| turbopackFileSystemCacheForBuild?: boolean | |
| /** | |
| * Enable source maps. Defaults to true. | |
| */ | |
| turbopackSourceMaps?: boolean | |
| /** | |
| * Enable extraction of source maps from input files. Defaults to true. | |
| */ | |
| turbopackInputSourceMaps?: boolean | |
| /** | |
| * Enable tree shaking for the turbopack dev server and build. | |
| */ | |
| turbopackTreeShaking?: boolean | |
| /** | |
| * Enable removing unused imports for turbopack dev server and build. | |
| */ | |
| turbopackRemoveUnusedImports?: boolean | |
| /** | |
| * Enable removing unused exports for turbopack dev server and build. | |
| */ | |
| turbopackRemoveUnusedExports?: boolean | |
| /** | |
| * Enable local analysis to infer side effect free modules. When enabled, Turbopack will | |
| * analyze module code to determine if it has side effects. This can improve tree shaking | |
| * and bundle size at the cost of some additional analysis. | |
| * | |
| * Defaults to `true` in canary builds only | |
| */ | |
| turbopackInferModuleSideEffects?: boolean | |
| /** | |
| * Use the system-provided CA roots instead of bundled CA roots for external HTTPS requests | |
| * made by Turbopack. Currently this is only used for fetching data from Google Fonts. | |
| * | |
| * This may be useful in cases where you or an employer are MITMing traffic. | |
| * | |
| * This option is experimental because: | |
| * - This may cause small performance problems, as it uses [`rustls-native-certs`]( | |
| * https://github.com/rustls/rustls-native-certs). | |
| * - In the future, this may become the default, and this option may be eliminated, once | |
| * <https://github.com/seanmonstar/reqwest/issues/2159> is resolved. | |
| * | |
| * Users who need to configure this behavior system-wide can override the project | |
| * configuration using the `NEXT_TURBOPACK_EXPERIMENTAL_USE_SYSTEM_TLS_CERTS=1` environment | |
| * variable. | |
| * | |
| * This option is ignored on Windows on ARM, where the native TLS implementation is always | |
| * used. | |
| * | |
| * If you need to set a proxy, Turbopack [respects the common `HTTP_PROXY` and `HTTPS_PROXY` | |
| * environment variable convention](https://docs.rs/reqwest/latest/reqwest/#proxies). HTTP | |
| * proxies are supported, SOCKS proxies are not currently supported. | |
| */ | |
| turbopackUseSystemTlsCerts?: boolean | |
| /** | |
| * Set this to `false` to disable the automatic configuration of the babel loader when a Babel | |
| * configuration file is present. This option is enabled by default. | |
| * | |
| * If this is set to `false`, but `reactCompiler` is `true`, the built-in Babel will | |
| * still be configured, but any Babel configuration files on disk will be ignored. If you wish to | |
| * use React Compiler with a different manually-configured `babel-loader`, you should disable both | |
| * this and `reactCompiler`. | |
| */ | |
| turbopackUseBuiltinBabel?: boolean | |
| /** | |
| * Set this to `false` to disable the automatic configuration of the sass loader. The sass loader | |
| * configuration is enabled by default. | |
| */ | |
| turbopackUseBuiltinSass?: boolean | |
| /** | |
| * The module ID strategy to use for Turbopack. | |
| * If not set, the default is `'named'` for development and `'deterministic'` | |
| * for production. | |
| */ | |
| turbopackModuleIds?: 'named' | 'deterministic' | |
| /** | |
| * For use with `@next/mdx`. Compile MDX files using the new Rust compiler. | |
| * @see https://nextjs.org/docs/app/api-reference/next-config-js/mdxRs | |
| */ | |
| mdxRs?: | |
| | boolean | |
| | { | |
| development?: boolean | |
| jsx?: boolean | |
| jsxRuntime?: string | |
| jsxImportSource?: string | |
| providerImportSource?: string | |
| mdxType?: 'gfm' | 'commonmark' | |
| } | |
| /** | |
| * Enable type checking for Link and Router.push, etc. | |
| * @deprecated Use `typedRoutes` instead — this feature is now stable. | |
| * @see https://nextjs.org/docs/app/api-reference/config/typescript#statically-typed-links | |
| */ | |
| typedRoutes?: boolean | |
| /** | |
| * Enable type-checking and autocompletion for environment variables. | |
| * | |
| * @default false | |
| */ | |
| typedEnv?: boolean | |
| /** | |
| * Runs the compilations for server and edge in parallel instead of in serial. | |
| * This will make builds faster if there is enough server and edge functions | |
| * in the application at the cost of more memory. | |
| * | |
| * NOTE: This option is only valid when the build process can use workers. See | |
| * the documentation for `webpackBuildWorker` for more details. | |
| */ | |
| parallelServerCompiles?: boolean | |
| /** | |
| * Runs the logic to collect build traces for the server routes in parallel | |
| * with other work during the compilation. This will increase the speed of | |
| * the build at the cost of more memory. This option may incur some additional | |
| * work compared to if the option was disabled since the work is started | |
| * before data from the client compilation is available to potentially reduce | |
| * the amount of code that needs to be traced. Despite that, this may still | |
| * result in faster builds for some applications. | |
| * | |
| * Valid values are: | |
| * - `true`: Collect the server build traces in parallel. | |
| * - `false`: Do not collect the server build traces in parallel. | |
| * - `undefined`: Collect server build traces in parallel only in the `experimental-compile` mode. | |
| * | |
| * NOTE: This option is only valid when the build process can use workers. See | |
| * the documentation for `webpackBuildWorker` for more details. | |
| */ | |
| parallelServerBuildTraces?: boolean | |
| /** | |
| * Run the Webpack build in a separate process to optimize memory usage during build. | |
| * Valid values are: | |
| * - `false`: Disable the Webpack build worker | |
| * - `true`: Enable the Webpack build worker | |
| * - `undefined`: Enable the Webpack build worker only if the webpack config is not customized | |
| */ | |
| webpackBuildWorker?: boolean | |
| /** | |
| * Enables optimizations to reduce memory usage in Webpack. This reduces the max size of the heap | |
| * but may increase compile times slightly. | |
| * Valid values are: | |
| * - `false`: Disable Webpack memory optimizations (default). | |
| * - `true`: Enables Webpack memory optimizations. | |
| */ | |
| webpackMemoryOptimizations?: boolean | |
| /** | |
| * The array of the meta tags to the client injected by tracing propagation data. | |
| */ | |
| clientTraceMetadata?: string[] | |
| /** | |
| * @deprecated This configuration option has been merged into `cacheComponents`. | |
| * The Partial Prerendering feature is still available via `cacheComponents`. | |
| */ | |
| ppr?: ExperimentalPPRConfig | |
| /** | |
| * Enables experimental taint APIs in React. | |
| * Using this feature will enable the `react@experimental` for the `app` directory. | |
| */ | |
| taint?: boolean | |
| /** | |
| * Uninstalls all "unhandledRejection" and "uncaughtException" listeners from | |
| * the global process so that we can override the behavior, which in some | |
| * runtimes is to exit the process. | |
| * | |
| * This is experimental until we've considered the impact in various | |
| * deployment environments. | |
| */ | |
| removeUncaughtErrorAndRejectionListeners?: boolean | |
| /** | |
| * During an RSC request, validates that the request headers match the | |
| * cache-busting search parameter sent by the client. | |
| */ | |
| validateRSCRequestHeaders?: boolean | |
| serverActions?: { | |
| /** | |
| * Allows adjusting body parser size limit for server actions. | |
| */ | |
| bodySizeLimit?: SizeLimit | |
| /** | |
| * Allowed origins that can bypass Server Action's CSRF check. This is helpful | |
| * when you have reverse proxy in front of your app. | |
| * @example | |
| * ["my-app.com", "*.my-app.com"] | |
| */ | |
| allowedOrigins?: string[] | |
| } | |
| /** | |
| * Allows adjusting the maximum size of the postponed state body for PPR | |
| * resume requests. This includes the Resume Data Cache (RDC) which may grow | |
| * large for some applications. | |
| * @default '100 MB' | |
| */ | |
| maxPostponedStateSize?: SizeLimit | |
| /** | |
| * enables the minification of server code. | |
| */ | |
| serverMinification?: boolean | |
| /** | |
| * Enables source maps generation for the server production bundle. | |
| */ | |
| serverSourceMaps?: boolean | |
| /** | |
| * @internal Used by the Next.js internals only. | |
| */ | |
| trustHostHeader?: boolean | |
| /** | |
| * @internal Used by the Next.js internals only. | |
| */ | |
| isExperimentalCompile?: boolean | |
| useWasmBinary?: boolean | |
| /** | |
| * Use lightningcss instead of postcss-loader | |
| */ | |
| useLightningcss?: boolean | |
| /** | |
| * Enables view transitions by using the {@link https://react.dev/reference/react/ViewTransition ViewTransition} Component. | |
| */ | |
| viewTransition?: boolean | |
| /** | |
| * Enables `fetch` requests to be proxied to the experimental test proxy server | |
| */ | |
| testProxy?: boolean | |
| /** | |
| * Set a default test runner to be used by `next experimental-test`. | |
| */ | |
| defaultTestRunner?: SupportedTestRunners | |
| /** | |
| * Allow NODE_ENV=development even for `next build`. | |
| */ | |
| allowDevelopmentBuild?: true | |
| /** | |
| * @deprecated use `config.bundlePagesRouterDependencies` instead | |
| * | |
| */ | |
| bundlePagesExternals?: boolean | |
| /** | |
| * @deprecated use `config.serverExternalPackages` instead | |
| * | |
| */ | |
| serverComponentsExternalPackages?: string[] | |
| /** | |
| * When enabled, in dev mode, Next.js will send React's debug info through the | |
| * WebSocket connection, instead of including it in the main RSC payload. | |
| */ | |
| reactDebugChannel?: boolean | |
| /** | |
| * @deprecated use top-level `cacheComponents` instead | |
| */ | |
| cacheComponents?: boolean | |
| /** | |
| * The number of times to retry static generation (per page) before giving up. | |
| */ | |
| staticGenerationRetryCount?: number | |
| /** | |
| * The amount of pages to export per worker during static generation. | |
| */ | |
| staticGenerationMaxConcurrency?: number | |
| /** | |
| * The minimum number of pages to be chunked into each export worker. | |
| */ | |
| staticGenerationMinPagesPerWorker?: number | |
| /** | |
| * Allows previously fetched data to be re-used when editing server components. | |
| */ | |
| serverComponentsHmrCache?: boolean | |
| /** | |
| * Render <style> tags inline in the HTML for imported CSS assets. | |
| * Supports app-router in production mode only. | |
| */ | |
| inlineCss?: boolean | |
| // TODO: Remove this config when the API is stable. | |
| /** | |
| * This config allows you to enable the experimental navigation API `forbidden` and `unauthorized`. | |
| */ | |
| authInterrupts?: boolean | |
| /** | |
| * Enables the use of the `"use cache"` directive. | |
| */ | |
| useCache?: boolean | |
| /** | |
| * Enables detection and reporting of slow modules during development builds. | |
| * Enabling this may impact build performance to ensure accurate measurements. | |
| */ | |
| slowModuleDetection?: { | |
| /** | |
| * The time threshold in milliseconds for identifying slow modules. | |
| * Modules taking longer than this build time threshold will be reported. | |
| */ | |
| buildTimeThresholdMs: number | |
| } | |
| /** | |
| * Enables using the global-not-found.js file in the app directory | |
| * | |
| */ | |
| globalNotFound?: boolean | |
| /** | |
| * Enable debug information to be forwarded from browser to dev server stdout/stderr | |
| */ | |
| browserDebugInfoInTerminal?: | |
| | boolean | |
| | { | |
| /** | |
| * Option to limit stringification at a specific nesting depth when logging circular objects. | |
| * @default 5 | |
| */ | |
| depthLimit?: number | |
| /** | |
| * Maximum number of properties/elements to stringify when logging objects/arrays with circular references. | |
| * @default 100 | |
| */ | |
| edgeLimit?: number | |
| /** | |
| * Whether to include source location information in debug output when available | |
| */ | |
| showSourceLocation?: boolean | |
| } | |
| /** | |
| * Enable accessing root params via the `next/root-params` module. | |
| */ | |
| rootParams?: boolean | |
| /** | |
| * Use an isolated directory for development builds to prevent conflicts | |
| * with production builds. Development builds will use `{distDir}/dev` | |
| * instead of `{distDir}`. | |
| */ | |
| isolatedDevBuild?: boolean | |
| /** | |
| * Body size limit for request bodies with middleware configured. | |
| * Defaults to 10MB. Can be specified as a number (bytes) or string (e.g. '5mb'). | |
| * | |
| * @deprecated Use `proxyClientMaxBodySize` instead. | |
| */ | |
| middlewareClientMaxBodySize?: SizeLimit | |
| /** | |
| * Body size limit for request bodies with proxy configured. | |
| * Defaults to 10MB. Can be specified as a number (bytes) or string (e.g. '5mb'). | |
| */ | |
| proxyClientMaxBodySize?: SizeLimit | |
| /** | |
| * Enable the Model Context Protocol (MCP) server for AI-assisted development. | |
| * When enabled, Next.js will expose an MCP server at `/_next/mcp` that provides | |
| * code intelligence and project context to AI assistants. | |
| * | |
| * @default true | |
| */ | |
| mcpServer?: boolean | |
| /** | |
| * Acquires a lockfile at `<distDir>/lock` when starting `next dev` or `next | |
| * build`. Failing to acquire the lock causes the process to exit with an | |
| * error message. | |
| * | |
| * This is because if multiple processes write to the same `distDir` at the | |
| * same time, it can mangle the state of the directory. Disabling this option | |
| * is not recommended. | |
| * | |
| * @default true | |
| */ | |
| lockDistDir?: boolean | |
| /** | |
| * Hide logs that occur after a render has already aborted. | |
| * This can help reduce noise in the console when dealing with aborted renders. | |
| * | |
| * @default false | |
| */ | |
| hideLogsAfterAbort?: boolean | |
| /** | |
| * Whether `process.env.NEXT_DEPLOYMENT_ID` is available at runtime in the server (and `next | |
| * build` doesn't need to embed the deployment ID value into the build output). | |
| * | |
| * @default false | |
| */ | |
| runtimeServerDeploymentId?: boolean | |
| /** | |
| * Use 'no-cache' instead of 'no-store' in the Cache-Control header for development. | |
| * This allows conditional requests to the server, which can help with development | |
| * workflows that benefit from caching validation. | |
| * | |
| * When enabled, the Cache-Control header changes from 'no-store, must-revalidate' | |
| * to 'no-cache, must-revalidate'. | |
| * | |
| * @default false | |
| */ | |
| devCacheControlNoCache?: boolean | |
| } | |
| export type ExportPathMap = { | |
| [path: string]: { | |
| page: string | |
| query?: NextParsedUrlQuery | |
| /** | |
| * When true, this indicates that this is a pages router page that should | |
| * be rendered as a fallback. | |
| * | |
| * @internal | |
| */ | |
| _pagesFallback?: boolean | |
| /** | |
| * The locale that this page should be rendered in. | |
| * | |
| * @internal | |
| */ | |
| _locale?: string | |
| /** | |
| * The path that was used to generate the page. | |
| * | |
| * @internal | |
| */ | |
| _ssgPath?: string | |
| /** | |
| * The parameters that are currently unknown. | |
| * | |
| * @internal | |
| */ | |
| _fallbackRouteParams?: readonly FallbackRouteParam[] | |
| /** | |
| * @internal | |
| */ | |
| _isAppDir?: boolean | |
| /** | |
| * @internal | |
| */ | |
| _isDynamicError?: boolean | |
| /** | |
| * @internal | |
| */ | |
| _isRoutePPREnabled?: boolean | |
| /** | |
| * When true, the page is prerendered as a fallback shell, while allowing | |
| * any dynamic accesses to result in an empty shell. This is the case when | |
| * the app has `experimental.ppr` and `cacheComponents` enabled, and | |
| * there are also routes prerendered with a more complete set of params. | |
| * Prerendering those routes would catch any invalid dynamic accesses. | |
| * | |
| * @internal | |
| */ | |
| _allowEmptyStaticShell?: boolean | |
| } | |
| } | |
| /** | |
| * Next.js can be configured through a `next.config.js` file in the root of your project directory. | |
| * | |
| * This can change the behavior, enable experimental features, and configure other advanced options. | |
| * | |
| * Read more: [Next.js Docs: `next.config.js`](https://nextjs.org/docs/app/api-reference/config/next-config-js) | |
| */ | |
| export interface NextConfig { | |
| allowedDevOrigins?: string[] | |
| exportPathMap?: ( | |
| defaultMap: ExportPathMap, | |
| ctx: { | |
| dev: boolean | |
| dir: string | |
| outDir: string | null | |
| distDir: string | |
| buildId: string | |
| } | |
| ) => Promise<ExportPathMap> | ExportPathMap | |
| /** | |
| * Internationalization configuration | |
| * | |
| * @see [Internationalization docs](https://nextjs.org/docs/advanced-features/i18n-routing) | |
| */ | |
| i18n?: I18NConfig | null | |
| /** | |
| * @see [Next.js TypeScript documentation](https://nextjs.org/docs/app/api-reference/config/typescript) | |
| */ | |
| typescript?: TypeScriptConfig | |
| /** | |
| * Enable type checking for Link and Router.push, etc. | |
| * This feature requires TypeScript in your project. | |
| * | |
| * @see [Typed Links documentation](https://nextjs.org/docs/app/api-reference/config/typescript#statically-typed-links) | |
| */ | |
| typedRoutes?: boolean | |
| /** | |
| * Headers allow you to set custom HTTP headers for an incoming request path. | |
| * | |
| * @see [Headers configuration documentation](https://nextjs.org/docs/app/api-reference/config/next-config-js/headers) | |
| */ | |
| headers?: () => Promise<Header[]> | Header[] | |
| /** | |
| * Rewrites allow you to map an incoming request path to a different destination path. | |
| * | |
| * @see [Rewrites configuration documentation](https://nextjs.org/docs/app/api-reference/config/next-config-js/rewrites) | |
| */ | |
| rewrites?: () => | |
| | Promise< | |
| | Rewrite[] | |
| | { | |
| beforeFiles?: Rewrite[] | |
| afterFiles?: Rewrite[] | |
| fallback?: Rewrite[] | |
| } | |
| > | |
| | Rewrite[] | |
| | { | |
| beforeFiles?: Rewrite[] | |
| afterFiles?: Rewrite[] | |
| fallback?: Rewrite[] | |
| } | |
| /** | |
| * Redirects allow you to redirect an incoming request path to a different destination path. | |
| * | |
| * @see [Redirects configuration documentation](https://nextjs.org/docs/app/api-reference/config/next-config-js/redirects) | |
| */ | |
| redirects?: () => Promise<Redirect[]> | Redirect[] | |
| /** | |
| * @see [Moment.js locales excluded by default](https://nextjs.org/docs/upgrading#momentjs-locales-excluded-by-default) | |
| */ | |
| excludeDefaultMomentLocales?: boolean | |
| /** | |
| * Before continuing to add custom webpack configuration to your application make sure Next.js doesn't already support your use-case | |
| * | |
| * @see [Custom Webpack Config documentation](https://nextjs.org/docs/app/api-reference/config/next-config-js/webpack) | |
| */ | |
| webpack?: NextJsWebpackConfig | null | |
| /** | |
| * By default Next.js will redirect urls with trailing slashes to their counterpart without a trailing slash. | |
| * | |
| * @default false | |
| * @see [Trailing Slash Configuration](https://nextjs.org/docs/app/api-reference/config/next-config-js/trailingSlash) | |
| */ | |
| trailingSlash?: boolean | |
| /** | |
| * Next.js comes with built-in support for environment variables | |
| * | |
| * @see [Environment Variables documentation](https://nextjs.org/docs/app/api-reference/config/next-config-js/env) | |
| */ | |
| env?: Record<string, string | undefined> | |
| /** | |
| * Destination directory (defaults to `.next`) | |
| */ | |
| distDir?: string | |
| /** | |
| * The build output directory (defaults to `.next`) is now cleared by default except for the Next.js caches. | |
| */ | |
| cleanDistDir?: boolean | |
| /** | |
| * To set up a CDN, you can set up an asset prefix and configure your CDN's origin to resolve to the domain that Next.js is hosted on. | |
| * | |
| * @see [CDN Support with Asset Prefix](https://nextjs.org/docs/app/api-reference/config/next-config-js/assetPrefix) | |
| */ | |
| assetPrefix?: string | |
| /** | |
| * The default cache handler for the Pages and App Router uses the filesystem cache. This requires no configuration, however, you can customize the cache handler if you prefer. | |
| * | |
| * @see [Configuring Caching](https://nextjs.org/docs/app/building-your-application/deploying#configuring-caching) and the [API Reference](https://nextjs.org/docs/app/api-reference/next-config-js/incrementalCacheHandlerPath). | |
| */ | |
| cacheHandler?: string | undefined | |
| cacheHandlers?: { | |
| default?: string | |
| remote?: string | |
| static?: string | |
| [handlerName: string]: string | undefined | |
| } | |
| /** | |
| * Configure the in-memory cache size in bytes. Defaults to 50 MB. | |
| * If `cacheMaxMemorySize: 0`, this disables in-memory caching entirely. | |
| * | |
| * @see [Configuring Caching](https://nextjs.org/docs/app/building-your-application/deploying#configuring-caching). | |
| */ | |
| cacheMaxMemorySize?: number | |
| /** | |
| * By default, `Next` will serve each file in the `pages` folder under a pathname matching the filename. | |
| * To disable this behavior and prevent routing based set this to `true`. | |
| * | |
| * @default true | |
| * @see [Disabling file-system routing](https://nextjs.org/docs/advanced-features/custom-server#disabling-file-system-routing) | |
| */ | |
| useFileSystemPublicRoutes?: boolean | |
| /** | |
| * @see [Configuring the build ID](https://nextjs.org/docs/app/api-reference/config/next-config-js/generateBuildId) | |
| */ | |
| generateBuildId?: () => string | null | Promise<string | null> | |
| /** @see [Disabling ETag Configuration](https://nextjs.org/docs/app/api-reference/config/next-config-js/generateEtags) */ | |
| generateEtags?: boolean | |
| /** @see [Including non-page files in the pages directory](https://nextjs.org/docs/app/api-reference/config/next-config-js/pageExtensions) */ | |
| pageExtensions?: string[] | |
| /** @see [Compression documentation](https://nextjs.org/docs/app/api-reference/config/next-config-js/compress) */ | |
| compress?: boolean | |
| /** @see [Disabling x-powered-by](https://nextjs.org/docs/app/api-reference/config/next-config-js/poweredByHeader) */ | |
| poweredByHeader?: boolean | |
| /** @see [Using the Image Component](https://nextjs.org/docs/app/api-reference/next-config-js/images) */ | |
| images?: ImageConfig | |
| /** Configure indicators in development environment */ | |
| devIndicators?: | |
| | false | |
| | { | |
| /** | |
| * Position of the development tools indicator in the browser window. | |
| * @default "bottom-left" | |
| * */ | |
| position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | |
| } | |
| /** | |
| * Next.js exposes some options that give you some control over how the server will dispose or keep in memory built pages in development. | |
| * | |
| * @see [Configuring `onDemandEntries`](https://nextjs.org/docs/app/api-reference/config/next-config-js/onDemandEntries) | |
| */ | |
| onDemandEntries?: { | |
| /** period (in ms) where the server will keep pages in the buffer */ | |
| maxInactiveAge?: number | |
| /** number of pages that should be kept simultaneously without being disposed */ | |
| pagesBufferLength?: number | |
| } | |
| /** | |
| * A unique identifier for a deployment that will be included in each request's query string or header. | |
| */ | |
| deploymentId?: string | |
| /** | |
| * Deploy a Next.js application under a sub-path of a domain | |
| * | |
| * @see [Base path configuration](https://nextjs.org/docs/app/api-reference/config/next-config-js/basePath) | |
| */ | |
| basePath?: string | |
| /** @see [Customizing sass options](https://nextjs.org/docs/app/api-reference/next-config-js/sassOptions) */ | |
| sassOptions?: { | |
| implementation?: string | |
| [key: string]: any | |
| } | |
| /** | |
| * Enable browser source map generation during the production build | |
| * | |
| * @see [Source Maps](https://nextjs.org/docs/advanced-features/source-maps) | |
| */ | |
| productionBrowserSourceMaps?: boolean | |
| /** | |
| * Enable {@link https://nextjs.org/docs/app/api-reference/config/next-config-js/reactCompiler React Compiler in Next.js}. | |
| * Configuration accepts partial config object of the Compiler. | |
| * If provided, the Compiler will be enabled. | |
| */ | |
| reactCompiler?: boolean | ReactCompilerOptions | |
| /** | |
| * Enable react profiling in production | |
| * | |
| */ | |
| reactProductionProfiling?: boolean | |
| /** | |
| * The Next.js runtime is Strict Mode-compliant. | |
| * | |
| * @see [React Strict Mode](https://nextjs.org/docs/app/api-reference/config/next-config-js/reactStrictMode) | |
| */ | |
| reactStrictMode?: boolean | null | |
| /** | |
| * The maximum length of the headers that are emitted by React and added to | |
| * the response. | |
| * | |
| * @see [React Max Headers Length](https://nextjs.org/docs/app/api-reference/config/next-config-js/reactMaxHeadersLength) | |
| */ | |
| reactMaxHeadersLength?: number | |
| /** | |
| * Next.js enables HTTP Keep-Alive by default. | |
| * You may want to disable HTTP Keep-Alive for certain `fetch()` calls or globally. | |
| * | |
| * @see [Disabling HTTP Keep-Alive](https://nextjs.org/docs/app/api-reference/next-config-js/httpAgentOptions) | |
| */ | |
| httpAgentOptions?: { keepAlive?: boolean } | |
| /** | |
| * Timeout after waiting to generate static pages in seconds | |
| * | |
| * @default 60 | |
| */ | |
| staticPageGenerationTimeout?: number | |
| /** | |
| * Add `"crossorigin"` attribute to generated `<script>` elements generated by `<Head />` or `<NextScript />` components | |
| * | |
| * | |
| * @see [`crossorigin` attribute documentation](https://developer.mozilla.org/docs/Web/HTML/Attributes/crossorigin) | |
| */ | |
| crossOrigin?: 'anonymous' | 'use-credentials' | |
| /** | |
| * Optionally enable compiler transforms | |
| * | |
| * @see [Supported Compiler Options](https://nextjs.org/docs/advanced-features/compiler#supported-features) | |
| */ | |
| compiler?: { | |
| reactRemoveProperties?: | |
| | boolean | |
| | { | |
| properties?: string[] | |
| } | |
| relay?: { | |
| src: string | |
| artifactDirectory?: string | |
| language?: 'typescript' | 'javascript' | 'flow' | |
| eagerEsModules?: boolean | |
| } | |
| removeConsole?: | |
| | boolean | |
| | { | |
| exclude?: string[] | |
| } | |
| styledComponents?: boolean | StyledComponentsConfig | |
| emotion?: boolean | EmotionConfig | |
| styledJsx?: | |
| | boolean | |
| | { | |
| useLightningcss?: boolean | |
| } | |
| /** | |
| * Replaces variables in your code during compile time. Each key will be | |
| * replaced with the respective values. | |
| */ | |
| define?: Record<string, string> | |
| /** | |
| * Replaces server-only (Node.js and Edge) variables in your code during compile time. | |
| * Each key will be replaced with the respective values. | |
| */ | |
| defineServer?: Record<string, string> | |
| /** | |
| * A hook function that executes after production build compilation finishes, | |
| * but before running post-compilation tasks such as type checking and | |
| * static page generation. | |
| */ | |
| runAfterProductionCompile?: (metadata: { | |
| /** | |
| * The root directory of the project | |
| */ | |
| projectDir: string | |
| /** | |
| * The build output directory (defaults to `.next`) | |
| */ | |
| distDir: string | |
| }) => Promise<void> | |
| } | |
| /** | |
| * The type of build output. | |
| * - `undefined`: The default build output, `.next` directory, that works with production mode `next start` or a hosting provider like Vercel | |
| * - `'standalone'`: A standalone build output, `.next/standalone` directory, that only includes necessary files/dependencies. Useful for self-hosting in a Docker container. | |
| * - `'export'`: An exported build output, `out` directory, that only includes static HTML/CSS/JS. Useful for self-hosting without a Node.js server. | |
| * @see [Output File Tracing](https://nextjs.org/docs/advanced-features/output-file-tracing) | |
| * @see [Static HTML Export](https://nextjs.org/docs/advanced-features/static-html-export) | |
| */ | |
| output?: 'standalone' | 'export' | |
| /** | |
| * Automatically transpile and bundle dependencies from local packages (like monorepos) or from external dependencies (`node_modules`). This replaces the | |
| * `next-transpile-modules` package. | |
| * @see [transpilePackages](https://nextjs.org/docs/advanced-features/compiler#module-transpilation) | |
| */ | |
| transpilePackages?: string[] | |
| /** | |
| * Options for Turbopack. Temporarily also available as `experimental.turbo` for compatibility. | |
| */ | |
| turbopack?: TurbopackOptions | |
| /** | |
| * @deprecated Use `skipProxyUrlNormalize` instead. | |
| */ | |
| skipMiddlewareUrlNormalize?: boolean | |
| skipProxyUrlNormalize?: boolean | |
| skipTrailingSlashRedirect?: boolean | |
| modularizeImports?: Record< | |
| string, | |
| { | |
| transform: string | Record<string, string> | |
| preventFullImport?: boolean | |
| skipDefaultConversion?: boolean | |
| } | |
| > | |
| /** | |
| * Logging configuration. Set to `false` to disable logging. | |
| */ | |
| logging?: LoggingConfig | false | |
| /** | |
| * Enables source maps while generating static pages. | |
| * Helps with errors during the prerender phase in `next build`. | |
| */ | |
| enablePrerenderSourceMaps?: boolean | |
| /** | |
| * When enabled, in development and build, Next.js will automatically cache | |
| * page-level components and functions for faster builds and rendering. This | |
| * includes Partial Prerendering support. | |
| * | |
| * @see [Cache Components documentation](https://nextjs.org/docs/app/api-reference/config/next-config-js/cacheComponents) | |
| */ | |
| cacheComponents?: boolean | |
| cacheLife?: { | |
| [profile: string]: { | |
| // How long the client can cache a value without checking with the server. | |
| stale?: number | |
| // How frequently you want the cache to refresh on the server. | |
| // Stale values may be served while revalidating. | |
| revalidate?: number | |
| // In the worst case scenario, where you haven't had traffic in a while, | |
| // how stale can a value be until you prefer deopting to dynamic. | |
| // Must be longer than revalidate. | |
| expire?: number | |
| } | |
| } | |
| /** | |
| * period (in seconds) where the server allow to serve stale cache | |
| */ | |
| expireTime?: number | |
| /** | |
| * Enable experimental features. Note that all experimental features are subject to breaking changes in the future. | |
| */ | |
| experimental?: ExperimentalConfig | |
| /** | |
| * Enables the bundling of node_modules packages (externals) for pages server-side bundles. | |
| * @see https://nextjs.org/docs/pages/api-reference/next-config-js/bundlePagesRouterDependencies | |
| */ | |
| bundlePagesRouterDependencies?: boolean | |
| /** | |
| * A list of packages that should be treated as external in the server build. | |
| * @see https://nextjs.org/docs/app/api-reference/next-config-js/serverExternalPackages | |
| */ | |
| serverExternalPackages?: string[] | |
| /** | |
| * This is the repo root usually and only files above this | |
| * directory are traced and included. | |
| */ | |
| outputFileTracingRoot?: string | |
| /** | |
| * This allows manually excluding traced files if too many | |
| * are included incorrectly on a per-page basis. | |
| */ | |
| outputFileTracingExcludes?: Record<string, string[]> | |
| /** | |
| * This allows manually including traced files if some | |
| * were not detected on a per-page basis. | |
| */ | |
| outputFileTracingIncludes?: Record<string, string[]> | |
| watchOptions?: { | |
| pollIntervalMs?: number | |
| } | |
| /** | |
| * User Agent of bots that can handle streaming metadata. | |
| * Besides the default behavior, Next.js act differently on serving metadata to bots based on their capability. | |
| * | |
| * @default | |
| * /Mediapartners-Google|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview/i | |
| */ | |
| htmlLimitedBots?: RegExp | |
| /** | |
| * @internal | |
| */ | |
| configFile?: string | undefined | |
| /** | |
| * @internal | |
| */ | |
| configOrigin?: string | undefined | |
| /** | |
| * @internal | |
| */ | |
| _originalRedirects?: any | |
| /** | |
| * @internal | |
| */ | |
| _originalRewrites?: any | |
| } | |
| export const defaultConfig = Object.freeze({ | |
| env: {}, | |
| webpack: null, | |
| typescript: { | |
| ignoreBuildErrors: false, | |
| tsconfigPath: undefined, | |
| }, | |
| typedRoutes: false, | |
| distDir: '.next', | |
| cleanDistDir: true, | |
| assetPrefix: '', | |
| cacheHandler: process.env.NEXT_CACHE_HANDLER_PATH, | |
| // default to 50MB limit | |
| cacheMaxMemorySize: 50 * 1024 * 1024, | |
| configOrigin: 'default', | |
| useFileSystemPublicRoutes: true, | |
| generateBuildId: () => null, | |
| generateEtags: true, | |
| pageExtensions: ['tsx', 'ts', 'jsx', 'js'], | |
| poweredByHeader: true, | |
| compress: true, | |
| images: imageConfigDefault, | |
| devIndicators: { | |
| position: 'bottom-left', | |
| }, | |
| onDemandEntries: { | |
| maxInactiveAge: 60 * 1000, | |
| pagesBufferLength: 5, | |
| }, | |
| basePath: '', | |
| sassOptions: {}, | |
| trailingSlash: false, | |
| i18n: null, | |
| productionBrowserSourceMaps: false, | |
| excludeDefaultMomentLocales: true, | |
| reactProductionProfiling: false, | |
| reactStrictMode: null, | |
| reactMaxHeadersLength: 6000, | |
| httpAgentOptions: { | |
| keepAlive: true, | |
| }, | |
| logging: {}, | |
| compiler: {}, | |
| expireTime: process.env.NEXT_PRIVATE_CDN_CONSUMED_SWR_CACHE_CONTROL | |
| ? undefined | |
| : 31536000, // one year | |
| staticPageGenerationTimeout: 60, | |
| output: !!process.env.NEXT_PRIVATE_STANDALONE ? 'standalone' : undefined, | |
| modularizeImports: undefined, | |
| outputFileTracingRoot: process.env.NEXT_PRIVATE_OUTPUT_TRACE_ROOT || '', | |
| allowedDevOrigins: undefined, | |
| // Will default to cacheComponents value. | |
| enablePrerenderSourceMaps: undefined, | |
| cacheComponents: false, | |
| cacheLife: { | |
| default: { | |
| stale: undefined, // defaults to staleTimes.static | |
| revalidate: 60 * 15, // 15 minutes | |
| expire: INFINITE_CACHE, | |
| }, | |
| seconds: { | |
| stale: 30, // 30 seconds | |
| revalidate: 1, // 1 second | |
| expire: 60, // 1 minute | |
| }, | |
| minutes: { | |
| stale: 60 * 5, // 5 minutes | |
| revalidate: 60, // 1 minute | |
| expire: 60 * 60, // 1 hour | |
| }, | |
| hours: { | |
| stale: 60 * 5, // 5 minutes | |
| revalidate: 60 * 60, // 1 hour | |
| expire: 60 * 60 * 24, // 1 day | |
| }, | |
| days: { | |
| stale: 60 * 5, // 5 minutes | |
| revalidate: 60 * 60 * 24, // 1 day | |
| expire: 60 * 60 * 24 * 7, // 1 week | |
| }, | |
| weeks: { | |
| stale: 60 * 5, // 5 minutes | |
| revalidate: 60 * 60 * 24 * 7, // 1 week | |
| expire: 60 * 60 * 24 * 30, // 1 month | |
| }, | |
| max: { | |
| stale: 60 * 5, // 5 minutes | |
| revalidate: 60 * 60 * 24 * 30, // 1 month | |
| expire: 60 * 60 * 24 * 365, // 1 year | |
| }, | |
| }, | |
| cacheHandlers: { | |
| default: process.env.NEXT_DEFAULT_CACHE_HANDLER_PATH, | |
| remote: process.env.NEXT_REMOTE_CACHE_HANDLER_PATH, | |
| static: process.env.NEXT_STATIC_CACHE_HANDLER_PATH, | |
| }, | |
| experimental: { | |
| adapterPath: process.env.NEXT_ADAPTER_PATH || undefined, | |
| useSkewCookie: false, | |
| cssChunking: true, | |
| multiZoneDraftMode: false, | |
| appNavFailHandling: false, | |
| prerenderEarlyExit: true, | |
| serverMinification: true, | |
| linkNoTouchStart: false, | |
| caseSensitiveRoutes: false, | |
| cdnCacheControlHeader: undefined, | |
| clientParamParsingOrigins: undefined, | |
| dynamicOnHover: false, | |
| preloadEntriesOnStart: true, | |
| clientRouterFilter: true, | |
| clientRouterFilterRedirects: false, | |
| fetchCacheKeyPrefix: '', | |
| proxyPrefetch: 'flexible', | |
| optimisticClientCache: true, | |
| manualClientBasePath: false, | |
| cpus: Math.max( | |
| 1, | |
| (Number(process.env.CIRCLE_NODE_TOTAL) || | |
| (os.cpus() || { length: 1 }).length) - 1 | |
| ), | |
| memoryBasedWorkersCount: false, | |
| imgOptConcurrency: null, | |
| imgOptTimeoutInSeconds: 7, | |
| imgOptMaxInputPixels: 268_402_689, // https://sharp.pixelplumbing.com/api-constructor#:~:text=%5Boptions.limitInputPixels%5D | |
| imgOptSequentialRead: null, | |
| imgOptSkipMetadata: null, | |
| isrFlushToDisk: true, | |
| workerThreads: false, | |
| proxyTimeout: undefined, | |
| optimizeCss: false, | |
| nextScriptWorkers: false, | |
| scrollRestoration: false, | |
| externalDir: false, | |
| disableOptimizedLoading: false, | |
| gzipSize: true, | |
| craCompat: false, | |
| esmExternals: true, | |
| fullySpecified: false, | |
| swcTraceProfiling: false, | |
| forceSwcTransforms: false, | |
| swcPlugins: undefined, | |
| largePageDataBytes: 128 * 1000, // 128KB by default | |
| disablePostcssPresetEnv: undefined, | |
| urlImports: undefined, | |
| typedEnv: false, | |
| clientTraceMetadata: undefined, | |
| parallelServerCompiles: false, | |
| parallelServerBuildTraces: false, | |
| ppr: false, | |
| authInterrupts: false, | |
| webpackBuildWorker: undefined, | |
| webpackMemoryOptimizations: false, | |
| optimizeServerReact: true, | |
| strictRouteTypes: false, | |
| viewTransition: false, | |
| removeUncaughtErrorAndRejectionListeners: false, | |
| validateRSCRequestHeaders: !!( | |
| process.env.__NEXT_TEST_MODE || !isStableBuild() | |
| ), | |
| staleTimes: { | |
| dynamic: 0, | |
| static: 300, | |
| }, | |
| allowDevelopmentBuild: undefined, | |
| reactDebugChannel: false, | |
| staticGenerationRetryCount: undefined, | |
| serverComponentsHmrCache: true, | |
| staticGenerationMaxConcurrency: 8, | |
| staticGenerationMinPagesPerWorker: 25, | |
| transitionIndicator: false, | |
| inlineCss: false, | |
| useCache: undefined, | |
| slowModuleDetection: undefined, | |
| globalNotFound: false, | |
| browserDebugInfoInTerminal: false, | |
| lockDistDir: true, | |
| isolatedDevBuild: true, | |
| proxyClientMaxBodySize: 10_485_760, // 10MB | |
| hideLogsAfterAbort: false, | |
| mcpServer: true, | |
| turbopackFileSystemCacheForDev: true, | |
| turbopackFileSystemCacheForBuild: false, | |
| turbopackInferModuleSideEffects: !isStableBuild(), | |
| devCacheControlNoCache: false, | |
| }, | |
| htmlLimitedBots: undefined, | |
| bundlePagesRouterDependencies: false, | |
| } satisfies NextConfig) | |
| export async function normalizeConfig(phase: string, config: any) { | |
| if (typeof config === 'function') { | |
| config = config(phase, { defaultConfig }) | |
| } | |
| // Support `new Promise` and `async () =>` as return values of the config export | |
| return await config | |
| } | |
| // This should be a supertype of NextConfigComplete | |
| // | |
| // The Vercel builder needs these fields (read `config` in required-server-files.json) | |
| // { | |
| // pageExtensions: string[]; | |
| // experimental?: { | |
| // cacheComponents?: boolean; | |
| // clientParamParsingOrigins?: string[]; | |
| // clientSegmentCache?: boolean; | |
| // ppr?: boolean | 'incremental'; | |
| // serverActions?: Record<string, never>; | |
| // }; | |
| // }; | |
| export interface NextConfigRuntime { | |
| // Can be undefined, particularly when experimental.runtimeServerDeploymentId is true | |
| deploymentId?: NextConfigComplete['deploymentId'] | |
| configFileName?: string | |
| // Should only be included when using isExperimentalCompile | |
| env?: NextConfigComplete['env'] | |
| distDir: NextConfigComplete['distDir'] | |
| cacheComponents: NextConfigComplete['cacheComponents'] | |
| htmlLimitedBots: NextConfigComplete['htmlLimitedBots'] | |
| assetPrefix: NextConfigComplete['assetPrefix'] | |
| output: NextConfigComplete['output'] | |
| crossOrigin: NextConfigComplete['crossOrigin'] | |
| trailingSlash: NextConfigComplete['trailingSlash'] | |
| images: NextConfigComplete['images'] | |
| reactMaxHeadersLength: NextConfigComplete['reactMaxHeadersLength'] | |
| cacheLife: NextConfigComplete['cacheLife'] | |
| basePath: NextConfigComplete['basePath'] | |
| expireTime: NextConfigComplete['expireTime'] | |
| generateEtags: NextConfigComplete['generateEtags'] | |
| poweredByHeader: NextConfigComplete['poweredByHeader'] | |
| cacheHandler: NextConfigComplete['cacheHandler'] | |
| cacheHandlers: NextConfigComplete['cacheHandlers'] | |
| cacheMaxMemorySize: NextConfigComplete['cacheMaxMemorySize'] | |
| compress: NextConfigComplete['compress'] | |
| i18n: NextConfigComplete['i18n'] | |
| httpAgentOptions: NextConfigComplete['httpAgentOptions'] | |
| skipProxyUrlNormalize: NextConfigComplete['skipProxyUrlNormalize'] | |
| pageExtensions: NextConfigComplete['pageExtensions'] | |
| useFileSystemPublicRoutes: NextConfigComplete['useFileSystemPublicRoutes'] | |
| experimental: Pick< | |
| NextConfigComplete['experimental'], | |
| | 'ppr' | |
| | 'taint' | |
| | 'serverActions' | |
| | 'staleTimes' | |
| | 'dynamicOnHover' | |
| | 'inlineCss' | |
| | 'authInterrupts' | |
| | 'clientTraceMetadata' | |
| | 'clientParamParsingOrigins' | |
| | 'adapterPath' | |
| | 'allowedRevalidateHeaderKeys' | |
| | 'cdnCacheControlHeader' | |
| | 'fetchCacheKeyPrefix' | |
| | 'isrFlushToDisk' | |
| | 'optimizeCss' | |
| | 'nextScriptWorkers' | |
| | 'disableOptimizedLoading' | |
| | 'largePageDataBytes' | |
| | 'serverComponentsHmrCache' | |
| | 'caseSensitiveRoutes' | |
| | 'validateRSCRequestHeaders' | |
| | 'sri' | |
| | 'useSkewCookie' | |
| | 'preloadEntriesOnStart' | |
| | 'hideLogsAfterAbort' | |
| | 'removeUncaughtErrorAndRejectionListeners' | |
| | 'imgOptConcurrency' | |
| | 'imgOptMaxInputPixels' | |
| | 'imgOptSequentialRead' | |
| | 'imgOptSkipMetadata' | |
| | 'imgOptTimeoutInSeconds' | |
| | 'proxyClientMaxBodySize' | |
| | 'proxyTimeout' | |
| | 'testProxy' | |
| | 'runtimeServerDeploymentId' | |
| | 'maxPostponedStateSize' | |
| | 'devCacheControlNoCache' | |
| > & { | |
| // Pick on @internal fields generates invalid .d.ts files | |
| /** @internal */ | |
| trustHostHeader?: NextConfigComplete['experimental']['trustHostHeader'] | |
| /** @internal */ | |
| isExperimentalCompile?: NextConfigComplete['experimental']['isExperimentalCompile'] | |
| } | |
| } | |
| export function getNextConfigRuntime( | |
| config: NextConfigComplete | NextConfigRuntime | |
| ): NextConfigRuntime { | |
| let ex = config.experimental | |
| type Requiredish<T> = { | |
| [K in keyof Required<T>]: T[K] | |
| } | |
| let experimental = ex | |
| ? ({ | |
| ppr: ex.ppr, | |
| taint: ex.taint, | |
| serverActions: ex.serverActions, | |
| staleTimes: ex.staleTimes, | |
| dynamicOnHover: ex.dynamicOnHover, | |
| inlineCss: ex.inlineCss, | |
| authInterrupts: ex.authInterrupts, | |
| clientTraceMetadata: ex.clientTraceMetadata, | |
| clientParamParsingOrigins: ex.clientParamParsingOrigins, | |
| adapterPath: ex.adapterPath, | |
| allowedRevalidateHeaderKeys: ex.allowedRevalidateHeaderKeys, | |
| cdnCacheControlHeader: ex.cdnCacheControlHeader, | |
| fetchCacheKeyPrefix: ex.fetchCacheKeyPrefix, | |
| isrFlushToDisk: ex.isrFlushToDisk, | |
| optimizeCss: ex.optimizeCss, | |
| nextScriptWorkers: ex.nextScriptWorkers, | |
| disableOptimizedLoading: ex.disableOptimizedLoading, | |
| largePageDataBytes: ex.largePageDataBytes, | |
| serverComponentsHmrCache: ex.serverComponentsHmrCache, | |
| caseSensitiveRoutes: ex.caseSensitiveRoutes, | |
| validateRSCRequestHeaders: ex.validateRSCRequestHeaders, | |
| sri: ex.sri, | |
| useSkewCookie: ex.useSkewCookie, | |
| preloadEntriesOnStart: ex.preloadEntriesOnStart, | |
| hideLogsAfterAbort: ex.hideLogsAfterAbort, | |
| removeUncaughtErrorAndRejectionListeners: | |
| ex.removeUncaughtErrorAndRejectionListeners, | |
| imgOptConcurrency: ex.imgOptConcurrency, | |
| imgOptMaxInputPixels: ex.imgOptMaxInputPixels, | |
| imgOptSequentialRead: ex.imgOptSequentialRead, | |
| imgOptSkipMetadata: ex.imgOptSkipMetadata, | |
| imgOptTimeoutInSeconds: ex.imgOptTimeoutInSeconds, | |
| proxyClientMaxBodySize: ex.proxyClientMaxBodySize, | |
| proxyTimeout: ex.proxyTimeout, | |
| testProxy: ex.testProxy, | |
| runtimeServerDeploymentId: ex.runtimeServerDeploymentId, | |
| maxPostponedStateSize: ex.maxPostponedStateSize, | |
| devCacheControlNoCache: ex.devCacheControlNoCache, | |
| trustHostHeader: ex.trustHostHeader, | |
| isExperimentalCompile: ex.isExperimentalCompile, | |
| } satisfies Requiredish<NextConfigRuntime['experimental']>) | |
| : {} | |
| let runtimeConfig: Requiredish<NextConfigRuntime> = { | |
| deploymentId: config.experimental.runtimeServerDeploymentId | |
| ? '' | |
| : config.deploymentId, | |
| configFileName: undefined, | |
| env: undefined, | |
| distDir: config.distDir, | |
| cacheComponents: config.cacheComponents, | |
| htmlLimitedBots: config.htmlLimitedBots, | |
| assetPrefix: config.assetPrefix, | |
| output: config.output, | |
| crossOrigin: config.crossOrigin, | |
| trailingSlash: config.trailingSlash, | |
| images: config.images, | |
| reactMaxHeadersLength: config.reactMaxHeadersLength, | |
| cacheLife: config.cacheLife, | |
| basePath: config.basePath, | |
| expireTime: config.expireTime, | |
| generateEtags: config.generateEtags, | |
| poweredByHeader: config.poweredByHeader, | |
| cacheHandler: config.cacheHandler, | |
| cacheHandlers: config.cacheHandlers, | |
| cacheMaxMemorySize: config.cacheMaxMemorySize, | |
| compress: config.compress, | |
| i18n: config.i18n, | |
| httpAgentOptions: config.httpAgentOptions, | |
| skipProxyUrlNormalize: config.skipProxyUrlNormalize, | |
| pageExtensions: config.pageExtensions, | |
| useFileSystemPublicRoutes: config.useFileSystemPublicRoutes, | |
| experimental, | |
| } | |
| if (config.experimental.isExperimentalCompile) { | |
| runtimeConfig.env = config.env | |
| } | |
| return runtimeConfig | |
| } | |
| // Re-export from shared lib for backwards compatibility | |
| export { | |
| DEFAULT_MAX_POSTPONED_STATE_SIZE, | |
| parseMaxPostponedStateSize, | |
| } from '../shared/lib/size-limit' | |