UNPKG

foop

Version:

interfaces that describe their intentions.

66 lines (60 loc) 4.79 kB
var tryCatch = require('./tryCatch') /** * @desc wrap in tryCatch, or a tryCatch-like api * @version 5.0.0 wrapped tryCatch & withSpecification in curry * @version 4.0.1 added custom encaser * @since 4.0.0 * @member encase * @alias attempt * @symb 🛡 * * @param {Function} call function to _encase_ * @param {Function | undefined} [encaser=tryCatch] function to encase _with_ * @return {Function} -> FunctionObject{onInvalid, onValid, rethrow, call} * * {@link https://github.com/fluture-js/Fluture#encase fluture-encase} * {@link https://github.com/lodash/lodash/blob/master/attempt.js lodash-attempt} * @see {@link lodash-attempt} * @see {@link fluture-encase} * * @example * * const throws = x => { * if (x === false) { * throw new Error('invalid - cannot be false') * } * return true * } * const api = encase(throws) * * * api.onValid(console.log) * api.onInvalid(console.error) * * //--- invalid * api.call(false) * //=> 'invalid - cannot be false' * * //--- valid * api.call(true) * //=> 'true' * */ module.exports = function (call, encaser) { var encased = encaser ? encaser(call) : tryCatch(call) // @TODO rethink this scoped approach // left, right, rethrow var onInvalid var onValid var config = function (a, b, c) { return encased(onValid, onInvalid)(a, b, c); } config.then = config.onInvalid = function (fn) { onInvalid = fn return config } config.catch = config.onValid = function (fn) { onValid = fn return config } return config } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jYXNlLmpzIiwic291cmNlcyI6WyJlbmNhc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgdHJ5Q2F0Y2ggPSByZXF1aXJlKCcuL3RyeUNhdGNoJylcblxuLyoqXG4gKiBAZGVzYyB3cmFwIGluIHRyeUNhdGNoLCBvciBhIHRyeUNhdGNoLWxpa2UgYXBpXG4gKiBAdmVyc2lvbiA1LjAuMCB3cmFwcGVkIHRyeUNhdGNoICYgd2l0aFNwZWNpZmljYXRpb24gaW4gY3VycnlcbiAqIEB2ZXJzaW9uIDQuMC4xIGFkZGVkIGN1c3RvbSBlbmNhc2VyXG4gKiBAc2luY2UgICA0LjAuMFxuICogQG1lbWJlciBlbmNhc2VcbiAqIEBhbGlhcyBhdHRlbXB0XG4gKiBAc3ltYiDwn5uhXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbCBmdW5jdGlvbiB0byBfZW5jYXNlX1xuICogQHBhcmFtIHtGdW5jdGlvbiB8IHVuZGVmaW5lZH0gW2VuY2FzZXI9dHJ5Q2F0Y2hdIGZ1bmN0aW9uIHRvIGVuY2FzZSBfd2l0aF9cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSAtPiBGdW5jdGlvbk9iamVjdHtvbkludmFsaWQsIG9uVmFsaWQsIHJldGhyb3csIGNhbGx9XG4gKlxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9mbHV0dXJlLWpzL0ZsdXR1cmUjZW5jYXNlIGZsdXR1cmUtZW5jYXNlfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyL2F0dGVtcHQuanMgbG9kYXNoLWF0dGVtcHR9XG4gKiBAc2VlIHtAbGluayBsb2Rhc2gtYXR0ZW1wdH1cbiAqIEBzZWUge0BsaW5rIGZsdXR1cmUtZW5jYXNlfVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogIGNvbnN0IHRocm93cyA9IHggPT4ge1xuICogICAgaWYgKHggPT09IGZhbHNlKSB7XG4gKiAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgLSBjYW5ub3QgYmUgZmFsc2UnKVxuICogICAgfVxuICogICAgcmV0dXJuIHRydWVcbiAqICB9XG4gKiAgY29uc3QgYXBpID0gZW5jYXNlKHRocm93cylcbiAqXG4gKlxuICogIGFwaS5vblZhbGlkKGNvbnNvbGUubG9nKVxuICogIGFwaS5vbkludmFsaWQoY29uc29sZS5lcnJvcilcbiAqXG4gKiAgLy8tLS0gaW52YWxpZFxuICogIGFwaS5jYWxsKGZhbHNlKVxuICogIC8vPT4gJ2ludmFsaWQgLSBjYW5ub3QgYmUgZmFsc2UnXG4gKlxuICogIC8vLS0tIHZhbGlkXG4gKiAgYXBpLmNhbGwodHJ1ZSlcbiAqICAvLz0+ICd0cnVlJ1xuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSAoY2FsbCwgZW5jYXNlcikgPT4ge1xuICBjb25zdCBlbmNhc2VkID0gZW5jYXNlciA/IGVuY2FzZXIoY2FsbCkgOiB0cnlDYXRjaChjYWxsKVxuXG4gIC8vIEBUT0RPIHJldGhpbmsgdGhpcyBzY29wZWQgYXBwcm9hY2hcbiAgLy8gbGVmdCwgcmlnaHQsIHJldGhyb3dcbiAgbGV0IG9uSW52YWxpZFxuICBsZXQgb25WYWxpZFxuXG4gIGNvbnN0IGNvbmZpZyA9IChhLCBiLCBjKSA9PiBlbmNhc2VkKG9uVmFsaWQsIG9uSW52YWxpZCkoYSwgYiwgYylcblxuICBjb25maWcudGhlbiA9IGNvbmZpZy5vbkludmFsaWQgPSBmbiA9PiB7XG4gICAgb25JbnZhbGlkID0gZm5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cbiAgY29uZmlnLmNhdGNoID0gY29uZmlnLm9uVmFsaWQgPSBmbiA9PiB7XG4gICAgb25WYWxpZCA9IGZuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZ1xufVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkN0QyxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQUEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEFBQUc7RUFDbENBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDOzs7O0VBSXhEQyxHQUFHLENBQUMsU0FBUztFQUNiQSxHQUFHLENBQUMsT0FBTzs7RUFFWEQsR0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQUFBRyxTQUFBLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBQTs7RUFFaEUsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLFVBQUEsRUFBRSxDQUFBLENBQUMsQUFBRztJQUNyQyxTQUFTLEdBQUcsRUFBRTtJQUNkLE9BQU8sTUFBTTtHQUNkO0VBQ0QsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLFVBQUEsRUFBRSxDQUFBLENBQUMsQUFBRztJQUNwQyxPQUFPLEdBQUcsRUFBRTtJQUNaLE9BQU8sTUFBTTtHQUNkOztFQUVELE9BQU8sTUFBTTtDQUNkOyJ9