diff --git a/types/webpack-chain/index.d.ts b/types/webpack-chain/index.d.ts index 691e4be9b9..033ef9951f 100644 --- a/types/webpack-chain/index.d.ts +++ b/types/webpack-chain/index.d.ts @@ -85,10 +85,14 @@ declare namespace Config { class Plugins extends TypedChainedMap> {} - class Plugin extends ChainedMap { + class Plugin extends ChainedMap implements Orderable { init(value: (plugin: PluginClass, args: any[]) => webpack.Plugin): this; use(plugin: PluginClass, args?: any[]): this; tap(f: (args: any[]) => any[]): this; + + // Orderable + before(name: string): this; + after(name: string): this; } class Module extends ChainedMap { @@ -231,11 +235,15 @@ declare namespace Config { interface LoaderOptions { [name: string]: any; } - class Use extends ChainedMap { + class Use extends ChainedMap 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' | @@ -255,4 +263,9 @@ declare namespace Config { interface PluginClass { new (...opts: any[]): webpack.Plugin; } + + interface Orderable { + before(name: string): this; + after(name: string): this; + } } diff --git a/types/webpack-chain/webpack-chain-tests.ts b/types/webpack-chain/webpack-chain-tests.ts index 8775fec7f9..f1d0daa5e2 100644 --- a/types/webpack-chain/webpack-chain-tests.ts +++ b/types/webpack-chain/webpack-chain-tests.ts @@ -46,8 +46,20 @@ config .use(webpack.DefinePlugin, []) .end() + .plugin('bar') + .use(webpack.DefinePlugin, []) + .before('foo') + .end() + + .plugin('baz') + .use(webpack.DefinePlugin, []) + .after('bar') + .end() + .plugins .delete('foo') + .delete('bar') + .delete('baz') .end() .devServer @@ -107,8 +119,14 @@ config .loader('babel-loader') .options({}) .end() + .use('eslint') + .loader('eslint-loader') + .options({}) + .after('babel') + .end() .uses .delete('babel') + .delete('eslint') .end() .pre() .post()