export type JsonSchema = NumericJsonSchema | StringJsonSchema | ArrayJsonSchema | ObjectJsonSchema | JsonSchemaReference | EmptyJsonSchema;
export interface EmptyJsonSchema {
}
export interface JsonSchemaReference {
    $ref: string;
}
export interface BaseJsonSchema {
    $id?: string;
    $schema?: string;
    title?: string;
    description?: string;
    definitions?: {
        [name: string]: JsonSchema;
    };
    enum?: unknown[];
    format?: string | Format;
    if?: JsonSchema;
    then?: JsonSchema;
    else?: JsonSchema;
    allOf?: JsonSchema[];
    anyOf?: JsonSchema[];
    oneOf?: JsonSchema[];
    not?: JsonSchema;
}
export type Format = typeof Format.dateTime | typeof Format.date | typeof Format.time | typeof Format.email | typeof Format.idnEmail | typeof Format.hostname | typeof Format.idnHostname | typeof Format.ipv4 | typeof Format.ipv6 | typeof Format.uri | typeof Format.uriReference | typeof Format.iri | typeof Format.iriReference | typeof Format.uriTemplate | typeof Format.jsonPointer | typeof Format.relativeJsonPointer | typeof Format.regex;
export declare namespace Format {
    const dateTime = "date-time";
    const date = "date";
    const time = "time";
    const email = "email";
    const idnEmail = "idn-email";
    const hostname = "hostname";
    const idnHostname = "idn-hostname";
    const ipv4 = "ipv4";
    const ipv6 = "ipv6";
    const uri = "uri";
    const uriReference = "uri-reference";
    const iri = "iri";
    const iriReference = "iri-reference";
    const uriTemplate = "uri-template";
    const jsonPointer = "json-pointer";
    const relativeJsonPointer = "relative-json-pointer";
    const regex = "regex";
}
export interface NumericJsonSchema extends BaseJsonSchema {
    type: JsonSchemaType.Numeric | JsonSchemaType[];
    multipleOf?: number;
    maximum?: number;
    exclusiveMaximum?: boolean;
    minimum?: number;
    exclusiveMinimum?: boolean;
}
export interface StringJsonSchema extends BaseJsonSchema {
    type: typeof JsonSchemaType.string | JsonSchemaType[];
    maxLength?: number;
    minLength?: number;
    pattern?: string;
}
export interface ArrayJsonSchema extends BaseJsonSchema {
    type: typeof JsonSchemaType.array | JsonSchemaType[];
    items?: JsonSchema | JsonSchema[];
    additionalItems?: JsonSchema;
    maxItems?: number;
    minItems?: number;
    uniqueItems?: boolean;
    contains: JsonSchema;
}
export interface ObjectJsonSchema extends BaseJsonSchema {
    type: typeof JsonSchemaType.object | JsonSchemaType[];
    maxProperties?: number;
    minProperties?: number;
    required?: string[];
    properties?: {
        [name: string]: JsonSchema;
    };
    patternProperties?: {
        [name: string]: JsonSchema;
    };
    additionalProperties?: JsonSchema;
    dependencies?: {
        [name: string]: JsonSchema | string[];
    };
}
declare namespace JsonSchemaType {
    const number = "number";
    const integer = "integer";
    const array = "array";
    const object = "object";
    const string = "string";
    type Numeric = typeof number | typeof integer;
}
export type JsonSchemaType = 'null' | 'boolean' | typeof JsonSchemaType.object | typeof JsonSchemaType.array | typeof JsonSchemaType.string | JsonSchemaType.Numeric;
export {};
//# sourceMappingURL=jsonSchema.d.ts.map