@redocly/openapi-core 1.0.0-beta.125 → 1.0.0-beta.127

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 (281) hide show
  1. package/lib/bundle.js +5 -2
  2. package/lib/config/all.js +8 -1
  3. package/lib/resolve.js +5 -1
  4. package/lib/rules/common/required-string-property-missing-min-length.d.ts +1 -1
  5. package/lib/rules/common/required-string-property-missing-min-length.js +3 -3
  6. package/lib/rules/common/spec.js +1 -0
  7. package/lib/rules/oas2/index.js +1 -1
  8. package/lib/rules/oas2/request-mime-type.d.ts +1 -1
  9. package/lib/rules/oas2/response-mime-type.d.ts +1 -1
  10. package/lib/rules/oas3/index.js +1 -1
  11. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +2 -2
  12. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +3 -3
  13. package/lib/rules/oas3/request-mime-type.d.ts +1 -1
  14. package/lib/rules/oas3/response-mime-type.d.ts +1 -1
  15. package/lib/walk.d.ts +6 -5
  16. package/lib/walk.js +23 -27
  17. package/package.json +1 -1
  18. package/__tests__/utils.ts +0 -88
  19. package/src/__tests__/__snapshots__/bundle.test.ts.snap +0 -437
  20. package/src/__tests__/bundle.test.ts +0 -236
  21. package/src/__tests__/codeframes.test.ts +0 -530
  22. package/src/__tests__/fixtures/.redocly.lint-ignore.yaml +0 -5
  23. package/src/__tests__/fixtures/extension.js +0 -24
  24. package/src/__tests__/fixtures/refs/definitions.yaml +0 -3
  25. package/src/__tests__/fixtures/refs/examples.yaml +0 -8
  26. package/src/__tests__/fixtures/refs/external-request-body.yaml +0 -13
  27. package/src/__tests__/fixtures/refs/externalref.yaml +0 -35
  28. package/src/__tests__/fixtures/refs/hosted.yaml +0 -35
  29. package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
  30. package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
  31. package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +0 -18
  32. package/src/__tests__/fixtures/refs/param-b.yaml +0 -1
  33. package/src/__tests__/fixtures/refs/param-c.yaml +0 -1
  34. package/src/__tests__/fixtures/refs/rename.yaml +0 -1
  35. package/src/__tests__/fixtures/refs/requestBody.yaml +0 -9
  36. package/src/__tests__/fixtures/refs/schema-a.yaml +0 -1
  37. package/src/__tests__/fixtures/refs/simple.yaml +0 -1
  38. package/src/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
  39. package/src/__tests__/fixtures/resolve/External.yaml +0 -10
  40. package/src/__tests__/fixtures/resolve/External2.yaml +0 -4
  41. package/src/__tests__/fixtures/resolve/description.md +0 -3
  42. package/src/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
  43. package/src/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
  44. package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
  45. package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
  46. package/src/__tests__/fixtures/resolve/openapi.yaml +0 -28
  47. package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
  48. package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
  49. package/src/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
  50. package/src/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
  51. package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
  52. package/src/__tests__/format.test.ts +0 -76
  53. package/src/__tests__/js-yaml.test.ts +0 -73
  54. package/src/__tests__/lint.test.ts +0 -388
  55. package/src/__tests__/logger-browser.test.ts +0 -53
  56. package/src/__tests__/logger.test.ts +0 -47
  57. package/src/__tests__/login.test.ts +0 -17
  58. package/src/__tests__/normalizeVisitors.test.ts +0 -151
  59. package/src/__tests__/output-browser.test.ts +0 -18
  60. package/src/__tests__/output.test.ts +0 -15
  61. package/src/__tests__/ref-utils.test.ts +0 -120
  62. package/src/__tests__/resolve-http.test.ts +0 -77
  63. package/src/__tests__/resolve.test.ts +0 -408
  64. package/src/__tests__/utils-browser.test.ts +0 -11
  65. package/src/__tests__/utils.test.ts +0 -144
  66. package/src/__tests__/walk.test.ts +0 -1545
  67. package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
  68. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
  69. package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
  70. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -35
  71. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
  72. package/src/benchmark/benches/rebilly.yaml +0 -32275
  73. package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
  74. package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
  75. package/src/benchmark/benchmark.js +0 -311
  76. package/src/benchmark/colors.js +0 -29
  77. package/src/benchmark/fork.js +0 -83
  78. package/src/benchmark/utils.ts +0 -36
  79. package/src/bundle.ts +0 -399
  80. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -161
  81. package/src/config/__tests__/__snapshots__/config.test.ts.snap +0 -144
  82. package/src/config/__tests__/config-resolvers.test.ts +0 -491
  83. package/src/config/__tests__/config.test.ts +0 -307
  84. package/src/config/__tests__/fixtures/ingore-file.ts +0 -8
  85. package/src/config/__tests__/fixtures/load-redocly.yaml +0 -2
  86. package/src/config/__tests__/fixtures/plugin-config.yaml +0 -2
  87. package/src/config/__tests__/fixtures/plugin.js +0 -56
  88. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -11
  89. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -69
  90. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -7
  91. package/src/config/__tests__/fixtures/resolve-config/local-config-with-custom-function.yaml +0 -17
  92. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -18
  93. package/src/config/__tests__/fixtures/resolve-config/local-config-with-wrong-custom-function.yaml +0 -15
  94. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -9
  95. package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -80
  96. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -3
  97. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -4
  98. package/src/config/__tests__/load.test.ts +0 -167
  99. package/src/config/__tests__/resolve-plugins.test.ts +0 -27
  100. package/src/config/__tests__/utils.test.ts +0 -204
  101. package/src/config/all.ts +0 -66
  102. package/src/config/builtIn.ts +0 -37
  103. package/src/config/config-resolvers.ts +0 -465
  104. package/src/config/config.ts +0 -330
  105. package/src/config/index.ts +0 -7
  106. package/src/config/load.ts +0 -144
  107. package/src/config/minimal.ts +0 -60
  108. package/src/config/recommended.ts +0 -60
  109. package/src/config/rules.ts +0 -54
  110. package/src/config/types.ts +0 -216
  111. package/src/config/utils.ts +0 -333
  112. package/src/decorators/__tests__/filter-in.test.ts +0 -310
  113. package/src/decorators/__tests__/filter-out.test.ts +0 -335
  114. package/src/decorators/__tests__/media-type-examples-override.test.ts +0 -665
  115. package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
  116. package/src/decorators/__tests__/resources/request.yaml +0 -3
  117. package/src/decorators/__tests__/resources/response.yaml +0 -3
  118. package/src/decorators/common/filters/filter-helper.ts +0 -72
  119. package/src/decorators/common/filters/filter-in.ts +0 -18
  120. package/src/decorators/common/filters/filter-out.ts +0 -18
  121. package/src/decorators/common/info-description-override.ts +0 -24
  122. package/src/decorators/common/info-override.ts +0 -15
  123. package/src/decorators/common/media-type-examples-override.ts +0 -79
  124. package/src/decorators/common/operation-description-override.ts +0 -30
  125. package/src/decorators/common/registry-dependencies.ts +0 -25
  126. package/src/decorators/common/remove-x-internal.ts +0 -59
  127. package/src/decorators/common/tag-description-override.ts +0 -25
  128. package/src/decorators/oas2/index.ts +0 -20
  129. package/src/decorators/oas3/index.ts +0 -22
  130. package/src/env.ts +0 -5
  131. package/src/format/codeframes.ts +0 -216
  132. package/src/format/format.ts +0 -375
  133. package/src/index.ts +0 -71
  134. package/src/js-yaml/index.ts +0 -14
  135. package/src/lint.ts +0 -130
  136. package/src/logger.ts +0 -34
  137. package/src/oas-types.ts +0 -57
  138. package/src/output.ts +0 -7
  139. package/src/redocly/__tests__/redocly-client.test.ts +0 -146
  140. package/src/redocly/index.ts +0 -187
  141. package/src/redocly/redocly-client-types.ts +0 -10
  142. package/src/redocly/registry-api-types.ts +0 -32
  143. package/src/redocly/registry-api.ts +0 -149
  144. package/src/ref-utils.ts +0 -85
  145. package/src/resolve.ts +0 -412
  146. package/src/rules/__tests__/fixtures/code-sample.php +0 -9
  147. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
  148. package/src/rules/__tests__/fixtures/ref.yaml +0 -1
  149. package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -257
  150. package/src/rules/__tests__/utils.test.ts +0 -160
  151. package/src/rules/ajv.ts +0 -102
  152. package/src/rules/common/__tests__/info-license.test.ts +0 -62
  153. package/src/rules/common/__tests__/license-url.test.ts +0 -63
  154. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
  155. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -210
  156. package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
  157. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
  158. package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -192
  159. package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -231
  160. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
  161. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
  162. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
  163. package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
  164. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
  165. package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
  166. package/src/rules/common/__tests__/path-params-defined.test.ts +0 -202
  167. package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
  168. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +0 -264
  169. package/src/rules/common/__tests__/security-defined.test.ts +0 -175
  170. package/src/rules/common/__tests__/spec.test.ts +0 -555
  171. package/src/rules/common/__tests__/tag-description.test.ts +0 -65
  172. package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
  173. package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -869
  174. package/src/rules/common/assertions/__tests__/index.test.ts +0 -100
  175. package/src/rules/common/assertions/__tests__/utils.test.ts +0 -236
  176. package/src/rules/common/assertions/asserts.ts +0 -357
  177. package/src/rules/common/assertions/index.ts +0 -56
  178. package/src/rules/common/assertions/utils.ts +0 -331
  179. package/src/rules/common/info-contact.ts +0 -15
  180. package/src/rules/common/info-license-url.ts +0 -10
  181. package/src/rules/common/info-license.ts +0 -15
  182. package/src/rules/common/no-ambiguous-paths.ts +0 -50
  183. package/src/rules/common/no-enum-type-mismatch.ts +0 -52
  184. package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
  185. package/src/rules/common/no-identical-paths.ts +0 -24
  186. package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
  187. package/src/rules/common/no-invalid-schema-examples.ts +0 -27
  188. package/src/rules/common/no-path-trailing-slash.ts +0 -15
  189. package/src/rules/common/operation-2xx-response.ts +0 -24
  190. package/src/rules/common/operation-4xx-response.ts +0 -24
  191. package/src/rules/common/operation-description.ts +0 -13
  192. package/src/rules/common/operation-operationId-unique.ts +0 -21
  193. package/src/rules/common/operation-operationId-url-safe.ts +0 -19
  194. package/src/rules/common/operation-operationId.ts +0 -17
  195. package/src/rules/common/operation-parameters-unique.ts +0 -48
  196. package/src/rules/common/operation-singular-tag.ts +0 -17
  197. package/src/rules/common/operation-summary.ts +0 -13
  198. package/src/rules/common/operation-tag-defined.ts +0 -26
  199. package/src/rules/common/parameter-description.ts +0 -22
  200. package/src/rules/common/path-declaration-must-exist.ts +0 -15
  201. package/src/rules/common/path-excludes-patterns.ts +0 -23
  202. package/src/rules/common/path-http-verbs-order.ts +0 -30
  203. package/src/rules/common/path-not-include-query.ts +0 -17
  204. package/src/rules/common/path-params-defined.ts +0 -65
  205. package/src/rules/common/path-segment-plural.ts +0 -31
  206. package/src/rules/common/paths-kebab-case.ts +0 -19
  207. package/src/rules/common/required-string-property-missing-min-length.ts +0 -44
  208. package/src/rules/common/response-contains-header.ts +0 -35
  209. package/src/rules/common/scalar-property-missing-example.ts +0 -58
  210. package/src/rules/common/security-defined.ts +0 -65
  211. package/src/rules/common/spec.ts +0 -174
  212. package/src/rules/common/tag-description.ts +0 -10
  213. package/src/rules/common/tags-alphabetical.ts +0 -20
  214. package/src/rules/no-unresolved-refs.ts +0 -51
  215. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
  216. package/src/rules/oas2/__tests__/response-contains-header.test.ts +0 -174
  217. package/src/rules/oas2/__tests__/response-contains-property.test.ts +0 -155
  218. package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
  219. package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
  220. package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
  221. package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
  222. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -35
  223. package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
  224. package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
  225. package/src/rules/oas2/index.ts +0 -89
  226. package/src/rules/oas2/remove-unused-components.ts +0 -81
  227. package/src/rules/oas2/request-mime-type.ts +0 -17
  228. package/src/rules/oas2/response-contains-property.ts +0 -36
  229. package/src/rules/oas2/response-mime-type.ts +0 -17
  230. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
  231. package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
  232. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
  233. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
  234. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -473
  235. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
  236. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
  237. package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
  238. package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +0 -145
  239. package/src/rules/oas3/__tests__/response-contains-header.test.ts +0 -389
  240. package/src/rules/oas3/__tests__/response-contains-property.test.ts +0 -403
  241. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
  242. package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
  243. package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
  244. package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
  245. package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
  246. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
  247. package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -505
  248. package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -298
  249. package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
  250. package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +0 -305
  251. package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
  252. package/src/rules/oas3/index.ts +0 -109
  253. package/src/rules/oas3/no-empty-servers.ts +0 -22
  254. package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
  255. package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -49
  256. package/src/rules/oas3/no-server-example.com.ts +0 -14
  257. package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
  258. package/src/rules/oas3/no-server-variables-empty-enum.ts +0 -66
  259. package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
  260. package/src/rules/oas3/no-unused-components.ts +0 -75
  261. package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +0 -36
  262. package/src/rules/oas3/remove-unused-components.ts +0 -95
  263. package/src/rules/oas3/request-mime-type.ts +0 -31
  264. package/src/rules/oas3/response-contains-property.ts +0 -38
  265. package/src/rules/oas3/response-mime-type.ts +0 -31
  266. package/src/rules/oas3/spec-components-invalid-map-name.ts +0 -74
  267. package/src/rules/other/stats.ts +0 -73
  268. package/src/rules/utils.ts +0 -191
  269. package/src/types/index.ts +0 -149
  270. package/src/types/oas2.ts +0 -478
  271. package/src/types/oas3.ts +0 -597
  272. package/src/types/oas3_1.ts +0 -258
  273. package/src/types/redocly-yaml.ts +0 -1010
  274. package/src/typings/common.ts +0 -17
  275. package/src/typings/openapi.ts +0 -298
  276. package/src/typings/swagger.ts +0 -236
  277. package/src/utils.ts +0 -276
  278. package/src/visitors.ts +0 -491
  279. package/src/walk.ts +0 -453
  280. package/tsconfig.json +0 -8
  281. package/tsconfig.tsbuildinfo +0 -1
