UNPKG

@sinclair/typebox

Version:

Json Schema Type Builder with Static Type Resolution for TypeScript

25 lines (23 loc) 1.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Object = exports._Object = void 0; const type_1 = require("../clone/type"); const index_1 = require("../symbols/index"); // ------------------------------------------------------------------ // TypeGuard // ------------------------------------------------------------------ const type_2 = require("../guard/type"); /** `[Json]` Creates an Object type */ function _Object(properties, options = {}) { const propertyKeys = globalThis.Object.getOwnPropertyNames(properties); const optionalKeys = propertyKeys.filter((key) => (0, type_2.IsOptional)(properties[key])); const requiredKeys = propertyKeys.filter((name) => !optionalKeys.includes(name)); const clonedAdditionalProperties = (0, type_2.IsSchema)(options.additionalProperties) ? { additionalProperties: (0, type_1.CloneType)(options.additionalProperties) } : {}; const clonedProperties = propertyKeys.reduce((acc, key) => ({ ...acc, [key]: (0, type_1.CloneType)(properties[key]) }), {}); return (requiredKeys.length > 0 ? { ...options, ...clonedAdditionalProperties, [index_1.Kind]: 'Object', type: 'object', properties: clonedProperties, required: requiredKeys } : { ...options, ...clonedAdditionalProperties, [index_1.Kind]: 'Object', type: 'object', properties: clonedProperties }); } exports._Object = _Object; /** `[Json]` Creates an Object type */ exports.Object = _Object;