declare type StrictNullChecksWrapper = undefined extends null ? `strictNullChecks must be true in tsconfig to use ${Name}` : Type; export declare type SomeJSONSchema = UncheckedJSONSchemaType; declare type UncheckedPartialSchema = Partial>; export declare type PartialSchema = StrictNullChecksWrapper<"PartialSchema", UncheckedPartialSchema>; declare type JSONType = IsPartial extends true ? T | undefined : T; interface NumberKeywords { minimum?: number; maximum?: number; exclusiveMinimum?: number; exclusiveMaximum?: number; multipleOf?: number; format?: string; } interface StringKeywords { minLength?: number; maxLength?: number; pattern?: string; format?: string; } declare type UncheckedJSONSchemaType = (// these two unions allow arbitrary unions of types { anyOf: readonly UncheckedJSONSchemaType[]; } | { oneOf: readonly UncheckedJSONSchemaType[]; } | ({ type: (T extends number ? JSONType<"number" | "integer", IsPartial> : T extends string ? JSONType<"string", IsPartial> : T extends boolean ? JSONType<"boolean", IsPartial> : never)[]; } & (T extends number ? NumberKeywords : T extends string ? StringKeywords : T extends boolean ? unknown : never)) | ((T extends number ? { type: JSONType<"number" | "integer", IsPartial>; } & NumberKeywords : T extends string ? { type: JSONType<"string", IsPartial>; } & StringKeywords : T extends boolean ? { type: "boolean"; } : T extends [any, ...any[]] ? { type: JSONType<"array", IsPartial>; items: { readonly [K in keyof T]-?: UncheckedJSONSchemaType & Nullable; } & { length: T["length"]; }; minItems: T["length"]; } & ({ maxItems: T["length"]; } | { additionalItems: false; }) : T extends readonly any[] ? { type: JSONType<"array", IsPartial>; items: UncheckedJSONSchemaType; contains?: UncheckedPartialSchema; minItems?: number; maxItems?: number; minContains?: number; maxContains?: number; uniqueItems?: true; additionalItems?: never; } : T extends Record ? { type: JSONType<"object", IsPartial>; additionalProperties?: boolean | UncheckedJSONSchemaType; unevaluatedProperties?: boolean | UncheckedJSONSchemaType; properties?: IsPartial extends true ? Partial> : UncheckedPropertiesSchema; patternProperties?: { [Pattern in string]?: UncheckedJSONSchemaType; }; propertyNames?: Omit, "type"> & { type?: "string"; }; dependencies?: { [K in keyof T]?: Readonly<(keyof T)[]> | UncheckedPartialSchema; }; dependentRequired?: { [K in keyof T]?: Readonly<(keyof T)[]>; }; dependentSchemas?: { [K in keyof T]?: UncheckedPartialSchema; }; minProperties?: number; maxProperties?: number; } & (IsPartial extends true ? { required: Readonly<(keyof T)[]>; } : [UncheckedRequiredMembers] extends [never] ? { required?: Readonly[]>; } : { required: Readonly[]>; }) : T extends null ? { nullable: true; } : never) & { allOf?: Readonly[]>; anyOf?: Readonly[]>; oneOf?: Readonly[]>; if?: UncheckedPartialSchema; then?: UncheckedPartialSchema; else?: UncheckedPartialSchema; not?: UncheckedPartialSchema; })) & { [keyword: string]: any; $id?: string; $ref?: string; $defs?: { [Key in string]?: UncheckedJSONSchemaType; }; definitions?: { [Key in string]?: UncheckedJSONSchemaType; }; }; export declare type JSONSchemaType = StrictNullChecksWrapper<"JSONSchemaType", UncheckedJSONSchemaType>; declare type Known = KnownRecord | [Known, ...Known[]] | Known[] | number | string | boolean | null; interface KnownRecord extends Record { } declare type UncheckedPropertiesSchema = { [K in keyof T]-?: (UncheckedJSONSchemaType & Nullable) | { $ref: string; }; }; export declare type PropertiesSchema = StrictNullChecksWrapper<"PropertiesSchema", UncheckedPropertiesSchema>; declare type UncheckedRequiredMembers = { [K in keyof T]-?: undefined extends T[K] ? never : K; }[keyof T]; export declare type RequiredMembers = StrictNullChecksWrapper<"RequiredMembers", UncheckedRequiredMembers>; declare type Nullable = undefined extends T ? { nullable: true; const?: never; enum?: Readonly<(T | null)[]>; default?: T | null; } : { const?: T; enum?: Readonly; default?: T; }; export {};