UNPKG

chain-able

Version:

interfaces that describe their intentions.

125 lines (115 loc) 8.7 kB
var isUndefined = require('./deps/is/undefined') var MergeChain = require('./MergeChain') var MethodChain = require('./MethodChain') var ChainedMapCore = require('./ChainedMapBase') /** * @desc ChainedMap composer * @category Chainable * @category Map * @class ChainedMap * @since 0.0.1 * @alias ComposeMap * @extends {ChainedMapBase} * * @param {Class | Object | Composable} [SuperClass=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 CM = function (SuperClass) { var Composed = SuperClass === ChainedMapCore ? SuperClass : ChainedMapCore.compose(SuperClass) var ChainedMap = (function (Composed) { function ChainedMap () { Composed.apply(this, arguments); } if ( Composed ) ChainedMap.__proto__ = Composed; ChainedMap.prototype = Object.create( Composed && Composed.prototype ); ChainedMap.prototype.constructor = ChainedMap; ChainedMap.prototype.methods = function methods (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 method (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 merge (obj, handleMergeFn) { var merger = MergeChain.init(this) if (isUndefined(handleMergeFn)) { merger.merge(obj) } else { handleMergeFn(merger.obj(obj)) } return this }; return ChainedMap; }(Composed)); return ChainedMap } var cm = CM(ChainedMapCore) cm.compose = CM module.exports = cm //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2hhaW5lZE1hcC5qcyIsInNvdXJjZXMiOlsiQ2hhaW5lZE1hcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc1VuZGVmaW5lZCA9IHJlcXVpcmUoJy4vZGVwcy9pcy91bmRlZmluZWQnKVxuY29uc3QgTWVyZ2VDaGFpbiA9IHJlcXVpcmUoJy4vTWVyZ2VDaGFpbicpXG5jb25zdCBNZXRob2RDaGFpbiA9IHJlcXVpcmUoJy4vTWV0aG9kQ2hhaW4nKVxuY29uc3QgQ2hhaW5lZE1hcENvcmUgPSByZXF1aXJlKCcuL0NoYWluZWRNYXBCYXNlJylcblxuLyoqXG4gKiBAZGVzYyBDaGFpbmVkTWFwIGNvbXBvc2VyXG4gKiBAY2F0ZWdvcnkgQ2hhaW5hYmxlXG4gKiBAY2F0ZWdvcnkgTWFwXG4gKiBAY2xhc3MgQ2hhaW5lZE1hcFxuICogQHNpbmNlIDAuMC4xXG4gKiBAYWxpYXMgQ29tcG9zZU1hcFxuICogQGV4dGVuZHMge0NoYWluZWRNYXBCYXNlfVxuICpcbiAqIEBwYXJhbSB7Q2xhc3MgfCBPYmplY3QgfCBDb21wb3NhYmxlfSBbU3VwZXJDbGFzcz1DaGFpbmVkTWFwQmFzZV0gY2xhc3MgdG8gZXh0ZW5kXG4gKiBAcmV0dXJuIHtDbGFzc30gQ2hhaW5lZE1hcFxuICpcbiAqIEBzZWUgQ2hhaW5lZE1hcEJhc2VcbiAqIEB0ZXN0cyBDaGFpbmVkTWFwXG4gKiBAdHlwZXMgQ2hhaW5lZE1hcFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgY29uc3QgaGVoID0gY2xhc3Mge31cbiAqICAgIGNvbnN0IGNvbXBvc2VkID0gQ2hhaW5lZE1hcC5jb21wb3NlKGhlaClcbiAqICAgIGNvbnN0IGhlaGNoYWluID0gbmV3IENvbXBvc2VkKClcbiAqICAgIGhlaGNoYWluIGluc3RhbmNlb2YgaGVoXG4gKiAgICAvLz0+IHRydWVcbiAqXG4gKi9cbmNvbnN0IENNID0gU3VwZXJDbGFzcyA9PiB7XG4gIGNvbnN0IENvbXBvc2VkID0gU3VwZXJDbGFzcyA9PT0gQ2hhaW5lZE1hcENvcmVcbiAgICA/IFN1cGVyQ2xhc3NcbiAgICA6IENoYWluZWRNYXBDb3JlLmNvbXBvc2UoU3VwZXJDbGFzcylcblxuICBjbGFzcyBDaGFpbmVkTWFwIGV4dGVuZHMgQ29tcG9zZWQge1xuICAgIC8qIHByZXR0aWVyLWlnbm9yZSAqL1xuICAgIC8qIEBwcml2YXRlICovXG4gICAgbWV0aG9kcyhuYW1lcykgeyByZXR1cm4gdGhpcy5tZXRob2QobmFtZXMpIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIHRoZSB3YXkgdG8gZWFzaWx5IHN0YXJ0IGJ1aWxkaW5nIG1ldGhvZHMgd2hlbiB1c2luZyBjaGFpbmFibGUgaW5zdGFuY2VzXG4gICAgICpcbiAgICAgKiBAc2luY2UgNC4wLjBcbiAgICAgKiBAY2F0ZWdvcnkgbWV0aG9kc1xuICAgICAqIEBhbGlhcyBtZXRob2RzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheTxzdHJpbmc+IHwgUHJpbWl0aXZlfSBuYW1lcyBtZXRob2QgbmFtZXMgdG8gYWRkIHRvIHRoZSBvYmplY3RcbiAgICAgKiBAcmV0dXJuIHtNZXRob2RDaGFpbn0gQGNoYWluYWJsZVxuICAgICAqXG4gICAgICogQHNlZSBNZXRob2RDaGFpblxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqICAgY29uc3QgY2hhaW4gPSBuZXcgQ2hhaW4oKVxuICAgICAqICAgY2hhaW4ubWV0aG9kKCdlaCcpLmJ1aWxkKClcbiAgICAgKiAgIGNoYWluLmVoKHRydWUpXG4gICAgICogICBjaGFpbi5nZXQoJ2VoJylcbiAgICAgKiAgIC8vID0+IHRydWVcbiAgICAgKlxuICAgICAqL1xuICAgIG1ldGhvZChuYW1lcykge1xuICAgICAgcmV0dXJuIG5ldyBNZXRob2RDaGFpbih0aGlzKS5uYW1lKG5hbWVzKVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIG1lcmdlcyBhbiBvYmplY3Qgd2l0aCB0aGUgY3VycmVudCBzdG9yZVxuICAgICAqIEBzaW5jZSAwLjQuMFxuICAgICAqIEBjYXRlZ29yeSBtZXJnZVxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9iaiBvYmplY3QgdG8gbWVyZ2VcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgbnVsbH0gW2hhbmRsZU1lcmdlRm49dW5kZWZpbmVkXSByZXR1cm4gdGhlIG1lcmdlciB0byB0aGUgY2FsbGJhY2tcbiAgICAgKiBAcmV0dXJuIHtDaGFpbmVkTWFwfSBAY2hhaW5hYmxlXG4gICAgICpcbiAgICAgKiBAVE9ETyBuZWVkcyB0byBwYXNzIGluIGFkZGl0aW9uYWwgb3B0cyBzb21laG93Li4uXG4gICAgICogQHNlZSBkZXBzL2RvcGVtZXJnZVxuICAgICAqIEBzZWUgTWVyZ2VDaGFpblxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKlxuICAgICAqICAgIGNvbnN0IGNoYWluID0gbmV3IENoYWluKClcbiAgICAgKiAgICBjaGFpbi5zZXQoJ2VoJywgWzFdKVxuICAgICAqICAgIGNoYWluLm1lcmdlKHtlaDogWzJdfSlcbiAgICAgKiAgICBjaGFpbi5nZXQoJ2VoJylcbiAgICAgKiAgICAvLyA9PiBbMSwgMl1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgIGNvbnN0IGNoYWluID0gbmV3IENoYWluKClcbiAgICAgKiAgIGNoYWluLnNldCgnZW1wdHlBcnInLCBbXSlcbiAgICAgKiAgIGNoYWluLm1lcmdlKHtlbXB0eUFycjogW119LCBtZXJnZUNoYWluID0+XG4gICAgICogICAgIG1lcmdlQ2hhaW4ub25FeGlzdGluZygoYSwgYikgPT4gW10pLm1lcmdlcigoYSwgYikgPT4gW10pLm1lcmdlKClcbiAgICAgKiAgIClcbiAgICAgKiAgIGNoYWluLmdldCgnZW1wdHlBcnInKS5sZW5ndGgpXG4gICAgICogICAvLz0+IDBcbiAgICAgKlxuICAgICAqL1xuICAgIG1lcmdlKG9iaiwgaGFuZGxlTWVyZ2VGbikge1xuICAgICAgY29uc3QgbWVyZ2VyID0gTWVyZ2VDaGFpbi5pbml0KHRoaXMpXG4gICAgICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlTWVyZ2VGbikpIHtcbiAgICAgICAgbWVyZ2VyLm1lcmdlKG9iailcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBoYW5kbGVNZXJnZUZuKG1lcmdlci5vYmoob2JqKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG4gIHJldHVybiBDaGFpbmVkTWFwXG59XG5cbmNvbnN0IGNtID0gQ00oQ2hhaW5lZE1hcENvcmUpXG5jbS5jb21wb3NlID0gQ01cblxubW9kdWxlLmV4cG9ydHMgPSBjbVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUM7QUFDbERBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUMxQ0EsR0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0FBQzVDQSxHQUFLLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJsREEsR0FBSyxDQUFDLEVBQUUsR0FBRyxVQUFBLFVBQVUsQ0FBQSxDQUFDLEFBQUc7RUFDdkJBLEdBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxLQUFLLGNBQWM7TUFDMUMsVUFBVTtNQUNWLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDOztFQUV0QyxJQUFNLFVBQVUsR0FBaUI7SUFBQzs7Ozs7Ozs7SUFBQSxBQUdoQyxxQkFBQSxPQUFPLG9CQUFBLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBdUI1QyxxQkFBQSxNQUFNLG1CQUFBLENBQUMsS0FBSyxFQUFFO01BQ1osT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ3pDLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFrQ0QscUJBQUEsS0FBSyxrQkFBQSxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUU7TUFDeEJBLEdBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7TUFDcEMsSUFBSSxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7T0FDbEI7V0FDSTtRQUNILGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQy9CO01BQ0QsT0FBTyxJQUFJO0tBQ1osQ0FBQSxBQUNGOzs7SUF4RXdCLFFBd0V4QixHQUFBO0VBQ0QsT0FBTyxVQUFVO0NBQ2xCOztBQUVEQSxHQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7QUFDN0IsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFOztBQUVmLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRTsifQ==