@3fv/guard
Version:
TypeScript guard suite
55 lines • 1.66 kB
JavaScript
;
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