@redocly/openapi-core 1.19.0 → 1.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/CHANGELOG.md +14 -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 +5 -1
  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 +5 -1
  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 +5 -1
  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 +17 -13
  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 +16 -12
  13. package/lib/benchmark/utils.d.ts +3 -3
  14. package/lib/benchmark/utils.js +3 -3
  15. package/lib/config/all.js +4 -1
  16. package/lib/config/builtIn.js +15 -20
  17. package/lib/config/config-resolvers.d.ts +1 -1
  18. package/lib/config/config-resolvers.js +67 -28
  19. package/lib/config/config.d.ts +3 -2
  20. package/lib/config/load.d.ts +1 -1
  21. package/lib/config/minimal.js +4 -0
  22. package/lib/config/recommended-strict.js +5 -1
  23. package/lib/config/recommended.js +5 -1
  24. package/lib/config/types.d.ts +9 -2
  25. package/lib/config/utils.d.ts +3 -1
  26. package/lib/config/utils.js +8 -0
  27. package/lib/decorators/common/filters/filter-helper.d.ts +1 -1
  28. package/lib/decorators/common/filters/filter-in.d.ts +1 -1
  29. package/lib/decorators/common/filters/filter-out.d.ts +1 -1
  30. package/lib/decorators/common/info-description-override.d.ts +1 -1
  31. package/lib/decorators/common/info-override.d.ts +1 -1
  32. package/lib/decorators/common/media-type-examples-override.d.ts +1 -1
  33. package/lib/decorators/common/operation-description-override.d.ts +1 -1
  34. package/lib/decorators/common/registry-dependencies.d.ts +1 -1
  35. package/lib/decorators/common/remove-x-internal.d.ts +1 -1
  36. package/lib/decorators/common/tag-description-override.d.ts +1 -1
  37. package/lib/decorators/oas2/index.d.ts +1 -1
  38. package/lib/decorators/oas3/index.d.ts +1 -1
  39. package/lib/format/codeframes.d.ts +1 -1
  40. package/lib/format/format.d.ts +1 -1
  41. package/lib/format/format.js +1 -1
  42. package/lib/js-yaml/index.d.ts +1 -1
  43. package/lib/lint.d.ts +1 -1
  44. package/lib/logger.js +2 -2
  45. package/lib/oas-types.d.ts +2 -2
  46. package/lib/redocly/domains.d.ts +1 -1
  47. package/lib/redocly/index.d.ts +1 -1
  48. package/lib/ref-utils.d.ts +2 -2
  49. package/lib/ref-utils.js +1 -0
  50. package/lib/resolve.d.ts +2 -2
  51. package/lib/rules/ajv.d.ts +1 -1
  52. package/lib/rules/arazzo/index.js +2 -0
  53. package/lib/rules/async2/channels-kebab-case.d.ts +1 -1
  54. package/lib/rules/async2/index.js +2 -0
  55. package/lib/rules/async2/no-channel-trailing-slash.d.ts +1 -1
  56. package/lib/rules/async3/channels-kebab-case.d.ts +1 -1
  57. package/lib/rules/async3/index.js +2 -0
  58. package/lib/rules/async3/no-channel-trailing-slash.d.ts +1 -1
  59. package/lib/rules/common/assertions/asserts.d.ts +2 -2
  60. package/lib/rules/common/assertions/index.d.ts +1 -2
  61. package/lib/rules/common/assertions/utils.d.ts +1 -1
  62. package/lib/rules/common/info-contact.d.ts +1 -1
  63. package/lib/rules/common/info-license-strict.d.ts +2 -0
  64. package/lib/rules/common/info-license-strict.js +26 -0
  65. package/lib/rules/common/info-license-url.d.ts +1 -1
  66. package/lib/rules/common/info-license.d.ts +1 -1
  67. package/lib/rules/common/no-ambiguous-paths.d.ts +1 -1
  68. package/lib/rules/common/no-enum-type-mismatch.d.ts +1 -1
  69. package/lib/rules/common/no-http-verbs-in-paths.d.ts +1 -1
  70. package/lib/rules/common/no-identical-paths.d.ts +1 -1
  71. package/lib/rules/common/no-path-trailing-slash.d.ts +1 -1
  72. package/lib/rules/common/no-required-schema-properties-undefined.d.ts +1 -1
  73. package/lib/rules/common/operation-2xx-response.d.ts +1 -1
  74. package/lib/rules/common/operation-4xx-response.d.ts +1 -1
  75. package/lib/rules/common/operation-description.d.ts +1 -1
  76. package/lib/rules/common/operation-operationId-unique.d.ts +1 -1
  77. package/lib/rules/common/operation-operationId-url-safe.d.ts +1 -1
  78. package/lib/rules/common/operation-operationId-url-safe.js +1 -0
  79. package/lib/rules/common/operation-operationId.d.ts +1 -1
  80. package/lib/rules/common/operation-parameters-unique.d.ts +1 -1
  81. package/lib/rules/common/operation-singular-tag.d.ts +1 -1
  82. package/lib/rules/common/operation-summary.d.ts +1 -1
  83. package/lib/rules/common/operation-tag-defined.d.ts +1 -1
  84. package/lib/rules/common/parameter-description.d.ts +1 -1
  85. package/lib/rules/common/path-declaration-must-exist.d.ts +1 -1
  86. package/lib/rules/common/path-excludes-patterns.d.ts +1 -1
  87. package/lib/rules/common/path-http-verbs-order.d.ts +1 -1
  88. package/lib/rules/common/path-not-include-query.d.ts +1 -1
  89. package/lib/rules/common/path-params-defined.d.ts +1 -1
  90. package/lib/rules/common/path-segment-plural.d.ts +1 -1
  91. package/lib/rules/common/paths-kebab-case.d.ts +1 -1
  92. package/lib/rules/common/required-string-property-missing-min-length.d.ts +1 -1
  93. package/lib/rules/common/response-contains-header.d.ts +1 -1
  94. package/lib/rules/common/security-defined.d.ts +1 -1
  95. package/lib/rules/common/spec-strict-refs.d.ts +1 -1
  96. package/lib/rules/common/tag-description.d.ts +1 -1
  97. package/lib/rules/common/tags-alphabetical.d.ts +1 -1
  98. package/lib/rules/no-unresolved-refs.d.ts +3 -3
  99. package/lib/rules/oas2/boolean-parameter-prefixes.d.ts +1 -1
  100. package/lib/rules/oas2/index.d.ts +1 -1
  101. package/lib/rules/oas2/index.js +2 -0
  102. package/lib/rules/oas2/response-contains-property.d.ts +1 -1
  103. package/lib/rules/oas3/array-parameter-serialization.d.ts +1 -1
  104. package/lib/rules/oas3/boolean-parameter-prefixes.d.ts +1 -1
  105. package/lib/rules/oas3/component-name-unique.d.ts +1 -1
  106. package/lib/rules/oas3/index.d.ts +1 -1
  107. package/lib/rules/oas3/index.js +2 -0
  108. package/lib/rules/oas3/no-empty-servers.d.ts +1 -1
  109. package/lib/rules/oas3/no-example-value-and-externalValue.d.ts +1 -1
  110. package/lib/rules/oas3/no-invalid-media-type-examples.d.ts +1 -1
  111. package/lib/rules/oas3/no-server-example.com.d.ts +1 -1
  112. package/lib/rules/oas3/no-server-example.com.js +1 -0
  113. package/lib/rules/oas3/no-server-trailing-slash.d.ts +1 -1
  114. package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +1 -1
  115. package/lib/rules/oas3/no-undefined-server-variable.d.ts +1 -1
  116. package/lib/rules/oas3/no-unused-components.d.ts +1 -1
  117. package/lib/rules/oas3/response-contains-property.d.ts +1 -1
  118. package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +1 -1
  119. package/lib/rules/other/stats.d.ts +3 -3
  120. package/lib/rules/other/stats.js +5 -3
  121. package/lib/rules/spot/parameters-no-body-inside-in.d.ts +2 -0
  122. package/lib/rules/spot/parameters-no-body-inside-in.js +18 -0
  123. package/lib/rules/utils.d.ts +4 -2
  124. package/lib/rules/utils.js +27 -1
  125. package/lib/types/arazzo.d.ts +1 -2275
  126. package/lib/types/arazzo.js +246 -309
  127. package/lib/types/asyncapi2.d.ts +1 -1
  128. package/lib/types/asyncapi2.js +3 -1
  129. package/lib/types/asyncapi3.d.ts +1 -1
  130. package/lib/types/json-schema-adapter.d.ts +1 -1
  131. package/lib/types/oas3.d.ts +4 -0
  132. package/lib/types/oas3.js +9 -9
  133. package/lib/types/oas3_1.d.ts +3 -0
  134. package/lib/types/oas3_1.js +8 -8
  135. package/lib/types/redocly-yaml.d.ts +6 -6
  136. package/lib/types/redocly-yaml.js +4 -1
  137. package/lib/typings/arazzo.d.ts +145 -27
  138. package/lib/typings/common.d.ts +1 -1
  139. package/lib/typings/swagger.d.ts +2 -2
  140. package/lib/visitors.d.ts +18 -1
  141. package/lib/walk.d.ts +3 -3
  142. package/package.json +2 -2
  143. package/src/__tests__/bundle.test.ts +4 -4
  144. package/src/__tests__/lint.test.ts +29 -21
  145. package/src/__tests__/walk.test.ts +25 -25
  146. package/src/benchmark/benches/lint-with-many-rules.bench.ts +7 -1
  147. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +7 -1
  148. package/src/benchmark/benches/lint-with-no-rules.bench.ts +8 -1
  149. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +18 -13
  150. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +17 -11
  151. package/src/benchmark/fork.js +4 -0
  152. package/src/benchmark/utils.ts +6 -5
  153. package/src/bundle.ts +2 -1
  154. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +10 -2
  155. package/src/config/__tests__/config-resolvers.test.ts +82 -0
  156. package/src/config/__tests__/fixtures/resolve-config/local-config-with-commonjs-export-function.yaml +2 -0
  157. package/src/config/__tests__/fixtures/resolve-config/local-config-with-esm.yaml +2 -0
  158. package/src/config/__tests__/fixtures/resolve-config/plugin-esm.mjs +10 -0
  159. package/src/config/__tests__/fixtures/resolve-config/plugin-with-export-function.cjs +10 -0
  160. package/src/config/__tests__/resolve-plugins.test.ts +4 -1
  161. package/src/config/all.ts +4 -1
  162. package/src/config/builtIn.ts +5 -10
  163. package/src/config/config-resolvers.ts +78 -23
  164. package/src/config/config.ts +7 -8
  165. package/src/config/load.ts +2 -2
  166. package/src/config/minimal.ts +4 -0
  167. package/src/config/recommended-strict.ts +5 -1
  168. package/src/config/recommended.ts +5 -1
  169. package/src/config/types.ts +19 -3
  170. package/src/config/utils.ts +13 -2
  171. package/src/decorators/__tests__/filter-in.test.ts +29 -26
  172. package/src/decorators/__tests__/filter-out.test.ts +32 -23
  173. package/src/decorators/__tests__/media-type-examples-override.test.ts +45 -45
  174. package/src/decorators/__tests__/remove-x-internal.test.ts +8 -5
  175. package/src/decorators/common/filters/filter-helper.ts +2 -1
  176. package/src/decorators/common/filters/filter-in.ts +2 -1
  177. package/src/decorators/common/filters/filter-out.ts +2 -1
  178. package/src/decorators/common/info-description-override.ts +3 -2
  179. package/src/decorators/common/info-override.ts +1 -1
  180. package/src/decorators/common/media-type-examples-override.ts +4 -3
  181. package/src/decorators/common/operation-description-override.ts +5 -4
  182. package/src/decorators/common/registry-dependencies.ts +2 -2
  183. package/src/decorators/common/remove-x-internal.ts +3 -2
  184. package/src/decorators/common/tag-description-override.ts +3 -2
  185. package/src/decorators/oas2/__tests__/remove-unused-components.test.ts +3 -3
  186. package/src/decorators/oas2/index.ts +2 -1
  187. package/src/decorators/oas2/remove-unused-components.ts +1 -1
  188. package/src/decorators/oas3/__tests__/remove-unused-components.test.ts +4 -4
  189. package/src/decorators/oas3/index.ts +2 -1
  190. package/src/decorators/oas3/remove-unused-components.ts +1 -1
  191. package/src/format/codeframes.ts +2 -1
  192. package/src/format/format.ts +9 -4
  193. package/src/js-yaml/index.ts +3 -1
  194. package/src/lint.ts +2 -1
  195. package/src/logger.ts +2 -2
  196. package/src/oas-types.ts +14 -13
  197. package/src/redocly/domains.ts +1 -1
  198. package/src/redocly/index.ts +3 -3
  199. package/src/redocly/registry-api.ts +5 -3
  200. package/src/ref-utils.ts +4 -2
  201. package/src/resolve.ts +6 -4
  202. package/src/rules/__tests__/no-unresolved-refs.test.ts +21 -7
  203. package/src/rules/ajv.ts +2 -1
  204. package/src/rules/arazzo/__tests__/parameters-no-body-inside-in.test.ts +76 -0
  205. package/src/rules/arazzo/index.ts +5 -2
  206. package/src/rules/async2/__tests__/channels-kebab-case.test.ts +9 -5
  207. package/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts +3 -3
  208. package/src/rules/async2/channels-kebab-case.ts +2 -2
  209. package/src/rules/async2/index.ts +4 -1
  210. package/src/rules/async2/no-channel-trailing-slash.ts +2 -2
  211. package/src/rules/async3/__tests__/channels-kebab-case.test.ts +9 -5
  212. package/src/rules/async3/__tests__/no-channel-trailing-slash.test.ts +3 -3
  213. package/src/rules/async3/channels-kebab-case.ts +3 -3
  214. package/src/rules/async3/index.ts +4 -1
  215. package/src/rules/async3/no-channel-trailing-slash.ts +3 -3
  216. package/src/rules/common/__tests__/info-license-strict.test.ts +141 -0
  217. package/src/rules/common/__tests__/info-license.test.ts +2 -2
  218. package/src/rules/common/__tests__/license-url.test.ts +2 -2
  219. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +1 -1
  220. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +5 -5
  221. package/src/rules/common/__tests__/no-identical-paths.test.ts +1 -1
  222. package/src/rules/common/__tests__/no-invalid-parameter-examples.test.ts +1 -1
  223. package/src/rules/common/__tests__/no-invalid-schema-examples.test.ts +1 -1
  224. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +4 -4
  225. package/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts +11 -11
  226. package/src/rules/common/__tests__/operation-2xx-response.test.ts +8 -6
  227. package/src/rules/common/__tests__/operation-4xx-response.test.ts +9 -7
  228. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +2 -2
  229. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +1 -1
  230. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +4 -4
  231. package/src/rules/common/__tests__/operation-singular-tag.test.ts +2 -2
  232. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +2 -2
  233. package/src/rules/common/__tests__/path-not-include-query.test.ts +2 -2
  234. package/src/rules/common/__tests__/path-params-defined.test.ts +5 -5
  235. package/src/rules/common/__tests__/paths-kebab-case.test.ts +6 -4
  236. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +8 -8
  237. package/src/rules/common/__tests__/security-defined.test.ts +14 -8
  238. package/src/rules/common/__tests__/spec-strict-refs.test.ts +1 -1
  239. package/src/rules/common/__tests__/spec.test.ts +10 -10
  240. package/src/rules/common/__tests__/tag-description.test.ts +2 -2
  241. package/src/rules/common/__tests__/tags-alphabetical.test.ts +6 -4
  242. package/src/rules/common/assertions/asserts.ts +5 -9
  243. package/src/rules/common/assertions/index.ts +1 -2
  244. package/src/rules/common/assertions/utils.ts +4 -2
  245. package/src/rules/common/info-contact.ts +2 -1
  246. package/src/rules/common/info-license-strict.ts +24 -0
  247. package/src/rules/common/info-license-url.ts +2 -1
  248. package/src/rules/common/info-license.ts +2 -1
  249. package/src/rules/common/no-ambiguous-paths.ts +4 -4
  250. package/src/rules/common/no-enum-type-mismatch.ts +5 -4
  251. package/src/rules/common/no-http-verbs-in-paths.ts +5 -4
  252. package/src/rules/common/no-identical-paths.ts +4 -4
  253. package/src/rules/common/no-invalid-parameter-examples.ts +3 -2
  254. package/src/rules/common/no-path-trailing-slash.ts +2 -2
  255. package/src/rules/common/no-required-schema-properties-undefined.ts +5 -4
  256. package/src/rules/common/operation-2xx-response.ts +3 -2
  257. package/src/rules/common/operation-4xx-response.ts +3 -2
  258. package/src/rules/common/operation-description.ts +5 -4
  259. package/src/rules/common/operation-operationId-unique.ts +4 -4
  260. package/src/rules/common/operation-operationId-url-safe.ts +5 -4
  261. package/src/rules/common/operation-operationId.ts +5 -4
  262. package/src/rules/common/operation-parameters-unique.ts +4 -4
  263. package/src/rules/common/operation-singular-tag.ts +4 -4
  264. package/src/rules/common/operation-summary.ts +5 -4
  265. package/src/rules/common/operation-tag-defined.ts +4 -4
  266. package/src/rules/common/parameter-description.ts +4 -4
  267. package/src/rules/common/path-declaration-must-exist.ts +2 -2
  268. package/src/rules/common/path-excludes-patterns.ts +4 -4
  269. package/src/rules/common/path-http-verbs-order.ts +4 -4
  270. package/src/rules/common/path-not-include-query.ts +2 -2
  271. package/src/rules/common/path-params-defined.ts +4 -4
  272. package/src/rules/common/path-segment-plural.ts +3 -2
  273. package/src/rules/common/paths-kebab-case.ts +2 -2
  274. package/src/rules/common/required-string-property-missing-min-length.ts +4 -4
  275. package/src/rules/common/response-contains-header.ts +5 -4
  276. package/src/rules/common/scalar-property-missing-example.ts +2 -1
  277. package/src/rules/common/security-defined.ts +5 -5
  278. package/src/rules/common/spec-strict-refs.ts +2 -1
  279. package/src/rules/common/spec.ts +3 -2
  280. package/src/rules/common/tag-description.ts +2 -1
  281. package/src/rules/common/tags-alphabetical.ts +4 -4
  282. package/src/rules/no-unresolved-refs.ts +4 -3
  283. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +7 -5
  284. package/src/rules/oas2/__tests__/response-contains-header.test.ts +14 -8
  285. package/src/rules/oas2/__tests__/response-contains-property.test.ts +14 -8
  286. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +3 -1
  287. package/src/rules/oas2/boolean-parameter-prefixes.ts +1 -1
  288. package/src/rules/oas2/index.ts +4 -2
  289. package/src/rules/oas2/request-mime-type.ts +2 -1
  290. package/src/rules/oas2/response-contains-property.ts +3 -2
  291. package/src/rules/oas2/response-mime-type.ts +2 -1
  292. package/src/rules/oas3/__tests__/array-parameter-serialization.test.ts +18 -6
  293. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +7 -5
  294. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +6 -6
  295. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +2 -2
  296. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +34 -24
  297. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +3 -3
  298. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +3 -3
  299. package/src/rules/oas3/__tests__/no-unused-components.test.ts +1 -1
  300. package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +3 -3
  301. package/src/rules/oas3/__tests__/response-contains-header.test.ts +34 -22
  302. package/src/rules/oas3/__tests__/response-contains-property.test.ts +34 -20
  303. package/src/rules/oas3/__tests__/spec/spec.test.ts +12 -3
  304. package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +9 -3
  305. package/src/rules/oas3/__tests__/utils/lint-document-for-test.ts +1 -1
  306. package/src/rules/oas3/array-parameter-serialization.ts +3 -2
  307. package/src/rules/oas3/boolean-parameter-prefixes.ts +1 -1
  308. package/src/rules/oas3/component-name-unique.ts +3 -3
  309. package/src/rules/oas3/index.ts +3 -1
  310. package/src/rules/oas3/no-empty-servers.ts +1 -1
  311. package/src/rules/oas3/no-example-value-and-externalValue.ts +1 -1
  312. package/src/rules/oas3/no-invalid-media-type-examples.ts +6 -4
  313. package/src/rules/oas3/no-server-example.com.ts +2 -1
  314. package/src/rules/oas3/no-server-trailing-slash.ts +1 -1
  315. package/src/rules/oas3/no-server-variables-empty-enum.ts +2 -2
  316. package/src/rules/oas3/no-undefined-server-variable.ts +1 -1
  317. package/src/rules/oas3/no-unused-components.ts +2 -2
  318. package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +2 -1
  319. package/src/rules/oas3/request-mime-type.ts +2 -1
  320. package/src/rules/oas3/response-contains-property.ts +3 -2
  321. package/src/rules/oas3/response-mime-type.ts +2 -1
  322. package/src/rules/oas3/spec-components-invalid-map-name.ts +3 -3
  323. package/src/rules/other/stats.ts +8 -6
  324. package/src/rules/spot/parameters-no-body-inside-in.ts +17 -0
  325. package/src/rules/utils.ts +41 -4
  326. package/src/types/arazzo.ts +257 -334
  327. package/src/types/asyncapi2.ts +4 -1
  328. package/src/types/asyncapi3.ts +3 -1
  329. package/src/types/json-schema-adapter.ts +2 -2
  330. package/src/types/oas3.ts +4 -4
  331. package/src/types/oas3_1.ts +3 -3
  332. package/src/types/redocly-yaml.ts +7 -4
  333. package/src/typings/arazzo.ts +169 -41
  334. package/src/typings/common.ts +1 -0
  335. package/src/typings/swagger.ts +2 -2
  336. package/src/visitors.ts +40 -1
  337. package/src/walk.ts +3 -3
  338. package/tsconfig.tsbuildinfo +1 -1
