UNPKG

chain-able

Version:

interfaces that describe their intentions.

180 lines (170 loc) 12.3 kB
/** * @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==