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