Skip to content

Commit 1ecbb5d

Browse files
fimarsedmorley
authored andcommittedJan 22, 2019
Add TypeScript type definitions (neutrinojs#132)
Fixes neutrinojs#62.
1 parent 9b208f9 commit 1ecbb5d

7 files changed

+651
-1
lines changed
 

‎.travis.yml

+1
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ install:
1515
script:
1616
- yarn lint
1717
- yarn test
18+
- yarn test:types

‎package.json

+7-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"name": "webpack-chain",
33
"version": "5.1.0",
44
"main": "src/Config.js",
5+
"typings": "types/index.d.ts",
56
"repository": "neutrinojs/webpack-chain",
67
"keywords": [
78
"webpack",
@@ -11,12 +12,14 @@
1112
"api"
1213
],
1314
"files": [
14-
"src"
15+
"src",
16+
"types/*.d.ts"
1517
],
1618
"author": "Eli Perelman <eli@eliperelman.com>",
1719
"license": "MPL-2.0",
1820
"scripts": {
1921
"test": "ava test",
22+
"test:types": "tsc -p ./types/test/tsconfig.json",
2023
"lint": "eslint --cache --report-unused-disable-directives --format codeframe \".*.js\" src test",
2124
"changelog": "auto-changelog --remote upstream --commit-limit false",
2225
"version": "yarn changelog --package && git add CHANGELOG.md"
@@ -26,6 +29,8 @@
2629
"javascript-stringify": "^1.6.0"
2730
},
2831
"devDependencies": {
32+
"@types/node": "^10.12.17",
33+
"@types/webpack": "^4.4.21",
2934
"auto-changelog": "^1.8.0",
3035
"ava": "^1.0.0",
3136
"eslint": "^5.6.1",
@@ -35,6 +40,7 @@
3540
"eslint-plugin-import": "^2.14.0",
3641
"eslint-plugin-prettier": "^3.0.0",
3742
"prettier": "^1.14.3",
43+
"typescript": "^3.2.2",
3844
"webpack": "^4.20.2"
3945
}
4046
}

‎types/index.d.ts

