UNPKG

foop

Version:

interfaces that describe their intentions.

52 lines (47 loc) 4.12 kB
var DECORATED_KEY = require('../deps/meta/DECORATED_KEY') 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdGUuanMiLCJzb3VyY2VzIjpbImRlY29yYXRlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IERFQ09SQVRFRF9LRVkgPSByZXF1aXJlKCcuLi9kZXBzL21ldGEvREVDT1JBVEVEX0tFWScpXG5jb25zdCBtZXRhID0gcmVxdWlyZSgnLi4vZGVwcy9tZXRhJylcblxuLyoqXG4gKiBkZWNvcmF0ZXMgYSBwYXJlbnQgd2hlbiB0aGUgYXJndW1lbnQgaXMgcHJvdmlkZWRcbiAqIEJVVCBUSEUgRlVOQ1RJT05TIFdJTEwgU1RJTEwgQkUgU0NPUEVEIFRPIENVUlJFTlQgUEFSRU5UXG4gKiBmb3IgZWFzeSBmYWN0b3J5IGNoYWluaW5nXG4gKlxuICogQHNpbmNlIDQuMC4wLWFscGhhLjFcbiAqIEBtZW1iZXJPZiBNZXRob2RDaGFpblxuICogQHBhcmFtICB7T2JqZWN0fSBwYXJlbnRUb0RlY29yYXRlIG9iamVjdCB0byBwdXQgdGhlIG1ldGhvZCBvbiBpbnN0ZWFkXG4gKiBAcmV0dXJuIHtNZXRob2RDaGFpbn0gQGNoYWluYWJsZVxuICpcbiAqIEBzZWUgTWV0aG9kQ2hhaW5cbiAqXG4gKiBAVE9ETyB0aGlzIGlzIG1vcmUgbGlrZSBhIHByZXNldCBzaW5jZSBpdCAqYWRkcyogcGx1Z2lucz9cbiAqICAgICAgIG1vcmUgb2YgbWV0aG9kRmFjdG9yeSBub3dcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgY29uc3QgY2hhaW4gPSBuZXcgQ2hhaW4oKVxuICogICBjb25zdCBvYmogPSB7fVxuICogICBjaGFpbi5tZXRob2QoJ2VoT2gnKS5kZWNvcmF0ZShvYmopLmJ1aWxkKClcbiAqICAgdHlwZW9mIG9iai5laE9oXG4gKiAgIC8vPT4gJ2Z1bmN0aW9uJ1xuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihwYXJlbnRUb0RlY29yYXRlKSB7XG4gIC8vIEBUT0RPIGlzIG9ialN0cmljdD9cbiAgLy8gaWYgKHBhcmVudFRvRGVjb3JhdGUpIHtcbiAgdGhpcy50YXJnZXQocGFyZW50VG9EZWNvcmF0ZSlcblxuICAvLyBjYW4gdXNlIHRoaXMgdG8gXCJ1bmRlY29yYXRlXCJcbiAgLy8gaWYgKCFwYXJlbnRUb0RlY29yYXRlLm1ldGEpIDwtIGNoZWNrcyBhbHJlYWR5IGluc2lkZSBvZiBtZXRhKClcbiAgcGFyZW50VG9EZWNvcmF0ZS5tZXRhID0gbWV0YShwYXJlbnRUb0RlY29yYXRlKVxuXG4gIC8vIGRlZmF1bHQgcmV0dXJucyByZXN1bHQgb2YgY2FsbGluZyBmdW5jdGlvbixcbiAgLy8gZWxzZSAucGFyZW50VG9EZWNvcmF0ZVxuICByZXR1cm4gdGhpcy5wbHVnaW4oZnVuY3Rpb24obmFtZSwgcGFyZW50KSB7XG4gICAgcGFyZW50VG9EZWNvcmF0ZS5tZXRhKERFQ09SQVRFRF9LRVksIG5hbWUpXG5cbiAgICAvLyBATk9URTogc28gd2UgY2FuIHJldHVybi4uLlxuICAgIC8qIHByZXR0aWVyLWlnbm9yZSAqL1xuICAgIHJldHVybiB0aGlzXG4gICAgICAucmV0dXJucyhmdW5jdGlvbiByZXR1cm5zRnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiByZXN1bHQgfHwgcGFyZW50VG9EZWNvcmF0ZVxuICAgICAgfSlcbiAgICAgIC5jYWxsUmV0dXJucyh0cnVlKVxuICB9KVxufVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsNEJBQTRCLENBQUM7QUFDM0RBLEdBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQnBDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxnQkFBZ0IsRUFBRTs7O0VBRzFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Ozs7RUFJN0IsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzs7OztFQUk5QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsTUFBTSxFQUFFO0lBQ3hDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDOzs7O0lBSTFDLE9BQU8sSUFBSTtPQUNSLE9BQU8sQ0FBQyxTQUFTLGVBQWUsQ0FBQyxNQUFNLEVBQUU7UUFDeEMsT0FBTyxNQUFNLElBQUksZ0JBQWdCO09BQ2xDLENBQUM7T0FDRCxXQUFXLENBQUMsSUFBSSxDQUFDO0dBQ3JCLENBQUM7Q0FDSDsifQ==