foop
Version:
interfaces that describe their intentions.
32 lines (30 loc) • 2.96 kB
JavaScript
var curry = require('../fp/curry')
/**
* @desc a special encased wrapper with no try catch but same api
* @name withSpecification
* @func
* @memberOf encase
* @since 4.0.0
*
* @param {Function} specification match
* @param {Function} call cb to determine valid or invalid
* @param {Function} onInvalid cb when invalid
* @param {Function} onInvalid cb when valid
* @return {Function} a lot of functions...
*
* @see fp/curry
*
* @example
* const onInvalid = console.error
* const onValid = console.debug
* const onCall = console.log
* const encased = withSpecification(x => true)(onCall)(onValid, onInvalid)
*
* encased(1, 2, 3) //=> onCall (did not throw)
*/
module.exports = curry(4, function (specification, call, onInvalid, onValid) { return function (a, b, c) {
var result = call(a, b, c)
if (specification(result)) { return onInvalid(result) }
else { return onValid(result) }
}; })
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aFNwZWNpZmljYXRpb24uanMiLCJzb3VyY2VzIjpbIndpdGhTcGVjaWZpY2F0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGN1cnJ5ID0gcmVxdWlyZSgnLi4vZnAvY3VycnknKVxuXG4vKipcbiAqIEBkZXNjIGEgc3BlY2lhbCBlbmNhc2VkIHdyYXBwZXIgd2l0aCBubyB0cnkgY2F0Y2ggYnV0IHNhbWUgYXBpXG4gKiBAbmFtZSB3aXRoU3BlY2lmaWNhdGlvblxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBlbmNhc2VcbiAqIEBzaW5jZSA0LjAuMFxuICpcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBzcGVjaWZpY2F0aW9uIG1hdGNoXG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2FsbCBjYiB0byBkZXRlcm1pbmUgdmFsaWQgb3IgaW52YWxpZFxuICogQHBhcmFtICB7RnVuY3Rpb259IG9uSW52YWxpZCBjYiB3aGVuIGludmFsaWRcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBvbkludmFsaWQgY2Igd2hlbiB2YWxpZFxuICogQHJldHVybiB7RnVuY3Rpb259IGEgbG90IG9mIGZ1bmN0aW9ucy4uLlxuICpcbiAqIEBzZWUgZnAvY3VycnlcbiAqXG4gKiBAZXhhbXBsZVxuICogIGNvbnN0IG9uSW52YWxpZCA9IGNvbnNvbGUuZXJyb3JcbiAqICBjb25zdCBvblZhbGlkID0gY29uc29sZS5kZWJ1Z1xuICogIGNvbnN0IG9uQ2FsbCA9IGNvbnNvbGUubG9nXG4gKiAgY29uc3QgZW5jYXNlZCA9IHdpdGhTcGVjaWZpY2F0aW9uKHggPT4gdHJ1ZSkob25DYWxsKShvblZhbGlkLCBvbkludmFsaWQpXG4gKlxuICogIGVuY2FzZWQoMSwgMiwgMykgLy89PiBvbkNhbGwgKGRpZCBub3QgdGhyb3cpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY3VycnkoNCwgKHNwZWNpZmljYXRpb24sIGNhbGwsIG9uSW52YWxpZCwgb25WYWxpZCkgPT4gKGEsIGIsIGMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gY2FsbChhLCBiLCBjKVxuICBpZiAoc3BlY2lmaWNhdGlvbihyZXN1bHQpKSByZXR1cm4gb25JbnZhbGlkKHJlc3VsdClcbiAgZWxzZSByZXR1cm4gb25WYWxpZChyZXN1bHQpXG59KVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUJwQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBQSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxBQUFHLFNBQUEsU0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEFBQUc7RUFDbEZBLEdBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzVCLElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUEsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUE7T0FDOUMsRUFBQSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBQTtDQUM1QixHQUFBLENBQUM7In0=