UNPKG

chain-able

Version:

interfaces that describe their intentions.

53 lines (48 loc) 4.27 kB
var isObj = require('../deps/is/obj') var DECORATED_KEY = require('../deps/meta/decorated') var meta = require('../deps/meta') /** * decorates a parent when the argument is provided * BUT THE FUNCTIONS WILL STILL BE SCOPED TO CURRENT PARENT * for easy factory chaining * * @since 4.0.0-alpha.1 * @memberOf MethodChain * @param {Object} parentToDecorate object to put the method on instead * @return {MethodChain} @chainable * * @see MethodChain * * @TODO this is more like a preset since it *adds* plugins? * more of methodFactory now * * @example * * const chain = new Chain() * const obj = {} * chain.method('ehOh').decorate(obj).build() * typeof obj.ehOh * //=> 'function' * */ module.exports = function(parentToDecorate) { // @TODO is objStrict? // if (parentToDecorate) { this.target(parentToDecorate) // can use this to "undecorate" // if (!parentToDecorate.meta) <- checks already inside of meta() parentToDecorate.meta = meta(parentToDecorate) // default returns result of calling function, // else .parentToDecorate return this.plugin(function(name, parent) { parentToDecorate.meta(DECORATED_KEY, name) // @NOTE: so we can return... /* prettier-ignore */ return this .returns(function returnsFunction(result) { return result || parentToDecorate }) .callReturns(true) }) } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdGUuanMiLCJzb3VyY2VzIjpbImRlY29yYXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGlzT2JqID0gcmVxdWlyZSgnLi4vZGVwcy9pcy9vYmonKVxuY29uc3QgREVDT1JBVEVEX0tFWSA9IHJlcXVpcmUoJy4uL2RlcHMvbWV0YS9kZWNvcmF0ZWQnKVxuY29uc3QgbWV0YSA9IHJlcXVpcmUoJy4uL2RlcHMvbWV0YScpXG5cbi8qKlxuICogZGVjb3JhdGVzIGEgcGFyZW50IHdoZW4gdGhlIGFyZ3VtZW50IGlzIHByb3ZpZGVkXG4gKiBCVVQgVEhFIEZVTkNUSU9OUyBXSUxMIFNUSUxMIEJFIFNDT1BFRCBUTyBDVVJSRU5UIFBBUkVOVFxuICogZm9yIGVhc3kgZmFjdG9yeSBjaGFpbmluZ1xuICpcbiAqIEBzaW5jZSA0LjAuMC1hbHBoYS4xXG4gKiBAbWVtYmVyT2YgTWV0aG9kQ2hhaW5cbiAqIEBwYXJhbSAge09iamVjdH0gcGFyZW50VG9EZWNvcmF0ZSBvYmplY3QgdG8gcHV0IHRoZSBtZXRob2Qgb24gaW5zdGVhZFxuICogQHJldHVybiB7TWV0aG9kQ2hhaW59IEBjaGFpbmFibGVcbiAqXG4gKiBAc2VlIE1ldGhvZENoYWluXG4gKlxuICogQFRPRE8gdGhpcyBpcyBtb3JlIGxpa2UgYSBwcmVzZXQgc2luY2UgaXQgKmFkZHMqIHBsdWdpbnM/XG4gKiAgICAgICBtb3JlIG9mIG1ldGhvZEZhY3Rvcnkgbm93XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgIGNvbnN0IGNoYWluID0gbmV3IENoYWluKClcbiAqICAgY29uc3Qgb2JqID0ge31cbiAqICAgY2hhaW4ubWV0aG9kKCdlaE9oJykuZGVjb3JhdGUob2JqKS5idWlsZCgpXG4gKiAgIHR5cGVvZiBvYmouZWhPaFxuICogICAvLz0+ICdmdW5jdGlvbidcbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocGFyZW50VG9EZWNvcmF0ZSkge1xuICAvLyBAVE9ETyBpcyBvYmpTdHJpY3Q/XG4gIC8vIGlmIChwYXJlbnRUb0RlY29yYXRlKSB7XG4gIHRoaXMudGFyZ2V0KHBhcmVudFRvRGVjb3JhdGUpXG5cbiAgLy8gY2FuIHVzZSB0aGlzIHRvIFwidW5kZWNvcmF0ZVwiXG4gIC8vIGlmICghcGFyZW50VG9EZWNvcmF0ZS5tZXRhKSA8LSBjaGVja3MgYWxyZWFkeSBpbnNpZGUgb2YgbWV0YSgpXG4gIHBhcmVudFRvRGVjb3JhdGUubWV0YSA9IG1ldGEocGFyZW50VG9EZWNvcmF0ZSlcblxuICAvLyBkZWZhdWx0IHJldHVybnMgcmVzdWx0IG9mIGNhbGxpbmcgZnVuY3Rpb24sXG4gIC8vIGVsc2UgLnBhcmVudFRvRGVjb3JhdGVcbiAgcmV0dXJuIHRoaXMucGx1Z2luKGZ1bmN0aW9uKG5hbWUsIHBhcmVudCkge1xuICAgIHBhcmVudFRvRGVjb3JhdGUubWV0YShERUNPUkFURURfS0VZLCBuYW1lKVxuXG4gICAgLy8gQE5PVEU6IHNvIHdlIGNhbiByZXR1cm4uLi5cbiAgICAvKiBwcmV0dGllci1pZ25vcmUgKi9cbiAgICByZXR1cm4gdGhpc1xuICAgICAgLnJldHVybnMoZnVuY3Rpb24gcmV0dXJuc0Z1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0IHx8IHBhcmVudFRvRGVjb3JhdGVcbiAgICAgIH0pXG4gICAgICAuY2FsbFJldHVybnModHJ1ZSlcbiAgfSlcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQ3ZDQSxHQUFLLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztBQUN2REEsR0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCcEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLGdCQUFnQixFQUFFOzs7RUFHMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzs7OztFQUk3QixnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDOzs7O0VBSTlDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxNQUFNLEVBQUU7SUFDeEMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUM7Ozs7SUFJMUMsT0FBTyxJQUFJO09BQ1IsT0FBTyxDQUFDLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRTtRQUN4QyxPQUFPLE1BQU0sSUFBSSxnQkFBZ0I7T0FDbEMsQ0FBQztPQUNELFdBQVcsQ0FBQyxJQUFJLENBQUM7R0FDckIsQ0FBQztDQUNIOyJ9