1 | const ChainedMap = require('./ChainedMap');
|
2 | const Plugin = require('./Plugin');
|
3 |
|
4 | module.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 | };
|