chain-able
Version:
interfaces that describe their intentions.
180 lines (170 loc) • 12.3 kB
JavaScript
/**
* @since 2.0.0
*/
var isUndefined = require('../deps/is/undefined')
var isFunction = require('../deps/is/function')
var isFalse = require('../deps/is/false')
/**
* @class Shorthands
* @member Shorthands
* @extends {ChainedMap}
* @extends {DotProp}
* @memberOf compose
* @category Chainable
*
* @param {Class | Composable} SuperClass composable class
* @return {Shorthands} class
*
* @tests Shorthands
* @types Shorthands
*
* @see ChainedMap
* @see DotProp
* @see deps/matcher
* @see deps/traversers/eq
* @see deps/traverse
* @see DotProp
*
* {@link https://github.com/ReactiveX/rxjs/blob/master/src/Subscriber.ts reactivex}
* {@link https://github.com/sindresorhus/awesome-observables awesome-observables}
* {@link https://medium.com/@benlesh/learning-observable-by-building-observable-d5da57405d87 building-observables}
* @see {@link reactivex}
* @see {@link awesome-observables}
* @see {@link building-observables}
*
* @example
*
* const {compose} = require('chain-able')
* const {DotProp} = compose
* new DotProp()
* //=> DotProp
*
*/
module.exports = function (SuperClass) {
return (function (SuperClass) {
function Shorthands(parent) {
SuperClass.call(this, parent)
if (parent && parent.meta) {
this.meta.debug = parent.meta.debug
}
else {
this.debug(false)
}
}
if ( SuperClass ) Shorthands.__proto__ = SuperClass;
Shorthands.prototype = Object.create( SuperClass && SuperClass.prototype );
Shorthands.prototype.constructor = Shorthands;
/**
* @desc sets on store not this.set for easier extension
*
* @since 4.0.0 <- moved from Extend to Shorthands
* @since 0.2.0
*
* @param {boolean} [should=true] shouldDebug
* @return {Chainable} @chainable
*
* @NOTE is inherited by any chain with a parent with .meta.debug
*
* @example
*
* const Chain = require('chain-able')
* const chain = new Chain()
* chain.debug()
*
* chain.get('debug')
* //=> true
*
* // not in entries
* chain.entries()
* //=> {}
*
*/
Shorthands.prototype.debug = function debug (should) {
this.meta.debug = isUndefined(should) ? true : should
return this
};
/**
* @desc sets a value **only** when .has is false
* aka set if the value has not been set
*
* @memberOf ShorthandChain
* @since 1.0.2
*
* @param {Primitive} name key to set if it has not been done so already
* @param {any} value value to set when key has not been already set
* @return {ShorthandChain} @chainable
*
* @see ChainedMapBase.set
*
* @example
*
* const chain = new Chain()
*
* chain.set('eh', true)
*
* // eh is already set ^, ignored
* chain.setIfEmpty('eh', false)
*
* chain.get('eh')
* //=> true
*
* @example
*
* new Chain().setIfEmpty('canada', true).entries()
* //=> {canada: true}
*
* @example
*
* // longhand way to do the same thing
* if (chain.has('eh') === false) {
* chain.set('eh', false)
* }
*
* // or using .when
* chain.when(!chain.has('eh'), instance => instance.set('eh', false))
*
*/
Shorthands.prototype.setIfEmpty = function setIfEmpty (name, value) {
if (isFalse(this.has(name))) { return this.set(name, value) }
else { return this }
};
// --- added new ChainedMapExtendable stuff ---
/**
* @desc returns any value passed in
* return a value at the end of a chain regardless
*
* @since 3.0.0
*
* @param {any} value value to return at the end of a chain
* @return {any} value
*
* @example
*
* const chain = new Chain()
*
* const saveAndDebug = env => chain
* .from({env: env.NODE_ENV})
* .return(JSON.stringify(env))
*
* console.log(saveAndDebug(process.env))
* //=> value of process.env
*/
Shorthands.prototype.return = function return$1 (value) {
return value
};
/**
* @desc wrap a value, if it's a Function call it, return this
* aka execute something and return this
*
* @since 2.0.0
* @param {any} fn
* @return {This} @chainable
*/
Shorthands.prototype.wrap = function wrap (fn) {
if (isFunction(fn)) { fn.call(this, this) }
return this
};
return Shorthands;
}(SuperClass))
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hvcnRoYW5kcy5qcyIsInNvdXJjZXMiOlsiU2hvcnRoYW5kcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBzaW5jZSAyLjAuMFxuICovXG5jb25zdCBpc1VuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2RlcHMvaXMvdW5kZWZpbmVkJylcbmNvbnN0IGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9kZXBzL2lzL2Z1bmN0aW9uJylcbmNvbnN0IGlzRmFsc2UgPSByZXF1aXJlKCcuLi9kZXBzL2lzL2ZhbHNlJylcblxuLyoqXG4gKiBAY2xhc3MgU2hvcnRoYW5kc1xuICogQG1lbWJlciBTaG9ydGhhbmRzXG4gKiBAZXh0ZW5kcyB7Q2hhaW5lZE1hcH1cbiAqIEBleHRlbmRzIHtEb3RQcm9wfVxuICogQG1lbWJlck9mIGNvbXBvc2VcbiAqIEBjYXRlZ29yeSBDaGFpbmFibGVcbiAqXG4gKiBAcGFyYW0gIHtDbGFzcyB8IENvbXBvc2FibGV9IFN1cGVyQ2xhc3MgY29tcG9zYWJsZSBjbGFzc1xuICogQHJldHVybiB7U2hvcnRoYW5kc30gY2xhc3NcbiAqXG4gKiBAdGVzdHMgU2hvcnRoYW5kc1xuICogQHR5cGVzIFNob3J0aGFuZHNcbiAqXG4gKiBAc2VlIENoYWluZWRNYXBcbiAqIEBzZWUgRG90UHJvcFxuICogQHNlZSBkZXBzL21hdGNoZXJcbiAqIEBzZWUgZGVwcy90cmF2ZXJzZXJzL2VxXG4gKiBAc2VlIGRlcHMvdHJhdmVyc2VcbiAqIEBzZWUgRG90UHJvcFxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vUmVhY3RpdmVYL3J4anMvYmxvYi9tYXN0ZXIvc3JjL1N1YnNjcmliZXIudHMgcmVhY3RpdmV4fVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvYXdlc29tZS1vYnNlcnZhYmxlcyBhd2Vzb21lLW9ic2VydmFibGVzfVxuICoge0BsaW5rIGh0dHBzOi8vbWVkaXVtLmNvbS9AYmVubGVzaC9sZWFybmluZy1vYnNlcnZhYmxlLWJ5LWJ1aWxkaW5nLW9ic2VydmFibGUtZDVkYTU3NDA1ZDg3IGJ1aWxkaW5nLW9ic2VydmFibGVzfVxuICogQHNlZSB7QGxpbmsgcmVhY3RpdmV4fVxuICogQHNlZSB7QGxpbmsgYXdlc29tZS1vYnNlcnZhYmxlc31cbiAqIEBzZWUge0BsaW5rIGJ1aWxkaW5nLW9ic2VydmFibGVzfVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgY29uc3Qge2NvbXBvc2V9ID0gcmVxdWlyZSgnY2hhaW4tYWJsZScpXG4gKiAgICBjb25zdCB7RG90UHJvcH0gPSBjb21wb3NlXG4gKiAgICBuZXcgRG90UHJvcCgpXG4gKiAgICAvLz0+IERvdFByb3BcbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gU3VwZXJDbGFzcyA9PiB7XG4gIHJldHVybiBjbGFzcyBTaG9ydGhhbmRzIGV4dGVuZHMgU3VwZXJDbGFzcyB7XG4gICAgLy8gLS0tIGhlbHBlcnMgIC0tLVxuICAgIGNvbnN0cnVjdG9yKHBhcmVudCkge1xuICAgICAgc3VwZXIocGFyZW50KVxuXG4gICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5tZXRhKSB7XG4gICAgICAgIHRoaXMubWV0YS5kZWJ1ZyA9IHBhcmVudC5tZXRhLmRlYnVnXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWJ1ZyhmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzYyBzZXRzIG9uIHN0b3JlIG5vdCB0aGlzLnNldCBmb3IgZWFzaWVyIGV4dGVuc2lvblxuICAgICAqXG4gICAgICogQHNpbmNlIDQuMC4wIDwtIG1vdmVkIGZyb20gRXh0ZW5kIHRvIFNob3J0aGFuZHNcbiAgICAgKiBAc2luY2UgMC4yLjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Nob3VsZD10cnVlXSBzaG91bGREZWJ1Z1xuICAgICAqIEByZXR1cm4ge0NoYWluYWJsZX0gQGNoYWluYWJsZVxuICAgICAqXG4gICAgICogQE5PVEUgaXMgaW5oZXJpdGVkIGJ5IGFueSBjaGFpbiB3aXRoIGEgcGFyZW50IHdpdGggLm1ldGEuZGVidWdcbiAgICAgKlxuICAgICAqICBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICAgY29uc3QgQ2hhaW4gPSByZXF1aXJlKCdjaGFpbi1hYmxlJylcbiAgICAgKiAgICBjb25zdCBjaGFpbiA9IG5ldyBDaGFpbigpXG4gICAgICogICAgY2hhaW4uZGVidWcoKVxuICAgICAqXG4gICAgICogICAgY2hhaW4uZ2V0KCdkZWJ1ZycpXG4gICAgICogICAgLy89PiB0cnVlXG4gICAgICpcbiAgICAgKiAgICAvLyBub3QgaW4gZW50cmllc1xuICAgICAqICAgIGNoYWluLmVudHJpZXMoKVxuICAgICAqICAgIC8vPT4ge31cbiAgICAgKlxuICAgICAqL1xuICAgIGRlYnVnKHNob3VsZCkge1xuICAgICAgdGhpcy5tZXRhLmRlYnVnID0gaXNVbmRlZmluZWQoc2hvdWxkKSA/IHRydWUgOiBzaG91bGRcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2Mgc2V0cyBhIHZhbHVlICoqb25seSoqIHdoZW4gLmhhcyBpcyBmYWxzZVxuICAgICAqICAgICAgIGFrYSBzZXQgaWYgdGhlIHZhbHVlIGhhcyBub3QgYmVlbiBzZXRcbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBTaG9ydGhhbmRDaGFpblxuICAgICAqIEBzaW5jZSAxLjAuMlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcmltaXRpdmV9IG5hbWUga2V5IHRvIHNldCBpZiBpdCBoYXMgbm90IGJlZW4gZG9uZSBzbyBhbHJlYWR5XG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIHZhbHVlIHRvIHNldCB3aGVuIGtleSBoYXMgbm90IGJlZW4gYWxyZWFkeSBzZXRcbiAgICAgKiBAcmV0dXJuIHtTaG9ydGhhbmRDaGFpbn0gQGNoYWluYWJsZVxuICAgICAqXG4gICAgICogQHNlZSBDaGFpbmVkTWFwQmFzZS5zZXRcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICBjb25zdCBjaGFpbiA9IG5ldyBDaGFpbigpXG4gICAgICpcbiAgICAgKiAgICBjaGFpbi5zZXQoJ2VoJywgdHJ1ZSlcbiAgICAgKlxuICAgICAqICAgIC8vIGVoIGlzIGFscmVhZHkgc2V0IF4sIGlnbm9yZWRcbiAgICAgKiAgICBjaGFpbi5zZXRJZkVtcHR5KCdlaCcsIGZhbHNlKVxuICAgICAqXG4gICAgICogICAgY2hhaW4uZ2V0KCdlaCcpXG4gICAgICogICAgLy89PiB0cnVlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogICBuZXcgQ2hhaW4oKS5zZXRJZkVtcHR5KCdjYW5hZGEnLCB0cnVlKS5lbnRyaWVzKClcbiAgICAgKiAgIC8vPT4ge2NhbmFkYTogdHJ1ZX1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgIC8vIGxvbmdoYW5kIHdheSB0byBkbyB0aGUgc2FtZSB0aGluZ1xuICAgICAqICAgaWYgKGNoYWluLmhhcygnZWgnKSA9PT0gZmFsc2UpIHtcbiAgICAgKiAgICAgY2hhaW4uc2V0KCdlaCcsIGZhbHNlKVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogICAvLyBvciB1c2luZyAud2hlblxuICAgICAqICAgY2hhaW4ud2hlbighY2hhaW4uaGFzKCdlaCcpLCBpbnN0YW5jZSA9PiBpbnN0YW5jZS5zZXQoJ2VoJywgZmFsc2UpKVxuICAgICAqXG4gICAgICovXG4gICAgc2V0SWZFbXB0eShuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKGlzRmFsc2UodGhpcy5oYXMobmFtZSkpKSByZXR1cm4gdGhpcy5zZXQobmFtZSwgdmFsdWUpXG4gICAgICBlbHNlIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgLy8gLS0tIGFkZGVkIG5ldyBDaGFpbmVkTWFwRXh0ZW5kYWJsZSBzdHVmZiAtLS1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIHJldHVybnMgYW55IHZhbHVlIHBhc3NlZCBpblxuICAgICAqICAgICAgIHJldHVybiBhIHZhbHVlIGF0IHRoZSBlbmQgb2YgYSBjaGFpbiByZWdhcmRsZXNzXG4gICAgICpcbiAgICAgKiBAc2luY2UgMy4wLjBcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge2FueX0gdmFsdWUgdmFsdWUgdG8gcmV0dXJuIGF0IHRoZSBlbmQgb2YgYSBjaGFpblxuICAgICAqIEByZXR1cm4ge2FueX0gdmFsdWVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICpcbiAgICAgKiAgICBjb25zdCBjaGFpbiA9IG5ldyBDaGFpbigpXG4gICAgICpcbiAgICAgKiAgICBjb25zdCBzYXZlQW5kRGVidWcgPSBlbnYgPT4gY2hhaW5cbiAgICAgKiAgICAgIC5mcm9tKHtlbnY6IGVudi5OT0RFX0VOVn0pXG4gICAgICogICAgICAucmV0dXJuKEpTT04uc3RyaW5naWZ5KGVudikpXG4gICAgICpcbiAgICAgKiAgICBjb25zb2xlLmxvZyhzYXZlQW5kRGVidWcocHJvY2Vzcy5lbnYpKVxuICAgICAqICAgIC8vPT4gdmFsdWUgb2YgcHJvY2Vzcy5lbnZcbiAgICAgKi9cbiAgICByZXR1cm4odmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjIHdyYXAgYSB2YWx1ZSwgaWYgaXQncyBhIEZ1bmN0aW9uIGNhbGwgaXQsIHJldHVybiB0aGlzXG4gICAgICogICAgICAgYWthIGV4ZWN1dGUgc29tZXRoaW5nIGFuZCByZXR1cm4gdGhpc1xuICAgICAqXG4gICAgICogQHNpbmNlIDIuMC4wXG4gICAgICogQHBhcmFtICB7YW55fSBmblxuICAgICAqIEByZXR1cm4ge1RoaXN9IEBjaGFpbmFibGVcbiAgICAgKi9cbiAgICB3cmFwKGZuKSB7XG4gICAgICBpZiAoaXNGdW5jdGlvbihmbikpIGZuLmNhbGwodGhpcywgdGhpcylcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsiY29uc3QiLCJzdXBlciJdLCJtYXBwaW5ncyI6IkFBQUE7OztBQUdBQSxHQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztBQUNuREEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUM7QUFDakRBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXNDM0MsTUFBTSxDQUFDLE9BQU8sR0FBRyxVQUFBLFVBQVUsQ0FBQSxDQUFDLEFBQUc7RUFDN0IsT0FBTztJQUFBLEFBQW1DLEFBQUMsQUFFekMsbUJBQVcsQ0FBQyxNQUFNLEVBQUU7TUFDbEJDLFVBQUssS0FBQSxDQUFDLE1BQUEsTUFBTSxDQUFDOztNQUViLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLO09BQ3BDO1dBQ0k7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztPQUNsQjtLQUNGOzs7O2tEQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUEyQkQscUJBQUEsS0FBSyxrQkFBQSxDQUFDLE1BQU0sRUFBRTtNQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsTUFBTTtNQUNyRCxPQUFPLElBQUk7S0FDWixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBMkNELHFCQUFBLFVBQVUsdUJBQUEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO01BQ3RCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFBLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUE7V0FDcEQsRUFBQSxPQUFPLElBQUksRUFBQTtLQUNqQixDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUF3QkQscUJBQUEsTUFBTSxxQkFBQSxDQUFDLEtBQUssRUFBRTtNQUNaLE9BQU8sS0FBSztLQUNiLENBQUE7Ozs7Ozs7Ozs7SUFVRCxxQkFBQSxJQUFJLGlCQUFBLENBQUMsRUFBRSxFQUFFO01BQ1AsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBQSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBQTtNQUN2QyxPQUFPLElBQUk7S0FDWixDQUFBLEFBQ0Y7OztJQS9IK0IsVUErSC9CLEVBQUE7Q0FDRjsifQ==