@redocly/openapi-core 1.27.2 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,19 +1,26 @@
1
- export interface Oas3Definition {
1
+ // common fields for OAS descriptions v3.x
2
+ interface Oas3DefinitionBase<T extends Oas3Schema | Oas3_1Schema> {
2
3
  openapi: string;
3
4
  info?: Oas3Info;
4
5
  servers?: Oas3Server[];
5
- paths?: Oas3Paths;
6
- components?: Oas3Components;
6
+ paths?: Oas3Paths<T>;
7
+ components?: T extends Oas3_1Schema ? Oas3_1Components : Oas3Components;
7
8
  security?: Oas3SecurityRequirement[];
8
9
  tags?: Oas3Tag[];
9
10
  externalDocs?: Oas3ExternalDocs;
10
- 'x-webhooks'?: Oas3_1Webhooks;
11
+ }
12
+
13
+ export interface Oas3Definition extends Oas3DefinitionBase<Oas3Schema> {
14
+ 'x-webhooks'?: Oas3Webhooks<Oas3Schema>;
15
+ }
16
+
17
+ export interface Oas3_1Definition extends Oas3DefinitionBase<Oas3_1Schema> {
18
+ webhooks?: Oas3Webhooks<Oas3_1Schema>;
11
19
  }
12
20
 
13
21
  export interface Oas3Info {
14
22
  title: string;
15
23
  version: string;
16
-
17
24
  description?: string;
18
25
  termsOfService?: string;
19
26
  contact?: Oas3Contact;
@@ -32,8 +39,8 @@ export interface Oas3ServerVariable {
32
39
  description?: string;
33
40
  }
34
41
 
35
- export interface Oas3Paths {
36
- [path: string]: Referenced<Oas3PathItem>;
42
+ export interface Oas3Paths<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> {
43
+ [path: string]: Referenced<Oas3PathItem<T>>;
37
44
  }
38
45
  export interface OasRef {
39
46
  $ref: string;
@@ -41,19 +48,19 @@ export interface OasRef {
41
48
 
42
49
  export type Referenced<T> = OasRef | T;
43
50
 
44
- export interface Oas3PathItem {
51
+ export interface Oas3PathItem<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> {
45
52
  summary?: string;
46
53
  description?: string;
47
- get?: Oas3Operation;
48
- put?: Oas3Operation;
49
- post?: Oas3Operation;
50
- delete?: Oas3Operation;
51
- options?: Oas3Operation;
52
- head?: Oas3Operation;
53
- patch?: Oas3Operation;
54
- trace?: Oas3Operation;
54
+ get?: Oas3Operation<T>;
55
+ put?: Oas3Operation<T>;
56
+ post?: Oas3Operation<T>;
57
+ delete?: Oas3Operation<T>;
58
+ options?: Oas3Operation<T>;
59
+ head?: Oas3Operation<T>;
60
+ patch?: Oas3Operation<T>;
61
+ trace?: Oas3Operation<T>;
55
62
  servers?: Oas3Server[];
56
- parameters?: Array<Referenced<Oas3Parameter>>;
63
+ parameters?: Array<Referenced<Oas3Parameter<T>>>;
57
64
  }
58
65
 
59
66
  export interface Oas3XCodeSample {
@@ -62,16 +69,16 @@ export interface Oas3XCodeSample {
62
69
  source: string;
63
70
  }
64
71
 
65
- export interface Oas3Operation {
72
+ export interface Oas3Operation<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> {
66
73
  tags?: string[];
67
74
  summary?: string;
68
75
  description?: string;
69
76
  externalDocs?: Oas3ExternalDocs;
70
77
  operationId?: string;
71
- parameters?: Array<Referenced<Oas3Parameter>>;
72
- requestBody?: Referenced<Oas3RequestBody>;
73
- responses: Oas3Responses;
74
- callbacks?: { [name: string]: Referenced<Oas3Callback> };
78
+ parameters?: Array<Referenced<Oas3Parameter<T>>>;
79
+ requestBody?: Referenced<Oas3RequestBody<T>>;
80
+ responses: Oas3Responses<T>;
81
+ callbacks?: { [name: string]: Referenced<Oas3Callback<T>> };
75
82
  deprecated?: boolean;
76
83
  security?: Oas3SecurityRequirement[];
77
84
  servers?: Oas3Server[];
@@ -80,7 +87,7 @@ export interface Oas3Operation {
80
87
  'x-hideTryItPanel'?: boolean;
81
88
  }
82
89
 
83
- export interface Oas3Parameter {
90
+ export interface Oas3Parameter<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> {
84
91
  name: string;
85
92
  in?: Oas3ParameterLocation;
86
93
  description?: string;
@@ -90,14 +97,14 @@ export interface Oas3Parameter {
90
97
  style?: Oas3ParameterStyle;
91
98
  explode?: boolean;
92
99
  allowReserved?: boolean;
93
- schema?: Referenced<Oas3Schema>;
94
- example?: any;
100
+ schema?: Referenced<T>;
101
+ example?: unknown;
95
102
  examples?: { [media: string]: Referenced<Oas3Example> };
96
- content?: { [media: string]: Oas3MediaType };
103
+ content?: { [media: string]: Oas3MediaType<T> };
97
104
  }
98
105
 
99
106
  export interface Oas3Example {
100
- value: any;
107
+ value: unknown;
101
108
  summary?: string;
102
109
  description?: string;
103
110
  externalValue?: string;
@@ -112,13 +119,12 @@ export interface Oas3Xml {
112
119
  }
113
120
 
114
121
  // common fields for OpenAPI Schema v3.x
115
- interface Oas3XSchemaBase<T> {
122
+ interface Oas3XSchemaBase<T extends Oas3Schema | Oas3_1Schema> {
116
123
  $ref?: string;
117
- properties?: { [name: string]: T };
124
+ properties?: { [name: string]: Referenced<T> };
118
125
  additionalProperties?: boolean | T;
119
126
  description?: string;
120
- default?: any;
121
- items?: T;
127
+ default?: unknown;
122
128
  required?: string[];
123
129
  readOnly?: boolean;
124
130
  writeOnly?: boolean;
@@ -126,28 +132,25 @@ interface Oas3XSchemaBase<T> {
126
132
  format?: string;
127
133
  externalDocs?: Oas3ExternalDocs;
128
134
  discriminator?: Oas3Discriminator;
129
- nullable?: boolean;
130
135
  oneOf?: T[];
131
136
  anyOf?: T[];
132
137
  allOf?: T[];
133
138
  not?: T;
134
-
135
139
  title?: string;
136
140
  multipleOf?: number;
137
141
  maximum?: number;
138
- exclusiveMaximum?: boolean;
139
142
  minimum?: number;
140
- exclusiveMinimum?: boolean;
141
143
  maxLength?: number;
142
144
  minLength?: number;
143
145
  pattern?: string;
146
+ items?: boolean | T;
144
147
  maxItems?: number;
145
148
  minItems?: number;
146
149
  uniqueItems?: boolean;
147
150
  maxProperties?: number;
148
151
  minProperties?: number;
149
- enum?: any[];
150
- example?: any;
152
+ enum?: unknown[];
153
+ example?: unknown;
151
154
 
152
155
  xml?: Oas3Xml;
153
156
  'x-tags'?: string[];
@@ -155,20 +158,45 @@ interface Oas3XSchemaBase<T> {
155
158
 
156
159
  export interface Oas3Schema extends Oas3XSchemaBase<Oas3Schema> {
157
160
  type?: string;
161
+ exclusiveMaximum?: boolean;
162
+ exclusiveMinimum?: boolean;
163
+ nullable?: boolean;
158
164
  }
159
165
 
160
166
  export interface Oas3_1Schema extends Oas3XSchemaBase<Oas3_1Schema> {
167
+ $id?: string;
168
+ $schema?: string;
169
+ $anchor?: string;
170
+ $dynamicAnchor?: string;
171
+ $dynamicRef?: string;
172
+ $defs?: { [name: string]: Referenced<Oas3_1Schema> };
173
+ $vocabulary?: { [uri: string]: boolean };
174
+ $comment?: string;
161
175
  type?: string | string[];
162
- examples?: any[];
176
+ examples?: unknown[];
163
177
  prefixItems?: Oas3_1Schema[];
164
- }
165
-
166
- export interface Oas3_1Definition extends Oas3Definition {
167
- webhooks?: Oas3_1Webhooks;
168
- }
169
-
170
- export interface Oas3_1Webhooks {
171
- [webhook: string]: Referenced<Oas3PathItem>;
178
+ exclusiveMaximum?: number;
179
+ exclusiveMinimum?: number;
180
+ const?: unknown;
181
+ contains?: Oas3_1Schema;
182
+ minContains?: number;
183
+ maxContains?: number;
184
+ propertyNames?: Oas3_1Schema;
185
+ if?: Oas3_1Schema;
186
+ then?: Oas3_1Schema;
187
+ else?: Oas3_1Schema;
188
+ dependentRequired?: { [name: string]: string[] };
189
+ dependentSchemas?: { [name: string]: Referenced<Oas3_1Schema> };
190
+ patternProperties?: { [name: string]: Referenced<Oas3_1Schema> };
191
+ unevaluatedItems?: boolean | Oas3_1Schema;
192
+ unevaluatedProperties?: boolean | Oas3_1Schema;
193
+ contentSchema?: Oas3_1Schema;
194
+ contentMediaType?: string;
195
+ contentEncoding?: string;
196
+ }
197
+
198
+ export interface Oas3Webhooks<T extends Oas3Schema | Oas3_1Schema> {
199
+ [webhook: string]: Referenced<Oas3PathItem<T>>;
172
200
  }
173
201
 
174
202
  export interface Oas3Discriminator {
@@ -177,16 +205,16 @@ export interface Oas3Discriminator {
177
205
  'x-explicitMappingOnly'?: boolean;
178
206
  }
179
207
 
180
- export interface Oas3MediaType {
181
- schema?: Referenced<Oas3Schema>;
182
- example?: any;
208
+ export interface Oas3MediaType<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> {
209
+ schema?: Referenced<T>;
210
+ example?: unknown;
183
211
  examples?: { [name: string]: Referenced<Oas3Example> };
184
- encoding?: { [field: string]: Oas3Encoding };
212
+ encoding?: { [field: string]: Oas3Encoding<T> };
185
213
  }
186
214
 
187
- export interface Oas3Encoding {
215
+ export interface Oas3Encoding<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> {
188
216
  contentType: string;
189
- headers?: { [name: string]: Referenced<Oas3Header> };
217
+ headers?: { [name: string]: Referenced<Oas3Header<T>> };
190
218
  style: Oas3ParameterStyle;
191
219
  explode: boolean;
192
220
  allowReserved: boolean;
@@ -202,46 +230,62 @@ export type Oas3ParameterStyle =
202
230
  | 'pipeDelimited'
203
231
  | 'deepObject';
204
232
 
205
- export interface Oas3RequestBody {
233
+ export interface Oas3RequestBody<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> {
206
234
  description?: string;
207
235
  required?: boolean;
208
- content: { [mime: string]: Oas3MediaType };
236
+ content: { [mime: string]: Oas3MediaType<T> };
209
237
  }
210
238
 
211
- export interface Oas3Responses {
212
- [code: string]: Oas3Response;
239
+ export interface Oas3Responses<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> {
240
+ [code: string]: Oas3Response<T>;
213
241
  }
214
242
 
215
- export interface Oas3Response {
243
+ export interface Oas3Response<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> {
216
244
  description?: string;
217
- headers?: { [name: string]: Referenced<Oas3Header> };
218
- content?: { [mime: string]: Oas3MediaType };
245
+ headers?: { [name: string]: Referenced<Oas3Header<T>> };
246
+ content?: { [mime: string]: Oas3MediaType<T> };
219
247
  links?: { [name: string]: Referenced<Oas3Link> };
220
248
  }
221
249
 
222
250
  export interface Oas3Link {
223
- $ref?: string;
251
+ operationRef?: string;
252
+ operationId?: string;
253
+ parameters?: { [name: string]: unknown };
254
+ requestBody?: unknown;
255
+ description?: string;
256
+ server?: Oas3Server;
224
257
  }
225
258
 
226
- export type Oas3Header = Omit<Oas3Parameter, 'in' | 'name'>;
259
+ export type Oas3Header<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> = Omit<
260
+ Oas3Parameter<T>,
261
+ 'in' | 'name'
262
+ >;
227
263
 
228
- export interface Oas3Callback {
229
- [name: string]: Oas3PathItem;
264
+ export interface Oas3Callback<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> {
265
+ [name: string]: Oas3PathItem<T>;
230
266
  }
231
267
 
232
- export interface Oas3Components {
233
- schemas?: { [name: string]: Referenced<Oas3Schema> };
234
- responses?: { [name: string]: Referenced<Oas3Response> };
235
- parameters?: { [name: string]: Referenced<Oas3Parameter> };
268
+ // common fields for OAS components v3.x
269
+ export interface Oas3ComponentsBase<T extends Oas3Schema | Oas3_1Schema> {
270
+ schemas?: { [name: string]: Referenced<T> };
271
+ responses?: { [name: string]: Referenced<Oas3Response<T>> };
272
+ parameters?: { [name: string]: Referenced<Oas3Parameter<T>> };
236
273
  examples?: { [name: string]: Referenced<Oas3Example> };
237
- requestBodies?: { [name: string]: Referenced<Oas3RequestBody> };
238
- headers?: { [name: string]: Referenced<Oas3Header> };
274
+ requestBodies?: { [name: string]: Referenced<Oas3RequestBody<T>> };
275
+ headers?: { [name: string]: Referenced<Oas3Header<T>> };
239
276
  securitySchemes?: { [name: string]: Referenced<Oas3SecurityScheme> };
240
277
  links?: { [name: string]: Referenced<Oas3Link> };
241
- callbacks?: { [name: string]: Referenced<Oas3Callback> };
278
+ callbacks?: { [name: string]: Referenced<Oas3Callback<T>> };
242
279
  }
243
280
 
244
- export type Oas3ComponentName = keyof Oas3Components;
281
+ export interface Oas3_1Components extends Oas3ComponentsBase<Oas3_1Schema> {
282
+ pathItems?: { [name: string]: Referenced<Oas3PathItem<Oas3_1Schema>> };
283
+ }
284
+
285
+ export interface Oas3Components extends Oas3ComponentsBase<Oas3Schema> {}
286
+
287
+ export type Oas3ComponentName<T extends Oas3Schema | Oas3_1Schema = Oas3Schema | Oas3_1Schema> =
288
+ keyof Oas3ComponentsBase<T>;
245
289
 
246
290
  export interface Oas3SecurityRequirement {
247
291
  [name: string]: string[];
package/src/utils.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import * as fs from 'fs';
2
2
  import { extname } from 'path';
3
3
  import * as minimatch from 'minimatch';
4
- import fetch from 'node-fetch';
5
4
  import { parseYaml } from './js-yaml';
6
5
  import { env } from './env';
7
6
  import { logger, colorize } from './logger';
@@ -354,3 +353,5 @@ export function dequal(foo: any, bar: any): boolean {
354
353
  }
355
354
 
356
355
  export type CollectFn = (value: unknown) => void;
356
+
357
+ export type StrictObject<T extends object> = T & { [key: string]: undefined };
package/src/visitors.ts CHANGED
@@ -6,12 +6,15 @@ import type { UserContext, ResolveResult, ProblemSeverity } from './walk';
6
6
  import type { Location } from './ref-utils';
7
7
  import type {
8
8
  Oas3Definition,
9
+ Oas3_1Definition,
9
10
  Oas3ExternalDocs,
10
11
  Oas3Info,
11
12
  Oas3Contact,
12
13
  Oas3Components,
14
+ Oas3_1Components,
13
15
  Oas3License,
14
16
  Oas3Schema,
17
+ Oas3_1Schema,
15
18
  Oas3Header,
16
19
  Oas3Parameter,
17
20
  Oas3Operation,
@@ -152,7 +155,7 @@ export type BaseVisitor = {
152
155
  };
153
156
 
154
157
  type Oas3FlatVisitor = {
155
- Root?: VisitFunctionOrObject<Oas3Definition>;
158
+ Root?: VisitFunctionOrObject<Oas3Definition | Oas3_1Definition>;
156
159
  Tag?: VisitFunctionOrObject<Oas3Tag>;
157
160
  ExternalDocs?: VisitFunctionOrObject<Oas3ExternalDocs>;
158
161
  Server?: VisitFunctionOrObject<Oas3Server>;
@@ -161,36 +164,38 @@ type Oas3FlatVisitor = {
161
164
  Info?: VisitFunctionOrObject<Oas3Info>;
162
165
  Contact?: VisitFunctionOrObject<Oas3Contact>;
163
166
  License?: VisitFunctionOrObject<Oas3License>;
164
- Paths?: VisitFunctionOrObject<Record<string, Oas3PathItem>>;
165
- PathItem?: VisitFunctionOrObject<Oas3PathItem>;
166
- Callback?: VisitFunctionOrObject<Oas3Callback>;
167
- CallbacksMap?: VisitFunctionOrObject<Record<string, Oas3Callback>>;
168
- Parameter?: VisitFunctionOrObject<Oas3Parameter>;
169
- Operation?: VisitFunctionOrObject<Oas3Operation>;
170
- RequestBody?: VisitFunctionOrObject<Oas3RequestBody>;
171
- MediaTypesMap?: VisitFunctionOrObject<Record<string, Oas3MediaType>>;
172
- MediaType?: VisitFunctionOrObject<Oas3MediaType>;
167
+ Paths?: VisitFunctionOrObject<Record<string, Oas3PathItem<Oas3Schema | Oas3_1Schema>>>;
168
+ PathItem?: VisitFunctionOrObject<Oas3PathItem<Oas3Schema | Oas3_1Schema>>;
169
+ Callback?: VisitFunctionOrObject<Oas3Callback<Oas3Schema | Oas3_1Schema>>;
170
+ CallbacksMap?: VisitFunctionOrObject<Record<string, Oas3Callback<Oas3Schema | Oas3_1Schema>>>;
171
+ Parameter?: VisitFunctionOrObject<Oas3Parameter<Oas3Schema | Oas3_1Schema>>;
172
+ Operation?: VisitFunctionOrObject<Oas3Operation<Oas3Schema | Oas3_1Schema>>;
173
+ RequestBody?: VisitFunctionOrObject<Oas3RequestBody<Oas3Schema | Oas3_1Schema>>;
174
+ MediaTypesMap?: VisitFunctionOrObject<Record<string, Oas3MediaType<Oas3Schema | Oas3_1Schema>>>;
175
+ MediaType?: VisitFunctionOrObject<Oas3MediaType<Oas3Schema | Oas3_1Schema>>;
173
176
  Example?: VisitFunctionOrObject<Oas3Example>;
174
- Encoding?: VisitFunctionOrObject<Oas3Encoding>;
175
- Header?: VisitFunctionOrObject<Oas3Header>;
176
- Responses?: VisitFunctionOrObject<Record<string, Oas3Response>>;
177
- Response?: VisitFunctionOrObject<Oas3Response>;
177
+ Encoding?: VisitFunctionOrObject<Oas3Encoding<Oas3Schema | Oas3_1Schema>>;
178
+ Header?: VisitFunctionOrObject<Oas3Header<Oas3Schema | Oas3_1Schema>>;
179
+ Responses?: VisitFunctionOrObject<Record<string, Oas3Response<Oas3Schema | Oas3_1Schema>>>;
180
+ Response?: VisitFunctionOrObject<Oas3Response<Oas3Schema | Oas3_1Schema>>;
178
181
  Link?: VisitFunctionOrObject<Oas3Link>;
179
- Schema?: VisitFunctionOrObject<Oas3Schema>;
182
+ Schema?: VisitFunctionOrObject<Oas3Schema | Oas3_1Schema>;
180
183
  Xml?: VisitFunctionOrObject<Oas3Xml>;
181
184
  SchemaProperties?: VisitFunctionOrObject<Record<string, Oas3Schema>>;
182
185
  DiscriminatorMapping?: VisitFunctionOrObject<Record<string, string>>;
183
186
  Discriminator?: VisitFunctionOrObject<Oas3Discriminator>;
184
- Components?: VisitFunctionOrObject<Oas3Components>;
187
+ Components?: VisitFunctionOrObject<Oas3Components | Oas3_1Components>;
185
188
  NamedSchemas?: VisitFunctionOrObject<Record<string, Oas3Schema>>;
186
- NamedResponses?: VisitFunctionOrObject<Record<string, Oas3Response>>;
187
- NamedParameters?: VisitFunctionOrObject<Record<string, Oas3Parameter>>;
189
+ NamedResponses?: VisitFunctionOrObject<Record<string, Oas3Response<Oas3Schema | Oas3_1Schema>>>;
190
+ NamedParameters?: VisitFunctionOrObject<Record<string, Oas3Parameter<Oas3Schema | Oas3_1Schema>>>;
188
191
  NamedExamples?: VisitFunctionOrObject<Record<string, Oas3Example>>;
189
- NamedRequestBodies?: VisitFunctionOrObject<Record<string, Oas3RequestBody>>;
190
- NamedHeaders?: VisitFunctionOrObject<Record<string, Oas3Header>>;
192
+ NamedRequestBodies?: VisitFunctionOrObject<
193
+ Record<string, Oas3RequestBody<Oas3Schema | Oas3_1Schema>>
194
+ >;
195
+ NamedHeaders?: VisitFunctionOrObject<Record<string, Oas3Header<Oas3Schema | Oas3_1Schema>>>;
191
196
  NamedSecuritySchemes?: VisitFunctionOrObject<Record<string, Oas3SecurityScheme>>;
192
197
  NamedLinks?: VisitFunctionOrObject<Record<string, Oas3Link>>;
193
- NamedCallbacks?: VisitFunctionOrObject<Record<string, Oas3Callback>>;
198
+ NamedCallbacks?: VisitFunctionOrObject<Record<string, Oas3Callback<Oas3Schema | Oas3_1Schema>>>;
194
199
  ImplicitFlow?: VisitFunctionOrObject<Oas3SecurityScheme['flows']['implicit']>;
195
200
  PasswordFlow?: VisitFunctionOrObject<Oas3SecurityScheme['flows']['password']>;
196
201
  ClientCredentials?: VisitFunctionOrObject<Oas3SecurityScheme['flows']['clientCredentials']>;