1 export declare type SomeJSONSchema = JSONSchemaType<Known, true>;
2 export declare type PartialSchema<T> = Partial<JSONSchemaType<T, true>>;
3 declare type JSONType<T extends string, _partial extends boolean> = _partial extends true ? T | undefined : T;
4 interface NumberKeywords {
7 exclusiveMinimum?: number;
8 exclusiveMaximum?: number;
12 interface StringKeywords {
18 export declare type JSONSchemaType<T, _partial extends boolean = false> = (((T extends number ? {
19 type: JSONType<"number" | "integer", _partial>;
20 } & NumberKeywords : T extends string ? {
21 type: JSONType<"string", _partial>;
22 } & StringKeywords : T extends boolean ? {
24 } : T extends [any, ...any[]] ? {
25 type: JSONType<"array", _partial>;
27 readonly [K in keyof T]-?: JSONSchemaType<T[K]> & Nullable<T[K]>;
31 minItems: T["length"];
33 maxItems: T["length"];
35 additionalItems: false;
36 }) : T extends readonly any[] ? {
37 type: JSONType<"array", _partial>;
38 items: JSONSchemaType<T[0]>;
39 contains?: PartialSchema<T[0]>;
45 additionalItems?: never;
46 } : T extends Record<string, any> ? {
47 type: JSONType<"object", _partial>;
48 required: _partial extends true ? Readonly<(keyof T)[]> : Readonly<RequiredMembers<T>[]>;
49 additionalProperties?: boolean | JSONSchemaType<T[string]>;
50 unevaluatedProperties?: boolean | JSONSchemaType<T[string]>;
51 properties?: _partial extends true ? Partial<PropertiesSchema<T>> : PropertiesSchema<T>;
53 [Pattern in string]?: JSONSchemaType<T[string]>;
55 propertyNames?: JSONSchemaType<string>;
57 [K in keyof T]?: Readonly<(keyof T)[]> | PartialSchema<T>;
60 [K in keyof T]?: Readonly<(keyof T)[]>;
63 [K in keyof T]?: PartialSchema<T>;
65 minProperties?: number;
66 maxProperties?: number;
67 } : T extends null ? {
70 allOf?: Readonly<PartialSchema<T>[]>;
71 anyOf?: Readonly<PartialSchema<T>[]>;
72 oneOf?: Readonly<PartialSchema<T>[]>;
73 if?: PartialSchema<T>;
74 then?: PartialSchema<T>;
75 else?: PartialSchema<T>;
76 not?: PartialSchema<T>;
78 anyOf: readonly JSONSchemaType<T, _partial>[];
80 oneOf: readonly JSONSchemaType<T, _partial>[];
82 type: (T extends number ? JSONType<"number" | "integer", _partial> : T extends string ? JSONType<"string", _partial> : T extends boolean ? JSONType<"boolean", _partial> : never)[];
83 } & (T extends number ? NumberKeywords : T extends string ? StringKeywords : T extends boolean ? unknown : never))) & {
84 [keyword: string]: any;
88 [Key in string]?: JSONSchemaType<Known, true>;
91 [Key in string]?: JSONSchemaType<Known, true>;
94 declare type Known = KnownRecord | [Known, ...Known[]] | Known[] | number | string | boolean | null;
95 interface KnownRecord extends Record<string, Known> {
97 export declare type PropertiesSchema<T> = {
98 [K in keyof T]-?: (JSONSchemaType<T[K]> & Nullable<T[K]>) | {
102 export declare type RequiredMembers<T> = {
103 [K in keyof T]-?: undefined extends T[K] ? never : K;
105 declare type Nullable<T> = undefined extends T ? {
108 enum?: Readonly<(T | null)[]>;
112 enum?: Readonly<T[]>;