@redocly/openapi-core 1.18.1 → 1.20.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 (411) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/__tests__/utils.ts +14 -7
  3. package/lib/benchmark/benches/lint-with-many-rules.bench.d.ts +1 -0
  4. package/lib/benchmark/benches/lint-with-many-rules.bench.js +7 -3
  5. package/lib/benchmark/benches/lint-with-nested-rule.bench.d.ts +1 -0
  6. package/lib/benchmark/benches/lint-with-nested-rule.bench.js +7 -3
  7. package/lib/benchmark/benches/lint-with-no-rules.bench.d.ts +1 -0
  8. package/lib/benchmark/benches/lint-with-no-rules.bench.js +7 -3
  9. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.d.ts +1 -0
  10. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +19 -15
  11. package/lib/benchmark/benches/lint-with-top-level-rule.bench.d.ts +1 -0
  12. package/lib/benchmark/benches/lint-with-top-level-rule.bench.js +18 -14
  13. package/lib/benchmark/benches/recommended-oas3.bench.js +2 -2
  14. package/lib/benchmark/benches/resolve-with-no-external.bench.js +2 -2
  15. package/lib/benchmark/utils.d.ts +3 -3
  16. package/lib/benchmark/utils.js +10 -7
  17. package/lib/bundle.d.ts +2 -2
  18. package/lib/bundle.js +127 -120
  19. package/lib/config/all.js +13 -1
  20. package/lib/config/builtIn.js +18 -17
  21. package/lib/config/config-resolvers.d.ts +1 -1
  22. package/lib/config/config-resolvers.js +241 -158
  23. package/lib/config/config.d.ts +4 -3
  24. package/lib/config/config.js +53 -34
  25. package/lib/config/load.d.ts +1 -1
  26. package/lib/config/load.js +105 -117
  27. package/lib/config/minimal.js +13 -0
  28. package/lib/config/recommended-strict.js +14 -1
  29. package/lib/config/recommended.js +14 -1
  30. package/lib/config/rules.d.ts +3 -3
  31. package/lib/config/rules.js +1 -2
  32. package/lib/config/types.d.ts +17 -4
  33. package/lib/config/utils.d.ts +3 -1
  34. package/lib/config/utils.js +78 -49
  35. package/lib/decorators/async3/index.d.ts +1 -0
  36. package/lib/decorators/async3/index.js +4 -0
  37. package/lib/decorators/common/filters/filter-helper.d.ts +1 -1
  38. package/lib/decorators/common/filters/filter-helper.js +2 -3
  39. package/lib/decorators/common/filters/filter-in.d.ts +1 -1
  40. package/lib/decorators/common/filters/filter-in.js +1 -1
  41. package/lib/decorators/common/filters/filter-out.d.ts +1 -1
  42. package/lib/decorators/common/filters/filter-out.js +1 -1
  43. package/lib/decorators/common/info-description-override.d.ts +1 -1
  44. package/lib/decorators/common/info-override.d.ts +1 -1
  45. package/lib/decorators/common/info-override.js +1 -12
  46. package/lib/decorators/common/media-type-examples-override.d.ts +1 -1
  47. package/lib/decorators/common/media-type-examples-override.js +8 -2
  48. package/lib/decorators/common/operation-description-override.d.ts +1 -1
  49. package/lib/decorators/common/registry-dependencies.d.ts +1 -1
  50. package/lib/decorators/common/remove-x-internal.d.ts +1 -1
  51. package/lib/decorators/common/remove-x-internal.js +4 -5
  52. package/lib/decorators/common/tag-description-override.d.ts +1 -1
  53. package/lib/decorators/oas2/index.d.ts +1 -1
  54. package/lib/decorators/oas2/remove-unused-components.js +1 -2
  55. package/lib/decorators/oas3/index.d.ts +1 -1
  56. package/lib/decorators/oas3/remove-unused-components.js +1 -2
  57. package/lib/env.d.ts +0 -1
  58. package/lib/env.js +1 -1
  59. package/lib/format/codeframes.d.ts +1 -1
  60. package/lib/format/codeframes.js +10 -8
  61. package/lib/format/format.d.ts +1 -1
  62. package/lib/format/format.js +24 -16
  63. package/lib/index.d.ts +2 -1
  64. package/lib/index.js +6 -4
  65. package/lib/js-yaml/index.d.ts +1 -1
  66. package/lib/js-yaml/index.js +1 -1
  67. package/lib/lint.d.ts +3 -1
  68. package/lib/lint.js +92 -99
  69. package/lib/logger.js +2 -2
  70. package/lib/oas-types.d.ts +9 -5
  71. package/lib/oas-types.js +22 -12
  72. package/lib/redocly/domains.d.ts +1 -1
  73. package/lib/redocly/domains.js +6 -6
  74. package/lib/redocly/index.d.ts +1 -1
  75. package/lib/redocly/index.js +60 -73
  76. package/lib/redocly/registry-api.js +64 -82
  77. package/lib/ref-utils.d.ts +2 -2
  78. package/lib/ref-utils.js +14 -13
  79. package/lib/resolve.d.ts +2 -2
  80. package/lib/resolve.js +186 -205
  81. package/lib/rules/ajv.d.ts +1 -1
  82. package/lib/rules/ajv.js +10 -8
  83. package/lib/rules/arazzo/index.js +2 -0
  84. package/lib/rules/async2/channels-kebab-case.d.ts +1 -1
  85. package/lib/rules/async2/index.js +2 -0
  86. package/lib/rules/async2/no-channel-trailing-slash.d.ts +1 -1
  87. package/lib/rules/async3/channels-kebab-case.d.ts +2 -0
  88. package/lib/rules/async3/channels-kebab-case.js +19 -0
  89. package/lib/rules/async3/index.d.ts +3 -0
  90. package/lib/rules/async3/index.js +24 -0
  91. package/lib/rules/async3/no-channel-trailing-slash.d.ts +2 -0
  92. package/lib/rules/async3/no-channel-trailing-slash.js +16 -0
  93. package/lib/rules/common/assertions/asserts.d.ts +2 -2
  94. package/lib/rules/common/assertions/asserts.js +5 -5
  95. package/lib/rules/common/assertions/index.d.ts +4 -4
  96. package/lib/rules/common/assertions/utils.d.ts +1 -1
  97. package/lib/rules/common/assertions/utils.js +43 -28
  98. package/lib/rules/common/info-contact.d.ts +1 -1
  99. package/lib/rules/common/info-license-strict.d.ts +2 -0
  100. package/lib/rules/common/info-license-strict.js +26 -0
  101. package/lib/rules/common/info-license-url.d.ts +1 -1
  102. package/lib/rules/common/info-license.d.ts +1 -1
  103. package/lib/rules/common/no-ambiguous-paths.d.ts +1 -1
  104. package/lib/rules/common/no-enum-type-mismatch.d.ts +1 -1
  105. package/lib/rules/common/no-http-verbs-in-paths.d.ts +1 -1
  106. package/lib/rules/common/no-identical-paths.d.ts +1 -1
  107. package/lib/rules/common/no-invalid-parameter-examples.js +1 -2
  108. package/lib/rules/common/no-invalid-schema-examples.js +1 -2
  109. package/lib/rules/common/no-path-trailing-slash.d.ts +1 -1
  110. package/lib/rules/common/no-required-schema-properties-undefined.d.ts +1 -1
  111. package/lib/rules/common/no-required-schema-properties-undefined.js +1 -2
  112. package/lib/rules/common/operation-2xx-response.d.ts +1 -1
  113. package/lib/rules/common/operation-4xx-response.d.ts +1 -1
  114. package/lib/rules/common/operation-description.d.ts +1 -1
  115. package/lib/rules/common/operation-operationId-unique.d.ts +1 -1
  116. package/lib/rules/common/operation-operationId-url-safe.d.ts +1 -1
  117. package/lib/rules/common/operation-operationId-url-safe.js +1 -0
  118. package/lib/rules/common/operation-operationId.d.ts +1 -1
  119. package/lib/rules/common/operation-parameters-unique.d.ts +1 -1
  120. package/lib/rules/common/operation-singular-tag.d.ts +1 -1
  121. package/lib/rules/common/operation-summary.d.ts +1 -1
  122. package/lib/rules/common/operation-tag-defined.d.ts +1 -1
  123. package/lib/rules/common/operation-tag-defined.js +1 -2
  124. package/lib/rules/common/parameter-description.d.ts +1 -1
  125. package/lib/rules/common/path-declaration-must-exist.d.ts +1 -1
  126. package/lib/rules/common/path-excludes-patterns.d.ts +1 -1
  127. package/lib/rules/common/path-http-verbs-order.d.ts +1 -1
  128. package/lib/rules/common/path-http-verbs-order.js +1 -1
  129. package/lib/rules/common/path-not-include-query.d.ts +1 -1
  130. package/lib/rules/common/path-params-defined.d.ts +1 -1
  131. package/lib/rules/common/path-segment-plural.d.ts +1 -1
  132. package/lib/rules/common/paths-kebab-case.d.ts +1 -1
  133. package/lib/rules/common/required-string-property-missing-min-length.d.ts +1 -1
  134. package/lib/rules/common/required-string-property-missing-min-length.js +2 -2
  135. package/lib/rules/common/response-contains-header.d.ts +1 -1
  136. package/lib/rules/common/response-contains-header.js +2 -2
  137. package/lib/rules/common/security-defined.d.ts +1 -1
  138. package/lib/rules/common/security-defined.js +3 -7
  139. package/lib/rules/common/spec-strict-refs.d.ts +1 -1
  140. package/lib/rules/common/spec.d.ts +2 -2
  141. package/lib/rules/common/spec.js +6 -7
  142. package/lib/rules/common/tag-description.d.ts +1 -1
  143. package/lib/rules/common/tags-alphabetical.d.ts +1 -1
  144. package/lib/rules/no-unresolved-refs.d.ts +3 -3
  145. package/lib/rules/no-unresolved-refs.js +3 -4
  146. package/lib/rules/oas2/boolean-parameter-prefixes.d.ts +1 -1
  147. package/lib/rules/oas2/index.d.ts +1 -1
  148. package/lib/rules/oas2/index.js +2 -0
  149. package/lib/rules/oas2/response-contains-property.d.ts +1 -1
  150. package/lib/rules/oas2/response-contains-property.js +1 -2
  151. package/lib/rules/oas3/array-parameter-serialization.d.ts +1 -1
  152. package/lib/rules/oas3/array-parameter-serialization.js +1 -2
  153. package/lib/rules/oas3/boolean-parameter-prefixes.d.ts +1 -1
  154. package/lib/rules/oas3/component-name-unique.d.ts +1 -1
  155. package/lib/rules/oas3/component-name-unique.js +2 -4
  156. package/lib/rules/oas3/index.d.ts +1 -1
  157. package/lib/rules/oas3/index.js +2 -0
  158. package/lib/rules/oas3/no-empty-servers.d.ts +1 -1
  159. package/lib/rules/oas3/no-example-value-and-externalValue.d.ts +1 -1
  160. package/lib/rules/oas3/no-invalid-media-type-examples.d.ts +1 -1
  161. package/lib/rules/oas3/no-invalid-media-type-examples.js +1 -2
  162. package/lib/rules/oas3/no-server-example.com.d.ts +1 -1
  163. package/lib/rules/oas3/no-server-example.com.js +1 -0
  164. package/lib/rules/oas3/no-server-trailing-slash.d.ts +1 -1
  165. package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +1 -1
  166. package/lib/rules/oas3/no-server-variables-empty-enum.js +1 -2
  167. package/lib/rules/oas3/no-undefined-server-variable.d.ts +1 -1
  168. package/lib/rules/oas3/no-undefined-server-variable.js +2 -3
  169. package/lib/rules/oas3/no-unused-components.d.ts +1 -1
  170. package/lib/rules/oas3/no-unused-components.js +1 -2
  171. package/lib/rules/oas3/response-contains-property.d.ts +1 -1
  172. package/lib/rules/oas3/response-contains-property.js +1 -2
  173. package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +1 -1
  174. package/lib/rules/other/stats.d.ts +3 -3
  175. package/lib/rules/other/stats.js +5 -3
  176. package/lib/rules/spot/parameters-no-body-inside-in.d.ts +2 -0
  177. package/lib/rules/spot/parameters-no-body-inside-in.js +18 -0
  178. package/lib/rules/utils.d.ts +4 -2
  179. package/lib/rules/utils.js +41 -13
  180. package/lib/types/arazzo.d.ts +1 -2275
  181. package/lib/types/arazzo.js +246 -309
  182. package/lib/types/asyncapi2.d.ts +17 -0
  183. package/lib/types/{asyncapi.js → asyncapi2.js} +59 -53
  184. package/lib/types/asyncapi3.d.ts +2 -0
  185. package/lib/types/asyncapi3.js +347 -0
  186. package/lib/types/index.js +19 -10
  187. package/lib/types/json-schema-adapter.d.ts +1 -1
  188. package/lib/types/json-schema-adapter.js +4 -18
  189. package/lib/types/oas2.js +6 -6
  190. package/lib/types/oas3.d.ts +4 -0
  191. package/lib/types/oas3.js +19 -19
  192. package/lib/types/oas3_1.d.ts +3 -0
  193. package/lib/types/oas3_1.js +20 -14
  194. package/lib/types/redocly-yaml.d.ts +8 -6
  195. package/lib/types/redocly-yaml.js +135 -36
  196. package/lib/typings/arazzo.d.ts +145 -27
  197. package/lib/typings/asyncapi3.d.ts +53 -0
  198. package/lib/typings/asyncapi3.js +2 -0
  199. package/lib/typings/common.d.ts +1 -1
  200. package/lib/typings/swagger.d.ts +2 -2
  201. package/lib/utils.d.ts +4 -3
  202. package/lib/utils.js +55 -72
  203. package/lib/visitors.d.ts +29 -1
  204. package/lib/visitors.js +21 -8
  205. package/lib/walk.d.ts +3 -3
  206. package/lib/walk.js +30 -23
  207. package/package.json +3 -3
  208. package/src/__tests__/bundle.test.ts +144 -2
  209. package/src/__tests__/lint.test.ts +29 -21
  210. package/src/__tests__/walk.test.ts +25 -25
  211. package/src/benchmark/benches/lint-with-many-rules.bench.ts +7 -1
  212. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +7 -1
  213. package/src/benchmark/benches/lint-with-no-rules.bench.ts +8 -1
  214. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +18 -13
  215. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +17 -11
  216. package/src/benchmark/fork.js +4 -0
  217. package/src/benchmark/utils.ts +6 -5
  218. package/src/bundle.ts +19 -4
  219. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +32 -2
  220. package/src/config/__tests__/__snapshots__/config.test.ts.snap +24 -0
  221. package/src/config/__tests__/config-resolvers.test.ts +82 -0
  222. package/src/config/__tests__/config.test.ts +11 -0
  223. package/src/config/__tests__/fixtures/resolve-config/local-config-with-commonjs-export-function.yaml +2 -0
  224. package/src/config/__tests__/fixtures/resolve-config/local-config-with-esm.yaml +2 -0
  225. package/src/config/__tests__/fixtures/resolve-config/plugin-esm.mjs +10 -0
  226. package/src/config/__tests__/fixtures/resolve-config/plugin-with-export-function.cjs +10 -0
  227. package/src/config/__tests__/resolve-plugins.test.ts +4 -1
  228. package/src/config/all.ts +13 -1
  229. package/src/config/builtIn.ts +9 -8
  230. package/src/config/config-resolvers.ts +92 -21
  231. package/src/config/config.ts +31 -13
  232. package/src/config/load.ts +2 -2
  233. package/src/config/minimal.ts +13 -0
  234. package/src/config/recommended-strict.ts +14 -1
  235. package/src/config/recommended.ts +14 -1
  236. package/src/config/rules.ts +12 -4
  237. package/src/config/types.ts +34 -5
  238. package/src/config/utils.ts +28 -2
  239. package/src/decorators/__tests__/filter-in.test.ts +29 -26
  240. package/src/decorators/__tests__/filter-out.test.ts +32 -23
  241. package/src/decorators/__tests__/media-type-examples-override.test.ts +45 -45
  242. package/src/decorators/__tests__/remove-x-internal.test.ts +8 -5
  243. package/src/decorators/async3/index.ts +1 -0
  244. package/src/decorators/common/filters/filter-helper.ts +2 -1
  245. package/src/decorators/common/filters/filter-in.ts +2 -1
  246. package/src/decorators/common/filters/filter-out.ts +2 -1
  247. package/src/decorators/common/info-description-override.ts +3 -2
  248. package/src/decorators/common/info-override.ts +1 -1
  249. package/src/decorators/common/media-type-examples-override.ts +4 -3
  250. package/src/decorators/common/operation-description-override.ts +5 -4
  251. package/src/decorators/common/registry-dependencies.ts +2 -2
  252. package/src/decorators/common/remove-x-internal.ts +5 -4
  253. package/src/decorators/common/tag-description-override.ts +3 -2
  254. package/src/decorators/oas2/__tests__/remove-unused-components.test.ts +3 -3
  255. package/src/decorators/oas2/index.ts +2 -1
  256. package/src/decorators/oas2/remove-unused-components.ts +1 -1
  257. package/src/decorators/oas3/__tests__/remove-unused-components.test.ts +4 -4
  258. package/src/decorators/oas3/index.ts +2 -1
  259. package/src/decorators/oas3/remove-unused-components.ts +1 -1
  260. package/src/format/codeframes.ts +2 -1
  261. package/src/format/format.ts +9 -4
  262. package/src/index.ts +2 -1
  263. package/src/js-yaml/index.ts +3 -1
  264. package/src/lint.ts +28 -4
  265. package/src/logger.ts +2 -2
  266. package/src/oas-types.ts +41 -22
  267. package/src/redocly/domains.ts +1 -1
  268. package/src/redocly/index.ts +3 -3
  269. package/src/redocly/registry-api.ts +5 -3
  270. package/src/ref-utils.ts +4 -2
  271. package/src/resolve.ts +6 -4
  272. package/src/rules/__tests__/no-unresolved-refs.test.ts +21 -7
  273. package/src/rules/ajv.ts +2 -1
  274. package/src/rules/arazzo/__tests__/parameters-no-body-inside-in.test.ts +76 -0
  275. package/src/rules/arazzo/index.ts +6 -3
  276. package/src/rules/async2/__tests__/channels-kebab-case.test.ts +9 -5
  277. package/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts +3 -3
  278. package/src/rules/async2/channels-kebab-case.ts +2 -2
  279. package/src/rules/async2/index.ts +9 -6
  280. package/src/rules/async2/no-channel-trailing-slash.ts +2 -2
  281. package/src/rules/async3/__tests__/channels-kebab-case.test.ts +145 -0
  282. package/src/rules/async3/__tests__/no-channel-trailing-slash.test.ts +96 -0
  283. package/src/rules/async3/channels-kebab-case.ts +19 -0
  284. package/src/rules/async3/index.ts +26 -0
  285. package/src/rules/async3/no-channel-trailing-slash.ts +16 -0
  286. package/src/rules/common/__tests__/info-license-strict.test.ts +141 -0
  287. package/src/rules/common/__tests__/info-license.test.ts +2 -2
  288. package/src/rules/common/__tests__/license-url.test.ts +2 -2
  289. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +1 -1
  290. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +5 -5
  291. package/src/rules/common/__tests__/no-identical-paths.test.ts +1 -1
  292. package/src/rules/common/__tests__/no-invalid-parameter-examples.test.ts +1 -1
  293. package/src/rules/common/__tests__/no-invalid-schema-examples.test.ts +1 -1
  294. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +4 -4
  295. package/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts +11 -11
  296. package/src/rules/common/__tests__/operation-2xx-response.test.ts +8 -6
  297. package/src/rules/common/__tests__/operation-4xx-response.test.ts +9 -7
  298. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +2 -2
  299. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +1 -1
  300. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +4 -4
  301. package/src/rules/common/__tests__/operation-singular-tag.test.ts +2 -2
  302. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +2 -2
  303. package/src/rules/common/__tests__/path-not-include-query.test.ts +2 -2
  304. package/src/rules/common/__tests__/path-params-defined.test.ts +5 -5
  305. package/src/rules/common/__tests__/paths-kebab-case.test.ts +6 -4
  306. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +8 -8
  307. package/src/rules/common/__tests__/security-defined.test.ts +14 -8
  308. package/src/rules/common/__tests__/spec-strict-refs.test.ts +1 -1
  309. package/src/rules/common/__tests__/spec.test.ts +10 -10
  310. package/src/rules/common/__tests__/tag-description.test.ts +2 -2
  311. package/src/rules/common/__tests__/tags-alphabetical.test.ts +6 -4
  312. package/src/rules/common/assertions/asserts.ts +5 -9
  313. package/src/rules/common/assertions/index.ts +12 -4
  314. package/src/rules/common/assertions/utils.ts +4 -2
  315. package/src/rules/common/info-contact.ts +2 -1
  316. package/src/rules/common/info-license-strict.ts +24 -0
  317. package/src/rules/common/info-license-url.ts +2 -1
  318. package/src/rules/common/info-license.ts +2 -1
  319. package/src/rules/common/no-ambiguous-paths.ts +4 -4
  320. package/src/rules/common/no-enum-type-mismatch.ts +5 -4
  321. package/src/rules/common/no-http-verbs-in-paths.ts +5 -4
  322. package/src/rules/common/no-identical-paths.ts +4 -4
  323. package/src/rules/common/no-invalid-parameter-examples.ts +3 -2
  324. package/src/rules/common/no-path-trailing-slash.ts +2 -2
  325. package/src/rules/common/no-required-schema-properties-undefined.ts +5 -4
  326. package/src/rules/common/operation-2xx-response.ts +3 -2
  327. package/src/rules/common/operation-4xx-response.ts +3 -2
  328. package/src/rules/common/operation-description.ts +5 -4
  329. package/src/rules/common/operation-operationId-unique.ts +4 -4
  330. package/src/rules/common/operation-operationId-url-safe.ts +5 -4
  331. package/src/rules/common/operation-operationId.ts +5 -4
  332. package/src/rules/common/operation-parameters-unique.ts +4 -4
  333. package/src/rules/common/operation-singular-tag.ts +4 -4
  334. package/src/rules/common/operation-summary.ts +5 -4
  335. package/src/rules/common/operation-tag-defined.ts +4 -4
  336. package/src/rules/common/parameter-description.ts +4 -4
  337. package/src/rules/common/path-declaration-must-exist.ts +2 -2
  338. package/src/rules/common/path-excludes-patterns.ts +4 -4
  339. package/src/rules/common/path-http-verbs-order.ts +4 -4
  340. package/src/rules/common/path-not-include-query.ts +2 -2
  341. package/src/rules/common/path-params-defined.ts +4 -4
  342. package/src/rules/common/path-segment-plural.ts +3 -2
  343. package/src/rules/common/paths-kebab-case.ts +2 -2
  344. package/src/rules/common/required-string-property-missing-min-length.ts +4 -4
  345. package/src/rules/common/response-contains-header.ts +5 -4
  346. package/src/rules/common/scalar-property-missing-example.ts +2 -1
  347. package/src/rules/common/security-defined.ts +5 -5
  348. package/src/rules/common/spec-strict-refs.ts +2 -1
  349. package/src/rules/common/spec.ts +4 -3
  350. package/src/rules/common/tag-description.ts +2 -1
  351. package/src/rules/common/tags-alphabetical.ts +4 -4
  352. package/src/rules/no-unresolved-refs.ts +4 -3
  353. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +7 -5
  354. package/src/rules/oas2/__tests__/response-contains-header.test.ts +14 -8
  355. package/src/rules/oas2/__tests__/response-contains-property.test.ts +14 -8
  356. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +3 -1
  357. package/src/rules/oas2/boolean-parameter-prefixes.ts +1 -1
  358. package/src/rules/oas2/index.ts +8 -6
  359. package/src/rules/oas2/request-mime-type.ts +2 -1
  360. package/src/rules/oas2/response-contains-property.ts +3 -2
  361. package/src/rules/oas2/response-mime-type.ts +2 -1
  362. package/src/rules/oas3/__tests__/array-parameter-serialization.test.ts +18 -6
  363. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +7 -5
  364. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +6 -6
  365. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +2 -2
  366. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +34 -24
  367. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +3 -3
  368. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +3 -3
  369. package/src/rules/oas3/__tests__/no-unused-components.test.ts +1 -1
  370. package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +3 -3
  371. package/src/rules/oas3/__tests__/response-contains-header.test.ts +34 -22
  372. package/src/rules/oas3/__tests__/response-contains-property.test.ts +34 -20
  373. package/src/rules/oas3/__tests__/spec/spec.test.ts +12 -3
  374. package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +9 -3
  375. package/src/rules/oas3/__tests__/utils/lint-document-for-test.ts +1 -1
  376. package/src/rules/oas3/array-parameter-serialization.ts +3 -2
  377. package/src/rules/oas3/boolean-parameter-prefixes.ts +1 -1
  378. package/src/rules/oas3/component-name-unique.ts +3 -3
  379. package/src/rules/oas3/index.ts +42 -38
  380. package/src/rules/oas3/no-empty-servers.ts +1 -1
  381. package/src/rules/oas3/no-example-value-and-externalValue.ts +1 -1
  382. package/src/rules/oas3/no-invalid-media-type-examples.ts +6 -4
  383. package/src/rules/oas3/no-server-example.com.ts +2 -1
  384. package/src/rules/oas3/no-server-trailing-slash.ts +1 -1
  385. package/src/rules/oas3/no-server-variables-empty-enum.ts +2 -2
  386. package/src/rules/oas3/no-undefined-server-variable.ts +1 -1
  387. package/src/rules/oas3/no-unused-components.ts +2 -2
  388. package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +2 -1
  389. package/src/rules/oas3/request-mime-type.ts +2 -1
  390. package/src/rules/oas3/response-contains-property.ts +3 -2
  391. package/src/rules/oas3/response-mime-type.ts +2 -1
  392. package/src/rules/oas3/spec-components-invalid-map-name.ts +3 -3
  393. package/src/rules/other/stats.ts +8 -6
  394. package/src/rules/spot/parameters-no-body-inside-in.ts +17 -0
  395. package/src/rules/utils.ts +41 -4
  396. package/src/types/arazzo.ts +257 -334
  397. package/src/types/{asyncapi.ts → asyncapi2.ts} +41 -35
  398. package/src/types/asyncapi3.ts +383 -0
  399. package/src/types/json-schema-adapter.ts +2 -2
  400. package/src/types/oas3.ts +4 -4
  401. package/src/types/oas3_1.ts +5 -4
  402. package/src/types/redocly-yaml.ts +21 -4
  403. package/src/typings/arazzo.ts +169 -41
  404. package/src/typings/asyncapi3.ts +61 -0
  405. package/src/typings/common.ts +1 -0
  406. package/src/typings/swagger.ts +2 -2
  407. package/src/utils.ts +5 -3
  408. package/src/visitors.ts +58 -1
  409. package/src/walk.ts +3 -3
  410. package/tsconfig.tsbuildinfo +1 -1
  411. package/lib/types/asyncapi.d.ts +0 -2
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildAssertCustomFunction = exports.asserts = exports.runOnValuesSet = exports.runOnKeysSet = void 0;
3
+ exports.asserts = exports.runOnValuesSet = exports.runOnKeysSet = void 0;
4
+ exports.buildAssertCustomFunction = buildAssertCustomFunction;
4
5
  const utils_1 = require("../../../utils");
