UNPKG

foop

Version:

interfaces that describe their intentions.

37 lines (35 loc) 3.37 kB
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==