@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
@@ -19,7 +19,7 @@ describe('Oas3 security-defined', () => {
19
19
  const results = await lintDocument({
20
20
  externalRefResolver: new BaseResolver(),
21
21
  document,
22
- config: await makeConfig({ 'security-defined': 'error' }),
22
+ config: await makeConfig({ rules: { 'security-defined': 'error' } }),
23
23
  });
24
24
 
25
25
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -53,7 +53,7 @@ describe('Oas3 security-defined', () => {
53
53
  const results = await lintDocument({
54
54
  externalRefResolver: new BaseResolver(),
55
55
  document,
56
- config: await makeConfig({ 'security-defined': 'error' }),
56
+ config: await makeConfig({ rules: { 'security-defined': 'error' } }),
57
57
  });
58
58
 
59
59
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -73,7 +73,7 @@ describe('Oas3 security-defined', () => {
73
73
  const results = await lintDocument({
74
74
  externalRefResolver: new BaseResolver(),
75
75
  document,
76
- config: await makeConfig({ 'security-defined': 'error' }),
76
+ config: await makeConfig({ rules: { 'security-defined': 'error' } }),
77
77
  });
78
78
 
79
79
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -112,7 +112,7 @@ describe('Oas3 security-defined', () => {
112
112
  const results = await lintDocument({
113
113
  externalRefResolver: new BaseResolver(),
114
114
  document,
115
- config: await makeConfig({ 'security-defined': 'error' }),
115
+ config: await makeConfig({ rules: { 'security-defined': 'error' } }),
116
116
  });
117
117
 
118
118
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -167,7 +167,7 @@ describe('Oas3 security-defined', () => {
167
167
  const results = await lintDocument({
168
168
  externalRefResolver: new BaseResolver(),
169
169
  document,
170
- config: await makeConfig({ 'security-defined': 'error' }),
170
+ config: await makeConfig({ rules: { 'security-defined': 'error' } }),
171
171
  });
172
172
 
173
173
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -190,7 +190,9 @@ describe('Oas3 security-defined', () => {
190
190
  externalRefResolver: new BaseResolver(),
191
191
  document,
192
192
  config: await makeConfig({
193
- 'security-defined': { exceptions: [{ path: '/excluded' }] },
193
+ rules: {
194
+ 'security-defined': { exceptions: [{ path: '/excluded' }] },
195
+ },
194
196
  }),
195
197
  });
196
198
 
@@ -217,7 +219,9 @@ describe('Oas3 security-defined', () => {
217
219
  externalRefResolver: new BaseResolver(),
218
220
  document,
219
221
  config: await makeConfig({
220
- 'security-defined': { exceptions: [{ path: '/partially-excluded', methods: ['GET'] }] },
222
+ rules: {
223
+ 'security-defined': { exceptions: [{ path: '/partially-excluded', methods: ['GET'] }] },
224
+ },
221
225
  }),
222
226
  });
223
227
 
@@ -254,7 +258,9 @@ describe('Oas3 security-defined', () => {
254
258
  const results = await lintDocument({
255
259
  externalRefResolver: new BaseResolver(),
256
260
  document,
257
- config: await makeConfig({ 'security-defined': { exceptions: [{ path: '/excluded' }] } }),
261
+ config: await makeConfig({
262
+ rules: { 'security-defined': { exceptions: [{ path: '/excluded' }] } },
263
+ }),
258
264
  });
259
265
 
260
266
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -33,7 +33,7 @@ describe('Oas3 spec-strict-refs', () => {
33
33
  const results = await lintDocument({
34
34
  externalRefResolver: new BaseResolver(),
35
35
  document,
36
- config: await makeConfig({ 'spec-strict-refs': 'error' }),
36
+ config: await makeConfig({ rules: { 'spec-strict-refs': 'error' } }),
37
37
  });
38
38
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
39
39
  [
@@ -25,7 +25,7 @@ describe('Oas3 spec', () => {
25
25
  const results = await lintDocument({
26
26
  externalRefResolver: new BaseResolver(),
27
27
  document,
28
- config: await makeConfig({ spec: 'error' }),
28
+ config: await makeConfig({ rules: { spec: 'error' } }),
29
29
  });
30
30
 
31
31
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -85,7 +85,7 @@ describe('Oas3 spec', () => {
85
85
  const results = await lintDocument({
86
86
  externalRefResolver: new BaseResolver(),
87
87
  document,
88
- config: await makeConfig({ spec: 'error' }),
88
+ config: await makeConfig({ rules: { spec: 'error' } }),
89
89
  });
90
90
 
91
91
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -157,7 +157,7 @@ describe('Oas3 spec', () => {
157
157
  const results = await lintDocument({
158
158
  externalRefResolver: new BaseResolver(),
159
159
  document,
160
- config: await makeConfig({ spec: 'error' }),
160
+ config: await makeConfig({ rules: { spec: 'error' } }),
161
161
  });
162
162
 
163
163
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -231,7 +231,7 @@ describe('Oas3 spec', () => {
231
231
  const results = await lintDocument({
232
232
  externalRefResolver: new BaseResolver(),
233
233
  document,
234
- config: await makeConfig({ spec: 'error' }),
234
+ config: await makeConfig({ rules: { spec: 'error' } }),
235
235
  });
236
236
 
237
237
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -322,7 +322,7 @@ describe('Oas3 spec', () => {
322
322
  const results = await lintDocument({
323
323
  externalRefResolver: new BaseResolver(),
324
324
  document,
325
- config: await makeConfig({ spec: 'error' }),
325
+ config: await makeConfig({ rules: { spec: 'error' } }),
326
326
  });
327
327
 
328
328
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -384,7 +384,7 @@ describe('Oas3.1 spec', () => {
384
384
  const results = await lintDocument({
385
385
  externalRefResolver: new BaseResolver(),
386
386
  document,
387
- config: await makeConfig({ spec: 'error' }),
387
+ config: await makeConfig({ rules: { spec: 'error' } }),
388
388
  });
389
389
 
390
390
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -432,7 +432,7 @@ describe('Oas3.1 spec', () => {
432
432
  const results = await lintDocument({
433
433
  externalRefResolver: new BaseResolver(),
434
434
  document,
435
- config: await makeConfig({ spec: 'error' }),
435
+ config: await makeConfig({ rules: { spec: 'error' } }),
436
436
  });
437
437
 
438
438
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -486,7 +486,7 @@ describe('Oas3.1 spec', () => {
486
486
  const results = await lintDocument({
487
487
  externalRefResolver: new BaseResolver(),
488
488
  document,
489
- config: await makeConfig({ spec: 'error' }),
489
+ config: await makeConfig({ rules: { spec: 'error' } }),
490
490
  });
491
491
 
492
492
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -557,7 +557,7 @@ describe('Oas3.1 spec', () => {
557
557
  const results = await lintDocument({
558
558
  externalRefResolver: new BaseResolver(),
559
559
  document,
560
- config: await makeConfig({ spec: 'error' }),
560
+ config: await makeConfig({ rules: { spec: 'error' } }),
561
561
  });
562
562
 
563
563
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -632,7 +632,7 @@ describe('Oas3.1 spec', () => {
632
632
  const results = await lintDocument({
633
633
  externalRefResolver: new BaseResolver(),
634
634
  document,
635
- config: await makeConfig({ spec: 'error' }),
635
+ config: await makeConfig({ rules: { spec: 'error' } }),
636
636
  });
637
637
 
638
638
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -19,7 +19,7 @@ describe('Oas3 tag-description', () => {
19
19
  const results = await lintDocument({
20
20
  externalRefResolver: new BaseResolver(),
21
21
  document,
22
- config: await makeConfig({ 'tag-description': 'error' }),
22
+ config: await makeConfig({ rules: { 'tag-description': 'error' } }),
23
23
  });
24
24
 
25
25
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -57,7 +57,7 @@ describe('Oas3 tag-description', () => {
57
57
  const results = await lintDocument({
58
58
  externalRefResolver: new BaseResolver(),
59
59
  document,
60
- config: await makeConfig({ 'tag-description': 'error' }),
60
+ config: await makeConfig({ rules: { 'tag-description': 'error' } }),
61
61
  });
62
62
 
63
63
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -19,7 +19,7 @@ describe('Oas3 tags-alphabetical', () => {
19
19
  const results = await lintDocument({
20
20
  externalRefResolver: new BaseResolver(),
21
21
  document,
22
- config: await makeConfig({ 'tags-alphabetical': 'error' }),
22
+ config: await makeConfig({ rules: { 'tags-alphabetical': 'error' } }),
23
23
  });
24
24
 
25
25
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -56,7 +56,7 @@ describe('Oas3 tags-alphabetical', () => {
56
56
  const results = await lintDocument({
57
57
  externalRefResolver: new BaseResolver(),
58
58
  document,
59
- config: await makeConfig({ 'tags-alphabetical': 'error' }),
59
+ config: await makeConfig({ rules: { 'tags-alphabetical': 'error' } }),
60
60
  });
61
61
 
62
62
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -77,7 +77,7 @@ describe('Oas3 tags-alphabetical', () => {
77
77
  const results = await lintDocument({
78
78
  externalRefResolver: new BaseResolver(),
79
79
  document,
80
- config: await makeConfig({ 'tags-alphabetical': 'error' }),
80
+ config: await makeConfig({ rules: { 'tags-alphabetical': 'error' } }),
81
81
  });
82
82
 
83
83
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -114,7 +114,9 @@ describe('Oas3 tags-alphabetical', () => {
114
114
  const results = await lintDocument({
115
115
  externalRefResolver: new BaseResolver(),
116
116
  document,
117
- config: await makeConfig({ 'tags-alphabetical': { severity: 'error', ignoreCase: true } }),
117
+ config: await makeConfig({
118
+ rules: { 'tags-alphabetical': { severity: 'error', ignoreCase: true } },
119
+ }),
118
120
  });
119
121
 
120
122
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -1,13 +1,9 @@
1
- import { AssertionContext, AssertResult, CustomFunction } from 'core/src/config/types';
2
- import { Location } from '../../../ref-utils';
3
1
  import { isPlainObject, isString as runOnValue, isTruthy } from '../../../utils';
4
- import {
5
- OrderOptions,
6
- OrderDirection,
7
- isOrdered,
8
- getIntersectionLength,
9
- regexFromString,
10
- } from './utils';
2
+ import { isOrdered, getIntersectionLength, regexFromString } from './utils';
3
+
4
+ import type { AssertionContext, AssertResult, CustomFunction } from '../../../config/types';
5
+ import type { Location } from '../../../ref-utils';
6
+ import type { OrderOptions, OrderDirection } from './utils';
11
7
 
12
8
  export type AssertionFnContext = AssertionContext & { baseLocation: Location; rawValue?: any };
13
9
 
@@ -1,9 +1,16 @@
1
- import { asserts, AssertionFn } from './asserts';
2
1
  import { buildSubjectVisitor, buildVisitorObject } from './utils';
3
- import { Oas2Visitor, Oas3Visitor } from '../../../visitors';
4
- import { RuleSeverity } from '../../../config';
5
2
  import { isString } from '../../../utils';
6
3
 
4
+ import type { asserts, AssertionFn } from './asserts';
5
+ import type {
6
+ ArazzoVisitor,
7
+ Async2Visitor,
8
+ Async3Visitor,
9
+ Oas2Visitor,
10
+ Oas3Visitor,
11
+ } from '../../../visitors';
12
+ import type { RuleSeverity } from '../../../config';
13
+
7
14
  export type AssertionLocators = {
8
15
  filterInParentKeys?: (string | number)[];
9
16
  filterOutParentKeys?: (string | number)[];
@@ -28,7 +35,8 @@ export type RawAssertion = AssertionDefinition & {
28
35
  export type Assertion = RawAssertion & { assertionId: string };
29
36
 
30
37
  export const Assertions = (opts: Record<string, Assertion>) => {
31
- const visitors: (Oas2Visitor | Oas3Visitor)[] = [];
38
+ const visitors: (Oas2Visitor | Oas3Visitor | Async2Visitor | Async3Visitor | ArazzoVisitor)[] =
39
+ [];
32
40
 
33
41
  // As 'Assertions' has an array of asserts,
34
42
  // that array spreads into an 'opts' object on init rules phase here
@@ -1,7 +1,10 @@
1
- import { asserts, runOnKeysSet, runOnValuesSet, Asserts } from './asserts';
1
+ import { asserts, runOnKeysSet, runOnValuesSet } from './asserts';
2
2
  import { colorize } from '../../../logger';
3
3
  import { isRef } from '../../../ref-utils';
4
4
  import { isTruthy, keysOf, isString } from '../../../utils';
5
+
6
+ import type { UserContext } from 'core/src/walk';
7
+ import type { Asserts } from './asserts';
5
8
  import type { AssertionContext, AssertResult } from '../../../config';
6
9
  import type { Assertion, AssertionDefinition, AssertionLocators } from '.';
7
10
  import type {
@@ -10,7 +13,6 @@ import type {
10
13
  SkipFunctionContext,
11
14
  VisitFunction,
12
15
  } from '../../../visitors';
13
- import { UserContext } from 'core/src/walk';
14
16
 
15
17
  export type OrderDirection = 'asc' | 'desc';
16
18
 
@@ -1,6 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
1
  import { missingRequiredField } from '../utils';
3
2
 
3
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
4
+
4
5
  export const InfoContact: Oas3Rule | Oas2Rule = () => {
5
6
  return {
6
7
  Info(info, { report, location }) {
@@ -0,0 +1,24 @@
1
+ import { detectSpec } from '../../oas-types';
2
+ import { validateDefinedAndNonEmpty, validateOneOfDefinedAndNonEmpty } from '../utils';
3
+
4
+ import type { Oas3Rule, Oas2Rule, Async2Rule, Async3Rule } from '../../visitors';
5
+
6
+ export const InfoLicenseStrict: Oas2Rule | Oas3Rule | Async2Rule | Async3Rule = () => {
7
+ let specVersion: string | undefined;
8
+ return {
9
+ Root: {
10
+ enter(root: any) {
11
+ specVersion = detectSpec(root);
12
+ },
13
+ License: {
14
+ leave(license, ctx) {
15
+ if (specVersion === 'oas3_1') {
16
+ validateOneOfDefinedAndNonEmpty(['url', 'identifier'], license, ctx);
17
+ } else {
18
+ validateDefinedAndNonEmpty('url', license, ctx);
19
+ }
20
+ },
21
+ },
22
+ },
23
+ };
24
+ };
@@ -1,6 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
1
  import { validateDefinedAndNonEmpty } from '../utils';
3
2
 
3
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
4
+
4
5
  export const InfoLicenseUrl: Oas3Rule | Oas2Rule = () => {
5
6
  return {
6
7
  License(license, ctx) {
@@ -1,6 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
1
  import { missingRequiredField } from '../utils';
3
2
 
3
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
4
+
4
5
  export const InfoLicense: Oas3Rule | Oas2Rule = () => {
5
6
  return {
6
7
  Info(info, { report }) {
@@ -1,7 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { Oas3Paths } from '../../typings/openapi';
4
- import { Oas2Paths } from '../../typings/swagger';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { UserContext } from '../../walk';
3
+ import type { Oas3Paths } from '../../typings/openapi';
4
+ import type { Oas2Paths } from '../../typings/swagger';
5
5
 
6
6
  export const NoAmbiguousPaths: Oas3Rule | Oas2Rule = () => {
7
7
  return {
@@ -1,8 +1,9 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
1
  import { matchesJsonSchemaType, oasTypeOf } from '../utils';
3
- import { Oas2Schema } from '../../typings/swagger';
4
- import { Oas3Schema } from '../../typings/openapi';
5
- import { UserContext } from '../../walk';
2
+
3
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
4
+ import type { Oas2Schema } from '../../typings/swagger';
5
+ import type { Oas3Schema } from '../../typings/openapi';
6
+ import type { UserContext } from '../../walk';
6
7
 
7
8
  export const NoEnumTypeMismatch: Oas3Rule | Oas2Rule = () => {
8
9
  return {
@@ -1,9 +1,10 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { Oas2PathItem } from '../../typings/swagger';
3
- import { Oas3PathItem } from '../../typings/openapi';
4
- import { UserContext } from '../../walk';
5
1
  import { isPathParameter, splitCamelCaseIntoWords } from '../../utils';
6
2
 
3
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
4
+ import type { Oas2PathItem } from '../../typings/swagger';
5
+ import type { Oas3PathItem } from '../../typings/openapi';
6
+ import type { UserContext } from '../../walk';
7
+
7
8
  const httpMethods = ['get', 'head', 'post', 'put', 'patch', 'delete', 'options', 'trace'];
8
9
 
9
10
  export const NoHttpVerbsInPaths: Oas3Rule | Oas2Rule = ({ splitIntoWords }) => {
@@ -1,7 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { Oas3Paths } from '../../typings/openapi';
4
- import { Oas2Paths } from '../../typings/swagger';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { UserContext } from '../../walk';
3
+ import type { Oas3Paths } from '../../typings/openapi';
4
+ import type { Oas2Paths } from '../../typings/swagger';
5
5
 
6
6
  export const NoIdenticalPaths: Oas3Rule | Oas2Rule = () => {
7
7
  return {
@@ -1,7 +1,8 @@
1
- import { UserContext } from '../../walk';
2
- import { Oas3Parameter } from '../../typings/openapi';
3
1
  import { getAdditionalPropertiesOption, validateExample } from '../utils';
4
2
 
3
+ import type { UserContext } from '../../walk';
4
+ import type { Oas3Parameter } from '../../typings/openapi';
5
+
5
6
  export const NoInvalidParameterExamples: any = (opts: any) => {
6
7
  const allowAdditionalProperties = getAdditionalPropertiesOption(opts) ?? false;
7
8
  return {
@@ -1,5 +1,5 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { UserContext } from '../../walk';
3
3
 
4
4
  export const NoPathTrailingSlash: Oas3Rule | Oas2Rule = () => {
5
5
  return {
@@ -1,9 +1,10 @@
1
- import { Oas2Rule, Oas3Rule } from '../../visitors';
2
- import { Oas3Schema, Oas3_1Schema } from '../../typings/openapi';
3
- import { Oas2Schema } from 'core/src/typings/swagger';
4
- import { UserContext } from 'core/src/walk';
5
1
  import { isRef } from '../../ref-utils';
6
2
 
3
+ import type { Oas2Rule, Oas3Rule } from '../../visitors';
4
+ import type { Oas3Schema, Oas3_1Schema } from '../../typings/openapi';
5
+ import type { Oas2Schema } from 'core/src/typings/swagger';
6
+ import type { UserContext } from 'core/src/walk';
7
+
7
8
  export const NoRequiredSchemaPropertiesUndefined: Oas3Rule | Oas2Rule = () => {
8
9
  return {
9
10
  Schema: {
@@ -1,7 +1,8 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
1
  import { validateResponseCodes } from '../utils';
4
2
 
3
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
4
+ import type { UserContext } from '../../walk';
5
+
5
6
  export const Operation2xxResponse: Oas3Rule | Oas2Rule = ({ validateWebhooks }) => {
6
7
  return {
7
8
  Paths: {
@@ -1,7 +1,8 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
1
  import { validateResponseCodes } from '../utils';
4
2
 
3
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
4
+ import type { UserContext } from '../../walk';
5
+
5
6
  export const Operation4xxResponse: Oas3Rule | Oas2Rule = ({ validateWebhooks }) => {
6
7
  return {
7
8
  Paths: {
@@ -1,8 +1,9 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
1
  import { validateDefinedAndNonEmpty } from '../utils';
3
- import { UserContext } from '../../walk';
4
- import { Oas2Operation } from '../../typings/swagger';
5
- import { Oas3Operation } from '../../typings/openapi';
2
+
3
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
4
+ import type { UserContext } from '../../walk';
5
+ import type { Oas2Operation } from '../../typings/swagger';
6
+ import type { Oas3Operation } from '../../typings/openapi';
6
7
 
7
8
  export const OperationDescription: Oas3Rule | Oas2Rule = () => {
8
9
  return {
@@ -1,7 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { Oas2Operation } from '../../typings/swagger';
3
- import { Oas3Operation } from '../../typings/openapi';
4
- import { UserContext } from '../../walk';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { Oas2Operation } from '../../typings/swagger';
3
+ import type { Oas3Operation } from '../../typings/openapi';
4
+ import type { UserContext } from '../../walk';
5
5
 
6
6
  export const OperationIdUnique: Oas3Rule | Oas2Rule = () => {
7
7
  const seenOperations = new Set();
@@ -1,8 +1,9 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { Oas2Operation } from '../../typings/swagger';
3
- import { Oas3Operation } from '../../typings/openapi';
4
- import { UserContext } from '../../walk';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { Oas2Operation } from '../../typings/swagger';
3
+ import type { Oas3Operation } from '../../typings/openapi';
4
+ import type { UserContext } from '../../walk';
5
5
 
6
+ // eslint-disable-next-line no-useless-escape
6
7
  const validUrlSymbols = /^[A-Za-z0-9-._~:/?#\[\]@!\$&'()*+,;=]*$/;
7
8
 
8
9
  export const OperationIdUrlSafe: Oas3Rule | Oas2Rule = () => {
@@ -1,8 +1,9 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
1
  import { validateDefinedAndNonEmpty } from '../utils';
3
- import { UserContext } from '../../walk';
4
- import { Oas2Operation } from '../../typings/swagger';
5
- import { Oas3Operation } from '../../typings/openapi';
2
+
3
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
4
+ import type { UserContext } from '../../walk';
5
+ import type { Oas2Operation } from '../../typings/swagger';
6
+ import type { Oas3Operation } from '../../typings/openapi';
6
7
 
7
8
  export const OperationOperationId: Oas3Rule | Oas2Rule = () => {
8
9
  return {
@@ -1,7 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { Oas2Parameter } from '../../typings/swagger';
3
- import { Oas3Parameter } from '../../typings/openapi';
4
- import { UserContext } from '../../walk';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { Oas2Parameter } from '../../typings/swagger';
3
+ import type { Oas3Parameter } from '../../typings/openapi';
4
+ import type { UserContext } from '../../walk';
5
5
 
6
6
  export const OperationParametersUnique: Oas3Rule | Oas2Rule = () => {
7
7
  let seenPathParams: Set<string>;
@@ -1,7 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { Oas2Operation } from '../../typings/swagger';
3
- import { Oas3Operation } from '../../typings/openapi';
4
- import { UserContext } from '../../walk';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { Oas2Operation } from '../../typings/swagger';
3
+ import type { Oas3Operation } from '../../typings/openapi';
4
+ import type { UserContext } from '../../walk';
5
5
 
6
6
  export const OperationSingularTag: Oas3Rule | Oas2Rule = () => {
7
7
  return {
@@ -1,8 +1,9 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
1
  import { validateDefinedAndNonEmpty } from '../utils';
3
- import { UserContext } from '../../walk';
4
- import { Oas2Operation } from '../../typings/swagger';
5
- import { Oas3Operation } from '../../typings/openapi';
2
+
3
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
4
+ import type { UserContext } from '../../walk';
5
+ import type { Oas2Operation } from '../../typings/swagger';
6
+ import type { Oas3Operation } from '../../typings/openapi';
6
7
 
7
8
  export const OperationSummary: Oas3Rule | Oas2Rule = () => {
8
9
  return {
@@ -1,7 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { Oas2Definition, Oas2Operation } from '../../typings/swagger';
3
- import { Oas3Definition, Oas3Operation } from '../../typings/openapi';
4
- import { UserContext } from '../../walk';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { Oas2Definition, Oas2Operation } from '../../typings/swagger';
3
+ import type { Oas3Definition, Oas3Operation } from '../../typings/openapi';
4
+ import type { UserContext } from '../../walk';
5
5
 
6
6
  export const OperationTagDefined: Oas3Rule | Oas2Rule = () => {
7
7
  let definedTags: Set<string>;
@@ -1,7 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { Oas2Parameter } from '../../typings/swagger';
3
- import { Oas3Parameter } from '../../typings/openapi';
4
- import { UserContext } from '../../walk';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { Oas2Parameter } from '../../typings/swagger';
3
+ import type { Oas3Parameter } from '../../typings/openapi';
4
+ import type { UserContext } from '../../walk';
5
5
 
6
6
  export const ParameterDescription: Oas3Rule | Oas2Rule = () => {
7
7
  return {
@@ -1,5 +1,5 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { UserContext } from '../../walk';
3
3
 
4
4
  export const PathDeclarationMustExist: Oas3Rule | Oas2Rule = () => {
5
5
  return {
@@ -1,7 +1,7 @@
1
- import { Oas2Rule, Oas3Rule } from '../../visitors';
2
- import { Oas2PathItem } from '../../typings/swagger';
3
- import { Oas3PathItem } from '../../typings/openapi';
4
- import { UserContext } from '../../walk';
1
+ import type { Oas2Rule, Oas3Rule } from '../../visitors';
2
+ import type { Oas2PathItem } from '../../typings/swagger';
3
+ import type { Oas3PathItem } from '../../typings/openapi';
4
+ import type { UserContext } from '../../walk';
5
5
 
6
6
  export const PathExcludesPatterns: Oas3Rule | Oas2Rule = ({ patterns }) => {
7
7
  return {
@@ -1,7 +1,7 @@
1
- import { Oas3Rule, Oas2Rule } from '../../visitors';
2
- import { Oas2PathItem } from '../../typings/swagger';
3
- import { Oas3PathItem } from '../../typings/openapi';
4
- import { UserContext } from '../../walk';
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ import type { Oas2PathItem } from '../../typings/swagger';
3
+ import type { Oas3PathItem } from '../../typings/openapi';
4
+ import type { UserContext } from '../../walk';
5
5
 
6
6
  const defaultOrder = ['get', 'head', 'post', 'put', 'patch', 'delete', 'options', 'trace'];
7
7