5
6
  const utils_2 = require("./utils");
6
7
  exports.runOnKeysSet = new Set([
@@ -41,7 +42,7 @@ exports.asserts = {
41
42
  const values = Array.isArray(value) ? value : [value];
42
43
  const regex = (0, utils_2.regexFromString)(condition);
43
44
  return values
44
- .map((_val) => !(regex === null || regex === void 0 ? void 0 : regex.test(_val)) && {
45
+ .map((_val) => !regex?.test(_val) && {
45
46
  message: `"${_val}" should match a regex ${condition}`,
46
47
  location: (0, utils_1.isString)(value)
47
48
  ? baseLocation
@@ -57,7 +58,7 @@ exports.asserts = {
57
58
  const values = Array.isArray(value) ? value : [value];
58
59
  const regex = (0, utils_2.regexFromString)(condition);
59
60
  return values
60
- .map((_val) => (regex === null || regex === void 0 ? void 0 : regex.test(_val)) && {
61
+ .map((_val) => regex?.test(_val) && {
61
62
  message: `"${_val}" should not match a regex ${condition}`,
62
63
  location: (0, utils_1.isString)(value)
63
64
  ? baseLocation
@@ -264,7 +265,7 @@ exports.asserts = {
264
265
  ];
265
266
  }
266
267
  const regex = (0, utils_2.regexFromString)(condition);
267
- const isValid = hasRef && (regex === null || regex === void 0 ? void 0 : regex.test(rawValue['$ref']));
268
+ const isValid = hasRef && regex?.test(rawValue['$ref']);
268
269
  return isValid
269
270
  ? []
270
271
  : [
@@ -278,4 +279,3 @@ exports.asserts = {
278
279
  function buildAssertCustomFunction(fn) {
279
280
  return (value, options, ctx) => fn.call(null, value, options, ctx);
280
281
  }
281
- exports.buildAssertCustomFunction = buildAssertCustomFunction;
@@ -1,6 +1,6 @@
1
- import { asserts, AssertionFn } from './asserts';
2
- import { Oas2Visitor, Oas3Visitor } from '../../../visitors';
3
- import { RuleSeverity } from '../../../config';
1
+ import type { asserts, AssertionFn } from './asserts';
2
+ import type { ArazzoVisitor, Async2Visitor, Async3Visitor, Oas2Visitor, Oas3Visitor } from '../../../visitors';
3
+ import type { RuleSeverity } from '../../../config';
4
4
  export type AssertionLocators = {
5
5
  filterInParentKeys?: (string | number)[];
6
6
  filterOutParentKeys?: (string | number)[];
@@ -24,4 +24,4 @@ export type RawAssertion = AssertionDefinition & {
24
24
  export type Assertion = RawAssertion & {
25
25
  assertionId: string;
26
26
  };
27
- export declare const Assertions: (opts: Record<string, Assertion>) => (Oas3Visitor | Oas2Visitor)[];
27
+ export declare const Assertions: (opts: Record<string, Assertion>) => (Oas3Visitor | Oas2Visitor | Async2Visitor | Async3Visitor | ArazzoVisitor)[];
@@ -1,4 +1,4 @@
1
- import { Asserts } from './asserts';
1
+ import type { Asserts } from './asserts';
2
2
  import type { AssertionContext, AssertResult } from '../../../config';
3
3
  import type { Assertion, AssertionDefinition } from '.';
4
4
  import type { Oas2Visitor, Oas3Visitor, VisitFunction } from '../../../visitors';
@@ -1,6 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.regexFromString = exports.runAssertion = exports.isOrdered = exports.getIntersectionLength = exports.buildSubjectVisitor = exports.buildVisitorObject = exports.getAssertsToApply = void 0;
3
+ exports.getAssertsToApply = getAssertsToApply;
4
+ exports.buildVisitorObject = buildVisitorObject;
5
+ exports.buildSubjectVisitor = buildSubjectVisitor;
6
+ exports.getIntersectionLength = getIntersectionLength;
7
+ exports.isOrdered = isOrdered;
8
+ exports.runAssertion = runAssertion;
9
+ exports.regexFromString = regexFromString;
4
10
  const asserts_1 = require("./asserts");
5
11
  const logger_1 = require("../../../logger");
6
12
  const ref_utils_1 = require("../../../ref-utils");
@@ -39,9 +45,8 @@ function getAssertsToApply(assertion) {
39
45
  }
40
46
  return assertsToApply;
41
47
  }
42
- exports.getAssertsToApply = getAssertsToApply;
43
48
  function getAssertionProperties({ subject }) {
44
- return (Array.isArray(subject.property) ? subject.property : [subject === null || subject === void 0 ? void 0 : subject.property]).filter(Boolean);
49
+ return (Array.isArray(subject.property) ? subject.property : [subject?.property]).filter(Boolean);
45
50
  }
46
51
  function applyAssertions(assertionDefinition, asserts, ctx) {
47
52
  const properties = getAssertionProperties(assertionDefinition);
@@ -66,13 +71,15 @@ function applyAssertions(assertionDefinition, asserts, ctx) {
66
71
  return assertResults.flat();
67
72
  }
68
73
  function buildVisitorObject(assertion, subjectVisitor) {
69
- var _a, _b;
70
74
  const targetVisitorLocatorPredicates = getPredicatesFromLocators(assertion.subject);
71
75
  const targetVisitorSkipFunction = targetVisitorLocatorPredicates.length
72
76
  ? (_, key) => !targetVisitorLocatorPredicates.every((predicate) => predicate(key))
73
77
  : undefined;
74
78
  const targetVisitor = {
75
- [assertion.subject.type]: Object.assign({ enter: subjectVisitor }, (targetVisitorSkipFunction && { skip: targetVisitorSkipFunction })),
79
+ [assertion.subject.type]: {
80
+ enter: subjectVisitor,
81
+ ...(targetVisitorSkipFunction && { skip: targetVisitorSkipFunction }),
82
+ },
76
83
  };
77
84
  if (!Array.isArray(assertion.where)) {
78
85
  return targetVisitor;
@@ -82,37 +89,44 @@ function buildVisitorObject(assertion, subjectVisitor) {
82
89
  const context = assertion.where;
83
90
  for (let index = 0; index < context.length; index++) {
84
91
  const assertionDefinitionNode = context[index];
85
- if (!(0, utils_1.isString)((_a = assertionDefinitionNode.subject) === null || _a === void 0 ? void 0 : _a.type)) {
92
+ if (!(0, utils_1.isString)(assertionDefinitionNode.subject?.type)) {
86
93
  throw new Error(`${assertion.assertionId} -> where -> [${index}]: 'type' (String) is required`);
87
94
  }
88
95
  const locatorPredicates = getPredicatesFromLocators(assertionDefinitionNode.subject);
89
96
  const assertsToApply = getAssertsToApply(assertionDefinitionNode);
90
97
  const skipFunction = (node, key, ctx) => !locatorPredicates.every((predicate) => predicate(key)) ||
91
- !!applyAssertions(assertionDefinitionNode, assertsToApply, Object.assign(Object.assign({}, ctx), { node })).length;
92
- const nodeVisitor = Object.assign({}, ((locatorPredicates.length || assertsToApply.length) && { skip: skipFunction }));
98
+ !!applyAssertions(assertionDefinitionNode, assertsToApply, { ...ctx, node }).length;
99
+ const nodeVisitor = {
100
+ ...((locatorPredicates.length || assertsToApply.length) && { skip: skipFunction }),
101
+ };
93
102
  if (assertionDefinitionNode.subject.type === assertion.subject.type &&
94
103
  index === context.length - 1) {
95
104
  // We have to merge the visitors if the last node inside the `where` is the same as the subject.
96
- targetVisitor[assertion.subject.type] = Object.assign({ enter: subjectVisitor }, ((nodeVisitor.skip && { skip: nodeVisitor.skip }) ||
97
- (targetVisitorSkipFunction && {
98
- skip: (node, key, ctx // We may have locators defined on assertion level and on where level for the same node type
99
- ) => { var _a; return !!(((_a = nodeVisitor.skip) === null || _a === void 0 ? void 0 : _a.call(nodeVisitor, node, key, ctx)) || (targetVisitorSkipFunction === null || targetVisitorSkipFunction === void 0 ? void 0 : targetVisitorSkipFunction(node, key))); },
100
- })));
105
+ targetVisitor[assertion.subject.type] = {
106
+ enter: subjectVisitor,
107
+ ...((nodeVisitor.skip && { skip: nodeVisitor.skip }) ||
108
+ (targetVisitorSkipFunction && {
109
+ skip: (node, key, ctx // We may have locators defined on assertion level and on where level for the same node type
110
+ ) => !!(nodeVisitor.skip?.(node, key, ctx) || targetVisitorSkipFunction?.(node, key)),
111
+ })),
112
+ };
101
113
  }
102
114
  else {
103
- currentVisitorLevel = currentVisitorLevel[(_b = assertionDefinitionNode.subject) === null || _b === void 0 ? void 0 : _b.type] =
115
+ currentVisitorLevel = currentVisitorLevel[assertionDefinitionNode.subject?.type] =
104
116
  nodeVisitor;
105
117
  }
106
118
  }
107
119
  currentVisitorLevel[assertion.subject.type] = targetVisitor[assertion.subject.type];
108
120
  return visitor;
109
121
  }
110
- exports.buildVisitorObject = buildVisitorObject;
111
122
  function buildSubjectVisitor(assertId, assertion) {
112
123
  return (node, ctx) => {
113
124
  const properties = getAssertionProperties(assertion);
114
125
  const defaultMessage = `${logger_1.colorize.blue(assertId)} failed because the ${logger_1.colorize.blue(assertion.subject.type)} ${logger_1.colorize.blue(properties.join(', '))} didn't meet the assertions: ${assertionMessageTemplates.problems}`.replace(/ +/g, ' ');
115
- const problems = applyAssertions(assertion, getAssertsToApply(assertion), Object.assign(Object.assign({}, ctx), { node }));
126
+ const problems = applyAssertions(assertion, getAssertsToApply(assertion), {
127
+ ...ctx,
128
+ node,
129
+ });
116
130
  if (problems.length) {
117
131
  for (const problemGroup of groupProblemsByPointer(problems)) {
118
132
  const message = assertion.message || defaultMessage;
@@ -128,7 +142,6 @@ function buildSubjectVisitor(assertId, assertion) {
128
142
  }
129
143
  };
130
144
  }
131
- exports.buildSubjectVisitor = buildSubjectVisitor;
132
145
  function groupProblemsByPointer(problems) {
133
146
  const groups = {};
134
147
  for (const problem of problems) {
@@ -144,10 +157,9 @@ function getProblemsLocation(problems) {
144
157
  return problems.length ? problems[0].location : undefined;
145
158
  }
146
159
  function getProblemsMessage(problems) {
147
- var _a;
148
160
  return problems.length === 1
149
- ? (_a = problems[0].message) !== null && _a !== void 0 ? _a : ''
150
- : problems.map((problem) => { var _a; return `\n- ${(_a = problem.message) !== null && _a !== void 0 ? _a : ''}`; }).join('');
161
+ ? problems[0].message ?? ''
162
+ : problems.map((problem) => `\n- ${problem.message ?? ''}`).join('');
151
163
  }
152
164
  function getIntersectionLength(keys, properties) {
153
165
  const props = new Set(properties);
@@ -159,7 +171,6 @@ function getIntersectionLength(keys, properties) {
159
171
  }
160
172
  return count;
161
173
  }
162
- exports.getIntersectionLength = getIntersectionLength;
163
174
  function isOrdered(value, options) {
164
175
  const direction = options.direction || options;
165
176
  const property = options.property;
@@ -186,26 +197,30 @@ function isOrdered(value, options) {
186
197
  }
187
198
  return true;
188
199
  }
189
- exports.isOrdered = isOrdered;
190
200
  function runAssertion({ assert, ctx, assertionProperty, }) {
191
- var _a;
192
201
  const currentLocation = assert.name === 'ref' ? ctx.rawLocation : ctx.location;
193
202
  if (assertionProperty) {
194
203
  const values = (0, ref_utils_1.isRef)(ctx.node[assertionProperty])
195
- ? (_a = ctx.resolve(ctx.node[assertionProperty])) === null || _a === void 0 ? void 0 : _a.node
204
+ ? ctx.resolve(ctx.node[assertionProperty])?.node
196
205
  : ctx.node[assertionProperty];
197
206
  const rawValues = ctx.rawNode[assertionProperty];
198
207
  const location = currentLocation.child(assertionProperty);
199
- return asserts_1.asserts[assert.name](values, assert.conditions, Object.assign(Object.assign({}, ctx), { baseLocation: location, rawValue: rawValues }));
208
+ return asserts_1.asserts[assert.name](values, assert.conditions, {
209
+ ...ctx,
210
+ baseLocation: location,
211
+ rawValue: rawValues,
212
+ });
200
213
  }
201
214
  else {
202
215
  const value = Array.isArray(ctx.node) ? ctx.node : Object.keys(ctx.node);
203
- return asserts_1.asserts[assert.name](value, assert.conditions, Object.assign(Object.assign({}, ctx), { rawValue: ctx.rawNode, baseLocation: currentLocation }));
216
+ return asserts_1.asserts[assert.name](value, assert.conditions, {
217
+ ...ctx,
218
+ rawValue: ctx.rawNode,
219
+ baseLocation: currentLocation,
220
+ });
204
221
  }
205
222
  }
206
- exports.runAssertion = runAssertion;
207
223
  function regexFromString(input) {
208
224
  const matches = input.match(/^\/(.*)\/(.*)|(.*)/);
209
225
  return matches && new RegExp(matches[1] || matches[3], matches[2]);
210
226
  }
211
- exports.regexFromString = regexFromString;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const InfoContact: Oas3Rule | Oas2Rule;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule, Async2Rule, Async3Rule } from '../../visitors';
2
+ export declare const InfoLicenseStrict: Oas2Rule | Oas3Rule | Async2Rule | Async3Rule;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InfoLicenseStrict = void 0;
4
+ const oas_types_1 = require("../../oas-types");
5
+ const utils_1 = require("../utils");
6
+ const InfoLicenseStrict = () => {
7
+ let specVersion;
8
+ return {
9
+ Root: {
10
+ enter(root) {
11
+ specVersion = (0, oas_types_1.detectSpec)(root);
12
+ },
13
+ License: {
14
+ leave(license, ctx) {
15
+ if (specVersion === 'oas3_1') {
16
+ (0, utils_1.validateOneOfDefinedAndNonEmpty)(['url', 'identifier'], license, ctx);
17
+ }
18
+ else {
19
+ (0, utils_1.validateDefinedAndNonEmpty)('url', license, ctx);
20
+ }
21
+ },
22
+ },
23
+ },
24
+ };
25
+ };
26
+ exports.InfoLicenseStrict = InfoLicenseStrict;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const InfoLicenseUrl: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const InfoLicense: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const NoAmbiguousPaths: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const NoEnumTypeMismatch: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const NoHttpVerbsInPaths: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const NoIdenticalPaths: Oas3Rule | Oas2Rule;
@@ -3,8 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NoInvalidParameterExamples = void 0;
4
4
  const utils_1 = require("../utils");
5
5
  const NoInvalidParameterExamples = (opts) => {
6
- var _a;
7
- const allowAdditionalProperties = (_a = (0, utils_1.getAdditionalPropertiesOption)(opts)) !== null && _a !== void 0 ? _a : false;
6
+ const allowAdditionalProperties = (0, utils_1.getAdditionalPropertiesOption)(opts) ?? false;
8
7
  return {
9
8
  Parameter: {
10
9
  leave(parameter, ctx) {
@@ -3,8 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NoInvalidSchemaExamples = void 0;
4
4
  const utils_1 = require("../utils");
5
5
  const NoInvalidSchemaExamples = (opts) => {
6
- var _a;
7
- const allowAdditionalProperties = (_a = (0, utils_1.getAdditionalPropertiesOption)(opts)) !== null && _a !== void 0 ? _a : false;
6
+ const allowAdditionalProperties = (0, utils_1.getAdditionalPropertiesOption)(opts) ?? false;
8
7
  return {
9
8
  Schema: {
10
9
  leave(schema, ctx) {
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const NoPathTrailingSlash: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas2Rule, Oas3Rule } from '../../visitors';
1
+ import type { Oas2Rule, Oas3Rule } from '../../visitors';
2
2
  export declare const NoRequiredSchemaPropertiesUndefined: Oas3Rule | Oas2Rule;
@@ -10,7 +10,6 @@ const NoRequiredSchemaPropertiesUndefined = () => {
10
10
  return;
11
11
  const visitedSchemas = new Set();
12
12
  const elevateProperties = (schema) => {
13
- var _a, _b, _c, _d;
14
13
  // Check if the schema has been visited before processing it
15
14
  if (visitedSchemas.has(schema)) {
16
15
  return {};
@@ -19,7 +18,7 @@ const NoRequiredSchemaPropertiesUndefined = () => {
19
18
  if ((0, ref_utils_1.isRef)(schema)) {
20
19
  return elevateProperties(resolve(schema).node);
21
20
  }
22
- return Object.assign({}, schema.properties, ...((_b = (_a = schema.allOf) === null || _a === void 0 ? void 0 : _a.map(elevateProperties)) !== null && _b !== void 0 ? _b : []), ...((_d = (_c = schema.anyOf) === null || _c === void 0 ? void 0 : _c.map(elevateProperties)) !== null && _d !== void 0 ? _d : []));
21
+ return Object.assign({}, schema.properties, ...(schema.allOf?.map(elevateProperties) ?? []), ...(schema.anyOf?.map(elevateProperties) ?? []));
23
22
  };
24
23
  const allProperties = elevateProperties(schema);
25
24
  for (const [i, requiredProperty] of schema.required.entries()) {
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const Operation2xxResponse: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const Operation4xxResponse: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const OperationDescription: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const OperationIdUnique: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const OperationIdUrlSafe: Oas3Rule | Oas2Rule;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OperationIdUrlSafe = void 0;
4
+ // eslint-disable-next-line no-useless-escape
4
5
  const validUrlSymbols = /^[A-Za-z0-9-._~:/?#\[\]@!\$&'()*+,;=]*$/;
5
6
  const OperationIdUrlSafe = () => {
6
7
  return {
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const OperationOperationId: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const OperationParametersUnique: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const OperationSingularTag: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const OperationSummary: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const OperationTagDefined: Oas3Rule | Oas2Rule;
@@ -5,8 +5,7 @@ const OperationTagDefined = () => {
5
5
  let definedTags;
6
6
  return {
7
7
  Root(root) {
8
- var _a;
9
- definedTags = new Set(((_a = root.tags) !== null && _a !== void 0 ? _a : []).map((t) => t.name));
8
+ definedTags = new Set((root.tags ?? []).map((t) => t.name));
10
9
  },
11
10
  Operation(operation, { report, location }) {
12
11
  if (operation.tags) {
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const ParameterDescription: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const PathDeclarationMustExist: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas2Rule, Oas3Rule } from '../../visitors';
1
+ import type { Oas2Rule, Oas3Rule } from '../../visitors';
2
2
  export declare const PathExcludesPatterns: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const PathHttpVerbsOrder: Oas3Rule | Oas2Rule;
@@ -16,7 +16,7 @@ const PathHttpVerbsOrder = (opts) => {
16
16
  if (bIdx < aIdx) {
17
17
  report({
18
18
  message: 'Operation http verbs must be ordered.',
19
- location: Object.assign({ reportOnKey: true }, location.child(httpVerbs[i + 1])),
19
+ location: { reportOnKey: true, ...location.child(httpVerbs[i + 1]) },
20
20
  });
21
21
  }
22
22
  }
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const PathNotIncludeQuery: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const PathParamsDefined: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const PathSegmentPlural: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const PathsKebabCase: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule } from 'core/src/visitors';
1
+ import type { Oas3Rule } from 'core/src/visitors';
2
2
  export declare const RequiredStringPropertyMissingMinLength: Oas3Rule;
@@ -7,7 +7,7 @@ const RequiredStringPropertyMissingMinLength = () => {
7
7
  return {
8
8
  Schema: {
9
9
  enter(schema) {
10
- if (!(schema === null || schema === void 0 ? void 0 : schema.required)) {
10
+ if (!schema?.required) {
11
11
  skipSchemaProperties = true;
12
12
  return;
13
13
  }
@@ -21,7 +21,7 @@ const RequiredStringPropertyMissingMinLength = () => {
21
21
  Schema: {
22
22
  enter(schema, { key, location, report }) {
23
23
  if (requiredPropertiesSet.has(key) && schema.type === 'string') {
24
- if (!(schema === null || schema === void 0 ? void 0 : schema.minLength)) {
24
+ if (!schema?.minLength) {
25
25
  report({
26
26
  message: 'Property minLength is required.',
27
27
  location: location.key(),
@@ -1,2 +1,2 @@
1
- import { Oas2Rule, Oas3Rule } from '../../visitors';
1
+ import type { Oas2Rule, Oas3Rule } from '../../visitors';
2
2
  export declare const ResponseContainsHeader: Oas3Rule | Oas2Rule;
@@ -13,8 +13,8 @@ const ResponseContainsHeader = (options) => {
13
13
  names[(0, utils_1.getMatchingStatusCodeRange)(key).toLowerCase()] ||
14
14
  [];
15
15
  for (const expectedHeader of expectedHeaders) {
16
- if (!(response === null || response === void 0 ? void 0 : response.headers) ||
17
- !Object.keys(response === null || response === void 0 ? void 0 : response.headers).some((header) => header.toLowerCase() === expectedHeader.toLowerCase())) {
16
+ if (!response?.headers ||
17
+ !Object.keys(response?.headers).some((header) => header.toLowerCase() === expectedHeader.toLowerCase())) {
18
18
  report({
19
19
  message: `Response object must contain a "${expectedHeader}" header.`,
20
20
  location: location.child('headers').key(),
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const SecurityDefined: Oas3Rule | Oas2Rule;
@@ -52,13 +52,9 @@ const SecurityDefined = (opts) => {
52
52
  path = key;
53
53
  },
54
54
  Operation(operation, { location, key }) {
55
- var _a;
56
- const isException = (_a = opts.exceptions) === null || _a === void 0 ? void 0 : _a.some((item) => {
57
- var _a;
58
- return item.path === path &&
59
- (!item.methods || ((_a = item.methods) === null || _a === void 0 ? void 0 : _a.some((method) => method.toLowerCase() === key)));
60
- });
61
- if (!(operation === null || operation === void 0 ? void 0 : operation.security) && !isException) {
55
+ const isException = opts.exceptions?.some((item) => item.path === path &&
56
+ (!item.methods || item.methods?.some((method) => method.toLowerCase() === key)));
57
+ if (!operation?.security && !isException) {
62
58
  eachOperationHasSecurity = false;
63
59
  operationsWithoutSecurity.push(location);
64
60
  }
@@ -1,2 +1,2 @@
1
- import { Oas2Rule, Oas3Rule } from '../../visitors';
1
+ import type { Oas2Rule, Oas3Rule } from '../../visitors';
2
2
  export declare const SpecStrictRefs: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import type { Oas3Rule, Oas2Rule, Async2Rule, ArazzoRule } from '../../visitors';
2
- export declare const Spec: Oas3Rule | Oas2Rule | Async2Rule | ArazzoRule;
1
+ import type { Oas3Rule, Oas2Rule, Async2Rule, Async3Rule, ArazzoRule } from '../../visitors';
2
+ export declare const Spec: Oas3Rule | Oas2Rule | Async2Rule | Async3Rule | ArazzoRule;
@@ -8,7 +8,6 @@ const utils_2 = require("../../utils");
8
8
  const Spec = () => {
9
9
  return {
10
10
  any(node, { report, type, location, rawLocation, key, resolve, ignoreNextVisitorsOnNode }) {
11
- var _a, _b, _c, _d, _e, _f;
12
11
  const nodeType = (0, utils_1.oasTypeOf)(node);
13
12
  const refLocation = rawLocation !== location ? rawLocation : undefined;
14
13
  if (type.items) {
@@ -42,7 +41,7 @@ const Spec = () => {
42
41
  });
43
42
  }
44
43
  }
45
- const allowed = (_a = type.allowed) === null || _a === void 0 ? void 0 : _a.call(type, node);
44
+ const allowed = type.allowed?.(node);
46
45
  if (allowed && (0, utils_2.isPlainObject)(node)) {
47
46
  for (const propName in node) {
48
47
  if (allowed.includes(propName) ||
@@ -67,7 +66,7 @@ const Spec = () => {
67
66
  }
68
67
  if (!hasProperty)
69
68
  report({
70
- message: `Must contain at least one of the following fields: ${(_b = type.requiredOneOf) === null || _b === void 0 ? void 0 : _b.join(', ')}.`,
69
+ message: `Must contain at least one of the following fields: ${type.requiredOneOf?.join(', ')}.`,
71
70
  from: refLocation,
72
71
  location: [{ reportOnKey: true }],
73
72
  });
@@ -102,9 +101,9 @@ const Spec = () => {
102
101
  if (propSchema.resolvable !== false && (0, ref_utils_1.isRef)(propValue)) {
103
102
  propValue = resolve(propValue).node;
104
103
  }
105
- if (propSchema.items && ((_c = propSchema.items) === null || _c === void 0 ? void 0 : _c.enum) && Array.isArray(propValue)) {
104
+ if (propSchema.items && propSchema.items?.enum && Array.isArray(propValue)) {
106
105
  for (let i = 0; i < propValue.length; i++) {
107
- (0, utils_1.validateSchemaEnumType)((_d = propSchema.items) === null || _d === void 0 ? void 0 : _d.enum, propValue[i], propName, refLocation, {
106
+ (0, utils_1.validateSchemaEnumType)(propSchema.items?.enum, propValue[i], propName, refLocation, {
108
107
  report,
109
108
  location: location.child([propName, i]),
110
109
  });
@@ -124,8 +123,8 @@ const Spec = () => {
124
123
  });
125
124
  ignoreNextVisitorsOnNode();
126
125
  }
127
- else if (propValueType === 'array' && ((_e = propSchema.items) === null || _e === void 0 ? void 0 : _e.type)) {
128
- const itemsType = (_f = propSchema.items) === null || _f === void 0 ? void 0 : _f.type;
126
+ else if (propValueType === 'array' && propSchema.items?.type) {
127
+ const itemsType = propSchema.items?.type;
129
128
  for (let i = 0; i < propValue.length; i++) {
130
129
  const item = propValue[i];
131
130
  if (!(0, utils_1.matchesJsonSchemaType)(item, itemsType, false)) {
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const TagDescription: Oas3Rule | Oas2Rule;
@@ -1,2 +1,2 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
2
  export declare const TagsAlphabetical: Oas3Rule | Oas2Rule;