foop
Version:
interfaces that describe their intentions.
66 lines (60 loc) • 4.79 kB
JavaScript
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