ts-cast
Version:
Runtime typechecking
23 lines (22 loc) • 1.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.record = void 0;
var engine_1 = require("../engine");
var guards_1 = require("../engine/guards");
var recordTypeName = function (keyTypeName, valueTypeName) {
return "Record<".concat(keyTypeName, ", ").concat(valueTypeName, ">");
};
var checkFields = function (keyCaster, valueCaster) { return function (value, context, reportError) {
return Object.entries(value).reduce(function (obj, _a) {
var key = _a[0], val = _a[1];
var newKey = keyCaster(key, context ? "key of ".concat(context) : 'key', reportError);
var newValue = valueCaster(val, context ? "".concat(context, ".").concat(key) : key, reportError);
obj[newKey] = newValue;
return obj;
}, Object.create(null));
}; };
var record = function (keyCaster, valueCaster, typeName) {
if (typeName === void 0) { typeName = recordTypeName(keyCaster.name, valueCaster.name); }
return (0, engine_1.createCaster)(typeName, guards_1.isAnObj, checkFields(keyCaster, valueCaster));
};
exports.record = record;