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<string, JsonSchema>;
    $anchor?: string;
    $dynamicAnchor?: string;
    $ref?: string;
    $dynamicRef?: string;
    $schema?: string;
    $vocabulary?: Record<string, boolean>;
    $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<string, JsonSchema>;
    patternProperties?: Record<string, JsonSchema>;
    additionalProperties?: JsonSchema;
    propertyNames?: JsonSchema;
    unevaluatedProperties?: JsonSchema;
    maxProperties?: number;
    minProperties?: number;
    required?: string[];
    dependentRequired?: Record<string, string[]>;
    dependentSchemas?: Record<string, JsonSchema>;
}
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;
}