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    
@skava/modules / ___dist / chain-able / container-builder / miniChainSnippet.js
Size: Mime:
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = exports.Snippet = void 0;

var _index = require("../index.js");

var _exotic = require("../../exotic");

let Snippet = class Snippet {
  // @LINT @TODO @JAMES @FIXME - disabled only to use in POC - will replace with full chain instead
  // eslint-disable-next-line
  constructor(parent) {
    // @NOTE declared here ONLY to write offline to assign methods that would be bound (which require babel)
    // eslint-disable-next-line
    let store, get, set, wrap, addMethod, extendGetSet, extend, entries, end;
    store = new Map();

    get = key => this.store.get(key);

    set = (key, val) => {
      this.store.set(key, val);
      return this;
    };

    entries = () => (0, _exotic.fromMapToObj)(this.store);

    wrap = fn => methods => {
      fn.apply(this, [methods]);
      return this;
    }; // curry, support obj again, copy simple into snippet until it uses full chain eh


    addMethod = (name, fn) => {
      if (typeof name === 'string') {
        this[name] = fn;
      } else {
        // object
        Object.keys(name).forEach(method => {
          this[method] = function () {
            const returned = name[method].apply(this, arguments); // default to this

            if (returned === undefined) {
              return this;
            } else {
              return returned;
            }
          };
        });
      }

      return this;
    }; // @NOTE arrow functions have no arguments object


    let self = this;

    extend = function extend(methodsAsArray) {
      // default to an array as single argument
      let methods = methodsAsArray; // then not using array

      if (arguments.length > 1) {
        methods = Array.from(arguments);
      }

      methods.forEach(method => {
        self[method] = val => self.set(method, val);
      });
    };

    end = () => parent;

    extendGetSet = methods => methods.forEach(method => {
      this[(0, _index.camelCase)('get-' + method)] = () => this.get(method);

      this[(0, _index.camelCase)('set-' + method)] = val => this.set(method, val);

      this.extend([method]);
    }); // add methods


    Object.assign(this, {
      store,
      get,
      set,
      addMethod,
      extendGetSet,
      extend,
      entries,
      end
    });
  }

  setDebug(shouldDebug = true) {
    return this.set('debug', shouldDebug);
  }

  getDebug() {
    return this.get('debug');
  }

}; // module.exports = Snippet
// module.exports.Snippet = Snippet
// module.exports.default = Snippet

exports.Snippet = Snippet;
var _default = Snippet;
exports.default = _default;