@sinclair/typebox
Version:
Json Schema Type Builder with Static Type Resolution for TypeScript
25 lines (23 loc) • 1.46 kB
JavaScript
;
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;