assert-or-return
Version:
Type-safe assertion library with decorator-based early returns for TypeScript
40 lines (39 loc) • 1.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Ok = Ok;
exports.Err = Err;
exports.assert = assert;
exports.HasAssertions = HasAssertions;
function Ok(data) {
return { success: true, data };
}
function Err(error) {
return { success: false, error };
}
class AssertionError extends Error {
constructor(message) {
super(message);
this.name = "AssertionError";
}
}
function assert(value, errorMessage) {
if (!value) {
throw new AssertionError(errorMessage);
}
}
function HasAssertions() {
return function (target, propertyName, descriptor) {
const method = descriptor.value;
descriptor.value = ((...args) => {
try {
return method.apply(target, args);
}
catch (error) {
if (error instanceof AssertionError) {
return Err(error.message);
}
throw error;
}
});
};
}