@redocly/openapi-core 1.0.0-beta.99 → 1.0.0-rc.2

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 (382) hide show
  1. package/README.md +6 -6
  2. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +0 -1
  3. package/lib/benchmark/benches/recommended-oas3.bench.js +1 -1
  4. package/lib/benchmark/benches/resolve-with-no-external.bench.js +1 -1
  5. package/lib/benchmark/utils.d.ts +2 -2
  6. package/lib/benchmark/utils.js +2 -2
  7. package/lib/bundle.d.ts +10 -15
  8. package/lib/bundle.js +32 -12
  9. package/lib/config/all.d.ts +2 -2
  10. package/lib/config/all.js +16 -6
  11. package/lib/config/builtIn.d.ts +2 -2
  12. package/lib/config/builtIn.js +2 -2
  13. package/lib/config/config-resolvers.d.ts +5 -5
  14. package/lib/config/config-resolvers.js +121 -66
  15. package/lib/config/config.d.ts +12 -18
  16. package/lib/config/config.js +42 -26
  17. package/lib/config/load.d.ts +16 -3
  18. package/lib/config/load.js +36 -14
  19. package/lib/config/minimal.d.ts +2 -2
  20. package/lib/config/minimal.js +10 -6
  21. package/lib/config/recommended.d.ts +2 -2
  22. package/lib/config/recommended.js +10 -6
  23. package/lib/config/rules.d.ts +7 -4
  24. package/lib/config/rules.js +5 -4
  25. package/lib/config/types.d.ts +72 -23
  26. package/lib/config/types.js +13 -0
  27. package/lib/config/utils.d.ts +6 -5
  28. package/lib/config/utils.js +110 -32
  29. package/lib/decorators/common/filters/filter-helper.d.ts +3 -0
  30. package/lib/decorators/common/filters/filter-helper.js +67 -0
  31. package/lib/decorators/common/filters/filter-in.d.ts +2 -0
  32. package/lib/decorators/common/filters/filter-in.js +17 -0
  33. package/lib/decorators/common/filters/filter-out.d.ts +2 -0
  34. package/lib/decorators/common/filters/filter-out.js +17 -0
  35. package/lib/decorators/common/info-override.d.ts +2 -0
  36. package/lib/decorators/common/info-override.js +28 -0
  37. package/lib/decorators/common/media-type-examples-override.d.ts +2 -0
  38. package/lib/decorators/common/media-type-examples-override.js +53 -0
  39. package/lib/decorators/common/registry-dependencies.js +2 -2
  40. package/lib/decorators/common/remove-x-internal.js +2 -2
  41. package/lib/decorators/oas2/index.d.ts +3 -0
  42. package/lib/decorators/oas2/index.js +7 -1
  43. package/lib/decorators/oas3/index.d.ts +4 -0
  44. package/lib/decorators/oas3/index.js +9 -1
  45. package/lib/env.d.ts +3 -0
  46. package/lib/env.js +8 -0
  47. package/lib/format/codeframes.js +16 -10
  48. package/lib/format/format.d.ts +1 -1
  49. package/lib/format/format.js +64 -32
  50. package/lib/index.d.ts +6 -6
  51. package/lib/index.js +7 -2
  52. package/lib/js-yaml/index.js +2 -6
  53. package/lib/lint.d.ts +4 -2
  54. package/lib/lint.js +36 -11
  55. package/lib/logger.d.ts +10 -0
  56. package/lib/logger.js +31 -0
  57. package/lib/output.d.ts +3 -0
  58. package/lib/output.js +9 -0
  59. package/lib/redocly/index.js +10 -9
  60. package/lib/redocly/registry-api-types.d.ts +28 -28
  61. package/lib/redocly/registry-api.d.ts +3 -3
  62. package/lib/redocly/registry-api.js +10 -2
  63. package/lib/ref-utils.d.ts +1 -0
  64. package/lib/ref-utils.js +7 -2
  65. package/lib/resolve.d.ts +1 -1
  66. package/lib/resolve.js +33 -3
  67. package/lib/rules/ajv.d.ts +2 -2
  68. package/lib/rules/ajv.js +12 -12
  69. package/lib/rules/common/assertions/asserts.d.ts +29 -4
  70. package/lib/rules/common/assertions/asserts.js +227 -97
  71. package/lib/rules/common/assertions/index.d.ts +27 -2
  72. package/lib/rules/common/assertions/index.js +9 -37
  73. package/lib/rules/common/assertions/utils.d.ts +16 -8
  74. package/lib/rules/common/assertions/utils.js +160 -76
  75. package/lib/rules/common/info-license-url.d.ts +1 -1
  76. package/lib/rules/common/info-license-url.js +5 -10
  77. package/lib/rules/common/info-license.d.ts +2 -0
  78. package/lib/rules/common/info-license.js +17 -0
  79. package/lib/rules/common/no-ambiguous-paths.js +1 -1
  80. package/lib/rules/common/no-enum-type-mismatch.js +1 -3
  81. package/lib/rules/common/no-identical-paths.js +4 -4
  82. package/lib/rules/common/no-invalid-parameter-examples.js +3 -3
  83. package/lib/rules/common/no-invalid-schema-examples.js +3 -3
  84. package/lib/rules/common/operation-2xx-response.js +15 -9
  85. package/lib/rules/common/operation-4xx-response.js +15 -9
  86. package/lib/rules/common/operation-operationId.js +2 -2
  87. package/lib/rules/common/operation-tag-defined.js +1 -1
  88. package/lib/rules/common/path-not-include-query.js +2 -2
  89. package/lib/rules/common/path-params-defined.js +7 -2
  90. package/lib/rules/common/paths-kebab-case.js +4 -1
  91. package/lib/rules/common/required-string-property-missing-min-length.d.ts +2 -0
  92. package/lib/rules/common/required-string-property-missing-min-length.js +37 -0
  93. package/lib/rules/common/response-contains-header.js +2 -2
  94. package/lib/rules/common/scalar-property-missing-example.js +2 -1
  95. package/lib/rules/common/security-defined.d.ts +2 -0
  96. package/lib/rules/common/{operation-security-defined.js → security-defined.js} +25 -6
  97. package/lib/rules/common/spec-strict-refs.d.ts +2 -0
  98. package/lib/rules/common/spec-strict-refs.js +30 -0
  99. package/lib/rules/common/spec.js +41 -18
  100. package/lib/rules/common/tags-alphabetical.js +1 -1
  101. package/lib/rules/oas2/index.d.ts +3 -2
  102. package/lib/rules/oas2/index.js +10 -8
  103. package/lib/rules/oas2/remove-unused-components.js +6 -6
  104. package/lib/rules/oas2/request-mime-type.d.ts +1 -1
  105. package/lib/rules/oas2/request-mime-type.js +1 -1
  106. package/lib/rules/oas2/response-mime-type.d.ts +1 -1
  107. package/lib/rules/oas2/response-mime-type.js +1 -1
  108. package/lib/rules/oas3/component-name-unique.d.ts +2 -0
  109. package/lib/rules/oas3/component-name-unique.js +124 -0
  110. package/lib/rules/oas3/index.js +18 -10
  111. package/lib/rules/oas3/no-empty-servers.js +2 -2
  112. package/lib/rules/oas3/no-invalid-media-type-examples.js +2 -2
  113. package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +2 -0
  114. package/lib/rules/oas3/{no-servers-empty-enum.js → no-server-variables-empty-enum.js} +5 -5
  115. package/lib/rules/oas3/no-unused-components.js +2 -2
  116. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +5 -0
  117. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +36 -0
  118. package/lib/rules/oas3/remove-unused-components.js +6 -6
  119. package/lib/rules/oas3/request-mime-type.d.ts +1 -1
  120. package/lib/rules/oas3/request-mime-type.js +1 -1
  121. package/lib/rules/oas3/response-mime-type.d.ts +1 -1
  122. package/lib/rules/oas3/response-mime-type.js +1 -1
  123. package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +2 -0
  124. package/lib/rules/oas3/spec-components-invalid-map-name.js +62 -0
  125. package/lib/rules/other/stats.d.ts +2 -2
  126. package/lib/rules/other/stats.js +45 -16
  127. package/lib/rules/utils.d.ts +5 -2
  128. package/lib/rules/utils.js +54 -6
  129. package/lib/types/config-external-schemas.d.ts +2193 -0
  130. package/lib/types/config-external-schemas.js +805 -0
  131. package/lib/types/index.d.ts +3 -2
  132. package/lib/types/index.js +9 -1
  133. package/lib/types/oas2.js +91 -15
  134. package/lib/types/oas3.js +125 -46
  135. package/lib/types/oas3_1.js +23 -19
  136. package/lib/types/redocly-yaml.js +406 -60
  137. package/lib/utils.d.ts +15 -4
  138. package/lib/utils.js +72 -8
  139. package/lib/visitors.d.ts +20 -16
  140. package/lib/visitors.js +28 -3
  141. package/lib/walk.d.ts +11 -19
  142. package/lib/walk.js +74 -53
  143. package/package.json +5 -6
  144. package/__tests__/utils.ts +0 -86
  145. package/lib/rules/common/info-description.d.ts +0 -2
  146. package/lib/rules/common/info-description.js +0 -12
  147. package/lib/rules/common/license-url.d.ts +0 -2
  148. package/lib/rules/common/license-url.js +0 -12
  149. package/lib/rules/common/operation-security-defined.d.ts +0 -2
  150. package/lib/rules/oas3/no-servers-empty-enum.d.ts +0 -2
  151. package/src/__tests__/__snapshots__/bundle.test.ts.snap +0 -255
  152. package/src/__tests__/bundle.test.ts +0 -156
  153. package/src/__tests__/codeframes.test.ts +0 -531
  154. package/src/__tests__/fixtures/extension.js +0 -24
  155. package/src/__tests__/fixtures/refs/definitions.yaml +0 -3
  156. package/src/__tests__/fixtures/refs/examples.yaml +0 -8
  157. package/src/__tests__/fixtures/refs/external-request-body.yaml +0 -13
  158. package/src/__tests__/fixtures/refs/externalref.yaml +0 -35
  159. package/src/__tests__/fixtures/refs/hosted.yaml +0 -35
  160. package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +0 -21
  161. package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +0 -33
  162. package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +0 -18
  163. package/src/__tests__/fixtures/refs/param-b.yaml +0 -1
  164. package/src/__tests__/fixtures/refs/param-c.yaml +0 -1
  165. package/src/__tests__/fixtures/refs/rename.yaml +0 -1
  166. package/src/__tests__/fixtures/refs/requestBody.yaml +0 -9
  167. package/src/__tests__/fixtures/refs/schema-a.yaml +0 -1
  168. package/src/__tests__/fixtures/refs/simple.yaml +0 -1
  169. package/src/__tests__/fixtures/refs/vendor.schema.yaml +0 -20
  170. package/src/__tests__/fixtures/resolve/External.yaml +0 -10
  171. package/src/__tests__/fixtures/resolve/External2.yaml +0 -4
  172. package/src/__tests__/fixtures/resolve/description.md +0 -3
  173. package/src/__tests__/fixtures/resolve/externalInfo.yaml +0 -4
  174. package/src/__tests__/fixtures/resolve/externalLicense.yaml +0 -1
  175. package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +0 -13
  176. package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +0 -5
  177. package/src/__tests__/fixtures/resolve/openapi.yaml +0 -28
  178. package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +0 -10
  179. package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +0 -6
  180. package/src/__tests__/fixtures/resolve/transitive/a.yaml +0 -1
  181. package/src/__tests__/fixtures/resolve/transitive/components.yaml +0 -5
  182. package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +0 -3
  183. package/src/__tests__/js-yaml.test.ts +0 -71
  184. package/src/__tests__/lint.test.ts +0 -195
  185. package/src/__tests__/login.test.ts +0 -17
  186. package/src/__tests__/normalizeVisitors.test.ts +0 -151
  187. package/src/__tests__/ref-utils.test.ts +0 -120
  188. package/src/__tests__/resolve-http.test.ts +0 -77
  189. package/src/__tests__/resolve.test.ts +0 -405
  190. package/src/__tests__/utils.test.ts +0 -85
  191. package/src/__tests__/walk.test.ts +0 -1485
  192. package/src/benchmark/benches/lint-with-many-rules.bench.ts +0 -35
  193. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +0 -39
  194. package/src/benchmark/benches/lint-with-no-rules.bench.ts +0 -20
  195. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +0 -36
  196. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +0 -32
  197. package/src/benchmark/benches/rebilly.yaml +0 -32267
  198. package/src/benchmark/benches/recommended-oas3.bench.ts +0 -22
  199. package/src/benchmark/benches/resolve-with-no-external.bench.ts +0 -23
  200. package/src/benchmark/benchmark.js +0 -307
  201. package/src/benchmark/colors.js +0 -29
  202. package/src/benchmark/fork.js +0 -83
  203. package/src/benchmark/utils.ts +0 -36
  204. package/src/bundle.ts +0 -386
  205. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +0 -157
  206. package/src/config/__tests__/config-resolvers.test.ts +0 -429
  207. package/src/config/__tests__/config.test.ts +0 -244
  208. package/src/config/__tests__/fixtures/plugin-config.yaml +0 -3
  209. package/src/config/__tests__/fixtures/plugin.js +0 -56
  210. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +0 -12
  211. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +0 -67
  212. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +0 -8
  213. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +0 -19
  214. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +0 -10
  215. package/src/config/__tests__/fixtures/resolve-config/plugin.js +0 -66
  216. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +0 -4
  217. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +0 -5
  218. package/src/config/__tests__/load.test.ts +0 -83
  219. package/src/config/__tests__/resolve-plugins.test.ts +0 -27
  220. package/src/config/all.ts +0 -66
  221. package/src/config/builtIn.ts +0 -37
  222. package/src/config/config-resolvers.ts +0 -359
  223. package/src/config/config.ts +0 -312
  224. package/src/config/index.ts +0 -7
  225. package/src/config/load.ts +0 -84
  226. package/src/config/minimal.ts +0 -58
  227. package/src/config/recommended.ts +0 -58
  228. package/src/config/rules.ts +0 -46
  229. package/src/config/types.ts +0 -168
  230. package/src/config/utils.ts +0 -208
  231. package/src/decorators/__tests__/remove-x-internal.test.ts +0 -316
  232. package/src/decorators/common/info-description-override.ts +0 -24
  233. package/src/decorators/common/operation-description-override.ts +0 -30
  234. package/src/decorators/common/registry-dependencies.ts +0 -25
  235. package/src/decorators/common/remove-x-internal.ts +0 -59
  236. package/src/decorators/common/tag-description-override.ts +0 -25
  237. package/src/decorators/oas2/index.ts +0 -14
  238. package/src/decorators/oas3/index.ts +0 -14
  239. package/src/format/codeframes.ts +0 -210
  240. package/src/format/format.ts +0 -339
  241. package/src/index.ts +0 -68
  242. package/src/js-yaml/index.ts +0 -18
  243. package/src/lint.ts +0 -125
  244. package/src/oas-types.ts +0 -62
  245. package/src/redocly/__tests__/redocly-client.test.ts +0 -140
  246. package/src/redocly/index.ts +0 -182
  247. package/src/redocly/redocly-client-types.ts +0 -10
  248. package/src/redocly/registry-api-types.ts +0 -32
  249. package/src/redocly/registry-api.ts +0 -134
  250. package/src/ref-utils.ts +0 -80
  251. package/src/resolve.ts +0 -378
  252. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +0 -1
  253. package/src/rules/__tests__/fixtures/ref.yaml +0 -1
  254. package/src/rules/__tests__/no-unresolved-refs.test.ts +0 -168
  255. package/src/rules/ajv.ts +0 -103
  256. package/src/rules/common/__tests__/info-description.test.ts +0 -102
  257. package/src/rules/common/__tests__/info-license.test.ts +0 -62
  258. package/src/rules/common/__tests__/license-url.test.ts +0 -63
  259. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +0 -96
  260. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +0 -209
  261. package/src/rules/common/__tests__/no-identical-paths.test.ts +0 -58
  262. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +0 -85
  263. package/src/rules/common/__tests__/operation-2xx-response.test.ts +0 -91
  264. package/src/rules/common/__tests__/operation-4xx-response.test.ts +0 -107
  265. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +0 -76
  266. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +0 -45
  267. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +0 -167
  268. package/src/rules/common/__tests__/operation-security-defined.test.ts +0 -69
  269. package/src/rules/common/__tests__/operation-singular-tag.test.ts +0 -72
  270. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +0 -95
  271. package/src/rules/common/__tests__/path-not-include-query.test.ts +0 -64
  272. package/src/rules/common/__tests__/path-params-defined.test.ts +0 -133
  273. package/src/rules/common/__tests__/paths-kebab-case.test.ts +0 -108
  274. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +0 -207
  275. package/src/rules/common/__tests__/spec.test.ts +0 -62
  276. package/src/rules/common/__tests__/tag-description.test.ts +0 -65
  277. package/src/rules/common/__tests__/tags-alphabetical.test.ts +0 -64
  278. package/src/rules/common/assertions/__tests__/asserts.test.ts +0 -231
  279. package/src/rules/common/assertions/__tests__/index.test.ts +0 -65
  280. package/src/rules/common/assertions/__tests__/utils.test.ts +0 -89
  281. package/src/rules/common/assertions/asserts.ts +0 -137
  282. package/src/rules/common/assertions/index.ts +0 -75
  283. package/src/rules/common/assertions/utils.ts +0 -167
  284. package/src/rules/common/info-contact.ts +0 -15
  285. package/src/rules/common/info-description.ts +0 -10
  286. package/src/rules/common/info-license-url.ts +0 -15
  287. package/src/rules/common/license-url.ts +0 -10
  288. package/src/rules/common/no-ambiguous-paths.ts +0 -50
  289. package/src/rules/common/no-enum-type-mismatch.ts +0 -49
  290. package/src/rules/common/no-http-verbs-in-paths.ts +0 -36
  291. package/src/rules/common/no-identical-paths.ts +0 -24
  292. package/src/rules/common/no-invalid-parameter-examples.ts +0 -36
  293. package/src/rules/common/no-invalid-schema-examples.ts +0 -27
  294. package/src/rules/common/no-path-trailing-slash.ts +0 -15
  295. package/src/rules/common/operation-2xx-response.ts +0 -16
  296. package/src/rules/common/operation-4xx-response.ts +0 -17
  297. package/src/rules/common/operation-description.ts +0 -13
  298. package/src/rules/common/operation-operationId-unique.ts +0 -21
  299. package/src/rules/common/operation-operationId-url-safe.ts +0 -19
  300. package/src/rules/common/operation-operationId.ts +0 -17
  301. package/src/rules/common/operation-parameters-unique.ts +0 -48
  302. package/src/rules/common/operation-security-defined.ts +0 -45
  303. package/src/rules/common/operation-singular-tag.ts +0 -17
  304. package/src/rules/common/operation-summary.ts +0 -13
  305. package/src/rules/common/operation-tag-defined.ts +0 -26
  306. package/src/rules/common/parameter-description.ts +0 -22
  307. package/src/rules/common/path-declaration-must-exist.ts +0 -15
  308. package/src/rules/common/path-excludes-patterns.ts +0 -23
  309. package/src/rules/common/path-http-verbs-order.ts +0 -30
  310. package/src/rules/common/path-not-include-query.ts +0 -17
  311. package/src/rules/common/path-params-defined.ts +0 -58
  312. package/src/rules/common/path-segment-plural.ts +0 -31
  313. package/src/rules/common/paths-kebab-case.ts +0 -16
  314. package/src/rules/common/response-contains-header.ts +0 -30
  315. package/src/rules/common/scalar-property-missing-example.ts +0 -55
  316. package/src/rules/common/spec.ts +0 -143
  317. package/src/rules/common/tag-description.ts +0 -10
  318. package/src/rules/common/tags-alphabetical.ts +0 -20
  319. package/src/rules/no-unresolved-refs.ts +0 -51
  320. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +0 -110
  321. package/src/rules/oas2/__tests__/response-contains-header.test.ts +0 -174
  322. package/src/rules/oas2/__tests__/response-contains-property.test.ts +0 -155
  323. package/src/rules/oas2/__tests__/spec/fixtures/description.md +0 -1
  324. package/src/rules/oas2/__tests__/spec/info.test.ts +0 -355
  325. package/src/rules/oas2/__tests__/spec/operation.test.ts +0 -123
  326. package/src/rules/oas2/__tests__/spec/paths.test.ts +0 -245
  327. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +0 -31
  328. package/src/rules/oas2/__tests__/spec/utils.ts +0 -32
  329. package/src/rules/oas2/boolean-parameter-prefixes.ts +0 -26
  330. package/src/rules/oas2/index.ts +0 -89
  331. package/src/rules/oas2/remove-unused-components.ts +0 -76
  332. package/src/rules/oas2/request-mime-type.ts +0 -17
  333. package/src/rules/oas2/response-contains-property.ts +0 -36
  334. package/src/rules/oas2/response-mime-type.ts +0 -17
  335. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +0 -111
  336. package/src/rules/oas3/__tests__/fixtures/common.yaml +0 -11
  337. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +0 -205
  338. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +0 -65
  339. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +0 -392
  340. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +0 -60
  341. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +0 -79
  342. package/src/rules/oas3/__tests__/no-unused-components.test.ts +0 -131
  343. package/src/rules/oas3/__tests__/response-contains-header.test.ts +0 -273
  344. package/src/rules/oas3/__tests__/response-contains-property.test.ts +0 -403
  345. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +0 -41
  346. package/src/rules/oas3/__tests__/spec/fixtures/description.md +0 -1
  347. package/src/rules/oas3/__tests__/spec/info.test.ts +0 -391
  348. package/src/rules/oas3/__tests__/spec/operation.test.ts +0 -253
  349. package/src/rules/oas3/__tests__/spec/paths.test.ts +0 -284
  350. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +0 -77
  351. package/src/rules/oas3/__tests__/spec/servers.test.ts +0 -499
  352. package/src/rules/oas3/__tests__/spec/spec.test.ts +0 -288
  353. package/src/rules/oas3/__tests__/spec/utils.ts +0 -32
  354. package/src/rules/oas3/boolean-parameter-prefixes.ts +0 -28
  355. package/src/rules/oas3/index.ts +0 -105
  356. package/src/rules/oas3/no-empty-servers.ts +0 -22
  357. package/src/rules/oas3/no-example-value-and-externalValue.ts +0 -14
  358. package/src/rules/oas3/no-invalid-media-type-examples.ts +0 -41
  359. package/src/rules/oas3/no-server-example.com.ts +0 -14
  360. package/src/rules/oas3/no-server-trailing-slash.ts +0 -15
  361. package/src/rules/oas3/no-servers-empty-enum.ts +0 -67
  362. package/src/rules/oas3/no-undefined-server-variable.ts +0 -30
  363. package/src/rules/oas3/no-unused-components.ts +0 -75
  364. package/src/rules/oas3/remove-unused-components.ts +0 -84
  365. package/src/rules/oas3/request-mime-type.ts +0 -31
  366. package/src/rules/oas3/response-contains-property.ts +0 -38
  367. package/src/rules/oas3/response-mime-type.ts +0 -31
  368. package/src/rules/other/stats.ts +0 -44
  369. package/src/rules/utils.ts +0 -123
  370. package/src/types/index.ts +0 -138
  371. package/src/types/oas2.ts +0 -397
  372. package/src/types/oas3.ts +0 -515
  373. package/src/types/oas3_1.ts +0 -253
  374. package/src/types/redocly-yaml.ts +0 -647
  375. package/src/typings/common.ts +0 -9
  376. package/src/typings/openapi.ts +0 -298
  377. package/src/typings/swagger.ts +0 -236
  378. package/src/utils.ts +0 -193
  379. package/src/visitors.ts +0 -448
  380. package/src/walk.ts +0 -416
  381. package/tsconfig.json +0 -8
  382. package/tsconfig.tsbuildinfo +0 -1
