@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.
Files changed (139) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/lib/benchmark/benches/lint-with-many-rules.bench.js +2 -2
  3. package/lib/benchmark/benches/lint-with-nested-rule.bench.js +2 -2
  4. package/lib/benchmark/benches/lint-with-no-rules.bench.js +2 -2
  5. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +2 -2
  6. package/lib/benchmark/benches/lint-with-top-level-rule.bench.js +2 -2
  7. package/lib/benchmark/benches/recommended-oas3.bench.js +2 -2
  8. package/lib/benchmark/benches/resolve-with-no-external.bench.js +2 -2
  9. package/lib/benchmark/utils.js +7 -4
  10. package/lib/bundle.d.ts +2 -2
  11. package/lib/bundle.js +127 -120
  12. package/lib/config/all.js +9 -0
  13. package/lib/config/builtIn.js +7 -1
  14. package/lib/config/config-resolvers.js +179 -138
  15. package/lib/config/config.d.ts +2 -2
  16. package/lib/config/config.js +53 -34
  17. package/lib/config/load.js +105 -117
  18. package/lib/config/minimal.js +9 -0
  19. package/lib/config/recommended-strict.js +9 -0
  20. package/lib/config/recommended.js +9 -0
  21. package/lib/config/rules.d.ts +3 -3
  22. package/lib/config/rules.js +1 -2
  23. package/lib/config/types.d.ts +9 -3
  24. package/lib/config/utils.js +70 -49
  25. package/lib/decorators/async3/index.d.ts +1 -0
  26. package/lib/decorators/async3/index.js +4 -0
  27. package/lib/decorators/common/filters/filter-helper.js +2 -3
  28. package/lib/decorators/common/filters/filter-in.js +1 -1
  29. package/lib/decorators/common/filters/filter-out.js +1 -1
  30. package/lib/decorators/common/info-override.js +1 -12
  31. package/lib/decorators/common/media-type-examples-override.js +8 -2
  32. package/lib/decorators/common/remove-x-internal.js +4 -5
  33. package/lib/decorators/oas2/remove-unused-components.js +1 -2
  34. package/lib/decorators/oas3/remove-unused-components.js +1 -2
  35. package/lib/env.d.ts +0 -1
  36. package/lib/env.js +1 -1
  37. package/lib/format/codeframes.js +10 -8
  38. package/lib/format/format.js +23 -15
  39. package/lib/index.d.ts +2 -1
  40. package/lib/index.js +6 -4
  41. package/lib/js-yaml/index.js +1 -1
  42. package/lib/lint.d.ts +2 -0
  43. package/lib/lint.js +92 -99
  44. package/lib/oas-types.d.ts +9 -5
  45. package/lib/oas-types.js +22 -12
  46. package/lib/redocly/domains.js +6 -6
  47. package/lib/redocly/index.js +60 -73
  48. package/lib/redocly/registry-api.js +64 -82
  49. package/lib/ref-utils.js +13 -13
  50. package/lib/resolve.js +186 -205
  51. package/lib/rules/ajv.js +10 -8
  52. package/lib/rules/async3/channels-kebab-case.d.ts +2 -0
  53. package/lib/rules/async3/channels-kebab-case.js +19 -0
  54. package/lib/rules/async3/index.d.ts +3 -0
  55. package/lib/rules/async3/index.js +22 -0
  56. package/lib/rules/async3/no-channel-trailing-slash.d.ts +2 -0
  57. package/lib/rules/async3/no-channel-trailing-slash.js +16 -0
  58. package/lib/rules/common/assertions/asserts.js +5 -5
  59. package/lib/rules/common/assertions/index.d.ts +5 -4
  60. package/lib/rules/common/assertions/utils.js +43 -28
  61. package/lib/rules/common/no-invalid-parameter-examples.js +1 -2
  62. package/lib/rules/common/no-invalid-schema-examples.js +1 -2
  63. package/lib/rules/common/no-required-schema-properties-undefined.js +1 -2
  64. package/lib/rules/common/operation-tag-defined.js +1 -2
  65. package/lib/rules/common/path-http-verbs-order.js +1 -1
  66. package/lib/rules/common/required-string-property-missing-min-length.js +2 -2
  67. package/lib/rules/common/response-contains-header.js +2 -2
  68. package/lib/rules/common/security-defined.js +3 -7
  69. package/lib/rules/common/spec.d.ts +2 -2
  70. package/lib/rules/common/spec.js +6 -7
  71. package/lib/rules/no-unresolved-refs.js +3 -4
  72. package/lib/rules/oas2/response-contains-property.js +1 -2
  73. package/lib/rules/oas3/array-parameter-serialization.js +1 -2
  74. package/lib/rules/oas3/component-name-unique.js +2 -4
  75. package/lib/rules/oas3/no-invalid-media-type-examples.js +1 -2
  76. package/lib/rules/oas3/no-server-variables-empty-enum.js +1 -2
  77. package/lib/rules/oas3/no-undefined-server-variable.js +2 -3
  78. package/lib/rules/oas3/no-unused-components.js +1 -2
  79. package/lib/rules/oas3/response-contains-property.js +1 -2
  80. package/lib/rules/utils.js +14 -12
  81. package/lib/types/asyncapi2.d.ts +17 -0
  82. package/lib/types/{asyncapi.js → asyncapi2.js} +56 -52
  83. package/lib/types/asyncapi3.d.ts +2 -0
  84. package/lib/types/asyncapi3.js +347 -0
  85. package/lib/types/index.js +19 -10
  86. package/lib/types/json-schema-adapter.js +4 -18
  87. package/lib/types/oas2.js +6 -6
  88. package/lib/types/oas3.js +10 -10
  89. package/lib/types/oas3_1.js +14 -8
  90. package/lib/types/redocly-yaml.d.ts +3 -1
  91. package/lib/types/redocly-yaml.js +131 -35
  92. package/lib/typings/asyncapi3.d.ts +53 -0
  93. package/lib/typings/asyncapi3.js +2 -0
  94. package/lib/utils.d.ts +4 -3
  95. package/lib/utils.js +55 -72
  96. package/lib/visitors.d.ts +11 -0
  97. package/lib/visitors.js +21 -8
  98. package/lib/walk.js +30 -23
  99. package/package.json +2 -2
  100. package/src/__tests__/bundle.test.ts +142 -0
  101. package/src/bundle.ts +17 -3
  102. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +22 -0
  103. package/src/config/__tests__/__snapshots__/config.test.ts.snap +24 -0
  104. package/src/config/__tests__/config.test.ts +11 -0
  105. package/src/config/all.ts +9 -0
  106. package/src/config/builtIn.ts +6 -0
  107. package/src/config/config-resolvers.ts +15 -2
  108. package/src/config/config.ts +24 -5
  109. package/src/config/minimal.ts +9 -0
  110. package/src/config/recommended-strict.ts +9 -0
  111. package/src/config/recommended.ts +9 -0
  112. package/src/config/rules.ts +12 -4
  113. package/src/config/types.ts +15 -2
  114. package/src/config/utils.ts +15 -0
  115. package/src/decorators/async3/index.ts +1 -0
  116. package/src/decorators/common/remove-x-internal.ts +2 -2
  117. package/src/index.ts +2 -1
  118. package/src/lint.ts +26 -3
  119. package/src/oas-types.ts +31 -13
  120. package/src/rules/arazzo/index.ts +1 -1
  121. package/src/rules/async2/index.ts +5 -5
  122. package/src/rules/async3/__tests__/channels-kebab-case.test.ts +141 -0
  123. package/src/rules/async3/__tests__/no-channel-trailing-slash.test.ts +96 -0
  124. package/src/rules/async3/channels-kebab-case.ts +19 -0
  125. package/src/rules/async3/index.ts +23 -0
  126. package/src/rules/async3/no-channel-trailing-slash.ts +16 -0
  127. package/src/rules/common/assertions/index.ts +13 -4
  128. package/src/rules/common/spec.ts +2 -2
  129. package/src/rules/oas2/index.ts +4 -4
  130. package/src/rules/oas3/index.ts +39 -37
  131. package/src/types/{asyncapi.ts → asyncapi2.ts} +37 -34
  132. package/src/types/asyncapi3.ts +381 -0
  133. package/src/types/oas3_1.ts +2 -1
  134. package/src/types/redocly-yaml.ts +14 -0
  135. package/src/typings/asyncapi3.ts +61 -0
  136. package/src/utils.ts +5 -3
  137. package/src/visitors.ts +18 -0
  138. package/tsconfig.tsbuildinfo +1 -1
  139. package/lib/types/asyncapi.d.ts +0 -2
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isNamedType = exports.normalizeTypes = exports.SpecExtension = exports.mapOf = exports.listOf = void 0;
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] = Object.assign(Object.assign({}, types[typeName]), { name: 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] = Object.assign(Object.assign({}, prop), { resolvable: false });
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 = Object.assign({}, type);
77
+ type = { ...type };
70
78
  normalizeType(type);
71
79
  return type;
72
80
  }
