UNPKG

foop

Version:

interfaces that describe their intentions.

32 lines (30 loc) 2.96 kB
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=