type JsonSchema = boolean | ArraySchema | ObjectSchema | NumberSchema | StringSchema; type JsonType = 'array' | 'object' | 'string' | 'number' | 'integer' | 'boolean' | 'null'; interface CommonSchema { type?: JsonType | JsonType[]; const?: unknown; enum?: unknown[]; format?: string; allOf?: JsonSchema[]; anyOf?: JsonSchema[]; oneOf?: JsonSchema[]; not?: JsonSchema; if?: JsonSchema; then?: JsonSchema; else?: JsonSchema; $id?: string; $defs?: Record; $anchor?: string; $dynamicAnchor?: string; $ref?: string; $dynamicRef?: string; $schema?: string; $vocabulary?: Record; $comment?: string; default?: unknown; deprecated?: boolean; readOnly?: boolean; writeOnly?: boolean; title?: string; description?: string; examples?: unknown[]; } interface ArraySchema extends CommonSchema { prefixItems?: JsonSchema[]; items?: JsonSchema; contains?: JsonSchema; unevaluatedItems?: JsonSchema; maxItems?: number; minItems?: number; uniqueItems?: boolean; maxContains?: number; minContains?: number; } interface ObjectSchema extends CommonSchema { properties?: Record; patternProperties?: Record; additionalProperties?: JsonSchema; propertyNames?: JsonSchema; unevaluatedProperties?: JsonSchema; maxProperties?: number; minProperties?: number; required?: string[]; dependentRequired?: Record; dependentSchemas?: Record; } interface StringSchema extends CommonSchema { maxLength?: number; minLength?: number; patter?: string; contentEncoding?: string; contentMediaType?: string; contentSchema?: JsonSchema; } interface NumberSchema extends CommonSchema { multipleOf?: number; maximum?: number; exclusiveMaximum?: number; minimum?: number; exclusiveMinimum?: number; }