UNPKG

@sinclair/typebox

Version:

Json Schema Type Builder with Static Type Resolution for TypeScript

44 lines (42 loc) 1.41 kB
"use strict"; 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;