package/src/lint.ts CHANGED
@@ -2,7 +2,7 @@ import { rootRedoclyConfigSchema } from '@redocly/config';
2
2
  import { BaseResolver, resolveDocument, makeDocumentFromString } from './resolve';
3
3
  import { normalizeVisitors } from './visitors';
4
4
  import { walkDocument } from './walk';
5
- import { StyleguideConfig, Config, initRules } from './config';
5
+ import { initRules } from './config';
6
6
  import { normalizeTypes } from './types';
7
7
  import { releaseAjvInstance } from './rules/ajv';
8
8
  import { SpecVersion, getMajorSpecVersion, detectSpec, getTypes } from './oas-types';
@@ -10,6 +10,7 @@ import { createConfigTypes } from './types/redocly-yaml';
10
10
  import { Spec } from './rules/common/spec';
11
11
  import { NoUnresolvedRefs } from './rules/no-unresolved-refs';
12
12
 
13
+ import type { StyleguideConfig, Config } from './config';
13
14
  import type { Document, ResolvedRefMap } from './resolve';
14
15
  import type { ProblemSeverity, WalkContext } from './walk';
15
16
  import type { NodeType } from './types';
package/src/logger.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import * as colorette from 'colorette';
2
- export { options as colorOptions } from 'colorette';
3
-
4
2
  import { isBrowser } from './env';
5
3
  import { identity } from './utils';
6
4
 
5
+ export { options as colorOptions } from 'colorette';
6
+
7
7
  export const colorize = new Proxy(colorette, {
8
8
  get(target: typeof colorette, prop: string): typeof identity {
9
9
  if (isBrowser) {
package/src/oas-types.ts CHANGED
@@ -1,21 +1,11 @@
1
- import type {
2
- Oas3Rule,
3
- Oas3Preprocessor,
4
- Oas2Rule,
5
- Oas2Preprocessor,
6
- Async2Preprocessor,
7
- Async2Rule,
8
- Async3Preprocessor,
9
- Async3Rule,
10
- ArazzoPreprocessor,
11
- ArazzoRule,
12
- } from './visitors';
13
1
  import { Oas2Types } from './types/oas2';
14
2
  import { Oas3Types } from './types/oas3';
15
3
  import { Oas3_1Types } from './types/oas3_1';
16
4
  import { AsyncApi2Types } from './types/asyncapi2';
17
5
  import { AsyncApi3Types } from './types/asyncapi3';
18
6
  import { ArazzoTypes } from './types/arazzo';
7
+ import { isPlainObject } from './utils';
8
+
19
9
  import type {
20
10
  BuiltInAsync2RuleId,
21
11
  BuiltInAsync3RuleId,
@@ -24,7 +14,18 @@ import type {
24
14
  BuiltInOAS2RuleId,
25
15
  BuiltInOAS3RuleId,
26
16
  } from './types/redocly-yaml';
27
- import { isPlainObject } from './utils';
17
+ import type {
18
+ Oas3Rule,
19
+ Oas3Preprocessor,
20
+ Oas2Rule,
21
+ Oas2Preprocessor,
22
+ Async2Preprocessor,
23
+ Async2Rule,
24
+ Async3Preprocessor,
25
+ Async3Rule,
26
+ ArazzoPreprocessor,
27
+ ArazzoRule,
28
+ } from './visitors';
28
29
 
29
30
  export enum SpecVersion {
30
31
  OAS2 = 'oas2',
@@ -1,4 +1,4 @@
1
- import { Region } from '../config/types';
1
+ import type { Region } from '../config/types';
2
2
 
3
3
  let redoclyDomain = 'redocly.com';
4
4
 
@@ -3,11 +3,8 @@ import { resolve } from 'path';
3
3
  import { homedir } from 'os';
4
4
  import { RegistryApi } from './registry-api';
5
5
  import { env } from '../env';
6
- import { RegionalToken, RegionalTokenWithValidity } from './redocly-client-types';
7
6
  import { isNotEmptyObject } from '../utils';
8
7
  import { colorize } from '../logger';
9
-
10
- import type { AccessTokens, Region } from '../config/types';
11
8
  import {
12
9
  AVAILABLE_REGIONS,
13
10
  DEFAULT_REGION,
@@ -16,6 +13,9 @@ import {
16
13
  setRedoclyDomain,
17
14
  } from './domains';
18
15
 
16
+ import type { RegionalToken, RegionalTokenWithValidity } from './redocly-client-types';
17
+ import type { AccessTokens, Region } from '../config/types';
18
+
19
19
  export const TOKEN_FILENAME = '.redocly-config.json';
20
20
 
21
21
  export class RedoclyClient {
@@ -1,4 +1,8 @@
1
- import fetch, { RequestInit, HeadersInit } from 'node-fetch';
1
+ import fetch from 'node-fetch';
2
+ import { getProxyAgent, isNotEmptyObject } from '../utils';
3
+ import { getRedoclyDomain } from './domains';
4
+
5
+ import type { RequestInit, HeadersInit } from 'node-fetch';
2
6
  import type {
3
7
  NotFoundProblemResponse,
4
8
  PrepareFileuploadOKResponse,
@@ -6,8 +10,6 @@ import type {
6
10
  PushApiParams,
7
11
  } from './registry-api-types';
8
12
  import type { AccessTokens, Region } from '../config/types';
9
- import { getProxyAgent, isNotEmptyObject } from '../utils';
10
- import { getRedoclyDomain } from './domains';
11
13
 
12
14
  const version = require('../../package.json').version;
13
15
 
package/src/ref-utils.ts CHANGED
@@ -1,7 +1,8 @@
1
- import { Source } from './resolve';
2
- import { OasRef } from './typings/openapi';
3
1
  import { isTruthy } from './utils';
4
2
 
3
+ import type { Source } from './resolve';
4
+ import type { OasRef } from './typings/openapi';
5
+
5
6
  export function joinPointer(base: string, key: string | number) {
6
7
  if (base === '') base = '#/';
7
8
  return base[base.length - 1] === '/' ? base + key : base + '/' + key;
@@ -60,6 +61,7 @@ export function pointerBaseName(pointer: string) {
60
61
  }
61
62
 
62
63
  export function refBaseName(ref: string) {
64
+ // eslint-disable-next-line no-useless-escape
63
65
  const parts = ref.split(/[\/\\]/); // split by '\' and '/'
64
66
  return parts[parts.length - 1].replace(/\.[^.]+$/, ''); // replace extension with empty string
65
67
  }
package/src/resolve.ts CHANGED
@@ -1,11 +1,13 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { OasRef } from './typings/openapi';
4
3
  import { isRef, joinPointer, escapePointer, parseRef, isAbsoluteUrl, isAnchor } from './ref-utils';
5
- import type { YAMLNode, LoadOptions } from 'yaml-ast-parser';
6
- import { NormalizedNodeType, isNamedType, SpecExtension } from './types';
4
+ import { isNamedType, SpecExtension } from './types';
7
5
  import { readFileFromUrl, parseYaml, nextTick } from './utils';
8
- import { ResolveConfig } from './config/types';
6
+
7
+ import type { YAMLNode, LoadOptions } from 'yaml-ast-parser';
8
+ import type { NormalizedNodeType } from './types';
9
+ import type { ResolveConfig } from './config/types';
10
+ import type { OasRef } from './typings/openapi';
9
11
 
10
12
  export type CollectedRefs = Map<string /* absoluteFilePath */, Document>;
11
13
 
@@ -22,7 +22,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
22
22
  externalRefResolver: new BaseResolver(),
23
23
  document,
24
24
  config: await makeConfig({
25
- 'no-unresolved-refs': 'error',
25
+ rules: {
26
+ 'no-unresolved-refs': 'error',
27
+ },
26
28
  }),
27
29
  });
28
30
 
@@ -62,7 +64,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
62
64
  externalRefResolver: new BaseResolver(),
63
65
  document,
64
66
  config: await makeConfig({
65
- 'no-unresolved-refs': 'error',
67
+ rules: {
68
+ 'no-unresolved-refs': 'error',
69
+ },
66
70
  }),
67
71
  });
68
72
 
@@ -119,7 +123,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
119
123
  externalRefResolver: new BaseResolver(),
120
124
  document,
121
125
  config: await makeConfig({
122
- 'no-unresolved-refs': 'error',
126
+ rules: {
127
+ 'no-unresolved-refs': 'error',
128
+ },
123
129
  }),
124
130
  });
125
131
 
@@ -143,7 +149,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
143
149
  externalRefResolver: new BaseResolver(),
144
150
  document,
145
151
  config: await makeConfig({
146
- 'no-unresolved-refs': 'error',
152
+ rules: {
153
+ 'no-unresolved-refs': 'error',
154
+ },
147
155
  }),
148
156
  });
149
157
 
@@ -190,7 +198,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
190
198
  externalRefResolver: new BaseResolver(),
191
199
  document,
192
200
  config: await makeConfig({
193
- 'no-unresolved-refs': 'error',
201
+ rules: {
202
+ 'no-unresolved-refs': 'error',
203
+ },
194
204
  }),
195
205
  });