package/README.md CHANGED
@@ -9,9 +9,9 @@ See https://github.com/Redocly/redocly-cli
9
9
  ```js
10
10
  import { formatProblems, lint, loadConfig } from '@redocly/openapi-core';
11
11
 
12
- const pathToEntryPoint = 'openapi.yaml';
13
- const config = loadConfig('optional/path/to/.redocly.yaml');
14
- const lintResults = await lint({ ref: pathToEntryPoint, config });
12
+ const pathToApi = 'openapi.yaml';
13
+ const config = loadConfig({ configPath: 'optional/path/to/.redocly.yaml' });
14
+ const lintResults = await lint({ ref: pathToApi, config });
15
15
  ```
16
16
 
17
17
  ### Bundle
@@ -19,7 +19,7 @@ const lintResults = await lint({ ref: pathToEntryPoint, config });
19
19
  ```js
20
20
  import { formatProblems, bundle, loadConfig } from '@redocly/openapi-core';
21
21
 
22
- const pathToEntryPoint = 'openapi.yaml';
23
- const config = loadConfig('optional/path/to/.redocly.yaml');
24
- const { bundle, problems } = await bundle({ ref: pathToEntryPoint, config });
22
+ const pathToApi = 'openapi.yaml';
23
+ const config = loadConfig({ configPath: 'optional/path/to/.redocly.yaml' });
24
+ const { bundle, problems } = await bundle({ ref: pathToApi, config });
25
25
  ```
