1 | const merge = require('deepmerge');
|
2 | const ChainedMap = require('./ChainedMap');
|
3 | const Orderable = require('./Orderable');
|
4 |
|
5 | module.exports = Orderable(
|
6 | class extends ChainedMap {
|
7 | constructor(parent, name) {
|
8 | super(parent);
|
9 | this.name = name;
|
10 | this.extend(['loader', 'options']);
|
11 | }
|
12 |
|
13 | tap(f) {
|
14 | this.options(f(this.get('options')));
|
15 | return this;
|
16 | }
|
17 |
|
18 | merge(obj, omit = []) {
|
19 | if (!omit.includes('loader') && 'loader' in obj) {
|
20 | this.loader(obj.loader);
|
21 | }
|
22 |
|
23 | if (!omit.includes('options') && 'options' in obj) {
|
24 | this.options(merge(this.store.get('options') || {}, obj.options));
|
25 | }
|
26 |
|
27 | return super.merge(obj, [...omit, 'loader', 'options']);
|
28 | }
|
29 |
|
30 | toConfig() {
|
31 | const config = this.clean(this.entries() || {});
|
32 |
|
33 | Object.defineProperties(config, {
|
34 | __useName: { value: this.name },
|
35 | __ruleNames: { value: this.parent && this.parent.names },
|
36 | });
|
37 |
|
38 | return config;
|
39 | }
|
40 | },
|
41 | );
|