UNPKG

rspack-chain

Version:

<p> <a href="https://npmjs.com/package/rspack-chain?activeTab=readme"> <img src="https://img.shields.io/npm/v/rspack-chain?style=flat-square&colorA=564341&colorB=EDED91" alt="npm version" /> </a> <a href="https://nodejs.org/en/about/previous-rele

63 lines (55 loc) 1.79 kB
const ChainedMap = require('./ChainedMap'); const Rule = require('./Rule'); module.exports = class extends ChainedMap { constructor(parent) { super(parent); this.rules = new ChainedMap(this); this.defaultRules = new ChainedMap(this); this.generator = new ChainedMap(this); this.parser = new ChainedMap(this); this.extend([ 'noParse', 'unsafeCache', // https://webpack.js.org/configuration/module/#module-contexts // since they are document as deprecated and will soon be removed // only the parameters that the demo is provided in the documentation are supported 'wrappedContextCritical', 'exprContextRegExp', 'wrappedContextRecursive', 'strictExportPresence', 'wrappedContextRegExp', ]); } defaultRule(name) { return this.defaultRules.getOrCompute( name, () => new Rule(this, name, 'defaultRule'), ); } rule(name) { return this.rules.getOrCompute(name, () => new Rule(this, name, 'rule')); } toConfig() { return this.clean( Object.assign(this.entries() || {}, { defaultRules: this.defaultRules.values().map((r) => r.toConfig()), generator: this.generator.entries(), parser: this.parser.entries(), rules: this.rules.values().map((r) => r.toConfig()), }), ); } merge(obj, omit = []) { if (!omit.includes('rule') && 'rule' in obj) { Object.keys(obj.rule).forEach((name) => this.rule(name).merge(obj.rule[name]), ); } if (!omit.includes('defaultRule') && 'defaultRule' in obj) { Object.keys(obj.defaultRule).forEach((name) => this.defaultRule(name).merge(obj.defaultRule[name]), ); } return super.merge(obj, ['rule', 'defaultRule']); } };