UNPKG

@3fv/guard

Version:

TypeScript guard suite

55 lines 1.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.guard = void 0; exports.setGuardErrorHandler = setGuardErrorHandler; exports.getValue = getValue; const primitive_js_1 = require("./guards/primitive.js"); let globalErrorHandler; function setGuardErrorHandler(errorHandler = null) { globalErrorHandler = errorHandler; } /** * Get a value in a guarded fashion * ensuring no exception * * @param fn * @param defaultValue * @returns {any} * @param errorHandler */ function getValue(fn, defaultValue = undefined, errorHandler = globalErrorHandler) { let result = null; try { result = fn(); if ((0, primitive_js_1.isPromise)(result)) return result .catch(err => { if (errorHandler) errorHandler(err); return defaultValue; }) .then(value => (0, primitive_js_1.isNil)(value) ? defaultValue : value); } catch (err) { if (errorHandler) errorHandler(err); } return (0, primitive_js_1.isNil)(result) ? defaultValue : result; } /** * Execute a function guarded from exception * * @param fn * @param localErrorHandler * @returns {(fn:()=>any)=>(fn:()=>any)=>any} */ const guardFn = (fn, localErrorHandler = null) => { const value = getValue(fn, undefined, localErrorHandler); if ((0, primitive_js_1.isPromise)(value)) return value.then(() => undefined); }; exports.guard = Object.assign(guardFn, { lift: (fn, localErrorHandler) => (fn, localErrorHandler) => guardFn(fn, localErrorHandler) }); //# sourceMappingURL=Tools.js.map