8bace8ba0d54612d0189db11c8aa2c751c77bc194556b21c4db16c3b644fd5b0d9ad334c52b459f739d3208bd529d74844b9ea8df8af6bd9f4be5d18201fb2 1.0 KB

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