@redocly/openapi-core 1.0.0-beta.98 → 1.0.0-rc.1

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 (380) hide show
  1. package/README.md +6 -6
  2. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +0 -1
  3. package/lib/benchmark/benches/recommended-oas3.bench.js +1 -1
  4. package/lib/benchmark/benches/resolve-with-no-external.bench.js +1 -1
  5. package/lib/benchmark/utils.d.ts +2 -2
  6. package/lib/benchmark/utils.js +2 -2
  7. package/lib/bundle.d.ts +12 -15
  8. package/lib/bundle.js +38 -15
  9. package/lib/config/all.d.ts +2 -2
  10. package/lib/config/all.js +17 -6
  11. package/lib/config/builtIn.d.ts +2 -2
  12. package/lib/config/builtIn.js +2 -2
  13. package/lib/config/config-resolvers.d.ts +5 -5
  14. package/lib/config/config-resolvers.js +121 -66
  15. package/lib/config/config.d.ts +12 -18
  16. package/lib/config/config.js +42 -26
  17. package/lib/config/load.d.ts +16 -3
  18. package/lib/config/load.js +36 -14
  19. package/lib/config/minimal.d.ts +2 -2
  20. package/lib/config/minimal.js +10 -6
  21. package/lib/config/recommended.d.ts +2 -2
  22. package/lib/config/recommended.js +10 -6
  23. package/lib/config/rules.d.ts +7 -4
  24. package/lib/config/rules.js +5 -4
  25. package/lib/config/types.d.ts +72 -23
  26. package/lib/config/types.js +13 -0
  27. package/lib/config/utils.d.ts +6 -5
  28. package/lib/config/utils.js +110 -32
  29. package/lib/decorators/common/filters/filter-helper.d.ts +3 -0
  30. package/lib/decorators/common/filters/filter-helper.js +67 -0
  31. package/lib/decorators/common/filters/filter-in.d.ts +2 -0
  32. package/lib/decorators/common/filters/filter-in.js +17 -0
  33. package/lib/decorators/common/filters/filter-out.d.ts +2 -0
  34. package/lib/decorators/common/filters/filter-out.js +17 -0
  35. package/lib/decorators/common/info-override.d.ts +2 -0
  36. package/lib/decorators/common/info-override.js +28 -0
  37. package/lib/decorators/common/media-type-examples-override.d.ts +2 -0
  38. package/lib/decorators/common/media-type-examples-override.js +53 -0
  39. package/lib/decorators/common/registry-dependencies.js +2 -2
  40. package/lib/decorators/common/remove-x-internal.js +2 -2
  41. package/lib/decorators/oas2/index.d.ts +3 -0
  42. package/lib/decorators/oas2/index.js +7 -1
  43. package/lib/decorators/oas3/index.d.ts +4 -0
  44. package/lib/decorators/oas3/index.js +9 -1
  45. package/lib/env.d.ts +3 -0
  46. package/lib/env.js +8 -0
  47. package/lib/format/codeframes.js +16 -10
  48. package/lib/format/format.d.ts +1 -1
  49. package/lib/format/format.js +64 -32
  50. package/lib/index.d.ts +6 -6
  51. package/lib/index.js +7 -2
  52. package/lib/js-yaml/index.js +2 -6
  53. package/lib/lint.d.ts +4 -2
  54. package/lib/lint.js +36 -11
  55. package/lib/logger.d.ts +10 -0
  56. package/lib/logger.js +31 -0
  57. package/lib/output.d.ts +3 -0
  58. package/lib/output.js +9 -0
  59. package/lib/redocly/index.js +10 -9
  60. package/lib/redocly/registry-api-types.d.ts +28 -28
  61. package/lib/redocly/registry-api.d.ts +3 -3
  62. package/lib/redocly/registry-api.js +10 -2
  63. package/lib/ref-utils.d.ts +1 -0
  64. package/lib/ref-utils.js +8 -2
  65. package/lib/resolve.d.ts +1 -1
  66. package/lib/resolve.js +33 -3
  67. package/lib/rules/ajv.d.ts +2 -2
  68. package/lib/rules/ajv.js +12 -12
  69. package/lib/rules/common/assertions/asserts.d.ts +29 -4
  70. package/lib/rules/common/assertions/asserts.js +227 -97
  71. package/lib/rules/common/assertions/index.d.ts +27 -2
  72. package/lib/rules/common/assertions/index.js +9 -37
  73. package/lib/rules/common/assertions/utils.d.ts +16 -8
  74. package/lib/rules/common/assertions/utils.js +160 -76
  75. package/lib/rules/common/info-license-url.d.ts +1 -1
  76. package/lib/rules/common/info-license-url.js +5 -10
  77. package/lib/rules/common/info-license.d.ts +2 -0
  78. package/lib/rules/common/info-license.js +17 -0
  79. package/lib/rules/common/no-ambiguous-paths.js +1 -1
  80. package/lib/rules/common/no-enum-type-mismatch.js +1 -3
  81. package/lib/rules/common/no-identical-paths.js +4 -4
  82. package/lib/rules/common/no-invalid-parameter-examples.js +3 -3
  83. package/lib/rules/common/no-invalid-schema-examples.js +3 -3
  84. package/lib/rules/common/operation-2xx-response.js +15 -9
  85. package/lib/rules/common/operation-4xx-response.js +15 -9
  86. package/lib/rules/common/operation-operationId.js +2 -2
  87. package/lib/rules/common/operation-tag-defined.js +1 -1
  88. package/lib/rules/common/path-not-include-query.js +2 -2
  89. package/lib/rules/common/path-params-defined.js +7 -2
  90. package/lib/rules/common/paths-kebab-case.js +4 -1
  91. package/lib/rules/common/required-string-property-missing-min-length.d.ts +2 -0
  92. package/lib/rules/common/required-string-property-missing-min-length.js +37 -0
  93. package/lib/rules/common/response-contains-header.d.ts +2 -0
  94. package/lib/rules/common/response-contains-header.js +29 -0
  95. package/lib/rules/common/scalar-property-missing-example.d.ts +2 -0
  96. package/lib/rules/common/scalar-property-missing-example.js +42 -0
  97. package/lib/rules/common/security-defined.d.ts +2 -0
  98. package/lib/rules/common/{operation-security-defined.js → security-defined.js} +25 -6
  99. package/lib/rules/common/spec-strict-refs.d.ts +2 -0
  100. package/lib/rules/common/spec-strict-refs.js +30 -0
  101. package/lib/rules/common/spec.js +41 -18
  102. package/lib/rules/common/tags-alphabetical.js +1 -1
  103. package/lib/rules/oas2/index.d.ts +6 -2
  104. package/lib/rules/oas2/index.js +16 -8
  105. package/lib/rules/oas2/remove-unused-components.js +6 -6
  106. package/lib/rules/oas2/request-mime-type.d.ts +1 -1
  107. package/lib/rules/oas2/request-mime-type.js +1 -1
  108. package/lib/rules/oas2/response-contains-property.d.ts +2 -0
  109. package/lib/rules/oas2/response-contains-property.js +38 -0
  110. package/lib/rules/oas2/response-mime-type.d.ts +1 -1
  111. package/lib/rules/oas2/response-mime-type.js +1 -1
  112. package/lib/rules/oas3/component-name-unique.d.ts +2 -0
  113. package/lib/rules/oas3/component-name-unique.js +124 -0
  114. package/lib/rules/oas3/index.js +24 -10
  115. package/lib/rules/oas3/no-empty-servers.js +2 -2
  116. package/lib/rules/oas3/no-invalid-media-type-examples.js +2 -2
  117. package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +2 -0
  118. package/lib/rules/oas3/{no-servers-empty-enum.js → no-server-variables-empty-enum.js} +5 -5
  119. package/lib/rules/oas3/no-unused-components.js +2 -2
  120. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +5 -0
  121. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +36 -0
  122. package/lib/rules/oas3/remove-unused-components.js +6 -6
  123. package/lib/rules/oas3/request-mime-type.d.ts +1 -1
  124. package/lib/rules/oas3/request-mime-type.js +1 -1
  125. package/lib/rules/oas3/response-contains-property.d.ts +2 -0
  126. package/lib/rules/oas3/response-contains-property.js +40 -0
  127. package/lib/rules/oas3/response-mime-type.d.ts +1 -1
  128. package/lib/rules/oas3/response-mime-type.js +1 -1
  129. package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +2 -0
  130. package/lib/rules/oas3/spec-components-invalid-map-name.js +62 -0
  131. package/lib/rules/other/stats.d.ts +2 -2
  132. package/lib/rules/other/stats.js +45 -16
  133. package/lib/rules/utils.d.ts +5 -2
  134. package/lib/rules/utils.js +54 -6
  135. package/lib/types/config-external-schemas.d.ts +2193 -0
  136. package/lib/types/config-external-schemas.js +805 -0
  137. package/lib/types/index.d.ts +3 -2
  138. package/lib/types/index.js +9 -1
  139. package/lib/types/oas2.js +91 -15
  140. package/lib/types/oas3.js +139 -49
  141. package/lib/types/oas3_1.js +32 -26
  142. package/lib/types/redocly-yaml.js +414 -58
  143. package/lib/typings/openapi.d.ts +3 -2
  144. package/lib/utils.d.ts +15 -3
  145. package/lib/utils.js +73 -7
  146. package/lib/visitors.d.ts +20 -16
  147. package/lib/visitors.js +28 -3
  148. package/lib/walk.d.ts +11 -19
  149. package/lib/walk.js +74 -53
  150. package/package.json +5 -6
  151. package/__tests__/__snapshots__/bundle.test.ts.snap +0 -229
  152. package/__tests__/bundle.test.ts +0 -132
  153. package/__tests__/codeframes.test.ts +0 -531
  154. package/__tests__/fixtures/extension.js +0 -24
  155. package/__tests__/fixtures/refs/definitions.yaml +0 -3
  156. package/__tests__/fixtures/refs/examples.yaml +0 -8
  157. package/__tests__/fixtures/refs/external-request-body.yaml +0 -13
  158. package/__tests__/fixtures/refs/externalref.yaml +0 -35
  159. package/__tests__/fixtures/refs/hosted.yaml +0 -35
  160. package/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
  161. package/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
  162. package/__tests__/fixtures/refs/param-b.yaml +0 -1
  163. package/__tests__/fixtures/refs/param-c.yaml +0 -1
  164. package/__tests__/fixtures/refs/rename.yaml +0 -1
  165. package/__tests__/fixtures/refs/requestBody.yaml +0 -9
  166. package/__tests__/fixtures/refs/schema-a.yaml +0 -1
  167. package/__tests__/fixtures/refs/simple.yaml +0 -1
  168. package/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
  169. package/__tests__/fixtures/resolve/External.yaml +0 -10
  170. package/__tests__/fixtures/resolve/External2.yaml +0 -4
  171. package/__tests__/fixtures/resolve/description.md +0 -3
  172. package/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
  173. package/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
  174. package/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
  175. package/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
  176. package/__tests__/fixtures/resolve/openapi.yaml +0 -28
  177. package/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
  178. package/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
  179. package/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
  180. package/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
  181. package/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
  182. package/__tests__/lint.test.ts +0 -17
  183. package/__tests__/login.test.ts +0 -17
  184. package/__tests__/normalizeVisitors.test.ts +0 -151
  185. package/__tests__/ref-utils.test.ts +0 -120
  186. package/__tests__/resolve-http.test.ts +0 -77
  187. package/__tests__/resolve.test.ts +0 -405
  188. package/__tests__/utils.ts +0 -86
  189. package/__tests__/walk.test.ts +0 -1485
  190. package/lib/rules/common/info-description.d.ts +0 -2
  191. package/lib/rules/common/info-description.js +0 -12
  192. package/lib/rules/common/license-url.d.ts +0 -2
  193. package/lib/rules/common/license-url.js +0 -12
  194. package/lib/rules/common/operation-security-defined.d.ts +0 -2
  195. package/lib/rules/oas3/no-servers-empty-enum.d.ts +0 -2
  196. package/src/__tests__/js-yaml.test.ts +0 -71
  197. package/src/__tests__/lint.test.ts +0 -182
  198. package/src/__tests__/utils.test.ts +0 -74
  199. package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
  200. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
  201. package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
  202. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -36
  203. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
  204. package/src/benchmark/benches/rebilly.yaml +0 -32267
  205. package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
  206. package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
  207. package/src/benchmark/benchmark.js +0 -307
  208. package/src/benchmark/colors.js +0 -29
  209. package/src/benchmark/fork.js +0 -83
  210. package/src/benchmark/utils.ts +0 -36
  211. package/src/bundle.ts +0 -371
  212. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -157
  213. package/src/config/__tests__/config-resolvers.test.ts +0 -429
  214. package/src/config/__tests__/config.test.ts +0 -244
  215. package/src/config/__tests__/fixtures/plugin-config.yaml +0 -3
  216. package/src/config/__tests__/fixtures/plugin.js +0 -56
  217. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -12
  218. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -67
  219. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -8
  220. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -19
  221. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -10
  222. package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -66
  223. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -4
  224. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -5
  225. package/src/config/__tests__/load.test.ts +0 -83
  226. package/src/config/__tests__/resolve-plugins.test.ts +0 -27
  227. package/src/config/all.ts +0 -65
  228. package/src/config/builtIn.ts +0 -37
  229. package/src/config/config-resolvers.ts +0 -359
  230. package/src/config/config.ts +0 -312
  231. package/src/config/index.ts +0 -7
  232. package/src/config/load.ts +0 -84
  233. package/src/config/minimal.ts +0 -58
  234. package/src/config/recommended.ts +0 -58
  235. package/src/config/rules.ts +0 -46
  236. package/src/config/types.ts +0 -168
  237. package/src/config/utils.ts +0 -208
  238. package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
  239. package/src/decorators/common/info-description-override.ts +0 -24
  240. package/src/decorators/common/operation-description-override.ts +0 -30
  241. package/src/decorators/common/registry-dependencies.ts +0 -25
  242. package/src/decorators/common/remove-x-internal.ts +0 -59
  243. package/src/decorators/common/tag-description-override.ts +0 -25
  244. package/src/decorators/oas2/index.ts +0 -14
  245. package/src/decorators/oas3/index.ts +0 -14
  246. package/src/format/codeframes.ts +0 -210
  247. package/src/format/format.ts +0 -339
  248. package/src/index.ts +0 -68
  249. package/src/js-yaml/index.ts +0 -18
  250. package/src/lint.ts +0 -125
  251. package/src/oas-types.ts +0 -62
  252. package/src/redocly/__tests__/redocly-client.test.ts +0 -140
  253. package/src/redocly/index.ts +0 -182
  254. package/src/redocly/redocly-client-types.ts +0 -10
  255. package/src/redocly/registry-api-types.ts +0 -32
  256. package/src/redocly/registry-api.ts +0 -134
  257. package/src/ref-utils.ts +0 -79
  258. package/src/resolve.ts +0 -378
  259. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
  260. package/src/rules/__tests__/fixtures/ref.yaml +0 -1
  261. package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -168
  262. package/src/rules/ajv.ts +0 -103
  263. package/src/rules/common/__tests__/info-description.test.ts +0 -102
  264. package/src/rules/common/__tests__/info-license.test.ts +0 -62
  265. package/src/rules/common/__tests__/license-url.test.ts +0 -63
  266. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
  267. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -209
  268. package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
  269. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
  270. package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -91
  271. package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -107
  272. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
  273. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
  274. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
  275. package/src/rules/common/__tests__/operation-security-defined.test.ts +0 -69
  276. package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
  277. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
  278. package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
  279. package/src/rules/common/__tests__/path-params-defined.test.ts +0 -133
  280. package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
  281. package/src/rules/common/__tests__/spec.test.ts +0 -62
  282. package/src/rules/common/__tests__/tag-description.test.ts +0 -65
  283. package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
  284. package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -231
  285. package/src/rules/common/assertions/__tests__/index.test.ts +0 -65
  286. package/src/rules/common/assertions/__tests__/utils.test.ts +0 -89
  287. package/src/rules/common/assertions/asserts.ts +0 -137
  288. package/src/rules/common/assertions/index.ts +0 -75
  289. package/src/rules/common/assertions/utils.ts +0 -167
  290. package/src/rules/common/info-contact.ts +0 -15
  291. package/src/rules/common/info-description.ts +0 -10
  292. package/src/rules/common/info-license-url.ts +0 -15
  293. package/src/rules/common/license-url.ts +0 -10
  294. package/src/rules/common/no-ambiguous-paths.ts +0 -50
  295. package/src/rules/common/no-enum-type-mismatch.ts +0 -49
  296. package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
  297. package/src/rules/common/no-identical-paths.ts +0 -24
  298. package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
  299. package/src/rules/common/no-invalid-schema-examples.ts +0 -27
  300. package/src/rules/common/no-path-trailing-slash.ts +0 -15
  301. package/src/rules/common/operation-2xx-response.ts +0 -16
  302. package/src/rules/common/operation-4xx-response.ts +0 -17
  303. package/src/rules/common/operation-description.ts +0 -13
  304. package/src/rules/common/operation-operationId-unique.ts +0 -21
  305. package/src/rules/common/operation-operationId-url-safe.ts +0 -19
  306. package/src/rules/common/operation-operationId.ts +0 -17
  307. package/src/rules/common/operation-parameters-unique.ts +0 -48
  308. package/src/rules/common/operation-security-defined.ts +0 -45
  309. package/src/rules/common/operation-singular-tag.ts +0 -17
  310. package/src/rules/common/operation-summary.ts +0 -13
  311. package/src/rules/common/operation-tag-defined.ts +0 -26
  312. package/src/rules/common/parameter-description.ts +0 -22
  313. package/src/rules/common/path-declaration-must-exist.ts +0 -15
  314. package/src/rules/common/path-excludes-patterns.ts +0 -23
  315. package/src/rules/common/path-http-verbs-order.ts +0 -30
  316. package/src/rules/common/path-not-include-query.ts +0 -17
  317. package/src/rules/common/path-params-defined.ts +0 -58
  318. package/src/rules/common/path-segment-plural.ts +0 -31
  319. package/src/rules/common/paths-kebab-case.ts +0 -16
  320. package/src/rules/common/spec.ts +0 -143
  321. package/src/rules/common/tag-description.ts +0 -10
  322. package/src/rules/common/tags-alphabetical.ts +0 -20
  323. package/src/rules/no-unresolved-refs.ts +0 -51
  324. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
  325. package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
  326. package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
  327. package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
  328. package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
  329. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -31
  330. package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
  331. package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
  332. package/src/rules/oas2/index.ts +0 -83
  333. package/src/rules/oas2/remove-unused-components.ts +0 -76
  334. package/src/rules/oas2/request-mime-type.ts +0 -17
  335. package/src/rules/oas2/response-mime-type.ts +0 -17
  336. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
  337. package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
  338. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
  339. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
  340. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -392
  341. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
  342. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
  343. package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
  344. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
  345. package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
  346. package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
  347. package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
  348. package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
  349. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
  350. package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -499
  351. package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -288
  352. package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
  353. package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
  354. package/src/rules/oas3/index.ts +0 -99
  355. package/src/rules/oas3/no-empty-servers.ts +0 -22
  356. package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
  357. package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -41
  358. package/src/rules/oas3/no-server-example.com.ts +0 -14
  359. package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
  360. package/src/rules/oas3/no-servers-empty-enum.ts +0 -67
  361. package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
  362. package/src/rules/oas3/no-unused-components.ts +0 -75
  363. package/src/rules/oas3/remove-unused-components.ts +0 -84
  364. package/src/rules/oas3/request-mime-type.ts +0 -31
  365. package/src/rules/oas3/response-mime-type.ts +0 -31
  366. package/src/rules/other/stats.ts +0 -44
  367. package/src/rules/utils.ts +0 -123
  368. package/src/types/index.ts +0 -138
  369. package/src/types/oas2.ts +0 -397
  370. package/src/types/oas3.ts +0 -506
  371. package/src/types/oas3_1.ts +0 -251
  372. package/src/types/redocly-yaml.ts +0 -637
  373. package/src/typings/common.ts +0 -9
  374. package/src/typings/openapi.ts +0 -297
  375. package/src/typings/swagger.ts +0 -236
  376. package/src/utils.ts +0 -190
  377. package/src/visitors.ts +0 -448
  378. package/src/walk.ts +0 -416
  379. package/tsconfig.json +0 -8
  380. package/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,2 @@
