@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
@@ -1,31 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../../__tests__/utils';
3
- import { lintDocument } from '../../../../lint';
4
- import { BaseResolver } from '../../../../resolve';
5
-
6
- describe('Referenceable scalars', () => {
7
- it('should not report $ref description', async () => {
8
- const document = parseYamlToDocument(
9
- outdent`
10
- swagger: '2.0'
11
- info:
12
- title: Test
13
- version: '1.0'
14
- description:
15
- $ref: fixtures/description.md
16
- paths: {}
17
- `,
18
- __dirname + '/foobar.yaml',
19
- );
20
-
21
- const results = await lintDocument({
22
- externalRefResolver: new BaseResolver(),
23
- document,
24
- config: await makeConfig({
25
- spec: 'error',
26
- }),
27
- });
28
-
29
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
30
- });
31
- });
@@ -1,32 +0,0 @@
1
- import { LintConfig, RuleConfig, resolveLint } from '../../../../config';
2
- import { parseYamlToDocument } from '../../../../../__tests__/utils';
3
- import { lintDocument } from '../../../../lint';
4
- import { BaseResolver } from '../../../../resolve';
5
-
6
- export async function lintDoc(
7
- source: string,
8
- rules: Record<string, RuleConfig> = { spec: 'error' },
9
- ) {
10
- const document = parseYamlToDocument(source, 'foobar.yaml');
11
-
12
- const results = await lintDocument({
13
- externalRefResolver: new BaseResolver(),
14
- document,
15
- config: new LintConfig(
16
- await resolveLint({
17
- lintConfig: {
18
- plugins: [],
19
- extends: [],
20
- rules,
21
- },
22
- }),
23
- ),
24
- });
25
-
26
- return results.map((res) => {
27
- return {
28
- message: res.message,
29
- location: res.location[0].pointer || '',
30
- };
31
- });
32
- }
@@ -1,26 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
-
3
- export type BooleanParameterPrefixesOptions = {
4
- prefixes?: string[];
5
- };
6
-
7
- export const BooleanParameterPrefixes: Oas2Rule = (options: BooleanParameterPrefixesOptions) => {
8
- const prefixes = options.prefixes || ['is', 'has'];
9
- const regexp = new RegExp(`^(${prefixes.join('|')})[A-Z-_]`);
10
- const wrappedPrefixes = prefixes.map((p) => `\`${p}\``);
11
- const prefixesString =
12
- wrappedPrefixes.length === 1
13
- ? wrappedPrefixes[0]
14
- : wrappedPrefixes.slice(0, -1).join(', ') + ' or ' + wrappedPrefixes[prefixes.length - 1];
15
-
16
- return {
17
- Parameter(param, { report, location }) {
18
- if (param.type === 'boolean' && !regexp.test(param.name)) {
19
- report({
20
- message: `Boolean parameter \`${param.name}\` should have ${prefixesString} prefix.`,
21
- location: location.child('name'),
22
- });
23
- }
24
- },
25
- };
26
- };
@@ -1,83 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
- import { OasSpec } from '../common/spec';
3
- import { NoInvalidSchemaExamples } from '../common/no-invalid-schema-examples';
4
- import { NoInvalidParameterExamples } from '../common/no-invalid-parameter-examples';
5
- import { InfoDescription } from '../common/info-description';
6
- import { InfoContact } from '../common/info-contact';
7
- import { InfoLicense } from '../common/info-license-url';
8
- import { InfoLicenseUrl } from '../common/license-url';
9
- import { BooleanParameterPrefixes } from './boolean-parameter-prefixes';
10
- import { TagDescription } from '../common/tag-description';
11
- import { TagsAlphabetical } from '../common/tags-alphabetical';
12
- import { PathsKebabCase } from '../common/paths-kebab-case';
13
- import { NoEnumTypeMismatch } from '../common/no-enum-type-mismatch';
14
- import { NoPathTrailingSlash } from '../common/no-path-trailing-slash';
15
- import { Operation2xxResponse } from '../common/operation-2xx-response';
16
- import { Operation4xxResponse } from '../common/operation-4xx-response';
17
- import { Assertions } from '../common/assertions';
18
- import { OperationIdUnique } from '../common/operation-operationId-unique';
19
- import { OperationParametersUnique } from '../common/operation-parameters-unique';
20
- import { PathParamsDefined } from '../common/path-params-defined';
21
- import { OperationTagDefined } from '../common/operation-tag-defined';
22
- import { PathDeclarationMustExist } from '../common/path-declaration-must-exist';
23
- import { OperationIdUrlSafe } from '../common/operation-operationId-url-safe';
24
- import { OperationDescription } from '../common/operation-description';
25
- import { PathNotIncludeQuery } from '../common/path-not-include-query';
26
- import { ParameterDescription } from '../common/parameter-description';
27
- import { OperationSingularTag } from '../common/operation-singular-tag';
28
- import { OperationSecurityDefined } from '../common/operation-security-defined';
29
- import { NoUnresolvedRefs } from '../no-unresolved-refs';
30
- import { PathHttpVerbsOrder } from '../common/path-http-verbs-order';
31
- import { NoIdenticalPaths } from '../common/no-identical-paths';
32
- import { OperationOperationId } from '../common/operation-operationId';
33
- import { OperationSummary } from '../common/operation-summary';
34
- import { NoAmbiguousPaths } from '../common/no-ambiguous-paths';
35
- import { NoHttpVerbsInPaths } from '../common/no-http-verbs-in-paths';
36
- import { PathExcludesPatterns } from '../common/path-excludes-patterns';
37
- import { RequestMimeType } from './request-mime-type';
38
- import { ResponseMimeType } from './response-mime-type';
39
- import { PathSegmentPlural } from '../common/path-segment-plural';
40
-
41
- export const rules = {
42
- spec: OasSpec as Oas2Rule,
43
- 'no-invalid-schema-examples': NoInvalidSchemaExamples,
44
- 'no-invalid-parameter-examples': NoInvalidParameterExamples,
45
- 'info-description': InfoDescription as Oas2Rule,
46
- 'info-contact': InfoContact as Oas2Rule,
47
- 'info-license': InfoLicense as Oas2Rule,
48
- 'info-license-url': InfoLicenseUrl as Oas2Rule,
49
- 'tag-description': TagDescription as Oas2Rule,
50
- 'tags-alphabetical': TagsAlphabetical as Oas2Rule,
51
- 'paths-kebab-case': PathsKebabCase as Oas2Rule,
52
- 'no-enum-type-mismatch': NoEnumTypeMismatch as Oas2Rule,
53
- 'boolean-parameter-prefixes': BooleanParameterPrefixes as Oas2Rule,
54
- 'no-path-trailing-slash': NoPathTrailingSlash as Oas2Rule,
55
- 'operation-2xx-response': Operation2xxResponse as Oas2Rule,
56
- 'operation-4xx-response': Operation4xxResponse as Oas2Rule,
57
- 'assertions': Assertions as Oas2Rule,
58
- 'operation-operationId-unique': OperationIdUnique as Oas2Rule,
59
- 'operation-parameters-unique': OperationParametersUnique as Oas2Rule,
60
- 'path-parameters-defined': PathParamsDefined as Oas2Rule,
61
- 'operation-tag-defined': OperationTagDefined as Oas2Rule,
62
- 'path-declaration-must-exist': PathDeclarationMustExist as Oas2Rule,
63
- 'operation-operationId-url-safe': OperationIdUrlSafe as Oas2Rule,
64
- 'operation-operationId': OperationOperationId as Oas2Rule,
65
- 'operation-summary': OperationSummary as Oas2Rule,
66
- 'operation-description': OperationDescription as Oas2Rule,
67
- 'path-not-include-query': PathNotIncludeQuery as Oas2Rule,
68
- 'path-params-defined': PathParamsDefined as Oas2Rule,
69
- 'parameter-description': ParameterDescription as Oas2Rule,
70
- 'operation-singular-tag': OperationSingularTag as Oas2Rule,
71
- 'operation-security-defined': OperationSecurityDefined as Oas2Rule,
72
- 'no-unresolved-refs': NoUnresolvedRefs as Oas2Rule,
73
- 'no-identical-paths': NoIdenticalPaths as Oas2Rule,
74
- 'no-ambiguous-paths': NoAmbiguousPaths as Oas2Rule,
75
- 'path-http-verbs-order': PathHttpVerbsOrder as Oas2Rule,
76
- 'no-http-verbs-in-paths': NoHttpVerbsInPaths as Oas2Rule,
77
- 'path-excludes-patterns': PathExcludesPatterns as Oas2Rule,
78
- 'request-mime-type': RequestMimeType as Oas2Rule,
79
- 'response-mime-type': ResponseMimeType as Oas2Rule,
80
- 'path-segment-plural': PathSegmentPlural as Oas2Rule,
81
- };
82
-
83
- export const preprocessors = {};
@@ -1,76 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
- import { Location } from '../../ref-utils';
3
- import { Oas2Components } from '../../typings/swagger';
4
- import { isEmptyObject } from '../../utils';
5
-
6
- export const RemoveUnusedComponents: Oas2Rule = () => {
7
- let components = new Map<string, { used: boolean; componentType?: keyof Oas2Components; name: string }>();
8
-
9
- function registerComponent(location: Location, componentType: keyof Oas2Components, name: string): void {
10
- components.set(location.absolutePointer, {
11
- used: components.get(location.absolutePointer)?.used || false,
12
- componentType,
13
- name,
14
- });
15
- }
16
-
17
- return {
18
- ref: {
19
- leave(ref, { type, resolve, key }) {
20
- if (
21
- ['Schema', 'Parameter', 'Response', 'SecurityScheme'].includes(type.name)
22
- ) {
23
- const resolvedRef = resolve(ref);
24
- if (!resolvedRef.location) return;
25
- components.set(resolvedRef.location.absolutePointer, {
26
- used: true,
27
- name: key.toString(),
28
- });
29
- }
30
- }
31
- },
32
- DefinitionRoot: {
33
- leave(root, ctx) {
34
- const data = ctx.getVisitorData() as { removedCount: number };
35
- data.removedCount = 0;
36
-
37
- let rootComponents = new Set<keyof Oas2Components>();
38
- components.forEach(usageInfo => {
39
- const { used, name, componentType } = usageInfo;
40
- if (!used && componentType) {
41
- rootComponents.add(componentType);
42
- delete root[componentType]![name];
43
- data.removedCount++;
44
- }
45
- });
46
- for (const component of rootComponents) {
47
- if (isEmptyObject(root[component])) {
48
- delete root[component];
49
- }
50
- }
51
- },
52
- },
53
- NamedSchemas: {
54
- Schema(schema, { location, key }) {
55
- if (!schema.allOf) {
56
- registerComponent(location, 'definitions', key.toString());
57
- }
58
- },
59
- },
60
- NamedParameters: {
61
- Parameter(_parameter, { location, key }) {
62
- registerComponent(location, 'parameters', key.toString());
63
- },
64
- },
65
- NamedResponses: {
66
- Response(_response, { location, key }) {
67
- registerComponent(location, 'responses', key.toString());
68
- },
69
- },
70
- NamedSecuritySchemes: {
71
- SecurityScheme(_securityScheme, { location, key }) {
72
- registerComponent(location, 'securityDefinitions', key.toString());
73
- },
74
- }
75
- };
76
- };
@@ -1,17 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { Oas2Definition, Oas2Operation } from '../../typings/swagger';
4
- import { validateMimeType } from '../../utils';
5
-
6
- export const RequestMimeType: Oas2Rule = ({ allowedValues }) => {
7
- return {
8
- DefinitionRoot(root: Oas2Definition, ctx: UserContext) {
9
- validateMimeType({ type: 'consumes', value: root }, ctx, allowedValues);
10
- },
11
- Operation: {
12
- leave(operation: Oas2Operation, ctx: UserContext) {
13
- validateMimeType({ type: 'consumes', value: operation }, ctx, allowedValues);
14
- },
15
- },
16
- };
17
- };
@@ -1,17 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { Oas2Definition, Oas2Operation } from '../../typings/swagger';
4
- import { validateMimeType } from '../../utils';
5
-
6
- export const ResponseMimeType: Oas2Rule = ({ allowedValues }) => {
7
- return {
8
- DefinitionRoot(root: Oas2Definition, ctx: UserContext) {
9
- validateMimeType({ type: 'produces', value: root }, ctx, allowedValues);
10
- },
11
- Operation: {
12
- leave(operation: Oas2Operation, ctx: UserContext) {
13
- validateMimeType({ type: 'produces', value: operation }, ctx, allowedValues);
14
- },
15
- },
16
- };
17
- };
@@ -1,111 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
3
- import { lintDocument } from '../../../lint';
4
- import { BaseResolver } from '../../../resolve';
5
-
6
- describe('oas3 boolean-parameter-prefixes', () => {
7
- it('should report on boolean param without prefix', async () => {
8
- const document = parseYamlToDocument(
9
- outdent`
10
- openapi: 3.0.0
11
- paths:
12
- '/test':
13
- parameters:
14
- - name: a
15
- in: path
16
- schema:
17
- type: boolean
18
- `,
19
- 'foobar.yaml',
20
- );
21
-
22
- const results = await lintDocument({
23
- externalRefResolver: new BaseResolver(),
24
- document,
25
- config: await makeConfig({ 'boolean-parameter-prefixes': 'error' }),
26
- });
27
-
28
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
29
- Array [
30
- Object {
31
- "location": Array [
32
- Object {
33
- "pointer": "#/paths/~1test/parameters/0/name",
34
- "reportOnKey": false,
35
- "source": "foobar.yaml",
36
- },
37
- ],
38
- "message": "Boolean parameter \`a\` should have \`is\` or \`has\` prefix.",
39
- "ruleId": "boolean-parameter-prefixes",
40
- "severity": "error",
41
- "suggest": Array [],
42
- },
43
- ]
44
- `);
45
- });
46
-
47
- it('should not report on boolean param with prefix', async () => {
48
- const document = parseYamlToDocument(
49
- outdent`
50
- openapi: 3.0.0
51
- paths:
52
- '/test':
53
- parameters:
54
- - name: hasA
55
- in: path
56
- schema:
57
- type: boolean
58
- - name: isA
59
- in: path
60
- schema:
61
- type: boolean
62
- - name: has_a
63
- in: path
64
- schema:
65
- type: boolean
66
- - name: is-a
67
- in: path
68
- schema:
69
- type: boolean
70
- `,
71
- 'foobar.yaml',
72
- );
73
-
74
- const results = await lintDocument({
75
- externalRefResolver: new BaseResolver(),
76
- document,
77
- config: await makeConfig({ 'boolean-parameter-prefixes': 'error' }),
78
- });
79
-
80
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
81
- });
82
-
83
- it('should not report on boolean param with custom prefix', async () => {
84
- const document = parseYamlToDocument(
85
- outdent`
86
- openapi: 3.0.0
87
- paths:
88
- '/test':
89
- parameters:
90
- - name: should-a
91
- in: query
92
- schema:
93
- type: boolean
94
- `,
95
- 'foobar.yaml',
96
- );
97
-
98
- const results = await lintDocument({
99
- externalRefResolver: new BaseResolver(),
100
- document,
101
- config: await makeConfig({
102
- 'boolean-parameter-prefixes': {
103
- severity: 'error',
104
- prefixes: ['should'],
105
- },
106
- }),
107
- });
108
-
109
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
110
- });
111
- });
@@ -1,11 +0,0 @@
1
- components:
2
- schemas:
3
- A:
4
- type: object
5
- properties:
6
- a:
7
- type: string
8
- b:
9
- $ref: '#/components/schemas/B'
10
- B:
11
- type: string
@@ -1,205 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import { lintDocument } from '../../../lint';
3
- import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
4
- import { BaseResolver } from '../../../resolve';
5
-
6
- describe('Oas3 as3-no-servers-empty-enum', () => {
7
- it('oas3-no-servers-empty-enum: should report on server object with empty enum and unknown enum value', async () => {
8
- const document = parseYamlToDocument(
9
- outdent`
10
- openapi: 3.0.0
11
- info:
12
- title: API
13
- version: 1.0.0
14
- servers:
15
- - url: https://example.com/{var}
16
- variables:
17
- var:
18
- enum: []
19
- default: a
20
- components: {}
21
- `
22
- );
23
-
24
- const results = await lintDocument({
25
- externalRefResolver: new BaseResolver(),
26
- document,
27
- config: await makeConfig({ 'no-servers-empty-enum': 'error' }),
28
- });
29
-
30
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
31
- Array [
32
- Object {
33
- "location": Array [
34
- Object {
35
- "pointer": "#/servers",
36
- "reportOnKey": true,
37
- "source": "",
38
- },
39
- ],
40
- "message": "Server variable with \`enum\` must be a non-empty array.",
41
- "ruleId": "no-servers-empty-enum",
42
- "severity": "error",
43
- "suggest": Array [],
44
- },
45
- Object {
46
- "location": Array [
47
- Object {
48
- "pointer": "#/servers",
49
- "reportOnKey": true,
50
- "source": "",
51
- },
52
- ],
53
- "message": "Server variable define \`enum\` and \`default\`. \`enum\` must include default value",
54
- "ruleId": "no-servers-empty-enum",
55
- "severity": "error",
56
- "suggest": Array [],
57
- },
58
- ]
59
- `);
60
- });
61
-
62
- it('oas3-no-servers-empty-enum: should report on server object with empty enum', async () => {
63
- const document = parseYamlToDocument(
64
- outdent`
65
- openapi: 3.0.0
66
- info:
67
- title: API
68
- version: 1.0.0
69
- servers:
70
- - url: https://example.com/{var}
71
- variables:
72
- var:
73
- enum: []
74
- components: {}
75
- `
76
- );
77
-
78
- const results = await lintDocument({
79
- externalRefResolver: new BaseResolver(),
80
- document,
81
- config: await makeConfig({ 'no-servers-empty-enum': 'error' }),
82
- });
83
-
84
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
85
- Array [
86
- Object {
87
- "location": Array [
88
- Object {
89
- "pointer": "#/servers",
90
- "reportOnKey": true,
91
- "source": "",
92
- },
93
- ],
94
- "message": "Server variable with \`enum\` must be a non-empty array.",
95
- "ruleId": "no-servers-empty-enum",
96
- "severity": "error",
97
- "suggest": Array [],
98
- },
99
- ]
100
- `);
101
- });
102
-
103
- it('oas3-no-servers-empty-enum: should be success because variables is empty object', async () => {
104
- const document = parseYamlToDocument(
105
- outdent`
106
- openapi: 3.0.0
107
- info:
108
- title: API
109
- version: 1.0.0
110
- servers:
111
- - url: https://example.com/{var}
112
- variables: {}
113
- components: {}
114
- `
115
- );
116
-
117
- const results = await lintDocument({
118
- externalRefResolver: new BaseResolver(),
119
- document,
120
- config: await makeConfig({ 'no-servers-empty-enum': 'error' }),
121
- });
122
-
123
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
124
- });
125
-
126
- it('oas3-no-servers-empty-enum: should be success because variable is empty object', async () => {
127
- const document = parseYamlToDocument(
128
- outdent`
129
- openapi: 3.0.0
130
- info:
131
- title: API
132
- version: 1.0.0
133
- servers:
134
- - url: https://example.com/{var}
135
- variables:
136
- var: {}
137
- components: {}
138
- `
139
- );
140
-
141
- const results = await lintDocument({
142
- externalRefResolver: new BaseResolver(),
143
- document,
144
- config: await makeConfig({ 'no-servers-empty-enum': 'error' }),
145
- });
146
-
147
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
148
- });
149
-
150
- it('oas3-no-servers-empty-enum: should be success because enum contains default value', async () => {
151
- const document = parseYamlToDocument(
152
- outdent`
153
- openapi: 3.0.0
154
- info:
155
- title: API
156
- version: 1.0.0
157
- servers:
158
- - url: https://example.com/{var}
159
- variables:
160
- var:
161
- enum:
162
- - a
163
- default: a
164
- components: {}
165
- `
166
- );
167
-
168
- const results = await lintDocument({
169
- externalRefResolver: new BaseResolver(),
170
- document,
171
- config: await makeConfig({ 'no-servers-empty-enum': 'error' }),
172
- });
173
-
174
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
175
- });
176
-
177
- it('oas3-no-servers-empty-enum: should be success because enum contains default value', async () => {
178
- const document = parseYamlToDocument(
179
- outdent`
180
- openapi: 3.0.0
181
- info:
182
- title: API
183
- version: 1.0.0
184
- servers:
185
- - url: https://example.com/{var}
186
- variables:
187
- var:
188
- type: ['string', 'null']
189
- enum:
190
- - 'some string'
191
- - null
192
- default: 'some string'
193
- components: {}
194
- `
195
- );
196
-
197
- const results = await lintDocument({
198
- externalRefResolver: new BaseResolver(),
199
- document,
200
- config: await makeConfig({ 'no-servers-empty-enum': 'error' }),
201
- });
202
-
203
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
204
- });
205
- });
@@ -1,65 +0,0 @@
1
- import { outdent } from 'outdent';
2
- import { lintDocument } from '../../../lint';
3
- import { parseYamlToDocument, replaceSourceWithRef, makeConfig } from '../../../../__tests__/utils';
4
- import { BaseResolver } from '../../../resolve';
5
-
6
- describe('Oas3 oas3-no-example-value-and-externalValue', () => {
7
- it('oas3-no-example-value-and-externalValue: should report on example object with both value and external value', async () => {
8
- const document = parseYamlToDocument(
9
- outdent`
10
- openapi: 3.0.0
11
- components:
12
- examples:
13
- some:
14
- value: 12
15
- externalValue: https://1.1.1.1
16
- `,
17
- 'foobar.yaml',
18
- );
19
-
20
- const results = await lintDocument({
21
- externalRefResolver: new BaseResolver(),
22
- document,
23
- config: await makeConfig({ 'no-example-value-and-externalValue': 'error' }),
24
- });
25
-
26
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`
27
- Array [
28
- Object {
29
- "location": Array [
30
- Object {
31
- "pointer": "#/components/examples/some/value",
32
- "reportOnKey": true,
33
- "source": "foobar.yaml",
34
- },
35
- ],
36
- "message": "Example object can have either \`value\` or \`externalValue\` fields.",
37
- "ruleId": "no-example-value-and-externalValue",
38
- "severity": "error",
39
- "suggest": Array [],
40
- },
41
- ]
42
- `);
43
- });
44
-
45
- it('oas3-no-example-value-and-externalValue: should not report on example object with value OR external value', async () => {
46
- const document = parseYamlToDocument(
47
- outdent`
48
- openapi: 3.0.0
49
- components:
50
- examples:
51
- some:
52
- value: 12
53
- `,
54
- 'foobar.yaml',
55
- );
56
-
57
- const results = await lintDocument({
58
- externalRefResolver: new BaseResolver(),
59
- document,
60
- config: await makeConfig({ 'no-example-value-and-externalValue': 'error' }),
61
- });
62
-
63
- expect(replaceSourceWithRef(results)).toMatchInlineSnapshot(`Array []`);
64
- });
65
- });