ts-cast
Version:
Runtime typechecking
22 lines (21 loc) • 952 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.tuple = void 0;
var engine_1 = require("../engine");
var guards_1 = require("../engine/guards");
var transformTuple = function (schema) {
return function (value, context, reportError) {
var casted = schema.map(function (caster, index) { return caster(value[index], context ? "".concat(context, "[").concat(index, "]") : "#".concat(index), reportError); });
var last = value.length - 1;
return casted.slice(0, last + 1);
};
};
var tupleTypeName = function (schema) { return "[".concat(schema.map(function (casterFn) { return casterFn.name; }).join(', '), "]"); };
var tuple = function () {
var schema = [];
for (var _i = 0; _i < arguments.length; _i++) {
schema[_i] = arguments[_i];
}
return (0, engine_1.createCaster)(tupleTypeName(schema), guards_1.isATuple, transformTuple(schema));
};
exports.tuple = tuple;