1 declare type StrictNullChecksWrapper<Name extends string, Type> = undefined extends null ? `strictNullChecks must be true in tsconfig to use ${Name}` : Type;
2 declare type UnionToIntersection<U> = (U extends any ? (_: U) => void : never) extends (_: infer I) => void ? I : never;
3 export declare type SomeJSONSchema = UncheckedJSONSchemaType<Known, true>;
4 declare type UncheckedPartialSchema<T> = Partial<UncheckedJSONSchemaType<T, true>>;
5 export declare type PartialSchema<T> = StrictNullChecksWrapper<"PartialSchema", UncheckedPartialSchema<T>>;
6 declare type JSONType<T extends string, IsPartial extends boolean> = IsPartial extends true ? T | undefined : T;
7 interface NumberKeywords {
10 exclusiveMinimum?: number;
11 exclusiveMaximum?: number;
15 interface StringKeywords {
21 declare type UncheckedJSONSchemaType<T, IsPartial extends boolean> = (// these two unions allow arbitrary unions of types
23 anyOf: readonly UncheckedJSONSchemaType<T, IsPartial>[];
25 oneOf: readonly UncheckedJSONSchemaType<T, IsPartial>[];
27 type: readonly (T extends number ? JSONType<"number" | "integer", IsPartial> : T extends string ? JSONType<"string", IsPartial> : T extends boolean ? JSONType<"boolean", IsPartial> : never)[];
28 } & UnionToIntersection<T extends number ? NumberKeywords : T extends string ? StringKeywords : T extends boolean ? {} : never>) | ((T extends number ? {
29 type: JSONType<"number" | "integer", IsPartial>;
30 } & NumberKeywords : T extends string ? {
31 type: JSONType<"string", IsPartial>;
32 } & StringKeywords : T extends boolean ? {
33 type: JSONType<"boolean", IsPartial>;
34 } : T extends readonly [any, ...any[]] ? {
35 type: JSONType<"array", IsPartial>;
37 readonly [K in keyof T]-?: UncheckedJSONSchemaType<T[K], false> & Nullable<T[K]>;
41 minItems: T["length"];
43 maxItems: T["length"];
45 additionalItems: false;
46 }) : T extends readonly any[] ? {
47 type: JSONType<"array", IsPartial>;
48 items: UncheckedJSONSchemaType<T[0], false>;
49 contains?: UncheckedPartialSchema<T[0]>;
55 additionalItems?: never;
56 } : T extends Record<string, any> ? {
57 type: JSONType<"object", IsPartial>;
58 additionalProperties?: boolean | UncheckedJSONSchemaType<T[string], false>;
59 unevaluatedProperties?: boolean | UncheckedJSONSchemaType<T[string], false>;
60 properties?: IsPartial extends true ? Partial<UncheckedPropertiesSchema<T>> : UncheckedPropertiesSchema<T>;
61 patternProperties?: Record<string, UncheckedJSONSchemaType<T[string], false>>;
62 propertyNames?: Omit<UncheckedJSONSchemaType<string, false>, "type"> & {
66 [K in keyof T]?: Readonly<(keyof T)[]> | UncheckedPartialSchema<T>;
69 [K in keyof T]?: Readonly<(keyof T)[]>;
72 [K in keyof T]?: UncheckedPartialSchema<T>;
74 minProperties?: number;
75 maxProperties?: number;
76 } & (IsPartial extends true ? {
77 required: Readonly<(keyof T)[]>;
78 } : [UncheckedRequiredMembers<T>] extends [never] ? {
79 required?: Readonly<UncheckedRequiredMembers<T>[]>;
81 required: Readonly<UncheckedRequiredMembers<T>[]>;
82 }) : T extends null ? {
83 type: JSONType<"null", IsPartial>;
86 allOf?: Readonly<UncheckedPartialSchema<T>[]>;
87 anyOf?: Readonly<UncheckedPartialSchema<T>[]>;
88 oneOf?: Readonly<UncheckedPartialSchema<T>[]>;
89 if?: UncheckedPartialSchema<T>;
90 then?: UncheckedPartialSchema<T>;
91 else?: UncheckedPartialSchema<T>;
92 not?: UncheckedPartialSchema<T>;
94 [keyword: string]: any;
97 $defs?: Record<string, UncheckedJSONSchemaType<Known, true>>;
98 definitions?: Record<string, UncheckedJSONSchemaType<Known, true>>;
100 export declare type JSONSchemaType<T> = StrictNullChecksWrapper<"JSONSchemaType", UncheckedJSONSchemaType<T, false>>;
101 declare type Known = {
102 [key: string]: Known;
103 } | [Known, ...Known[]] | Known[] | number | string | boolean | null;
104 declare type UncheckedPropertiesSchema<T> = {
105 [K in keyof T]-?: (UncheckedJSONSchemaType<T[K], false> & Nullable<T[K]>) | {
109 export declare type PropertiesSchema<T> = StrictNullChecksWrapper<"PropertiesSchema", UncheckedPropertiesSchema<T>>;
110 declare type UncheckedRequiredMembers<T> = {
111 [K in keyof T]-?: undefined extends T[K] ? never : K;
113 export declare type RequiredMembers<T> = StrictNullChecksWrapper<"RequiredMembers", UncheckedRequiredMembers<T>>;
114 declare type Nullable<T> = undefined extends T ? {
117 enum?: Readonly<(T | null)[]>;
121 enum?: Readonly<T[]>;