+295
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,295 @@
1+
import * as webpack from 'webpack';
2+
import * as https from 'https';
3+
4+
export = Config;
5+
6+
declare namespace __Config {
7+
class Chained<Parent> {
8+
end(): Parent;
9+
}
10+
11+
class TypedChainedMap<Parent, Value> extends Chained<Parent> {
12+
clear(): this;
13+
delete(key: string): this;
14+
has(key: string): boolean;
15+
get(key: string): Value;
16+
set(key: string, value: Value): this;
17+
merge(obj: { [key: string]: Value }): this;
18+
entries(): { [key: string]: Value };
19+
values(): Value[];
20+
when(condition: boolean, trueBrancher: (obj: this) => void, falseBrancher?: (obj: this) => void): this;
21+
}
22+
23+
class ChainedMap<Parent> extends TypedChainedMap<Parent, any> {}
24+
25+
class TypedChainedSet<Parent, Value> extends Chained<Parent> {
26+
add(value: Value): this;
27+
prepend(value: Value): this;
28+
clear(): this;
29+
delete(key: string): this;
30+
has(key: string): boolean;
31+
merge(arr: Value[]): this;
32+
values(): Value[];
33+
when(condition: boolean, trueBrancher: (obj: this) => void, falseBrancher?: (obj: this) => void): this;
34+
}
35+
36+
class ChainedSet<Parent> extends TypedChainedSet<Parent, any> {}
37+
}
38+
39+
declare class Config extends __Config.ChainedMap<void> {
40+
devServer: Config.DevServer;
41+
entryPoints: Config.TypedChainedMap<Config, Config.EntryPoint>;
42+
module: Config.Module;
43+
node: Config.ChainedMap<this>;
44+
output: Config.Output;
45+
optimization: Config.Optimization;
46+
performance: Config.Performance;
47+
plugins: Config.Plugins<this>;
48+
resolve: Config.Resolve;
49+
resolveLoader: Config.ResolveLoader;
50+
51+
amd(value: { [moduleName: string]: boolean }): this;
52+
bail(value: boolean): this;
53+
cache(value: boolean | any): this;
54+
devtool(value: Config.DevTool): this;
55+
context(value: string): this;
56+
externals(value: webpack.ExternalsElement | webpack.ExternalsElement[]): this;
57+
loader(value: any): this;
58+
mode(value: 'development' | 'production') : this;
59+
parallelism(value: number) : this;
60+
profile(value: boolean): this;
61+
recordsPath(value: string): this;
62+
recordsInputPath(value: string): this;
63+
recordsOutputPath(value: string): this;
64+
stats(value: webpack.Options.Stats): this;
65+
target(value: string): this;
66+
watch(value: boolean): this;
67+
watchOptions(value: webpack.Options.WatchOptions): this;
68+
69+
entry(name: string): Config.EntryPoint;
70+
plugin(name: string): Config.Plugin<this>;
71+
72+
toConfig(): webpack.Configuration;
73+
}
74+
75+
declare namespace Config {
76+
class Chained<Parent> extends __Config.Chained<Parent> {}
77+
class TypedChainedMap<Parent, Value> extends __Config.TypedChainedMap<Parent, Value> {}
78+
class ChainedMap<Parent> extends __Config.TypedChainedMap<Parent, any> {}
79+
class TypedChainedSet<Parent, Value> extends __Config.TypedChainedSet<Parent, Value> {}
80+
class ChainedSet<Parent> extends __Config.TypedChainedSet<Parent, any> {}
81+
82+
class Plugins<Parent> extends TypedChainedMap<Parent, Plugin<Parent>> {}
83+
84+
class Plugin<Parent> extends ChainedMap<Parent> implements Orderable {
85+
init(value: (plugin: PluginClass, args: any[]) => webpack.Plugin): this;
86+
use(plugin: PluginClass, args?: any[]): this;
87+
tap(f: (args: any[]) => any[]): this;
88+
89+
// Orderable
90+
before(name: string): this;
91+
after(name: string): this;
92+
}
93+
94+
class Module extends ChainedMap<Config> {
95+
rules: TypedChainedMap<this, Rule>;
96+
rule(name: string): Rule;
97+
noParse(noParse: RegExp | RegExp[] | ((contentPath: string) => boolean)): this;
98+
}
99+
100+
class Output extends ChainedMap<Config> {
101+
auxiliaryComment(value: string | { [comment:string]: string }): this;
102+
chunkFilename(value: string): this;
103+
chunkLoadTimeout(value: number): this;
104+
crossOriginLoading(value: boolean | string): this;
105+
filename(value: string): this;
106+
library(value: string): this;
107+
libraryExport(value: string | string[]): this;
108+
libraryTarget(value: string): this;
109+
devtoolFallbackModuleFilenameTemplate(value: any): this;
110+
devtoolLineToLine(value: any): this;
111+
devtoolModuleFilenameTemplate(value: any): this;
112+
hashFunction(value: string): this;
113+
hashDigest(value: string): this;
114+
hashDigestLength(value: number): this;
115+
hashSalt(value: any): this;
116+
hotUpdateChunkFilename(value: string): this;
117+
hotUpdateFunction(value: any): this;
118+
hotUpdateMainFilename(value: string): this;
119+
jsonpFunction(value: string): this;
120+
path(value: string): this;
121+
pathinfo(value: boolean): this;
122+
publicPath(value: string): this;
123+
sourceMapFilename(value: string): this;
124+
sourcePrefix(value: string): this;
125+
strictModuleExceptionHandling(value: boolean): this;
126+
umdNamedDefine(value: boolean): this;
127+
}
128+
129+
class DevServer extends ChainedMap<Config> {
130+
allowedHosts: TypedChainedSet<this, string>;
131+
132+
133+
bonjour(value: boolean): this;
134+
clientLogLevel(value: 'none' | 'error' | 'warning' | 'info'): this;
135+
color(value: boolean): this;
136+
compress(value: boolean): this;
137+
contentBase(value: boolean | string | string[]): this;
138+
disableHostCheck(value: boolean): this;
139+
filename(value: string): this;
140+
headers(value: { [header: string]: string }): this;
141+
historyApiFallback(value: boolean | any): this;
142+
host(value: string): this;
143+
hot(value: boolean): this;
144+
hotOnly(value: boolean): this;
145+
https(value: boolean | https.ServerOptions): this;
146+
inline(value: boolean): this;
147+
info(value: boolean): this;
148+
lazy(value: boolean): this;
149+
noInfo(value: boolean): this;
150+
open(value: boolean): this;
151+
overlay(value: boolean | { warnings?: boolean, errors?: boolean }): this;
152+
pfx(value: string): this;
153+
pfxPassphrase(value: string): this;
154+
port(value: number): this;
155+
progress(value: boolean): this;
156+
proxy(value: any): this;
157+
public(value: string): this;
158+
publicPath(publicPath: string): this;
159+
quiet(value: boolean): this;
160+
setup(value: (expressApp: any) => void): this;
161+
socket(value: string): this;
162+
staticOptions(value: any): this;
163+
stats(value: webpack.Options.Stats): this;
164+
stdin(value: boolean): this;
165+
useLocalIp(value: boolean): this;
166+
watchContentBase(value: boolean): this;
167+
watchOptions(value: any): this;
168+
}
169+
170+
class Performance extends ChainedMap<Config> {
171+
hints(value: boolean | 'error' | 'warning'): this;
172+
maxEntrypointSize(value: number): this;
173+
maxAssetSize(value: number): this;
174+
assetFilter(value: (assetFilename: string) => boolean): this;
175+
}
176+
177+
class EntryPoint extends TypedChainedSet<Config, string> {}
178+
179+
class Resolve extends ChainedMap<Config> {
180+
alias: TypedChainedMap<this, string>;
181+
aliasFields: TypedChainedSet<this, string>;
182+
descriptionFiles: TypedChainedSet<this, string>;
183+
extensions: TypedChainedSet<this, string>;
184+
mainFields: TypedChainedSet<this, string>;
185+
mainFiles: TypedChainedSet<this, string>;
186+
modules: TypedChainedSet<this, string>;
187+
plugins: TypedChainedMap<this, Plugin<this>>;
188+
189+
enforceExtension(value: boolean): this;
190+
enforceModuleExtension(value: boolean): this;
191+
unsafeCache(value: boolean | RegExp | RegExp[]): this;
192+
symlinks(value: boolean): this;
193+
cachePredicate(value: (data: { path: string, request: string }) => boolean): this;
194+
cacheWithContext(value: boolean): this;
195+
196+
plugin(name: string): Plugin<this>;
197+
}
198+
199+
class ResolveLoader extends ChainedMap<Config> {
200+
extensions: TypedChainedSet<this, string>;
201+
modules: TypedChainedSet<this, string>;
202+
moduleExtensions: TypedChainedSet<this, string>;
203+
packageMains: TypedChainedSet<this, string>;
204+
}
205+
206+
class Rule extends ChainedMap<Module> {
207+
oneOfs: TypedChainedMap<this, OneOf>;
208+
uses: TypedChainedMap<this, Use>;
209+
include: TypedChainedSet<this, webpack.Condition>;
210+
exclude: TypedChainedSet<this, webpack.Condition>;
211+
212+
parser(value: { [optName: string]: any }): this;
213+
test(value: webpack.Condition | webpack.Condition[]): this;
214+
enforce(value: 'pre' | 'post'): this;
215+
216+
use(name: string): Use;
217+
oneOf(name: string): OneOf;
218+
pre(): this;
219+
post(): this;
220+
}
221+
222+
class Optimization extends ChainedMap<Config> {
223+
concatenateModules(value: boolean): this;
224+
flagIncludedChunks(value: boolean): this;
225+
mergeDuplicateChunks(value: boolean): this;
226+
minimize(value: boolean): this;
227+
minimizer(name: string): Config.Plugin<this>;
228+
namedChunks(value: boolean): this;
229+
namedModules(value: boolean): this;
230+
nodeEnv(value: boolean | string): this;
231+
noEmitOnErrors(value: boolean): this;
232+
occurrenceOrder(value: boolean): this;
233+
portableRecords(value: boolean): this;
234+
providedExports(value: boolean): this;
235+
removeAvailableModules(value: boolean): this;
236+
removeEmptyChunks(value: boolean): this;
237+
runtimeChunk(value: boolean | "single" | "multiple" | RuntimeChunk): this;
238+
sideEffects(value: boolean): this;
239+
splitChunks(value: SplitChunksOptions): this;
240+
usedExports(value: boolean): this;
241+
}
242+
243+
interface RuntimeChunk {
244+
name: string | RuntimeChunkFunction;
245+
}
246+
247+
type RuntimeChunkFunction = (entryPoint: EntryPoint) => string;
248+
249+
interface SplitChunksOptions { [name: string]: any; }
250+
251+
interface LoaderOptions { [name: string]: any; }
252+
253+
class Use extends ChainedMap<Rule> implements Orderable {
254+
loader(value: string): this;
255+
options(value: LoaderOptions): this;
256+
257+
tap(f: (options: LoaderOptions) => LoaderOptions): this;
258+
259+
// Orderable
260+
before(name: string): this;
261+
after(name: string): this;
262+
}
263+
264+
class OneOf extends ChainedMap<Rule> implements Orderable {
265+
resourceQuery(value: webpack.Condition | webpack.Condition[]): this;
266+
use(name: string): Use;
267+
268+
// Orderable
269+
before(name: string): this;
270+
after(name: string): this;
271+
}
272+
273+
type DevTool = 'eval' | 'inline-source-map' | 'cheap-eval-source-map' | 'cheap-source-map' |
274+
'cheap-module-eval-source-map' | 'cheap-module-source-map' | 'eval-source-map' | 'source-map' |
275+
'nosources-source-map' | 'hidden-source-map' | 'nosources-source-map' | '@eval' |
276+
'@inline-source-map' | '@cheap-eval-source-map' | '@cheap-source-map' |
277+
'@cheap-module-eval-source-map' | '@cheap-module-source-map' | '@eval-source-map' |
278+
'@source-map' | '@nosources-source-map' | '@hidden-source-map' | '@nosources-source-map' |
279+
'#eval' | '#inline-source-map' | '#cheap-eval-source-map' | '#cheap-source-map' |
280+
'#cheap-module-eval-source-map' | '#cheap-module-source-map' | '#eval-source-map' |
281+
'#source-map' | '#nosources-source-map' | '#hidden-source-map' | '#nosources-source-map' |
282+
'#@eval' | '#@inline-source-map' | '#@cheap-eval-source-map' | '#@cheap-source-map' |
283+
'#@cheap-module-eval-source-map' | '#@cheap-module-source-map' | '#@eval-source-map' |
284+
'#@source-map' | '#@nosources-source-map' | '#@hidden-source-map' | '#@nosources-source-map' |
285+
boolean;
286+
287+
interface PluginClass {
288+
new (...opts: any[]): webpack.Plugin;
289+
}
290+
291+
interface Orderable {
292+
before(name: string): this;
293+
after(name: string): this;
294+
}
295+
}