@@ -13,7 +13,6 @@ const rebillyDocument = utils_1.parseYamlToDocument(fs_1.readFileSync(rebillyDef
13
13
  const config = utils_1.makeConfigForRuleset({
14
14
  test: () => {
15
15
  return {
16
- // @ts-ignore
17
16
  Schema(schema, ctx) {
18
17
  if (schema.type === 'number') {
19
18
  ctx.report({
@@ -15,7 +15,7 @@ function measureAsync() {
15
15
  return lint_1.lintDocument({
16
16
  externalRefResolver: new resolve_1.BaseResolver(),
17
17
  document: rebillyDocument,
18
- config: new config_1.LintConfig(config_1.resolvePreset('recommended', [config_1.defaultPlugin])),
18
+ config: new config_1.StyleguideConfig(config_1.resolvePreset('recommended', [config_1.defaultPlugin])),
19
19
  });
20
20
  }
21
21
  exports.measureAsync = measureAsync;
@@ -16,7 +16,7 @@ function measureAsync() {
16
16
  return resolve_1.resolveDocument({
17
17
  rootDocument: rebillyDocument,
18
18
  externalRefResolver,
19
- rootType: types_1.normalizeTypes(oas3_1.Oas3Types).DefinitionRoot,
19
+ rootType: types_1.normalizeTypes(oas3_1.Oas3Types).Root,
20
20
  });
21
21
  }
22
22
  exports.measureAsync = measureAsync;
@@ -1,6 +1,6 @@
1
1
  import { Document } from '../resolve';
2
2
  import { Oas3RuleSet } from '../oas-types';
3
- import { LintConfig } from '../config';
3
+ import { StyleguideConfig } from '../config';
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>): LintConfig;
6
+ export declare function makeConfigForRuleset(rules: Oas3RuleSet, plugin?: Partial<Plugin>): StyleguideConfig;
@@ -25,7 +25,7 @@ function makeConfigForRuleset(rules, plugin) {
25
25
  if (rules) {
26
26
  extendConfigs.push({ rules });
27
27
  }
28
- const lint = config_1.mergeExtends(extendConfigs);
29
- return new config_1.LintConfig(lint);
28
+ const styleguide = config_1.mergeExtends(extendConfigs);
29
+ return new config_1.StyleguideConfig(styleguide);
30
30
  }
31
31
  exports.makeConfigForRuleset = makeConfigForRuleset;
package/lib/bundle.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { BaseResolver, Document } from './resolve';
2
2
  import { Oas3Rule } from './visitors';
3
3
  import { NormalizedNodeType, NodeType } from './types';
4
+ import { NormalizedProblem } from './walk';
4
5
  import { OasMajorVersion } from './oas-types';
5
- import type { Config, LintConfig } from './config';
6
+ import type { Config, StyleguideConfig } from './config';
6
7
  export declare type Oas3RuleSet = Record<string, Oas3Rule>;
7
8
  export declare enum OasVersion {
8
9
  Version2 = "oas2",
@@ -19,29 +20,23 @@ export declare function bundle(opts: {
19
20
  skipRedoclyRegistryRefs?: boolean;
20
21
  removeUnusedComponents?: boolean;
21
22
  keepUrlRefs?: boolean;
22
- }): Promise<{
23
+ }): Promise<BundleResult>;
24
+ export declare type BundleResult = {
23
25
  bundle: Document;
24
- problems: import("./walk").NormalizedProblem[];
26
+ problems: NormalizedProblem[];
25
27
  fileDependencies: Set<string>;
26
28
  rootType: NormalizedNodeType;
27
- refTypes: Map<string, NormalizedNodeType> | undefined;
29
+ refTypes?: Map<string, NormalizedNodeType>;
28
30
  visitorsData: Record<string, Record<string, unknown>>;
29
- }>;
31
+ };
30
32
  export declare function bundleDocument(opts: {
31
33
  document: Document;
32
- config: LintConfig;
34
+ config: StyleguideConfig;
33
35
  customTypes?: Record<string, NodeType>;
34
36
  externalRefResolver: BaseResolver;
35
37
  dereference?: boolean;
36
38
  skipRedoclyRegistryRefs?: boolean;
37
39
  removeUnusedComponents?: boolean;
38
40
  keepUrlRefs?: boolean;
39
- }): Promise<{
40
- bundle: Document;
41
- problems: import("./walk").NormalizedProblem[];
42
- fileDependencies: Set<string>;
43
- rootType: NormalizedNodeType;
44
- refTypes: Map<string, NormalizedNodeType> | undefined;
45
- visitorsData: Record<string, Record<string, unknown>>;
46
- }>;
47
- export declare function mapTypeToComponent(typeName: string, version: OasMajorVersion): "headers" | "definitions" | "parameters" | "examples" | "responses" | "schemas" | "requestBodies" | "securitySchemes" | "links" | "callbacks" | null;
41
+ }): Promise<BundleResult>;
42
+ export declare function mapTypeToComponent(typeName: string, version: OasMajorVersion): "headers" | "definitions" | "parameters" | "examples" | "schemas" | "responses" | "requestBodies" | "securitySchemes" | "links" | "callbacks" | null;
package/lib/bundle.js CHANGED
@@ -42,7 +42,7 @@ function bundle(opts) {
42
42
  if (document instanceof Error) {
43
43
  throw document;
44
44
  }
45
- return bundleDocument(Object.assign(Object.assign({ document }, opts), { config: opts.config.lint, externalRefResolver }));
45
+ return bundleDocument(Object.assign(Object.assign({ document }, opts), { config: opts.config.styleguide, externalRefResolver }));
46
46
  });
47
47
  }
48
48
  exports.bundle = bundle;
@@ -71,16 +71,30 @@ function bundleDocument(opts) {
71
71
  ruleId: 'remove-unused-components',
72
72
  visitor: oasMajorVersion === oas_types_1.OasMajorVersion.Version2
73
73
  ? remove_unused_components_1.RemoveUnusedComponents({})
74
- : remove_unused_components_2.RemoveUnusedComponents({})
74
+ : remove_unused_components_2.RemoveUnusedComponents({}),
75
75
  });
76
76
  }
77
- const resolvedRefMap = yield resolve_1.resolveDocument({
77
+ let resolvedRefMap = yield resolve_1.resolveDocument({
78
78
  rootDocument: document,
79
- rootType: types.DefinitionRoot,
79
+ rootType: types.Root,
80
80
  externalRefResolver,
81
81
  });
82
+ if (preprocessors.length > 0) {
83
+ // Make additional pass to resolve refs defined in preprocessors.
84
+ walk_1.walkDocument({
85
+ document,
86
+ rootType: types.Root,
87
+ normalizedVisitors: visitors_1.normalizeVisitors(preprocessors, types),
88
+ resolvedRefMap,
89
+ ctx,
90
+ });
91
+ resolvedRefMap = yield resolve_1.resolveDocument({
92
+ rootDocument: document,
93
+ rootType: types.Root,
94
+ externalRefResolver,
95
+ });
96
+ }
82
97
  const bundleVisitor = visitors_1.normalizeVisitors([
83
- ...preprocessors,
84
98
  {
85
99
  severity: 'error',
86
100
  ruleId: 'bundler',
@@ -90,7 +104,7 @@ function bundleDocument(opts) {
90
104
  ], types);
91
105
  walk_1.walkDocument({
92
106
  document,
93
- rootType: types.DefinitionRoot,
107
+ rootType: types.Root,
94
108
  normalizedVisitors: bundleVisitor,
95
109
  resolvedRefMap,
96
110
  ctx,
@@ -99,7 +113,7 @@ function bundleDocument(opts) {
99
113
  bundle: document,
100
114
  problems: ctx.problems.map((problem) => config.addProblemToIgnore(problem)),
101
115
  fileDependencies: externalRefResolver.getFiles(),
102
- rootType: types.DefinitionRoot,
116
+ rootType: types.Root,
103
117
  refTypes: ctx.refTypes,
104
118
  visitorsData: ctx.visitorsData,
105
119
  };
@@ -148,6 +162,7 @@ exports.mapTypeToComponent = mapTypeToComponent;
148
162
  // function oas3Move
149
163
  function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDocument, resolvedRefMap, keepUrlRefs) {
150
164
  let components;
165
+ let rootLocation;
151
166
  const visitor = {
152
167
  ref: {
153
168
  leave(node, ctx, resolved) {
@@ -184,8 +199,9 @@ function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDo
184
199
  }
185
200
  },
186
201
  },
187
- DefinitionRoot: {
188
- enter(root) {
202
+ Root: {
203
+ enter(root, ctx) {
204
+ rootLocation = ctx.location;
189
205
  if (version === oas_types_1.OasMajorVersion.Version3) {
190
206
  components = root.components = root.components || {};
191
207
  }
@@ -231,9 +247,12 @@ function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDo
231
247
  ctx.parent[ctx.key] = resolved.node;
232
248
  }
233
249
  else {
250
+ // TODO: why $ref isn't optional in OasRef?
251
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
234
252
  // @ts-ignore
235
253
  delete ref.$ref;
236
- Object.assign(ref, resolved.node);
254
+ const obj = Object.assign({}, resolved.node, ref);
255
+ Object.assign(ref, obj); // assign ref itself again so ref fields take precedence
237
256
  }
238
257
  }
239
258
  function saveComponent(componentType, target, ctx) {
@@ -250,7 +269,8 @@ function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDo
250
269
  function isEqualOrEqualRef(node, target, ctx) {
251
270
  var _a;
252
271
  if (ref_utils_1.isRef(node) &&
253
- ((_a = ctx.resolve(node).location) === null || _a === void 0 ? void 0 : _a.absolutePointer) === target.location.absolutePointer) {
272
+ ((_a = ctx.resolve(node, rootLocation.absolutePointer).location) === null || _a === void 0 ? void 0 : _a.absolutePointer) ===
273
+ target.location.absolutePointer) {
254
274
  return true;
255
275
  }
256
276
  return isEqual(node, target.node);
@@ -259,7 +279,7 @@ function makeBundleVisitor(version, dereference, skipRedoclyRegistryRefs, rootDo
259
279
  const [fileRef, pointer] = [target.location.source.absoluteRef, target.location.pointer];
260
280
  const componentsGroup = components[componentType];
261
281
  let name = '';
262
- const refParts = pointer.slice(2).split('/').filter(Boolean); // slice(2) removes "#/"
282
+ const refParts = pointer.slice(2).split('/').filter(utils_1.isTruthy); // slice(2) removes "#/"
263
283
  while (refParts.length > 0) {
264
284
  name = refParts.pop() + (name ? `-${name}` : '');
265
285
  if (!componentsGroup ||
@@ -1,3 +1,3 @@
1
- import type { PluginLintConfig } from "./types";
2
- declare const _default: PluginLintConfig;
1
+ import type { PluginStyleguideConfig } from './types';
2
+ declare const _default: PluginStyleguideConfig;
3
3
  export default _default;
package/lib/config/all.js CHANGED
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = {
4
4
  rules: {
5
- 'info-description': 'error',
6
5
  'info-contact': 'error',
7
6
  'info-license': 'error',
8
7
  'info-license-url': 'error',
@@ -19,14 +18,14 @@ exports.default = {
19
18
  'operation-description': 'error',
20
19
  'operation-2xx-response': 'error',
21
20
  'operation-4xx-response': 'error',
22
- 'assertions': 'error',
21
+ assertions: 'error',
23
22
  'operation-operationId': 'error',
24
23
  'operation-summary': 'error',
25
24
  'operation-operationId-unique': 'error',
26
25
  'operation-operationId-url-safe': 'error',
27
26
  'operation-parameters-unique': 'error',
28
27
  'operation-tag-defined': 'error',
29
- 'operation-security-defined': 'error',
28
+ 'security-defined': 'error',
30
29
  'operation-singular-tag': 'error',
31
30
  'no-unresolved-refs': 'error',
32
31
  'no-enum-type-mismatch': 'error',
@@ -37,11 +36,20 @@ exports.default = {
37
36
  severity: 'error',
38
37
  patterns: [],
39
38
  },
40
- 'request-mime-type': 'error',
39
+ 'request-mime-type': {
40
+ severity: 'error',
41
+ allowedValues: ['application/json'],
42
+ },
43
+ 'response-mime-type': {
44
+ severity: 'error',
45
+ allowedValues: ['application/json'],
46
+ },
41
47
  spec: 'error',
42
48
  'no-invalid-schema-examples': 'error',
43
49
  'no-invalid-parameter-examples': 'error',
44
50
  'scalar-property-missing-example': 'error',
51
+ 'spec-strict-refs': 'error',
52
+ 'component-name-unique': 'error',
45
53
  },
46
54
  oas3_0Rules: {
47
55
  'no-invalid-media-type-examples': 'error',
@@ -51,7 +59,8 @@ exports.default = {
51
59
  'no-example-value-and-externalValue': 'error',
52
60
  'no-unused-components': 'error',
53
61
  'no-undefined-server-variable': 'error',
54
- 'no-servers-empty-enum': 'error',
62
+ 'no-server-variables-empty-enum': 'error',
63
+ 'operation-4xx-problem-details-rfc7807': 'error',
55
64
  },
56
65
  oas3_1Rules: {
57
66
  'no-server-example.com': 'error',
@@ -60,6 +69,7 @@ exports.default = {
60
69
  'no-example-value-and-externalValue': 'error',
61
70
  'no-unused-components': 'error',
62
71
  'no-undefined-server-variable': 'error',
63
- 'no-servers-empty-enum': 'error',
72
+ 'no-server-variables-empty-enum': 'error',
73
+ 'operation-4xx-problem-details-rfc7807': 'error',
64
74
  },
65
75
  };
@@ -1,3 +1,3 @@
1
- import type { LintRawConfig, Plugin } from './types';
2
- export declare const builtInConfigs: Record<string, LintRawConfig>;
1
+ import type { StyleguideRawConfig, Plugin } from './types';
2
+ export declare const builtInConfigs: Record<string, StyleguideRawConfig>;
3
3
  export declare const defaultPlugin: Plugin;
@@ -15,8 +15,8 @@ exports.builtInConfigs = {
15
15
  minimal: minimal_1.default,
16
16
  all: all_1.default,
17
17
  'redocly-registry': {
18
- decorators: { 'registry-dependencies': 'on' }
19
- }
18
+ decorators: { 'registry-dependencies': 'on' },
19
+ },
20
20
  };
21
21
  exports.defaultPlugin = {
22
22
  id: '',
@@ -1,5 +1,5 @@
1
1
  import { BaseResolver } from '../resolve';
2
- import type { LintRawConfig, Plugin, RawConfig, ResolvedApi, ResolvedLintConfig } from './types';
2
+ import type { StyleguideRawConfig, Plugin, RawConfig, ResolvedApi, ResolvedStyleguideConfig } from './types';
3
3
  import { Config } from './config';
4
4
  export declare function resolveConfig(rawConfig: RawConfig, configPath?: string): Promise<Config>;
5
5
  export declare function resolvePlugins(plugins: (string | Plugin)[] | null, configPath?: string): Plugin[];
@@ -8,9 +8,9 @@ export declare function resolveApis({ rawConfig, configPath, resolver, }: {
8
8
  configPath?: string;
9
9
  resolver?: BaseResolver;
10
10
  }): Promise<Record<string, ResolvedApi>>;
11
- export declare function resolveLint(lintOpts: {
12
- lintConfig?: LintRawConfig;
11
+ export declare function resolveStyleguideConfig(opts: {
12
+ styleguideConfig?: StyleguideRawConfig;
13
13
  configPath?: string;
14
14
  resolver?: BaseResolver;
15
- }, parentConfigPaths?: string[], extendPaths?: string[]): Promise<ResolvedLintConfig>;
16
- export declare function resolvePreset(presetName: string, plugins: Plugin[]): ResolvedLintConfig;
15
+ }, parentConfigPaths?: string[], extendPaths?: string[]): Promise<ResolvedStyleguideConfig>;
16
+ export declare function resolvePreset(presetName: string, plugins: Plugin[]): ResolvedStyleguideConfig;