@sinclair/typebox
Version:
Json Schema Type Builder with Static Type Resolution for TypeScript
44 lines (42 loc) • 1.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Composite = void 0;
const index_1 = require("../intersect/index");
const index_2 = require("../indexed/index");
const index_3 = require("../keyof/index");
const index_4 = require("../object/index");
const index_5 = require("../sets/index");
// ------------------------------------------------------------------
// TypeGuard
// ------------------------------------------------------------------
const type_1 = require("../guard/type");
// prettier-ignore
function CompositeKeys(T) {
return T.reduce((Acc, L) => {
return (0, index_5.SetDistinct)([...Acc, ...(0, index_3.KeyOfPropertyKeys)(L)]);
}, []);
}
// prettier-ignore
function FilterNever(T) {
return T.filter(L => !(0, type_1.IsNever)(L));
}
// prettier-ignore
function CompositeProperty(T, K) {
return T.reduce((Acc, L) => {
return FilterNever([...Acc, ...(0, index_2.IndexFromPropertyKeys)(L, [K])]);
}, []);
}
// prettier-ignore
function CompositeProperties(T, K) {
return K.reduce((Acc, L) => {
return { ...Acc, [L]: (0, index_1.IntersectEvaluated)(CompositeProperty(T, L)) };
}, {});
}
// prettier-ignore
function Composite(T, options = {}) {
const K = CompositeKeys(T);
const P = CompositeProperties(T, K);
const R = (0, index_4.Object)(P, options);
return R;
}
exports.Composite = Composite;