‎types/test/tsconfig.json

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"compilerOptions": {
3+
"module": "commonjs",
4+
"lib": ["es6"],
5+
"noImplicitAny": true,
6+
"noImplicitThis": true,
7+
"strictNullChecks": true,
8+
"strictFunctionTypes": true,
9+
"noEmit": true,
10+
"baseUrl": ".",
11+
"paths": {
12+
"webpack-chain": ["../index.d.ts"]
13+
}
14+
},
15+
"files": ["../index.d.ts", "webpack-chain-tests.ts"],
16+
"compileOnSave": false
17+
}

‎types/test/webpack-chain-tests.ts

+289
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,289 @@
1+
/**
2+
* Notes: The order structure of the type check follows the order
3+
* of this document: https://github.com/neutrinojs/webpack-chain#config
4+
*/
5+
import Config = require('webpack-chain');
6+
import * as webpack from 'webpack';
7+
8+
const config = new Config();
9+
10+
config
11+
.amd({ foo: true })
12+
.bail(true)
13+
.cache(false)
14+
.cache({})
15+
.devtool('hidden-source-map')
16+
.devtool(false)
17+
.context('')
18+
.externals('foo')
19+
.externals(/node_modules/)
20+
.externals({ test: false, foo: 'bar' })
21+
.externals(['foo', 'bar'])
22+
.externals((context, request, cb) => cb(null, true))
23+
.loader({})
24+
.mode("development")
25+
.mode("production")
26+
.profile(false)
27+
.parallelism(2)
28+
.recordsPath('')
29+
.recordsInputPath('')
30+
.recordsOutputPath('')
31+
.stats({
32+
assets: false,
33+
publicPath: true,
34+
modules: false
35+
})
36+
.target('web')
37+
.watch(true)
38+
.watchOptions({})
39+
.when(false, config => config.watch(true), config => config.watch(false))
40+
41+
.entry('main')
42+
.add('index.js')
43+
.delete('index.js')
44+
.clear()
45+
.when(false, entry => entry.clear(), entry => entry.clear())
46+
.end()
47+
48+
.entryPoints
49+
.delete('main')
50+
.end()
51+
52+
.output
53+
.auxiliaryComment('Test Comment')
54+
.auxiliaryComment({
55+
root: 'Root Comment'
56+
})
57+
.chunkFilename('')
58+
.chunkLoadTimeout(1000)
59+
.crossOriginLoading(true)
60+
.devtoolFallbackModuleFilenameTemplate('')
61+
.devtoolLineToLine('')
62+
.devtoolModuleFilenameTemplate('')
63+
.filename('main.js')
64+
.hashFunction('md5')
65+
.hashDigest('md5')
66+
.hashDigestLength(15)
67+
.hashSalt('')
68+
.hotUpdateChunkFilename('update')
69+
.hotUpdateFunction(() => {})
70+
.hotUpdateMainFilename('main')
71+
.jsonpFunction('callback')
72+
.library('var')
73+
.libraryExport(['MyModule', 'MySubModule'])
74+
.libraryTarget('var')
75+
.path('/')
76+
.pathinfo(true)
77+
.publicPath('/')
78+
.sourceMapFilename('index.js.map')
79+
.sourcePrefix('~')
80+
.strictModuleExceptionHandling(true)
81+
.umdNamedDefine(true)
82+
.end()
83+
84+
.resolve
85+
.cachePredicate(({ path, request }) => true)
86+
.cacheWithContext(true)
87+
.enforceExtension(true)
88+
.enforceModuleExtension(true)
89+
.unsafeCache(false)
90+
.unsafeCache(/foo/)
91+
.symlinks(true)
92+
.alias
93+
.set('foo', 'bar')
94+
.end()
95+
.modules
96+
.add('index.js')
97+
.end()
98+
.aliasFields
99+
.add('foo')
100+
.end()
101+
.descriptionFiles
102+
.add('foo')
103+
.end()
104+
.extensions
105+
.add('.js')
106+
.end()
107+
.mainFields
108+
.add('browser')
109+
.end()
110+
.mainFiles
111+
.add('index.js')
112+
.end()
113+
.plugin('foo')
114+
.use(webpack.DefinePlugin, [])
115+
.end()
116+
.plugins
117+
.delete('foo')
118+
.end()
119+
.end()
120+
121+
.resolveLoader
122+
.moduleExtensions
123+
.add('.js')
124+
.end()
125+
.packageMains
126+
.add('index.js')
127+
.end()
128+
.end()
129+
130+
.performance
131+
.hints(true)
132+
.hints('warning')
133+
.maxEntrypointSize(20000)
134+
.maxAssetSize(20000)
135+
.assetFilter(filename => true)
136+
.end()
137+
138+
.optimization
139+
.concatenateModules(true)
140+
.flagIncludedChunks(true)
141+
.mergeDuplicateChunks(true)
142+
.minimize(true)
143+
.namedChunks(true)
144+
.namedModules(true)
145+
.nodeEnv(true)
146+
.noEmitOnErrors(true)
147+
.occurrenceOrder(true)
148+
.portableRecords(true)
149+
.providedExports(true)
150+
.removeAvailableModules(true)
151+
.removeEmptyChunks(true)
152+
.runtimeChunk("single")
153+
.runtimeChunk({ name: ({}) => "hello" })
154+
.sideEffects(true)
155+
.splitChunks({})
156+
.usedExports(true)
157+
.minimizer('foo')
158+
.use(webpack.DefinePlugin)
159+
.tap((config) => [])
160+
.end()
161+
.end()
162+
163+
.plugin('foo')
164+
.use(webpack.DefinePlugin, [])
165+
.end()
166+
167+
.plugin('bar')
168+
.use(webpack.DefinePlugin, [])
169+
.before('foo')
170+
.end()
171+
172+
.plugin('baz')
173+
.use(webpack.DefinePlugin, [])
174+
.after('bar')
175+
.end()
176+
177+
.plugins
178+
.delete('foo')
179+
.delete('bar')
180+
.delete('baz')
181+
.end()
182+
183+
.node
184+
.set('__dirname', true)
185+
.delete('__dirname')
186+
.clear()
187+
.end()
188+
189+
.devServer
190+
.allowedHosts
191+
.add('host.com')
192+
.clear()
193+
.end()
194+
.bonjour(true)
195+
.clientLogLevel('error')
196+
.color(true)
197+
.compress(false)
198+
.contentBase('/')
199+
.contentBase(['foo', 'bar'])
200+
.disableHostCheck(true)
201+
.filename('hello')
202+
.headers({
203+
'Content-Type': 'text/css',
204+
})
205+
.historyApiFallback(true)
206+
.host('localhost')
207+
.hot(true)
208+
.hotOnly(true)
209+
.https(true)
210+
.inline(true)
211+
.info(true)
212+
.lazy(true)
213+
.noInfo(true)
214+
.open(true)
215+
.overlay(true)
216+
.overlay({
217+
warnings: true,
218+
errors: true,
219+
})
220+
.pfx('/path/to/file.pfx')
221+
.pfxPassphrase('passphrase')
222+
.port(8080)
223+
.progress(true)
224+
.proxy({})
225+
.public('foo')
226+
227+
.publicPath('bar')
228+
.quiet(false)
229+
.setup(app => {})
230+
.socket('socket')
231+
.staticOptions({})
232+
.stats({
233+
reasons: true,
234+
errors: true,
235+
warnings: false,
236+
})
237+
.stdin(true)
238+
.useLocalIp(true)
239+
.watchContentBase(true)
240+
.watchOptions({})
241+
.end()
242+
243+
.module
244+
.noParse(/.min.js$/)
245+
.rule('compile')
246+
.test(/.js$/)
247+
.include
248+
.add(/.js$/)
249+
.end()
250+
.exclude
251+
.add(/node_modules/)
252+
.end()
253+
.parser({
254+
opt: 'foo',
255+
})
256+
.enforce('pre')
257+
.use('babel')
258+
.tap((config) => [])
259+
.loader('babel-loader')
260+
.options({})
261+
.end()
262+
.use('eslint')
263+
.loader('eslint-loader')
264+
.options({})
265+
.after('babel')
266+
.end()
267+
.uses
268+
.delete('babel')
269+
.delete('eslint')
270+
.end()
271+
.pre()
272+
.post()
273+
.oneOf('inline')
274+
.after('vue')
275+
.resourceQuery(/inline/)
276+
.use('url')
277+
.loader('url-loader')
278+
.end()
279+
.oneOfs
280+
.delete('inline')
281+
.end()
282+
.end()
283+
.rules
284+
.delete('compile')
285+
.end()
286+
.end()
287+
288+
.merge({})
289+
.toConfig();

