[6a3a178] | 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 {};
|
---|