foop
Version:
interfaces that describe their intentions.
52 lines (47 loc) • 4.12 kB
JavaScript
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==