UNPKG

foop

Version:

interfaces that describe their intentions.

127 lines (113 loc) 8.74 kB
var isUndefined = require('./deps/is/undefined') var MergeChain = require('./MergeChain') var MethodChain = require('./MethodChain') var ChainedMapBase = require('./ChainedMapBase') var composer = require('./compose/composer') /** * @desc ChainedMap composer * @category Chainable * @category Map * @memberOf ChainedMapBase * @class ChainedMap * @since 0.0.1 * @alias ComposeMap * @extends {ChainedMapBase} * * @param {Class | Object | Composable} [Target=ChainedMapBase] class to extend * @return {Class} ChainedMap * * @see ChainedMapBase * @tests ChainedMap * @types ChainedMap * * @example * * const heh = class {} * const composed = ChainedMap.compose(heh) * const hehchain = new Composed() * hehchain instanceof heh * //=> true * */ var ComposeChainedMap = function (Target) { var ChainedMap = Target // @NOTE compose now does this // const Composed = // Target === ChainedMapBase || Target.constructor.name === ChainedMapBase.constructor.name // ? Target // : ChainedMapBase.compose(Target) // class ChainedMap extends Composed {} /* prettier-ignore */ /* @private */ ChainedMap.prototype.methods = function(names) { return this.method(names) } /** * @desc the way to easily start building methods when using chainable instances * * @since 4.0.0 * @category methods * @alias methods * * @param {string | Array<string> | Primitive} names method names to add to the object * @return {MethodChain} @chainable * * @see MethodChain * * @example * * const chain = new Chain() * chain.method('eh').build() * chain.eh(true) * chain.get('eh') * //=> true * */ ChainedMap.prototype.method = function(names) { return new MethodChain(this).name(names) } /** * @desc merges an object with the current store * @since 0.4.0 * @category merge * * @param {Object} obj object to merge * @param {Function | null} [handleMergeFn=undefined] return the merger to the callback * @return {ChainedMap} @chainable * * @TODO needs to pass in additional opts somehow... * @see deps/dopemerge * @see MergeChain * * @example * * const chain = new Chain() * chain.set('eh', [1]) * chain.merge({eh: [2]}) * chain.get('eh') * //=> [1, 2] * * @example * * const chain = new Chain() * chain.set('emptyArr', []) * chain.merge({emptyArr: []}, mergeChain => * mergeChain.onExisting((a, b) => []).merger((a, b) => []).merge() * ) * chain.get('emptyArr').length) * //=> 0 * */ ChainedMap.prototype.merge = function(obj, handleMergeFn) { var merger = MergeChain.init(this) if (isUndefined(handleMergeFn)) { merger.merge(obj) } else { handleMergeFn(merger.obj(obj)) } return this } return ChainedMap } var composed = composer(ComposeChainedMap, ChainedMapBase) module.exports = composed //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhaW5lZE1hcC5qcyIsInNvdXJjZXMiOlsiQ2hhaW5lZE1hcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc1VuZGVmaW5lZCA9IHJlcXVpcmUoJy4vZGVwcy9pcy91bmRlZmluZWQnKVxuY29uc3QgTWVyZ2VDaGFpbiA9IHJlcXVpcmUoJy4vTWVyZ2VDaGFpbicpXG5jb25zdCBNZXRob2RDaGFpbiA9IHJlcXVpcmUoJy4vTWV0aG9kQ2hhaW4nKVxuY29uc3QgQ2hhaW5lZE1hcEJhc2UgPSByZXF1aXJlKCcuL0NoYWluZWRNYXBCYXNlJylcbmNvbnN0IGNvbXBvc2VyID0gcmVxdWlyZSgnLi9jb21wb3NlL2NvbXBvc2VyJylcblxuLyoqXG4gKiBAZGVzYyBDaGFpbmVkTWFwIGNvbXBvc2VyXG4gKiBAY2F0ZWdvcnkgQ2hhaW5hYmxlXG4gKiBAY2F0ZWdvcnkgTWFwXG4gKiBAbWVtYmVyT2YgQ2hhaW5lZE1hcEJhc2VcbiAqIEBjbGFzcyBDaGFpbmVkTWFwXG4gKiBAc2luY2UgMC4wLjFcbiAqIEBhbGlhcyBDb21wb3NlTWFwXG4gKiBAZXh0ZW5kcyB7Q2hhaW5lZE1hcEJhc2V9XG4gKlxuICogQHBhcmFtIHtDbGFzcyB8IE9iamVjdCB8IENvbXBvc2FibGV9IFtUYXJnZXQ9Q2hhaW5lZE1hcEJhc2VdIGNsYXNzIHRvIGV4dGVuZFxuICogQHJldHVybiB7Q2xhc3N9IENoYWluZWRNYXBcbiAqXG4gKiBAc2VlIENoYWluZWRNYXBCYXNlXG4gKiBAdGVzdHMgQ2hhaW5lZE1hcFxuICogQHR5cGVzIENoYWluZWRNYXBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgIGNvbnN0IGhlaCA9IGNsYXNzIHt9XG4gKiAgICBjb25zdCBjb21wb3NlZCA9IENoYWluZWRNYXAuY29tcG9zZShoZWgpXG4gKiAgICBjb25zdCBoZWhjaGFpbiA9IG5ldyBDb21wb3NlZCgpXG4gKiAgICBoZWhjaGFpbiBpbnN0YW5jZW9mIGhlaFxuICogICAgLy89PiB0cnVlXG4gKlxuICovXG5cbmNvbnN0IENvbXBvc2VDaGFpbmVkTWFwID0gVGFyZ2V0ID0+IHtcbiAgbGV0IENoYWluZWRNYXAgPSBUYXJnZXRcblxuICAvLyBATk9URSBjb21wb3NlIG5vdyBkb2VzIHRoaXNcbiAgLy8gY29uc3QgQ29tcG9zZWQgPVxuICAvLyAgIFRhcmdldCA9PT0gQ2hhaW5lZE1hcEJhc2UgfHwgVGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUgPT09IENoYWluZWRNYXBCYXNlLmNvbnN0cnVjdG9yLm5hbWVcbiAgLy8gICAgID8gVGFyZ2V0XG4gIC8vICAgICA6IENoYWluZWRNYXBCYXNlLmNvbXBvc2UoVGFyZ2V0KVxuXG4gIC8vIGNsYXNzIENoYWluZWRNYXAgZXh0ZW5kcyBDb21wb3NlZCB7fVxuXG4gIC8qIHByZXR0aWVyLWlnbm9yZSAqL1xuICAvKiBAcHJpdmF0ZSAqL1xuICBDaGFpbmVkTWFwLnByb3RvdHlwZS5tZXRob2RzID0gZnVuY3Rpb24obmFtZXMpIHsgcmV0dXJuIHRoaXMubWV0aG9kKG5hbWVzKSB9XG5cbiAgLyoqXG4gICAqIEBkZXNjIHRoZSB3YXkgdG8gZWFzaWx5IHN0YXJ0IGJ1aWxkaW5nIG1ldGhvZHMgd2hlbiB1c2luZyBjaGFpbmFibGUgaW5zdGFuY2VzXG4gICAqXG4gICAqIEBzaW5jZSA0LjAuMFxuICAgKiBAY2F0ZWdvcnkgbWV0aG9kc1xuICAgKiBAYWxpYXMgbWV0aG9kc1xuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheTxzdHJpbmc+IHwgUHJpbWl0aXZlfSBuYW1lcyBtZXRob2QgbmFtZXMgdG8gYWRkIHRvIHRoZSBvYmplY3RcbiAgICogQHJldHVybiB7TWV0aG9kQ2hhaW59IEBjaGFpbmFibGVcbiAgICpcbiAgICogQHNlZSBNZXRob2RDaGFpblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiAgIGNvbnN0IGNoYWluID0gbmV3IENoYWluKClcbiAgICogICBjaGFpbi5tZXRob2QoJ2VoJykuYnVpbGQoKVxuICAgKiAgIGNoYWluLmVoKHRydWUpXG4gICAqICAgY2hhaW4uZ2V0KCdlaCcpXG4gICAqICAgLy89PiB0cnVlXG4gICAqXG4gICAqL1xuICBDaGFpbmVkTWFwLnByb3RvdHlwZS5tZXRob2QgPSBmdW5jdGlvbihuYW1lcykge1xuICAgIHJldHVybiBuZXcgTWV0aG9kQ2hhaW4odGhpcykubmFtZShuYW1lcylcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzYyBtZXJnZXMgYW4gb2JqZWN0IHdpdGggdGhlIGN1cnJlbnQgc3RvcmVcbiAgICogQHNpbmNlIDAuNC4wXG4gICAqIEBjYXRlZ29yeSBtZXJnZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIG9iamVjdCB0byBtZXJnZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgbnVsbH0gW2hhbmRsZU1lcmdlRm49dW5kZWZpbmVkXSByZXR1cm4gdGhlIG1lcmdlciB0byB0aGUgY2FsbGJhY2tcbiAgICogQHJldHVybiB7Q2hhaW5lZE1hcH0gQGNoYWluYWJsZVxuICAgKlxuICAgKiBAVE9ETyBuZWVkcyB0byBwYXNzIGluIGFkZGl0aW9uYWwgb3B0cyBzb21laG93Li4uXG4gICAqIEBzZWUgZGVwcy9kb3BlbWVyZ2VcbiAgICogQHNlZSBNZXJnZUNoYWluXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIGNvbnN0IGNoYWluID0gbmV3IENoYWluKClcbiAgICogICAgY2hhaW4uc2V0KCdlaCcsIFsxXSlcbiAgICogICAgY2hhaW4ubWVyZ2Uoe2VoOiBbMl19KVxuICAgKiAgICBjaGFpbi5nZXQoJ2VoJylcbiAgICogICAgLy89PiBbMSwgMl1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogICBjb25zdCBjaGFpbiA9IG5ldyBDaGFpbigpXG4gICAqICAgY2hhaW4uc2V0KCdlbXB0eUFycicsIFtdKVxuICAgKiAgIGNoYWluLm1lcmdlKHtlbXB0eUFycjogW119LCBtZXJnZUNoYWluID0+XG4gICAqICAgICBtZXJnZUNoYWluLm9uRXhpc3RpbmcoKGEsIGIpID0+IFtdKS5tZXJnZXIoKGEsIGIpID0+IFtdKS5tZXJnZSgpXG4gICAqICAgKVxuICAgKiAgIGNoYWluLmdldCgnZW1wdHlBcnInKS5sZW5ndGgpXG4gICAqICAgLy89PiAwXG4gICAqXG4gICAqL1xuICBDaGFpbmVkTWFwLnByb3RvdHlwZS5tZXJnZSA9IGZ1bmN0aW9uKG9iaiwgaGFuZGxlTWVyZ2VGbikge1xuICAgIGNvbnN0IG1lcmdlciA9IE1lcmdlQ2hhaW4uaW5pdCh0aGlzKVxuXG4gICAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZU1lcmdlRm4pKSB7XG4gICAgICBtZXJnZXIubWVyZ2Uob2JqKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGhhbmRsZU1lcmdlRm4obWVyZ2VyLm9iaihvYmopKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICByZXR1cm4gQ2hhaW5lZE1hcFxufVxuXG5cbmNvbnN0IGNvbXBvc2VkID0gY29tcG9zZXIoQ29tcG9zZUNoYWluZWRNYXAsIENoYWluZWRNYXBCYXNlKVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBvc2VkXG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztBQUNsREEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQzFDQSxHQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7QUFDNUNBLEdBQUssQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO0FBQ2xEQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QjlDQSxHQUFLLENBQUMsaUJBQWlCLEdBQUcsVUFBQSxNQUFNLENBQUEsQ0FBQyxBQUFHO0VBQ2xDQyxHQUFHLENBQUMsVUFBVSxHQUFHLE1BQU07Ozs7Ozs7Ozs7OztFQVl2QixVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxTQUFTLEtBQUssRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF1QjVFLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsS0FBSyxFQUFFO0lBQzVDLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztHQUN6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtDRCxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsRUFBRSxhQUFhLEVBQUU7SUFDeERELEdBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7O0lBRXBDLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxFQUFFO01BQzlCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0tBQ2xCO1NBQ0k7TUFDSCxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMvQjs7SUFFRCxPQUFPLElBQUk7R0FDWjs7RUFFRCxPQUFPLFVBQVU7Q0FDbEI7OztBQUdEQSxHQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLENBQUM7O0FBRTVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsUUFBUTsifQ==