@redocly/openapi-core 0.0.0-snapshot.1737554067

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 (322) hide show
  1. package/README.md +268 -0
  2. package/lib/benchmark/benches/lint-with-many-rules.bench.d.ts +4 -0
  3. package/lib/benchmark/benches/lint-with-many-rules.bench.js +38 -0
  4. package/lib/benchmark/benches/lint-with-nested-rule.bench.d.ts +4 -0
  5. package/lib/benchmark/benches/lint-with-nested-rule.bench.js +44 -0
  6. package/lib/benchmark/benches/lint-with-no-rules.bench.d.ts +4 -0
  7. package/lib/benchmark/benches/lint-with-no-rules.bench.js +25 -0
  8. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.d.ts +4 -0
  9. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +37 -0
  10. package/lib/benchmark/benches/lint-with-top-level-rule.bench.d.ts +4 -0
  11. package/lib/benchmark/benches/lint-with-top-level-rule.bench.js +36 -0
  12. package/lib/benchmark/benches/recommended-oas3.bench.d.ts +3 -0
  13. package/lib/benchmark/benches/recommended-oas3.bench.js +21 -0
  14. package/lib/benchmark/benches/resolve-with-no-external.bench.d.ts +3 -0
  15. package/lib/benchmark/benches/resolve-with-no-external.bench.js +22 -0
  16. package/lib/benchmark/utils.d.ts +6 -0
  17. package/lib/benchmark/utils.js +34 -0
  18. package/lib/bundle.d.ts +50 -0
  19. package/lib/bundle.js +385 -0
  20. package/lib/config/all.d.ts +3 -0
  21. package/lib/config/all.js +227 -0
  22. package/lib/config/builtIn.d.ts +3 -0
  23. package/lib/config/builtIn.js +53 -0
  24. package/lib/config/config-resolvers.d.ts +30 -0
  25. package/lib/config/config-resolvers.js +447 -0
  26. package/lib/config/config.d.ts +53 -0
  27. package/lib/config/config.js +320 -0
  28. package/lib/config/index.d.ts +7 -0
  29. package/lib/config/index.js +23 -0
  30. package/lib/config/load.d.ts +38 -0
  31. package/lib/config/load.js +140 -0
  32. package/lib/config/minimal.d.ts +3 -0
  33. package/lib/config/minimal.js +203 -0
  34. package/lib/config/recommended-strict.d.ts +3 -0
  35. package/lib/config/recommended-strict.js +203 -0
  36. package/lib/config/recommended.d.ts +3 -0
  37. package/lib/config/recommended.js +203 -0
  38. package/lib/config/rules.d.ts +10 -0
  39. package/lib/config/rules.js +37 -0
  40. package/lib/config/spec.d.ts +3 -0
  41. package/lib/config/spec.js +29 -0
  42. package/lib/config/types.d.ts +189 -0
  43. package/lib/config/types.js +2 -0
  44. package/lib/config/utils.d.ts +19 -0
  45. package/lib/config/utils.js +308 -0
  46. package/lib/decorators/arazzo/index.d.ts +1 -0
  47. package/lib/decorators/arazzo/index.js +4 -0
  48. package/lib/decorators/async2/index.d.ts +1 -0
  49. package/lib/decorators/async2/index.js +4 -0
  50. package/lib/decorators/async3/index.d.ts +1 -0
  51. package/lib/decorators/async3/index.js +4 -0
  52. package/lib/decorators/common/filters/filter-helper.d.ts +3 -0
  53. package/lib/decorators/common/filters/filter-helper.js +66 -0
  54. package/lib/decorators/common/filters/filter-in.d.ts +2 -0
  55. package/lib/decorators/common/filters/filter-in.js +17 -0
  56. package/lib/decorators/common/filters/filter-out.d.ts +2 -0
  57. package/lib/decorators/common/filters/filter-out.js +17 -0
  58. package/lib/decorators/common/info-description-override.d.ts +2 -0
  59. package/lib/decorators/common/info-description-override.js +24 -0
  60. package/lib/decorators/common/info-override.d.ts +2 -0
  61. package/lib/decorators/common/info-override.js +17 -0
  62. package/lib/decorators/common/media-type-examples-override.d.ts +2 -0
  63. package/lib/decorators/common/media-type-examples-override.js +59 -0
  64. package/lib/decorators/common/operation-description-override.d.ts +2 -0
  65. package/lib/decorators/common/operation-description-override.js +29 -0
  66. package/lib/decorators/common/registry-dependencies.d.ts +2 -0
  67. package/lib/decorators/common/registry-dependencies.js +24 -0
  68. package/lib/decorators/common/remove-x-internal.d.ts +2 -0
  69. package/lib/decorators/common/remove-x-internal.js +69 -0
  70. package/lib/decorators/common/tag-description-override.d.ts +2 -0
  71. package/lib/decorators/common/tag-description-override.js +25 -0
  72. package/lib/decorators/oas2/index.d.ts +11 -0
  73. package/lib/decorators/oas2/index.js +21 -0
  74. package/lib/decorators/oas2/remove-unused-components.d.ts +2 -0
  75. package/lib/decorators/oas2/remove-unused-components.js +89 -0
  76. package/lib/decorators/oas3/index.d.ts +12 -0
  77. package/lib/decorators/oas3/index.js +23 -0
  78. package/lib/decorators/oas3/remove-unused-components.d.ts +2 -0
  79. package/lib/decorators/oas3/remove-unused-components.js +100 -0
  80. package/lib/env.d.ts +2 -0
  81. package/lib/env.js +7 -0
  82. package/lib/format/codeframes.d.ts +22 -0
  83. package/lib/format/codeframes.js +185 -0
  84. package/lib/format/format.d.ts +20 -0
  85. package/lib/format/format.js +365 -0
  86. package/lib/index.d.ts +26 -0
  87. package/lib/index.js +98 -0
  88. package/lib/js-yaml/index.d.ts +3 -0
  89. package/lib/js-yaml/index.js +15 -0
  90. package/lib/lint.d.ts +32 -0
  91. package/lib/lint.js +118 -0
  92. package/lib/logger.d.ts +10 -0
  93. package/lib/logger.js +31 -0
  94. package/lib/oas-types.d.ts +36 -0
  95. package/lib/oas-types.js +92 -0
  96. package/lib/output.d.ts +3 -0
  97. package/lib/output.js +9 -0
  98. package/lib/redocly/domains.d.ts +14 -0
  99. package/lib/redocly/domains.js +41 -0
  100. package/lib/redocly/index.d.ts +30 -0
  101. package/lib/redocly/index.js +131 -0
  102. package/lib/redocly/redocly-client-types.d.ts +8 -0
  103. package/lib/redocly/redocly-client-types.js +2 -0
  104. package/lib/redocly/registry-api-types.d.ts +29 -0
  105. package/lib/redocly/registry-api-types.js +2 -0
  106. package/lib/redocly/registry-api.d.ts +17 -0
  107. package/lib/redocly/registry-api.js +96 -0
  108. package/lib/ref-utils.d.ts +27 -0
  109. package/lib/ref-utils.js +85 -0
  110. package/lib/resolve.d.ts +66 -0
  111. package/lib/resolve.js +342 -0
  112. package/lib/rules/ajv.d.ts +10 -0
  113. package/lib/rules/ajv.js +82 -0
  114. package/lib/rules/arazzo/criteria-unique.d.ts +2 -0
  115. package/lib/rules/arazzo/criteria-unique.js +71 -0
  116. package/lib/rules/arazzo/index.d.ts +3 -0
  117. package/lib/rules/arazzo/index.js +36 -0
  118. package/lib/rules/arazzo/parameters-unique.d.ts +2 -0
  119. package/lib/rules/arazzo/parameters-unique.js +32 -0
  120. package/lib/rules/arazzo/requestBody-replacements-unique.d.ts +2 -0
  121. package/lib/rules/arazzo/requestBody-replacements-unique.js +28 -0
  122. package/lib/rules/arazzo/sourceDescription-type.d.ts +2 -0
  123. package/lib/rules/arazzo/sourceDescription-type.js +22 -0
  124. package/lib/rules/arazzo/sourceDescriptions-name-unique.d.ts +2 -0
  125. package/lib/rules/arazzo/sourceDescriptions-name-unique.js +24 -0
  126. package/lib/rules/arazzo/sourceDescriptions-not-empty.d.ts +2 -0
  127. package/lib/rules/arazzo/sourceDescriptions-not-empty.js +18 -0
  128. package/lib/rules/arazzo/step-onFailure-unique.d.ts +2 -0
  129. package/lib/rules/arazzo/step-onFailure-unique.js +32 -0
  130. package/lib/rules/arazzo/step-onSuccess-unique.d.ts +2 -0
  131. package/lib/rules/arazzo/step-onSuccess-unique.js +32 -0
  132. package/lib/rules/arazzo/stepId-unique.d.ts +2 -0
  133. package/lib/rules/arazzo/stepId-unique.js +26 -0
  134. package/lib/rules/arazzo/workflow-dependsOn.d.ts +2 -0
  135. package/lib/rules/arazzo/workflow-dependsOn.js +56 -0
  136. package/lib/rules/arazzo/workflowId-unique.d.ts +2 -0
  137. package/lib/rules/arazzo/workflowId-unique.js +22 -0
  138. package/lib/rules/async2/channels-kebab-case.d.ts +2 -0
  139. package/lib/rules/async2/channels-kebab-case.js +19 -0
  140. package/lib/rules/async2/index.d.ts +3 -0
  141. package/lib/rules/async2/index.js +27 -0
  142. package/lib/rules/async2/no-channel-trailing-slash.d.ts +2 -0
  143. package/lib/rules/async2/no-channel-trailing-slash.js +16 -0
  144. package/lib/rules/async3/channels-kebab-case.d.ts +2 -0
  145. package/lib/rules/async3/channels-kebab-case.js +19 -0
  146. package/lib/rules/async3/index.d.ts +3 -0
  147. package/lib/rules/async3/index.js +27 -0
  148. package/lib/rules/async3/no-channel-trailing-slash.d.ts +2 -0
  149. package/lib/rules/async3/no-channel-trailing-slash.js +16 -0
  150. package/lib/rules/common/assertions/asserts.d.ts +30 -0
  151. package/lib/rules/common/assertions/asserts.js +281 -0
  152. package/lib/rules/common/assertions/index.d.ts +27 -0
  153. package/lib/rules/common/assertions/index.js +24 -0
  154. package/lib/rules/common/assertions/utils.d.ts +28 -0
  155. package/lib/rules/common/assertions/utils.js +226 -0
  156. package/lib/rules/common/info-contact.d.ts +2 -0
  157. package/lib/rules/common/info-contact.js +17 -0
  158. package/lib/rules/common/info-license-strict.d.ts +2 -0
  159. package/lib/rules/common/info-license-strict.js +26 -0
  160. package/lib/rules/common/info-license-url.d.ts +2 -0
  161. package/lib/rules/common/info-license-url.js +12 -0
  162. package/lib/rules/common/info-license.d.ts +2 -0
  163. package/lib/rules/common/info-license.js +17 -0
  164. package/lib/rules/common/no-ambiguous-paths.d.ts +2 -0
  165. package/lib/rules/common/no-ambiguous-paths.js +45 -0
  166. package/lib/rules/common/no-enum-type-mismatch.d.ts +2 -0
  167. package/lib/rules/common/no-enum-type-mismatch.js +41 -0
  168. package/lib/rules/common/no-http-verbs-in-paths.d.ts +2 -0
  169. package/lib/rules/common/no-http-verbs-in-paths.js +33 -0
  170. package/lib/rules/common/no-identical-paths.d.ts +2 -0
  171. package/lib/rules/common/no-identical-paths.js +24 -0
  172. package/lib/rules/common/no-invalid-parameter-examples.d.ts +1 -0
  173. package/lib/rules/common/no-invalid-parameter-examples.js +24 -0
  174. package/lib/rules/common/no-invalid-schema-examples.d.ts +1 -0
  175. package/lib/rules/common/no-invalid-schema-examples.js +22 -0
  176. package/lib/rules/common/no-path-trailing-slash.d.ts +2 -0
  177. package/lib/rules/common/no-path-trailing-slash.js +16 -0
  178. package/lib/rules/common/no-required-schema-properties-undefined.d.ts +2 -0
  179. package/lib/rules/common/no-required-schema-properties-undefined.js +36 -0
  180. package/lib/rules/common/operation-2xx-response.d.ts +2 -0
  181. package/lib/rules/common/operation-2xx-response.js +23 -0
  182. package/lib/rules/common/operation-4xx-response.d.ts +2 -0
  183. package/lib/rules/common/operation-4xx-response.js +23 -0
  184. package/lib/rules/common/operation-description.d.ts +2 -0
  185. package/lib/rules/common/operation-description.js +12 -0
  186. package/lib/rules/common/operation-operationId-unique.d.ts +2 -0
  187. package/lib/rules/common/operation-operationId-unique.js +20 -0
  188. package/lib/rules/common/operation-operationId-url-safe.d.ts +2 -0
  189. package/lib/rules/common/operation-operationId-url-safe.js +18 -0
  190. package/lib/rules/common/operation-operationId.d.ts +2 -0
  191. package/lib/rules/common/operation-operationId.js +16 -0
  192. package/lib/rules/common/operation-parameters-unique.d.ts +2 -0
  193. package/lib/rules/common/operation-parameters-unique.js +40 -0
  194. package/lib/rules/common/operation-singular-tag.d.ts +2 -0
  195. package/lib/rules/common/operation-singular-tag.js +16 -0
  196. package/lib/rules/common/operation-summary.d.ts +2 -0
  197. package/lib/rules/common/operation-summary.js +12 -0
  198. package/lib/rules/common/operation-tag-defined.d.ts +2 -0
  199. package/lib/rules/common/operation-tag-defined.js +24 -0
  200. package/lib/rules/common/parameter-description.d.ts +2 -0
  201. package/lib/rules/common/parameter-description.js +22 -0
  202. package/lib/rules/common/path-declaration-must-exist.d.ts +2 -0
  203. package/lib/rules/common/path-declaration-must-exist.js +16 -0
  204. package/lib/rules/common/path-excludes-patterns.d.ts +2 -0
  205. package/lib/rules/common/path-excludes-patterns.js +22 -0
  206. package/lib/rules/common/path-http-verbs-order.d.ts +2 -0
  207. package/lib/rules/common/path-http-verbs-order.js +26 -0
  208. package/lib/rules/common/path-not-include-query.d.ts +2 -0
  209. package/lib/rules/common/path-not-include-query.js +18 -0
  210. package/lib/rules/common/path-params-defined.d.ts +2 -0
  211. package/lib/rules/common/path-params-defined.js +58 -0
  212. package/lib/rules/common/path-segment-plural.d.ts +2 -0
  213. package/lib/rules/common/path-segment-plural.js +33 -0
  214. package/lib/rules/common/paths-kebab-case.d.ts +2 -0
  215. package/lib/rules/common/paths-kebab-case.js +20 -0
  216. package/lib/rules/common/required-string-property-missing-min-length.d.ts +2 -0
  217. package/lib/rules/common/required-string-property-missing-min-length.js +37 -0
  218. package/lib/rules/common/response-contains-header.d.ts +2 -0
  219. package/lib/rules/common/response-contains-header.js +29 -0
  220. package/lib/rules/common/scalar-property-missing-example.d.ts +2 -0
  221. package/lib/rules/common/scalar-property-missing-example.js +42 -0
  222. package/lib/rules/common/security-defined.d.ts +2 -0
  223. package/lib/rules/common/security-defined.js +65 -0
  224. package/lib/rules/common/spec-strict-refs.d.ts +2 -0
  225. package/lib/rules/common/spec-strict-refs.js +30 -0
  226. package/lib/rules/common/struct.d.ts +2 -0
  227. package/lib/rules/common/struct.js +158 -0
  228. package/lib/rules/common/tag-description.d.ts +2 -0
  229. package/lib/rules/common/tag-description.js +12 -0
  230. package/lib/rules/common/tags-alphabetical.d.ts +2 -0
  231. package/lib/rules/common/tags-alphabetical.js +23 -0
  232. package/lib/rules/no-unresolved-refs.d.ts +5 -0
  233. package/lib/rules/no-unresolved-refs.js +46 -0
  234. package/lib/rules/oas2/boolean-parameter-prefixes.d.ts +5 -0
  235. package/lib/rules/oas2/boolean-parameter-prefixes.js +22 -0
  236. package/lib/rules/oas2/index.d.ts +3 -0
  237. package/lib/rules/oas2/index.js +98 -0
  238. package/lib/rules/oas2/request-mime-type.d.ts +2 -0
  239. package/lib/rules/oas2/request-mime-type.js +17 -0
  240. package/lib/rules/oas2/response-contains-property.d.ts +2 -0
  241. package/lib/rules/oas2/response-contains-property.js +37 -0
  242. package/lib/rules/oas2/response-mime-type.d.ts +2 -0
  243. package/lib/rules/oas2/response-mime-type.js +17 -0
  244. package/lib/rules/oas3/array-parameter-serialization.d.ts +5 -0
  245. package/lib/rules/oas3/array-parameter-serialization.js +29 -0
  246. package/lib/rules/oas3/boolean-parameter-prefixes.d.ts +5 -0
  247. package/lib/rules/oas3/boolean-parameter-prefixes.js +24 -0
  248. package/lib/rules/oas3/component-name-unique.d.ts +2 -0
  249. package/lib/rules/oas3/component-name-unique.js +133 -0
  250. package/lib/rules/oas3/index.d.ts +3 -0
  251. package/lib/rules/oas3/index.js +122 -0
  252. package/lib/rules/oas3/no-empty-servers.d.ts +2 -0
  253. package/lib/rules/oas3/no-empty-servers.js +23 -0
  254. package/lib/rules/oas3/no-example-value-and-externalValue.d.ts +2 -0
  255. package/lib/rules/oas3/no-example-value-and-externalValue.js +16 -0
  256. package/lib/rules/oas3/no-invalid-media-type-examples.d.ts +2 -0
  257. package/lib/rules/oas3/no-invalid-media-type-examples.js +39 -0
  258. package/lib/rules/oas3/no-server-example.com.d.ts +2 -0
  259. package/lib/rules/oas3/no-server-example.com.js +18 -0
  260. package/lib/rules/oas3/no-server-trailing-slash.d.ts +2 -0
  261. package/lib/rules/oas3/no-server-trailing-slash.js +18 -0
  262. package/lib/rules/oas3/no-server-variables-empty-enum.d.ts +2 -0
  263. package/lib/rules/oas3/no-server-variables-empty-enum.js +66 -0
  264. package/lib/rules/oas3/no-undefined-server-variable.d.ts +2 -0
  265. package/lib/rules/oas3/no-undefined-server-variable.js +31 -0
  266. package/lib/rules/oas3/no-unused-components.d.ts +2 -0
  267. package/lib/rules/oas3/no-unused-components.js +73 -0
  268. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.d.ts +5 -0
  269. package/lib/rules/oas3/operation-4xx-problem-details-rfc7807.js +36 -0
  270. package/lib/rules/oas3/request-mime-type.d.ts +2 -0
  271. package/lib/rules/oas3/request-mime-type.js +31 -0
  272. package/lib/rules/oas3/response-contains-property.d.ts +2 -0
  273. package/lib/rules/oas3/response-contains-property.js +39 -0
  274. package/lib/rules/oas3/response-mime-type.d.ts +2 -0
  275. package/lib/rules/oas3/response-mime-type.js +31 -0
  276. package/lib/rules/oas3/spec-components-invalid-map-name.d.ts +2 -0
  277. package/lib/rules/oas3/spec-components-invalid-map-name.js +62 -0
  278. package/lib/rules/other/stats.d.ts +41 -0
  279. package/lib/rules/other/stats.js +75 -0
  280. package/lib/rules/spot/no-criteria-xpath.d.ts +2 -0
  281. package/lib/rules/spot/no-criteria-xpath.js +21 -0
  282. package/lib/rules/spot/spot-supported-versions.d.ts +2 -0
  283. package/lib/rules/spot/spot-supported-versions.js +21 -0
  284. package/lib/rules/utils.d.ts +22 -0
  285. package/lib/rules/utils.js +183 -0
  286. package/lib/types/arazzo.d.ts +2 -0
  287. package/lib/types/arazzo.js +311 -0
  288. package/lib/types/asyncapi2.d.ts +17 -0
  289. package/lib/types/asyncapi2.js +1008 -0
  290. package/lib/types/asyncapi3.d.ts +2 -0
  291. package/lib/types/asyncapi3.js +347 -0
  292. package/lib/types/index.d.ts +57 -0
  293. package/lib/types/index.js +94 -0
  294. package/lib/types/json-schema-adapter.d.ts +3 -0
  295. package/lib/types/json-schema-adapter.js +159 -0
  296. package/lib/types/oas2.d.ts +3 -0
  297. package/lib/types/oas2.js +456 -0
  298. package/lib/types/oas3.d.ts +7 -0
  299. package/lib/types/oas3.js +554 -0
  300. package/lib/types/oas3_1.d.ts +6 -0
  301. package/lib/types/oas3_1.js +285 -0
  302. package/lib/types/redocly-yaml.d.ts +26 -0
  303. package/lib/types/redocly-yaml.js +1126 -0
  304. package/lib/typings/arazzo.d.ts +131 -0
  305. package/lib/typings/arazzo.js +5 -0
  306. package/lib/typings/asyncapi.d.ts +21 -0
  307. package/lib/typings/asyncapi.js +2 -0
  308. package/lib/typings/asyncapi3.d.ts +53 -0
  309. package/lib/typings/asyncapi3.js +2 -0
  310. package/lib/typings/common.d.ts +8 -0
  311. package/lib/typings/common.js +2 -0
  312. package/lib/typings/openapi.d.ts +355 -0
  313. package/lib/typings/openapi.js +2 -0
  314. package/lib/typings/swagger.d.ts +217 -0
  315. package/lib/typings/swagger.js +2 -0
  316. package/lib/utils.d.ts +70 -0
  317. package/lib/utils.js +301 -0
  318. package/lib/visitors.d.ts +229 -0
  319. package/lib/visitors.js +176 -0
  320. package/lib/walk.d.ts +78 -0
  321. package/lib/walk.js +290 -0
  322. package/package.json +59 -0
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const NoAmbiguousPaths: Oas3Rule | Oas2Rule;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoAmbiguousPaths = void 0;
4
+ const NoAmbiguousPaths = () => {
5
+ return {
6
+ Paths(pathMap, { report, location }) {
7
+ const seenPaths = [];
8
+ for (const currentPath of Object.keys(pathMap)) {
9
+ const ambiguousPath = seenPaths.find((seenPath) => arePathsAmbiguous(seenPath, currentPath));
10
+ if (ambiguousPath) {
11
+ report({
12
+ message: `Paths should resolve unambiguously. Found two ambiguous paths: \`${ambiguousPath}\` and \`${currentPath}\`.`,
13
+ location: location.child([currentPath]).key(),
14
+ });
15
+ }
16
+ seenPaths.push(currentPath);
17
+ }
18
+ },
19
+ };
20
+ };
21
+ exports.NoAmbiguousPaths = NoAmbiguousPaths;
22
+ function arePathsAmbiguous(a, b) {
23
+ const partsA = a.split('/');
24
+ const partsB = b.split('/');
25
+ if (partsA.length !== partsB.length)
26
+ return false;
27
+ let aVars = 0;
28
+ let bVars = 0;
29
+ let ambiguous = true;
30
+ for (let i = 0; i < partsA.length; i++) {
31
+ const aIsVar = partsA[i].match(/^{.+?}$/);
32
+ const bIsVar = partsB[i].match(/^{.+?}$/);
33
+ if (aIsVar || bIsVar) {
34
+ if (aIsVar)
35
+ aVars++;
36
+ if (bIsVar)
37
+ bVars++;
38
+ continue;
39
+ }
40
+ else if (partsA[i] !== partsB[i]) {
41
+ ambiguous = false;
42
+ }
43
+ }
44
+ return ambiguous && aVars === bVars;
45
+ }
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const NoEnumTypeMismatch: Oas3Rule | Oas2Rule;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoEnumTypeMismatch = void 0;
4
+ const utils_1 = require("../utils");
5
+ const NoEnumTypeMismatch = () => {
6
+ return {
7
+ Schema(schema, { report, location }) {
8
+ if (schema.enum && !Array.isArray(schema.enum))
9
+ return;
10
+ if (schema.enum && schema.type && !Array.isArray(schema.type)) {
11
+ const typeMismatchedValues = schema.enum.filter((item) => !(0, utils_1.matchesJsonSchemaType)(item, schema.type, schema.nullable));
12
+ for (const mismatchedValue of typeMismatchedValues) {
13
+ report({
14
+ message: `All values of \`enum\` field must be of the same type as the \`type\` field: expected "${schema.type}" but received "${(0, utils_1.oasTypeOf)(mismatchedValue)}".`,
15
+ location: location.child(['enum', schema.enum.indexOf(mismatchedValue)]),
16
+ });
17
+ }
18
+ }
19
+ if (schema.enum && schema.type && Array.isArray(schema.type)) {
20
+ const mismatchedResults = {};
21
+ for (const enumValue of schema.enum) {
22
+ mismatchedResults[enumValue] = [];
23
+ for (const type of schema.type) {
24
+ const valid = (0, utils_1.matchesJsonSchemaType)(enumValue, type, schema.nullable);
25
+ if (!valid)
26
+ mismatchedResults[enumValue].push(type);
27
+ }
28
+ if (mismatchedResults[enumValue].length !== schema.type.length)
29
+ delete mismatchedResults[enumValue];
30
+ }
31
+ for (const mismatchedKey of Object.keys(mismatchedResults)) {
32
+ report({
33
+ message: `Enum value \`${mismatchedKey}\` must be of allowed types: \`${schema.type}\`.`,
34
+ location: location.child(['enum', schema.enum.indexOf(mismatchedKey)]),
35
+ });
36
+ }
37
+ }
38
+ },
39
+ };
40
+ };
41
+ exports.NoEnumTypeMismatch = NoEnumTypeMismatch;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const NoHttpVerbsInPaths: Oas3Rule | Oas2Rule;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoHttpVerbsInPaths = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const httpMethods = ['get', 'head', 'post', 'put', 'patch', 'delete', 'options', 'trace'];
6
+ const NoHttpVerbsInPaths = ({ splitIntoWords }) => {
7
+ return {
8
+ PathItem(_path, { key, report, location }) {
9
+ const pathKey = key.toString();
10
+ if (!pathKey.startsWith('/'))
11
+ return;
12
+ const pathSegments = pathKey.split('/');
13
+ for (const pathSegment of pathSegments) {
14
+ if (!pathSegment || (0, utils_1.isPathParameter)(pathSegment))
15
+ continue;
16
+ const isHttpMethodIncluded = (method) => {
17
+ return splitIntoWords
18
+ ? (0, utils_1.splitCamelCaseIntoWords)(pathSegment).has(method)
19
+ : pathSegment.toLocaleLowerCase().includes(method);
20
+ };
21
+ for (const method of httpMethods) {
22
+ if (isHttpMethodIncluded(method)) {
23
+ report({
24
+ message: `path \`${pathKey}\` should not contain http verb ${method}`,
25
+ location: location.key(),
26
+ });
27
+ }
28
+ }
29
+ }
30
+ },
31
+ };
32
+ };
33
+ exports.NoHttpVerbsInPaths = NoHttpVerbsInPaths;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const NoIdenticalPaths: Oas3Rule | Oas2Rule;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoIdenticalPaths = void 0;
4
+ const NoIdenticalPaths = () => {
5
+ return {
6
+ Paths(pathMap, { report, location }) {
7
+ const Paths = new Map();
8
+ for (const pathName of Object.keys(pathMap)) {
9
+ const id = pathName.replace(/{.+?}/g, '{VARIABLE}');
10
+ const existingSamePath = Paths.get(id);
11
+ if (existingSamePath) {
12
+ report({
13
+ message: `The path already exists which differs only by path parameter name(s): \`${existingSamePath}\` and \`${pathName}\`.`,
14
+ location: location.child([pathName]).key(),
15
+ });
16
+ }
17
+ else {
18
+ Paths.set(id, pathName);
19
+ }
20
+ }
21
+ },
22
+ };
23
+ };
24
+ exports.NoIdenticalPaths = NoIdenticalPaths;
@@ -0,0 +1 @@
1
+ export declare const NoInvalidParameterExamples: any;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoInvalidParameterExamples = void 0;
4
+ const utils_1 = require("../utils");
5
+ const NoInvalidParameterExamples = (opts) => {
6
+ const allowAdditionalProperties = (0, utils_1.getAdditionalPropertiesOption)(opts) ?? false;
7
+ return {
8
+ Parameter: {
9
+ leave(parameter, ctx) {
10
+ if (parameter.example !== undefined) {
11
+ (0, utils_1.validateExample)(parameter.example, parameter.schema, ctx.location.child('example'), ctx, allowAdditionalProperties);
12
+ }
13
+ if (parameter.examples) {
14
+ for (const [key, example] of Object.entries(parameter.examples)) {
15
+ if ('value' in example) {
16
+ (0, utils_1.validateExample)(example.value, parameter.schema, ctx.location.child(['examples', key]), ctx, true);
17
+ }
18
+ }
19
+ }
20
+ },
21
+ },
22
+ };
23
+ };
24
+ exports.NoInvalidParameterExamples = NoInvalidParameterExamples;
@@ -0,0 +1 @@
1
+ export declare const NoInvalidSchemaExamples: any;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoInvalidSchemaExamples = void 0;
4
+ const utils_1 = require("../utils");
5
+ const NoInvalidSchemaExamples = (opts) => {
6
+ const allowAdditionalProperties = (0, utils_1.getAdditionalPropertiesOption)(opts) ?? false;
7
+ return {
8
+ Schema: {
9
+ leave(schema, ctx) {
10
+ if (schema.examples) {
11
+ for (const example of schema.examples) {
12
+ (0, utils_1.validateExample)(example, schema, ctx.location.child(['examples', schema.examples.indexOf(example)]), ctx, allowAdditionalProperties);
13
+ }
14
+ }
15
+ if (schema.example !== undefined) {
16
+ (0, utils_1.validateExample)(schema.example, schema, ctx.location.child('example'), ctx, true);
17
+ }
18
+ },
19
+ },
20
+ };
21
+ };
22
+ exports.NoInvalidSchemaExamples = NoInvalidSchemaExamples;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const NoPathTrailingSlash: Oas3Rule | Oas2Rule;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoPathTrailingSlash = void 0;
4
+ const NoPathTrailingSlash = () => {
5
+ return {
6
+ PathItem(_path, { report, key, rawLocation }) {
7
+ if (key.endsWith('/') && key !== '/') {
8
+ report({
9
+ message: `\`${key}\` should not have a trailing slash.`,
10
+ location: rawLocation.key(),
11
+ });
12
+ }
13
+ },
14
+ };
15
+ };
16
+ exports.NoPathTrailingSlash = NoPathTrailingSlash;
@@ -0,0 +1,2 @@
1
+ import type { Oas2Rule, Oas3Rule } from '../../visitors';
2
+ export declare const NoRequiredSchemaPropertiesUndefined: Oas3Rule | Oas2Rule;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoRequiredSchemaPropertiesUndefined = void 0;
4
+ const ref_utils_1 = require("../../ref-utils");
5
+ const NoRequiredSchemaPropertiesUndefined = () => {
6
+ return {
7
+ Schema: {
8
+ enter(schema, { location, report, resolve }) {
9
+ if (!schema.required)
10
+ return;
11
+ const visitedSchemas = new Set();
12
+ const elevateProperties = (schema) => {
13
+ // Check if the schema has been visited before processing it
14
+ if (visitedSchemas.has(schema)) {
15
+ return {};
16
+ }
17
+ visitedSchemas.add(schema);
18
+ if ((0, ref_utils_1.isRef)(schema)) {
19
+ return elevateProperties(resolve(schema).node);
20
+ }
21
+ return Object.assign({}, schema.properties, ...(schema.allOf?.map(elevateProperties) ?? []), ...(schema.anyOf?.map(elevateProperties) ?? []));
22
+ };
23
+ const allProperties = elevateProperties(schema);
24
+ for (const [i, requiredProperty] of schema.required.entries()) {
25
+ if (!allProperties || allProperties[requiredProperty] === undefined) {
26
+ report({
27
+ message: `Required property '${requiredProperty}' is undefined.`,
28
+ location: location.child(['required', i]),
29
+ });
30
+ }
31
+ }
32
+ },
33
+ },
34
+ };
35
+ };
36
+ exports.NoRequiredSchemaPropertiesUndefined = NoRequiredSchemaPropertiesUndefined;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const Operation2xxResponse: Oas3Rule | Oas2Rule;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Operation2xxResponse = void 0;
4
+ const utils_1 = require("../utils");
5
+ const Operation2xxResponse = ({ validateWebhooks }) => {
6
+ return {
7
+ Paths: {
8
+ Responses(responses, { report }) {
9
+ const codes = Object.keys(responses || {});
10
+ (0, utils_1.validateResponseCodes)(codes, '2XX', { report });
11
+ },
12
+ },
13
+ WebhooksMap: {
14
+ Responses(responses, { report }) {
15
+ if (!validateWebhooks)
16
+ return;
17
+ const codes = Object.keys(responses || {});
18
+ (0, utils_1.validateResponseCodes)(codes, '2XX', { report });
19
+ },
20
+ },
21
+ };
22
+ };
23
+ exports.Operation2xxResponse = Operation2xxResponse;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const Operation4xxResponse: Oas3Rule | Oas2Rule;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Operation4xxResponse = void 0;
4
+ const utils_1 = require("../utils");
5
+ const Operation4xxResponse = ({ validateWebhooks }) => {
6
+ return {
7
+ Paths: {
8
+ Responses(responses, { report }) {
9
+ const codes = Object.keys(responses || {});
10
+ (0, utils_1.validateResponseCodes)(codes, '4XX', { report });
11
+ },
12
+ },
13
+ WebhooksMap: {
14
+ Responses(responses, { report }) {
15
+ if (!validateWebhooks)
16
+ return;
17
+ const codes = Object.keys(responses || {});
18
+ (0, utils_1.validateResponseCodes)(codes, '4XX', { report });
19
+ },
20
+ },
21
+ };
22
+ };
23
+ exports.Operation4xxResponse = Operation4xxResponse;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const OperationDescription: Oas3Rule | Oas2Rule;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationDescription = void 0;
4
+ const utils_1 = require("../utils");
5
+ const OperationDescription = () => {
6
+ return {
7
+ Operation(operation, ctx) {
8
+ (0, utils_1.validateDefinedAndNonEmpty)('description', operation, ctx);
9
+ },
10
+ };
11
+ };
12
+ exports.OperationDescription = OperationDescription;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const OperationIdUnique: Oas3Rule | Oas2Rule;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationIdUnique = void 0;
4
+ const OperationIdUnique = () => {
5
+ const seenOperations = new Set();
6
+ return {
7
+ Operation(operation, { report, location }) {
8
+ if (!operation.operationId)
9
+ return;
10
+ if (seenOperations.has(operation.operationId)) {
11
+ report({
12
+ message: 'Every operation must have a unique `operationId`.',
13
+ location: location.child([operation.operationId]),
14
+ });
15
+ }
16
+ seenOperations.add(operation.operationId);
17
+ },
18
+ };
19
+ };
20
+ exports.OperationIdUnique = OperationIdUnique;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const OperationIdUrlSafe: Oas3Rule | Oas2Rule;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationIdUrlSafe = void 0;
4
+ // eslint-disable-next-line no-useless-escape
5
+ const validUrlSymbols = /^[A-Za-z0-9-._~:/?#\[\]@!\$&'()*+,;=]*$/;
6
+ const OperationIdUrlSafe = () => {
7
+ return {
8
+ Operation(operation, { report, location }) {
9
+ if (operation.operationId && !validUrlSymbols.test(operation.operationId)) {
10
+ report({
11
+ message: 'Operation `operationId` should not have URL invalid characters.',
12
+ location: location.child(['operationId']),
13
+ });
14
+ }
15
+ },
16
+ };
17
+ };
18
+ exports.OperationIdUrlSafe = OperationIdUrlSafe;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const OperationOperationId: Oas3Rule | Oas2Rule;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationOperationId = void 0;
4
+ const utils_1 = require("../utils");
5
+ const OperationOperationId = () => {
6
+ return {
7
+ Root: {
8
+ PathItem: {
9
+ Operation(operation, ctx) {
10
+ (0, utils_1.validateDefinedAndNonEmpty)('operationId', operation, ctx);
11
+ },
12
+ },
13
+ },
14
+ };
15
+ };
16
+ exports.OperationOperationId = OperationOperationId;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const OperationParametersUnique: Oas3Rule | Oas2Rule;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationParametersUnique = void 0;
4
+ const OperationParametersUnique = () => {
5
+ let seenPathParams;
6
+ let seenOperationParams;
7
+ return {
8
+ PathItem: {
9
+ enter() {
10
+ seenPathParams = new Set();
11
+ },
12
+ Parameter(parameter, { report, key, parentLocations }) {
13
+ const paramId = `${parameter.in}___${parameter.name}`;
14
+ if (seenPathParams.has(paramId)) {
15
+ report({
16
+ message: `Paths must have unique \`name\` + \`in\` parameters.\nRepeats of \`in:${parameter.in}\` + \`name:${parameter.name}\`.`,
17
+ location: parentLocations.PathItem.child(['parameters', key]),
18
+ });
19
+ }
20
+ seenPathParams.add(`${parameter.in}___${parameter.name}`);
21
+ },
22
+ Operation: {
23
+ enter() {
24
+ seenOperationParams = new Set();
25
+ },
26
+ Parameter(parameter, { report, key, parentLocations }) {
27
+ const paramId = `${parameter.in}___${parameter.name}`;
28
+ if (seenOperationParams.has(paramId)) {
29
+ report({
30
+ message: `Operations must have unique \`name\` + \`in\` parameters. Repeats of \`in:${parameter.in}\` + \`name:${parameter.name}\`.`,
31
+ location: parentLocations.Operation.child(['parameters', key]),
32
+ });
33
+ }
34
+ seenOperationParams.add(paramId);
35
+ },
36
+ },
37
+ },
38
+ };
39
+ };
40
+ exports.OperationParametersUnique = OperationParametersUnique;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const OperationSingularTag: Oas3Rule | Oas2Rule;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationSingularTag = void 0;
4
+ const OperationSingularTag = () => {
5
+ return {
6
+ Operation(operation, { report, location }) {
7
+ if (operation.tags && operation.tags.length > 1) {
8
+ report({
9
+ message: 'Operation `tags` object should have only one tag.',
10
+ location: location.child(['tags']).key(),
11
+ });
12
+ }
13
+ },
14
+ };
15
+ };
16
+ exports.OperationSingularTag = OperationSingularTag;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const OperationSummary: Oas3Rule | Oas2Rule;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationSummary = void 0;
4
+ const utils_1 = require("../utils");
5
+ const OperationSummary = () => {
6
+ return {
7
+ Operation(operation, ctx) {
8
+ (0, utils_1.validateDefinedAndNonEmpty)('summary', operation, ctx);
9
+ },
10
+ };
11
+ };
12
+ exports.OperationSummary = OperationSummary;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const OperationTagDefined: Oas3Rule | Oas2Rule;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OperationTagDefined = void 0;
4
+ const OperationTagDefined = () => {
5
+ let definedTags;
6
+ return {
7
+ Root(root) {
8
+ definedTags = new Set((root.tags ?? []).map((t) => t.name));
9
+ },
10
+ Operation(operation, { report, location }) {
11
+ if (operation.tags) {
12
+ for (let i = 0; i < operation.tags.length; i++) {
13
+ if (!definedTags.has(operation.tags[i])) {
14
+ report({
15
+ message: `Operation tags should be defined in global tags.`,
16
+ location: location.child(['tags', i]),
17
+ });
18
+ }
19
+ }
20
+ }
21
+ },
22
+ };
23
+ };
24
+ exports.OperationTagDefined = OperationTagDefined;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const ParameterDescription: Oas3Rule | Oas2Rule;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ParameterDescription = void 0;
4
+ const ParameterDescription = () => {
5
+ return {
6
+ Parameter(parameter, { report, location }) {
7
+ if (parameter.description === undefined) {
8
+ report({
9
+ message: 'Parameter object description must be present.',
10
+ location: { reportOnKey: true },
11
+ });
12
+ }
13
+ else if (!parameter.description) {
14
+ report({
15
+ message: 'Parameter object description must be non-empty string.',
16
+ location: location.child(['description']),
17
+ });
18
+ }
19
+ },
20
+ };
21
+ };
22
+ exports.ParameterDescription = ParameterDescription;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const PathDeclarationMustExist: Oas3Rule | Oas2Rule;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PathDeclarationMustExist = void 0;
4
+ const PathDeclarationMustExist = () => {
5
+ return {
6
+ PathItem(_path, { report, key }) {
7
+ if (key.indexOf('{}') !== -1) {
8
+ report({
9
+ message: 'Path parameter declarations must be non-empty. `{}` is invalid.',
10
+ location: { reportOnKey: true },
11
+ });
12
+ }
13
+ },
14
+ };
15
+ };
16
+ exports.PathDeclarationMustExist = PathDeclarationMustExist;
@@ -0,0 +1,2 @@
1
+ import type { Oas2Rule, Oas3Rule } from '../../visitors';
2
+ export declare const PathExcludesPatterns: Oas3Rule | Oas2Rule;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PathExcludesPatterns = void 0;
4
+ const PathExcludesPatterns = ({ patterns }) => {
5
+ return {
6
+ PathItem(_path, { report, key, location }) {
7
+ if (!patterns)
8
+ throw new Error(`Parameter "patterns" is not provided for "path-excludes-patterns" rule`);
9
+ const pathKey = key.toString();
10
+ if (pathKey.startsWith('/')) {
11
+ const matches = patterns.filter((pattern) => pathKey.match(pattern));
12
+ for (const match of matches) {
13
+ report({
14
+ message: `path \`${pathKey}\` should not match regex pattern: \`${match}\``,
15
+ location: location.key(),
16
+ });
17
+ }
18
+ }
19
+ },
20
+ };
21
+ };
22
+ exports.PathExcludesPatterns = PathExcludesPatterns;
@@ -0,0 +1,2 @@
1
+ import type { Oas3Rule, Oas2Rule } from '../../visitors';
2
+ export declare const PathHttpVerbsOrder: Oas3Rule | Oas2Rule;