1
+ import { Oas2Rule, Oas3Rule } from '../../visitors';
2
+ export declare const ComponentNameUnique: Oas3Rule | Oas2Rule;
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentNameUnique = void 0;
4
+ const TYPE_NAME_SCHEMA = 'Schema';
5
+ const TYPE_NAME_PARAMETER = 'Parameter';
6
+ const TYPE_NAME_RESPONSE = 'Response';
7
+ const TYPE_NAME_REQUEST_BODY = 'RequestBody';
8
+ const TYPE_NAME_TO_OPTION_COMPONENT_NAME = {
9
+ [TYPE_NAME_SCHEMA]: 'schemas',
10
+ [TYPE_NAME_PARAMETER]: 'parameters',
11
+ [TYPE_NAME_RESPONSE]: 'responses',
12
+ [TYPE_NAME_REQUEST_BODY]: 'requestBodies',
13
+ };
14
+ const ComponentNameUnique = (options) => {
15
+ const components = new Map();
16
+ const typeNames = [];
17
+ if (options.schemas !== 'off') {
18
+ typeNames.push(TYPE_NAME_SCHEMA);
19
+ }
20
+ if (options.parameters !== 'off') {
21
+ typeNames.push(TYPE_NAME_PARAMETER);
22
+ }
23
+ if (options.responses !== 'off') {
24
+ typeNames.push(TYPE_NAME_RESPONSE);
25
+ }
26
+ if (options.requestBodies !== 'off') {
27
+ typeNames.push(TYPE_NAME_REQUEST_BODY);
28
+ }
29
+ const rule = {
30
+ ref: {
31
+ leave(ref, { type, resolve }) {
32
+ const typeName = type.name;
33
+ if (typeNames.includes(typeName)) {
34
+ const resolvedRef = resolve(ref);
35
+ if (!resolvedRef.location)
36
+ return;
37
+ addComponentFromAbsoluteLocation(typeName, resolvedRef.location.absolutePointer.toString());
38
+ }
39
+ },
40
+ },
41
+ Root: {
42
+ leave(root, ctx) {
43
+ components.forEach((value, key, _) => {
44
+ if (value.size > 1) {
45
+ const component = getComponentFromKey(key);
46
+ const optionComponentName = getOptionComponentNameForTypeName(component.typeName);
47
+ const definitions = Array.from(value)
48
+ .map((v) => `- ${v}`)
49
+ .join('\n');
50
+ const problem = {
51
+ message: `Component '${optionComponentName}/${component.componentName}' is not unique. It is defined at:\n${definitions}`,
52
+ };
53
+ const componentSeverity = optionComponentName ? options[optionComponentName] : null;
54
+ if (componentSeverity) {
55
+ problem.forceSeverity = componentSeverity;
56
+ }
57
+ ctx.report(problem);
58
+ }
59
+ });
60
+ },
61
+ },
62
+ };
63
+ if (options.schemas != 'off') {
64
+ rule.NamedSchemas = {
65
+ Schema(_, { location }) {
66
+ addComponentFromAbsoluteLocation(TYPE_NAME_SCHEMA, location.absolutePointer.toString());
67
+ },
68
+ };
69
+ }
70
+ if (options.responses != 'off') {
71
+ rule.NamedResponses = {
72
+ Response(_, { location }) {
73
+ addComponentFromAbsoluteLocation(TYPE_NAME_RESPONSE, location.absolutePointer.toString());
74
+ },
75
+ };
76
+ }
77
+ if (options.parameters != 'off') {
78
+ rule.NamedParameters = {
79
+ Parameter(_, { location }) {
80
+ addComponentFromAbsoluteLocation(TYPE_NAME_PARAMETER, location.absolutePointer.toString());
81
+ },
82
+ };
83
+ }
84
+ if (options.requestBodies != 'off') {
85
+ rule.NamedRequestBodies = {
86
+ RequestBody(_, { location }) {
87
+ addComponentFromAbsoluteLocation(TYPE_NAME_REQUEST_BODY, location.absolutePointer.toString());
88
+ },
89
+ };
90
+ }
91
+ return rule;
92
+ function getComponentNameFromAbsoluteLocation(absoluteLocation) {
93
+ const componentName = absoluteLocation.split('/').slice(-1)[0];
94
+ if (componentName.endsWith('.yml') ||
95
+ componentName.endsWith('.yaml') ||
96
+ componentName.endsWith('.json')) {
97
+ return componentName.slice(0, componentName.lastIndexOf('.'));
98
+ }
99
+ return componentName;
100
+ }
101
+ function addFoundComponent(typeName, componentName, absoluteLocation) {
102
+ var _a;
103
+ const key = getKeyForComponent(typeName, componentName);
104
+ const locations = (_a = components.get(key)) !== null && _a !== void 0 ? _a : new Set();
105
+ locations.add(absoluteLocation);
106
+ components.set(key, locations);
107
+ }
108
+ function addComponentFromAbsoluteLocation(typeName, absoluteLocation) {
109
+ const componentName = getComponentNameFromAbsoluteLocation(absoluteLocation);
110
+ addFoundComponent(typeName, componentName, absoluteLocation);
111
+ }
112
+ };
113
+ exports.ComponentNameUnique = ComponentNameUnique;
114
+ function getOptionComponentNameForTypeName(typeName) {
115
+ var _a;
116
+ return (_a = TYPE_NAME_TO_OPTION_COMPONENT_NAME[typeName]) !== null && _a !== void 0 ? _a : null;
117
+ }
118
+ function getKeyForComponent(typeName, componentName) {
119
+ return `${typeName}/${componentName}`;
120
+ }
121
+ function getComponentFromKey(key) {
122
+ const [typeName, componentName] = key.split('/');
123
+ return { typeName, componentName };
124
+ }
@@ -17,17 +17,16 @@ const operation_operationId_url_safe_1 = require("../common/operation-operationI
17
17
  const tags_alphabetical_1 = require("../common/tags-alphabetical");
18
18
  const no_server_example_com_1 = require("./no-server-example.com");
19
19
  const no_server_trailing_slash_1 = require("./no-server-trailing-slash");
20
- const info_description_1 = require("../common/info-description");
21
20
  const tag_description_1 = require("../common/tag-description");
22
21
  const info_contact_1 = require("../common/info-contact");
22
+ const info_license_1 = require("../common/info-license");
23
23
  const info_license_url_1 = require("../common/info-license-url");
24
24
  const operation_description_1 = require("../common/operation-description");
25
25
  const no_unused_components_1 = require("./no-unused-components");
26
26
  const path_not_include_query_1 = require("../common/path-not-include-query");
27
27
  const parameter_description_1 = require("../common/parameter-description");
28
28
  const operation_singular_tag_1 = require("../common/operation-singular-tag");
29
- const license_url_1 = require("../common/license-url");
30
- const operation_security_defined_1 = require("../common/operation-security-defined");
29
+ const security_defined_1 = require("../common/security-defined");
31
30
  const no_unresolved_refs_1 = require("../no-unresolved-refs");
32
31
  const boolean_parameter_prefixes_1 = require("./boolean-parameter-prefixes");
33
32
  const paths_kebab_case_1 = require("../common/paths-kebab-case");
@@ -39,7 +38,7 @@ const no_undefined_server_variable_1 = require("./no-undefined-server-variable")
39
38
  const operation_operationId_1 = require("../common/operation-operationId");
40
39
  const operation_summary_1 = require("../common/operation-summary");
41
40
  const no_ambiguous_paths_1 = require("../common/no-ambiguous-paths");
42
- const no_servers_empty_enum_1 = require("./no-servers-empty-enum");
41
+ const no_server_variables_empty_enum_1 = require("./no-server-variables-empty-enum");
43
42
  const no_http_verbs_in_paths_1 = require("../common/no-http-verbs-in-paths");
44
43
  const request_mime_type_1 = require("./request-mime-type");
45
44
  const response_mime_type_1 = require("./response-mime-type");
@@ -47,15 +46,23 @@ const path_segment_plural_1 = require("../common/path-segment-plural");
47
46
  const path_excludes_patterns_1 = require("../common/path-excludes-patterns");
48
47
  const no_invalid_schema_examples_1 = require("../common/no-invalid-schema-examples");
49
48
  const no_invalid_parameter_examples_1 = require("../common/no-invalid-parameter-examples");
49
+ const response_contains_header_1 = require("../common/response-contains-header");
50
+ const response_contains_property_1 = require("./response-contains-property");
51
+ const scalar_property_missing_example_1 = require("../common/scalar-property-missing-example");
52
+ const spec_components_invalid_map_name_1 = require("./spec-components-invalid-map-name");
53
+ const operation_4xx_problem_details_rfc7807_1 = require("./operation-4xx-problem-details-rfc7807");
54
+ const required_string_property_missing_min_length_1 = require("../common/required-string-property-missing-min-length");
55
+ const spec_strict_refs_1 = require("../common/spec-strict-refs");
56
+ const component_name_unique_1 = require("./component-name-unique");
50
57
  exports.rules = {
51
58
  spec: spec_1.OasSpec,
52
- 'info-description': info_description_1.InfoDescription,
53
59
  'info-contact': info_contact_1.InfoContact,
54
- 'info-license': info_license_url_1.InfoLicense,
55
- 'info-license-url': license_url_1.InfoLicenseUrl,
60
+ 'info-license': info_license_1.InfoLicense,
61
+ 'info-license-url': info_license_url_1.InfoLicenseUrl,
56
62
  'operation-2xx-response': operation_2xx_response_1.Operation2xxResponse,
57
63
  'operation-4xx-response': operation_4xx_response_1.Operation4xxResponse,
58
- 'assertions': assertions_1.Assertions,
64
+ 'operation-4xx-problem-details-rfc7807': operation_4xx_problem_details_rfc7807_1.Operation4xxProblemDetailsRfc7807,
65
+ assertions: assertions_1.Assertions,
59
66
  'operation-operationId-unique': operation_operationId_unique_1.OperationIdUnique,
60
67
  'operation-parameters-unique': operation_parameters_unique_1.OperationParametersUnique,
61
68
  'path-parameters-defined': path_params_defined_1.PathParamsDefined,
@@ -78,7 +85,7 @@ exports.rules = {
78
85
  'path-params-defined': path_params_defined_1.PathParamsDefined,
79
86
  'parameter-description': parameter_description_1.ParameterDescription,
80
87
  'operation-singular-tag': operation_singular_tag_1.OperationSingularTag,
81
- 'operation-security-defined': operation_security_defined_1.OperationSecurityDefined,
88
+ 'security-defined': security_defined_1.SecurityDefined,
82
89
  'no-unresolved-refs': no_unresolved_refs_1.NoUnresolvedRefs,
83
90
  'paths-kebab-case': paths_kebab_case_1.PathsKebabCase,
84
91
  'boolean-parameter-prefixes': boolean_parameter_prefixes_1.BooleanParameterPrefixes,
@@ -87,7 +94,7 @@ exports.rules = {
87
94
  'no-identical-paths': no_identical_paths_1.NoIdenticalPaths,
88
95
  'no-ambiguous-paths': no_ambiguous_paths_1.NoAmbiguousPaths,
89
96
  'no-undefined-server-variable': no_undefined_server_variable_1.NoUndefinedServerVariable,
90
- 'no-servers-empty-enum': no_servers_empty_enum_1.NoEmptyEnumServers,
97
+ 'no-server-variables-empty-enum': no_server_variables_empty_enum_1.NoServerVariablesEmptyEnum,
91
98
  'no-http-verbs-in-paths': no_http_verbs_in_paths_1.NoHttpVerbsInPaths,
92
99
  'path-excludes-patterns': path_excludes_patterns_1.PathExcludesPatterns,
93
100
  'request-mime-type': request_mime_type_1.RequestMimeType,
@@ -95,5 +102,12 @@ exports.rules = {
95
102
  'path-segment-plural': path_segment_plural_1.PathSegmentPlural,
96
103
  'no-invalid-schema-examples': no_invalid_schema_examples_1.NoInvalidSchemaExamples,
97
104
  'no-invalid-parameter-examples': no_invalid_parameter_examples_1.NoInvalidParameterExamples,
105
+ 'response-contains-header': response_contains_header_1.ResponseContainsHeader,
106
+ 'response-contains-property': response_contains_property_1.ResponseContainsProperty,
107
+ 'scalar-property-missing-example': scalar_property_missing_example_1.ScalarPropertyMissingExample,
108
+ 'spec-components-invalid-map-name': spec_components_invalid_map_name_1.SpecComponentsInvalidMapName,
109
+ 'required-string-property-missing-min-length': required_string_property_missing_min_length_1.RequiredStringPropertyMissingMinLength,
110
+ 'spec-strict-refs': spec_strict_refs_1.SpecStrictRefs,
111
+ 'component-name-unique': component_name_unique_1.ComponentNameUnique,
98
112
  };
99
113
  exports.preprocessors = {};
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NoEmptyServers = void 0;
4
4
  const NoEmptyServers = () => {
5
5
  return {
6
- DefinitionRoot(root, { report, location }) {
6
+ Root(root, { report, location }) {
7
7
  if (!root.hasOwnProperty('servers')) {
8
8
  report({
9
9
  message: 'Servers must be present.',
10
- location: location.child(['openapi']).key()
10
+ location: location.child(['openapi']).key(),
11
11
  });
12
12
  return;
13
13
  }
@@ -5,7 +5,7 @@ const ref_utils_1 = require("../../ref-utils");
5
5
  const utils_1 = require("../utils");
6
6
  const ValidContentExamples = (opts) => {
7
7
  var _a;
8
- const disallowAdditionalProperties = (_a = opts.disallowAdditionalProperties) !== null && _a !== void 0 ? _a : true;
8
+ const allowAdditionalProperties = (_a = utils_1.getAdditionalPropertiesOption(opts)) !== null && _a !== void 0 ? _a : false;
9
9
  return {
10
10
  MediaType: {
11
11
  leave(mediaType, ctx) {
@@ -28,7 +28,7 @@ const ValidContentExamples = (opts) => {
28
28
  location = isMultiple ? resolved.location.child('value') : resolved.location;
29
29
  example = resolved.node;
30
30
  }
31
- utils_1.validateExample(isMultiple ? example.value : example, mediaType.schema, location, ctx, disallowAdditionalProperties);
31
+ utils_1.validateExample(isMultiple ? example.value : example, mediaType.schema, location, ctx, allowAdditionalProperties);
32
32
  }
33
33
  },
34
34
  },
@@ -0,0 +1,2 @@
1
+ import { Oas3Rule } from '../../visitors';
2
+ export declare const NoServerVariablesEmptyEnum: Oas3Rule;
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NoEmptyEnumServers = void 0;
3
+ exports.NoServerVariablesEmptyEnum = void 0;
4
4
  var enumError;
5
5
  (function (enumError) {
6
6
  enumError["empty"] = "empty";
7
7
  enumError["invalidDefaultValue"] = "invalidDefaultValue";
8
8
  })(enumError || (enumError = {}));
9
- const NoEmptyEnumServers = () => {
9
+ const NoServerVariablesEmptyEnum = () => {
10
10
  return {
11
- DefinitionRoot(root, { report, location }) {
11
+ Root(root, { report, location }) {
12
12
  if (!root.servers || root.servers.length === 0)
13
13
  return;
14
14
  const invalidVariables = [];
@@ -43,13 +43,13 @@ const NoEmptyEnumServers = () => {
43
43
  },
44
44
  };
45
45
  };
46
- exports.NoEmptyEnumServers = NoEmptyEnumServers;
46
+ exports.NoServerVariablesEmptyEnum = NoServerVariablesEmptyEnum;
47
47
  function checkEnumVariables(server) {
48
48
  var _a;
49
49
  if (server.variables && Object.keys(server.variables).length === 0)
50
50
  return;
51
51
  const errors = [];
52
- for (var variable in server.variables) {
52
+ for (const variable in server.variables) {
53
53
  const serverVariable = server.variables[variable];
54
54
  if (!serverVariable.enum)
55
55
  continue;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NoUnusedComponents = void 0;
4
4
  const NoUnusedComponents = () => {
5
- let components = new Map();
5
+ const components = new Map();
6
6
  function registerComponent(location, name) {
7
7
  var _a;
8
8
  components.set(location.absolutePointer, {
@@ -24,7 +24,7 @@ const NoUnusedComponents = () => {
24
24
  });
25
25
  }
26
26
  },
27
- DefinitionRoot: {
27
+ Root: {
28
28
  leave(_, { report }) {
29
29
  components.forEach((usageInfo) => {
30
30
  if (!usageInfo.used) {
@@ -0,0 +1,5 @@
1
+ import type { Oas3Rule } from '../../visitors';
2
+ /**
3
+ * Validation according to rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
4
+ */
5
+ export declare const Operation4xxProblemDetailsRfc7807: Oas3Rule;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Operation4xxProblemDetailsRfc7807 = void 0;
4
+ const utils_1 = require("../utils");
5
+ /**
6
+ * Validation according to rfc7807 - https://datatracker.ietf.org/doc/html/rfc7807
7
+ */
8
+ const Operation4xxProblemDetailsRfc7807 = () => {
9
+ return {
10
+ Response: {
11
+ skip(_, key) {
12
+ return !/4[Xx0-9]{2}/.test(`${key}`);
13
+ },
14
+ enter(response, { report, location }) {
15
+ if (!response.content || !response.content['application/problem+json'])
16
+ report({
17
+ message: 'Response `4xx` must have content-type `application/problem+json`.',
18
+ location: location.key(),
19
+ });
20
+ },
21
+ MediaType: {
22
+ skip(_, key) {
23
+ return key !== 'application/problem+json';
24
+ },
25
+ enter(media, ctx) {
26
+ utils_1.validateDefinedAndNonEmpty('schema', media, ctx);
27
+ },
28
+ SchemaProperties(schema, ctx) {
29
+ utils_1.validateDefinedAndNonEmpty('type', schema, ctx);
30
+ utils_1.validateDefinedAndNonEmpty('title', schema, ctx);
31
+ },
32
+ },
33
+ },
34
+ };
35
+ };
36
+ exports.Operation4xxProblemDetailsRfc7807 = Operation4xxProblemDetailsRfc7807;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RemoveUnusedComponents = void 0;
4
4
  const utils_1 = require("../../utils");
5
5
  const RemoveUnusedComponents = () => {
6
- let components = new Map();
6
+ const components = new Map();
7
7
  function registerComponent(location, componentType, name) {
8
8
  var _a;
9
9
  components.set(location.absolutePointer, {
@@ -24,16 +24,16 @@ const RemoveUnusedComponents = () => {
24
24
  name: key.toString(),
25
25
  });
26
26
  }
27
- }
27
+ },
28
28
  },
29
- DefinitionRoot: {
29
+ Root: {
30
30
  leave(root, ctx) {
31
31
  const data = ctx.getVisitorData();
32
32
  data.removedCount = 0;
33
- components.forEach(usageInfo => {
33
+ components.forEach((usageInfo) => {
34
34
  const { used, componentType, name } = usageInfo;
35
- if (!used && componentType) {
36
- let componentChild = root.components[componentType];
35
+ if (!used && componentType && root.components) {
36
+ const componentChild = root.components[componentType];
37
37
  delete componentChild[name];
38
38
  data.removedCount++;
39
39
  if (utils_1.isEmptyObject(componentChild)) {
@@ -1,2 +1,2 @@
1
- import { Oas3Rule } from '../../visitors';
1
+ import type { Oas3Rule } from '../../visitors';
2
2
  export declare const RequestMimeType: Oas3Rule;
@@ -4,7 +4,7 @@ exports.RequestMimeType = void 0;
4
4
  const utils_1 = require("../../utils");
5
5
  const RequestMimeType = ({ allowedValues }) => {
6
6
  return {
7
- PathMap: {
7
+ Paths: {
8
8
  RequestBody: {
9
9
  leave(requestBody, ctx) {
10
10
  utils_1.validateMimeTypeOAS3({ type: 'consumes', value: requestBody }, ctx, allowedValues);
@@ -0,0 +1,2 @@
1
+ import { Oas3Rule } from '../../visitors';
2
+ export declare const ResponseContainsProperty: Oas3Rule;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseContainsProperty = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const ResponseContainsProperty = (options) => {
6
+ const names = options.names || {};
7
+ let key;
8
+ return {
9
+ Operation: {
10
+ Response: {
11
+ skip: (_response, key) => {
12
+ return `${key}` === '204';
13
+ },
14
+ enter: (_response, ctx) => {
15
+ key = ctx.key;
16
+ },
17
+ MediaType: {
18
+ Schema(schema, { report, location }) {
19
+ var _a;
20
+ if (schema.type !== 'object')
21
+ return;
22
+ const expectedProperties = names[key] ||
23
+ names[utils_1.getMatchingStatusCodeRange(key)] ||
24
+ names[utils_1.getMatchingStatusCodeRange(key).toLowerCase()] ||
25
+ [];
26
+ for (const expectedProperty of expectedProperties) {
27
+ if (!((_a = schema.properties) === null || _a === void 0 ? void 0 : _a[expectedProperty])) {
28
+ report({
29
+ message: `Response object must contain a top-level "${expectedProperty}" property.`,
30
+ location: location.child('properties').key(),
31
+ });
32
+ }
33
+ }
34
+ },
35
+ },
36
+ },
37
+ },
38
+ };
39
+ };
40
+ exports.ResponseContainsProperty = ResponseContainsProperty;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule } from '../../visitors';
1
+ import type { Oas3Rule } from '../../visitors';
2
2
  export declare const ResponseMimeType: Oas3Rule;
@@ -4,7 +4,7 @@ exports.ResponseMimeType = void 0;
4
4
  const utils_1 = require("../../utils");
5
5
  const ResponseMimeType = ({ allowedValues }) => {
6
6
  return {
7
- PathMap: {
7
+ Paths: {
8
8
  Response: {
9
9
  leave(response, ctx) {
10
10
  utils_1.validateMimeTypeOAS3({ type: 'produces', value: response }, ctx, allowedValues);
@@ -0,0 +1,2 @@
1
+ import { Oas3Rule } from '../../visitors';
2
+ export declare const SpecComponentsInvalidMapName: Oas3Rule;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpecComponentsInvalidMapName = void 0;
4
+ const SpecComponentsInvalidMapName = () => {
5
+ const KEYS_REGEX = '^[a-zA-Z0-9\\.\\-_]+$';
6
+ function validateKey(key, report, location, component) {
7
+ if (!new RegExp(KEYS_REGEX).test(key)) {
8
+ report({
9
+ message: `The map key in ${component} "${key}" does not match the regular expression "${KEYS_REGEX}"`,
10
+ location: location.key(),
11
+ });
12
+ }
13
+ }
14
+ return {
15
+ NamedSchemas: {
16
+ Schema(_node, { key, report, location }) {
17
+ validateKey(key, report, location, 'schemas');
18
+ },
19
+ },
20
+ NamedParameters: {
21
+ Parameter(_node, { key, report, location }) {
22
+ validateKey(key, report, location, 'parameters');
23
+ },
24
+ },
25
+ NamedResponses: {
26
+ Response(_node, { key, report, location }) {
27
+ validateKey(key, report, location, 'responses');
28
+ },
29
+ },
30
+ NamedExamples: {
31
+ Example(_node, { key, report, location }) {
32
+ validateKey(key, report, location, 'examples');
33
+ },
34
+ },
35
+ NamedRequestBodies: {
36
+ RequestBody(_node, { key, report, location }) {
37
+ validateKey(key, report, location, 'requestBodies');
38
+ },
39
+ },
40
+ NamedHeaders: {
41
+ Header(_node, { key, report, location }) {
42
+ validateKey(key, report, location, 'headers');
43
+ },
44
+ },
45
+ NamedSecuritySchemes: {
46
+ SecurityScheme(_node, { key, report, location }) {
47
+ validateKey(key, report, location, 'securitySchemes');
48
+ },
49
+ },
50
+ NamedLinks: {
51
+ Link(_node, { key, report, location }) {
52
+ validateKey(key, report, location, 'links');
53
+ },
54
+ },
55
+ NamedCallbacks: {
56
+ Callback(_node, { key, report, location }) {
57
+ validateKey(key, report, location, 'callbacks');
58
+ },
59
+ },
60
+ };
61
+ };
62
+ exports.SpecComponentsInvalidMapName = SpecComponentsInvalidMapName;
@@ -14,7 +14,7 @@ export declare const Stats: (statsAccumulator: StatsAccumulator) => {
14
14
  Link: {
15
15
  leave(link: any): void;
16
16
  };
17
- DefinitionRoot: {
17
+ Root: {
18
18
  leave(): void;
19
19
  };
20
20
  WebhooksMap: {
@@ -22,7 +22,7 @@ export declare const Stats: (statsAccumulator: StatsAccumulator) => {
22
22
  leave(operation: any): void;
23
23
  };
24
24
  };
25
- PathMap: {
25
+ Paths: {
26
26
  PathItem: {
27
27
  leave(): void;
28
28
  Operation: {
@@ -3,11 +3,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Stats = void 0;
4
4
  const Stats = (statsAccumulator) => {
5
5
  return {
6
- ExternalDocs: { leave() { statsAccumulator.externalDocs.total++; } },
7
- ref: { enter(ref) { statsAccumulator.refs.items.add(ref['$ref']); } },
8
- Tag: { leave(tag) { statsAccumulator.tags.items.add(tag.name); } },
9
- Link: { leave(link) { statsAccumulator.links.items.add(link.operationId); } },
10
- DefinitionRoot: {
6
+ ExternalDocs: {
7
+ leave() {
8
+ statsAccumulator.externalDocs.total++;
9
+ },
10
+ },
11
+ ref: {
12
+ enter(ref) {
13
+ statsAccumulator.refs.items.add(ref['$ref']);
14
+ },
15
+ },
16
+ Tag: {
17
+ leave(tag) {
18
+ statsAccumulator.tags.items.add(tag.name);
19
+ },
20
+ },
21
+ Link: {
22
+ leave(link) {
23
+ statsAccumulator.links.items.add(link.operationId);
24
+ },
25
+ },
26
+ Root: {
11
27
  leave() {
12
28
  statsAccumulator.parameters.total = statsAccumulator.parameters.items.size;
13
29
  statsAccumulator.refs.total = statsAccumulator.refs.items.size;
@@ -18,27 +34,40 @@ const Stats = (statsAccumulator) => {
18
34
  WebhooksMap: {
19
35
  Operation: {
20
36
  leave(operation) {
21
- operation.tags.forEach((tag) => { statsAccumulator.tags.items.add(tag); });
22
- }
23
- }
37
+ operation.tags.forEach((tag) => {
38
+ statsAccumulator.tags.items.add(tag);
39
+ });
40
+ },
41
+ },
24
42
  },
25
- PathMap: {
43
+ Paths: {
26
44
  PathItem: {
27
- leave() { statsAccumulator.pathItems.total++; },
45
+ leave() {
46
+ statsAccumulator.pathItems.total++;
47
+ },
28
48
  Operation: {
29
49
  leave(operation) {
30
50
  statsAccumulator.operations.total++;
31
- operation.tags && operation.tags.forEach((tag) => { statsAccumulator.tags.items.add(tag); });
32
- }
51
+ operation.tags &&
52
+ operation.tags.forEach((tag) => {
53
+ statsAccumulator.tags.items.add(tag);
54
+ });
55
+ },
33
56
  },
34
- Parameter: { leave(parameter) {
57
+ Parameter: {
58
+ leave(parameter) {
35
59
  statsAccumulator.parameters.items.add(parameter.name);
36
- } },
60
+ },
61
+ },
37
62
  },
38
63
  },
39
64
  NamedSchemas: {
40
- Schema: { leave() { statsAccumulator.schemas.total++; } }
41
- }
65
+ Schema: {
66
+ leave() {
67
+ statsAccumulator.schemas.total++;
68
+ },
69
+ },
70
+ },
42
71
  };
43
72
  };
44
73
  exports.Stats = Stats;
@@ -1,7 +1,7 @@
1
1
  import { UserContext } from '../walk';
2
2
  import { Location } from '../ref-utils';
3
3
  import { Oas3Schema, Referenced } from '../typings/openapi';
4
- export declare function oasTypeOf(value: unknown): "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | "array" | "null";
4
+ export declare function oasTypeOf(value: unknown): "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | "null" | "integer" | "array";
5
5
  /**
6
6
  * Checks if value matches specified JSON schema type
7
7
  *
@@ -14,4 +14,7 @@ export declare function missingRequiredField(type: string, field: string): strin
14
14
  export declare function fieldNonEmpty(type: string, field: string): string;
15
15
  export declare function validateDefinedAndNonEmpty(fieldName: string, value: any, ctx: UserContext): void;
16
16
  export declare function getSuggest(given: string, variants: string[]): string[];
17
- export declare function validateExample(example: any, schema: Referenced<Oas3Schema>, dataLoc: Location, { resolve, location, report }: UserContext, disallowAdditionalProperties: boolean): void;
17
+ export declare function validateExample(example: any, schema: Referenced<Oas3Schema>, dataLoc: Location, { resolve, location, report }: UserContext, allowAdditionalProperties: boolean): void;
18
+ export declare function getAdditionalPropertiesOption(opts: Record<string, any>): boolean;
19
+ export declare function validateSchemaEnumType(schemaEnum: string[], propertyValue: string, propName: string, refLocation: Location | undefined, { report, location }: UserContext): void;
20
+ export declare function validateResponseCodes(responseCodes: string[], codeRange: string, { report }: UserContext): void;