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> = (// these two unions allow arbitrary unions of types
|
---|
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 {};
|
---|