@typed/io
Version:
Runtime IO type system
48 lines • 1.27 kB
JavaScript
import { id as identity } from '@typed/lambda';
export var Encoder;
(function (Encoder) {
const _id = { encode: identity };
Encoder.id = () => _id;
})(Encoder || (Encoder = {}));
export 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;
},
};
}
export 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;
},
};
}
export function array(items) {
return {
encode: (as) => as.map(items.encode),
};
}
export function tuple(encoders) {
return {
encode: (as) => as.map((a, i) => encoders[i].encode(a)),
};
}
export function intersection(encoders) {
return {
encode: (a) => encoders.map((e) => e.encode(a)).reduce((acc, x) => ({ ...acc, ...x }), {}),
};
}
//# sourceMappingURL=Encoder.js.map