@3fv/guard
Version:
TypeScript guard suite
50 lines • 1.42 kB
JavaScript
import { isNil, isPromise } from "./guards/primitive.js";
let globalErrorHandler;
export function setGuardErrorHandler(errorHandler = null) {
globalErrorHandler = errorHandler;
}
/**
* Get a value in a guarded fashion
* ensuring no exception
*
* @param fn
* @param defaultValue
* @returns {any}
* @param errorHandler
*/
export function getValue(fn, defaultValue = undefined, errorHandler = globalErrorHandler) {
let result = null;
try {
result = fn();
if (isPromise(result))
return result
.catch(err => {
if (errorHandler)
errorHandler(err);
return defaultValue;
})
.then(value => isNil(value) ? defaultValue : value);
}
catch (err) {
if (errorHandler)
errorHandler(err);
}
return 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 (isPromise(value))
return value.then(() => undefined);
};
export const guard = Object.assign(guardFn, {
lift: (fn, localErrorHandler) => (fn, localErrorHandler) => guardFn(fn, localErrorHandler)
});
//# sourceMappingURL=Tools.js.map