73
81
  else if (type && type.directResolveAs) {
74
- return Object.assign(Object.assign({}, type), { directResolveAs: resolveType(type.directResolveAs) });
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 (t === null || t === void 0 ? void 0 : t.name) === 'string';
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 = void 0;
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 } = schema, rest = __rest(schema, ["default", "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 = (_a = schema.discriminator) === null || _a === void 0 ? void 0 : _a.propertyName;
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 = (_a = option === null || option === void 0 ? void 0 : option.properties) === null || _a === void 0 ? void 0 : _a[discriminatedPropertyName];
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 === null || value === void 0 ? void 0 : value.type) {
362
+ switch (value?.type) {
363
363
  case 'apiKey':
364
364
  return ['type', 'name', 'in'];
365
365
  case 'oauth2':
366
- switch (value === null || value === void 0 ? void 0 : value.flow) {
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 === null || value === void 0 ? void 0 : value.type) {
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 === null || value === void 0 ? void 0 : value.flow) {
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 === null || value === void 0 ? void 0 : value.type) {
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 === null || value === void 0 ? void 0 : value.type) {
470
+ switch (value?.type) {
471
471
  case 'apiKey':
472
472
  return ['type', 'name', 'in', 'description'];
473
473
  case 'http':
@@ -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: 'SchemaProperties',
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 === null || value === void 0 ? void 0 : value.type) {
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 === null || value === void 0 ? void 0 : value.type) {
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 === null || value === void 0 ? void 0 : value.flows) {
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 = Object.assign(Object.assign({}, oas3_1.Oas3Types), { Info,
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, NamedPathItems: (0, _1.mapOf)('PathItem'), SecurityScheme,
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 = exports.createConfigTypes = void 0;
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) => (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: {
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
- }, files: {
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
- var _a;
251
- return (Object.assign(Object.assign({}, nodeTypes['rootRedoclyConfigSchema.apis_additionalProperties']), { properties: Object.assign(Object.assign(Object.assign(Object.assign({}, (_a = nodeTypes['rootRedoclyConfigSchema.apis_additionalProperties']) === null || _a === void 0 ? void 0 : _a.properties), { labels: {
252
- type: 'array',
253
- items: {
254
- type: 'string',
255
- },
256
- } }), ConfigStyleguide.properties), { 'features.openapi': 'ConfigReferenceDocs', 'features.mockServer': 'ConfigMockServer', files: {
257
- type: 'array',
258
- items: {
259
- type: 'string',
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: Object.assign(Object.assign({}, (0, utils_1.omitObjectProps)(FontConfig.properties, ['fontSize', 'lineHeight'])), { borderRadius: { type: 'string' }, hoverStyle: { type: 'string' }, boxShadow: { type: 'string' }, hoverBoxShadow: { type: 'string' }, sizes: 'Sizes' }),
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: Object.assign(Object.assign({}, (0, utils_1.omitObjectProps)(FontConfig.properties, ['fontSize', 'lineHeight'])), { borderRadius: { type: 'string' }, color: { type: 'string' }, sizes: 'BadgeSizes' }),
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: Object.assign(Object.assign({}, (0, utils_1.omitObjectProps)(FontConfig.properties, ['fontWeight', 'lineHeight'])), { activeBgColor: { type: 'string' }, activeTextColor: { type: 'string' }, backgroundColor: { type: 'string' }, borderRadius: { type: 'string' }, breakPath: { type: 'boolean' }, caretColor: { type: 'string' }, caretSize: { type: 'string' }, groupItems: 'GroupItemsConfig', level1items: 'Level1Items', rightLineColor: { type: 'string' }, separatorLabelColor: { type: 'string' }, showAtBreakpoint: { type: 'string' }, spacing: 'SpacingConfig', textColor: { type: 'string' }, width: { type: 'string' } }),
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: Object.assign(Object.assign({}, FontConfig.properties), { color: { type: 'string' }, transform: { type: 'string' } }),
718
+ properties: {
719
+ ...FontConfig.properties,
720
+ color: { type: 'string' },
721
+ transform: { type: 'string' },
722
+ },
657
723
  };
658
724
  const CodeConfig = {
659
- properties: Object.assign(Object.assign({}, FontConfig.properties), { backgroundColor: { type: 'string' }, color: { type: 'string' }, wordBreak: {
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
- }, wrap: { type: 'boolean' } }),
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: Object.assign(Object.assign({ code: 'CodeConfig', fieldName: 'FontConfig' }, (0, utils_1.pickObjectProps)(FontConfig.properties, ['fontSize', 'fontFamily'])), { fontWeightBold: { type: 'string' }, fontWeightLight: { type: 'string' }, fontWeightRegular: { type: 'string' }, heading1: 'Heading', heading2: 'Heading', heading3: 'Heading', headings: 'HeadingsConfig', lineHeight: { type: 'string' }, links: 'LinksConfig', optimizeSpeed: { type: 'boolean' }, rightPanelHeading: 'Heading', smoothing: { enum: ['auto', 'none', 'antialiased', 'subpixel-antialiased', 'grayscale'] } }),
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: Object.assign({ color: { type: 'string' } }, (0, utils_1.omitObjectProps)(FontConfig.properties, ['fontWeight'])),
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 = (config === null || config === void 0 ? void 0 : config.styleguide)
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 Object.assign(Object.assign(Object.assign({}, CoreConfigTypes), { ConfigRoot: createConfigRoot(nodeTypes), ConfigApisProperties: createConfigApisProperties(nodeTypes), AssertionDefinitionSubject: createAssertionDefinitionSubject(nodeNames) }), nodeTypes);
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,