@redocly/openapi-core 1.19.0 → 1.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/__tests__/utils.ts +14 -7
  3. package/lib/benchmark/benches/lint-with-many-rules.bench.d.ts +1 -0
  4. package/lib/benchmark/benches/lint-with-many-rules.bench.js +5 -1
  5. package/lib/benchmark/benches/lint-with-nested-rule.bench.d.ts +1 -0
  6. package/lib/benchmark/benches/lint-with-nested-rule.bench.js +5 -1
  7. package/lib/benchmark/benches/lint-with-no-rules.bench.d.ts +1 -0
  8. package/lib/benchmark/benches/lint-with-no-rules.bench.js +5 -1
  9. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.d.ts +1 -0
  10. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +17 -13
  11. package/lib/benchmark/benches/lint-with-top-level-rule.bench.d.ts +1 -0
  12. package/lib/benchmark/benches/lint-with-top-level-rule.bench.js +16 -12
  13. package/lib/benchmark/utils.d.ts +3 -3
  14. package/lib/benchmark/utils.js +3 -3
  15. package/lib/config/all.js +4 -1
  16. package/lib/config/builtIn.js +15 -20
  17. package/lib/config/config-resolvers.d.ts +1 -1
  18. package/lib/config/config-resolvers.js +67 -28
  19. package/lib/config/config.d.ts +3 -2
  20. package/lib/config/load.d.ts +1 -1
  21. package/lib/config/minimal.js +4 -0
  22. package/lib/config/recommended-strict.js +5 -1
  23. package/lib/config/recommended.js +5 -1
  24. package/lib/config/types.d.ts +9 -2
  25. package/lib/config/utils.d.ts +3 -1
  26. package/lib/config/utils.js +8 -0
  27. package/lib/decorators/common/filters/filter-helper.d.ts +1 -1
  28. package/lib/decorators/common/filters/filter-in.d.ts +1 -1
  29. package/lib/decorators/common/filters/filter-out.d.ts +1 -1
  30. package/lib/decorators/common/info-description-override.d.ts +1 -1
  31. package/lib/decorators/common/info-override.d.ts +1 -1
  32. package/lib/decorators/common/media-type-examples-override.d.ts +1 -1
  33. package/lib/decorators/common/operation-description-override.d.ts +1 -1
  34. package/lib/decorators/common/registry-dependencies.d.ts +1 -1
  35. package/lib/decorators/common/remove-x-internal.d.ts +1 -1
  36. package/lib/decorators/common/tag-description-override.d.ts +1 -1
  37. package/lib/decorators/oas2/index.d.ts +1 -1
  38. package/lib/decorators/oas3/index.d.ts +1 -1
  39. package/lib/format/codeframes.d.ts +1 -1
  40. package/lib/format/format.d.ts +1 -1
  41. package/lib/format/format.js +1 -1
  42. package/lib/js-yaml/index.d.ts +1 -1
  43. package/lib/lint.d.ts +1 -1
  44. package/lib/logger.js +2 -2
  45. package/lib/oas-types.d.ts +2 -2
  46. package/lib/redocly/domains.d.ts +1 -1
  47. package/lib/redocly/index.d.ts +1 -1
  48. package/lib/ref-utils.d.ts +2 -2
  49. package/lib/ref-utils.js +1 -0
  50. package/lib/resolve.d.ts +2 -2
  51. package/lib/rules/ajv.d.ts +1 -1
  52. package/lib/rules/arazzo/index.js +2 -0
  53. package/lib/rules/async2/channels-kebab-case.d.ts +1 -1
  54. package/lib/rules/async2/index.js +2 -0
  55. package/lib/rules/async2/no-channel-trailing-slash.d.ts +1 -1
  56. package/lib/rules/async3/channels-kebab-case.d.ts +1 -1
  57. package/lib/rules/async3/index.js +2 -0
  58. package/lib/rules/async3/no-channel-trailing-slash.d.ts +1 -1
  59. package/lib/rules/common/assertions/asserts.d.ts +2 -2
  60. package/lib/rules/common/assertions/index.d.ts +1 -2
  61. package/lib/rules/common/assertions/utils.d.ts +1 -1
  62. package/lib/rules/common/info-contact.d.ts +1 -1
  63. package/lib/rules/common/info-license-strict.d.ts +2 -0
  64. package/lib/rules/common/info-license-strict.js +26 -0
  65. package/lib/rules/common/info-license-url.d.ts +1 -1
  66. package/lib/rules/common/info-license.d.ts +1 -1
  67. package/lib/rules/common/no-ambiguous-paths.d.ts +1 -1
  68. package/lib/rules/common/no-enum-type-mismatch.d.ts +1 -1
  69. package/lib/rules/common/no-http-verbs-in-paths.d.ts +1 -1
  70. package/lib/rules/common/no-identical-paths.d.ts +1 -1
  71. package/lib/rules/common/no-path-trailing-slash.d.ts +1 -1
  72. package/lib/rules/common/no-required-schema-properties-undefined.d.ts +1 -1
  73. package/lib/rules/common/operation-2xx-response.d.ts +1 -1
  74. package/lib/rules/common/operation-4xx-response.d.ts +1 -1
  75. package/lib/rules/common/operation-description.d.ts +1 -1
  76. package/lib/rules/common/operation-operationId-unique.d.ts +1 -1
  77. package/lib/rules/common/operation-operationId-url-safe.d.ts +1 -1
  78. package/lib/rules/common/operation-operationId-url-safe.js +1 -0
  79. package/lib/rules/common/operation-operationId.d.ts +1 -1
  80. package/lib/rules/common/operation-parameters-unique.d.ts +1 -1
  81. package/lib/rules/common/operation-singular-tag.d.ts +1 -1
  82. package/lib/rules/common/operation-summary.d.ts +1 -1
  83. package/lib/rules/common/operation-tag-defined.d.ts +1 -1
  84. package/lib/rules/common/parameter-description.d.ts +1 -1
  85. package/lib/rules/common/path-declaration-must-exist.d.ts +1 -1
  86. package/lib/rules/common/path-excludes-patterns.d.ts +1 -1
  87. package/lib/rules/common/path-http-verbs-order.d.ts +1 -1
  88. package/lib/rules/common/path-not-include-query.d.ts +1 -1
  89. package/lib/rules/common/path-params-defined.d.ts +1 -1
  90. package/lib/rules/common/path-segment-plural.d.ts +1 -1
  91. package/lib/rules/common/paths-kebab-case.d.ts +1 -1
  92. package/lib/rules/common/required-string-property-missing-min-length.d.ts +1 -1
  93. package/lib/rules/common/response-contains-header.d.ts +1 -1
  94. package/lib/rules/common/security-defined.d.ts +1 -1
  95. package/lib/rules/common/spec-strict-refs.d.ts +1 -1
  96. package/lib/rules/common/tag-description.d.ts +1 -1
  97. package/lib/rules/common/tags-alphabetical.d.ts +1 -1
  98. package/lib/rules/no-unresolved-refs.d.ts +3 -3
  99. package/lib/rules/oas2/boolean-parameter-prefixes.d.ts +1 -1
  100. package/lib/rules/oas2/index.d.ts +1 -1
  101. package/lib/rules/oas2/index.js +2 -0
  102. package/lib/rules/oas2/response-contains-property.d.ts +1 -1
  103. package/lib/rules/oas3/array-parameter-serialization.d.ts +1 -1
  104. package/lib/rules/oas3/boolean-parameter-prefixes.d.ts +1 -1
  105. package/lib/rules/oas3/component-name-unique.d.ts +1 -1
  106. package/lib/rules/oas3/index.d.ts +1 -1
  107. package/lib/rules/oas3/index.js +2 -0
  108. package/lib/rules/oas3/no-empty-servers.d.ts +1 -1
  109. package/lib/rules/oas3/no-example-value-and-externalValue.d.ts +1 -1
  110. package/lib/rules/oas3/no-invalid-media-type-examples.d.ts +1 -1
  111. package/lib/rules/oas3/no-server-example.com.d.ts +1 -1
  112. package/lib/rules/oas3/no-server-example.com.js +1 -0
  113. package/lib/rules/oas3/no-server-trailing-slash.d.ts +1 -1
  114. package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +1 -1
  115. package/lib/rules/oas3/no-undefined-server-variable.d.ts +1 -1
  116. package/lib/rules/oas3/no-unused-components.d.ts +1 -1
  117. package/lib/rules/oas3/response-contains-property.d.ts +1 -1
  118. package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +1 -1
  119. package/lib/rules/other/stats.d.ts +3 -3
  120. package/lib/rules/other/stats.js +5 -3
  121. package/lib/rules/spot/parameters-no-body-inside-in.d.ts +2 -0
  122. package/lib/rules/spot/parameters-no-body-inside-in.js +18 -0
  123. package/lib/rules/utils.d.ts +4 -2
  124. package/lib/rules/utils.js +27 -1
  125. package/lib/types/arazzo.d.ts +1 -2275
  126. package/lib/types/arazzo.js +246 -309
  127. package/lib/types/asyncapi2.d.ts +1 -1
  128. package/lib/types/asyncapi2.js +3 -1
  129. package/lib/types/asyncapi3.d.ts +1 -1
  130. package/lib/types/json-schema-adapter.d.ts +1 -1
  131. package/lib/types/oas3.d.ts +4 -0
  132. package/lib/types/oas3.js +9 -9
  133. package/lib/types/oas3_1.d.ts +3 -0
  134. package/lib/types/oas3_1.js +8 -8
  135. package/lib/types/redocly-yaml.d.ts +6 -6
  136. package/lib/types/redocly-yaml.js +4 -1
  137. package/lib/typings/arazzo.d.ts +145 -27
  138. package/lib/typings/common.d.ts +1 -1
  139. package/lib/typings/swagger.d.ts +2 -2
  140. package/lib/visitors.d.ts +18 -1
  141. package/lib/walk.d.ts +3 -3
  142. package/package.json +2 -2
  143. package/src/__tests__/bundle.test.ts +4 -4
  144. package/src/__tests__/lint.test.ts +29 -21
  145. package/src/__tests__/walk.test.ts +25 -25
  146. package/src/benchmark/benches/lint-with-many-rules.bench.ts +7 -1
  147. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +7 -1
  148. package/src/benchmark/benches/lint-with-no-rules.bench.ts +8 -1
  149. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +18 -13
  150. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +17 -11
  151. package/src/benchmark/fork.js +4 -0
  152. package/src/benchmark/utils.ts +6 -5
  153. package/src/bundle.ts +2 -1
  154. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +10 -2
  155. package/src/config/__tests__/config-resolvers.test.ts +82 -0
  156. package/src/config/__tests__/fixtures/resolve-config/local-config-with-commonjs-export-function.yaml +2 -0
  157. package/src/config/__tests__/fixtures/resolve-config/local-config-with-esm.yaml +2 -0
  158. package/src/config/__tests__/fixtures/resolve-config/plugin-esm.mjs +10 -0
  159. package/src/config/__tests__/fixtures/resolve-config/plugin-with-export-function.cjs +10 -0
  160. package/src/config/__tests__/resolve-plugins.test.ts +4 -1
  161. package/src/config/all.ts +4 -1
  162. package/src/config/builtIn.ts +5 -10
  163. package/src/config/config-resolvers.ts +78 -23
  164. package/src/config/config.ts +7 -8
  165. package/src/config/load.ts +2 -2
  166. package/src/config/minimal.ts +4 -0
  167. package/src/config/recommended-strict.ts +5 -1
  168. package/src/config/recommended.ts +5 -1
  169. package/src/config/types.ts +19 -3
  170. package/src/config/utils.ts +13 -2
  171. package/src/decorators/__tests__/filter-in.test.ts +29 -26
  172. package/src/decorators/__tests__/filter-out.test.ts +32 -23
  173. package/src/decorators/__tests__/media-type-examples-override.test.ts +45 -45
  174. package/src/decorators/__tests__/remove-x-internal.test.ts +8 -5
  175. package/src/decorators/common/filters/filter-helper.ts +2 -1
  176. package/src/decorators/common/filters/filter-in.ts +2 -1
  177. package/src/decorators/common/filters/filter-out.ts +2 -1
  178. package/src/decorators/common/info-description-override.ts +3 -2
  179. package/src/decorators/common/info-override.ts +1 -1
  180. package/src/decorators/common/media-type-examples-override.ts +4 -3
  181. package/src/decorators/common/operation-description-override.ts +5 -4
  182. package/src/decorators/common/registry-dependencies.ts +2 -2
  183. package/src/decorators/common/remove-x-internal.ts +3 -2
  184. package/src/decorators/common/tag-description-override.ts +3 -2
  185. package/src/decorators/oas2/__tests__/remove-unused-components.test.ts +3 -3
  186. package/src/decorators/oas2/index.ts +2 -1
  187. package/src/decorators/oas2/remove-unused-components.ts +1 -1
  188. package/src/decorators/oas3/__tests__/remove-unused-components.test.ts +4 -4
  189. package/src/decorators/oas3/index.ts +2 -1
  190. package/src/decorators/oas3/remove-unused-components.ts +1 -1
  191. package/src/format/codeframes.ts +2 -1
  192. package/src/format/format.ts +9 -4
  193. package/src/js-yaml/index.ts +3 -1
  194. package/src/lint.ts +2 -1
  195. package/src/logger.ts +2 -2
  196. package/src/oas-types.ts +14 -13
  197. package/src/redocly/domains.ts +1 -1
  198. package/src/redocly/index.ts +3 -3
  199. package/src/redocly/registry-api.ts +5 -3
  200. package/src/ref-utils.ts +4 -2
  201. package/src/resolve.ts +6 -4
  202. package/src/rules/__tests__/no-unresolved-refs.test.ts +21 -7
  203. package/src/rules/ajv.ts +2 -1
  204. package/src/rules/arazzo/__tests__/parameters-no-body-inside-in.test.ts +76 -0
  205. package/src/rules/arazzo/index.ts +5 -2
  206. package/src/rules/async2/__tests__/channels-kebab-case.test.ts +9 -5
  207. package/src/rules/async2/__tests__/no-channel-trailing-slash.test.ts +3 -3
  208. package/src/rules/async2/channels-kebab-case.ts +2 -2
  209. package/src/rules/async2/index.ts +4 -1
  210. package/src/rules/async2/no-channel-trailing-slash.ts +2 -2
  211. package/src/rules/async3/__tests__/channels-kebab-case.test.ts +9 -5
  212. package/src/rules/async3/__tests__/no-channel-trailing-slash.test.ts +3 -3
  213. package/src/rules/async3/channels-kebab-case.ts +3 -3
  214. package/src/rules/async3/index.ts +4 -1
  215. package/src/rules/async3/no-channel-trailing-slash.ts +3 -3
  216. package/src/rules/common/__tests__/info-license-strict.test.ts +141 -0
  217. package/src/rules/common/__tests__/info-license.test.ts +2 -2
  218. package/src/rules/common/__tests__/license-url.test.ts +2 -2
  219. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +1 -1
  220. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +5 -5
  221. package/src/rules/common/__tests__/no-identical-paths.test.ts +1 -1
  222. package/src/rules/common/__tests__/no-invalid-parameter-examples.test.ts +1 -1
  223. package/src/rules/common/__tests__/no-invalid-schema-examples.test.ts +1 -1
  224. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +4 -4
  225. package/src/rules/common/__tests__/no-required-schema-properties-undefined.test.ts +11 -11
  226. package/src/rules/common/__tests__/operation-2xx-response.test.ts +8 -6
  227. package/src/rules/common/__tests__/operation-4xx-response.test.ts +9 -7
  228. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +2 -2
  229. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +1 -1
  230. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +4 -4
  231. package/src/rules/common/__tests__/operation-singular-tag.test.ts +2 -2
  232. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +2 -2
  233. package/src/rules/common/__tests__/path-not-include-query.test.ts +2 -2
  234. package/src/rules/common/__tests__/path-params-defined.test.ts +5 -5
  235. package/src/rules/common/__tests__/paths-kebab-case.test.ts +6 -4
  236. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +8 -8
  237. package/src/rules/common/__tests__/security-defined.test.ts +14 -8
  238. package/src/rules/common/__tests__/spec-strict-refs.test.ts +1 -1
  239. package/src/rules/common/__tests__/spec.test.ts +10 -10
  240. package/src/rules/common/__tests__/tag-description.test.ts +2 -2
  241. package/src/rules/common/__tests__/tags-alphabetical.test.ts +6 -4
  242. package/src/rules/common/assertions/asserts.ts +5 -9
  243. package/src/rules/common/assertions/index.ts +1 -2
  244. package/src/rules/common/assertions/utils.ts +4 -2
  245. package/src/rules/common/info-contact.ts +2 -1
  246. package/src/rules/common/info-license-strict.ts +24 -0
  247. package/src/rules/common/info-license-url.ts +2 -1
  248. package/src/rules/common/info-license.ts +2 -1
  249. package/src/rules/common/no-ambiguous-paths.ts +4 -4
  250. package/src/rules/common/no-enum-type-mismatch.ts +5 -4
  251. package/src/rules/common/no-http-verbs-in-paths.ts +5 -4
  252. package/src/rules/common/no-identical-paths.ts +4 -4
  253. package/src/rules/common/no-invalid-parameter-examples.ts +3 -2
  254. package/src/rules/common/no-path-trailing-slash.ts +2 -2
  255. package/src/rules/common/no-required-schema-properties-undefined.ts +5 -4
  256. package/src/rules/common/operation-2xx-response.ts +3 -2
  257. package/src/rules/common/operation-4xx-response.ts +3 -2
  258. package/src/rules/common/operation-description.ts +5 -4
  259. package/src/rules/common/operation-operationId-unique.ts +4 -4
  260. package/src/rules/common/operation-operationId-url-safe.ts +5 -4
  261. package/src/rules/common/operation-operationId.ts +5 -4
  262. package/src/rules/common/operation-parameters-unique.ts +4 -4
  263. package/src/rules/common/operation-singular-tag.ts +4 -4
  264. package/src/rules/common/operation-summary.ts +5 -4
  265. package/src/rules/common/operation-tag-defined.ts +4 -4
  266. package/src/rules/common/parameter-description.ts +4 -4
  267. package/src/rules/common/path-declaration-must-exist.ts +2 -2
  268. package/src/rules/common/path-excludes-patterns.ts +4 -4
  269. package/src/rules/common/path-http-verbs-order.ts +4 -4
  270. package/src/rules/common/path-not-include-query.ts +2 -2
  271. package/src/rules/common/path-params-defined.ts +4 -4
  272. package/src/rules/common/path-segment-plural.ts +3 -2
  273. package/src/rules/common/paths-kebab-case.ts +2 -2
  274. package/src/rules/common/required-string-property-missing-min-length.ts +4 -4
  275. package/src/rules/common/response-contains-header.ts +5 -4
  276. package/src/rules/common/scalar-property-missing-example.ts +2 -1
  277. package/src/rules/common/security-defined.ts +5 -5
  278. package/src/rules/common/spec-strict-refs.ts +2 -1
  279. package/src/rules/common/spec.ts +3 -2
  280. package/src/rules/common/tag-description.ts +2 -1
  281. package/src/rules/common/tags-alphabetical.ts +4 -4
  282. package/src/rules/no-unresolved-refs.ts +4 -3
  283. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +7 -5
  284. package/src/rules/oas2/__tests__/response-contains-header.test.ts +14 -8
  285. package/src/rules/oas2/__tests__/response-contains-property.test.ts +14 -8
  286. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +3 -1
  287. package/src/rules/oas2/boolean-parameter-prefixes.ts +1 -1
  288. package/src/rules/oas2/index.ts +4 -2
  289. package/src/rules/oas2/request-mime-type.ts +2 -1
  290. package/src/rules/oas2/response-contains-property.ts +3 -2
  291. package/src/rules/oas2/response-mime-type.ts +2 -1
  292. package/src/rules/oas3/__tests__/array-parameter-serialization.test.ts +18 -6
  293. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +7 -5
  294. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +6 -6
  295. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +2 -2
  296. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +34 -24
  297. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +3 -3
  298. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +3 -3
  299. package/src/rules/oas3/__tests__/no-unused-components.test.ts +1 -1
  300. package/src/rules/oas3/__tests__/operation-4xx-problem-details-rfc7807.test.ts +3 -3
  301. package/src/rules/oas3/__tests__/response-contains-header.test.ts +34 -22
  302. package/src/rules/oas3/__tests__/response-contains-property.test.ts +34 -20
  303. package/src/rules/oas3/__tests__/spec/spec.test.ts +12 -3
  304. package/src/rules/oas3/__tests__/spec-components-invalid-map-name.test.ts +9 -3
  305. package/src/rules/oas3/__tests__/utils/lint-document-for-test.ts +1 -1
  306. package/src/rules/oas3/array-parameter-serialization.ts +3 -2
  307. package/src/rules/oas3/boolean-parameter-prefixes.ts +1 -1
  308. package/src/rules/oas3/component-name-unique.ts +3 -3
  309. package/src/rules/oas3/index.ts +3 -1
  310. package/src/rules/oas3/no-empty-servers.ts +1 -1
  311. package/src/rules/oas3/no-example-value-and-externalValue.ts +1 -1
  312. package/src/rules/oas3/no-invalid-media-type-examples.ts +6 -4
  313. package/src/rules/oas3/no-server-example.com.ts +2 -1
  314. package/src/rules/oas3/no-server-trailing-slash.ts +1 -1
  315. package/src/rules/oas3/no-server-variables-empty-enum.ts +2 -2
  316. package/src/rules/oas3/no-undefined-server-variable.ts +1 -1
  317. package/src/rules/oas3/no-unused-components.ts +2 -2
  318. package/src/rules/oas3/operation-4xx-problem-details-rfc7807.ts +2 -1
  319. package/src/rules/oas3/request-mime-type.ts +2 -1
  320. package/src/rules/oas3/response-contains-property.ts +3 -2
  321. package/src/rules/oas3/response-mime-type.ts +2 -1
  322. package/src/rules/oas3/spec-components-invalid-map-name.ts +3 -3
  323. package/src/rules/other/stats.ts +8 -6
  324. package/src/rules/spot/parameters-no-body-inside-in.ts +17 -0
  325. package/src/rules/utils.ts +41 -4
  326. package/src/types/arazzo.ts +257 -334
  327. package/src/types/asyncapi2.ts +4 -1
  328. package/src/types/asyncapi3.ts +3 -1
  329. package/src/types/json-schema-adapter.ts +2 -2
  330. package/src/types/oas3.ts +4 -4
  331. package/src/types/oas3_1.ts +3 -3
  332. package/src/types/redocly-yaml.ts +7 -4
  333. package/src/typings/arazzo.ts +169 -41
  334. package/src/typings/common.ts +1 -0
  335. package/src/typings/swagger.ts +2 -2
  336. package/src/visitors.ts +40 -1
  337. package/src/walk.ts +3 -3
  338. package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @redocly/openapi-core
