ts-cast
Version:
Runtime typechecking
37 lines (36 loc) • 1.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toBe = void 0;
var names_1 = require("../helpers/names");
var throw_type_error_1 = require("./throw-type-error");
var spy = function (fn) {
var isCalled = false;
var result = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
isCalled = true;
return fn.apply(void 0, args);
};
Object.defineProperty(result, 'isCalled', {
get: function () { return isCalled; },
});
return result;
};
var toBe = function (casterFn, predicate, typeName) {
if (typeName === void 0) { typeName = "".concat(casterFn.name, "<").concat(predicate.name, ">"); }
return (0, names_1.withName)(function (value, context, reportError) {
if (reportError === void 0) { reportError = throw_type_error_1.throwTypeError; }
var spyReportError = spy(reportError);
var typedValue = casterFn(value, context, spyReportError);
if (spyReportError.isCalled)
return typedValue;
if (!predicate(typedValue)) {
reportError("".concat(typeName, " expected").concat(context ? " in ".concat(context) : '', " but \"").concat(value, "\" received."), context);
return undefined;
}
return typedValue;
}, typeName);
};
exports.toBe = toBe;