UNPKG

1.15 kBJavaScriptView Raw
1const ChainedMap = require('./ChainedMap');
2const Rule = require('./Rule');
3
4module.exports = class extends ChainedMap {
5 constructor(parent) {
6 super(parent);
7 this.rules = new ChainedMap(this);
8 this.defaultRules = new ChainedMap(this);
9 this.extend(['noParse']);
10 }
11
12 defaultRule(name) {
13 return this.defaultRules.getOrCompute(name, () => new Rule(this, name));
14 }
15
16 rule(name) {
17 return this.rules.getOrCompute(name, () => new Rule(this, name));
18 }
19
20 toConfig() {
21 return this.clean(
22 Object.assign(this.entries() || {}, {
23 defaultRules: this.defaultRules.values().map(r => r.toConfig()),
24 rules: this.rules.values().map(r => r.toConfig()),
25 }),
26 );
27 }
28
29 merge(obj, omit = []) {
30 if (!omit.includes('rule') && 'rule' in obj) {
31 Object.keys(obj.rule).forEach(name =>
32 this.rule(name).merge(obj.rule[name]),
33 );
34 }
35
36 if (!omit.includes('defaultRule') && 'defaultRule' in obj) {
37 Object.keys(obj.defaultRule).forEach(name =>
38 this.defaultRule(name).merge(obj.defaultRule[name]),
39 );
40 }
41
42 return super.merge(obj, ['rule', 'defaultRule']);
43 }
44};