@@ -1,109 +0,0 @@
1
- import { Oas3RuleSet } from '../../oas-types';
2
- import { OasSpec } from '../common/spec';
3
- import { Operation2xxResponse } from '../common/operation-2xx-response';
4
- import { Operation4xxResponse } from '../common/operation-4xx-response';
5
- import { Assertions } from '../common/assertions';
6
- import { OperationIdUnique } from '../common/operation-operationId-unique';
7
- import { OperationParametersUnique } from '../common/operation-parameters-unique';
8
- import { PathParamsDefined } from '../common/path-params-defined';
9
- import { OperationTagDefined } from '../common/operation-tag-defined';
10
- import { NoExampleValueAndExternalValue } from './no-example-value-and-externalValue';
11
- import { NoEnumTypeMismatch } from '../common/no-enum-type-mismatch';
12
- import { NoPathTrailingSlash } from '../common/no-path-trailing-slash';
13
- import { PathDeclarationMustExist } from '../common/path-declaration-must-exist';
14
- import { OperationIdUrlSafe } from '../common/operation-operationId-url-safe';
15
- import { TagsAlphabetical } from '../common/tags-alphabetical';
16
- import { NoServerExample } from './no-server-example.com';
17
- import { NoServerTrailingSlash } from './no-server-trailing-slash';
18
- import { TagDescription } from '../common/tag-description';
19
- import { InfoContact } from '../common/info-contact';
20
- import { InfoLicense } from '../common/info-license';
21
- import { InfoLicenseUrl } from '../common/info-license-url';
22
- import { OperationDescription } from '../common/operation-description';
23
- import { NoUnusedComponents } from './no-unused-components';
24
- import { PathNotIncludeQuery } from '../common/path-not-include-query';
25
- import { ParameterDescription } from '../common/parameter-description';
26
- import { OperationSingularTag } from '../common/operation-singular-tag';
27
- import { SecurityDefined } from '../common/security-defined';
28
- import { NoUnresolvedRefs } from '../no-unresolved-refs';
29
- import { BooleanParameterPrefixes } from './boolean-parameter-prefixes';
30
- import { PathsKebabCase } from '../common/paths-kebab-case';
31
- import { PathHttpVerbsOrder } from '../common/path-http-verbs-order';
32
- import { NoEmptyServers } from './no-empty-servers';
33
- import { ValidContentExamples } from './no-invalid-media-type-examples';
34
- import { NoIdenticalPaths } from '../common/no-identical-paths';
35
- import { NoUndefinedServerVariable } from './no-undefined-server-variable';
36
- import { OperationOperationId } from '../common/operation-operationId';
37
- import { OperationSummary } from '../common/operation-summary';
38
- import { NoAmbiguousPaths } from '../common/no-ambiguous-paths';
39
- import { NoServerVariablesEmptyEnum } from './no-server-variables-empty-enum';
40
- import { NoHttpVerbsInPaths } from '../common/no-http-verbs-in-paths';
41
- import { RequestMimeType } from './request-mime-type';
42
- import { ResponseMimeType } from './response-mime-type';
43
- import { PathSegmentPlural } from '../common/path-segment-plural';
44
- import { PathExcludesPatterns } from '../common/path-excludes-patterns';
45
- import { NoInvalidSchemaExamples } from '../common/no-invalid-schema-examples';
46
- import { NoInvalidParameterExamples } from '../common/no-invalid-parameter-examples';
47
- import { ResponseContainsHeader } from '../common/response-contains-header';
48
- import { ResponseContainsProperty } from './response-contains-property';
49
- import { ScalarPropertyMissingExample } from '../common/scalar-property-missing-example';
50
- import { SpecComponentsInvalidMapName } from './spec-components-invalid-map-name';
51
- import { Operation4xxProblemDetailsRfc7807 } from './operation-4xx-problem-details-rfc7807';
52
- import { RequiredStringPropertyMissingMunLength } from '../common/required-string-property-missing-min-length';
53
-
54
- export const rules = {
55
- spec: OasSpec,
56
- 'info-contact': InfoContact,
57
- 'info-license': InfoLicense,
58
- 'info-license-url': InfoLicenseUrl,
59
- 'operation-2xx-response': Operation2xxResponse,
60
- 'operation-4xx-response': Operation4xxResponse,
61
- 'operation-4xx-problem-details-rfc7807': Operation4xxProblemDetailsRfc7807,
62
- assertions: Assertions,
63
- 'operation-operationId-unique': OperationIdUnique,
64
- 'operation-parameters-unique': OperationParametersUnique,
65
- 'path-parameters-defined': PathParamsDefined,
66
- 'operation-tag-defined': OperationTagDefined,
67
- 'no-example-value-and-externalValue': NoExampleValueAndExternalValue,
68
- 'no-enum-type-mismatch': NoEnumTypeMismatch,
69
- 'no-path-trailing-slash': NoPathTrailingSlash,
70
- 'no-empty-servers': NoEmptyServers,
71
- 'path-declaration-must-exist': PathDeclarationMustExist,
72
- 'operation-operationId-url-safe': OperationIdUrlSafe,
73
- 'operation-operationId': OperationOperationId,
74
- 'operation-summary': OperationSummary,
75
- 'tags-alphabetical': TagsAlphabetical,
76
- 'no-server-example.com': NoServerExample,
77
- 'no-server-trailing-slash': NoServerTrailingSlash,
78
- 'tag-description': TagDescription,
79
- 'operation-description': OperationDescription,
80
- 'no-unused-components': NoUnusedComponents,
81
- 'path-not-include-query': PathNotIncludeQuery,
82
- 'path-params-defined': PathParamsDefined,
83
- 'parameter-description': ParameterDescription,
84
- 'operation-singular-tag': OperationSingularTag,
85
- 'security-defined': SecurityDefined,
86
- 'no-unresolved-refs': NoUnresolvedRefs,
87
- 'paths-kebab-case': PathsKebabCase,
88
- 'boolean-parameter-prefixes': BooleanParameterPrefixes,
89
- 'path-http-verbs-order': PathHttpVerbsOrder,
90
- 'no-invalid-media-type-examples': ValidContentExamples,
91
- 'no-identical-paths': NoIdenticalPaths,
92
- 'no-ambiguous-paths': NoAmbiguousPaths,
93
- 'no-undefined-server-variable': NoUndefinedServerVariable,
94
- 'no-server-variables-empty-enum': NoServerVariablesEmptyEnum,
95
- 'no-http-verbs-in-paths': NoHttpVerbsInPaths,
96
- 'path-excludes-patterns': PathExcludesPatterns,
97
- 'request-mime-type': RequestMimeType,
98
- 'response-mime-type': ResponseMimeType,
99
- 'path-segment-plural': PathSegmentPlural,
100
- 'no-invalid-schema-examples': NoInvalidSchemaExamples,
101
- 'no-invalid-parameter-examples': NoInvalidParameterExamples,
102
- 'response-contains-header': ResponseContainsHeader,
103
- 'response-contains-property': ResponseContainsProperty,
104
- 'scalar-property-missing-example': ScalarPropertyMissingExample,
105
- 'spec-components-invalid-map-name': SpecComponentsInvalidMapName,
106
- 'required-string-property-missing-min-length': RequiredStringPropertyMissingMunLength,
107
- } as Oas3RuleSet;
108
-
109
- export const preprocessors = {};
@@ -1,22 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
-
3
- export const NoEmptyServers: Oas3Rule = () => {
4
- return {
5
- Root(root, { report, location }) {
6
- if (!root.hasOwnProperty('servers')) {
7
- report({
8
- message: 'Servers must be present.',
9
- location: location.child(['openapi']).key(),
10
- });
11
- return;
12
- }
13
-
14
- if (!Array.isArray(root.servers) || root.servers.length === 0) {
15
- report({
16
- message: 'Servers must be a non-empty array.',
17
- location: location.child(['servers']).key(),
18
- });
19
- }
20
- },
21
- };
22
- };
@@ -1,14 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
-
3
- export const NoExampleValueAndExternalValue: Oas3Rule = () => {
4
- return {
5
- Example(example, { report, location }) {
6
- if (example.value && example.externalValue) {
7
- report({
8
- message: 'Example object can have either `value` or `externalValue` fields.',
9
- location: location.child(['value']).key(),
10
- });
11
- }
12
- },
13
- };
14
- };
@@ -1,49 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
- import { Location, isRef } from '../../ref-utils';
3
- import { Oas3Example } from '../../typings/openapi';
4
- import { getAdditionalPropertiesOption, validateExample } from '../utils';
5
- import { UserContext } from '../../walk';
6
-
7
- export const ValidContentExamples: Oas3Rule = (opts) => {
8
- const allowAdditionalProperties = getAdditionalPropertiesOption(opts) ?? false;
9
-
10
- return {
11
- MediaType: {
12
- leave(mediaType, ctx: UserContext) {
13
- const { location, resolve } = ctx;
14
- if (!mediaType.schema) return;
15
- if (mediaType.example) {
16
- resolveAndValidateExample(mediaType.example, location.child('example'));
17
- } else if (mediaType.examples) {
18
- for (const exampleName of Object.keys(mediaType.examples)) {
19
- resolveAndValidateExample(
20
- mediaType.examples[exampleName],
21
- location.child(['examples', exampleName, 'value']),
22
- true
23
- );
24
- }
25
- }
26
-
27
- function resolveAndValidateExample(
28
- example: Oas3Example | any,
29
- location: Location,
30
- isMultiple?: boolean
31
- ) {
32
- if (isRef(example)) {
33
- const resolved = resolve<Oas3Example>(example);
34
- if (!resolved.location) return;
35
- location = isMultiple ? resolved.location.child('value') : resolved.location;
36
- example = resolved.node;
37
- }
38
- validateExample(
39
- isMultiple ? example.value : example,
40
- mediaType.schema!,
41
- location,
42
- ctx,
43
- allowAdditionalProperties
44
- );
45
- }
46
- },
47
- },
48
- };
49
- };
@@ -1,14 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
-
3
- export const NoServerExample: Oas3Rule = () => {
4
- return {
5
- Server(server, { report, location }) {
6
- if (['example.com', 'localhost'].indexOf(server.url) !== -1) {
7
- report({
8
- message: 'Server `url` should not point at example.com.',
9
- location: location.child(['url']),
10
- });
11
- }
12
- },
13
- };
14
- };
@@ -1,15 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
-
3
- export const NoServerTrailingSlash: Oas3Rule = () => {
4
- return {
5
- Server(server, { report, location }) {
6
- if (!server.url) return;
7
- if (server.url.endsWith('/') && server.url !== '/') {
8
- report({
9
- message: 'Server `url` should not have a trailing slash.',
10
- location: location.child(['url']),
11
- });
12
- }
13
- },
14
- };
15
- };
@@ -1,66 +0,0 @@
1
- import { Oas3Server } from 'core/src/typings/openapi';
2
- import { Oas3Rule } from '../../visitors';
3
-
4
- enum enumError {
5
- empty = 'empty',
6
- invalidDefaultValue = 'invalidDefaultValue',
7
- }
8
-
9
- export const NoServerVariablesEmptyEnum: Oas3Rule = () => {
10
- return {
11
- Root(root, { report, location }) {
12
- if (!root.servers || root.servers.length === 0) return;
13
-
14
- const invalidVariables: enumError[] = [];
15
-
16
- if (Array.isArray(root.servers)) {
17
- for (const server of root.servers) {
18
- const enumErrors = checkEnumVariables(server);
19
- if (!enumErrors) continue;
20
- invalidVariables.push(...enumErrors);
21
- }
22
- } else {
23
- const enumErrors = checkEnumVariables(root.servers);
24
- if (!enumErrors) return;
25
- invalidVariables.push(...enumErrors);
26
- }
27
-
28
- for (const invalidVariable of invalidVariables) {
29
- if (invalidVariable === enumError.empty) {
30
- report({
31
- message: 'Server variable with `enum` must be a non-empty array.',
32
- location: location.child(['servers']).key(),
33
- });
34
- }
35
- if (invalidVariable === enumError.invalidDefaultValue) {
36
- report({
37
- message:
38
- 'Server variable define `enum` and `default`. `enum` must include default value',
39
- location: location.child(['servers']).key(),
40
- });
41
- }
42
- }
43
- },
44
- };
45
- };
46
-
47
- function checkEnumVariables(server: Oas3Server): enumError[] | undefined {
48
- if (server.variables && Object.keys(server.variables).length === 0) return;
49
-
50
- const errors: enumError[] = [];
51
- for (const variable in server.variables) {
52
- const serverVariable = server.variables[variable];
53
- if (!serverVariable.enum) continue;
54
-
55
- if (Array.isArray(serverVariable.enum) && serverVariable.enum?.length === 0)
56
- errors.push(enumError.empty);
57
-
58
- if (!serverVariable.default) continue;
59
-
60
- const defaultValue = server.variables[variable].default;
61
- if (serverVariable.enum && !serverVariable.enum.includes(defaultValue))
62
- errors.push(enumError.invalidDefaultValue);
63
- }
64
- if (errors.length) return errors;
65
- return;
66
- }
@@ -1,30 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
-
3
- export const NoUndefinedServerVariable: Oas3Rule = () => {
4
- return {
5
- Server(server, { report, location }) {
6
- if (!server.url) return;
7
- const urlVariables = server.url.match(/{[^}]+}/g)?.map((e) => e.slice(1, e.length - 1)) || [];
8
- const definedVariables = (server?.variables && Object.keys(server.variables)) || [];
9
-
10
- for (const serverVar of urlVariables) {
11
- if (!definedVariables.includes(serverVar)) {
12
- report({
13
- message: `The \`${serverVar}\` variable is not defined in the \`variables\` objects.`,
14
- location: location.child(['url']),
15
- });
16
- }
17
- }
18
-
19
- for (const definedServerVar of definedVariables) {
20
- if (!urlVariables.includes(definedServerVar)) {
21
- report({
22
- message: `The \`${definedServerVar}\` variable is not used in the server's \`url\` field.`,
23
- location: location.child(['variables', definedServerVar]).key(),
24
- from: location.child('url'),
25
- });
26
- }
27
- }
28
- },
29
- };
30
- };
@@ -1,75 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
- import { Location } from '../../ref-utils';
3
-
4
- export const NoUnusedComponents: Oas3Rule = () => {
5
- const components = new Map<string, { used: boolean; location: Location; name: string }>();
6
-
7
- function registerComponent(location: Location, name: string): void {
8
- components.set(location.absolutePointer, {
9
- used: components.get(location.absolutePointer)?.used || false,
10
- location,
11
- name,
12
- });
13
- }
14
-
15
- return {
16
- ref(ref, { type, resolve, key, location }) {
17
- if (
18
- ['Schema', 'Header', 'Parameter', 'Response', 'Example', 'RequestBody'].includes(type.name)
19
- ) {
20
- const resolvedRef = resolve(ref);
21
- if (!resolvedRef.location) return;
22
- components.set(resolvedRef.location.absolutePointer, {
23
- used: true,
24
- name: key.toString(),
25
- location,
26
- });
27
- }
28
- },
29
- Root: {
30
- leave(_, { report }) {
31
- components.forEach((usageInfo) => {
32
- if (!usageInfo.used) {
33
- report({
34
- message: `Component: "${usageInfo.name}" is never used.`,
35
- location: usageInfo.location.key(),
36
- });
37
- }
38
- });
39
- },
40
- },
41
- NamedSchemas: {
42
- Schema(schema, { location, key }) {
43
- if (!schema.allOf) {
44
- // FIXME: find a better way to detect possible discriminator
45
- registerComponent(location, key.toString());
46
- }
47
- },
48
- },
49
- NamedParameters: {
50
- Parameter(_parameter, { location, key }) {
51
- registerComponent(location, key.toString());
52
- },
53
- },
54
- NamedResponses: {
55
- Response(_response, { location, key }) {
56
- registerComponent(location, key.toString());
57
- },
58
- },
59
- NamedExamples: {
60
- Example(_example, { location, key }) {
61
- registerComponent(location, key.toString());
62
- },
63
- },
64
- NamedRequestBodies: {
65
- RequestBody(_requestBody, { location, key }) {
66
- registerComponent(location, key.toString());
67
- },
68
- },
69
- NamedHeaders: {
70
- Header(_header, { location, key }) {
71
- registerComponent(location, key.toString());
72
- },
73
- },
74
- };
75
- };
@@ -1,36 +0,0 @@
1
- import { Oas3MediaType, Oas3Response, Oas3Schema } from 'core/src/typings/openapi';
2
- import { Oas3Rule } from '../../visitors';
3
- import { UserContext } from '../../walk';
4
- import { validateDefinedAndNonEmpty } from '../utils';
5
-
6
- /**
7
- * Validation according rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
8
- */
9
- export const Operation4xxProblemDetailsRfc7807: Oas3Rule = () => {
10
- return {
11
- Response: {
12
- skip(_response: Oas3Response, key: string | number) {
13
- return !/4[Xx0-9]{2}/.test(`${key}`);
14
- },
15
- enter(response: Oas3Response, { report, location }: UserContext) {
16
- if (!response.content || !response.content['application/problem+json'])
17
- report({
18
- message: 'Response `4xx` must have content-type `application/problem+json`.',
19
- location: location.key(),
20
- });
21
- },
22
- MediaType: {
23
- skip(_response: Oas3MediaType, key: string | number) {
24
- return key !== 'application/problem+json';
25
- },
26
- enter(media: Oas3MediaType, ctx: UserContext) {
27
- validateDefinedAndNonEmpty('schema', media, ctx);
28
- },
29
- SchemaProperties(schema: Oas3Schema, ctx: UserContext) {
30
- validateDefinedAndNonEmpty('type', schema, ctx);
31
- validateDefinedAndNonEmpty('title', schema, ctx);
32
- },
33
- },
34
- },
35
- };
36
- };
@@ -1,95 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
- import { Location } from '../../ref-utils';
3
- import { Oas3Components } from '../../typings/openapi';
4
- import { isEmptyObject } from '../../utils';
5
-
6
- export const RemoveUnusedComponents: Oas3Rule = () => {
7
- const components = new Map<
8
- string,
9
- { used: boolean; componentType?: keyof Oas3Components; name: string }
10
- >();
11
-
12
- function registerComponent(
13
- location: Location,
14
- componentType: keyof Oas3Components,
15
- name: string
16
- ): void {
17
- components.set(location.absolutePointer, {
18
- used: components.get(location.absolutePointer)?.used || false,
19
- componentType,
20
- name,
21
- });
22
- }
23
-
24
- return {
25
- ref: {
26
- leave(ref, { type, resolve, key }) {
27
- if (
28
- ['Schema', 'Header', 'Parameter', 'Response', 'Example', 'RequestBody'].includes(
29
- type.name
30
- )
31
- ) {
32
- const resolvedRef = resolve(ref);
33
- if (!resolvedRef.location) return;
34
- components.set(resolvedRef.location.absolutePointer, {
35
- used: true,
36
- name: key.toString(),
37
- });
38
- }
39
- },
40
- },
41
- Root: {
42
- leave(root, ctx) {
43
- const data = ctx.getVisitorData() as { removedCount: number };
44
- data.removedCount = 0;
45
-
46
- components.forEach((usageInfo) => {
47
- const { used, componentType, name } = usageInfo;
48
- if (!used && componentType && root.components) {
49
- const componentChild = root.components[componentType];
50
- delete componentChild![name];
51
- data.removedCount++;
52
- if (isEmptyObject(componentChild)) {
53
- delete root.components[componentType];
54
- }
55
- }
56
- });
57
- if (isEmptyObject(root.components)) {
58
- delete root.components;
59
- }
60
- },
61
- },
62
- NamedSchemas: {
63
- Schema(schema, { location, key }) {
64
- if (!schema.allOf) {
65
- registerComponent(location, 'schemas', key.toString());
66
- }
67
- },
68
- },
69
- NamedParameters: {
70
- Parameter(_parameter, { location, key }) {
71
- registerComponent(location, 'parameters', key.toString());
72
- },
73
- },
74
- NamedResponses: {
75
- Response(_response, { location, key }) {
76
- registerComponent(location, 'responses', key.toString());
77
- },
78
- },
79
- NamedExamples: {
80
- Example(_example, { location, key }) {
81
- registerComponent(location, 'examples', key.toString());
82
- },
83
- },
84
- NamedRequestBodies: {
85
- RequestBody(_requestBody, { location, key }) {
86
- registerComponent(location, 'requestBodies', key.toString());
87
- },
88
- },
89
- NamedHeaders: {
90
- Header(_header, { location, key }) {
91
- registerComponent(location, 'headers', key.toString());
92
- },
93
- },
94
- };
95
- };
@@ -1,31 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { Oas3RequestBody, Oas3Response } from '../../typings/openapi';
4
- import { validateMimeTypeOAS3 } from '../../utils';
5
-
6
- export const RequestMimeType: Oas3Rule = ({ allowedValues }) => {
7
- return {
8
- Paths: {
9
- RequestBody: {
10
- leave(requestBody: Oas3RequestBody, ctx: UserContext) {
11
- validateMimeTypeOAS3({ type: 'consumes', value: requestBody }, ctx, allowedValues);
12
- },
13
- },
14
- Callback: {
15
- RequestBody() {},
16
- Response: {
17
- leave(response: Oas3Response, ctx: UserContext) {
18
- validateMimeTypeOAS3({ type: 'consumes', value: response }, ctx, allowedValues);
19
- },
20
- },
21
- },
22
- },
23
- WebhooksMap: {
24
- Response: {
25
- leave(response: Oas3Response, ctx: UserContext) {
26
- validateMimeTypeOAS3({ type: 'consumes', value: response }, ctx, allowedValues);
27
- },
28
- },
29
- },
30
- };
31
- };
@@ -1,38 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { getMatchingStatusCodeRange } from '../../utils';
4
-
5
- export const ResponseContainsProperty: Oas3Rule = (options) => {
6
- const names: Record<string, string[]> = options.names || {};
7
- let key: string | number;
8
- return {
9
- Operation: {
10
- Response: {
11
- skip: (_response, key) => {
12
- return `${key}` === '204';
13
- },
14
- enter: (_response, ctx: UserContext) => {
15
- key = ctx.key;
16
- },
17
- MediaType: {
18
- Schema(schema, { report, location }) {
19
- if (schema.type !== 'object') return;
20
- const expectedProperties =
21
- names[key] ||
22
- names[getMatchingStatusCodeRange(key)] ||
23
- names[getMatchingStatusCodeRange(key).toLowerCase()] ||
24
- [];
25
- for (const expectedProperty of expectedProperties) {
26
- if (!schema.properties?.[expectedProperty]) {
27
- report({
28
- message: `Response object must contain a top-level "${expectedProperty}" property.`,
29
- location: location.child('properties').key(),
30
- });
31
- }
32
- }
33
- },
34
- },
35
- },
36
- },
37
- };
38
- };
@@ -1,31 +0,0 @@
1
- import { Oas3Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { Oas3RequestBody, Oas3Response } from '../../typings/openapi';
4
- import { validateMimeTypeOAS3 } from '../../utils';
5
-
6
- export const ResponseMimeType: Oas3Rule = ({ allowedValues }) => {
7
- return {
8
- Paths: {
9
- Response: {
10
- leave(response: Oas3Response, ctx: UserContext) {
11
- validateMimeTypeOAS3({ type: 'produces', value: response }, ctx, allowedValues);
12
- },
13
- },
14
- Callback: {
15
- Response() {},
16
- RequestBody: {
17
- leave(requestBody: Oas3RequestBody, ctx: UserContext) {
18
- validateMimeTypeOAS3({ type: 'produces', value: requestBody }, ctx, allowedValues);
19
- },
20
- },
21
- },
22
- },
23
- WebhooksMap: {
24
- RequestBody: {
25
- leave(requestBody: Oas3RequestBody, ctx: UserContext) {
26
- validateMimeTypeOAS3({ type: 'produces', value: requestBody }, ctx, allowedValues);
27
- },
28
- },
29
- },
30
- };
31
- };