/// /** * NuxtOptionsBuild * Documentation: https://nuxtjs.org/api/configuration-build */ import type { IncomingMessage, ServerResponse } from 'http' import type { TransformOptions, PluginItem } from '@babel/core' import type { Options as AutoprefixerOptions } from 'autoprefixer' import type { Options as FileLoaderOptions } from 'file-loader' import type { Options as HtmlMinifierOptions } from 'html-minifier-terser' import type { Options as OptimizeCssAssetsWebpackPluginOptions } from 'optimize-css-assets-webpack-plugin' import type { Plugin as PostcssPlugin } from 'postcss' import type { Options as PugOptions } from 'pug' import type { TerserPluginOptions } from 'terser-webpack-plugin' import type { VueLoaderOptions } from 'vue-loader' import type { Configuration as WebpackConfiguration, Loader as WebpackLoader, loader as WebpackLoaderNamespace, Options as WebpackOptions, Plugin as WebpackPlugin } from 'webpack' import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer' import type { Options as WebpackDevMiddlewareOptions } from 'webpack-dev-middleware' import type { MiddlewareOptions as WebpackHotMiddlewareOptions, ClientOptions as WebpackHotMiddlewareClientOptions } from 'webpack-hot-middleware' import type { Options as SassOptions } from '../lib/sass-loader' type CssLoaderUrlFunction = (url: string, resourcePath: string) => boolean type CssLoaderImportFunction = (url: string, media: string, resourcePath: string) => boolean type CssLoaderMode = 'global' | 'local' | 'pure' interface CssLoaderModulesOptions { compileType?: 'module' | 'icss', mode?: CssLoaderMode, auto?: Boolean | RegExp | ((resourcePath: string) => boolean), exportGlobals?: boolean, localIdentName?: string, context?: string, localIdentHashPrefix?: string, namedExport?: boolean, exportLocalsConvention?: 'asIs' | 'camelCase' | 'camelCaseOnly' | 'dashes' | 'dashesOnly', exportOnlyLocals?: boolean, } interface CssLoaderOptions { url?: boolean | CssLoaderUrlFunction import?: boolean | CssLoaderImportFunction modules?: boolean | CssLoaderMode | CssLoaderModulesOptions sourceMap?: boolean importLoaders?: number esModule?: boolean } interface UrlLoaderOptions { esModule?: boolean fallback?: WebpackLoader limit?: boolean | number | string mimetype?: string } interface NuxtOptionsLoaders { css?: CssLoaderOptions cssModules?: CssLoaderOptions file?: FileLoaderOptions fontUrl?: UrlLoaderOptions imgUrl?: UrlLoaderOptions less?: Less.Options pugPlain?: PugOptions sass?: SassOptions scss?: SassOptions stylus?: any // TBD vue?: VueLoaderOptions vueStyle?: { manualInject?: boolean ssrId?: boolean shadowMode?: boolean } } interface NuxtWebpackEnv { isClient: boolean isDev: boolean isLegacy: boolean isModern: boolean isServer: boolean } interface NuxtBabelPresetEnv { envName: 'client' | 'modern' | 'server' } interface NuxtBabelOptions extends Pick> { cacheCompression?: boolean cacheDirectory?: boolean cacheIdentifier?: string customize?: string | null // eslint-disable-next-line @typescript-eslint/ban-types presets?: ((env: NuxtBabelPresetEnv & NuxtWebpackEnv, defaultPreset: [string, object]) => PluginItem[] | void) | PluginItem[] | null plugins?: ((env: NuxtBabelPresetEnv & NuxtWebpackEnv) => NonNullable) | TransformOptions['plugins'] } interface Warning { message: string name: string } interface PostcssOrderPresetFunctions { cssnanoLast: (names: string[]) => string[] presetEnvAndCssnanoLast: (names: string[]) => string[] presetEnvLast: (names: string[]) => string[] } type PostcssOrderPreset = keyof PostcssOrderPresetFunctions interface PostcssVariableMap { customMedia: Record customProperties: Record customSelectors: Record environmentVariables?: Record } interface PostcssConfiguration { order?: PostcssOrderPreset | string[] | ((names: string[], presets: PostcssOrderPresetFunctions) => string[]) plugins?: { [key: string]: false | { [key: string]: any } } | ((loader: WebpackLoaderNamespace.LoaderContext) => PostcssPlugin[]) | Array<[string | PostcssPlugin, any] | string | PostcssPlugin> readonly preset?: { autoprefixer?: false | AutoprefixerOptions browsers?: string exportTo?: string | string[] | Partial | ((map: PostcssVariableMap) => Partial) features?: { [key: string]: boolean | { [key: string]: any } } importFrom?: string | string[] | Partial | (() => Partial) insertAfter?: { [key: string]: PostcssPlugin } insertBefore?: { [key: string]: PostcssPlugin } preserve?: boolean stage?: 0 | 1 | 2 | 3 | 4 | false } } export interface NuxtOptionsBuild { additionalExtensions?: string[] analyze?: BundleAnalyzerPlugin.Options | boolean babel?: NuxtBabelOptions cache?: boolean corejs?: 'auto' | 2 | 3 crossorigin?: string cssSourceMap?: boolean devMiddleware?: WebpackDevMiddlewareOptions devtools?: boolean extend?( config: WebpackConfiguration, ctx: { loaders: NuxtOptionsLoaders } & NuxtWebpackEnv ): void extractCSS?: boolean | Record filenames?: { [key in 'app' | 'chunk' | 'css' | 'img' | 'font' | 'video']?: (ctx: NuxtWebpackEnv) => string } friendlyErrors?: boolean hardSource?: boolean hotMiddleware?: WebpackHotMiddlewareOptions & { client?: WebpackHotMiddlewareClientOptions } html?: { minify: false | HtmlMinifierOptions } indicator?: boolean loaders?: NuxtOptionsLoaders loadingScreen?: boolean | any optimization?: WebpackOptions.Optimization optimizeCSS?: OptimizeCssAssetsWebpackPluginOptions | boolean parallel?: boolean plugins?: WebpackPlugin[] postcss?: string[] | boolean | { postcssOptions: PostcssConfiguration | (() => PostcssConfiguration) } profile?: boolean publicPath?: string quiet?: boolean splitChunks?: { commons?: boolean layouts?: boolean pages?: boolean } ssr?: boolean standalone?: boolean stats?: WebpackConfiguration['stats'] templates?: any terser?: TerserPluginOptions | boolean transpile?: Array string | RegExp | undefined)> warningIgnoreFilters?: Array<(warn: Warning) => boolean> watch?: string[] }