@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
@@ -164,7 +164,7 @@ describe('bundle', () => {
164
164
  ''
165
165
  );
166
166
 
167
- const config = await makeConfig({}, { 'registry-dependencies': 'on' });
167
+ const config = await makeConfig({ rules: {}, decorators: { 'registry-dependencies': 'on' } });
168
168
 
169
169
  const {
170
170
  bundle: result,
@@ -205,7 +205,7 @@ describe('bundle', () => {
205
205
  ''
206
206
  );
207
207
 
208
- const config = await makeConfig({});
208
+ const config = await makeConfig({ rules: {} });
209
209
 
210
210
  const {
211
211
  bundle: { parsed },
@@ -274,3 +274,145 @@ describe('bundleFromString', () => {
274
274
  expect(rest.source.body).toEqual(stringDocument);
275
275
  });
276
276
  });
277
+
278
+ describe('bundle async', () => {
279
+ it('should bundle async of version 2.x', async () => {
280
+ const testDocument = parseYamlToDocument(
281
+ outdent`
282
+ asyncapi: '2.6.0'
283
+ info:
284
+ title: Account Service
285
+ version: 1.0.0
286
+ description: This service is in charge of processing user signups
287
+ channels:
288
+ user/signedup:
289
+ subscribe:
290
+ message:
291
+ $ref: '#/components/messages/UserSignedUp'
292
+ components:
293
+ schemas:
294
+ UserSignedUp:
295
+ type: object
296
+ properties:
297
+ displayName:
298
+ type: string
299
+ description: Name of the user
300
+ messages:
301
+ UserSignedUp:
302
+ payload:
303
+ $ref: '#/components/schemas/UserSignedUp'
304
+ `,
305
+ ''
306
+ );
307
+
308
+ const config = await makeConfig({ rules: {} });
309
+
310
+ const {
311
+ bundle: { parsed },
312
+ problems,
313
+ } = await bundleDocument({
314
+ document: testDocument,
315
+ config: config,
316
+ externalRefResolver: new BaseResolver(),
317
+ dereference: true,
318
+ });
319
+
320
+ expect(problems).toHaveLength(0);
321
+ expect(parsed).toMatchInlineSnapshot(`
322
+ asyncapi: 2.6.0
323
+ info:
324
+ title: Account Service
325
+ version: 1.0.0
326
+ description: This service is in charge of processing user signups
327
+ channels:
328
+ user/signedup:
329
+ subscribe:
330
+ message:
331
+ payload: &ref_1
332
+ type: object
333
+ properties: &ref_0
334
+ displayName:
335
+ type: string
336
+ description: Name of the user
337
+ components:
338
+ schemas:
339
+ UserSignedUp:
340
+ type: object
341
+ properties: *ref_0
342
+ messages:
343
+ UserSignedUp:
344
+ payload: *ref_1
345
+
346
+ `);
347
+ });
348
+
349
+ it('should bundle async of version 3.0', async () => {
350
+ const testDocument = parseYamlToDocument(
351
+ outdent`
352
+ asyncapi: 3.0.0
353
+ info:
354
+ title: Account Service
355
+ version: 1.0.0
356
+ description: This service is in charge of processing user signups
357
+ operations:
358
+ sendUserSignedup:
359
+ action: send
360
+ messages:
361
+ - $ref: '#/components/messages/UserSignedUp'
362
+ components:
363
+ schemas:
364
+ UserSignedUp:
365
+ type: object
366
+ properties:
367
+ displayName:
368
+ type: string
369
+ description: Name of the user
370
+ messages:
371
+ UserSignedUp:
372
+ payload:
373
+ $ref: '#/components/schemas/UserSignedUp'
374
+ `,
375
+ ''
376
+ );
377
+
378
+ const config = await makeConfig({ rules: {} });
379
+
380
+ const {
381
+ bundle: { parsed },
382
+ problems,
383
+ } = await bundleDocument({
384
+ document: testDocument,
385
+ config: config,
386
+ externalRefResolver: new BaseResolver(),
387
+ dereference: true,
388
+ });
389
+
390
+ expect(problems).toHaveLength(0);
391
+ expect(parsed).toMatchInlineSnapshot(`
392
+ asyncapi: 3.0.0
393
+ info:
394
+ title: Account Service
395
+ version: 1.0.0
396
+ description: This service is in charge of processing user signups
397
+ operations:
398
+ sendUserSignedup:
399
+ action: send
400
+ messages:
401
+ - payload: &ref_1
402
+ type: object
403
+ properties: &ref_0
404
+ displayName:
405
+ type: string
406
+ description: Name of the user
407
+ components:
408
+ schemas:
409
+ UserSignedUp:
410
+ type: object
411
+ properties: *ref_0
412
+ messages:
413
+ UserSignedUp:
414
+ payload: *ref_1
415
+
416
+ `);
417
+ });
418
+ });
@@ -127,7 +127,7 @@ const testPortalConfig = parseYamlToDocument(
127
127
  # serviceAccountPrivateKey: Must be reported as a missing required prop
128
128
  serviceAccountEmail: 789 # Must be a string
129
129
 
130
- i18n:
130
+ l10n:
131
131
  defaultLocale: en-US
132
132
  locales:
133
133
  - code: 123 # Must be a string
@@ -201,18 +201,14 @@ const testPortalConfig = parseYamlToDocument(
201
201
  graphql:
202
202
  pagination: section
203
203
  menu:
204
- {
205
- initialLoadState: 'default',
206
- requireExactGroups: false,
207
- groups:
208
- [
209
- {
210
- name: 'GraphQL custom group',
211
- directives: { includeByName: ['cacheControl', 'typeDirective'] },
212
- },
213
- ],
214
- otherItemsGroupName: 'Other',
215
- }
204
+ requireExactGroups: false
205
+ groups:
206
+ - name: 'GraphQL custom group'
207
+ directives:
208
+ includeByName:
209
+ - cacheControl
210
+ - typeDirective
211
+ otherItemsGroupName: 'Other'
216
212
  sidebar:
217
213
  separatorLine: true
218
214
  linePosition: top
@@ -1048,7 +1044,7 @@ describe('lint', () => {
1048
1044
  "from": undefined,
1049
1045
  "location": [
1050
1046
  {
1051
- "pointer": "#/i18n/locales/0/code",
1047
+ "pointer": "#/l10n/locales/0/code",
1052
1048
  "reportOnKey": false,
1053
1049
  "source": "",
1054
1050
  },
@@ -1252,12 +1248,12 @@ describe('lint', () => {
1252
1248
  "from": undefined,
1253
1249
  "location": [
1254
1250
  {
1255
- "pointer": "#/i18n",
1251
+ "pointer": "#/l10n",
1256
1252
  "reportOnKey": true,
1257
1253
  "source": "",
1258
1254
  },
1259
1255
  ],
1260
- "message": "Property \`i18n\` is not expected here.",
1256
+ "message": "Property \`l10n\` is not expected here.",
1261
1257
  "ruleId": "configuration spec",
1262
1258
  "severity": "error",
1263
1259
  "suggest": [],
@@ -1413,7 +1409,7 @@ describe('lint', () => {
1413
1409
  const results = await lintDocument({
1414
1410
  externalRefResolver: new BaseResolver(),
1415
1411
  document,
1416
- config: await makeConfig({ spec: 'error' }),
1412
+ config: await makeConfig({ rules: { spec: 'error' } }),
1417
1413
  });
1418
1414
 
1419
1415
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -1492,7 +1488,7 @@ describe('lint', () => {
1492
1488
  const results = await lintDocument({
1493
1489
  externalRefResolver: new BaseResolver(),
1494
1490
  document,
1495
- config: await makeConfig({ spec: 'error' }),
1491
+ config: await makeConfig({ rules: { spec: 'error' } }),
1496
1492
  });
1497
1493
 
1498
1494
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -1528,7 +1524,11 @@ describe('lint', () => {
1528
1524
  const result = await lintDocument({
1529
1525
  externalRefResolver: new BaseResolver(),
1530
1526
  document,
1531
- config: await makeConfig({ 'operation-operationId': 'error' }, undefined, configFilePath),
1527
+ config: await makeConfig({
1528
+ rules: { 'operation-operationId': 'error' },
1529
+ decorators: undefined,
1530
+ configPath: configFilePath,
1531
+ }),
1532
1532
  });
1533
1533
  expect(result).toHaveLength(1);
1534
1534
  expect(result).toMatchObject([
@@ -1590,7 +1590,11 @@ describe('lint', () => {
1590
1590
  const results = await lintDocument({
1591
1591
  externalRefResolver: new BaseResolver(),
1592
1592
  document,
1593
- config: await makeConfig({ spec: 'error' }, undefined, configFilePath),
1593
+ config: await makeConfig({
1594
+ rules: { spec: 'error' },
1595
+ decorators: undefined,
1596
+ configPath: configFilePath,
1597
+ }),
1594
1598
  });
1595
1599
 
1596
1600
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
@@ -1662,7 +1666,11 @@ describe('lint', () => {
1662
1666
  const results = await lintDocument({
1663
1667
  externalRefResolver: new BaseResolver(),
1664
1668
  document,
1665
- config: await makeConfig({ spec: 'error' }, undefined, configFilePath),
1669
+ config: await makeConfig({
1670
+ rules: { spec: 'error' },
1671
+ decorators: undefined,
1672
+ configPath: configFilePath,
1673
+ }),
1666
1674
  });
1667
1675
 
1668
1676
  expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`[]`);
@@ -53,7 +53,7 @@ describe('walk order', () => {
53
53
  await lintDocument({
54
54
  externalRefResolver: new BaseResolver(),
55
55
  document,
56
- config: makeConfigForRuleset(testRuleSet),
56
+ config: await makeConfigForRuleset(testRuleSet),
57
57
  });
58
58
 
59
59
  expect(testRuleSet.test).toBeCalledTimes(1);
@@ -100,12 +100,12 @@ describe('walk order', () => {
100
100
  const document = parseYamlToDocument(
101
101
  outdent`
102
102
  openapi: 3.0.0
103
- servers:
103
+ servers:
104
104
  - url: http://{test}.url
105
105
  variables:
106
106
  test: test
107
- paths:
108
- /test-path:
107
+ paths:
108
+ /test-path:
109
109
  get:
110
110
  responses:
111
111
  200:
@@ -121,7 +121,7 @@ describe('walk order', () => {
121
121
  await lintDocument({
122
122
  externalRefResolver: new BaseResolver(),
123
123
  document,
124
- config: makeConfigForRuleset(testRuleSet),
124
+ config: await makeConfigForRuleset(testRuleSet),
125
125
  });
126
126
 
127
127
  expect(testRuleSet.test).toBeCalledTimes(1);
@@ -184,7 +184,7 @@ describe('walk order', () => {
184
184
  await lintDocument({
185
185
  externalRefResolver: new BaseResolver(),
186
186
  document,
187
- config: makeConfigForRuleset(testRuleSet),
187
+ config: await makeConfigForRuleset(testRuleSet),
188
188
  });
189
189
 
190
190
  expect(calls).toMatchInlineSnapshot(`
@@ -264,7 +264,7 @@ describe('walk order', () => {
264
264
  await lintDocument({
265
265
  externalRefResolver: new BaseResolver(),
266
266
  document,
267
- config: makeConfigForRuleset(testRuleSet, undefined, 'oas2'),
267
+ config: await makeConfigForRuleset(testRuleSet, undefined, 'oas2'),
268
268
  });
269
269
 
270
270
  expect(calls).toMatchInlineSnapshot(`
@@ -345,7 +345,7 @@ describe('walk order', () => {
345
345
  await lintDocument({
346
346
  externalRefResolver: new BaseResolver(),
347
347
  document,
348
- config: makeConfigForRuleset(testRuleSet),
348
+ config: await makeConfigForRuleset(testRuleSet),
349
349
  });
350
350
 
351
351
  expect(calls).toMatchInlineSnapshot(`
@@ -417,7 +417,7 @@ describe('walk order', () => {
417
417
  await lintDocument({
418
418
  externalRefResolver: new BaseResolver(),
419
419
  document,
420
- config: makeConfigForRuleset(testRuleSet),
420
+ config: await makeConfigForRuleset(testRuleSet),
421
421
  });
422
422
 
423
423
  expect(calls).toMatchInlineSnapshot(`
@@ -489,7 +489,7 @@ describe('walk order', () => {
489
489
  await lintDocument({
490
490
  externalRefResolver: new BaseResolver(),
491
491
  document,
492
- config: makeConfigForRuleset(testRuleSet),
492
+ config: await makeConfigForRuleset(testRuleSet),
493
493
  });
494
494
 
495
495
  expect(calls).toMatchInlineSnapshot(`
@@ -556,7 +556,7 @@ describe('walk order', () => {
556
556
  await lintDocument({
557
557
  externalRefResolver: new BaseResolver(),
558
558
  document,
559
- config: makeConfigForRuleset(testRuleSet),
559
+ config: await makeConfigForRuleset(testRuleSet),
560
560
  });
561
561
 
562
562
  expect(calls).toMatchInlineSnapshot(`
@@ -610,7 +610,7 @@ describe('walk order', () => {
610
610
  await lintDocument({
611
611
  externalRefResolver: new BaseResolver(),
612
612
  document,
613
- config: makeConfigForRuleset(testRuleSet),
613
+ config: await makeConfigForRuleset(testRuleSet),
614
614
  });
615
615
 
616
616
  expect(calls).toMatchInlineSnapshot(`
@@ -666,7 +666,7 @@ describe('walk order', () => {
666
666
  await lintDocument({
667
667
  externalRefResolver: new BaseResolver(),
668
668
  document,
669
- config: makeConfigForRuleset(testRuleSet),
669
+ config: await makeConfigForRuleset(testRuleSet),
670
670
  });
671
671
 
672
672
  expect(calls).toMatchInlineSnapshot(`
@@ -708,7 +708,7 @@ describe('walk order', () => {
708
708
  await lintDocument({
709
709
  externalRefResolver: new BaseResolver(),
710
710
  document,
711
- config: makeConfigForRuleset(testRuleSet),
711
+ config: await makeConfigForRuleset(testRuleSet),
712
712
  });
713
713
 
714
714
  expect(calls).toMatchInlineSnapshot(`
@@ -763,7 +763,7 @@ describe('walk order', () => {
763
763
  await lintDocument({
764
764
  externalRefResolver: new BaseResolver(),
765
765
  document,
766
- config: makeConfigForRuleset(testRuleSet),
766
+ config: await makeConfigForRuleset(testRuleSet),
767
767
  });
768
768
 
769
769
  expect(calls).toMatchInlineSnapshot(`
@@ -849,7 +849,7 @@ describe('walk order', () => {
849
849
  await lintDocument({
850
850
  externalRefResolver: new BaseResolver(),
851
851
  document,
852
- config: makeConfigForRuleset(testRuleSet),
852
+ config: await makeConfigForRuleset(testRuleSet),
853
853
  });
854
854
 
855
855
  expect(calls).toMatchInlineSnapshot(`
@@ -928,7 +928,7 @@ describe('walk order', () => {
928
928
  await lintDocument({
929
929
  externalRefResolver: new BaseResolver(),
930
930
  document,
931
- config: makeConfigForRuleset(testRuleSet),
931
+ config: await makeConfigForRuleset(testRuleSet),
932
932
  });
933
933
 
934
934
  expect(calls).toMatchInlineSnapshot(`
@@ -1000,7 +1000,7 @@ describe('walk order', () => {
1000
1000
  await lintDocument({
1001
1001
  externalRefResolver: new BaseResolver(),
1002
1002
  document,
1003
- config: makeConfigForRuleset(testRuleSet),
1003
+ config: await makeConfigForRuleset(testRuleSet),
1004
1004
  });
1005
1005
 
1006
1006
  expect(calls).toMatchInlineSnapshot(`
@@ -1044,7 +1044,7 @@ describe('walk order', () => {
1044
1044
  await lintDocument({
1045
1045
  externalRefResolver: new BaseResolver(),
1046
1046
  document,
1047
- config: makeConfigForRuleset(testRuleSet),
1047
+ config: await makeConfigForRuleset(testRuleSet),
1048
1048
  });
1049
1049
 
1050
1050
  expect(calls).toMatchInlineSnapshot(`
@@ -1109,7 +1109,7 @@ describe('walk order', () => {
1109
1109
  await lintDocument({
1110
1110
  externalRefResolver: new BaseResolver(),
1111
1111
  document,
1112
- config: makeConfigForRuleset(testRuleSet),
1112
+ config: await makeConfigForRuleset(testRuleSet),
1113
1113
  });
1114
1114
 
1115
1115
  expect(calls).toMatchInlineSnapshot(`
@@ -1197,7 +1197,7 @@ describe('context.report', () => {
1197
1197
  const results = await lintDocument({
1198
1198
  externalRefResolver: new BaseResolver(),
1199
1199
  document,
1200
- config: makeConfigForRuleset(testRuleSet),
1200
+ config: await makeConfigForRuleset(testRuleSet),
1201
1201
  });
1202
1202
 
1203
1203
  expect(results).toHaveLength(3);
@@ -1277,7 +1277,7 @@ describe('context.report', () => {
1277
1277
  const results = await lintDocument({
1278
1278
  externalRefResolver: new BaseResolver(),
1279
1279
  document,
1280
- config: makeConfigForRuleset(testRuleSet),
1280
+ config: await makeConfigForRuleset(testRuleSet),
1281
1281
  });
1282
1282
 
1283
1283
  expect(results).toHaveLength(4);
@@ -1385,7 +1385,7 @@ describe('context.resolve', () => {
1385
1385
  await lintDocument({
1386
1386
  externalRefResolver: new BaseResolver(),
1387
1387
  document,
1388
- config: makeConfigForRuleset(testRuleSet),
1388
+ config: await makeConfigForRuleset(testRuleSet),
1389
1389
  });
1390
1390
  });
1391
1391
  });
@@ -1434,7 +1434,7 @@ describe('type extensions', () => {
1434
1434
  await lintDocument({
1435
1435
  externalRefResolver: new BaseResolver(),
1436
1436
  document,
1437
- config: makeConfigForRuleset(testRuleSet, {
1437
+ config: await makeConfigForRuleset(testRuleSet, {
1438
1438
  typeExtension: {
1439
1439
  oas3(types, version) {
1440
1440
  expect(version).toEqual(oas);
@@ -1528,7 +1528,7 @@ describe('ignoreNextRules', () => {
1528
1528
  await lintDocument({
1529
1529
  externalRefResolver: new BaseResolver(),
1530
1530
  document,
1531
- config: makeConfigForRuleset(testRuleSet),
1531
+ config: await makeConfigForRuleset(testRuleSet),
1532
1532
  });
1533
1533
 
1534
1534
  expect(calls).toMatchInlineSnapshot(`
@@ -4,6 +4,8 @@ import { lintDocument } from '../../lint';
4
4
  import { BaseResolver } from '../../resolve';
5
5
  import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
6
6
 
7
+ import type { StyleguideConfig } from '../../config';
8
+
7
9
  export const name = 'Validate with 50 top-level rules';
8
10
  export const count = 10;
9
11
  const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
@@ -25,7 +27,11 @@ for (let i = 0; i < 50; i++) {
25
27
  };
26
28
  }
27
29
 
28
- const config = makeConfigForRuleset(ruleset);
30
+ let config: StyleguideConfig;
31
+ export async function setupAsync() {
32
+ config = await makeConfigForRuleset(ruleset);
33
+ }
34
+
29
35
  export function measureAsync() {
30
36
  return lintDocument({
31
37
  externalRefResolver: new BaseResolver(),
@@ -4,6 +4,8 @@ import { lintDocument } from '../../lint';
4
4
  import { BaseResolver } from '../../resolve';
5
5
  import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
6
6
 
7
+ import type { StyleguideConfig } from '../../config';
8
+
7
9
  export const name = 'Validate with single nested rule';
8
10
  export const count = 10;
9
11
  const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
@@ -29,7 +31,11 @@ const visitor = {
29
31
  };
30
32
  },
31
33
  };
32
- const config = makeConfigForRuleset(visitor);
34
+ let config: StyleguideConfig;
35
+ export async function setupAsync() {
36
+ config = await makeConfigForRuleset(visitor);
37
+ }
38
+
33
39
  export function measureAsync() {
34
40
  return lintDocument({
35
41
  externalRefResolver: new BaseResolver(),
@@ -3,6 +3,9 @@ import { join as pathJoin, resolve as pathResolve } from 'path';
3
3
  import { lintDocument } from '../../lint';
4
4
  import { BaseResolver } from '../../resolve';
5
5
  import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
6
+
7
+ import type { StyleguideConfig } from '../../config';
8
+
6
9
  export const name = 'Validate with no rules';
7
10
  export const count = 10;
8
11
  const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
@@ -10,7 +13,11 @@ const rebillyDocument = parseYamlToDocument(
10
13
  readFileSync(rebillyDefinitionRef, 'utf-8'),
11
14
  rebillyDefinitionRef
12
15
  );
13
- const config = makeConfigForRuleset({});
16
+
17
+ let config: StyleguideConfig;
18
+ export async function setupAsync() {
19
+ config = await makeConfigForRuleset({});
20
+ }
14
21
  export function measureAsync() {
15
22
  return lintDocument({
16
23
  externalRefResolver: new BaseResolver(),
@@ -4,6 +4,8 @@ import { lintDocument } from '../../lint';
4
4
  import { BaseResolver } from '../../resolve';
5
5
  import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
6
6
 
7
+ import type { StyleguideConfig } from '../../config';
8
+
7
9
  export const name = 'Validate with single top-level rule and report';
8
10
  export const count = 10;
9
11
  const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
@@ -12,19 +14,22 @@ const rebillyDocument = parseYamlToDocument(
12
14
  rebillyDefinitionRef
13
15
  );
14
16
 
15
- const config = makeConfigForRuleset({
16
- test: () => {
17
- return {
18
- Schema(schema, ctx) {
19
- if (schema.type === 'number') {
20
- ctx.report({
21
- message: 'type number is not allowed',
22
- });
23
- }
24
- },
25
- };
26
- },
27
- });
17
+ let config: StyleguideConfig;
18
+ export async function setupAsync() {
19
+ config = await makeConfigForRuleset({
20
+ test: () => {
21
+ return {
22
+ Schema(schema, ctx) {
23
+ if (schema.type === 'number') {
24
+ ctx.report({
25
+ message: 'type number is not allowed',
26
+ });
27
+ }
28
+ },
29
+ };
30
+ },
31
+ });
32
+ }
28
33
 
29
34
  export function measureAsync() {
30
35
  return lintDocument({
@@ -3,6 +3,9 @@ import { join as pathJoin, resolve as pathResolve } from 'path';
3
3
  import { lintDocument } from '../../lint';
4
4
  import { BaseResolver } from '../../resolve';
5
5
  import { parseYamlToDocument, makeConfigForRuleset } from '../utils';
6
+
7
+ import type { StyleguideConfig } from '../../config';
8
+
6
9
  export const name = 'Validate with single top-level rule';
7
10
  export const count = 10;
8
11
  const rebillyDefinitionRef = pathResolve(pathJoin(__dirname, 'rebilly.yaml'));
@@ -11,17 +14,20 @@ const rebillyDocument = parseYamlToDocument(
11
14
  rebillyDefinitionRef
12
15
  );
13
16
 
14
- const config = makeConfigForRuleset({
15
- test: () => {
16
- let count = 0;
17
- return {
18
- Schema() {
19
- count++;
20
- if (count === -1) throw new Error('Disable optimization');
21
- },
22
- };
23
- },
24
- });
17
+ let config: StyleguideConfig;
18
+ export async function setupAsync() {
19
+ config = await makeConfigForRuleset({
20
+ test: () => {
21
+ let count = 0;
22
+ return {
23
+ Schema() {
24
+ count++;
25
+ if (count === -1) throw new Error('Disable optimization');
26
+ },
27
+ };
28
+ },
29
+ });
30
+ }
25
31
 
26
32
  export function measureAsync() {
27
33
  return lintDocument({
@@ -26,6 +26,10 @@ if (require.main === module) {
26
26
  assert(process.send);
27
27
  const module = require(modulePath);
28
28
 
29
+ if (module.setupAsync) {
30
+ await module.setupAsync();
31
+ }
32
+
29
33
  if (module.measureAsync) {
30
34
  async function run() {
31
35
  await clockAsync(7, module.measureAsync); // warm up
@@ -1,8 +1,9 @@
1
1
  import { parseYaml } from '../js-yaml';
2
- import { Document, Source } from '../resolve';
3
- import { Oas3RuleSet } from '../oas-types';
2
+ import { Source } from '../resolve';
4
3
  import { StyleguideConfig, mergeExtends, resolvePlugins } from '../config';
5
4
 
5
+ import type { Document } from '../resolve';
6
+ import type { Oas3RuleSet } from '../oas-types';
6
7
  import type { RuleConfig, Plugin, ResolvedStyleguideConfig } from '../config/types';
7
8
 
8
9
  export function parseYamlToDocument(body: string, absoluteRef: string = ''): Document {
@@ -12,20 +13,20 @@ export function parseYamlToDocument(body: string, absoluteRef: string = ''): Doc
12
13
  };
13
14
  }
14
15
 
15
- export function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>) {
16
+ export async function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>) {
16
17
  const rulesConf: Record<string, RuleConfig> = {};
17
18
  const ruleId = 'test';
18
19
  Object.keys(rules).forEach((name) => {
19
20
  rulesConf[`${ruleId}/${name}`] = 'error';
20
21
  });
21
22
  const extendConfigs = [
22
- resolvePlugins([
23
+ (await resolvePlugins([
23
24
  {
24
25
  ...plugin,
25
26
  id: ruleId,
26
27
  rules: { oas3: rules },
27
28
  },
28
- ]) as ResolvedStyleguideConfig,
29
+ ])) as ResolvedStyleguideConfig,
29
30
  ];
30
31
  if (rules) {
31
32
  extendConfigs.push({ rules });