Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
"use strict";

const _require = require("./Chains"),
      ChainedMap = _require.ChainedMap,
      ChainedSet = _require.ChainedSet,
      dopemerge = _require.dopemerge;

const Plugin = require("./Plugin");

module.exports = class extends ChainedMap {
  constructor(parent) {
    super(parent);
    this.alias = new ChainedMap(this);
    this.aliasFields = new ChainedSet(this);
    this.descriptionFiles = new ChainedSet(this);
    this.extensions = new ChainedSet(this);
    this.mainFields = new ChainedSet(this);
    this.mainFiles = new ChainedSet(this);
    this.modules = new ChainedSet(this);
    this.plugins = new ChainedMap(this);
    this.extend(['enforceExtension', 'enforceModuleExtension', 'unsafeCache', 'symlinks', 'cachePredicate']);
  }

  plugin(name) {
    if (!this.plugins.has(name)) {
      this.plugins.set(name, new Plugin(this));
    }

    return this.plugins.get(name);
  }

  toConfig() {
    return this.clean(Object.assign(this.entries() || {}, {
      alias: this.alias.entries(),
      aliasFields: this.aliasFields.values(),
      descriptionFiles: this.descriptionFiles.values(),
      extensions: this.extensions.values(),
      mainFields: this.mainFields.values(),
      mainFiles: this.mainFiles.values(),
      modules: this.modules.values(),
      plugins: this.plugins.values().map(plugin => plugin.toConfig())
    }));
  }

  merge(obj) {
    Object.keys(obj).forEach(key => {
      const value = obj[key];

      switch (key) {
        case 'alias':
        case 'aliasFields':
        case 'descriptionFiles':
        case 'extensions':
        case 'mainFields':
        case 'mainFiles':
        case 'modules':
        case 'plugins':
          {
            return this[key].merge(value);
          }

        default:
          {
            if (this.has(key)) {
              this.set(key, dopemerge(this.get(key), value));
            } else {
              this.set(key, value);
            }
          }
      }
    });
    return this;
  }

};