@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
@@ -4,7 +4,7 @@ exports.OperationTagDefined = void 0;
4
4
  const OperationTagDefined = () => {
5
5
  let definedTags;
6
6
  return {
7
- DefinitionRoot(root) {
7
+ Root(root) {
8
8
  var _a;
9
9
  definedTags = new Set(((_a = root.tags) !== null && _a !== void 0 ? _a : []).map((t) => t.name));
10
10
  },
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PathNotIncludeQuery = void 0;
4
4
  const PathNotIncludeQuery = () => {
5
5
  return {
6
- PathMap: {
6
+ Paths: {
7
7
  PathItem(_operation, { report, key }) {
8
8
  if (key.toString().includes('?')) {
9
9
  report({
@@ -12,7 +12,7 @@ const PathNotIncludeQuery = () => {
12
12
  });
13
13
  }
14
14
  },
15
- }
15
+ },
16
16
  };
17
17
  };
18
18
  exports.PathNotIncludeQuery = PathNotIncludeQuery;
@@ -6,6 +6,7 @@ const PathParamsDefined = () => {
6
6
  let pathTemplateParams;
7
7
  let definedPathParams;
8
8
  let currentPath;
9
+ let definedOperationParams;
9
10
  return {
10
11
  PathItem: {
11
12
  enter(_, { key }) {
@@ -25,9 +26,13 @@ const PathParamsDefined = () => {
25
26
  }
26
27
  },
27
28
  Operation: {
29
+ enter() {
30
+ definedOperationParams = new Set();
31
+ },
28
32
  leave(_op, { report, location }) {
29
33
  for (const templateParam of Array.from(pathTemplateParams.keys())) {
30
- if (!definedPathParams.has(templateParam)) {
34
+ if (!definedOperationParams.has(templateParam) &&
35
+ !definedPathParams.has(templateParam)) {
31
36
  report({
32
37
  message: `The operation does not define the path parameter \`{${templateParam}}\` expected by path \`${currentPath}\`.`,
33
38
  location: location.child(['parameters']).key(), // report on operation
@@ -37,7 +42,7 @@ const PathParamsDefined = () => {
37
42
  },
38
43
  Parameter(parameter, { report, location }) {
39
44
  if (parameter.in === 'path' && parameter.name) {
40
- definedPathParams.add(parameter.name);
45
+ definedOperationParams.add(parameter.name);
41
46
  if (!pathTemplateParams.has(parameter.name)) {
42
47
  report({
43
48
  message: `Path parameter \`${parameter.name}\` is not used in the path \`${currentPath}\`.`,
@@ -4,7 +4,10 @@ exports.PathsKebabCase = void 0;
4
4
  const PathsKebabCase = () => {
5
5
  return {
6
6
  PathItem(_path, { report, key }) {
7
- const segments = key.substr(1).split('/').filter(s => s !== ''); // filter out empty segments
7
+ const segments = key
8
+ .substr(1)
9
+ .split('/')
10
+ .filter((s) => s !== ''); // filter out empty segments
8
11
  if (!segments.every((segment) => /^{.+}$/.test(segment) || /^[a-z0-9-.]+$/.test(segment))) {
9
12
  report({
10
13
  message: `\`${key}\` does not use kebab-case.`,
@@ -0,0 +1,2 @@
1
+ import { Oas3Rule } from 'core/src/visitors';
2
+ export declare const RequiredStringPropertyMissingMinLength: Oas3Rule;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RequiredStringPropertyMissingMinLength = void 0;
4
+ const RequiredStringPropertyMissingMinLength = () => {
5
+ let skipSchemaProperties;
6
+ let requiredPropertiesSet;
7
+ return {
8
+ Schema: {
9
+ enter(schema) {
10
+ if (!(schema === null || schema === void 0 ? void 0 : schema.required)) {
11
+ skipSchemaProperties = true;
12
+ return;
13
+ }
14
+ requiredPropertiesSet = new Set(schema.required);
15
+ skipSchemaProperties = false;
16
+ },
17
+ SchemaProperties: {
18
+ skip() {
19
+ return skipSchemaProperties;
20
+ },
21
+ Schema: {
22
+ enter(schema, { key, location, report }) {
23
+ if (requiredPropertiesSet.has(key) && schema.type === 'string') {
24
+ if (!(schema === null || schema === void 0 ? void 0 : schema.minLength)) {
25
+ report({
26
+ message: 'Property minLength is required.',
27
+ location: location.key(),
28
+ });
29
+ }
30
+ }
31
+ },
32
+ },
33
+ },
34
+ },
35
+ };
36
+ };
37
+ exports.RequiredStringPropertyMissingMinLength = RequiredStringPropertyMissingMinLength;
@@ -0,0 +1,2 @@
1
+ import { Oas2Rule, Oas3Rule } from '../../visitors';
2
+ export declare const ResponseContainsHeader: Oas3Rule | Oas2Rule;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseContainsHeader = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const ResponseContainsHeader = (options) => {
6
+ const names = options.names || {};
7
+ return {
8
+ Operation: {
9
+ Response: {
10
+ enter: (response, { report, location, key }) => {
11
+ const expectedHeaders = names[key] ||
12
+ names[utils_1.getMatchingStatusCodeRange(key)] ||
13
+ names[utils_1.getMatchingStatusCodeRange(key).toLowerCase()] ||
14
+ [];
15
+ for (const expectedHeader of expectedHeaders) {
16
+ if (!(response === null || response === void 0 ? void 0 : response.headers) ||
17
+ !Object.keys(response === null || response === void 0 ? void 0 : response.headers).some((header) => header.toLowerCase() === expectedHeader.toLowerCase())) {
18
+ report({
19
+ message: `Response object must contain a "${expectedHeader}" header.`,
20
+ location: location.child('headers').key(),
21
+ });
22
+ }
23
+ }
24
+ },
25
+ },
26
+ },
27
+ };
28
+ };
29
+ exports.ResponseContainsHeader = ResponseContainsHeader;
@@ -0,0 +1,2 @@
1
+ import type { Oas2Rule, Oas3Rule } from '../../visitors';
2
+ export declare const ScalarPropertyMissingExample: Oas3Rule | Oas2Rule;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScalarPropertyMissingExample = void 0;
4
+ const oas_types_1 = require("../../oas-types");
5
+ const SCALAR_TYPES = ['string', 'integer', 'number', 'boolean', 'null'];
6
+ const ScalarPropertyMissingExample = () => {
7
+ return {
8
+ SchemaProperties(properties, { report, location, oasVersion, resolve }) {
9
+ for (const propName of Object.keys(properties)) {
10
+ const propSchema = resolve(properties[propName]).node;
11
+ if (!propSchema || !isScalarSchema(propSchema)) {
12
+ continue;
13
+ }
14
+ if (propSchema.example === undefined &&
15
+ propSchema.examples === undefined) {
16
+ report({
17
+ message: `Scalar property should have "example"${oasVersion === oas_types_1.OasVersion.Version3_1 ? ' or "examples"' : ''} defined.`,
18
+ location: location.child(propName).key(),
19
+ });
20
+ }
21
+ }
22
+ },
23
+ };
24
+ };
25
+ exports.ScalarPropertyMissingExample = ScalarPropertyMissingExample;
26
+ function isScalarSchema(schema) {
27
+ if (!schema.type) {
28
+ return false;
29
+ }
30
+ if (schema.allOf || schema.anyOf || schema.oneOf) {
31
+ // Skip allOf/oneOf/anyOf as it's complicated to validate it right now.
32
+ // We need core support for checking contrstrains through those keywords.
33
+ return false;
34
+ }
35
+ if (schema.format === 'binary') {
36
+ return false;
37
+ }
38
+ if (Array.isArray(schema.type)) {
39
+ return schema.type.every((t) => SCALAR_TYPES.includes(t));
40
+ }
41
+ return SCALAR_TYPES.includes(schema.type);
42
+ }
@@ -0,0 +1,2 @@
1
+ import { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const SecurityDefined: Oas3Rule | Oas2Rule;
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OperationSecurityDefined = void 0;
4
- const OperationSecurityDefined = () => {
5
- let referencedSchemes = new Map();
3
+ exports.SecurityDefined = void 0;
4
+ const SecurityDefined = () => {
5
+ const referencedSchemes = new Map();
6
+ const operationsWithoutSecurity = [];
7
+ let eachOperationHasSecurity = true;
6
8
  return {
7
- DefinitionRoot: {
8
- leave(_, { report }) {
9
+ Root: {
10
+ leave(root, { report }) {
9
11
  for (const [name, scheme] of referencedSchemes.entries()) {
10
12
  if (scheme.defined)
11
13
  continue;
@@ -16,6 +18,17 @@ const OperationSecurityDefined = () => {
16
18
  });
17
19
  }
18
20
  }
21
+ if (root.security || eachOperationHasSecurity) {
22
+ return;
23
+ }
24
+ else {
25
+ for (const operationLocation of operationsWithoutSecurity) {
26
+ report({
27
+ message: `Every operation should have security defined on it or on the root level.`,
28
+ location: operationLocation.key(),
29
+ });
30
+ }
31
+ }
19
32
  },
20
33
  },
21
34
  SecurityScheme(_securityScheme, { key }) {
@@ -33,6 +46,12 @@ const OperationSecurityDefined = () => {
33
46
  }
34
47
  }
35
48
  },
49
+ Operation(operation, { location }) {
50
+ if (!(operation === null || operation === void 0 ? void 0 : operation.security)) {
51
+ eachOperationHasSecurity = false;
52
+ operationsWithoutSecurity.push(location);
53
+ }
54
+ },
36
55
  };
37
56
  };
38
- exports.OperationSecurityDefined = OperationSecurityDefined;
57
+ exports.SecurityDefined = SecurityDefined;
@@ -0,0 +1,2 @@
1
+ import { Oas2Rule, Oas3Rule } from '../../visitors';
2
+ export declare const SpecStrictRefs: Oas3Rule | Oas2Rule;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpecStrictRefs = void 0;
4
+ const ref_utils_1 = require("../../ref-utils");
5
+ const SpecStrictRefs = () => {
6
+ const nodesToSkip = [
7
+ 'Schema',
8
+ 'Response',
9
+ 'Parameter',
10
+ 'RequestBody',
11
+ 'Example',
12
+ 'Header',
13
+ 'SecurityScheme',
14
+ 'Link',
15
+ 'Callback',
16
+ 'PathItem',
17
+ ];
18
+ return {
19
+ any(_node, { report, rawNode, rawLocation, type }) {
20
+ const shouldCheck = !nodesToSkip.includes(type.name);
21
+ if (shouldCheck && ref_utils_1.isRef(rawNode)) {
22
+ report({
23
+ message: 'Field $ref is not expected here.',
24
+ location: rawLocation.child('$ref').key(),
25
+ });
26
+ }
27
+ },
28
+ };
29
+ };
30
+ exports.SpecStrictRefs = SpecStrictRefs;
@@ -7,30 +7,37 @@ const ref_utils_1 = require("../../ref-utils");
7
7
  const utils_2 = require("../../utils");
8
8
  const OasSpec = () => {
9
9
  return {
10
- any(node, { report, type, location, key, resolve, ignoreNextVisitorsOnNode }) {
11
- var _a, _b, _c, _d;
10
+ any(node, { report, type, location, rawLocation, key, resolve, ignoreNextVisitorsOnNode }) {
11
+ var _a, _b, _c, _d, _e, _f;
12
12
  const nodeType = utils_1.oasTypeOf(node);
13
+ const refLocation = rawLocation !== location ? rawLocation : undefined;
13
14
  if (type.items) {
14
15
  if (nodeType !== 'array') {
15
16
  report({
16
17
  message: `Expected type \`${type.name}\` (array) but got \`${nodeType}\``,
18
+ from: refLocation,
17
19
  });
18
20
  ignoreNextVisitorsOnNode();
19
21
  }
20
22
  return;
21
23
  }
22
24
  else if (nodeType !== 'object') {
23
- report({
24
- message: `Expected type \`${type.name}\` (object) but got \`${nodeType}\``,
25
- });
25
+ if (type !== types_1.SpecExtension) {
26
+ // do not validate unknown extensions structure
27
+ report({
28
+ message: `Expected type \`${type.name}\` (object) but got \`${nodeType}\``,
29
+ from: refLocation,
30
+ });
31
+ }
26
32
  ignoreNextVisitorsOnNode();
27
33
  return;
28
34
  }
29
35
  const required = typeof type.required === 'function' ? type.required(node, key) : type.required;
30
- for (let propName of required || []) {
36
+ for (const propName of required || []) {
31
37
  if (!node.hasOwnProperty(propName)) {
32
38
  report({
33
39
  message: `The field \`${propName}\` must be present on this level.`,
40
+ from: refLocation,
34
41
  location: [{ reportOnKey: true }],
35
42
  });
36
43
  }
@@ -45,14 +52,15 @@ const OasSpec = () => {
45
52
  }
46
53
  report({
47
54
  message: `The field \`${propName}\` is not allowed here.`,
48
- location: location.child([propName]).key()
55
+ from: refLocation,
56
+ location: location.child([propName]).key(),
49
57
  });
50
58
  }
51
59
  }
52
60
  const requiredOneOf = type.requiredOneOf || null;
53
61
  if (requiredOneOf) {
54
62
  let hasProperty = false;
55
- for (let propName of requiredOneOf || []) {
63
+ for (const propName of requiredOneOf || []) {
56
64
  if (node.hasOwnProperty(propName)) {
57
65
  hasProperty = true;
58
66
  }
@@ -60,6 +68,7 @@ const OasSpec = () => {
60
68
  if (!hasProperty)
61
69
  report({
62
70
  message: `Must contain at least one of the following fields: ${(_b = type.requiredOneOf) === null || _b === void 0 ? void 0 : _b.join(', ')}.`,
71
+ from: refLocation,
63
72
  location: [{ reportOnKey: true }],
64
73
  });
65
74
  }
@@ -82,6 +91,7 @@ const OasSpec = () => {
82
91
  report({
83
92
  message: `Property \`${propName}\` is not expected here.`,
84
93
  suggest: utils_1.getSuggest(propName, Object.keys(type.properties)),
94
+ from: refLocation,
85
95
  location: propLocation.key(),
86
96
  });
87
97
  continue;
@@ -92,30 +102,36 @@ const OasSpec = () => {
92
102
  if (propSchema.resolvable !== false && ref_utils_1.isRef(propValue)) {
93
103
  propValue = resolve(propValue).node;
94
104
  }
95
- if (propSchema.enum) {
96
- if (!propSchema.enum.includes(propValue)) {
97
- report({
98
- location: propLocation,
99
- message: `\`${propName}\` can be one of the following only: ${propSchema.enum
100
- .map((i) => `"${i}"`)
101
- .join(', ')}.`,
102
- suggest: utils_1.getSuggest(propValue, propSchema.enum),
105
+ if (propSchema.items && ((_c = propSchema.items) === null || _c === void 0 ? void 0 : _c.enum) && Array.isArray(propValue)) {
106
+ for (let i = 0; i < propValue.length; i++) {
107
+ utils_1.validateSchemaEnumType((_d = propSchema.items) === null || _d === void 0 ? void 0 : _d.enum, propValue[i], propName, refLocation, {
108
+ report,
109
+ location: location.child([propName, i]),
103
110
  });
104
111
  }
105
112
  }
113
+ if (propSchema.enum) {
114
+ utils_1.validateSchemaEnumType(propSchema.enum, propValue, propName, refLocation, {
115
+ report,
116
+ location: location.child([propName]),
117
+ });
118
+ }
106
119
  else if (propSchema.type && !utils_1.matchesJsonSchemaType(propValue, propSchema.type, false)) {
107
120
  report({
108
121
  message: `Expected type \`${propSchema.type}\` but got \`${propValueType}\`.`,
122
+ from: refLocation,
109
123
  location: propLocation,
110
124
  });
125
+ ignoreNextVisitorsOnNode();
111
126
  }
112
- else if (propValueType === 'array' && ((_c = propSchema.items) === null || _c === void 0 ? void 0 : _c.type)) {
113
- const itemsType = (_d = propSchema.items) === null || _d === void 0 ? void 0 : _d.type;
127
+ else if (propValueType === 'array' && ((_e = propSchema.items) === null || _e === void 0 ? void 0 : _e.type)) {
128
+ const itemsType = (_f = propSchema.items) === null || _f === void 0 ? void 0 : _f.type;
114
129
  for (let i = 0; i < propValue.length; i++) {
115
130
  const item = propValue[i];
116
131
  if (!utils_1.matchesJsonSchemaType(item, itemsType, false)) {
117
132
  report({
118
133
  message: `Expected type \`${itemsType}\` but got \`${utils_1.oasTypeOf(item)}\`.`,
134
+ from: refLocation,
119
135
  location: propLocation.child([i]),
120
136
  });
121
137
  }
@@ -125,10 +141,17 @@ const OasSpec = () => {
125
141
  if (propSchema.minimum > node[propName]) {
126
142
  report({
127
143
  message: `The value of the ${propName} field must be greater than or equal to ${propSchema.minimum}`,
144
+ from: refLocation,
128
145
  location: location.child([propName]),
129
146
  });
130
147
  }
131
148
  }
149
+ if (propName === 'nullable' && !node.type) {
150
+ report({
151
+ message: 'The `type` field must be defined when the `nullable` field is used.',
152
+ location: location.child([propName]),
153
+ });
154
+ }
132
155
  }
133
156
  },
134
157
  };
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TagsAlphabetical = void 0;
4
4
  const TagsAlphabetical = () => {
5
5
  return {
6
- DefinitionRoot(root, { report, location }) {
6
+ Root(root, { report, location }) {
7
7
  if (!root.tags)
8
8
  return;
9
9
  for (let i = 0; i < root.tags.length - 1; i++) {
@@ -3,7 +3,6 @@ export declare const rules: {
3
3
  spec: Oas2Rule;
4
4
  'no-invalid-schema-examples': any;
5
5
  'no-invalid-parameter-examples': any;
6
- 'info-description': Oas2Rule;
7
6
  'info-contact': Oas2Rule;
8
7
  'info-license': Oas2Rule;
9
8
  'info-license-url': Oas2Rule;
@@ -29,7 +28,7 @@ export declare const rules: {
29
28
  'path-params-defined': Oas2Rule;
30
29
  'parameter-description': Oas2Rule;
31
30
  'operation-singular-tag': Oas2Rule;
32
- 'operation-security-defined': Oas2Rule;
31
+ 'security-defined': Oas2Rule;
33
32
  'no-unresolved-refs': Oas2Rule;
34
33
  'no-identical-paths': Oas2Rule;
35
34
  'no-ambiguous-paths': Oas2Rule;
@@ -39,5 +38,10 @@ export declare const rules: {
39
38
  'request-mime-type': Oas2Rule;
40
39
  'response-mime-type': Oas2Rule;
41
40
  'path-segment-plural': Oas2Rule;
41
+ 'response-contains-header': Oas2Rule;
42
+ 'response-contains-property': Oas2Rule;
43
+ 'scalar-property-missing-example': import("../../visitors").Oas3Rule | Oas2Rule;
44
+ 'required-string-property-missing-min-length': import("../../visitors").Oas3Rule;
45
+ 'spec-strict-refs': import("../../visitors").Oas3Rule | Oas2Rule;
42
46
  };
43
47
  export declare const preprocessors: {};
@@ -4,10 +4,9 @@ exports.preprocessors = exports.rules = void 0;
4
4
  const spec_1 = require("../common/spec");
5
5
  const no_invalid_schema_examples_1 = require("../common/no-invalid-schema-examples");
6
6
  const no_invalid_parameter_examples_1 = require("../common/no-invalid-parameter-examples");
7
- const info_description_1 = require("../common/info-description");
8
7
  const info_contact_1 = require("../common/info-contact");
8
+ const info_license_1 = require("../common/info-license");
9
9
  const info_license_url_1 = require("../common/info-license-url");
10
- const license_url_1 = require("../common/license-url");
11
10
  const boolean_parameter_prefixes_1 = require("./boolean-parameter-prefixes");
12
11
  const tag_description_1 = require("../common/tag-description");
13
12
  const tags_alphabetical_1 = require("../common/tags-alphabetical");
@@ -27,7 +26,7 @@ const operation_description_1 = require("../common/operation-description");
27
26
  const path_not_include_query_1 = require("../common/path-not-include-query");
28
27
  const parameter_description_1 = require("../common/parameter-description");
29
28
  const operation_singular_tag_1 = require("../common/operation-singular-tag");
30
- const operation_security_defined_1 = require("../common/operation-security-defined");
29
+ const security_defined_1 = require("../common/security-defined");
31
30
  const no_unresolved_refs_1 = require("../no-unresolved-refs");
32
31
  const path_http_verbs_order_1 = require("../common/path-http-verbs-order");
33
32
  const no_identical_paths_1 = require("../common/no-identical-paths");
@@ -39,14 +38,18 @@ const path_excludes_patterns_1 = require("../common/path-excludes-patterns");
39
38
  const request_mime_type_1 = require("./request-mime-type");
40
39
  const response_mime_type_1 = require("./response-mime-type");
41
40
  const path_segment_plural_1 = require("../common/path-segment-plural");
41
+ const response_contains_header_1 = require("../common/response-contains-header");
42
+ const response_contains_property_1 = require("./response-contains-property");
43
+ const scalar_property_missing_example_1 = require("../common/scalar-property-missing-example");
44
+ const required_string_property_missing_min_length_1 = require("../common/required-string-property-missing-min-length");
45
+ const spec_strict_refs_1 = require("../common/spec-strict-refs");
42
46
  exports.rules = {
43
47
  spec: spec_1.OasSpec,
44
48
  'no-invalid-schema-examples': no_invalid_schema_examples_1.NoInvalidSchemaExamples,
45
49
  'no-invalid-parameter-examples': no_invalid_parameter_examples_1.NoInvalidParameterExamples,
46
- 'info-description': info_description_1.InfoDescription,
47
50
  'info-contact': info_contact_1.InfoContact,
48
- 'info-license': info_license_url_1.InfoLicense,
49
- 'info-license-url': license_url_1.InfoLicenseUrl,
51
+ 'info-license': info_license_1.InfoLicense,
52
+ 'info-license-url': info_license_url_1.InfoLicenseUrl,
50
53
  'tag-description': tag_description_1.TagDescription,
51
54
  'tags-alphabetical': tags_alphabetical_1.TagsAlphabetical,
52
55
  'paths-kebab-case': paths_kebab_case_1.PathsKebabCase,
@@ -55,7 +58,7 @@ exports.rules = {
55
58
  'no-path-trailing-slash': no_path_trailing_slash_1.NoPathTrailingSlash,
56
59
  'operation-2xx-response': operation_2xx_response_1.Operation2xxResponse,
57
60
  'operation-4xx-response': operation_4xx_response_1.Operation4xxResponse,
58
- 'assertions': assertions_1.Assertions,
61
+ assertions: assertions_1.Assertions,
59
62
  'operation-operationId-unique': operation_operationId_unique_1.OperationIdUnique,
60
63
  'operation-parameters-unique': operation_parameters_unique_1.OperationParametersUnique,
61
64
  'path-parameters-defined': path_params_defined_1.PathParamsDefined,
@@ -69,7 +72,7 @@ exports.rules = {
69
72
  'path-params-defined': path_params_defined_1.PathParamsDefined,
70
73
  'parameter-description': parameter_description_1.ParameterDescription,
71
74
  'operation-singular-tag': operation_singular_tag_1.OperationSingularTag,
72
- 'operation-security-defined': operation_security_defined_1.OperationSecurityDefined,
75
+ 'security-defined': security_defined_1.SecurityDefined,
73
76
  'no-unresolved-refs': no_unresolved_refs_1.NoUnresolvedRefs,
74
77
  'no-identical-paths': no_identical_paths_1.NoIdenticalPaths,
75
78
  'no-ambiguous-paths': no_ambiguous_paths_1.NoAmbiguousPaths,
@@ -79,5 +82,10 @@ exports.rules = {
79
82
  'request-mime-type': request_mime_type_1.RequestMimeType,
80
83
  'response-mime-type': response_mime_type_1.ResponseMimeType,
81
84
  'path-segment-plural': path_segment_plural_1.PathSegmentPlural,
85
+ 'response-contains-header': response_contains_header_1.ResponseContainsHeader,
86
+ 'response-contains-property': response_contains_property_1.ResponseContainsProperty,
87
+ 'scalar-property-missing-example': scalar_property_missing_example_1.ScalarPropertyMissingExample,
88
+ 'required-string-property-missing-min-length': required_string_property_missing_min_length_1.RequiredStringPropertyMissingMinLength,
89
+ 'spec-strict-refs': spec_strict_refs_1.SpecStrictRefs,
82
90
  };
83
91
  exports.preprocessors = {};
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RemoveUnusedComponents = void 0;
4
4
  const utils_1 = require("../../utils");
5
5
  const RemoveUnusedComponents = () => {
6
- let components = new Map();
6
+ const components = new Map();
7
7
  function registerComponent(location, componentType, name) {
8
8
  var _a;
9
9
  components.set(location.absolutePointer, {
@@ -24,14 +24,14 @@ const RemoveUnusedComponents = () => {
24
24
  name: key.toString(),
25
25
  });
26
26
  }
27
- }
27
+ },
28
28
  },
29
- DefinitionRoot: {
29
+ Root: {
30
30
  leave(root, ctx) {
31
31
  const data = ctx.getVisitorData();
32
32
  data.removedCount = 0;
33
- let rootComponents = new Set();
34
- components.forEach(usageInfo => {
33
+ const rootComponents = new Set();
34
+ components.forEach((usageInfo) => {
35
35
  const { used, name, componentType } = usageInfo;
36
36
  if (!used && componentType) {
37
37
  rootComponents.add(componentType);
@@ -67,7 +67,7 @@ const RemoveUnusedComponents = () => {
67
67
  SecurityScheme(_securityScheme, { location, key }) {
68
68
  registerComponent(location, 'securityDefinitions', key.toString());
69
69
  },
70
- }
70
+ },
71
71
  };
72
72
  };
73
73
  exports.RemoveUnusedComponents = RemoveUnusedComponents;
@@ -1,2 +1,2 @@
1
- import { Oas2Rule } from '../../visitors';
1
+ import type { Oas2Rule } from '../../visitors';
2
2
  export declare const RequestMimeType: Oas2Rule;
@@ -4,7 +4,7 @@ exports.RequestMimeType = void 0;
4
4
  const utils_1 = require("../../utils");
5
5
  const RequestMimeType = ({ allowedValues }) => {
6
6
  return {
7
- DefinitionRoot(root, ctx) {
7
+ Root(root, ctx) {
8
8
  utils_1.validateMimeType({ type: 'consumes', value: root }, ctx, allowedValues);
9
9
  },
10
10
  Operation: {
@@ -0,0 +1,2 @@
1
+ import { Oas2Rule } from '../../visitors';
2
+ export declare const ResponseContainsProperty: Oas2Rule;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseContainsProperty = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const ResponseContainsProperty = (options) => {
6
+ const names = options.names || {};
7
+ let key;
8
+ return {
9
+ Operation: {
10
+ Response: {
11
+ skip: (_response, key) => {
12
+ return `${key}` === '204';
13
+ },
14
+ enter: (_response, ctx) => {
15
+ key = ctx.key;
16
+ },
17
+ Schema(schema, { report, location }) {
18
+ var _a;
19
+ if (schema.type !== 'object')
20
+ return;
21
+ const expectedProperties = names[key] ||
22
+ names[utils_1.getMatchingStatusCodeRange(key)] ||
23
+ names[utils_1.getMatchingStatusCodeRange(key).toLowerCase()] ||
24
+ [];
25
+ for (const expectedProperty of expectedProperties) {
26
+ if (!((_a = schema.properties) === null || _a === void 0 ? void 0 : _a[expectedProperty])) {
27
+ report({
28
+ message: `Response object must contain a top-level "${expectedProperty}" property.`,
29
+ location: location.child('properties').key(),
30
+ });
31
+ }
32
+ }
33
+ },
34
+ },
35
+ },
36
+ };
37
+ };
38
+ exports.ResponseContainsProperty = ResponseContainsProperty;
@@ -1,2 +1,2 @@
1
- import { Oas2Rule } from '../../visitors';
1
+ import type { Oas2Rule } from '../../visitors';
2
2
  export declare const ResponseMimeType: Oas2Rule;
@@ -4,7 +4,7 @@ exports.ResponseMimeType = void 0;
4
4
  const utils_1 = require("../../utils");
5
5
  const ResponseMimeType = ({ allowedValues }) => {
6
6
  return {
7
- DefinitionRoot(root, ctx) {
7
+ Root(root, ctx) {
8
8
  utils_1.validateMimeType({ type: 'produces', value: root }, ctx, allowedValues);
9
9
  },
10
10
  Operation: {