foop
Version:
interfaces that describe their intentions.
37 lines (35 loc) • 3.37 kB
JavaScript
var curry = require('../fp/curry')
/**
* @name tryCatch
* @curried 3
* @memberOf encase
*
* @version 4.0.0 <- moved out into a dep
* @since 1.0.0
*
* @param {Function} call function that may throw
* @param {Function} [onValid] call when valid
* @param {Function} [onInvalid] call when invalid
* @return {boolean | any} validation/encased function call result
*
* @TODO `call.apply(null, arguments)` > a, b, c
*
* {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch mozilla-trycatch}
* {@link https://github.com/fluture-js/Fluture#encase fluture-encase}
* @see {@link fluture-encase}
* @see {@link mozilla-trycatch}
*/
module.exports = curry(3, function (call, onValid, onInvalid) { return function (a, b, c) {
var result
try {
result = call(a, b, c)
return onValid ? onValid(result) : result
}
catch (error) {
// error.caught = true
// @NOTE: defaults to rethrow... if (isTrue(rethrow)) throw error
if (onInvalid) { return onInvalid(error) }
else { return error }
}
}; })
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJ5Q2F0Y2guanMiLCJzb3VyY2VzIjpbInRyeUNhdGNoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGN1cnJ5ID0gcmVxdWlyZSgnLi4vZnAvY3VycnknKVxuXG4vKipcbiAqIEBuYW1lIHRyeUNhdGNoXG4gKiBAY3VycmllZCAzXG4gKiBAbWVtYmVyT2YgZW5jYXNlXG4gKlxuICogQHZlcnNpb24gNC4wLjAgPC0gbW92ZWQgb3V0IGludG8gYSBkZXBcbiAqIEBzaW5jZSAxLjAuMFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGwgZnVuY3Rpb24gdGhhdCBtYXkgdGhyb3dcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblZhbGlkXSBjYWxsIHdoZW4gdmFsaWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkludmFsaWRdIGNhbGwgd2hlbiBpbnZhbGlkXG4gKiBAcmV0dXJuIHtib29sZWFuIHwgYW55fSB2YWxpZGF0aW9uL2VuY2FzZWQgZnVuY3Rpb24gY2FsbCByZXN1bHRcbiAqXG4gKiBAVE9ETyBgY2FsbC5hcHBseShudWxsLCBhcmd1bWVudHMpYCA+IGEsIGIsIGNcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvU3RhdGVtZW50cy90cnkuLi5jYXRjaCBtb3ppbGxhLXRyeWNhdGNofVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dXJlLWpzL0ZsdXR1cmUjZW5jYXNlIGZsdXR1cmUtZW5jYXNlfVxuICogQHNlZSB7QGxpbmsgZmx1dHVyZS1lbmNhc2V9XG4gKiBAc2VlIHtAbGluayBtb3ppbGxhLXRyeWNhdGNofVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGN1cnJ5KDMsIChjYWxsLCBvblZhbGlkLCBvbkludmFsaWQpID0+IChhLCBiLCBjKSA9PiB7XG4gIGxldCByZXN1bHRcbiAgdHJ5IHtcbiAgICByZXN1bHQgPSBjYWxsKGEsIGIsIGMpXG4gICAgcmV0dXJuIG9uVmFsaWQgPyBvblZhbGlkKHJlc3VsdCkgOiByZXN1bHRcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBlcnJvci5jYXVnaHQgPSB0cnVlXG4gICAgLy8gQE5PVEU6IGRlZmF1bHRzIHRvIHJldGhyb3cuLi4gaWYgKGlzVHJ1ZShyZXRocm93KSkgdGhyb3cgZXJyb3JcbiAgICBpZiAob25JbnZhbGlkKSByZXR1cm4gb25JbnZhbGlkKGVycm9yKVxuICAgIGVsc2UgcmV0dXJuIGVycm9yXG4gIH1cbn0pXG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQnBDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFBLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQUFBRyxTQUFBLFNBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxBQUFHO0VBQ25FQyxHQUFHLENBQUMsTUFBTTtFQUNWLElBQUk7SUFDRixNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RCLE9BQU8sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNO0dBQzFDO0VBQ0QsT0FBTyxLQUFLLEVBQUU7OztJQUdaLElBQUksU0FBUyxFQUFFLEVBQUEsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUE7U0FDakMsRUFBQSxPQUFPLEtBQUssRUFBQTtHQUNsQjtDQUNGLEdBQUEsQ0FBQzsifQ==