@redocly/openapi-core 1.18.1 → 1.19.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 +10 -0
- package/lib/benchmark/benches/lint-with-many-rules.bench.js +2 -2
- package/lib/benchmark/benches/lint-with-nested-rule.bench.js +2 -2
- package/lib/benchmark/benches/lint-with-no-rules.bench.js +2 -2
- package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +2 -2
- package/lib/benchmark/benches/lint-with-top-level-rule.bench.js +2 -2
- package/lib/benchmark/benches/recommended-oas3.bench.js +2 -2
- package/lib/benchmark/benches/resolve-with-no-external.bench.js +2 -2
- package/lib/benchmark/utils.js +7 -4
- package/lib/bundle.d.ts +2 -2
- package/lib/bundle.js +127 -120
- package/lib/config/all.js +9 -0
- package/lib/config/builtIn.js +7 -1
- package/lib/config/config-resolvers.js +179 -138
- package/lib/config/config.d.ts +2 -2
- package/lib/config/config.js +53 -34
- package/lib/config/load.js +105 -117
- package/lib/config/minimal.js +9 -0
- package/lib/config/recommended-strict.js +9 -0
- package/lib/config/recommended.js +9 -0
- package/lib/config/rules.d.ts +3 -3
- package/lib/config/rules.js +1 -2
- package/lib/config/types.d.ts +9 -3
- package/lib/config/utils.js +70 -49
- package/lib/decorators/async3/index.d.ts +1 -0
- package/lib/decorators/async3/index.js +4 -0
- package/lib/decorators/common/filters/filter-helper.js +2 -3
- package/lib/decorators/common/filters/filter-in.js +1 -1
- package/lib/decorators/common/filters/filter-out.js +1 -1
- package/lib/decorators/common/info-override.js +1 -12
- package/lib/decorators/common/media-type-examples-override.js +8 -2
- package/lib/decorators/common/remove-x-internal.js +4 -5
- package/lib/decorators/oas2/remove-unused-components.js +1 -2
- package/lib/decorators/oas3/remove-unused-components.js +1 -2
- package/lib/env.d.ts +0 -1
- package/lib/env.js +1 -1
- package/lib/format/codeframes.js +10 -8
- package/lib/format/format.js +23 -15
- package/lib/index.d.ts +2 -1
- package/lib/index.js +6 -4
- package/lib/js-yaml/index.js +1 -1
- package/lib/lint.d.ts +2 -0
- package/lib/lint.js +92 -99
- package/lib/oas-types.d.ts +9 -5
- package/lib/oas-types.js +22 -12
- package/lib/redocly/domains.js +6 -6
- package/lib/redocly/index.js +60 -73
- package/lib/redocly/registry-api.js +64 -82
- package/lib/ref-utils.js +13 -13
- package/lib/resolve.js +186 -205
- package/lib/rules/ajv.js +10 -8
- package/lib/rules/async3/channels-kebab-case.d.ts +2 -0
- package/lib/rules/async3/channels-kebab-case.js +19 -0
- package/lib/rules/async3/index.d.ts +3 -0
- package/lib/rules/async3/index.js +22 -0
- package/lib/rules/async3/no-channel-trailing-slash.d.ts +2 -0
- package/lib/rules/async3/no-channel-trailing-slash.js +16 -0
- package/lib/rules/common/assertions/asserts.js +5 -5
- package/lib/rules/common/assertions/index.d.ts +5 -4
- package/lib/rules/common/assertions/utils.js +43 -28
- package/lib/rules/common/no-invalid-parameter-examples.js +1 -2
- package/lib/rules/common/no-invalid-schema-examples.js +1 -2
- package/lib/rules/common/no-required-schema-properties-undefined.js +1 -2
- package/lib/rules/common/operation-tag-defined.js +1 -2
- package/lib/rules/common/path-http-verbs-order.js +1 -1
- package/lib/rules/common/required-string-property-missing-min-length.js +2 -2
- package/lib/rules/common/response-contains-header.js +2 -2
- package/lib/rules/common/security-defined.js +3 -7
- package/lib/rules/common/spec.d.ts +2 -2
- package/lib/rules/common/spec.js +6 -7
- package/lib/rules/no-unresolved-refs.js +3 -4
- package/lib/rules/oas2/response-contains-property.js +1 -2
- package/lib/rules/oas3/array-parameter-serialization.js +1 -2
- package/lib/rules/oas3/component-name-unique.js +2 -4
- package/lib/rules/oas3/no-invalid-media-type-examples.js +1 -2
- package/lib/rules/oas3/no-server-variables-empty-enum.js +1 -2
- package/lib/rules/oas3/no-undefined-server-variable.js +2 -3
- package/lib/rules/oas3/no-unused-components.js +1 -2
- package/lib/rules/oas3/response-contains-property.js +1 -2
- package/lib/rules/utils.js +14 -12
- package/lib/types/asyncapi2.d.ts +17 -0
- package/lib/types/{asyncapi.js → asyncapi2.js} +56 -52
- package/lib/types/asyncapi3.d.ts +2 -0
- package/lib/types/asyncapi3.js +347 -0
- package/lib/types/index.js +19 -10
- package/lib/types/json-schema-adapter.js +4 -18
- package/lib/types/oas2.js +6 -6
- package/lib/types/oas3.js +10 -10
- package/lib/types/oas3_1.js +14 -8
- package/lib/types/redocly-yaml.d.ts +3 -1
- package/lib/types/redocly-yaml.js +131 -35
- package/lib/typings/asyncapi3.d.ts +53 -0
- package/lib/typings/asyncapi3.js +2 -0
- package/lib/utils.d.ts +4 -3
- package/lib/utils.js +55 -72
- package/lib/visitors.d.ts +11 -0
- package/lib/visitors.js +21 -8
- package/lib/walk.js +30 -23
- package/package.json +2 -2
- package/src/__tests__/bundle.test.ts +142 -0
- package/src/bundle.ts +17 -3
- package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +22 -0
- package/src/config/__tests__/__snapshots__/config.test.ts.snap +24 -0
- package/src/config/__tests__/config.test.ts +11 -0
- package/src/config/all.ts +9 -0
- package/src/config/builtIn.ts +6 -0
- package/src/config/config-resolvers.ts +15 -2
- package/src/config/config.ts +24 -5
- package/src/config/minimal.ts +9 -0
- package/src/config/recommended-strict.ts +9 -0
- package/src/config/recommended.ts +9 -0
- package/src/config/rules.ts +12 -4
- package/src/config/types.ts +15 -2
- package/src/config/utils.ts +15 -0
- package/src/decorators/async3/index.ts +1 -0
- package/src/decorators/common/remove-x-internal.ts +2 -2
- package/src/index.ts +2 -1
- package/src/lint.ts +26 -3
- package/src/oas-types.ts +31 -13
- package/src/rules/arazzo/index.ts +1 -1
- package/src/rules/async2/index.ts +5 -5
- package/src/rules/async3/__tests__/channels-kebab-case.test.ts +141 -0
- package/src/rules/async3/__tests__/no-channel-trailing-slash.test.ts +96 -0
- package/src/rules/async3/channels-kebab-case.ts +19 -0
- package/src/rules/async3/index.ts +23 -0
- package/src/rules/async3/no-channel-trailing-slash.ts +16 -0
- package/src/rules/common/assertions/index.ts +13 -4
- package/src/rules/common/spec.ts +2 -2
- package/src/rules/oas2/index.ts +4 -4
- package/src/rules/oas3/index.ts +39 -37
- package/src/types/{asyncapi.ts → asyncapi2.ts} +37 -34
- package/src/types/asyncapi3.ts +381 -0
- package/src/types/oas3_1.ts +2 -1
- package/src/types/redocly-yaml.ts +14 -0
- package/src/typings/asyncapi3.ts +61 -0
- package/src/utils.ts +5 -3
- package/src/visitors.ts +18 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/lib/types/asyncapi.d.ts +0 -2
package/lib/types/index.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.SpecExtension = void 0;
|
|
4
|
+
exports.listOf = listOf;
|
|
5
|
+
exports.mapOf = mapOf;
|
|
6
|
+
exports.normalizeTypes = normalizeTypes;
|
|
7
|
+
exports.isNamedType = isNamedType;
|
|
4
8
|
function listOf(typeName) {
|
|
5
9
|
return {
|
|
6
10
|
name: `${typeName}List`,
|
|
@@ -8,7 +12,6 @@ function listOf(typeName) {
|
|
|
8
12
|
items: typeName,
|
|
9
13
|
};
|
|
10
14
|
}
|
|
11
|
-
exports.listOf = listOf;
|
|
12
15
|
function mapOf(typeName) {
|
|
13
16
|
return {
|
|
14
17
|
name: `${typeName}Map`,
|
|
@@ -16,7 +19,6 @@ function mapOf(typeName) {
|
|
|
16
19
|
additionalProperties: () => typeName,
|
|
17
20
|
};
|
|
18
21
|
}
|
|
19
|
-
exports.mapOf = mapOf;
|
|
20
22
|
exports.SpecExtension = {
|
|
21
23
|
name: 'SpecExtension',
|
|
22
24
|
properties: {},
|
|
@@ -26,7 +28,10 @@ exports.SpecExtension = {
|
|
|
26
28
|
function normalizeTypes(types, options = {}) {
|
|
27
29
|
const normalizedTypes = {};
|
|
28
30
|
for (const typeName of Object.keys(types)) {
|
|
29
|
-
normalizedTypes[typeName] =
|
|
31
|
+
normalizedTypes[typeName] = {
|
|
32
|
+
...types[typeName],
|
|
33
|
+
name: typeName,
|
|
34
|
+
};
|
|
30
35
|
}
|
|
31
36
|
for (const type of Object.values(normalizedTypes)) {
|
|
32
37
|
normalizeType(type);
|
|
@@ -46,7 +51,10 @@ function normalizeTypes(types, options = {}) {
|
|
|
46
51
|
for (const [propName, prop] of Object.entries(type.properties)) {
|
|
47
52
|
mappedProps[propName] = resolveType(prop);
|
|
48
53
|
if (options.doNotResolveExamples && prop && prop.isExample) {
|
|
49
|
-
mappedProps[propName] =
|
|
54
|
+
mappedProps[propName] = {
|
|
55
|
+
...prop,
|
|
56
|
+
resolvable: false,
|
|
57
|
+
};
|
|
50
58
|
}
|
|
51
59
|
}
|
|
52
60
|
type.properties = mappedProps;
|
|
@@ -66,20 +74,21 @@ function normalizeTypes(types, options = {}) {
|
|
|
66
74
|
};
|
|
67
75
|
}
|
|
68
76
|
else if (type && type.name) {
|
|
69
|
-
type =
|
|
77
|
+
type = { ...type };
|
|
70
78
|
normalizeType(type);
|
|
71
79
|
return type;
|
|
72
80
|
}
|
|
73
81
|
else if (type && type.directResolveAs) {
|
|
74
|
-
return
|
|
82
|
+
return {
|
|
83
|
+
...type,
|
|
84
|
+
directResolveAs: resolveType(type.directResolveAs),
|
|
85
|
+
};
|
|
75
86
|
}
|
|
76
87
|
else {
|
|
77
88
|
return type;
|
|
78
89
|
}
|
|
79
90
|
}
|
|
80
91
|
}
|
|
81
|
-
exports.normalizeTypes = normalizeTypes;
|
|
82
92
|
function isNamedType(t) {
|
|
83
|
-
return typeof
|
|
93
|
+
return typeof t?.name === 'string';
|
|
84
94
|
}
|
|
85
|
-
exports.isNamedType = isNamedType;
|
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// For internal usage only
|
|
3
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
4
|
-
var t = {};
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
8
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
9
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
10
|
-
t[p[i]] = s[p[i]];
|
|
11
|
-
}
|
|
12
|
-
return t;
|
|
13
|
-
};
|
|
14
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.getNodeTypesFromJSONSchema =
|
|
4
|
+
exports.getNodeTypesFromJSONSchema = getNodeTypesFromJSONSchema;
|
|
16
5
|
const _2020_1 = require("@redocly/ajv/dist/2020");
|
|
17
6
|
const utils_1 = require("../utils");
|
|
18
7
|
const ajv = new _2020_1.default({
|
|
@@ -37,7 +26,6 @@ function findOneOf(schemaOneOf, oneOfs) {
|
|
|
37
26
|
};
|
|
38
27
|
}
|
|
39
28
|
function transformJSONSchemaToNodeType(propertyName, schema, ctx) {
|
|
40
|
-
var _a;
|
|
41
29
|
if (!schema || typeof schema === 'boolean') {
|
|
42
30
|
throw new Error(`Unexpected schema in ${propertyName}.`);
|
|
43
31
|
}
|
|
@@ -54,7 +42,7 @@ function transformJSONSchemaToNodeType(propertyName, schema, ctx) {
|
|
|
54
42
|
schema.type === 'number' ||
|
|
55
43
|
schema.type === 'integer' ||
|
|
56
44
|
schema.type === 'boolean') {
|
|
57
|
-
const { default: _, format: _format
|
|
45
|
+
const { default: _, format: _format, ...rest } = schema;
|
|
58
46
|
return rest;
|
|
59
47
|
}
|
|
60
48
|
if (schema.type === 'object' && !schema.properties && !schema.oneOf) {
|
|
@@ -82,16 +70,15 @@ function transformJSONSchemaToNodeType(propertyName, schema, ctx) {
|
|
|
82
70
|
}
|
|
83
71
|
if (schema.oneOf) {
|
|
84
72
|
if (schema.discriminator) {
|
|
85
|
-
const discriminatedPropertyName =
|
|
73
|
+
const discriminatedPropertyName = schema.discriminator?.propertyName;
|
|
86
74
|
if (!discriminatedPropertyName) {
|
|
87
75
|
throw new Error(`Unexpected discriminator without a propertyName in ${propertyName}.`);
|
|
88
76
|
}
|
|
89
77
|
const oneOfs = schema.oneOf.map((option, i) => {
|
|
90
|
-
var _a;
|
|
91
78
|
if (typeof option === 'boolean') {
|
|
92
79
|
throw new Error(`Unexpected boolean schema in ${propertyName} at position ${i} in oneOf.`);
|
|
93
80
|
}
|
|
94
|
-
const discriminatedProperty =
|
|
81
|
+
const discriminatedProperty = option?.properties?.[discriminatedPropertyName];
|
|
95
82
|
if (!discriminatedProperty || typeof discriminatedProperty === 'boolean') {
|
|
96
83
|
throw new Error(`Unexpected property '${discriminatedProperty}' schema in ${propertyName} at position ${i} in oneOf.`);
|
|
97
84
|
}
|
|
@@ -170,4 +157,3 @@ function getNodeTypesFromJSONSchema(schemaName, entrySchema) {
|
|
|
170
157
|
transformJSONSchemaToNodeType(schemaName, entrySchema, ctx);
|
|
171
158
|
return ctx;
|
|
172
159
|
}
|
|
173
|
-
exports.getNodeTypesFromJSONSchema = getNodeTypesFromJSONSchema;
|
package/lib/types/oas2.js
CHANGED
|
@@ -71,7 +71,7 @@ const Paths = {
|
|
|
71
71
|
};
|
|
72
72
|
const PathItem = {
|
|
73
73
|
properties: {
|
|
74
|
-
$ref: { type: 'string' },
|
|
74
|
+
$ref: { type: 'string' }, // TODO: verify special $ref handling for Path Item
|
|
75
75
|
parameters: 'ParameterList',
|
|
76
76
|
get: 'Operation',
|
|
77
77
|
put: 'Operation',
|
|
@@ -98,7 +98,7 @@ const Operation = {
|
|
|
98
98
|
deprecated: { type: 'boolean' },
|
|
99
99
|
security: 'SecurityRequirementList',
|
|
100
100
|
'x-codeSamples': 'XCodeSampleList',
|
|
101
|
-
'x-code-samples': 'XCodeSampleList',
|
|
101
|
+
'x-code-samples': 'XCodeSampleList', // deprecated
|
|
102
102
|
'x-hideTryItPanel': { type: 'boolean' },
|
|
103
103
|
},
|
|
104
104
|
required: ['responses'],
|
|
@@ -359,11 +359,11 @@ const SecurityScheme = {
|
|
|
359
359
|
'x-defaultClientId': { type: 'string' },
|
|
360
360
|
},
|
|
361
361
|
required(value) {
|
|
362
|
-
switch (value
|
|
362
|
+
switch (value?.type) {
|
|
363
363
|
case 'apiKey':
|
|
364
364
|
return ['type', 'name', 'in'];
|
|
365
365
|
case 'oauth2':
|
|
366
|
-
switch (value
|
|
366
|
+
switch (value?.flow) {
|
|
367
367
|
case 'implicit':
|
|
368
368
|
return ['type', 'flow', 'authorizationUrl', 'scopes'];
|
|
369
369
|
case 'accessCode':
|
|
@@ -379,13 +379,13 @@ const SecurityScheme = {
|
|
|
379
379
|
}
|
|
380
380
|
},
|
|
381
381
|
allowed(value) {
|
|
382
|
-
switch (value
|
|
382
|
+
switch (value?.type) {
|
|
383
383
|
case 'basic':
|
|
384
384
|
return ['type', 'description'];
|
|
385
385
|
case 'apiKey':
|
|
386
386
|
return ['type', 'name', 'in', 'description'];
|
|
387
387
|
case 'oauth2':
|
|
388
|
-
switch (value
|
|
388
|
+
switch (value?.flow) {
|
|
389
389
|
case 'implicit':
|
|
390
390
|
return ['type', 'flow', 'authorizationUrl', 'description', 'scopes'];
|
|
391
391
|
case 'accessCode':
|
package/lib/types/oas3.js
CHANGED
|
@@ -119,7 +119,7 @@ const WebhooksMap = {
|
|
|
119
119
|
};
|
|
120
120
|
const PathItem = {
|
|
121
121
|
properties: {
|
|
122
|
-
$ref: { type: 'string' },
|
|
122
|
+
$ref: { type: 'string' }, // TODO: verify special $ref handling for Path Item
|
|
123
123
|
servers: 'ServerList',
|
|
124
124
|
parameters: 'ParameterList',
|
|
125
125
|
summary: { type: 'string' },
|
|
@@ -175,7 +175,7 @@ const Operation = {
|
|
|
175
175
|
deprecated: { type: 'boolean' },
|
|
176
176
|
callbacks: 'CallbacksMap',
|
|
177
177
|
'x-codeSamples': 'XCodeSampleList',
|
|
178
|
-
'x-code-samples': 'XCodeSampleList',
|
|
178
|
+
'x-code-samples': 'XCodeSampleList', // deprecated
|
|
179
179
|
'x-hideTryItPanel': { type: 'boolean' },
|
|
180
180
|
},
|
|
181
181
|
required: ['responses'],
|
|
@@ -273,8 +273,8 @@ const Link = {
|
|
|
273
273
|
properties: {
|
|
274
274
|
operationRef: { type: 'string' },
|
|
275
275
|
operationId: { type: 'string' },
|
|
276
|
-
parameters: null,
|
|
277
|
-
requestBody: null,
|
|
276
|
+
parameters: null, // TODO: figure out how to describe/validate this
|
|
277
|
+
requestBody: null, // TODO: figure out how to describe/validate this
|
|
278
278
|
description: { type: 'string' },
|
|
279
279
|
server: 'Server',
|
|
280
280
|
},
|
|
@@ -389,7 +389,7 @@ const Components = {
|
|
|
389
389
|
const ImplicitFlow = {
|
|
390
390
|
properties: {
|
|
391
391
|
refreshUrl: { type: 'string' },
|
|
392
|
-
scopes: { type: 'object', additionalProperties: { type: 'string' } },
|
|
392
|
+
scopes: { type: 'object', additionalProperties: { type: 'string' } }, // TODO: validate scopes
|
|
393
393
|
authorizationUrl: { type: 'string' },
|
|
394
394
|
},
|
|
395
395
|
required: ['authorizationUrl', 'scopes'],
|
|
@@ -398,7 +398,7 @@ const ImplicitFlow = {
|
|
|
398
398
|
const PasswordFlow = {
|
|
399
399
|
properties: {
|
|
400
400
|
refreshUrl: { type: 'string' },
|
|
401
|
-
scopes: { type: 'object', additionalProperties: { type: 'string' } },
|
|
401
|
+
scopes: { type: 'object', additionalProperties: { type: 'string' } }, // TODO: validate scopes
|
|
402
402
|
tokenUrl: { type: 'string' },
|
|
403
403
|
},
|
|
404
404
|
required: ['tokenUrl', 'scopes'],
|
|
@@ -407,7 +407,7 @@ const PasswordFlow = {
|
|
|
407
407
|
const ClientCredentials = {
|
|
408
408
|
properties: {
|
|
409
409
|
refreshUrl: { type: 'string' },
|
|
410
|
-
scopes: { type: 'object', additionalProperties: { type: 'string' } },
|
|
410
|
+
scopes: { type: 'object', additionalProperties: { type: 'string' } }, // TODO: validate scopes
|
|
411
411
|
tokenUrl: { type: 'string' },
|
|
412
412
|
},
|
|
413
413
|
required: ['tokenUrl', 'scopes'],
|
|
@@ -417,7 +417,7 @@ const AuthorizationCode = {
|
|
|
417
417
|
properties: {
|
|
418
418
|
refreshUrl: { type: 'string' },
|
|
419
419
|
authorizationUrl: { type: 'string' },
|
|
420
|
-
scopes: { type: 'object', additionalProperties: { type: 'string' } },
|
|
420
|
+
scopes: { type: 'object', additionalProperties: { type: 'string' } }, // TODO: validate scopes
|
|
421
421
|
tokenUrl: { type: 'string' },
|
|
422
422
|
'x-usePkce': (value) => {
|
|
423
423
|
if (typeof value === 'boolean') {
|
|
@@ -453,7 +453,7 @@ const SecurityScheme = {
|
|
|
453
453
|
'x-defaultClientId': { type: 'string' },
|
|
454
454
|
},
|
|
455
455
|
required(value) {
|
|
456
|
-
switch (value
|
|
456
|
+
switch (value?.type) {
|
|
457
457
|
case 'apiKey':
|
|
458
458
|
return ['type', 'name', 'in'];
|
|
459
459
|
case 'http':
|
|
@@ -467,7 +467,7 @@ const SecurityScheme = {
|
|
|
467
467
|
}
|
|
468
468
|
},
|
|
469
469
|
allowed(value) {
|
|
470
|
-
switch (value
|
|
470
|
+
switch (value?.type) {
|
|
471
471
|
case 'apiKey':
|
|
472
472
|
return ['type', 'name', 'in', 'description'];
|
|
473
473
|
case 'http':
|
package/lib/types/oas3_1.js
CHANGED
|
@@ -76,7 +76,7 @@ const Operation = {
|
|
|
76
76
|
deprecated: { type: 'boolean' },
|
|
77
77
|
callbacks: 'CallbacksMap',
|
|
78
78
|
'x-codeSamples': 'XCodeSampleList',
|
|
79
|
-
'x-code-samples': 'XCodeSampleList',
|
|
79
|
+
'x-code-samples': 'XCodeSampleList', // deprecated
|
|
80
80
|
'x-hideTryItPanel': { type: 'boolean' },
|
|
81
81
|
},
|
|
82
82
|
extensionsPrefix: 'x-',
|
|
@@ -134,7 +134,7 @@ const Schema = {
|
|
|
134
134
|
contains: 'Schema',
|
|
135
135
|
minContains: { type: 'integer', minimum: 0 },
|
|
136
136
|
maxContains: { type: 'integer', minimum: 0 },
|
|
137
|
-
patternProperties: '
|
|
137
|
+
patternProperties: 'PatternProperties',
|
|
138
138
|
propertyNames: 'Schema',
|
|
139
139
|
unevaluatedItems: (value) => {
|
|
140
140
|
if (typeof value === 'boolean') {
|
|
@@ -206,7 +206,7 @@ const SecurityScheme = {
|
|
|
206
206
|
openIdConnectUrl: { type: 'string' },
|
|
207
207
|
},
|
|
208
208
|
required(value) {
|
|
209
|
-
switch (value
|
|
209
|
+
switch (value?.type) {
|
|
210
210
|
case 'apiKey':
|
|
211
211
|
return ['type', 'name', 'in'];
|
|
212
212
|
case 'http':
|
|
@@ -220,13 +220,13 @@ const SecurityScheme = {
|
|
|
220
220
|
}
|
|
221
221
|
},
|
|
222
222
|
allowed(value) {
|
|
223
|
-
switch (value
|
|
223
|
+
switch (value?.type) {
|
|
224
224
|
case 'apiKey':
|
|
225
225
|
return ['type', 'name', 'in', 'description'];
|
|
226
226
|
case 'http':
|
|
227
227
|
return ['type', 'scheme', 'bearerFormat', 'description'];
|
|
228
228
|
case 'oauth2':
|
|
229
|
-
switch (value
|
|
229
|
+
switch (value?.flows) {
|
|
230
230
|
case 'implicit':
|
|
231
231
|
return ['type', 'flows', 'authorizationUrl', 'refreshUrl', 'description', 'scopes'];
|
|
232
232
|
case 'password':
|
|
@@ -267,11 +267,17 @@ const DependentRequired = {
|
|
|
267
267
|
properties: {},
|
|
268
268
|
additionalProperties: { type: 'array', items: { type: 'string' } },
|
|
269
269
|
};
|
|
270
|
-
exports.Oas3_1Types =
|
|
270
|
+
exports.Oas3_1Types = {
|
|
271
|
+
...oas3_1.Oas3Types,
|
|
272
|
+
Info,
|
|
271
273
|
Root,
|
|
272
274
|
Schema,
|
|
273
275
|
SchemaProperties,
|
|
276
|
+
PatternProperties: SchemaProperties,
|
|
274
277
|
License,
|
|
275
|
-
Components,
|
|
278
|
+
Components,
|
|
279
|
+
NamedPathItems: (0, _1.mapOf)('PathItem'),
|
|
280
|
+
SecurityScheme,
|
|
276
281
|
Operation,
|
|
277
|
-
DependentRequired
|
|
282
|
+
DependentRequired,
|
|
283
|
+
};
|
|
@@ -8,14 +8,16 @@ export type BuiltInOAS2RuleId = typeof builtInOAS2Rules[number];
|
|
|
8
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"];
|
|
9
9
|
export type BuiltInOAS3RuleId = typeof builtInOAS3Rules[number];
|
|
10
10
|
declare const builtInAsync2Rules: readonly ["spec", "info-contact", "operation-operationId", "tag-description", "tags-alphabetical", "channels-kebab-case", "no-channel-trailing-slash"];
|
|
11
|
+
declare const builtInAsync3Rules: readonly ["spec", "info-contact", "operation-operationId", "tag-description", "tags-alphabetical", "channels-kebab-case", "no-channel-trailing-slash"];
|
|
11
12
|
export type BuiltInAsync2RuleId = typeof builtInAsync2Rules[number];
|
|
13
|
+
export type BuiltInAsync3RuleId = typeof builtInAsync3Rules[number];
|
|
12
14
|
declare const builtInArazzoRules: readonly ["spec"];
|
|
13
15
|
export type BuiltInArazzoRuleId = typeof builtInArazzoRules[number];
|
|
14
16
|
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
17
|
export type Oas2NodeType = typeof oas2NodeTypesList[number];
|
|
16
18
|
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
19
|
export type Oas3NodeType = typeof oas3NodeTypesList[number];
|
|
18
|
-
declare const oas3_1NodeTypesList: readonly ["Root", "Schema", "SchemaProperties", "Info", "License", "Components", "NamedPathItems", "SecurityScheme", "Operation", "DependentRequired"];
|
|
20
|
+
declare const oas3_1NodeTypesList: readonly ["Root", "Schema", "SchemaProperties", "PatternProperties", "Info", "License", "Components", "NamedPathItems", "SecurityScheme", "Operation", "DependentRequired"];
|
|
19
21
|
export type Oas3_1NodeType = typeof oas3_1NodeTypesList[number];
|
|
20
22
|
export declare function createConfigTypes(extraSchemas: JSONSchema, config?: Config): {
|
|
21
23
|
ConfigRoot: NodeType;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ConfigTypes =
|
|
3
|
+
exports.ConfigTypes = void 0;
|
|
4
|
+
exports.createConfigTypes = createConfigTypes;
|
|
4
5
|
const config_1 = require("@redocly/config");
|
|
5
6
|
const _1 = require(".");
|
|
6
7
|
const utils_1 = require("../utils");
|
|
@@ -80,12 +81,22 @@ const builtInAsync2Rules = [
|
|
|
80
81
|
'channels-kebab-case',
|
|
81
82
|
'no-channel-trailing-slash',
|
|
82
83
|
];
|
|
84
|
+
const builtInAsync3Rules = [
|
|
85
|
+
'spec',
|
|
86
|
+
'info-contact',
|
|
87
|
+
'operation-operationId',
|
|
88
|
+
'tag-description',
|
|
89
|
+
'tags-alphabetical',
|
|
90
|
+
'channels-kebab-case',
|
|
91
|
+
'no-channel-trailing-slash',
|
|
92
|
+
];
|
|
83
93
|
const builtInArazzoRules = ['spec'];
|
|
84
94
|
const builtInRules = [
|
|
85
95
|
...builtInCommonOASRules,
|
|
86
96
|
...builtInOAS2Rules,
|
|
87
97
|
...builtInOAS3Rules,
|
|
88
98
|
...builtInAsync2Rules,
|
|
99
|
+
...builtInAsync3Rules,
|
|
89
100
|
...builtInArazzoRules,
|
|
90
101
|
];
|
|
91
102
|
const oas2NodeTypesList = [
|
|
@@ -195,6 +206,7 @@ const oas3_1NodeTypesList = [
|
|
|
195
206
|
'Root',
|
|
196
207
|
'Schema',
|
|
197
208
|
'SchemaProperties',
|
|
209
|
+
'PatternProperties',
|
|
198
210
|
'Info',
|
|
199
211
|
'License',
|
|
200
212
|
'Components',
|
|
@@ -231,35 +243,56 @@ const ConfigStyleguide = {
|
|
|
231
243
|
arazzoDecorators: { type: 'object' },
|
|
232
244
|
},
|
|
233
245
|
};
|
|
234
|
-
const createConfigRoot = (nodeTypes) => (
|
|
246
|
+
const createConfigRoot = (nodeTypes) => ({
|
|
247
|
+
...nodeTypes.rootRedoclyConfigSchema,
|
|
248
|
+
properties: {
|
|
249
|
+
...nodeTypes.rootRedoclyConfigSchema.properties,
|
|
250
|
+
...ConfigStyleguide.properties,
|
|
251
|
+
apis: 'ConfigApis', // Override apis with internal format
|
|
252
|
+
'features.openapi': 'ConfigReferenceDocs', // deprecated
|
|
253
|
+
'features.mockServer': 'ConfigMockServer', // deprecated
|
|
254
|
+
organization: { type: 'string' },
|
|
255
|
+
region: { enum: ['us', 'eu'] },
|
|
256
|
+
telemetry: { enum: ['on', 'off'] },
|
|
257
|
+
resolve: {
|
|
235
258
|
properties: {
|
|
236
259
|
http: 'ConfigHTTP',
|
|
237
260
|
doNotResolveExamples: { type: 'boolean' },
|
|
238
261
|
},
|
|
239
|
-
},
|
|
262
|
+
},
|
|
263
|
+
files: {
|
|
240
264
|
type: 'array',
|
|
241
265
|
items: {
|
|
242
266
|
type: 'string',
|
|
243
267
|
},
|
|
244
|
-
}
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
});
|
|
245
271
|
const ConfigApis = {
|
|
246
272
|
properties: {},
|
|
247
273
|
additionalProperties: 'ConfigApisProperties',
|
|
248
274
|
};
|
|
249
|
-
const createConfigApisProperties = (nodeTypes) => {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
275
|
+
const createConfigApisProperties = (nodeTypes) => ({
|
|
276
|
+
...nodeTypes['rootRedoclyConfigSchema.apis_additionalProperties'],
|
|
277
|
+
properties: {
|
|
278
|
+
...nodeTypes['rootRedoclyConfigSchema.apis_additionalProperties']?.properties,
|
|
279
|
+
labels: {
|
|
280
|
+
type: 'array',
|
|
281
|
+
items: {
|
|
282
|
+
type: 'string',
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
...ConfigStyleguide.properties,
|
|
286
|
+
'features.openapi': 'ConfigReferenceDocs', // deprecated
|
|
287
|
+
'features.mockServer': 'ConfigMockServer', // deprecated
|
|
288
|
+
files: {
|
|
289
|
+
type: 'array',
|
|
290
|
+
items: {
|
|
291
|
+
type: 'string',
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
});
|
|
263
296
|
const ConfigHTTP = {
|
|
264
297
|
properties: {
|
|
265
298
|
headers: {
|
|
@@ -539,7 +572,14 @@ const FontConfig = {
|
|
|
539
572
|
},
|
|
540
573
|
};
|
|
541
574
|
const ButtonsConfig = {
|
|
542
|
-
properties:
|
|
575
|
+
properties: {
|
|
576
|
+
...(0, utils_1.omitObjectProps)(FontConfig.properties, ['fontSize', 'lineHeight']),
|
|
577
|
+
borderRadius: { type: 'string' },
|
|
578
|
+
hoverStyle: { type: 'string' },
|
|
579
|
+
boxShadow: { type: 'string' },
|
|
580
|
+
hoverBoxShadow: { type: 'string' },
|
|
581
|
+
sizes: 'Sizes',
|
|
582
|
+
},
|
|
543
583
|
};
|
|
544
584
|
const BadgeFontConfig = {
|
|
545
585
|
properties: (0, utils_1.pickObjectProps)(FontConfig.properties, ['fontSize', 'lineHeight']),
|
|
@@ -551,7 +591,12 @@ const BadgeSizes = {
|
|
|
551
591
|
},
|
|
552
592
|
};
|
|
553
593
|
const HttpBadgesConfig = {
|
|
554
|
-
properties:
|
|
594
|
+
properties: {
|
|
595
|
+
...(0, utils_1.omitObjectProps)(FontConfig.properties, ['fontSize', 'lineHeight']),
|
|
596
|
+
borderRadius: { type: 'string' },
|
|
597
|
+
color: { type: 'string' },
|
|
598
|
+
sizes: 'BadgeSizes',
|
|
599
|
+
},
|
|
555
600
|
};
|
|
556
601
|
const LabelControls = {
|
|
557
602
|
properties: {
|
|
@@ -650,13 +695,38 @@ const SpacingConfig = {
|
|
|
650
695
|
},
|
|
651
696
|
};
|
|
652
697
|
const Sidebar = {
|
|
653
|
-
properties:
|
|
698
|
+
properties: {
|
|
699
|
+
...(0, utils_1.omitObjectProps)(FontConfig.properties, ['fontWeight', 'lineHeight']),
|
|
700
|
+
activeBgColor: { type: 'string' },
|
|
701
|
+
activeTextColor: { type: 'string' },
|
|
702
|
+
backgroundColor: { type: 'string' },
|
|
703
|
+
borderRadius: { type: 'string' },
|
|
704
|
+
breakPath: { type: 'boolean' },
|
|
705
|
+
caretColor: { type: 'string' },
|
|
706
|
+
caretSize: { type: 'string' },
|
|
707
|
+
groupItems: 'GroupItemsConfig',
|
|
708
|
+
level1items: 'Level1Items',
|
|
709
|
+
rightLineColor: { type: 'string' },
|
|
710
|
+
separatorLabelColor: { type: 'string' },
|
|
711
|
+
showAtBreakpoint: { type: 'string' },
|
|
712
|
+
spacing: 'SpacingConfig',
|
|
713
|
+
textColor: { type: 'string' },
|
|
714
|
+
width: { type: 'string' },
|
|
715
|
+
},
|
|
654
716
|
};
|
|
655
717
|
const Heading = {
|
|
656
|
-
properties:
|
|
718
|
+
properties: {
|
|
719
|
+
...FontConfig.properties,
|
|
720
|
+
color: { type: 'string' },
|
|
721
|
+
transform: { type: 'string' },
|
|
722
|
+
},
|
|
657
723
|
};
|
|
658
724
|
const CodeConfig = {
|
|
659
|
-
properties:
|
|
725
|
+
properties: {
|
|
726
|
+
...FontConfig.properties,
|
|
727
|
+
backgroundColor: { type: 'string' },
|
|
728
|
+
color: { type: 'string' },
|
|
729
|
+
wordBreak: {
|
|
660
730
|
enum: [
|
|
661
731
|
'break-all',
|
|
662
732
|
'break-word',
|
|
@@ -667,7 +737,9 @@ const CodeConfig = {
|
|
|
667
737
|
'inherit',
|
|
668
738
|
'initial',
|
|
669
739
|
],
|
|
670
|
-
},
|
|
740
|
+
},
|
|
741
|
+
wrap: { type: 'boolean' },
|
|
742
|
+
},
|
|
671
743
|
};
|
|
672
744
|
const HeadingsConfig = {
|
|
673
745
|
properties: (0, utils_1.omitObjectProps)(FontConfig.properties, ['fontSize']),
|
|
@@ -682,10 +754,29 @@ const LinksConfig = {
|
|
|
682
754
|
},
|
|
683
755
|
};
|
|
684
756
|
const Typography = {
|
|
685
|
-
properties:
|
|
757
|
+
properties: {
|
|
758
|
+
code: 'CodeConfig',
|
|
759
|
+
fieldName: 'FontConfig',
|
|
760
|
+
...(0, utils_1.pickObjectProps)(FontConfig.properties, ['fontSize', 'fontFamily']),
|
|
761
|
+
fontWeightBold: { type: 'string' },
|
|
762
|
+
fontWeightLight: { type: 'string' },
|
|
763
|
+
fontWeightRegular: { type: 'string' },
|
|
764
|
+
heading1: 'Heading',
|
|
765
|
+
heading2: 'Heading',
|
|
766
|
+
heading3: 'Heading',
|
|
767
|
+
headings: 'HeadingsConfig',
|
|
768
|
+
lineHeight: { type: 'string' },
|
|
769
|
+
links: 'LinksConfig',
|
|
770
|
+
optimizeSpeed: { type: 'boolean' },
|
|
771
|
+
rightPanelHeading: 'Heading',
|
|
772
|
+
smoothing: { enum: ['auto', 'none', 'antialiased', 'subpixel-antialiased', 'grayscale'] },
|
|
773
|
+
},
|
|
686
774
|
};
|
|
687
775
|
const TokenProps = {
|
|
688
|
-
properties:
|
|
776
|
+
properties: {
|
|
777
|
+
color: { type: 'string' },
|
|
778
|
+
...(0, utils_1.omitObjectProps)(FontConfig.properties, ['fontWeight']),
|
|
779
|
+
},
|
|
689
780
|
};
|
|
690
781
|
const CodeBlock = {
|
|
691
782
|
properties: {
|
|
@@ -754,7 +845,7 @@ const ConfigTheme = {
|
|
|
754
845
|
sidebar: 'Sidebar',
|
|
755
846
|
spacing: 'ThemeSpacing',
|
|
756
847
|
typography: 'Typography',
|
|
757
|
-
links: { properties: { color: { type: 'string' } } },
|
|
848
|
+
links: { properties: { color: { type: 'string' } } }, // deprecated
|
|
758
849
|
codeSample: { properties: { backgroundColor: { type: 'string' } } }, // deprecated
|
|
759
850
|
},
|
|
760
851
|
};
|
|
@@ -812,7 +903,7 @@ const ConfigReferenceDocs = {
|
|
|
812
903
|
maxDisplayedEnumValues: { type: 'number' },
|
|
813
904
|
menuToggle: { type: 'boolean' },
|
|
814
905
|
nativeScrollbars: { type: 'boolean' },
|
|
815
|
-
noAutoAuth: { type: 'boolean' },
|
|
906
|
+
noAutoAuth: { type: 'boolean' }, // deprecated
|
|
816
907
|
oAuth2RedirectURI: { type: 'string' },
|
|
817
908
|
onDeepLinkClick: { type: 'object' },
|
|
818
909
|
onlyRequiredInSamples: { type: 'boolean' },
|
|
@@ -822,7 +913,7 @@ const ConfigReferenceDocs = {
|
|
|
822
913
|
requestInterceptor: { type: 'object' },
|
|
823
914
|
requiredPropsFirst: { type: 'boolean' },
|
|
824
915
|
routingBasePath: { type: 'string' },
|
|
825
|
-
routingStrategy: { type: 'string' },
|
|
916
|
+
routingStrategy: { type: 'string' }, // deprecated
|
|
826
917
|
samplesTabsMaxCount: { type: 'number' },
|
|
827
918
|
schemaExpansionLevel: (value) => {
|
|
828
919
|
if (typeof value === 'number') {
|
|
@@ -851,7 +942,7 @@ const ConfigReferenceDocs = {
|
|
|
851
942
|
searchTagTitleBoost: { type: 'number' },
|
|
852
943
|
sendXUserAgentInTryIt: { type: 'boolean' },
|
|
853
944
|
showChangeLayoutButton: { type: 'boolean' },
|
|
854
|
-
showConsole: { type: 'boolean' },
|
|
945
|
+
showConsole: { type: 'boolean' }, // deprecated
|
|
855
946
|
showExtensions: (value) => {
|
|
856
947
|
if (typeof value === 'boolean') {
|
|
857
948
|
return { type: 'boolean' };
|
|
@@ -878,8 +969,8 @@ const ConfigReferenceDocs = {
|
|
|
878
969
|
sortOperationsAlphabetically: { type: 'boolean' },
|
|
879
970
|
sortPropsAlphabetically: { type: 'boolean' },
|
|
880
971
|
sortTagsAlphabetically: { type: 'boolean' },
|
|
881
|
-
suppressWarnings: { type: 'boolean' },
|
|
882
|
-
unstable_externalDescription: { type: 'boolean' },
|
|
972
|
+
suppressWarnings: { type: 'boolean' }, // deprecated
|
|
973
|
+
unstable_externalDescription: { type: 'boolean' }, // deprecated
|
|
883
974
|
unstable_ignoreMimeParameters: { type: 'boolean' },
|
|
884
975
|
untrustedDefinition: { type: 'boolean' },
|
|
885
976
|
mockServer: {
|
|
@@ -903,16 +994,21 @@ const ConfigMockServer = {
|
|
|
903
994
|
};
|
|
904
995
|
function createConfigTypes(extraSchemas, config) {
|
|
905
996
|
const nodeNames = Object.values(oas_types_1.SpecVersion).flatMap((version) => {
|
|
906
|
-
const types =
|
|
997
|
+
const types = config?.styleguide
|
|
907
998
|
? config.styleguide.extendTypes((0, oas_types_1.getTypes)(version), version)
|
|
908
999
|
: (0, oas_types_1.getTypes)(version);
|
|
909
1000
|
return Object.keys(types);
|
|
910
1001
|
});
|
|
911
1002
|
// Create types based on external schemas
|
|
912
1003
|
const nodeTypes = (0, json_schema_adapter_1.getNodeTypesFromJSONSchema)('rootRedoclyConfigSchema', extraSchemas);
|
|
913
|
-
return
|
|
1004
|
+
return {
|
|
1005
|
+
...CoreConfigTypes,
|
|
1006
|
+
ConfigRoot: createConfigRoot(nodeTypes), // This is the REAL config root type
|
|
1007
|
+
ConfigApisProperties: createConfigApisProperties(nodeTypes),
|
|
1008
|
+
AssertionDefinitionSubject: createAssertionDefinitionSubject(nodeNames),
|
|
1009
|
+
...nodeTypes,
|
|
1010
|
+
};
|
|
914
1011
|
}
|
|
915
|
-
exports.createConfigTypes = createConfigTypes;
|
|
916
1012
|
const CoreConfigTypes = {
|
|
917
1013
|
Assert,
|
|
918
1014
|
ConfigApis,
|