@typed/io
Version:
Runtime IO type system
56 lines • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.intersection = exports.tuple = exports.array = exports.record = exports.partial = exports.Encoder = void 0;
const lambda_1 = require("@typed/lambda");
var Encoder;
(function (Encoder) {
const _id = { encode: lambda_1.id };
Encoder.id = () => _id;
})(Encoder = exports.Encoder || (exports.Encoder = {}));
function partial(properties) {
return {
encode: (a) => {
const o = {};
for (const k in properties) {
if (k in a) {
const v = a[k];
o[k] = v === undefined ? undefined : properties[k].encode(v);
}
}
return o;
},
};
}
exports.partial = partial;
function record(properties) {
return {
encode: (a) => {
const o = {};
// tslint:disable-next-line:forin
for (const k in properties) {
o[k] = properties[k].encode(a[k]);
}
return o;
},
};
}
exports.record = record;
function array(items) {
return {
encode: (as) => as.map(items.encode),
};
}
exports.array = array;
function tuple(encoders) {
return {
encode: (as) => as.map((a, i) => encoders[i].encode(a)),
};
}
exports.tuple = tuple;
function intersection(encoders) {
return {
encode: (a) => encoders.map((e) => e.encode(a)).reduce((acc, x) => ({ ...acc, ...x }), {}),
};
}
exports.intersection = intersection;
//# sourceMappingURL=Encoder.js.map