export type JSONSchemaType = "string" | "number" | "integer" | "boolean" | "null" | "array" | "object"; export interface IJSONSchema { id?: string; $id?: string; $schema?: string; type?: JSONSchemaType | JSONSchemaType[]; title?: string; default?: any; definitions?: IJSONSchemaMap; description?: string; properties?: IJSONSchemaMap; patternProperties?: IJSONSchemaMap; additionalProperties?: boolean | IJSONSchema; minProperties?: number; maxProperties?: number; dependencies?: IJSONSchemaMap | { [prop: string]: string[]; }; items?: IJSONSchema | IJSONSchema[]; minItems?: number; maxItems?: number; uniqueItems?: boolean; additionalItems?: boolean | IJSONSchema; pattern?: string; minLength?: number; maxLength?: number; minimum?: number; maximum?: number; exclusiveMinimum?: boolean | number; exclusiveMaximum?: boolean | number; multipleOf?: number; required?: string[]; $ref?: string; anyOf?: IJSONSchema[]; allOf?: IJSONSchema[]; oneOf?: IJSONSchema[]; not?: IJSONSchema; enum?: any[]; format?: string; const?: any; contains?: IJSONSchema; propertyNames?: IJSONSchema; examples?: any[]; $comment?: string; if?: IJSONSchema; then?: IJSONSchema; else?: IJSONSchema; unevaluatedProperties?: boolean | IJSONSchema; unevaluatedItems?: boolean | IJSONSchema; minContains?: number; maxContains?: number; deprecated?: boolean; dependentRequired?: { [prop: string]: string[]; }; dependentSchemas?: IJSONSchemaMap; $defs?: { [name: string]: IJSONSchema; }; $anchor?: string; $recursiveRef?: string; $recursiveAnchor?: string; $vocabulary?: any; prefixItems?: IJSONSchema[]; $dynamicRef?: string; $dynamicAnchor?: string; defaultSnippets?: IJSONSchemaSnippet[]; errorMessage?: string; patternErrorMessage?: string; deprecationMessage?: string; markdownDeprecationMessage?: string; enumDescriptions?: string[]; markdownEnumDescriptions?: string[]; markdownDescription?: string; doNotSuggest?: boolean; suggestSortText?: string; allowComments?: boolean; allowTrailingCommas?: boolean; secret?: boolean; } export interface IJSONSchemaMap { [name: string]: IJSONSchema; } export interface IJSONSchemaSnippet { label?: string; description?: string; body?: any; bodyText?: string; } /** * Converts a basic JSON schema to a TypeScript type. */ export type TypeFromJsonSchema = T extends { enum: infer EnumValues; } ? UnionOf : T extends { type: "object"; properties: infer P; required: infer RequiredList; } ? { [K in keyof P]: IsRequired extends true ? TypeFromJsonSchema : TypeFromJsonSchema | undefined; } & AdditionalPropertiesType : T extends { type: "object"; properties: infer P; } ? { [K in keyof P]: TypeFromJsonSchema | undefined; } & AdditionalPropertiesType : T extends { type: "array"; items: infer Items; } ? Items extends [ ...infer R ] ? { [K in keyof R]: TypeFromJsonSchema; } : Array> : T extends { oneOf: infer I; } ? MapSchemaToType : T extends { anyOf: infer I; } ? MapSchemaToType : T extends { type: infer Type; } ? Type extends "string" | "number" | "integer" | "boolean" | "null" ? SchemaPrimitiveTypeNameToType : Type extends [ ...infer R ] ? UnionOf<{ [K in keyof R]: SchemaPrimitiveTypeNameToType; }> : never : never; type SchemaPrimitiveTypeNameToType = T extends "string" ? string : T extends "number" | "integer" ? number : T extends "boolean" ? boolean : T extends "null" ? null : never; type UnionOf = T extends [ infer First, ...infer Rest ] ? First | UnionOf : never; type IsRequired = RequiredList extends [ ] ? false : RequiredList extends [ K, ...infer _ ] ? true : RequiredList extends [ infer _, ...infer R ] ? IsRequired : false; type AdditionalPropertiesType = Schema extends { additionalProperties: infer AP; } ? AP extends false ? {} : { [key: string]: TypeFromJsonSchema; } : {}; type MapSchemaToType = T extends [ infer First, ...infer Rest ] ? TypeFromJsonSchema | MapSchemaToType : never; export declare function getCompressedContent(schema: IJSONSchema): string; export {};