2
2
 
3
+ ## 1.20.1
4
+
5
+ ## 1.20.0
6
+
7
+ ### Minor Changes
8
+
9
+ - Added support for ESM plugins and importing of plugins directly from npm package: `@vendor/package/plugin.js` instead of `./node_modules/@vendor/package/plugin.js`.
10
+ - Added `info-license-strict` rule as a replacement of the `info-license-url` to support the OpenAPI 3.1 changes to allow identifier or URL license details.
11
+ - Changed plugins format to export a function instead of an object for compatibility with other Redocly products. The backwards compatibility with an old format of plugins is maintained.
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated @redocly/config to v0.9.0.
16
+
3
17
  ## 1.19.0
4
18
 
5
19
  ### Minor Changes
@@ -45,7 +45,7 @@ export const yamlSerializer = {
45
45
  },
46
46
  };
47
47
 
48
- export function makeConfigForRuleset(
48
+ export async function makeConfigForRuleset(
49
49
  rules: Oas3RuleSet,
50
50
  plugin?: Partial<Plugin>,
51
51
  version: string = 'oas3'
@@ -55,7 +55,7 @@ export function makeConfigForRuleset(
55
55
  Object.keys(rules).forEach((name) => {
56
56
  rulesConf[`${ruleId}/${name}`] = 'error';
57
57
  });
58
- const plugins = resolvePlugins([
58
+ const plugins = await resolvePlugins([
59
59
  {
60
60
  ...plugin,
61
61
  id: ruleId,
@@ -69,17 +69,24 @@ export function makeConfigForRuleset(
69
69
  });
70
70
  }
71
71
 
72
- export async function makeConfig(
73
- rules: Record<string, RuleConfig>,
74
- decorators?: Record<string, DecoratorConfig>,
75
- configPath?: string
76
- ) {
72
+ export async function makeConfig({
73
+ rules,
74
+ decorators,
75
+ configPath,
76
+ arazzoRules,
77
+ }: {
78
+ rules: Record<string, RuleConfig>;
79
+ decorators?: Record<string, DecoratorConfig>;
80
+ configPath?: string;
81
+ arazzoRules?: Record<string, RuleConfig>;
82
+ }) {
77
83
  return new StyleguideConfig(
78
84
  await resolveStyleguideConfig({
79
85
  styleguideConfig: {
80
86
  plugins: [],
81
87
  extends: [],
82
88
  rules,
89
+ arazzoRules,
83
90
  decorators,
84
91
  },
85
92
  }),
@@ -1,3 +1,4 @@
1
1
  export declare const name = "Validate with 50 top-level rules";
2
2
  export declare const count = 10;
3
+ export declare function setupAsync(): Promise<void>;
3
4
  export declare function measureAsync(): Promise<import("../..").NormalizedProblem[]>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.count = exports.name = void 0;
4
+ exports.setupAsync = setupAsync;
4
5
  exports.measureAsync = measureAsync;
5
6
  const fs_1 = require("fs");
6
7
  const path_1 = require("path");
@@ -24,7 +25,10 @@ for (let i = 0; i < 50; i++) {
24
25
  };
25
26
  };
26
27
  }
27
- const config = (0, utils_1.makeConfigForRuleset)(ruleset);
28
+ let config;
29
+ async function setupAsync() {
30
+ config = await (0, utils_1.makeConfigForRuleset)(ruleset);
31
+ }
28
32
  function measureAsync() {
29
33
  return (0, lint_1.lintDocument)({
30
34
  externalRefResolver: new resolve_1.BaseResolver(),
@@ -1,3 +1,4 @@
1
1
  export declare const name = "Validate with single nested rule";
2
2
  export declare const count = 10;
3
+ export declare function setupAsync(): Promise<void>;
3
4
  export declare function measureAsync(): Promise<import("../..").NormalizedProblem[]>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.count = exports.name = void 0;
4
+ exports.setupAsync = setupAsync;
4
5
  exports.measureAsync = measureAsync;
5
6
  const fs_1 = require("fs");
6
7
  const path_1 = require("path");
@@ -30,7 +31,10 @@ const visitor = {
30
31
  };
31
32
  },
32
33
  };
33
- const config = (0, utils_1.makeConfigForRuleset)(visitor);
34
+ let config;
35
+ async function setupAsync() {
36
+ config = await (0, utils_1.makeConfigForRuleset)(visitor);
37
+ }
34
38
  function measureAsync() {
35
39
  return (0, lint_1.lintDocument)({
36
40
  externalRefResolver: new resolve_1.BaseResolver(),
@@ -1,3 +1,4 @@
1
1
  export declare const name = "Validate with no rules";
2
2
  export declare const count = 10;
3
+ export declare function setupAsync(): Promise<void>;
3
4
  export declare function measureAsync(): Promise<import("../..").NormalizedProblem[]>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.count = exports.name = void 0;
4
+ exports.setupAsync = setupAsync;
4
5
  exports.measureAsync = measureAsync;
5
6
  const fs_1 = require("fs");
6
7
  const path_1 = require("path");
@@ -11,7 +12,10 @@ exports.name = 'Validate with no rules';
11
12
  exports.count = 10;
12
13
  const rebillyDefinitionRef = (0, path_1.resolve)((0, path_1.join)(__dirname, 'rebilly.yaml'));
13
14
  const rebillyDocument = (0, utils_1.parseYamlToDocument)((0, fs_1.readFileSync)(rebillyDefinitionRef, 'utf-8'), rebillyDefinitionRef);
14
- const config = (0, utils_1.makeConfigForRuleset)({});
15
+ let config;
16
+ async function setupAsync() {
17
+ config = await (0, utils_1.makeConfigForRuleset)({});
18
+ }
15
19
  function measureAsync() {
16
20
  return (0, lint_1.lintDocument)({
17
21
  externalRefResolver: new resolve_1.BaseResolver(),
@@ -1,3 +1,4 @@
1
1
  export declare const name = "Validate with single top-level rule and report";
2
2
  export declare const count = 10;
3
+ export declare function setupAsync(): Promise<void>;
3
4
  export declare function measureAsync(): Promise<import("../..").NormalizedProblem[]>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.count = exports.name = void 0;
4
+ exports.setupAsync = setupAsync;
4
5
  exports.measureAsync = measureAsync;
5
6
  const fs_1 = require("fs");
6
7
  const path_1 = require("path");
@@ -11,19 +12,22 @@ exports.name = 'Validate with single top-level rule and report';
11
12
  exports.count = 10;
12
13
  const rebillyDefinitionRef = (0, path_1.resolve)((0, path_1.join)(__dirname, 'rebilly.yaml'));
13
14
  const rebillyDocument = (0, utils_1.parseYamlToDocument)((0, fs_1.readFileSync)(rebillyDefinitionRef, 'utf-8'), rebillyDefinitionRef);
14
- const config = (0, utils_1.makeConfigForRuleset)({
15
- test: () => {
16
- return {
17
- Schema(schema, ctx) {
18
- if (schema.type === 'number') {
19
- ctx.report({
20
- message: 'type number is not allowed',
21
- });
22
- }
23
- },
24
- };
25
- },
26
- });
15
+ let config;
16
+ async function setupAsync() {
17
+ config = await (0, utils_1.makeConfigForRuleset)({
18
+ test: () => {
19
+ return {
20
+ Schema(schema, ctx) {
21
+ if (schema.type === 'number') {
22
+ ctx.report({
23
+ message: 'type number is not allowed',
24
+ });
25
+ }
26
+ },
27
+ };
28
+ },
29
+ });
30
+ }
27
31
  function measureAsync() {
28
32
  return (0, lint_1.lintDocument)({
29
33
  externalRefResolver: new resolve_1.BaseResolver(),
@@ -1,3 +1,4 @@
1
1
  export declare const name = "Validate with single top-level rule";
2
2
  export declare const count = 10;
3
+ export declare function setupAsync(): Promise<void>;
3
4
  export declare function measureAsync(): Promise<import("../..").NormalizedProblem[]>;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.count = exports.name = void 0;
4
+ exports.setupAsync = setupAsync;
4
5
  exports.measureAsync = measureAsync;
5
6
  const fs_1 = require("fs");
6
7
  const path_1 = require("path");
@@ -11,18 +12,21 @@ exports.name = 'Validate with single top-level rule';
11
12
  exports.count = 10;
12
13
  const rebillyDefinitionRef = (0, path_1.resolve)((0, path_1.join)(__dirname, 'rebilly.yaml'));
13
14
  const rebillyDocument = (0, utils_1.parseYamlToDocument)((0, fs_1.readFileSync)(rebillyDefinitionRef, 'utf-8'), rebillyDefinitionRef);
14
- const config = (0, utils_1.makeConfigForRuleset)({
15
- test: () => {
16
- let count = 0;
17
- return {
18
- Schema() {
19
- count++;
20
- if (count === -1)
21
- throw new Error('Disable optimization');
22
- },
23
- };
24
- },
25
- });
15
+ let config;
16
+ async function setupAsync() {
17
+ config = await (0, utils_1.makeConfigForRuleset)({
18
+ test: () => {
19
+ let count = 0;
20
+ return {
21
+ Schema() {
22
+ count++;
23
+ if (count === -1)
24
+ throw new Error('Disable optimization');
25
+ },
26
+ };
27
+ },
28
+ });
29
+ }
26
30
  function measureAsync() {
27
31
  return (0, lint_1.lintDocument)({
28
32
  externalRefResolver: new resolve_1.BaseResolver(),
@@ -1,6 +1,6 @@
1
- import { Document } from '../resolve';
2
- import { Oas3RuleSet } from '../oas-types';
3
1
  import { StyleguideConfig } from '../config';
2
+ import type { Document } from '../resolve';
3
+ import type { Oas3RuleSet } from '../oas-types';
4
4
  import type { Plugin } from '../config/types';
5
5
  export declare function parseYamlToDocument(body: string, absoluteRef?: string): Document;
6
- export declare function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>): StyleguideConfig;
6
+ export declare function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>): Promise<StyleguideConfig>;
@@ -11,20 +11,20 @@ function parseYamlToDocument(body, absoluteRef = '') {
11
11
  parsed: (0, js_yaml_1.parseYaml)(body, { filename: absoluteRef }),
12
12
  };
13
13
  }
14
- function makeConfigForRuleset(rules, plugin) {
14
+ async function makeConfigForRuleset(rules, plugin) {
15
15
  const rulesConf = {};
16
16
  const ruleId = 'test';
17
17
  Object.keys(rules).forEach((name) => {
18
18
  rulesConf[`${ruleId}/${name}`] = 'error';
19
19
  });
20
20
  const extendConfigs = [
21
- (0, config_1.resolvePlugins)([
21
+ (await (0, config_1.resolvePlugins)([
22
22
  {
23
23
  ...plugin,
24
24
  id: ruleId,
25
25
  rules: { oas3: rules },
26
26
  },
27
- ]),
27
+ ])),
28
28
  ];
29
29
  if (rules) {
30
30
  extendConfigs.push({ rules });
package/lib/config/all.js CHANGED
@@ -5,6 +5,7 @@ const all = {
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 = {
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,12 +119,13 @@ const all = {
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
  exports.default = all;
@@ -10,16 +10,11 @@ const oas2_1 = require("../rules/oas2");
10
10
  const async2_1 = require("../rules/async2");
11
11
  const async3_1 = require("../rules/async3");
12
12
  const arazzo_1 = require("../rules/arazzo");
13
- const oas3_2 = require("../rules/oas3");
14
- const oas2_2 = require("../rules/oas2");
15
- const async2_2 = require("../rules/async2");
16
- const async3_2 = require("../rules/async3");
17
- const arazzo_2 = require("../rules/arazzo");
18
- const oas3_3 = require("../decorators/oas3");
19
- const oas2_3 = require("../decorators/oas2");
20
- const async2_3 = require("../decorators/async2");
21
- const async3_3 = require("../decorators/async3");
22
- const arazzo_3 = require("../decorators/arazzo");
13
+ const oas3_2 = require("../decorators/oas3");
14
+ const oas2_2 = require("../decorators/oas2");
15
+ const async2_2 = require("../decorators/async2");
16
+ const async3_2 = require("../decorators/async3");
17
+ const arazzo_2 = require("../decorators/arazzo");
23
18
  exports.builtInConfigs = {
24
19
  recommended: recommended_1.default,
25
20
  'recommended-strict': recommended_strict_1.default,
@@ -39,18 +34,18 @@ exports.defaultPlugin = {
39
34
  arazzo: arazzo_1.rules,
40
35
  },
41
36
  preprocessors: {
42
- oas3: oas3_2.preprocessors,
43
- oas2: oas2_2.preprocessors,
44
- async2: async2_2.preprocessors,
45
- async3: async3_2.preprocessors,
46
- arazzo: arazzo_2.preprocessors,
37
+ oas3: oas3_1.preprocessors,
38
+ oas2: oas2_1.preprocessors,
39
+ async2: async2_1.preprocessors,
40
+ async3: async3_1.preprocessors,
41
+ arazzo: arazzo_1.preprocessors,
47
42
  },
48
43
  decorators: {
49
- oas3: oas3_3.decorators,
50
- oas2: oas2_3.decorators,
51
- async2: async2_3.decorators,
52
- async3: async3_3.decorators,
53
- arazzo: arazzo_3.decorators,
44
+ oas3: oas3_2.decorators,
45
+ oas2: oas2_2.decorators,
46
+ async2: async2_2.decorators,
47
+ async3: async3_2.decorators,
48
+ arazzo: arazzo_2.decorators,
54
49
  },
55
50
  configs: exports.builtInConfigs,
56
51
  };
@@ -14,7 +14,7 @@ export declare function resolveConfig({ rawConfig, configPath, externalRefResolv
14
14
  configPath?: string;
15
15
  externalRefResolver?: BaseResolver;
16
16
  }): Promise<Config>;
17
- export declare function resolvePlugins(plugins: (string | Plugin)[] | null, configPath?: string): Plugin[];
17
+ export declare function resolvePlugins(plugins: (string | Plugin)[] | null, configPath?: string): Promise<Plugin[]>;
18
18
  export declare function resolveApis({ rawConfig, configPath, resolver, }: {
19
19
  rawConfig: RawConfig;
20
20
  configPath?: string;
@@ -7,18 +7,21 @@ exports.resolveApis = resolveApis;
7
7
  exports.resolveStyleguideConfig = resolveStyleguideConfig;
8
8
  exports.resolvePreset = resolvePreset;
9
9
  const path = require("path");
10
+ const fs_1 = require("fs");
10
11
  const ref_utils_1 = require("../ref-utils");
11
12
  const utils_1 = require("../utils");
12
13
  const resolve_1 = require("../resolve");
13
14
  const builtIn_1 = require("./builtIn");
14
15
  const utils_2 = require("./utils");
15
16
  const env_1 = require("../env");
16
- const utils_3 = require("../utils");
17
17
  const config_1 = require("./config");
18
18
  const logger_1 = require("../logger");
19
19
  const asserts_1 = require("../rules/common/assertions/asserts");
20
20
  const types_1 = require("../types");
21
21
  const redocly_yaml_1 = require("../types/redocly-yaml");
22
+ const DEFAULT_PROJECT_PLUGIN_PATHS = ['@theme/plugin.js', '@theme/plugin.cjs', '@theme/plugin.mjs'];
23
+ // Workaround for dynamic imports being transpiled to require by Typescript: https://github.com/microsoft/TypeScript/issues/43329#issuecomment-811606238
24
+ const _importDynamic = new Function('modulePath', 'return import(modulePath)');
22
25
  async function resolveConfigFileAndRefs({ configPath, externalRefResolver = new resolve_1.BaseResolver(), base = null, }) {
23
26
  if (!configPath) {
24
27
  throw new Error('Reference to a config is required.\n');
@@ -36,7 +39,7 @@ async function resolveConfigFileAndRefs({ configPath, externalRefResolver = new
36
39
  return { document, resolvedRefMap };
37
40
  }
38
41
  async function resolveConfig({ rawConfig, configPath, externalRefResolver, }) {
39
- if (rawConfig.styleguide?.extends?.some(utils_3.isNotString)) {
42
+ if (rawConfig.styleguide?.extends?.some(utils_1.isNotString)) {
40
43
  throw new Error(`Error configuration format not detected in extends value must contain strings`);
41
44
  }
42
45
  const resolver = externalRefResolver ?? new resolve_1.BaseResolver((0, utils_2.getResolveConfig)(rawConfig.resolve));
@@ -56,46 +59,82 @@ async function resolveConfig({ rawConfig, configPath, externalRefResolver, }) {
56
59
  styleguide,
57
60
  }, configPath);
58
61
  }
59
- function resolvePlugins(plugins, configPath = '') {
62
+ function getDefaultPluginPath(configPath) {
63
+ for (const pluginPath of DEFAULT_PROJECT_PLUGIN_PATHS) {
64
+ const absolutePluginPath = path.resolve(path.dirname(configPath), pluginPath);
65
+ if ((0, fs_1.existsSync)(absolutePluginPath)) {
66
+ return pluginPath;
67
+ }
68
+ }
69
+ return undefined;
70
+ }
71
+ async function resolvePlugins(plugins, configPath = '') {
60
72
  if (!plugins)
61
73
  return [];
62
74
  // TODO: implement or reuse Resolver approach so it will work in node and browser envs
63
- const requireFunc = (plugin) => {
64
- if (env_1.isBrowser && (0, utils_3.isString)(plugin)) {
75
+ const requireFunc = async (plugin) => {
76
+ if (env_1.isBrowser && (0, utils_1.isString)(plugin)) {
65
77
  logger_1.logger.error(`Cannot load ${plugin}. Plugins aren't supported in browser yet.`);
66
78
  return undefined;
67
79
  }
68
- if ((0, utils_3.isString)(plugin)) {
80
+ if ((0, utils_1.isString)(plugin)) {
69
81
  try {
70
- const absoltePluginPath = path.resolve(path.dirname(configPath), plugin);
82
+ const maybeAbsolutePluginPath = path.resolve(path.dirname(configPath), plugin);
83
+ const absolutePluginPath = (0, fs_1.existsSync)(maybeAbsolutePluginPath)
84
+ ? maybeAbsolutePluginPath
85
+ : // For plugins imported from packages specifically
86
+ require.resolve(plugin);
71
87
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
72
88
  // @ts-ignore
73
- return typeof __webpack_require__ === 'function'
74
- ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment
75
- // @ts-ignore
76
- __non_webpack_require__(absoltePluginPath)
77
- : require(absoltePluginPath);
89
+ if (typeof __webpack_require__ === 'function') {
90
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
91
+ // @ts-ignore
92
+ return __non_webpack_require__(absolutePluginPath);
93
+ }
94
+ else {
95
+ // you can import both cjs and mjs
96
+ const mod = await _importDynamic(absolutePluginPath);
97
+ return mod.default || mod;
98
+ }
78
99
  }
79
100
  catch (e) {
80
- if (e instanceof SyntaxError) {
81
- throw e;
82
- }
83
- throw new Error(`Failed to load plugin "${plugin}". Please provide a valid path`);
101
+ throw new Error(`Failed to load plugin "${plugin}": ${e.message}\n\n${e.stack}`);
84
102
  }
85
103
  }
86
104
  return plugin;
87
105
  };
88
106
  const seenPluginIds = new Map();
89
- return plugins
90
- .map((p) => {
91
- if ((0, utils_3.isString)(p) && (0, ref_utils_1.isAbsoluteUrl)(p)) {
92
- throw new Error(logger_1.colorize.red(`We don't support remote plugins yet.`));
107
+ /**
108
+ * Include the default plugin automatically if it's not in configuration
109
+ */
110
+ const defaultPluginPath = getDefaultPluginPath(configPath);
111
+ if (defaultPluginPath) {
112
+ plugins.push(defaultPluginPath);
113
+ }
114
+ const resolvedPlugins = new Set();
115
+ const instances = await Promise.all(plugins.map(async (p) => {
116
+ if ((0, utils_1.isString)(p)) {
117
+ if ((0, ref_utils_1.isAbsoluteUrl)(p)) {
118
+ throw new Error(logger_1.colorize.red(`We don't support remote plugins yet.`));
119
+ }
120
+ if (resolvedPlugins.has(p)) {
121
+ return;
122
+ }
123
+ resolvedPlugins.add(p);
93
124
  }
94
- // TODO: resolve npm packages similar to eslint
95
- const pluginModule = requireFunc(p);
125
+ const requiredPlugin = await requireFunc(p);
126
+ const pluginCreatorOptions = { contentDir: path.dirname(configPath) };
127
+ const pluginModule = (0, utils_2.isDeprecatedPluginFormat)(requiredPlugin)
128
+ ? requiredPlugin
129
+ : (0, utils_2.isCommonJsPlugin)(requiredPlugin)
130
+ ? await requiredPlugin(pluginCreatorOptions)
131
+ : await requiredPlugin?.default?.(pluginCreatorOptions);
96
132
  if (!pluginModule) {
97
133
  return;
98
134
  }
135
+ if ((0, utils_1.isString)(p) && pluginModule.id && (0, utils_2.isDeprecatedPluginFormat)(requiredPlugin)) {
136
+ logger_1.logger.info(`Deprecated plugin format detected: ${pluginModule.id}\n`);
137
+ }
99
138
  const id = pluginModule.id;
100
139
  if (typeof id !== 'string') {
101
140
  throw new Error(logger_1.colorize.red(`Plugin must define \`id\` property in ${logger_1.colorize.blue(p.toString())}.`));
@@ -185,14 +224,14 @@ function resolvePlugins(plugins, configPath = '') {
185
224
  plugin.assertions = pluginModule.assertions;
186
225
  }
187
226
  return plugin;
188
- })
189
- .filter(utils_3.isDefined);
227
+ }));
228
+ return instances.filter(utils_1.isDefined);
190
229
  }
191
230
  async function resolveApis({ rawConfig, configPath = '', resolver, }) {
192
231
  const { apis = {}, styleguide: styleguideConfig = {} } = rawConfig;
193
232
  const resolvedApis = {};
194
233
  for (const [apiName, apiContent] of Object.entries(apis || {})) {
195
- if (apiContent.styleguide?.extends?.some(utils_3.isNotString)) {
234
+ if (apiContent.styleguide?.extends?.some(utils_1.isNotString)) {
196
235
  throw new Error(`Error configuration format not detected in extends value must contain strings`);
197
236
  }
198
237
  const rawStyleguideConfig = getMergedRawStyleguideConfig(styleguideConfig, apiContent.styleguide);
@@ -209,9 +248,9 @@ async function resolveAndMergeNestedStyleguideConfig({ styleguideConfig, configP
209
248
  if (parentConfigPaths.includes(configPath)) {
210
249
  throw new Error(`Circular dependency in config file: "${configPath}"`);
211
250
  }
212
- const plugins = (0, utils_2.getUniquePlugins)(resolvePlugins([...(styleguideConfig?.plugins || []), builtIn_1.defaultPlugin], configPath));
251
+ const plugins = (0, utils_2.getUniquePlugins)(await resolvePlugins([...(styleguideConfig?.plugins || []), builtIn_1.defaultPlugin], configPath));
213
252
  const pluginPaths = styleguideConfig?.plugins
214
- ?.filter(utils_3.isString)
253
+ ?.filter(utils_1.isString)
215
254
  .map((p) => path.resolve(path.dirname(configPath), p));
216
255
  const resolvedConfigPath = (0, ref_utils_1.isAbsoluteUrl)(configPath)
217
256
  ? configPath
@@ -367,7 +406,7 @@ function groupStyleguideAssertionRules({ rules, plugins, }) {
367
406
  return transformedRules;
368
407
  }
369
408
  function registerCustomAssertions(plugins, assertion) {
370
- for (const field of (0, utils_3.keysOf)(assertion.assertions)) {
409
+ for (const field of (0, utils_1.keysOf)(assertion.assertions)) {
371
410
  const [pluginId, fn] = field.split('/');
372
411
  if (!pluginId || !fn)
373
412
  continue;
@@ -1,5 +1,6 @@
1
- import { NormalizedProblem } from '../walk';
2
- import { SpecVersion, SpecMajorVersion, Oas2RuleSet, Oas3RuleSet, Async3RuleSet, ArazzoRuleSet } from '../oas-types';
1
+ import { SpecVersion, SpecMajorVersion } from '../oas-types';
2
+ import type { NormalizedProblem } from '../walk';
3
+ import type { Oas2RuleSet, Oas3RuleSet, Async3RuleSet, ArazzoRuleSet } from '../oas-types';
3
4
  import type { NodeType } from '../types';
4
5
  import type { DecoratorConfig, Plugin, PreprocessorConfig, Region, ResolveConfig, ResolvedApi, ResolvedConfig, ResolvedStyleguideConfig, RuleConfig, RuleSettings, Telemetry, ThemeRawConfig } from './types';
5
6
  export declare const IGNORE_FILE = ".redocly.lint-ignore.yaml";
@@ -1,5 +1,5 @@
1
- import { Config } from './config';
2
1
  import { BaseResolver } from '../resolve';
2
+ import type { Config } from './config';
3
3
  import type { Document, ResolvedRefMap } from '../resolve';
4
4
  import type { RegionalTokenWithValidity } from '../redocly/redocly-client-types';
5
5
  import type { RawConfig, RawUniversalConfig, Region } from './types';
@@ -5,6 +5,7 @@ const minimal = {
5
5
  'info-contact': 'off',
6
6
  'info-license': 'off',
7
7
  'info-license-url': 'off',
8
+ 'info-license-strict': 'off',
8
9
  'tag-description': 'warn',
9
10
  'tags-alphabetical': 'off',
10
11
  'parameter-description': 'off',
@@ -90,6 +91,7 @@ const minimal = {
90
91
  async2Rules: {
91
92
  spec: 'error',
92
93
  'info-contact': 'off',
94
+ 'info-license-strict': 'off',
93
95
  'operation-operationId': 'warn',
94
96
  'tag-description': 'warn',
95
97
  'tags-alphabetical': 'off',
@@ -99,6 +101,7 @@ const minimal = {
99
101
  async3Rules: {
100
102
  spec: 'error',
101
103
  'info-contact': 'off',
104
+ 'info-license-strict': 'off',
102
105
  'operation-operationId': 'warn',
103
106
  'tag-description': 'warn',
104
107
  'tags-alphabetical': 'off',
@@ -107,6 +110,7 @@ const minimal = {
107
110
  },
108
111
  arazzoRules: {
109
112
  spec: 'error',
113
+ 'parameters-no-body-inside-in': 'off',
110
114
  },
111
115
  };
112
116
  exports.default = minimal;
@@ -4,7 +4,8 @@ const recommendedStrict = {
4
4
  rules: {
5
5
  'info-contact': 'off',
6
6
  'info-license': 'error',
7
- 'info-license-url': 'error',
7
+ 'info-license-url': 'off',
8
+ 'info-license-strict': 'error',
8
9
  'tag-description': 'error',
9
10
  'tags-alphabetical': 'off',
10
11
  'parameter-description': 'off',
@@ -90,6 +91,7 @@ const recommendedStrict = {
90
91
  async2Rules: {
91
92
  spec: 'error',
92
93
  'info-contact': 'off',
94
+ 'info-license-strict': 'error',
93
95
  'operation-operationId': 'error',
94
96
  'tag-description': 'error',
95
97
  'tags-alphabetical': 'off',
@@ -99,6 +101,7 @@ const recommendedStrict = {
99
101
  async3Rules: {
100
102
  spec: 'error',
101
103
  'info-contact': 'off',
104
+ 'info-license-strict': 'error',
102
105
  'operation-operationId': 'error',
103
106
  'tag-description': 'error',
104
107
  'tags-alphabetical': 'off',
@@ -107,6 +110,7 @@ const recommendedStrict = {
107
110
  },
108
111
  arazzoRules: {
109
112
  spec: 'error',
113
+ 'parameters-no-body-inside-in': 'off',
110
114
  },
111
115
  };
112
116
  exports.default = recommendedStrict;