@redocly/openapi-core 1.17.0 → 1.18.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.
- package/CHANGELOG.md +17 -0
- package/lib/bundle.d.ts +1 -1
- package/lib/bundle.js +15 -0
- package/lib/config/all.js +6 -0
- package/lib/config/builtIn.js +10 -2
- package/lib/config/config-resolvers.js +15 -4
- package/lib/config/config.d.ts +2 -2
- package/lib/config/config.js +15 -0
- package/lib/config/minimal.js +8 -0
- package/lib/config/recommended-strict.js +8 -0
- package/lib/config/recommended.js +8 -0
- package/lib/config/types.d.ts +10 -4
- package/lib/config/utils.js +13 -1
- package/lib/decorators/arazzo/index.d.ts +1 -0
- package/lib/decorators/arazzo/index.js +4 -0
- package/lib/decorators/async2/index.d.ts +1 -0
- package/lib/decorators/async2/index.js +4 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +4 -2
- package/lib/oas-types.d.ts +13 -8
- package/lib/oas-types.js +10 -0
- package/lib/rules/arazzo/index.d.ts +3 -0
- package/lib/rules/arazzo/index.js +10 -0
- package/lib/rules/common/spec.d.ts +2 -2
- package/lib/types/arazzo.d.ts +1050 -0
- package/lib/types/arazzo.js +381 -0
- package/lib/types/oas3.js +0 -8
- package/lib/types/oas3_1.js +7 -1
- package/lib/types/redocly-yaml.d.ts +5 -5
- package/lib/types/redocly-yaml.js +16 -5
- package/lib/typings/arazzo.d.ts +3 -0
- package/lib/typings/arazzo.js +2 -0
- package/lib/visitors.d.ts +11 -0
- package/package.json +3 -2
- package/src/__tests__/lint.test.ts +124 -0
- package/src/bundle.ts +13 -0
- package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +20 -0
- package/src/config/__tests__/__snapshots__/config.test.ts.snap +3 -0
- package/src/config/__tests__/config.test.ts +6 -0
- package/src/config/all.ts +6 -0
- package/src/config/builtIn.ts +10 -2
- package/src/config/config-resolvers.ts +17 -3
- package/src/config/config.ts +17 -0
- package/src/config/minimal.ts +8 -0
- package/src/config/recommended-strict.ts +8 -0
- package/src/config/recommended.ts +8 -0
- package/src/config/types.ts +15 -2
- package/src/config/utils.ts +15 -0
- package/src/decorators/arazzo/index.ts +1 -0
- package/src/decorators/async2/index.ts +1 -0
- package/src/index.ts +1 -0
- package/src/oas-types.ts +25 -4
- package/src/rules/arazzo/index.ts +11 -0
- package/src/rules/common/spec.ts +2 -2
- package/src/types/arazzo.ts +386 -0
- package/src/types/oas3.ts +0 -7
- package/src/types/oas3_1.ts +7 -0
- package/src/types/redocly-yaml.ts +19 -8
- package/src/typings/arazzo.ts +4 -0
- package/src/visitors.ts +18 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ArazzoTypes = exports.arazzoSchema = exports.ARAZZO_ROOT_TYPE = void 0;
|
|
4
|
+
const json_schema_adapter_1 = require("./json-schema-adapter");
|
|
5
|
+
exports.ARAZZO_ROOT_TYPE = 'Root';
|
|
6
|
+
const operationMethod = {
|
|
7
|
+
type: 'string',
|
|
8
|
+
enum: ['get', 'post', 'put', 'delete', 'patch'],
|
|
9
|
+
};
|
|
10
|
+
const expectSchema = {
|
|
11
|
+
type: 'object',
|
|
12
|
+
properties: {
|
|
13
|
+
statusCode: { type: 'number' },
|
|
14
|
+
mimeType: { type: 'string' },
|
|
15
|
+
body: {},
|
|
16
|
+
schema: {
|
|
17
|
+
type: 'object',
|
|
18
|
+
additionalProperties: true,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
additionalProperties: false,
|
|
22
|
+
oneOf: [
|
|
23
|
+
{ required: ['statusCode'] },
|
|
24
|
+
{ required: ['mimeType'] },
|
|
25
|
+
{ required: ['body'] },
|
|
26
|
+
{ required: ['schema'] },
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
const openAPISourceDescriptionSchema = {
|
|
30
|
+
type: 'object',
|
|
31
|
+
properties: {
|
|
32
|
+
name: { type: 'string' },
|
|
33
|
+
type: { type: 'string', enum: ['openapi'] },
|
|
34
|
+
url: { type: 'string' },
|
|
35
|
+
'x-serverUrl': { type: 'string' },
|
|
36
|
+
},
|
|
37
|
+
additionalProperties: false,
|
|
38
|
+
required: ['name', 'type', 'url'],
|
|
39
|
+
};
|
|
40
|
+
const noneSourceDescriptionSchema = {
|
|
41
|
+
type: 'object',
|
|
42
|
+
properties: {
|
|
43
|
+
name: { type: 'string' },
|
|
44
|
+
type: { type: 'string', enum: ['none'] },
|
|
45
|
+
'x-serverUrl': { type: 'string' },
|
|
46
|
+
},
|
|
47
|
+
additionalProperties: false,
|
|
48
|
+
required: ['name', 'type', 'x-serverUrl'],
|
|
49
|
+
};
|
|
50
|
+
const arazzoSourceDescriptionSchema = {
|
|
51
|
+
type: 'object',
|
|
52
|
+
properties: {
|
|
53
|
+
name: { type: 'string' },
|
|
54
|
+
type: { type: 'string', enum: ['arazzo'] },
|
|
55
|
+
url: { type: 'string' },
|
|
56
|
+
},
|
|
57
|
+
additionalProperties: false,
|
|
58
|
+
required: ['name', 'type', 'url'],
|
|
59
|
+
};
|
|
60
|
+
const sourceDescriptionSchema = {
|
|
61
|
+
type: 'object',
|
|
62
|
+
oneOf: [
|
|
63
|
+
openAPISourceDescriptionSchema,
|
|
64
|
+
noneSourceDescriptionSchema,
|
|
65
|
+
arazzoSourceDescriptionSchema,
|
|
66
|
+
],
|
|
67
|
+
};
|
|
68
|
+
const sourceDescriptionsSchema = {
|
|
69
|
+
type: 'array',
|
|
70
|
+
items: sourceDescriptionSchema,
|
|
71
|
+
};
|
|
72
|
+
const extendedOperation = {
|
|
73
|
+
type: 'object',
|
|
74
|
+
properties: {
|
|
75
|
+
path: { type: 'string' },
|
|
76
|
+
method: operationMethod,
|
|
77
|
+
sourceDescriptionName: { type: 'string' },
|
|
78
|
+
serverUrl: { type: 'string' },
|
|
79
|
+
},
|
|
80
|
+
additionalProperties: false,
|
|
81
|
+
required: ['path', 'method'],
|
|
82
|
+
};
|
|
83
|
+
const parameter = {
|
|
84
|
+
type: 'object',
|
|
85
|
+
oneOf: [
|
|
86
|
+
{
|
|
87
|
+
type: 'object',
|
|
88
|
+
properties: {
|
|
89
|
+
in: { type: 'string', enum: ['header', 'query', 'path', 'cookie', 'body'] },
|
|
90
|
+
name: { type: 'string' },
|
|
91
|
+
value: {
|
|
92
|
+
oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }],
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
required: ['name', 'value'],
|
|
96
|
+
additionalProperties: false,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
type: 'object',
|
|
100
|
+
properties: {
|
|
101
|
+
$ref: { type: 'string' },
|
|
102
|
+
value: {
|
|
103
|
+
oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }],
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
required: ['$ref'],
|
|
107
|
+
additionalProperties: false,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'object',
|
|
111
|
+
properties: {
|
|
112
|
+
reference: { type: 'string' },
|
|
113
|
+
value: {
|
|
114
|
+
oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }],
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
required: ['reference'],
|
|
118
|
+
additionalProperties: false,
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
};
|
|
122
|
+
const parameters = {
|
|
123
|
+
type: 'array',
|
|
124
|
+
items: parameter,
|
|
125
|
+
};
|
|
126
|
+
const infoObject = {
|
|
127
|
+
type: 'object',
|
|
128
|
+
properties: {
|
|
129
|
+
title: { type: 'string' },
|
|
130
|
+
description: { type: 'string' },
|
|
131
|
+
summary: { type: 'string' },
|
|
132
|
+
version: { type: 'string' },
|
|
133
|
+
},
|
|
134
|
+
additionalProperties: false,
|
|
135
|
+
required: ['title', 'version'],
|
|
136
|
+
};
|
|
137
|
+
const replacement = {
|
|
138
|
+
type: 'object',
|
|
139
|
+
properties: {
|
|
140
|
+
target: { type: 'string' },
|
|
141
|
+
value: {
|
|
142
|
+
oneOf: [
|
|
143
|
+
{ type: 'string' },
|
|
144
|
+
{ type: 'object' },
|
|
145
|
+
{ type: 'array' },
|
|
146
|
+
{ type: 'number' },
|
|
147
|
+
{ type: 'boolean' },
|
|
148
|
+
],
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
const requestBody = {
|
|
153
|
+
type: 'object',
|
|
154
|
+
properties: {
|
|
155
|
+
contentType: { type: 'string' },
|
|
156
|
+
payload: {
|
|
157
|
+
oneOf: [
|
|
158
|
+
{ type: 'string' },
|
|
159
|
+
{ type: 'object', additionalProperties: true },
|
|
160
|
+
{ type: 'array' },
|
|
161
|
+
{ type: 'number' },
|
|
162
|
+
{ type: 'boolean' },
|
|
163
|
+
],
|
|
164
|
+
},
|
|
165
|
+
encoding: { type: 'string' },
|
|
166
|
+
replacements: {
|
|
167
|
+
type: 'array',
|
|
168
|
+
items: replacement,
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
additionalProperties: false,
|
|
172
|
+
required: ['payload'],
|
|
173
|
+
};
|
|
174
|
+
const criteriaObject = {
|
|
175
|
+
type: 'object',
|
|
176
|
+
properties: {
|
|
177
|
+
condition: { type: 'string' },
|
|
178
|
+
context: { type: 'string' },
|
|
179
|
+
type: {
|
|
180
|
+
oneOf: [
|
|
181
|
+
{ type: 'string', enum: ['regex', 'jsonpath', 'simple', 'xpath'] },
|
|
182
|
+
{
|
|
183
|
+
type: 'object',
|
|
184
|
+
properties: {
|
|
185
|
+
type: { type: 'string', enum: ['jsonpath'] },
|
|
186
|
+
version: { type: 'string', enum: ['draft-goessner-dispatch-jsonpath-00'] },
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
type: 'object',
|
|
191
|
+
properties: {
|
|
192
|
+
type: { type: 'string', enum: ['xpath'] },
|
|
193
|
+
version: { type: 'string', enum: ['xpath-30', 'xpath-20', 'xpath-10'] },
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
required: ['condition'],
|
|
200
|
+
additionalProperties: false,
|
|
201
|
+
};
|
|
202
|
+
const criteriaObjects = {
|
|
203
|
+
type: 'array',
|
|
204
|
+
items: criteriaObject,
|
|
205
|
+
};
|
|
206
|
+
const inherit = {
|
|
207
|
+
type: 'string',
|
|
208
|
+
enum: ['auto', 'none'],
|
|
209
|
+
};
|
|
210
|
+
const onSuccessObject = {
|
|
211
|
+
type: 'object',
|
|
212
|
+
properties: {
|
|
213
|
+
name: { type: 'string' },
|
|
214
|
+
type: { type: 'string', enum: ['goto', 'end'] },
|
|
215
|
+
stepId: { type: 'string' },
|
|
216
|
+
workflowId: { type: 'string' },
|
|
217
|
+
criteria: criteriaObjects,
|
|
218
|
+
},
|
|
219
|
+
additionalProperties: false,
|
|
220
|
+
required: ['type', 'name'],
|
|
221
|
+
};
|
|
222
|
+
const onSuccessList = {
|
|
223
|
+
type: 'array',
|
|
224
|
+
items: onSuccessObject,
|
|
225
|
+
};
|
|
226
|
+
const onFailureObject = {
|
|
227
|
+
type: 'object',
|
|
228
|
+
properties: {
|
|
229
|
+
name: { type: 'string' },
|
|
230
|
+
type: { type: 'string', enum: ['goto', 'retry', 'end'] },
|
|
231
|
+
workflowId: { type: 'string' },
|
|
232
|
+
stepId: { type: 'string' },
|
|
233
|
+
retryAfter: { type: 'number' },
|
|
234
|
+
retryLimit: { type: 'number' },
|
|
235
|
+
criteria: criteriaObjects,
|
|
236
|
+
},
|
|
237
|
+
additionalProperties: false,
|
|
238
|
+
required: ['type', 'name'],
|
|
239
|
+
};
|
|
240
|
+
const onFailureList = {
|
|
241
|
+
type: 'array',
|
|
242
|
+
items: onFailureObject,
|
|
243
|
+
};
|
|
244
|
+
const step = {
|
|
245
|
+
type: 'object',
|
|
246
|
+
properties: {
|
|
247
|
+
stepId: { type: 'string' },
|
|
248
|
+
description: { type: 'string' },
|
|
249
|
+
operationId: { type: 'string' },
|
|
250
|
+
operationPath: { type: 'string' },
|
|
251
|
+
workflowId: { type: 'string' },
|
|
252
|
+
parameters: parameters,
|
|
253
|
+
successCriteria: criteriaObjects,
|
|
254
|
+
onSuccess: onSuccessList,
|
|
255
|
+
onFailure: onFailureList,
|
|
256
|
+
outputs: {
|
|
257
|
+
type: 'object',
|
|
258
|
+
additionalProperties: {
|
|
259
|
+
type: 'string',
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
'x-inherit': inherit,
|
|
263
|
+
'x-expect': expectSchema,
|
|
264
|
+
'x-assert': { type: 'string' },
|
|
265
|
+
'x-operation': extendedOperation,
|
|
266
|
+
requestBody: requestBody,
|
|
267
|
+
},
|
|
268
|
+
required: ['stepId'],
|
|
269
|
+
oneOf: [
|
|
270
|
+
{ required: ['x-operation'] },
|
|
271
|
+
{ required: ['operationId'] },
|
|
272
|
+
{ required: ['operationPath'] },
|
|
273
|
+
{ required: ['workflowId'] },
|
|
274
|
+
],
|
|
275
|
+
};
|
|
276
|
+
const steps = {
|
|
277
|
+
type: 'array',
|
|
278
|
+
items: step,
|
|
279
|
+
};
|
|
280
|
+
const JSONSchema = {
|
|
281
|
+
type: 'object',
|
|
282
|
+
properties: {
|
|
283
|
+
type: {
|
|
284
|
+
type: 'string',
|
|
285
|
+
enum: ['object', 'array', 'string', 'number', 'integer', 'boolean', 'null'],
|
|
286
|
+
},
|
|
287
|
+
properties: {
|
|
288
|
+
type: 'object',
|
|
289
|
+
additionalProperties: true,
|
|
290
|
+
},
|
|
291
|
+
required: {
|
|
292
|
+
type: 'array',
|
|
293
|
+
items: { type: 'string' },
|
|
294
|
+
},
|
|
295
|
+
items: {
|
|
296
|
+
type: 'object',
|
|
297
|
+
additionalProperties: true,
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
required: ['type'],
|
|
301
|
+
additionalProperties: true,
|
|
302
|
+
};
|
|
303
|
+
const workflow = {
|
|
304
|
+
type: 'object',
|
|
305
|
+
properties: {
|
|
306
|
+
workflowId: { type: 'string' },
|
|
307
|
+
summary: { type: 'string' },
|
|
308
|
+
description: { type: 'string' },
|
|
309
|
+
parameters: parameters,
|
|
310
|
+
dependsOn: { type: 'array', items: { type: 'string' } },
|
|
311
|
+
inputs: JSONSchema,
|
|
312
|
+
outputs: {
|
|
313
|
+
type: 'object',
|
|
314
|
+
additionalProperties: {
|
|
315
|
+
type: 'string',
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
steps: steps,
|
|
319
|
+
successActions: {
|
|
320
|
+
type: 'array',
|
|
321
|
+
items: onSuccessObject,
|
|
322
|
+
},
|
|
323
|
+
failureActions: {
|
|
324
|
+
type: 'array',
|
|
325
|
+
items: onFailureObject,
|
|
326
|
+
},
|
|
327
|
+
},
|
|
328
|
+
additionalProperties: false,
|
|
329
|
+
required: ['workflowId', 'steps'],
|
|
330
|
+
};
|
|
331
|
+
const workflows = {
|
|
332
|
+
type: 'array',
|
|
333
|
+
items: workflow,
|
|
334
|
+
};
|
|
335
|
+
exports.arazzoSchema = {
|
|
336
|
+
type: 'object',
|
|
337
|
+
properties: {
|
|
338
|
+
arazzo: { type: 'string', enum: ['1.0.0'] },
|
|
339
|
+
info: infoObject,
|
|
340
|
+
sourceDescriptions: sourceDescriptionsSchema,
|
|
341
|
+
'x-parameters': parameters,
|
|
342
|
+
workflows: workflows,
|
|
343
|
+
components: {
|
|
344
|
+
type: 'object',
|
|
345
|
+
properties: {
|
|
346
|
+
inputs: {
|
|
347
|
+
type: 'object',
|
|
348
|
+
additionalProperties: {
|
|
349
|
+
type: 'object',
|
|
350
|
+
additionalProperties: true,
|
|
351
|
+
properties: {
|
|
352
|
+
type: {
|
|
353
|
+
type: 'string',
|
|
354
|
+
},
|
|
355
|
+
properties: {
|
|
356
|
+
type: 'object',
|
|
357
|
+
additionalProperties: true,
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
required: ['type'],
|
|
361
|
+
},
|
|
362
|
+
},
|
|
363
|
+
parameters: {
|
|
364
|
+
type: 'object',
|
|
365
|
+
additionalProperties: parameter,
|
|
366
|
+
},
|
|
367
|
+
successActions: {
|
|
368
|
+
type: 'object',
|
|
369
|
+
additionalProperties: onSuccessObject,
|
|
370
|
+
},
|
|
371
|
+
failureActions: {
|
|
372
|
+
type: 'object',
|
|
373
|
+
additionalProperties: onFailureObject,
|
|
374
|
+
},
|
|
375
|
+
},
|
|
376
|
+
},
|
|
377
|
+
},
|
|
378
|
+
additionalProperties: false,
|
|
379
|
+
required: ['arazzo', 'info', 'sourceDescriptions', 'workflows'],
|
|
380
|
+
};
|
|
381
|
+
exports.ArazzoTypes = (0, json_schema_adapter_1.getNodeTypesFromJSONSchema)(exports.ARAZZO_ROOT_TYPE, exports.arazzoSchema);
|
package/lib/types/oas3.js
CHANGED
|
@@ -316,14 +316,6 @@ const Schema = {
|
|
|
316
316
|
return 'Schema';
|
|
317
317
|
}
|
|
318
318
|
},
|
|
319
|
-
additionalItems: (value) => {
|
|
320
|
-
if (typeof value === 'boolean') {
|
|
321
|
-
return { type: 'boolean' };
|
|
322
|
-
}
|
|
323
|
-
else {
|
|
324
|
-
return 'Schema';
|
|
325
|
-
}
|
|
326
|
-
},
|
|
327
319
|
additionalProperties: (value) => {
|
|
328
320
|
if (typeof value === 'boolean') {
|
|
329
321
|
return { type: 'boolean' };
|
package/lib/types/oas3_1.js
CHANGED
|
@@ -129,6 +129,7 @@ const Schema = {
|
|
|
129
129
|
then: 'Schema',
|
|
130
130
|
else: 'Schema',
|
|
131
131
|
dependentSchemas: (0, _1.listOf)('Schema'),
|
|
132
|
+
dependentRequired: 'DependentRequired',
|
|
132
133
|
prefixItems: (0, _1.listOf)('Schema'),
|
|
133
134
|
contains: 'Schema',
|
|
134
135
|
minContains: { type: 'integer', minimum: 0 },
|
|
@@ -262,10 +263,15 @@ const SecurityScheme = {
|
|
|
262
263
|
},
|
|
263
264
|
extensionsPrefix: 'x-',
|
|
264
265
|
};
|
|
266
|
+
const DependentRequired = {
|
|
267
|
+
properties: {},
|
|
268
|
+
additionalProperties: { type: 'array', items: { type: 'string' } },
|
|
269
|
+
};
|
|
265
270
|
exports.Oas3_1Types = Object.assign(Object.assign({}, oas3_1.Oas3Types), { Info,
|
|
266
271
|
Root,
|
|
267
272
|
Schema,
|
|
268
273
|
SchemaProperties,
|
|
269
274
|
License,
|
|
270
275
|
Components, NamedPathItems: (0, _1.mapOf)('PathItem'), SecurityScheme,
|
|
271
|
-
Operation
|
|
276
|
+
Operation,
|
|
277
|
+
DependentRequired });
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import type { NodeType } from '.';
|
|
2
2
|
import type { JSONSchema } from 'json-schema-to-ts';
|
|
3
3
|
import { Config } from '../config';
|
|
4
|
-
declare const
|
|
5
|
-
export type BuiltInCommonRuleId = typeof builtInCommonRules[number];
|
|
6
|
-
declare const builtInCommonOASRules: readonly ["info-license-url", "info-license", "no-ambiguous-paths", "no-enum-type-mismatch", "no-http-verbs-in-paths", "no-identical-paths", "no-invalid-parameter-examples", "no-invalid-schema-examples", "no-path-trailing-slash", "operation-2xx-response", "operation-4xx-response", "operation-description", "operation-operationId-unique", "operation-operationId-url-safe", "operation-parameters-unique", "operation-singular-tag", "operation-summary", "operation-tag-defined", "parameter-description", "path-declaration-must-exist", "path-excludes-patterns", "path-http-verbs-order", "path-not-include-query", "path-params-defined", "path-parameters-defined", "path-segment-plural", "paths-kebab-case", "required-string-property-missing-min-length", "response-contains-header", "scalar-property-missing-example", "security-defined", "spec-strict-refs", "no-unresolved-refs", "no-required-schema-properties-undefined"];
|
|
4
|
+
declare const builtInCommonOASRules: readonly ["spec", "info-contact", "operation-operationId", "tag-description", "tags-alphabetical", "info-license-url", "info-license", "no-ambiguous-paths", "no-enum-type-mismatch", "no-http-verbs-in-paths", "no-identical-paths", "no-invalid-parameter-examples", "no-invalid-schema-examples", "no-path-trailing-slash", "operation-2xx-response", "operation-4xx-response", "operation-description", "operation-operationId-unique", "operation-operationId-url-safe", "operation-parameters-unique", "operation-singular-tag", "operation-summary", "operation-tag-defined", "parameter-description", "path-declaration-must-exist", "path-excludes-patterns", "path-http-verbs-order", "path-not-include-query", "path-params-defined", "path-parameters-defined", "path-segment-plural", "paths-kebab-case", "required-string-property-missing-min-length", "response-contains-header", "scalar-property-missing-example", "security-defined", "spec-strict-refs", "no-unresolved-refs", "no-required-schema-properties-undefined"];
|
|
7
5
|
export type BuiltInCommonOASRuleId = typeof builtInCommonOASRules[number];
|
|
8
6
|
declare const builtInOAS2Rules: readonly ["boolean-parameter-prefixes", "request-mime-type", "response-contains-property", "response-mime-type"];
|
|
9
7
|
export type BuiltInOAS2RuleId = typeof builtInOAS2Rules[number];
|
|
10
8
|
declare const builtInOAS3Rules: readonly ["boolean-parameter-prefixes", "component-name-unique", "no-empty-servers", "no-example-value-and-externalValue", "no-invalid-media-type-examples", "no-server-example.com", "no-server-trailing-slash", "no-server-variables-empty-enum", "no-undefined-server-variable", "no-unused-components", "operation-4xx-problem-details-rfc7807", "request-mime-type", "response-contains-property", "response-mime-type", "spec-components-invalid-map-name", "array-parameter-serialization"];
|
|
11
9
|
export type BuiltInOAS3RuleId = typeof builtInOAS3Rules[number];
|
|
12
|
-
declare const builtInAsync2Rules: readonly ["channels-kebab-case", "no-channel-trailing-slash"];
|
|
10
|
+
declare const builtInAsync2Rules: readonly ["spec", "info-contact", "operation-operationId", "tag-description", "tags-alphabetical", "channels-kebab-case", "no-channel-trailing-slash"];
|
|
13
11
|
export type BuiltInAsync2RuleId = typeof builtInAsync2Rules[number];
|
|
12
|
+
declare const builtInArazzoRules: readonly ["spec"];
|
|
13
|
+
export type BuiltInArazzoRuleId = typeof builtInArazzoRules[number];
|
|
14
14
|
declare const oas2NodeTypesList: readonly ["Root", "Tag", "TagList", "ExternalDocs", "SecurityRequirement", "SecurityRequirementList", "Info", "Contact", "License", "Paths", "PathItem", "Parameter", "ParameterList", "ParameterItems", "Operation", "Example", "ExamplesMap", "Examples", "Header", "Responses", "Response", "Schema", "Xml", "SchemaProperties", "NamedSchemas", "NamedResponses", "NamedParameters", "NamedSecuritySchemes", "SecurityScheme", "TagGroup", "TagGroups", "EnumDescriptions", "Logo", "XCodeSample", "XCodeSampleList", "XServer", "XServerList"];
|
|
15
15
|
export type Oas2NodeType = typeof oas2NodeTypesList[number];
|
|
16
16
|
declare const oas3NodeTypesList: readonly ["Root", "Tag", "TagList", "ExternalDocs", "Server", "ServerList", "ServerVariable", "ServerVariablesMap", "SecurityRequirement", "SecurityRequirementList", "Info", "Contact", "License", "Paths", "PathItem", "Parameter", "ParameterList", "Operation", "Callback", "CallbacksMap", "RequestBody", "MediaTypesMap", "MediaType", "Example", "ExamplesMap", "Encoding", "EncodingMap", "Header", "HeadersMap", "Responses", "Response", "Link", "LinksMap", "Schema", "Xml", "SchemaProperties", "DiscriminatorMapping", "Discriminator", "Components", "NamedSchemas", "NamedResponses", "NamedParameters", "NamedExamples", "NamedRequestBodies", "NamedHeaders", "NamedSecuritySchemes", "NamedLinks", "NamedCallbacks", "ImplicitFlow", "PasswordFlow", "ClientCredentials", "AuthorizationCode", "OAuth2Flows", "SecurityScheme", "TagGroup", "TagGroups", "EnumDescriptions", "Logo", "XCodeSample", "XCodeSampleList", "XUsePkce", "WebhooksMap"];
|
|
17
17
|
export type Oas3NodeType = typeof oas3NodeTypesList[number];
|
|
18
|
-
declare const oas3_1NodeTypesList: readonly ["Root", "Schema", "SchemaProperties", "Info", "License", "Components", "NamedPathItems", "SecurityScheme", "Operation"];
|
|
18
|
+
declare const oas3_1NodeTypesList: readonly ["Root", "Schema", "SchemaProperties", "Info", "License", "Components", "NamedPathItems", "SecurityScheme", "Operation", "DependentRequired"];
|
|
19
19
|
export type Oas3_1NodeType = typeof oas3_1NodeTypesList[number];
|
|
20
20
|
export declare function createConfigTypes(extraSchemas: JSONSchema, config?: Config): {
|
|
21
21
|
ConfigRoot: NodeType;
|
|
@@ -6,14 +6,12 @@ const _1 = require(".");
|
|
|
6
6
|
const utils_1 = require("../utils");
|
|
7
7
|
const json_schema_adapter_1 = require("./json-schema-adapter");
|
|
8
8
|
const oas_types_1 = require("../oas-types");
|
|
9
|
-
const
|
|
9
|
+
const builtInCommonOASRules = [
|
|
10
10
|
'spec',
|
|
11
11
|
'info-contact',
|
|
12
12
|
'operation-operationId',
|
|
13
13
|
'tag-description',
|
|
14
14
|
'tags-alphabetical',
|
|
15
|
-
];
|
|
16
|
-
const builtInCommonOASRules = [
|
|
17
15
|
'info-license-url',
|
|
18
16
|
'info-license',
|
|
19
17
|
'no-ambiguous-paths',
|
|
@@ -73,13 +71,22 @@ const builtInOAS3Rules = [
|
|
|
73
71
|
'spec-components-invalid-map-name',
|
|
74
72
|
'array-parameter-serialization',
|
|
75
73
|
];
|
|
76
|
-
const builtInAsync2Rules = [
|
|
74
|
+
const builtInAsync2Rules = [
|
|
75
|
+
'spec',
|
|
76
|
+
'info-contact',
|
|
77
|
+
'operation-operationId',
|
|
78
|
+
'tag-description',
|
|
79
|
+
'tags-alphabetical',
|
|
80
|
+
'channels-kebab-case',
|
|
81
|
+
'no-channel-trailing-slash',
|
|
82
|
+
];
|
|
83
|
+
const builtInArazzoRules = ['spec'];
|
|
77
84
|
const builtInRules = [
|
|
78
|
-
...builtInCommonRules,
|
|
79
85
|
...builtInCommonOASRules,
|
|
80
86
|
...builtInOAS2Rules,
|
|
81
87
|
...builtInOAS3Rules,
|
|
82
88
|
...builtInAsync2Rules,
|
|
89
|
+
...builtInArazzoRules,
|
|
83
90
|
];
|
|
84
91
|
const oas2NodeTypesList = [
|
|
85
92
|
'Root',
|
|
@@ -194,6 +201,7 @@ const oas3_1NodeTypesList = [
|
|
|
194
201
|
'NamedPathItems',
|
|
195
202
|
'SecurityScheme',
|
|
196
203
|
'Operation',
|
|
204
|
+
'DependentRequired',
|
|
197
205
|
];
|
|
198
206
|
const ConfigStyleguide = {
|
|
199
207
|
properties: {
|
|
@@ -208,16 +216,19 @@ const ConfigStyleguide = {
|
|
|
208
216
|
oas3_0Rules: 'Rules',
|
|
209
217
|
oas3_1Rules: 'Rules',
|
|
210
218
|
async2Rules: 'Rules',
|
|
219
|
+
arazzoRules: 'Rules',
|
|
211
220
|
preprocessors: { type: 'object' },
|
|
212
221
|
oas2Preprocessors: { type: 'object' },
|
|
213
222
|
oas3_0Preprocessors: { type: 'object' },
|
|
214
223
|
oas3_1Preprocessors: { type: 'object' },
|
|
215
224
|
async2Preprocessors: { type: 'object' },
|
|
225
|
+
arazzoPreprocessors: { type: 'object' },
|
|
216
226
|
decorators: { type: 'object' },
|
|
217
227
|
oas2Decorators: { type: 'object' },
|
|
218
228
|
oas3_0Decorators: { type: 'object' },
|
|
219
229
|
oas3_1Decorators: { type: 'object' },
|
|
220
230
|
async2Decorators: { type: 'object' },
|
|
231
|
+
arazzoDecorators: { type: 'object' },
|
|
221
232
|
},
|
|
222
233
|
};
|
|
223
234
|
const createConfigRoot = (nodeTypes) => (Object.assign(Object.assign({}, nodeTypes.rootRedoclyConfigSchema), { properties: Object.assign(Object.assign(Object.assign({}, nodeTypes.rootRedoclyConfigSchema.properties), ConfigStyleguide.properties), { apis: 'ConfigApis', 'features.openapi': 'ConfigReferenceDocs', 'features.mockServer': 'ConfigMockServer', organization: { type: 'string' }, region: { enum: ['us', 'eu'] }, telemetry: { enum: ['on', 'off'] }, resolve: {
|
package/lib/visitors.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type { Location } from './ref-utils';
|
|
|
5
5
|
import type { Oas3Definition, Oas3ExternalDocs, Oas3Info, Oas3Contact, Oas3Components, Oas3License, Oas3Schema, Oas3Header, Oas3Parameter, Oas3Operation, Oas3PathItem, Oas3ServerVariable, Oas3Server, Oas3MediaType, Oas3Response, Oas3Example, Oas3RequestBody, Oas3Tag, OasRef, Oas3SecurityScheme, Oas3SecurityRequirement, Oas3Encoding, Oas3Link, Oas3Xml, Oas3Discriminator, Oas3Callback } from './typings/openapi';
|
|
6
6
|
import type { Oas2Definition, Oas2Tag, Oas2ExternalDocs, Oas2SecurityRequirement, Oas2Info, Oas2Contact, Oas2License, Oas2PathItem, Oas2Operation, Oas2Header, Oas2Response, Oas2Schema, Oas2Xml, Oas2Parameter, Oas2SecurityScheme } from './typings/swagger';
|
|
7
7
|
import type { Async2Definition } from './typings/asyncapi';
|
|
8
|
+
import type { ArazzoDefinition } from './typings/arazzo';
|
|
8
9
|
export type SkipFunctionContext = Pick<UserContext, 'location' | 'rawNode' | 'resolve' | 'rawLocation'>;
|
|
9
10
|
export type VisitFunction<T> = (node: T, ctx: UserContext & {
|
|
10
11
|
ignoreNextVisitorsOnNode: () => void;
|
|
@@ -139,6 +140,9 @@ type Oas2FlatVisitor = {
|
|
|
139
140
|
type Async2FlatVisitor = {
|
|
140
141
|
Root?: VisitFunctionOrObject<Async2Definition>;
|
|
141
142
|
};
|
|
143
|
+
type ArazzoFlatVisitor = {
|
|
144
|
+
Root?: VisitFunctionOrObject<ArazzoDefinition>;
|
|
145
|
+
};
|
|
142
146
|
type Oas3NestedVisitor = {
|
|
143
147
|
[T in keyof Oas3FlatVisitor]: Oas3FlatVisitor[T] extends Function ? Oas3FlatVisitor[T] : Oas3FlatVisitor[T] & NestedVisitor<Oas3NestedVisitor>;
|
|
144
148
|
};
|
|
@@ -148,9 +152,13 @@ type Oas2NestedVisitor = {
|
|
|
148
152
|
type Async2NestedVisitor = {
|
|
149
153
|
[T in keyof Async2FlatVisitor]: Async2FlatVisitor[T] extends Function ? Async2FlatVisitor[T] : Async2FlatVisitor[T] & NestedVisitor<Async2NestedVisitor>;
|
|
150
154
|
};
|
|
155
|
+
type ArazzoNestedVisitor = {
|
|
156
|
+
[T in keyof ArazzoFlatVisitor]: ArazzoFlatVisitor[T] extends Function ? ArazzoFlatVisitor[T] : ArazzoFlatVisitor[T] & NestedVisitor<ArazzoNestedVisitor>;
|
|
157
|
+
};
|
|
151
158
|
export type Oas3Visitor = BaseVisitor & Oas3NestedVisitor & Record<string, VisitFunction<any> | NestedVisitObject<any, Oas3NestedVisitor>>;
|
|
152
159
|
export type Oas2Visitor = BaseVisitor & Oas2NestedVisitor & Record<string, VisitFunction<any> | NestedVisitObject<any, Oas2NestedVisitor>>;
|
|
153
160
|
export type Async2Visitor = BaseVisitor & Async2NestedVisitor & Record<string, VisitFunction<any> | NestedVisitObject<any, Async2NestedVisitor>>;
|
|
161
|
+
export type ArazzoVisitor = BaseVisitor & ArazzoNestedVisitor & Record<string, VisitFunction<any> | NestedVisitObject<any, ArazzoNestedVisitor>>;
|
|
154
162
|
export type NestedVisitor<T> = Exclude<T, 'any' | 'ref' | 'Root'>;
|
|
155
163
|
export type NormalizedOasVisitors<T extends BaseVisitor> = {
|
|
156
164
|
[V in keyof T]-?: {
|
|
@@ -170,12 +178,15 @@ export type NormalizedOasVisitors<T extends BaseVisitor> = {
|
|
|
170
178
|
export type Oas3Rule = (options: Record<string, any>) => Oas3Visitor | Oas3Visitor[];
|
|
171
179
|
export type Oas2Rule = (options: Record<string, any>) => Oas2Visitor | Oas2Visitor[];
|
|
172
180
|
export type Async2Rule = (options: Record<string, any>) => Async2Visitor | Async2Visitor[];
|
|
181
|
+
export type ArazzoRule = (options: Record<string, any>) => ArazzoVisitor | ArazzoVisitor[];
|
|
173
182
|
export type Oas3Preprocessor = (options: Record<string, any>) => Oas3Visitor;
|
|
174
183
|
export type Oas2Preprocessor = (options: Record<string, any>) => Oas2Visitor;
|
|
175
184
|
export type Async2Preprocessor = (options: Record<string, any>) => Async2Visitor;
|
|
185
|
+
export type ArazzoPreprocessor = (options: Record<string, any>) => ArazzoVisitor;
|
|
176
186
|
export type Oas3Decorator = (options: Record<string, any>) => Oas3Visitor;
|
|
177
187
|
export type Oas2Decorator = (options: Record<string, any>) => Oas2Visitor;
|
|
178
188
|
export type Async2Decorator = (options: Record<string, any>) => Async2Visitor;
|
|
189
|
+
export type ArazzoDecorator = (options: Record<string, any>) => ArazzoVisitor;
|
|
179
190
|
export type OasRule = Oas3Rule;
|
|
180
191
|
export type OasPreprocessor = Oas3Preprocessor;
|
|
181
192
|
export type OasDecorator = Oas3Decorator;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@redocly/openapi-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.18.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"engines": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@redocly/ajv": "^8.11.0",
|
|
39
|
-
"@redocly/config": "^0.6.
|
|
39
|
+
"@redocly/config": "^0.6.2",
|
|
40
40
|
"colorette": "^1.2.0",
|
|
41
41
|
"https-proxy-agent": "^7.0.4",
|
|
42
42
|
"js-levenshtein": "^1.1.6",
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"@types/node": "^20.11.5",
|
|
56
56
|
"@types/node-fetch": "^2.5.7",
|
|
57
57
|
"@types/pluralize": "^0.0.29",
|
|
58
|
+
"json-schema-to-ts": "^3.1.0",
|
|
58
59
|
"typescript": "^5.2.2"
|
|
59
60
|
}
|
|
60
61
|
}
|