UNPKG

1.25 kBJavaScriptView Raw
1const ChainedMap = require('./ChainedMap');
2const Plugin = require('./Plugin');
3
4module.exports = class extends ChainedMap {
5 constructor(parent) {
6 super(parent);
7 this.minimizers = new ChainedMap(this);
8 this.extend([
9 'concatenateModules',
10 'flagIncludedChunks',
11 'mergeDuplicateChunks',
12 'minimize',
13 'namedChunks',
14 'namedModules',
15 'nodeEnv',
16 'noEmitOnErrors',
17 'occurrenceOrder',
18 'portableRecords',
19 'providedExports',
20 'removeAvailableModules',
21 'removeEmptyChunks',
22 'runtimeChunk',
23 'sideEffects',
24 'splitChunks',
25 'usedExports',
26 ]);
27 }
28
29 minimizer(name) {
30 return this.minimizers.getOrCompute(
31 name,
32 () => new Plugin(this, name, 'optimization.minimizer'),
33 );
34 }
35
36 toConfig() {
37 return this.clean(
38 Object.assign(this.entries() || {}, {
39 minimizer: this.minimizers.values().map(plugin => plugin.toConfig()),
40 }),
41 );
42 }
43
44 merge(obj, omit = []) {
45 if (!omit.includes('minimizer') && 'minimizer' in obj) {
46 Object.keys(obj.minimizer).forEach(name =>
47 this.minimizer(name).merge(obj.minimizer[name]),
48 );
49 }
50
51 return super.merge(obj, [...omit, 'minimizer']);
52 }
53};