Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/platform/configuration/common/jsonSchema.ts
13400 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
export type JsonSchema =
7
| NumericJsonSchema
8
| StringJsonSchema
9
| ArrayJsonSchema
10
| ObjectJsonSchema
11
| JsonSchemaReference
12
| EmptyJsonSchema;
13
14
export interface EmptyJsonSchema { }
15
16
export interface JsonSchemaReference {
17
$ref: string;
18
}
19
20
export interface BaseJsonSchema {
21
$id?: string;
22
$schema?: string;
23
title?: string;
24
description?: string;
25
26
definitions?: {
27
[name: string]: JsonSchema;
28
};
29
30
enum?: unknown[];
31
format?: string | Format;
32
33
if?: JsonSchema;
34
then?: JsonSchema;
35
else?: JsonSchema;
36
allOf?: JsonSchema[];
37
anyOf?: JsonSchema[];
38
oneOf?: JsonSchema[];
39
not?: JsonSchema;
40
}
41
42
export type Format =
43
| typeof Format.dateTime
44
| typeof Format.date
45
| typeof Format.time
46
| typeof Format.email
47
| typeof Format.idnEmail
48
| typeof Format.hostname
49
| typeof Format.idnHostname
50
| typeof Format.ipv4
51
| typeof Format.ipv6
52
| typeof Format.uri
53
| typeof Format.uriReference
54
| typeof Format.iri
55
| typeof Format.iriReference
56
| typeof Format.uriTemplate
57
| typeof Format.jsonPointer
58
| typeof Format.relativeJsonPointer
59
| typeof Format.regex;
60
61
export namespace Format {
62
export const dateTime = 'date-time';
63
export const date = 'date';
64
export const time = 'time';
65
export const email = 'email';
66
export const idnEmail = 'idn-email';
67
export const hostname = 'hostname';
68
export const idnHostname = 'idn-hostname';
69
export const ipv4 = 'ipv4';
70
export const ipv6 = 'ipv6';
71
export const uri = 'uri';
72
export const uriReference = 'uri-reference';
73
export const iri = 'iri';
74
export const iriReference = 'iri-reference';
75
export const uriTemplate = 'uri-template';
76
export const jsonPointer = 'json-pointer';
77
export const relativeJsonPointer = 'relative-json-pointer';
78
export const regex = 'regex';
79
}
80
81
export interface NumericJsonSchema extends BaseJsonSchema {
82
type: JsonSchemaType.Numeric | JsonSchemaType[];
83
multipleOf?: number;
84
maximum?: number;
85
exclusiveMaximum?: boolean;
86
minimum?: number;
87
exclusiveMinimum?: boolean;
88
}
89
90
export interface StringJsonSchema extends BaseJsonSchema {
91
type: typeof JsonSchemaType.string | JsonSchemaType[];
92
maxLength?: number;
93
minLength?: number;
94
pattern?: string;
95
}
96
97
export interface ArrayJsonSchema extends BaseJsonSchema {
98
type: typeof JsonSchemaType.array | JsonSchemaType[];
99
items?: JsonSchema | JsonSchema[];
100
additionalItems?: JsonSchema;
101
maxItems?: number;
102
minItems?: number;
103
uniqueItems?: boolean;
104
contains: JsonSchema;
105
}
106
107
export interface ObjectJsonSchema extends BaseJsonSchema {
108
type: typeof JsonSchemaType.object | JsonSchemaType[];
109
maxProperties?: number;
110
minProperties?: number;
111
required?: string[];
112
properties?: {
113
[name: string]: JsonSchema;
114
};
115
patternProperties?: {
116
[name: string]: JsonSchema;
117
};
118
additionalProperties?: JsonSchema;
119
dependencies?: {
120
[name: string]: JsonSchema | string[];
121
};
122
}
123
124
namespace JsonSchemaType {
125
export const number = 'number';
126
export const integer = 'integer';
127
export const array = 'array';
128
export const object = 'object';
129
export const string = 'string';
130
export type Numeric = typeof number | typeof integer;
131
}
132
133
export type JsonSchemaType =
134
| 'null'
135
| 'boolean'
136
| typeof JsonSchemaType.object
137
| typeof JsonSchemaType.array
138
| typeof JsonSchemaType.string
139
| JsonSchemaType.Numeric;
140