Path: blob/main/extensions/copilot/src/platform/configuration/common/jsonSchema.ts
13400 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45export type JsonSchema =6| NumericJsonSchema7| StringJsonSchema8| ArrayJsonSchema9| ObjectJsonSchema10| JsonSchemaReference11| EmptyJsonSchema;1213export interface EmptyJsonSchema { }1415export interface JsonSchemaReference {16$ref: string;17}1819export interface BaseJsonSchema {20$id?: string;21$schema?: string;22title?: string;23description?: string;2425definitions?: {26[name: string]: JsonSchema;27};2829enum?: unknown[];30format?: string | Format;3132if?: JsonSchema;33then?: JsonSchema;34else?: JsonSchema;35allOf?: JsonSchema[];36anyOf?: JsonSchema[];37oneOf?: JsonSchema[];38not?: JsonSchema;39}4041export type Format =42| typeof Format.dateTime43| typeof Format.date44| typeof Format.time45| typeof Format.email46| typeof Format.idnEmail47| typeof Format.hostname48| typeof Format.idnHostname49| typeof Format.ipv450| typeof Format.ipv651| typeof Format.uri52| typeof Format.uriReference53| typeof Format.iri54| typeof Format.iriReference55| typeof Format.uriTemplate56| typeof Format.jsonPointer57| typeof Format.relativeJsonPointer58| typeof Format.regex;5960export namespace Format {61export const dateTime = 'date-time';62export const date = 'date';63export const time = 'time';64export const email = 'email';65export const idnEmail = 'idn-email';66export const hostname = 'hostname';67export const idnHostname = 'idn-hostname';68export const ipv4 = 'ipv4';69export const ipv6 = 'ipv6';70export const uri = 'uri';71export const uriReference = 'uri-reference';72export const iri = 'iri';73export const iriReference = 'iri-reference';74export const uriTemplate = 'uri-template';75export const jsonPointer = 'json-pointer';76export const relativeJsonPointer = 'relative-json-pointer';77export const regex = 'regex';78}7980export interface NumericJsonSchema extends BaseJsonSchema {81type: JsonSchemaType.Numeric | JsonSchemaType[];82multipleOf?: number;83maximum?: number;84exclusiveMaximum?: boolean;85minimum?: number;86exclusiveMinimum?: boolean;87}8889export interface StringJsonSchema extends BaseJsonSchema {90type: typeof JsonSchemaType.string | JsonSchemaType[];91maxLength?: number;92minLength?: number;93pattern?: string;94}9596export interface ArrayJsonSchema extends BaseJsonSchema {97type: typeof JsonSchemaType.array | JsonSchemaType[];98items?: JsonSchema | JsonSchema[];99additionalItems?: JsonSchema;100maxItems?: number;101minItems?: number;102uniqueItems?: boolean;103contains: JsonSchema;104}105106export interface ObjectJsonSchema extends BaseJsonSchema {107type: typeof JsonSchemaType.object | JsonSchemaType[];108maxProperties?: number;109minProperties?: number;110required?: string[];111properties?: {112[name: string]: JsonSchema;113};114patternProperties?: {115[name: string]: JsonSchema;116};117additionalProperties?: JsonSchema;118dependencies?: {119[name: string]: JsonSchema | string[];120};121}122123namespace JsonSchemaType {124export const number = 'number';125export const integer = 'integer';126export const array = 'array';127export const object = 'object';128export const string = 'string';129export type Numeric = typeof number | typeof integer;130}131132export type JsonSchemaType =133| 'null'134| 'boolean'135| typeof JsonSchemaType.object136| typeof JsonSchemaType.array137| typeof JsonSchemaType.string138| JsonSchemaType.Numeric;139140