‎types/typings.json

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"name": "webpack-chain",
3+
"main": "index.d.ts"
4+
}

‎yarn.lock

+38
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,39 @@
333333
dependencies:
334334
arrify "^1.0.1"
335335

336+
"@types/anymatch@*":
337+
version "1.3.0"
338+
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.0.tgz#d1d55958d1fccc5527d4aba29fc9c4b942f563ff"
339+
integrity sha512-7WcbyctkE8GTzogDb0ulRAEw7v8oIS54ft9mQTU7PfM0hp5e+8kpa+HeQ7IQrFbKtJXBKcZ4bh+Em9dTw5L6AQ==
340+
341+
"@types/node@*", "@types/node@^10.12.17":
342+
version "10.12.17"
343+
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.17.tgz#7040565b2c93d59325a68fa69073e754a7eda93a"
344+
integrity sha512-umSCRkjWH70uNzFiOof5yxCqrMXIBJ9UJJUzbEsmtWt8apURQh06pylGMqnhdjHGJSeoBrhzk+mibu6NgL1oBA==
345+
346+
"@types/tapable@*":
347+
version "1.0.4"
348+
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.4.tgz#b4ffc7dc97b498c969b360a41eee247f82616370"
349+
integrity sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==
350+
351+
"@types/uglify-js@*":
352+
version "3.0.4"
353+
resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082"
354+
integrity sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==
355+
dependencies:
356+
source-map "^0.6.1"
357+
358+
"@types/webpack@^4.4.21":
359+
version "4.4.21"
360+
resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.4.21.tgz#1a80de6d3e465f35067dd2f4533bf6e04c2e7187"
361+
integrity sha512-QJfA6GeLSlnx8yyrEQ7fNLYj1MYKzqHlo89skOwnKG4nblpwAyXe9Gcm/eTz/BpX0vBEtiehrSv9b/W9TMkhKg==
362+
dependencies:
363+
"@types/anymatch" "*"
364+
"@types/node" "*"
365+
"@types/tapable" "*"
366+
"@types/uglify-js" "*"
367+
source-map "^0.6.0"
368+
336369
"@webassemblyjs/ast@1.7.11":
337370
version "1.7.11"
338371
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace"
@@ -4804,6 +4837,11 @@ typedarray@^0.0.6:
48044837
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
48054838
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
48064839

4840+
typescript@^3.2.2:
4841+
version "3.2.2"
4842+
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.2.tgz#fe8101c46aa123f8353523ebdcf5730c2ae493e5"
4843+
integrity sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==
4844+
48074845
uglify-js@^3.1.4:
48084846
version "3.4.9"
48094847
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"

0 commit comments

Comments
 (0)
Please sign in to comment.