@redocly/openapi-core 1.0.0-beta.99 → 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 (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
@@ -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,89 +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
- import { ResponseContainsHeader } from '../common/response-contains-header';
41
- import { ResponseContainsProperty } from './response-contains-property';
42
- import { ScalarPropertyMissingExample } from '../common/scalar-property-missing-example';
43
-
44
- export const rules = {
45
- spec: OasSpec as Oas2Rule,
46
- 'no-invalid-schema-examples': NoInvalidSchemaExamples,
47
- 'no-invalid-parameter-examples': NoInvalidParameterExamples,
48
- 'info-description': InfoDescription as Oas2Rule,
49
- 'info-contact': InfoContact as Oas2Rule,
50
- 'info-license': InfoLicense as Oas2Rule,
51
- 'info-license-url': InfoLicenseUrl as Oas2Rule,
52
- 'tag-description': TagDescription as Oas2Rule,
53
- 'tags-alphabetical': TagsAlphabetical as Oas2Rule,
54
- 'paths-kebab-case': PathsKebabCase as Oas2Rule,
55
- 'no-enum-type-mismatch': NoEnumTypeMismatch as Oas2Rule,
56
- 'boolean-parameter-prefixes': BooleanParameterPrefixes as Oas2Rule,
57
- 'no-path-trailing-slash': NoPathTrailingSlash as Oas2Rule,
58
- 'operation-2xx-response': Operation2xxResponse as Oas2Rule,
59
- 'operation-4xx-response': Operation4xxResponse as Oas2Rule,
60
- 'assertions': Assertions as Oas2Rule,
61
- 'operation-operationId-unique': OperationIdUnique as Oas2Rule,
62
- 'operation-parameters-unique': OperationParametersUnique as Oas2Rule,
63
- 'path-parameters-defined': PathParamsDefined as Oas2Rule,
64
- 'operation-tag-defined': OperationTagDefined as Oas2Rule,
65
- 'path-declaration-must-exist': PathDeclarationMustExist as Oas2Rule,
66
- 'operation-operationId-url-safe': OperationIdUrlSafe as Oas2Rule,
67
- 'operation-operationId': OperationOperationId as Oas2Rule,
68
- 'operation-summary': OperationSummary as Oas2Rule,
69
- 'operation-description': OperationDescription as Oas2Rule,
70
- 'path-not-include-query': PathNotIncludeQuery as Oas2Rule,
71
- 'path-params-defined': PathParamsDefined as Oas2Rule,
72
- 'parameter-description': ParameterDescription as Oas2Rule,
73
- 'operation-singular-tag': OperationSingularTag as Oas2Rule,
74
- 'operation-security-defined': OperationSecurityDefined as Oas2Rule,
75
- 'no-unresolved-refs': NoUnresolvedRefs as Oas2Rule,
76
- 'no-identical-paths': NoIdenticalPaths as Oas2Rule,
77
- 'no-ambiguous-paths': NoAmbiguousPaths as Oas2Rule,
78
- 'path-http-verbs-order': PathHttpVerbsOrder as Oas2Rule,
79
- 'no-http-verbs-in-paths': NoHttpVerbsInPaths as Oas2Rule,
80
- 'path-excludes-patterns': PathExcludesPatterns as Oas2Rule,
81
- 'request-mime-type': RequestMimeType as Oas2Rule,
82
- 'response-mime-type': ResponseMimeType as Oas2Rule,
83
- 'path-segment-plural': PathSegmentPlural as Oas2Rule,
84
- 'response-contains-header': ResponseContainsHeader as Oas2Rule,
85
- 'response-contains-property': ResponseContainsProperty as Oas2Rule,
86
- 'scalar-property-missing-example': ScalarPropertyMissingExample,
87
- };
88
-
89
- 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,36 +0,0 @@
1
- import { Oas2Rule } from '../../visitors';
2
- import { UserContext } from '../../walk';
3
- import { getMatchingStatusCodeRange } from '../../utils';
4
-
5
- export const ResponseContainsProperty: Oas2Rule = (options) => {
6
- const names: Record<string, string[]> = options.names || {};
7
- let key: string | number;
8
- return {
9
- Operation: {
10
- Response: {
11
- skip: (_response, key) => {
12
- return `${key}` === '204';
13
- },
14
- enter: (_response, ctx: UserContext) => {
15
- key = ctx.key;
16
- },
17
- Schema(schema, { report, location }) {
18
- if (schema.type !== 'object') return;
19
- const expectedProperties =
20
- names[key] ||
21
- names[getMatchingStatusCodeRange(key)] ||
22
- names[getMatchingStatusCodeRange(key).toLowerCase()] ||
23
- [];
24
- for (const expectedProperty of expectedProperties) {
25
- if (!schema.properties?.[expectedProperty]) {
26
- report({
27
- message: `Response object must contain a top-level "${expectedProperty}" property.`,
28
- location: location.child('properties').key(),
29
- });
30
- }
31
- }
32
- },
33
- },
34
- },
35
- };
36
- };
@@ -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
- });