35 lines
783 B
JavaScript
35 lines
783 B
JavaScript
|
const Resolve = require('./Resolve');
|
||
|
const ChainedSet = require('./ChainedSet');
|
||
|
|
||
|
module.exports = class extends Resolve {
|
||
|
constructor(parent) {
|
||
|
super(parent);
|
||
|
this.moduleExtensions = new ChainedSet(this);
|
||
|
this.packageMains = new ChainedSet(this);
|
||
|
}
|
||
|
|
||
|
toConfig() {
|
||
|
return this.clean(
|
||
|
Object.assign(
|
||
|
{
|
||
|
moduleExtensions: this.moduleExtensions.values(),
|
||
|
packageMains: this.packageMains.values(),
|
||
|
},
|
||
|
super.toConfig()
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
merge(obj, omit = []) {
|
||
|
const omissions = ['moduleExtensions', 'packageMains'];
|
||
|
|
||
|
omissions.forEach(key => {
|
||
|
if (!omit.includes(key) && key in obj) {
|
||
|
this[key].merge(obj[key]);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
return super.merge(obj, [...omit, ...omissions]);
|
||
|
}
|
||
|
};
|