@3fv/guard
Version:
TypeScript guard suite
50 lines • 1.74 kB
JavaScript
import { isFunction, isString } from "./primitive.js";
export const DefaultAssertOptions = {
logErrorsToConsole: false
};
let assertOptions = Object.assign({}, DefaultAssertOptions);
export function getAssertOptions() {
return Object.assign({}, assertOptions);
}
export function setGlobalAssertOptions(options) {
assertOptions = Object.assign(Object.assign({}, assertOptions), options);
}
export class AssertError extends Error {
constructor(message, cause) {
super(message);
this.cause = cause;
}
}
const assertLift = (test, messageProvider) => {
return (nextValue) => {
const ok = test(nextValue);
if (!ok) {
const message = isFunction(messageProvider) ? messageProvider(nextValue) : messageProvider !== null && messageProvider !== void 0 ? messageProvider : "no message";
throw new AssertError(message);
}
};
};
export const assert = Object.assign((test, msg, overrideOptions = {}) => {
var _a;
const options = Object.assign(Object.assign({}, assertOptions), overrideOptions);
let result = false;
let error = undefined;
try {
result = isFunction(test) ? test() : test;
}
catch (err) {
error = err;
if (options.logErrorsToConsole) {
console.error(`Assert failed: "${test}"`, err);
}
}
if (!result || !!error) {
const errOut = !msg ? ((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : "unknown") :
isFunction(msg) ? msg(error) :
msg;
throw isString(errOut) ? new AssertError(errOut, error) : errOut;
}
}, {
lift: assertLift
});
//# sourceMappingURL=assert.js.map