1 | declare type StrictNullChecksWrapper<Name extends string, Type> = undefined extends null ? `strictNullChecks must be true in tsconfig to use ${Name}` : Type;
|
2 | export declare type SomeJSONSchema = UncheckedJSONSchemaType<Known, true>;
|
3 | declare type UncheckedPartialSchema<T> = Partial<UncheckedJSONSchemaType<T, true>>;
|
4 | export declare type PartialSchema<T> = StrictNullChecksWrapper<"PartialSchema", UncheckedPartialSchema<T>>;
|
5 | declare type JSONType<T extends string, IsPartial extends boolean> = IsPartial extends true ? T | undefined : T;
|
6 | interface NumberKeywords {
|
7 | minimum?: number;
|
8 | maximum?: number;
|
9 | exclusiveMinimum?: number;
|
10 | exclusiveMaximum?: number;
|
11 | multipleOf?: number;
|
12 | format?: string;
|
13 | }
|
14 | interface StringKeywords {
|
15 | minLength?: number;
|
16 | maxLength?: number;
|
17 | pattern?: string;
|
18 | format?: string;
|
19 | }
|
20 | declare type UncheckedJSONSchemaType<T, IsPartial extends boolean> = (
|
21 | {
|
22 | anyOf: readonly UncheckedJSONSchemaType<T, IsPartial>[];
|
23 | } | {
|
24 | oneOf: readonly UncheckedJSONSchemaType<T, IsPartial>[];
|
25 | } | ({
|
26 | type: (T extends number ? JSONType<"number" | "integer", IsPartial> : T extends string ? JSONType<"string", IsPartial> : T extends boolean ? JSONType<"boolean", IsPartial> : never)[];
|
27 | } & (T extends number ? NumberKeywords : T extends string ? StringKeywords : T extends boolean ? unknown : never)) | ((T extends number ? {
|
28 | type: JSONType<"number" | "integer", IsPartial>;
|
29 | } & NumberKeywords : T extends string ? {
|
30 | type: JSONType<"string", IsPartial>;
|
31 | } & StringKeywords : T extends boolean ? {
|
32 | type: "boolean";
|
33 | } : T extends [any, ...any[]] ? {
|
34 | type: JSONType<"array", IsPartial>;
|
35 | items: {
|
36 | readonly [K in keyof T]-?: UncheckedJSONSchemaType<T[K], false> & Nullable<T[K]>;
|
37 | } & {
|
38 | length: T["length"];
|
39 | };
|
40 | minItems: T["length"];
|
41 | } & ({
|
42 | maxItems: T["length"];
|
43 | } | {
|
44 | additionalItems: false;
|
45 | }) : T extends readonly any[] ? {
|
46 | type: JSONType<"array", IsPartial>;
|
47 | items: UncheckedJSONSchemaType<T[0], false>;
|
48 | contains?: UncheckedPartialSchema<T[0]>;
|
49 | minItems?: number;
|
50 | maxItems?: number;
|
51 | minContains?: number;
|
52 | maxContains?: number;
|
53 | uniqueItems?: true;
|
54 | additionalItems?: never;
|
55 | } : T extends Record<string, any> ? {
|
56 | type: JSONType<"object", IsPartial>;
|
57 | additionalProperties?: boolean | UncheckedJSONSchemaType<T[string], false>;
|
58 | unevaluatedProperties?: boolean | UncheckedJSONSchemaType<T[string], false>;
|
59 | properties?: IsPartial extends true ? Partial<UncheckedPropertiesSchema<T>> : UncheckedPropertiesSchema<T>;
|
60 | patternProperties?: {
|
61 | [Pattern in string]?: UncheckedJSONSchemaType<T[string], false>;
|
62 | };
|
63 | propertyNames?: Omit<UncheckedJSONSchemaType<string, false>, "type"> & {
|
64 | type?: "string";
|
65 | };
|
66 | dependencies?: {
|
67 | [K in keyof T]?: Readonly<(keyof T)[]> | UncheckedPartialSchema<T>;
|
68 | };
|
69 | dependentRequired?: {
|
70 | [K in keyof T]?: Readonly<(keyof T)[]>;
|
71 | };
|
72 | dependentSchemas?: {
|
73 | [K in keyof T]?: UncheckedPartialSchema<T>;
|
74 | };
|
75 | minProperties?: number;
|
76 | maxProperties?: number;
|
77 | } & (IsPartial extends true ? {
|
78 | required: Readonly<(keyof T)[]>;
|
79 | } : [UncheckedRequiredMembers<T>] extends [never] ? {
|
80 | required?: Readonly<UncheckedRequiredMembers<T>[]>;
|
81 | } : {
|
82 | required: Readonly<UncheckedRequiredMembers<T>[]>;
|
83 | }) : T extends null ? {
|
84 | nullable: true;
|
85 | } : never) & {
|
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>;
|
93 | })) & {
|
94 | [keyword: string]: any;
|
95 | $id?: string;
|
96 | $ref?: string;
|
97 | $defs?: {
|
98 | [Key in string]?: UncheckedJSONSchemaType<Known, true>;
|
99 | };
|
100 | definitions?: {
|
101 | [Key in string]?: UncheckedJSONSchemaType<Known, true>;
|
102 | };
|
103 | };
|
104 | export declare type JSONSchemaType<T> = StrictNullChecksWrapper<"JSONSchemaType", UncheckedJSONSchemaType<T, false>>;
|
105 | declare type Known = KnownRecord | [Known, ...Known[]] | Known[] | number | string | boolean | null;
|
106 | interface KnownRecord extends Record<string, Known> {
|
107 | }
|
108 | declare type UncheckedPropertiesSchema<T> = {
|
109 | [K in keyof T]-?: (UncheckedJSONSchemaType<T[K], false> & Nullable<T[K]>) | {
|
110 | $ref: string;
|
111 | };
|
112 | };
|
113 | export declare type PropertiesSchema<T> = StrictNullChecksWrapper<"PropertiesSchema", UncheckedPropertiesSchema<T>>;
|
114 | declare type UncheckedRequiredMembers<T> = {
|
115 | [K in keyof T]-?: undefined extends T[K] ? never : K;
|
116 | }[keyof T];
|
117 | export declare type RequiredMembers<T> = StrictNullChecksWrapper<"RequiredMembers", UncheckedRequiredMembers<T>>;
|
118 | declare type Nullable<T> = undefined extends T ? {
|
119 | nullable: true;
|
120 | const?: never;
|
121 | enum?: Readonly<(T | null)[]>;
|
122 | default?: T | null;
|
123 | } : {
|
124 | const?: T;
|
125 | enum?: Readonly<T[]>;
|
126 | default?: T;
|
127 | };
|
128 | export {};
|