@redocly/openapi-core 1.19.0 → 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 (338) hide show
  1. package/CHANGELOG.md +12 -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 +66 -24
  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 +77 -19
  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
@@ -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 });
package/src/bundle.ts CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  SpecMajorVersion,
10
10
  SpecVersion,
11
11
  } from './oas-types';
12
- import { isAbsoluteUrl, isRef, Location, refBaseName } from './ref-utils';
12
+ import { isAbsoluteUrl, isRef, refBaseName } from './ref-utils';
13
13
  import { initRules } from './config/rules';
14
14
  import { reportUnresolvedRef } from './rules/no-unresolved-refs';
15
15
  import { dequal, isPlainObject, isTruthy } from './utils';
@@ -18,6 +18,7 @@ import { RemoveUnusedComponents as RemoveUnusedComponentsOas2 } from './decorato
18
18
  import { RemoveUnusedComponents as RemoveUnusedComponentsOas3 } from './decorators/oas3/remove-unused-components';
19
19
  import { ConfigTypes } from './types/redocly-yaml';
20
20
 
21
+ import type { Location } from './ref-utils';
21
22
  import type { Oas3Visitor, Oas2Visitor } from './visitors';
22
23
  import type { NormalizedNodeType, NodeType } from './types';
23
24
  import type { WalkContext, UserContext, ResolveResult, NormalizedProblem } from './walk';
