import { Tapable } from 'tapable';
|
import * as webpack from 'webpack';
|
import * as https from 'https';
|
|
export = Config;
|
|
declare namespace __Config {
|
class Chained<Parent> {
|
end(): Parent;
|
}
|
|
class TypedChainedMap<Parent, Value> extends Chained<Parent> {
|
clear(): this;
|
delete(key: string): this;
|
has(key: string): boolean;
|
get(key: string): Value;
|
getOrCompute(key: string, compute: () => Value): Value;
|
set(key: string, value: Value): this;
|
merge(obj: { [key: string]: Value }): this;
|
entries(): { [key: string]: Value };
|
values(): Value[];
|
when(
|
condition: boolean,
|
trueBrancher: (obj: this) => void,
|
falseBrancher?: (obj: this) => void,
|
): this;
|
}
|
|
class ChainedMap<Parent> extends TypedChainedMap<Parent, any> {}
|
|
class TypedChainedSet<Parent, Value> extends Chained<Parent> {
|
add(value: Value): this;
|
prepend(value: Value): this;
|
clear(): this;
|
delete(key: string): this;
|
has(key: string): boolean;
|
merge(arr: Value[]): this;
|
values(): Value[];
|
when(
|
condition: boolean,
|
trueBrancher: (obj: this) => void,
|
falseBrancher?: (obj: this) => void,
|
): this;
|
}
|
|
class ChainedSet<Parent> extends TypedChainedSet<Parent, any> {}
|
}
|
|
declare class Config extends __Config.ChainedMap<void> {
|
devServer: Config.DevServer;
|
entryPoints: Config.TypedChainedMap<Config, Config.EntryPoint>;
|
module: Config.Module;
|
node: Config.ChainedMap<this>;
|
output: Config.Output;
|
optimization: Config.Optimization;
|
performance: Config.Performance;
|
plugins: Config.Plugins<this, webpack.Plugin>;
|
resolve: Config.Resolve;
|
resolveLoader: Config.ResolveLoader;
|
|
amd(value: { [moduleName: string]: boolean }): this;
|
bail(value: boolean): this;
|
cache(value: boolean | any): this;
|
devtool(value: Config.DevTool): this;
|
context(value: string): this;
|
externals(value: webpack.ExternalsElement | webpack.ExternalsElement[]): this;
|
loader(value: any): this;
|
name(value: string): this;
|
mode(value: 'none' | 'development' | 'production'): this;
|
parallelism(value: number): this;
|
profile(value: boolean): this;
|
recordsPath(value: string): this;
|
recordsInputPath(value: string): this;
|
recordsOutputPath(value: string): this;
|
stats(value: webpack.Options.Stats): this;
|
target(value: string): this;
|
watch(value: boolean): this;
|
watchOptions(value: webpack.Options.WatchOptions): this;
|
|
entry(name: string): Config.EntryPoint;
|
plugin(name: string): Config.Plugin<this, webpack.Plugin>;
|
|
toConfig(): webpack.Configuration;
|
}
|
|
declare namespace Config {
|
class Chained<Parent> extends __Config.Chained<Parent> {}
|
class TypedChainedMap<Parent, Value> extends __Config.TypedChainedMap<
|
Parent,
|
Value
|
> {}
|
class ChainedMap<Parent> extends __Config.TypedChainedMap<Parent, any> {}
|
class TypedChainedSet<Parent, Value> extends __Config.TypedChainedSet<
|
Parent,
|
Value
|
> {}
|
class ChainedSet<Parent> extends __Config.TypedChainedSet<Parent, any> {}
|
|
class Plugins<
|
Parent,
|
PluginType extends Tapable.Plugin = webpack.Plugin
|
> extends TypedChainedMap<Parent, Plugin<Parent, PluginType>> {}
|
|
class Plugin<Parent, PluginType extends Tapable.Plugin = webpack.Plugin>
|
extends ChainedMap<Parent>
|
implements Orderable {
|
init<P extends PluginType | PluginClass<PluginType>>(
|
value: (
|
plugin: P,
|
args: P extends PluginClass ? ConstructorParameters<P> : any[],
|
) => PluginType,
|
): this;
|
use<P extends string | PluginType | PluginClass<PluginType>>(
|
plugin: P,
|
args?: P extends PluginClass ? ConstructorParameters<P> : any[],
|
): this;
|
tap<P extends PluginClass<PluginType>>(
|
f: (args: ConstructorParameters<P>) => ConstructorParameters<P>,
|
): this;
|
|
// Orderable
|
before(name: string): this;
|
after(name: string): this;
|
}
|
|
class Module extends ChainedMap<Config> {
|
rules: TypedChainedMap<this, Rule>;
|
rule(name: string): Rule;
|
noParse(
|
noParse: RegExp | RegExp[] | ((contentPath: string) => boolean),
|
): this;
|
strictExportPresence(value: boolean): this;
|
}
|
|
class Output extends ChainedMap<Config> {
|
auxiliaryComment(value: string | { [comment: string]: string }): this;
|
chunkFilename(value: string): this;
|
chunkLoadTimeout(value: number): this;
|
crossOriginLoading(value: boolean | string): this;
|
filename(value: string): this;
|
library(value: string): this;
|
libraryExport(value: string | string[]): this;
|
libraryTarget(value: string): this;
|
devtoolFallbackModuleFilenameTemplate(value: any): this;
|
devtoolLineToLine(value: any): this;
|
devtoolModuleFilenameTemplate(value: any): this;
|
devtoolNamespace(value: string): this;
|
globalObject(value: string): this;
|
hashFunction(value: string): this;
|
hashDigest(value: string): this;
|
hashDigestLength(value: number): this;
|
hashSalt(value: any): this;
|
hotUpdateChunkFilename(value: string): this;
|
hotUpdateFunction(value: any): this;
|
hotUpdateMainFilename(value: string): this;
|
jsonpFunction(value: string): this;
|
path(value: string): this;
|
pathinfo(value: boolean): this;
|
publicPath(value: string): this;
|
sourceMapFilename(value: string): this;
|
sourcePrefix(value: string): this;
|
strictModuleExceptionHandling(value: boolean): this;
|
umdNamedDefine(value: boolean): this;
|
futureEmitAssets(value: boolean): this;
|
}
|
|
class DevServer extends ChainedMap<Config> {
|
allowedHosts: TypedChainedSet<this, string>;
|
|
after(
|
value: (app: any, server: any, compiler: webpack.Compiler) => void,
|
): this;
|
before(
|
value: (app: any, server: any, compiler: webpack.Compiler) => void,
|
): this;
|
bonjour(value: boolean): this;
|
clientLogLevel(value: 'none' | 'error' | 'warning' | 'info'): this;
|
color(value: boolean): this;
|
compress(value: boolean): this;
|
contentBase(value: boolean | string | string[]): this;
|
disableHostCheck(value: boolean): this;
|
filename(value: string): this;
|
headers(value: { [header: string]: string }): this;
|
historyApiFallback(value: boolean | any): this;
|
host(value: string): this;
|
hot(value: boolean): this;
|
hotOnly(value: boolean): this;
|
http2(value: boolean): this;
|
https(value: boolean | https.ServerOptions): this;
|
index(value: string): this;
|
info(value: boolean): this;
|
inline(value: boolean): this;
|
lazy(value: boolean): this;
|
mimeTypes(value: Object): this;
|
noInfo(value: boolean): this;
|
open(value: boolean): this;
|
openPage(value: string | string[]): this;
|
overlay(value: boolean | { warnings?: boolean; errors?: boolean }): this;
|
pfx(value: string): this;
|
pfxPassphrase(value: string): this;
|
port(value: number): this;
|
progress(value: boolean): this;
|
proxy(value: any): this;
|
public(value: string): this;
|
publicPath(publicPath: string): this;
|
quiet(value: boolean): this;
|
setup(value: (expressApp: any) => void): this;
|
socket(value: string): this;
|
sockHost(value: string): this;
|
sockPath(value: string): this;
|
sockPort(value: number): this;
|
staticOptions(value: any): this;
|
stats(value: webpack.Options.Stats): this;
|
stdin(value: boolean): this;
|
useLocalIp(value: boolean): this;
|
watchContentBase(value: boolean): this;
|
watchOptions(value: any): this;
|
writeToDisk(value: boolean): this;
|
}
|
|
class Performance extends ChainedMap<Config> {
|
hints(value: boolean | 'error' | 'warning'): this;
|
maxEntrypointSize(value: number): this;
|
maxAssetSize(value: number): this;
|
assetFilter(value: (assetFilename: string) => boolean): this;
|
}
|
|
class EntryPoint extends TypedChainedSet<Config, string> {}
|
|
class Resolve<T = Config> extends ChainedMap<T> {
|
alias: TypedChainedMap<this, string>;
|
aliasFields: TypedChainedSet<this, string>;
|
descriptionFiles: TypedChainedSet<this, string>;
|
extensions: TypedChainedSet<this, string>;
|
mainFields: TypedChainedSet<this, string>;
|
mainFiles: TypedChainedSet<this, string>;
|
modules: TypedChainedSet<this, string>;
|
plugins: TypedChainedMap<this, Plugin<this, webpack.ResolvePlugin>>;
|
|
enforceExtension(value: boolean): this;
|
enforceModuleExtension(value: boolean): this;
|
unsafeCache(value: boolean | RegExp | RegExp[]): this;
|
symlinks(value: boolean): this;
|
cachePredicate(
|
value: (data: { path: string; request: string }) => boolean,
|
): this;
|
cacheWithContext(value: boolean): this;
|
|
plugin(name: string): Plugin<this, webpack.ResolvePlugin>;
|
}
|
|
class ResolveLoader extends Resolve {
|
moduleExtensions: ChainedSet<this>;
|
packageMains: ChainedSet<this>;
|
}
|
|
class Rule<T = Module> extends ChainedMap<T> implements Orderable {
|
rules: TypedChainedMap<this, Rule<Rule>>;
|
oneOfs: TypedChainedMap<this, Rule<Rule>>;
|
uses: TypedChainedMap<this, Use>;
|
include: TypedChainedSet<this, webpack.Condition>;
|
exclude: TypedChainedSet<this, webpack.Condition>;
|
resolve: Resolve<Rule<T>>;
|
|
parser(value: { [optName: string]: any }): this;
|
test(value: webpack.Condition | webpack.Condition[]): this;
|
type(
|
value:
|
| 'javascript/auto'
|
| 'javascript/dynamic'
|
| 'javascript/esm'
|
| 'json'
|
| 'webassembly/experimental',
|
): this;
|
enforce(value: 'pre' | 'post'): this;
|
|
use(name: string): Use<this>;
|
rule(name: string): Rule<Rule>;
|
oneOf(name: string): Rule<Rule>;
|
pre(): this;
|
post(): this;
|
before(name: string): this;
|
after(name: string): this;
|
resourceQuery(value: webpack.Condition | webpack.Condition[]): this;
|
}
|
|
class Optimization extends ChainedMap<Config> {
|
concatenateModules(value: boolean): this;
|
flagIncludedChunks(value: boolean): this;
|
mergeDuplicateChunks(value: boolean): this;
|
minimize(value: boolean): this;
|
minimizer(name: string): Config.Plugin<this, webpack.Plugin>;
|
namedChunks(value: boolean): this;
|
namedModules(value: boolean): this;
|
nodeEnv(value: boolean | string): this;
|
noEmitOnErrors(value: boolean): this;
|
occurrenceOrder(value: boolean): this;
|
portableRecords(value: boolean): this;
|
providedExports(value: boolean): this;
|
removeAvailableModules(value: boolean): this;
|
removeEmptyChunks(value: boolean): this;
|
runtimeChunk(value: boolean | 'single' | 'multiple' | RuntimeChunk): this;
|
sideEffects(value: boolean): this;
|
splitChunks(value: SplitChunksOptions): this;
|
usedExports(value: boolean): this;
|
}
|
|
interface RuntimeChunk {
|
name: string | RuntimeChunkFunction;
|
}
|
|
type RuntimeChunkFunction = (entryPoint: EntryPoint) => string;
|
|
interface SplitChunksOptions {
|
[name: string]: any;
|
}
|
|
interface LoaderOptions {
|
[name: string]: any;
|
}
|
|
class Use<Parent = Rule> extends ChainedMap<Parent> implements Orderable {
|
loader(value: string): this;
|
options(value: LoaderOptions): this;
|
|
tap(f: (options: LoaderOptions) => LoaderOptions): this;
|
|
// Orderable
|
before(name: string): this;
|
after(name: string): this;
|
}
|
|
type DevTool =
|
| 'eval'
|
| 'inline-source-map'
|
| 'cheap-eval-source-map'
|
| 'cheap-source-map'
|
| 'cheap-module-eval-source-map'
|
| 'cheap-module-source-map'
|
| 'eval-source-map'
|
| 'source-map'
|
| 'nosources-source-map'
|
| 'hidden-source-map'
|
| 'nosources-source-map'
|
| '@eval'
|
| '@inline-source-map'
|
| '@cheap-eval-source-map'
|
| '@cheap-source-map'
|
| '@cheap-module-eval-source-map'
|
| '@cheap-module-source-map'
|
| '@eval-source-map'
|
| '@source-map'
|
| '@nosources-source-map'
|
| '@hidden-source-map'
|
| '@nosources-source-map'
|
| '#eval'
|
| '#inline-source-map'
|
| '#cheap-eval-source-map'
|
| '#cheap-source-map'
|
| '#cheap-module-eval-source-map'
|
| '#cheap-module-source-map'
|
| '#eval-source-map'
|
| '#source-map'
|
| '#nosources-source-map'
|
| '#hidden-source-map'
|
| '#nosources-source-map'
|
| '#@eval'
|
| '#@inline-source-map'
|
| '#@cheap-eval-source-map'
|
| '#@cheap-source-map'
|
| '#@cheap-module-eval-source-map'
|
| '#@cheap-module-source-map'
|
| '#@eval-source-map'
|
| '#@source-map'
|
| '#@nosources-source-map'
|
| '#@hidden-source-map'
|
| '#@nosources-source-map'
|
| boolean;
|
|
interface PluginClass<PluginType extends Tapable.Plugin = webpack.Plugin> {
|
new (...opts: any[]): PluginType;
|
}
|
|
interface Orderable {
|
before(name: string): this;
|
after(name: string): this;
|
}
|
}
|