196
206
 
@@ -219,7 +229,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
219
229
  externalRefResolver: new BaseResolver(),
220
230
  document,
221
231
  config: await makeConfig({
222
- 'no-unresolved-refs': 'error',
232
+ rules: {
233
+ 'no-unresolved-refs': 'error',
234
+ },
223
235
  }),
224
236
  });
225
237
 
@@ -248,7 +260,9 @@ describe('oas3 boolean-parameter-prefixes', () => {
248
260
  externalRefResolver: new BaseResolver(),
249
261
  document,
250
262
  config: await makeConfig({
251
- 'no-unresolved-refs': 'error',
263
+ rules: {
264
+ 'no-unresolved-refs': 'error',
265
+ },
252
266
  }),
253
267
  });
254
268
 
package/src/rules/ajv.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import Ajv from '@redocly/ajv/dist/2020';
2
- import { Location, escapePointer } from '../ref-utils';
2
+ import { escapePointer } from '../ref-utils';
3
3
 
4
+ import type { Location } from '../ref-utils';
4
5
  import type { ValidateFunction, ErrorObject } from '@redocly/ajv/dist/2020';
5
6
  import type { ResolveFn } from '../walk';
6
7
 
@@ -0,0 +1,76 @@
1
+ import { outdent } from 'outdent';
2
+ import { lintDocument } from '../../../lint';
3
+ import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
4
+ import { BaseResolver } from '../../../resolve';
5
+ import { StyleguideConfig } from '../../../config';
6
+ import { ArazzoRule } from '../../../visitors';
7
+
8
+ describe('Arazzo parameters-no-body-inside-in', () => {
9
+ const document = parseYamlToDocument(
10
+ outdent`
11
+ arazzo: '1.0.0'
12
+ info:
13
+ title: Cool API
14
+ version: 1.0.0
15
+ description: A cool API
16
+ sourceDescriptions:
17
+ - name: museum-api
18
+ type: openapi
19
+ url: openapi.yaml
20
+ workflows:
21
+ - workflowId: get-museum-hours
22
+ description: This workflow demonstrates how to get the museum opening hours and buy tickets.
23
+ parameters:
24
+ - in: body
25
+ name: Authorization
26
+ value: Basic Og==
27
+ steps:
28
+ - stepId: get-museum-hours
29
+ description: >-
30
+ Get museum hours by resolving request details with getMuseumHours operationId from openapi.yaml description.
31
+ operationId: museum-api.getMuseumHours
32
+ successCriteria:
33
+ - condition: $statusCode == 200
34
+ `,
35
+ 'arazzo.yaml'
36
+ );
37
+
38
+ it('should not report on `body` inside parameter `in` field', async () => {
39
+ const results = await lintDocument({
40
+ externalRefResolver: new BaseResolver(),
41
+ document,
42
+ config: await makeConfig({ rules: {} }),
43
+ });
44
+
45
+ expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
46
+ });
47
+
48
+ it('should report on `body` inside parameter `in` field', async () => {
49
+ const results = await lintDocument({
50
+ externalRefResolver: new BaseResolver(),
51
+ document,
52
+ config: await makeConfig({
53
+ rules: {},
54
+ arazzoRules: { 'parameters-no-body-inside-in': 'error' },
55
+ }),
56
+ });
57
+
58
+ expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
59
+ [
60
+ {
61
+ "location": [
62
+ {
63
+ "pointer": "#/workflows/0/parameters/0/in",
64
+ "reportOnKey": false,
65
+ "source": "arazzo.yaml",
66
+ },
67
+ ],
68
+ "message": "The \`body\` value of the \`in\` property is not supported by Spot.",
69
+ "ruleId": "parameters-no-body-inside-in",
70
+ "severity": "error",
71
+ "suggest": [],
72
+ },
73
+ ]
74
+ `);
75
+ });
76
+ });
@@ -1,11 +1,14 @@
1
- import { ArazzoRule } from '../../visitors';
2
1
  import { Spec } from '../common/spec';
3
- import type { ArazzoRuleSet } from '../../oas-types';
4
2
  import { Assertions } from '../common/assertions';
3
+ import { ParametersNoBodyInsideIn } from '../spot/parameters-no-body-inside-in';
4
+
5
+ import type { ArazzoRule } from '../../visitors';
6
+ import type { ArazzoRuleSet } from '../../oas-types';
5
7
 
6
8
  export const rules: ArazzoRuleSet<'built-in'> = {
7
9
  spec: Spec as ArazzoRule,
8
10
  assertions: Assertions as ArazzoRule,
11
+ 'parameters-no-body-inside-in': ParametersNoBodyInsideIn as ArazzoRule,
9
12
  };
10
13
 
11
14
  export const preprocessors = {};
@@ -23,7 +23,7 @@ describe('Async2 channels-kebab-case', () => {
23
23
  const results = await lintDocument({
24
24
  externalRefResolver: new BaseResolver(),
25
25
  document,
26
- config: await makeConfig({ 'channels-kebab-case': 'error' }),
26
+ config: await makeConfig({ rules: { 'channels-kebab-case': 'error' } }),
27
27
  });
28
28
 
29
29
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -64,7 +64,7 @@ describe('Async2 channels-kebab-case', () => {
64
64
  const results = await lintDocument({
65
65
  externalRefResolver: new BaseResolver(),
66
66
  document,
67
- config: await makeConfig({ 'channels-kebab-case': 'error' }),
67
+ config: await makeConfig({ rules: { 'channels-kebab-case': 'error' } }),
68
68
  });
69
69
 
70
70
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -106,8 +106,10 @@ describe('Async2 channels-kebab-case', () => {
106
106
  externalRefResolver: new BaseResolver(),
107
107
  document,
108
108
  config: await makeConfig({
109
- 'paths-kebab-case': 'error',
110
- 'no-path-trailing-slash': 'off',
109
+ rules: {
110
+ 'paths-kebab-case': 'error',
111
+ 'no-path-trailing-slash': 'off',
112
+ },
111
113
  }),
112
114
  });
113
115
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -133,7 +135,9 @@ describe('Async2 channels-kebab-case', () => {
133
135
  externalRefResolver: new BaseResolver(),
134
136
  document,
135
137
  config: await makeConfig({
136
- 'paths-kebab-case': 'error',
138
+ rules: {
139
+ 'paths-kebab-case': 'error',
140
+ },
137
141
  }),
138
142
  });
139
143
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -23,7 +23,7 @@ describe('no-channel-trailing-slash', () => {
23
23
  const results = await lintDocument({
24
24
  externalRefResolver: new BaseResolver(),
25
25
  document,
26
- config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
26
+ config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
27
27
  });
28
28
 
29
29
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -64,7 +64,7 @@ describe('no-channel-trailing-slash', () => {
64
64
  const results = await lintDocument({
65
65
  externalRefResolver: new BaseResolver(),
66
66
  document,
67
- config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
67
+ config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
68
68
  });
69
69
 
70
70
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -89,7 +89,7 @@ describe('no-channel-trailing-slash', () => {
89
89
  const results = await lintDocument({
90
90
  externalRefResolver: new BaseResolver(),
91
91
  document,
92
- config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
92
+ config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
93
93
  });
94
94
 
95
95
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -1,5 +1,5 @@
1
- import { Async2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
1
+ import type { Async2Rule } from '../../visitors';
2
+ import type { UserContext } from '../../walk';
3
3
 
4
4
  export const ChannelsKebabCase: Async2Rule = () => {
5
5
  return {
@@ -1,18 +1,21 @@
1
- import { Async2Rule } from '../../visitors';
2
1
  import { Assertions } from '../common/assertions';
3
2
  import { Spec } from '../common/spec';
4
3
  import { InfoContact } from '../common/info-contact';
4
+ import { InfoLicenseStrict } from '../common/info-license-strict';
5
5
  import { OperationOperationId } from '../common/operation-operationId';
6
6
  import { TagDescription } from '../common/tag-description';
7
7
  import { TagsAlphabetical } from '../common/tags-alphabetical';
8
8
  import { ChannelsKebabCase } from './channels-kebab-case';
9
9
  import { NoChannelTrailingSlash } from './no-channel-trailing-slash';
10
+
11
+ import type { Async2Rule } from '../../visitors';
10
12
  import type { Async2RuleSet } from '../../oas-types';
11
13
 
12
14
  export const rules: Async2RuleSet<'built-in'> = {
13
15
  spec: Spec as Async2Rule,
14
16
  assertions: Assertions as Async2Rule,
15
17
  'info-contact': InfoContact as Async2Rule,
18
+ 'info-license-strict': InfoLicenseStrict as Async2Rule,
16
19
  'operation-operationId': OperationOperationId as Async2Rule,
17
20
  'channels-kebab-case': ChannelsKebabCase,
18
21
  'no-channel-trailing-slash': NoChannelTrailingSlash,
@@ -1,5 +1,5 @@
1
- import { Async2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
1
+ import type { Async2Rule } from '../../visitors';
2
+ import type { UserContext } from '../../walk';
3
3
 
4
4
  export const NoChannelTrailingSlash: Async2Rule = () => {
5
5
  return {
@@ -23,7 +23,7 @@ describe('Async2 channels-kebab-case', () => {
23
23
  const results = await lintDocument({
24
24
  externalRefResolver: new BaseResolver(),
25
25
  document,
26
- config: await makeConfig({ 'channels-kebab-case': 'error' }),
26
+ config: await makeConfig({ rules: { 'channels-kebab-case': 'error' } }),
27
27
  });
28
28
 
29
29
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -64,7 +64,7 @@ describe('Async2 channels-kebab-case', () => {
64
64
  const results = await lintDocument({
65
65
  externalRefResolver: new BaseResolver(),
66
66
  document,
67
- config: await makeConfig({ 'channels-kebab-case': 'error' }),
67
+ config: await makeConfig({ rules: { 'channels-kebab-case': 'error' } }),
68
68
  });
69
69
 
70
70
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -106,8 +106,10 @@ describe('Async2 channels-kebab-case', () => {
106
106
  externalRefResolver: new BaseResolver(),
107
107
  document,
108
108
  config: await makeConfig({
109
- 'paths-kebab-case': 'error',
110
- 'no-path-trailing-slash': 'off',
109
+ rules: {
110
+ 'paths-kebab-case': 'error',
111
+ 'no-path-trailing-slash': 'off',
112
+ },
111
113
  }),
112
114
  });
113
115
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -133,7 +135,9 @@ describe('Async2 channels-kebab-case', () => {
133
135
  externalRefResolver: new BaseResolver(),
134
136
  document,
135
137
  config: await makeConfig({
136
- 'paths-kebab-case': 'error',
138
+ rules: {
139
+ 'paths-kebab-case': 'error',
140
+ },
137
141
  }),
138
142
  });
139
143
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -23,7 +23,7 @@ describe('no-channel-trailing-slash', () => {
23
23
  const results = await lintDocument({
24
24
  externalRefResolver: new BaseResolver(),
25
25
  document,
26
- config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
26
+ config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
27
27
  });
28
28
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
29
29
  [
@@ -63,7 +63,7 @@ describe('no-channel-trailing-slash', () => {
63
63
  const results = await lintDocument({
64
64
  externalRefResolver: new BaseResolver(),
65
65
  document,
66
- config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
66
+ config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
67
67
  });
68
68
 
69
69
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -88,7 +88,7 @@ describe('no-channel-trailing-slash', () => {
88
88
  const results = await lintDocument({
89
89
  externalRefResolver: new BaseResolver(),
90
90
  document,
91
- config: await makeConfig({ 'no-channel-trailing-slash': 'error' }),
91
+ config: await makeConfig({ rules: { 'no-channel-trailing-slash': 'error' } }),
92
92
  });
93
93
 
94
94
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -1,6 +1,6 @@
1
- import { Channel } from '../../typings/asyncapi3';
2
- import { Async3Rule } from '../../visitors';
3
- import { UserContext } from '../../walk';
1
+ import type { Channel } from '../../typings/asyncapi3';
2
+ import type { Async3Rule } from '../../visitors';
3
+ import type { UserContext } from '../../walk';
4
4
 
5
5
  export const ChannelsKebabCase: Async3Rule = () => {
6
6
  return {
@@ -1,18 +1,21 @@
1
- import { Async3Rule } from '../../visitors';
2
1
  import { Assertions } from '../common/assertions';
3
2
  import { Spec } from '../common/spec';
4
3
  import { InfoContact } from '../common/info-contact';
4
+ import { InfoLicenseStrict } from '../common/info-license-strict';
5
5
  import { OperationOperationId } from '../common/operation-operationId';
6
6
  import { TagDescription } from '../common/tag-description';
7
7
  import { TagsAlphabetical } from '../common/tags-alphabetical';
8
8
  import { ChannelsKebabCase } from './channels-kebab-case';
9
9
  import { NoChannelTrailingSlash } from './no-channel-trailing-slash';
10
+
11
+ import type { Async3Rule } from '../../visitors';
10
12
  import type { Async3RuleSet } from '../../oas-types';
11
13
 
12
14
  export const rules: Async3RuleSet<'built-in'> = {
13
15
  spec: Spec as Async3Rule,
14
16
  assertions: Assertions as Async3Rule,
15
17
  'info-contact': InfoContact as Async3Rule,
18
+ 'info-license-strict': InfoLicenseStrict as Async3Rule,
16
19
  'operation-operationId': OperationOperationId as Async3Rule,
17
20
  'channels-kebab-case': ChannelsKebabCase,
18
21
  'no-channel-trailing-slash': NoChannelTrailingSlash,
@@ -1,6 +1,6 @@
1
- import { Async3Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { Channel } from '../../typings/asyncapi3';
1
+ import type { Async3Rule } from '../../visitors';
2
+ import type { UserContext } from '../../walk';
3
+ import type { Channel } from '../../typings/asyncapi3';
4
4
 
5
5
  export const NoChannelTrailingSlash: Async3Rule = () => {
6
6
  return {