@@ -5,6 +5,7 @@ exports[`resolveConfig should ignore minimal from the root and read local file 1
5
5
  "arazzoDecorators": {},
6
6
  "arazzoPreprocessors": {},
7
7
  "arazzoRules": {
8
+ "parameters-no-body-inside-in": "off",
8
9
  "spec": "error",
9
10
  },
10
11
  "async2Decorators": {},
@@ -12,6 +13,7 @@ exports[`resolveConfig should ignore minimal from the root and read local file 1
12
13
  "async2Rules": {
13
14
  "channels-kebab-case": "off",
14
15
  "info-contact": "off",
16
+ "info-license-strict": "warn",
15
17
  "no-channel-trailing-slash": "off",
16
18
  "operation-operationId": "warn",
17
19
  "spec": "error",
@@ -23,6 +25,7 @@ exports[`resolveConfig should ignore minimal from the root and read local file 1
23
25
  "async3Rules": {
24
26
  "channels-kebab-case": "off",
25
27
  "info-contact": "off",
28
+ "info-license-strict": "warn",
26
29
  "no-channel-trailing-slash": "off",
27
30
  "operation-operationId": "warn",
28
31
  "spec": "error",
@@ -85,7 +88,8 @@ exports[`resolveConfig should ignore minimal from the root and read local file 1
85
88
  "boolean-parameter-prefixes": "error",
86
89
  "info-contact": "off",
87
90
  "info-license": "warn",
88
- "info-license-url": "warn",
91
+ "info-license-strict": "warn",
92
+ "info-license-url": "off",
89
93
  "local/operation-id-not-test": "error",
90
94
  "no-ambiguous-paths": "warn",
91
95
  "no-enum-type-mismatch": "error",
@@ -133,6 +137,7 @@ exports[`resolveStyleguideConfig should resolve extends with local file config w
133
137
  "arazzoDecorators": {},
134
138
  "arazzoPreprocessors": {},
135
139
  "arazzoRules": {
140
+ "parameters-no-body-inside-in": "off",
136
141
  "spec": "error",
137
142
  },
138
143
  "async2Decorators": {},
@@ -140,6 +145,7 @@ exports[`resolveStyleguideConfig should resolve extends with local file config w
140
145
  "async2Rules": {
141
146
  "channels-kebab-case": "off",
142
147
  "info-contact": "off",
148
+ "info-license-strict": "warn",
143
149
  "no-channel-trailing-slash": "off",
144
150
  "operation-operationId": "warn",
145
151
  "spec": "error",
@@ -151,6 +157,7 @@ exports[`resolveStyleguideConfig should resolve extends with local file config w
151
157
  "async3Rules": {
152
158
  "channels-kebab-case": "off",
153
159
  "info-contact": "off",
160
+ "info-license-strict": "warn",
154
161
  "no-channel-trailing-slash": "off",
155
162
  "operation-operationId": "warn",
156
163
  "spec": "error",
@@ -231,7 +238,8 @@ exports[`resolveStyleguideConfig should resolve extends with local file config w
231
238
  "boolean-parameter-prefixes": "error",
232
239
  "info-contact": "off",
233
240
  "info-license": "warn",
234
- "info-license-url": "warn",
241
+ "info-license-strict": "warn",
242
+ "info-license-url": "off",
235
243
  "local/operation-id-not-test": "error",
236
244
  "no-ambiguous-paths": "warn",
237
245
  "no-enum-type-mismatch": "error",
@@ -91,6 +91,88 @@ describe('resolveStyleguideConfig', () => {
91
91
  });
92
92
  });
93
93
 
94
+ it('should resolve local file config with esm plugin', async () => {
95
+ const config = {
96
+ ...baseStyleguideConfig,
97
+ extends: ['local-config-with-esm.yaml'],
98
+ };
99
+
100
+ const { plugins, ...styleguide } = await resolveStyleguideConfig({
101
+ styleguideConfig: config,
102
+ configPath,
103
+ });
104
+
105
+ expect(styleguide?.rules?.['operation-2xx-response']).toEqual('warn');
106
+ expect(plugins).toBeDefined();
107
+ expect(plugins?.length).toBe(2);
108
+
109
+ const localPlugin = plugins?.find((p) => p.id === 'test-plugin');
110
+ expect(localPlugin).toBeDefined();
111
+
112
+ expect(localPlugin).toMatchObject({
113
+ id: 'test-plugin',
114
+ rules: {
115
+ oas3: {
116
+ 'test-plugin/oas3-rule-name': 'oas3-rule-stub',
117
+ },
118
+ },
119
+ });
120
+
121
+ expect(styleguide.extendPaths!.map(removeAbsolutePath)).toEqual([
122
+ 'resolve-config/redocly.yaml',
123
+ 'resolve-config/local-config-with-esm.yaml',
124
+ 'resolve-config/redocly.yaml',
125
+ ]);
126
+ expect(styleguide.pluginPaths!.map(removeAbsolutePath)).toEqual([
127
+ 'resolve-config/plugin-esm.mjs',
128
+ ]);
129
+
130
+ expect(styleguide.rules).toEqual({
131
+ 'operation-2xx-response': 'warn',
132
+ });
133
+ });
134
+
135
+ it('should resolve local file config with commonjs plugin with a default export function', async () => {
136
+ const config = {
137
+ ...baseStyleguideConfig,
138
+ extends: ['local-config-with-commonjs-export-function.yaml'],
139
+ };
140
+
141
+ const { plugins, ...styleguide } = await resolveStyleguideConfig({
142
+ styleguideConfig: config,
143
+ configPath,
144
+ });
145
+
146
+ expect(styleguide?.rules?.['operation-2xx-response']).toEqual('warn');
147
+ expect(plugins).toBeDefined();
148
+ expect(plugins?.length).toBe(2);
149
+
150
+ const localPlugin = plugins?.find((p) => p.id === 'test-plugin');
151
+ expect(localPlugin).toBeDefined();
152
+
153
+ expect(localPlugin).toMatchObject({
154
+ id: 'test-plugin',
155
+ rules: {
156
+ oas3: {
157
+ 'test-plugin/oas3-rule-name': 'oas3-rule-stub',
158
+ },
159
+ },
160
+ });
161
+
162
+ expect(styleguide.extendPaths!.map(removeAbsolutePath)).toEqual([
163
+ 'resolve-config/redocly.yaml',
164
+ 'resolve-config/local-config-with-commonjs-export-function.yaml',
165
+ 'resolve-config/redocly.yaml',
166
+ ]);
167
+ expect(styleguide.pluginPaths!.map(removeAbsolutePath)).toEqual([
168
+ 'resolve-config/plugin-with-export-function.cjs',
169
+ ]);
170
+
171
+ expect(styleguide.rules).toEqual({
172
+ 'operation-2xx-response': 'warn',
173
+ });
174
+ });
175
+
94
176
  // TODO: fix circular test
95
177
  it.skip('should throw circular error', () => {
96
178
  const config = {
@@ -0,0 +1,2 @@
1
+ plugins:
2
+ - plugin-with-export-function.cjs
@@ -0,0 +1,2 @@
1
+ plugins:
2
+ - plugin-esm.mjs
@@ -0,0 +1,10 @@
1
+ export default async function () {
2
+ return {
3
+ id: 'test-plugin',
4
+ rules: {
5
+ oas3: {
6
+ 'oas3-rule-name': 'oas3-rule-stub',
7
+ },
8
+ },
9
+ };
10
+ }
@@ -0,0 +1,10 @@
1
+ module.exports = async function () {
2
+ return {
3
+ id: 'test-plugin',
4
+ rules: {
5
+ oas3: {
6
+ 'oas3-rule-name': 'oas3-rule-stub',
7
+ },
8
+ },
9
+ };
10
+ };
@@ -1,7 +1,10 @@
1
1
  import * as path from 'path';
2
2
  import { loadConfig } from '../load';
3
3
 
4
- describe('resolving a plugin', () => {
4
+ // FIXME: skipping due to the 'Test environment has been torn down' Jest error.
5
+ // Covered the below in the `miscellaneous/resolve-plugins` e2e tests.
6
+ // Unskip when Jest gets this fixed.
7
+ describe.skip('resolving a plugin', () => {
5
8
  const configPath = path.join(__dirname, 'fixtures/plugin-config.yaml');
6
9
 
7
10
  it('should prefix rule names with the plugin id', async () => {
package/src/config/all.ts CHANGED
@@ -5,6 +5,7 @@ const all: PluginStyleguideConfig<'built-in'> = {
5
5
  'info-contact': 'error',
6
6
  'info-license': 'error',
7
7
  'info-license-url': 'error',
8
+ 'info-license-strict': 'error',
8
9
  'tag-description': 'error',
9
10
  'tags-alphabetical': 'error',
10
11
  'parameter-description': 'error',
@@ -108,6 +109,7 @@ const all: PluginStyleguideConfig<'built-in'> = {
108
109
  async2Rules: {
109
110
  spec: 'error',
110
111
  'info-contact': 'error',
112
+ 'info-license-strict': 'error',
111
113
  'operation-operationId': 'error',
112
114
  'tag-description': 'error',
113
115
  'tags-alphabetical': 'error',
@@ -117,13 +119,14 @@ const all: PluginStyleguideConfig<'built-in'> = {
117
119
  async3Rules: {
118
120
  spec: 'error',
119
121
  'info-contact': 'error',
122
+ 'info-license-strict': 'error',
120
123
  'operation-operationId': 'error',
121
124
  'tag-description': 'error',
122
125
  'tags-alphabetical': 'error',
123
126
  'channels-kebab-case': 'error',
124
127
  'no-channel-trailing-slash': 'error',
125
128
  },
126
- arazzoRules: { spec: 'error' },
129
+ arazzoRules: { spec: 'error', 'parameters-no-body-inside-in': 'off' },
127
130
  };
128
131
 
129
132
  export default all;