@redocly/openapi-core 1.0.0-beta.100

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 (459) hide show
  1. package/README.md +25 -0
  2. package/__tests__/utils.ts +86 -0
  3. package/lib/benchmark/benches/lint-with-many-rules.bench.d.ts +3 -0
  4. package/lib/benchmark/benches/lint-with-many-rules.bench.js +34 -0
  5. package/lib/benchmark/benches/lint-with-nested-rule.bench.d.ts +3 -0
  6. package/lib/benchmark/benches/lint-with-nested-rule.bench.js +40 -0
  7. package/lib/benchmark/benches/lint-with-no-rules.bench.d.ts +3 -0
  8. package/lib/benchmark/benches/lint-with-no-rules.bench.js +21 -0
  9. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.d.ts +3 -0
  10. package/lib/benchmark/benches/lint-with-top-level-rule-report.bench.js +34 -0
  11. package/lib/benchmark/benches/lint-with-top-level-rule.bench.d.ts +3 -0
  12. package/lib/benchmark/benches/lint-with-top-level-rule.bench.js +32 -0
  13. package/lib/benchmark/benches/recommended-oas3.bench.d.ts +3 -0
  14. package/lib/benchmark/benches/recommended-oas3.bench.js +21 -0
  15. package/lib/benchmark/benches/resolve-with-no-external.bench.d.ts +3 -0
  16. package/lib/benchmark/benches/resolve-with-no-external.bench.js +22 -0
  17. package/lib/benchmark/utils.d.ts +6 -0
  18. package/lib/benchmark/utils.js +31 -0
  19. package/lib/bundle.d.ts +47 -0
  20. package/lib/bundle.js +291 -0
  21. package/lib/config/all.d.ts +3 -0
  22. package/lib/config/all.js +65 -0
  23. package/lib/config/builtIn.d.ts +3 -0
  24. package/lib/config/builtIn.js +36 -0
  25. package/lib/config/config-resolvers.d.ts +16 -0
  26. package/lib/config/config-resolvers.js +242 -0
  27. package/lib/config/config.d.ts +64 -0
  28. package/lib/config/config.js +244 -0
  29. package/lib/config/index.d.ts +7 -0
  30. package/lib/config/index.js +19 -0
  31. package/lib/config/load.d.ts +6 -0
  32. package/lib/config/load.js +93 -0
  33. package/lib/config/minimal.d.ts +3 -0
  34. package/lib/config/minimal.js +58 -0
  35. package/lib/config/recommended.d.ts +3 -0
  36. package/lib/config/recommended.js +58 -0
  37. package/lib/config/rules.d.ts +7 -0
  38. package/lib/config/rules.js +34 -0
  39. package/lib/config/types.d.ts +113 -0
  40. package/lib/config/types.js +2 -0
  41. package/lib/config/utils.d.ts +13 -0
  42. package/lib/config/utils.js +160 -0
  43. package/lib/decorators/common/info-description-override.d.ts +2 -0
  44. package/lib/decorators/common/info-description-override.js +24 -0
  45. package/lib/decorators/common/operation-description-override.d.ts +2 -0
  46. package/lib/decorators/common/operation-description-override.js +29 -0
  47. package/lib/decorators/common/registry-dependencies.d.ts +2 -0
  48. package/lib/decorators/common/registry-dependencies.js +24 -0
  49. package/lib/decorators/common/remove-x-internal.d.ts +2 -0
  50. package/lib/decorators/common/remove-x-internal.js +58 -0
  51. package/lib/decorators/common/tag-description-override.d.ts +2 -0
  52. package/lib/decorators/common/tag-description-override.js +25 -0
  53. package/lib/decorators/oas2/index.d.ts +8 -0
  54. package/lib/decorators/oas2/index.js +15 -0
  55. package/lib/decorators/oas3/index.d.ts +8 -0
  56. package/lib/decorators/oas3/index.js +15 -0
  57. package/lib/format/codeframes.d.ts +22 -0
  58. package/lib/format/codeframes.js +177 -0
  59. package/lib/format/format.d.ts +20 -0
  60. package/lib/format/format.js +236 -0
  61. package/lib/index.d.ts +22 -0
  62. package/lib/index.js +69 -0
  63. package/lib/js-yaml/index.d.ts +3 -0
  64. package/lib/js-yaml/index.js +19 -0
  65. package/lib/lint.d.ts +23 -0
  66. package/lib/lint.js +99 -0
  67. package/lib/oas-types.d.ts +19 -0
  68. package/lib/oas-types.js +45 -0
  69. package/lib/redocly/index.d.ts +30 -0
  70. package/lib/redocly/index.js +153 -0
  71. package/lib/redocly/redocly-client-types.d.ts +8 -0
  72. package/lib/redocly/redocly-client-types.js +2 -0
  73. package/lib/redocly/registry-api-types.d.ts +29 -0
  74. package/lib/redocly/registry-api-types.js +2 -0
  75. package/lib/redocly/registry-api.d.ts +17 -0
  76. package/lib/redocly/registry-api.js +106 -0
  77. package/lib/ref-utils.d.ts +25 -0
  78. package/lib/ref-utils.js +75 -0
  79. package/lib/resolve.d.ts +66 -0
  80. package/lib/resolve.js +311 -0
  81. package/lib/rules/ajv.d.ts +10 -0
  82. package/lib/rules/ajv.js +80 -0
  83. package/lib/rules/common/assertions/asserts.d.ts +5 -0
  84. package/lib/rules/common/assertions/asserts.js +143 -0
  85. package/lib/rules/common/assertions/index.d.ts +2 -0
  86. package/lib/rules/common/assertions/index.js +52 -0
  87. package/lib/rules/common/assertions/utils.d.ts +20 -0
  88. package/lib/rules/common/assertions/utils.js +127 -0
  89. package/lib/rules/common/info-contact.d.ts +2 -0
  90. package/lib/rules/common/info-contact.js +17 -0
  91. package/lib/rules/common/info-description.d.ts +2 -0
  92. package/lib/rules/common/info-description.js +12 -0
  93. package/lib/rules/common/info-license-url.d.ts +2 -0
  94. package/lib/rules/common/info-license-url.js +17 -0
  95. package/lib/rules/common/license-url.d.ts +2 -0
  96. package/lib/rules/common/license-url.js +12 -0
  97. package/lib/rules/common/no-ambiguous-paths.d.ts +2 -0
  98. package/lib/rules/common/no-ambiguous-paths.js +45 -0
  99. package/lib/rules/common/no-enum-type-mismatch.d.ts +2 -0
  100. package/lib/rules/common/no-enum-type-mismatch.js +43 -0
  101. package/lib/rules/common/no-http-verbs-in-paths.d.ts +2 -0
  102. package/lib/rules/common/no-http-verbs-in-paths.js +33 -0
  103. package/lib/rules/common/no-identical-paths.d.ts +2 -0
  104. package/lib/rules/common/no-identical-paths.js +24 -0
  105. package/lib/rules/common/no-invalid-parameter-examples.d.ts +1 -0
  106. package/lib/rules/common/no-invalid-parameter-examples.js +25 -0
  107. package/lib/rules/common/no-invalid-schema-examples.d.ts +1 -0
  108. package/lib/rules/common/no-invalid-schema-examples.js +23 -0
  109. package/lib/rules/common/no-path-trailing-slash.d.ts +2 -0
  110. package/lib/rules/common/no-path-trailing-slash.js +16 -0
  111. package/lib/rules/common/operation-2xx-response.d.ts +2 -0
  112. package/lib/rules/common/operation-2xx-response.js +17 -0
  113. package/lib/rules/common/operation-4xx-response.d.ts +2 -0
  114. package/lib/rules/common/operation-4xx-response.js +17 -0
  115. package/lib/rules/common/operation-description.d.ts +2 -0
  116. package/lib/rules/common/operation-description.js +12 -0
  117. package/lib/rules/common/operation-operationId-unique.d.ts +2 -0
  118. package/lib/rules/common/operation-operationId-unique.js +20 -0
  119. package/lib/rules/common/operation-operationId-url-safe.d.ts +2 -0
  120. package/lib/rules/common/operation-operationId-url-safe.js +17 -0
  121. package/lib/rules/common/operation-operationId.d.ts +2 -0
  122. package/lib/rules/common/operation-operationId.js +16 -0
  123. package/lib/rules/common/operation-parameters-unique.d.ts +2 -0
  124. package/lib/rules/common/operation-parameters-unique.js +40 -0
  125. package/lib/rules/common/operation-security-defined.d.ts +2 -0
  126. package/lib/rules/common/operation-security-defined.js +38 -0
  127. package/lib/rules/common/operation-singular-tag.d.ts +2 -0
  128. package/lib/rules/common/operation-singular-tag.js +16 -0
  129. package/lib/rules/common/operation-summary.d.ts +2 -0
  130. package/lib/rules/common/operation-summary.js +12 -0
  131. package/lib/rules/common/operation-tag-defined.d.ts +2 -0
  132. package/lib/rules/common/operation-tag-defined.js +25 -0
  133. package/lib/rules/common/parameter-description.d.ts +2 -0
  134. package/lib/rules/common/parameter-description.js +22 -0
  135. package/lib/rules/common/path-declaration-must-exist.d.ts +2 -0
  136. package/lib/rules/common/path-declaration-must-exist.js +16 -0
  137. package/lib/rules/common/path-excludes-patterns.d.ts +2 -0
  138. package/lib/rules/common/path-excludes-patterns.js +22 -0
  139. package/lib/rules/common/path-http-verbs-order.d.ts +2 -0
  140. package/lib/rules/common/path-http-verbs-order.js +26 -0
  141. package/lib/rules/common/path-not-include-query.d.ts +2 -0
  142. package/lib/rules/common/path-not-include-query.js +18 -0
  143. package/lib/rules/common/path-params-defined.d.ts +2 -0
  144. package/lib/rules/common/path-params-defined.js +53 -0
  145. package/lib/rules/common/path-segment-plural.d.ts +2 -0
  146. package/lib/rules/common/path-segment-plural.js +32 -0
  147. package/lib/rules/common/paths-kebab-case.d.ts +2 -0
  148. package/lib/rules/common/paths-kebab-case.js +17 -0
  149. package/lib/rules/common/response-contains-header.d.ts +2 -0
  150. package/lib/rules/common/response-contains-header.js +29 -0
  151. package/lib/rules/common/scalar-property-missing-example.d.ts +2 -0
  152. package/lib/rules/common/scalar-property-missing-example.js +42 -0
  153. package/lib/rules/common/spec.d.ts +2 -0
  154. package/lib/rules/common/spec.js +136 -0
  155. package/lib/rules/common/tag-description.d.ts +2 -0
  156. package/lib/rules/common/tag-description.js +12 -0
  157. package/lib/rules/common/tags-alphabetical.d.ts +2 -0
  158. package/lib/rules/common/tags-alphabetical.js +20 -0
  159. package/lib/rules/no-unresolved-refs.d.ts +5 -0
  160. package/lib/rules/no-unresolved-refs.js +47 -0
  161. package/lib/rules/oas2/boolean-parameter-prefixes.d.ts +5 -0
  162. package/lib/rules/oas2/boolean-parameter-prefixes.js +22 -0
  163. package/lib/rules/oas2/index.d.ts +46 -0
  164. package/lib/rules/oas2/index.js +89 -0
  165. package/lib/rules/oas2/remove-unused-components.d.ts +2 -0
  166. package/lib/rules/oas2/remove-unused-components.js +73 -0
  167. package/lib/rules/oas2/request-mime-type.d.ts +2 -0
  168. package/lib/rules/oas2/request-mime-type.js +17 -0
  169. package/lib/rules/oas2/response-contains-property.d.ts +2 -0
  170. package/lib/rules/oas2/response-contains-property.js +38 -0
  171. package/lib/rules/oas2/response-mime-type.d.ts +2 -0
  172. package/lib/rules/oas2/response-mime-type.js +17 -0
  173. package/lib/rules/oas3/boolean-parameter-prefixes.d.ts +5 -0
  174. package/lib/rules/oas3/boolean-parameter-prefixes.js +24 -0
  175. package/lib/rules/oas3/index.d.ts +3 -0
  176. package/lib/rules/oas3/index.js +105 -0
  177. package/lib/rules/oas3/no-empty-servers.d.ts +2 -0
  178. package/lib/rules/oas3/no-empty-servers.js +23 -0
  179. package/lib/rules/oas3/no-example-value-and-externalValue.d.ts +2 -0
  180. package/lib/rules/oas3/no-example-value-and-externalValue.js +16 -0
  181. package/lib/rules/oas3/no-invalid-media-type-examples.d.ts +2 -0
  182. package/lib/rules/oas3/no-invalid-media-type-examples.js +37 -0
  183. package/lib/rules/oas3/no-server-example.com.d.ts +2 -0
  184. package/lib/rules/oas3/no-server-example.com.js +16 -0
  185. package/lib/rules/oas3/no-server-trailing-slash.d.ts +2 -0
  186. package/lib/rules/oas3/no-server-trailing-slash.js +18 -0
  187. package/lib/rules/oas3/no-servers-empty-enum.d.ts +2 -0
  188. package/lib/rules/oas3/no-servers-empty-enum.js +67 -0
  189. package/lib/rules/oas3/no-undefined-server-variable.d.ts +2 -0
  190. package/lib/rules/oas3/no-undefined-server-variable.js +32 -0
  191. package/lib/rules/oas3/no-unused-components.d.ts +2 -0
  192. package/lib/rules/oas3/no-unused-components.js +74 -0
  193. package/lib/rules/oas3/remove-unused-components.d.ts +2 -0
  194. package/lib/rules/oas3/remove-unused-components.js +83 -0
  195. package/lib/rules/oas3/request-mime-type.d.ts +2 -0
  196. package/lib/rules/oas3/request-mime-type.js +31 -0
  197. package/lib/rules/oas3/response-contains-property.d.ts +2 -0
  198. package/lib/rules/oas3/response-contains-property.js +40 -0
  199. package/lib/rules/oas3/response-mime-type.d.ts +2 -0
  200. package/lib/rules/oas3/response-mime-type.js +31 -0
  201. package/lib/rules/other/stats.d.ts +41 -0
  202. package/lib/rules/other/stats.js +44 -0
  203. package/lib/rules/utils.d.ts +17 -0
  204. package/lib/rules/utils.js +107 -0
  205. package/lib/types/index.d.ts +56 -0
  206. package/lib/types/index.js +77 -0
  207. package/lib/types/oas2.d.ts +2 -0
  208. package/lib/types/oas2.js +380 -0
  209. package/lib/types/oas3.d.ts +2 -0
  210. package/lib/types/oas3.js +479 -0
  211. package/lib/types/oas3_1.d.ts +2 -0
  212. package/lib/types/oas3_1.js +247 -0
  213. package/lib/types/redocly-yaml.d.ts +2 -0
  214. package/lib/types/redocly-yaml.js +533 -0
  215. package/lib/typings/common.d.ts +8 -0
  216. package/lib/typings/common.js +2 -0
  217. package/lib/typings/openapi.d.ts +299 -0
  218. package/lib/typings/openapi.js +2 -0
  219. package/lib/typings/swagger.d.ts +217 -0
  220. package/lib/typings/swagger.js +2 -0
  221. package/lib/utils.d.ts +41 -0
  222. package/lib/utils.js +177 -0
  223. package/lib/visitors.d.ts +175 -0
  224. package/lib/visitors.js +140 -0
  225. package/lib/walk.d.ts +87 -0
  226. package/lib/walk.js +253 -0
  227. package/package.json +56 -0
  228. package/src/__tests__/__snapshots__/bundle.test.ts.snap +255 -0
  229. package/src/__tests__/bundle.test.ts +156 -0
  230. package/src/__tests__/codeframes.test.ts +531 -0
  231. package/src/__tests__/fixtures/extension.js +24 -0
  232. package/src/__tests__/fixtures/refs/definitions.yaml +3 -0
  233. package/src/__tests__/fixtures/refs/examples.yaml +8 -0
  234. package/src/__tests__/fixtures/refs/external-request-body.yaml +13 -0
  235. package/src/__tests__/fixtures/refs/externalref.yaml +35 -0
  236. package/src/__tests__/fixtures/refs/hosted.yaml +35 -0
  237. package/src/__tests__/fixtures/refs/openapi-with-external-refs-conflicting-names.yaml +21 -0
  238. package/src/__tests__/fixtures/refs/openapi-with-external-refs.yaml +33 -0
  239. package/src/__tests__/fixtures/refs/openapi-with-url-refs.yaml +18 -0
  240. package/src/__tests__/fixtures/refs/param-b.yaml +1 -0
  241. package/src/__tests__/fixtures/refs/param-c.yaml +1 -0
  242. package/src/__tests__/fixtures/refs/rename.yaml +1 -0
  243. package/src/__tests__/fixtures/refs/requestBody.yaml +9 -0
  244. package/src/__tests__/fixtures/refs/schema-a.yaml +1 -0
  245. package/src/__tests__/fixtures/refs/simple.yaml +1 -0
  246. package/src/__tests__/fixtures/refs/vendor.schema.yaml +20 -0
  247. package/src/__tests__/fixtures/resolve/External.yaml +10 -0
  248. package/src/__tests__/fixtures/resolve/External2.yaml +4 -0
  249. package/src/__tests__/fixtures/resolve/description.md +3 -0
  250. package/src/__tests__/fixtures/resolve/externalInfo.yaml +4 -0
  251. package/src/__tests__/fixtures/resolve/externalLicense.yaml +1 -0
  252. package/src/__tests__/fixtures/resolve/openapi-with-back.yaml +13 -0
  253. package/src/__tests__/fixtures/resolve/openapi-with-md-description.yaml +5 -0
  254. package/src/__tests__/fixtures/resolve/openapi.yaml +28 -0
  255. package/src/__tests__/fixtures/resolve/schemas/type-a.yaml +10 -0
  256. package/src/__tests__/fixtures/resolve/schemas/type-b.yaml +6 -0
  257. package/src/__tests__/fixtures/resolve/transitive/a.yaml +1 -0
  258. package/src/__tests__/fixtures/resolve/transitive/components.yaml +5 -0
  259. package/src/__tests__/fixtures/resolve/transitive/schemas.yaml +3 -0
  260. package/src/__tests__/js-yaml.test.ts +71 -0
  261. package/src/__tests__/lint.test.ts +232 -0
  262. package/src/__tests__/login.test.ts +17 -0
  263. package/src/__tests__/normalizeVisitors.test.ts +151 -0
  264. package/src/__tests__/ref-utils.test.ts +120 -0
  265. package/src/__tests__/resolve-http.test.ts +77 -0
  266. package/src/__tests__/resolve.test.ts +405 -0
  267. package/src/__tests__/utils.test.ts +85 -0
  268. package/src/__tests__/walk.test.ts +1485 -0
  269. package/src/benchmark/benches/lint-with-many-rules.bench.ts +35 -0
  270. package/src/benchmark/benches/lint-with-nested-rule.bench.ts +39 -0
  271. package/src/benchmark/benches/lint-with-no-rules.bench.ts +20 -0
  272. package/src/benchmark/benches/lint-with-top-level-rule-report.bench.ts +36 -0
  273. package/src/benchmark/benches/lint-with-top-level-rule.bench.ts +32 -0
  274. package/src/benchmark/benches/rebilly.yaml +32267 -0
  275. package/src/benchmark/benches/recommended-oas3.bench.ts +22 -0
  276. package/src/benchmark/benches/resolve-with-no-external.bench.ts +23 -0
  277. package/src/benchmark/benchmark.js +307 -0
  278. package/src/benchmark/colors.js +29 -0
  279. package/src/benchmark/fork.js +83 -0
  280. package/src/benchmark/utils.ts +36 -0
  281. package/src/bundle.ts +386 -0
  282. package/src/config/__tests__/__snapshots__/config-resolvers.test.ts.snap +157 -0
  283. package/src/config/__tests__/config-resolvers.test.ts +429 -0
  284. package/src/config/__tests__/config.test.ts +244 -0
  285. package/src/config/__tests__/fixtures/plugin-config.yaml +3 -0
  286. package/src/config/__tests__/fixtures/plugin.js +56 -0
  287. package/src/config/__tests__/fixtures/resolve-config/api/nested-config.yaml +12 -0
  288. package/src/config/__tests__/fixtures/resolve-config/api/plugin.js +67 -0
  289. package/src/config/__tests__/fixtures/resolve-config/local-config-with-circular.yaml +8 -0
  290. package/src/config/__tests__/fixtures/resolve-config/local-config-with-file.yaml +19 -0
  291. package/src/config/__tests__/fixtures/resolve-config/local-config.yaml +10 -0
  292. package/src/config/__tests__/fixtures/resolve-config/plugin.js +66 -0
  293. package/src/config/__tests__/fixtures/resolve-remote-configs/nested-remote-config.yaml +4 -0
  294. package/src/config/__tests__/fixtures/resolve-remote-configs/remote-config.yaml +5 -0
  295. package/src/config/__tests__/load.test.ts +83 -0
  296. package/src/config/__tests__/resolve-plugins.test.ts +27 -0
  297. package/src/config/all.ts +66 -0
  298. package/src/config/builtIn.ts +37 -0
  299. package/src/config/config-resolvers.ts +359 -0
  300. package/src/config/config.ts +312 -0
  301. package/src/config/index.ts +7 -0
  302. package/src/config/load.ts +84 -0
  303. package/src/config/minimal.ts +58 -0
  304. package/src/config/recommended.ts +58 -0
  305. package/src/config/rules.ts +46 -0
  306. package/src/config/types.ts +168 -0
  307. package/src/config/utils.ts +208 -0
  308. package/src/decorators/__tests__/remove-x-internal.test.ts +316 -0
  309. package/src/decorators/common/info-description-override.ts +24 -0
  310. package/src/decorators/common/operation-description-override.ts +30 -0
  311. package/src/decorators/common/registry-dependencies.ts +25 -0
  312. package/src/decorators/common/remove-x-internal.ts +59 -0
  313. package/src/decorators/common/tag-description-override.ts +25 -0
  314. package/src/decorators/oas2/index.ts +14 -0
  315. package/src/decorators/oas3/index.ts +14 -0
  316. package/src/format/codeframes.ts +210 -0
  317. package/src/format/format.ts +339 -0
  318. package/src/index.ts +68 -0
  319. package/src/js-yaml/index.ts +18 -0
  320. package/src/lint.ts +125 -0
  321. package/src/oas-types.ts +62 -0
  322. package/src/redocly/__tests__/redocly-client.test.ts +140 -0
  323. package/src/redocly/index.ts +182 -0
  324. package/src/redocly/redocly-client-types.ts +10 -0
  325. package/src/redocly/registry-api-types.ts +32 -0
  326. package/src/redocly/registry-api.ts +134 -0
  327. package/src/ref-utils.ts +80 -0
  328. package/src/resolve.ts +378 -0
  329. package/src/rules/__tests__/fixtures/invalid-yaml.yaml +1 -0
  330. package/src/rules/__tests__/fixtures/ref.yaml +1 -0
  331. package/src/rules/__tests__/no-unresolved-refs.test.ts +168 -0
  332. package/src/rules/ajv.ts +103 -0
  333. package/src/rules/common/__tests__/info-description.test.ts +102 -0
  334. package/src/rules/common/__tests__/info-license.test.ts +62 -0
  335. package/src/rules/common/__tests__/license-url.test.ts +63 -0
  336. package/src/rules/common/__tests__/no-ambiguous-paths.test.ts +96 -0
  337. package/src/rules/common/__tests__/no-enum-type-mismatch.test.ts +209 -0
  338. package/src/rules/common/__tests__/no-identical-paths.test.ts +58 -0
  339. package/src/rules/common/__tests__/no-path-trailing-slash.test.ts +85 -0
  340. package/src/rules/common/__tests__/operation-2xx-response.test.ts +91 -0
  341. package/src/rules/common/__tests__/operation-4xx-response.test.ts +107 -0
  342. package/src/rules/common/__tests__/operation-operationId-unique.test.ts +76 -0
  343. package/src/rules/common/__tests__/operation-operationId-url-safe.test.ts +45 -0
  344. package/src/rules/common/__tests__/operation-parameters-unique.test.ts +167 -0
  345. package/src/rules/common/__tests__/operation-security-defined.test.ts +69 -0
  346. package/src/rules/common/__tests__/operation-singular-tag.test.ts +72 -0
  347. package/src/rules/common/__tests__/path-http-verbs-order.test.ts +95 -0
  348. package/src/rules/common/__tests__/path-not-include-query.test.ts +64 -0
  349. package/src/rules/common/__tests__/path-params-defined.test.ts +133 -0
  350. package/src/rules/common/__tests__/paths-kebab-case.test.ts +108 -0
  351. package/src/rules/common/__tests__/scalar-property-missing-example.test.ts +264 -0
  352. package/src/rules/common/__tests__/spec.test.ts +62 -0
  353. package/src/rules/common/__tests__/tag-description.test.ts +65 -0
  354. package/src/rules/common/__tests__/tags-alphabetical.test.ts +64 -0
  355. package/src/rules/common/assertions/__tests__/asserts.test.ts +231 -0
  356. package/src/rules/common/assertions/__tests__/index.test.ts +65 -0
  357. package/src/rules/common/assertions/__tests__/utils.test.ts +89 -0
  358. package/src/rules/common/assertions/asserts.ts +137 -0
  359. package/src/rules/common/assertions/index.ts +75 -0
  360. package/src/rules/common/assertions/utils.ts +167 -0
  361. package/src/rules/common/info-contact.ts +15 -0
  362. package/src/rules/common/info-description.ts +10 -0
  363. package/src/rules/common/info-license-url.ts +15 -0
  364. package/src/rules/common/license-url.ts +10 -0
  365. package/src/rules/common/no-ambiguous-paths.ts +50 -0
  366. package/src/rules/common/no-enum-type-mismatch.ts +49 -0
  367. package/src/rules/common/no-http-verbs-in-paths.ts +36 -0
  368. package/src/rules/common/no-identical-paths.ts +24 -0
  369. package/src/rules/common/no-invalid-parameter-examples.ts +36 -0
  370. package/src/rules/common/no-invalid-schema-examples.ts +27 -0
  371. package/src/rules/common/no-path-trailing-slash.ts +15 -0
  372. package/src/rules/common/operation-2xx-response.ts +16 -0
  373. package/src/rules/common/operation-4xx-response.ts +17 -0
  374. package/src/rules/common/operation-description.ts +13 -0
  375. package/src/rules/common/operation-operationId-unique.ts +21 -0
  376. package/src/rules/common/operation-operationId-url-safe.ts +19 -0
  377. package/src/rules/common/operation-operationId.ts +17 -0
  378. package/src/rules/common/operation-parameters-unique.ts +48 -0
  379. package/src/rules/common/operation-security-defined.ts +45 -0
  380. package/src/rules/common/operation-singular-tag.ts +17 -0
  381. package/src/rules/common/operation-summary.ts +13 -0
  382. package/src/rules/common/operation-tag-defined.ts +26 -0
  383. package/src/rules/common/parameter-description.ts +22 -0
  384. package/src/rules/common/path-declaration-must-exist.ts +15 -0
  385. package/src/rules/common/path-excludes-patterns.ts +23 -0
  386. package/src/rules/common/path-http-verbs-order.ts +30 -0
  387. package/src/rules/common/path-not-include-query.ts +17 -0
  388. package/src/rules/common/path-params-defined.ts +58 -0
  389. package/src/rules/common/path-segment-plural.ts +31 -0
  390. package/src/rules/common/paths-kebab-case.ts +16 -0
  391. package/src/rules/common/response-contains-header.ts +30 -0
  392. package/src/rules/common/scalar-property-missing-example.ts +58 -0
  393. package/src/rules/common/spec.ts +143 -0
  394. package/src/rules/common/tag-description.ts +10 -0
  395. package/src/rules/common/tags-alphabetical.ts +20 -0
  396. package/src/rules/no-unresolved-refs.ts +51 -0
  397. package/src/rules/oas2/__tests__/boolean-parameter-prefixes.test.ts +110 -0
  398. package/src/rules/oas2/__tests__/response-contains-header.test.ts +174 -0
  399. package/src/rules/oas2/__tests__/response-contains-property.test.ts +155 -0
  400. package/src/rules/oas2/__tests__/spec/fixtures/description.md +1 -0
  401. package/src/rules/oas2/__tests__/spec/info.test.ts +355 -0
  402. package/src/rules/oas2/__tests__/spec/operation.test.ts +123 -0
  403. package/src/rules/oas2/__tests__/spec/paths.test.ts +245 -0
  404. package/src/rules/oas2/__tests__/spec/referenceableScalars.test.ts +31 -0
  405. package/src/rules/oas2/__tests__/spec/utils.ts +32 -0
  406. package/src/rules/oas2/boolean-parameter-prefixes.ts +26 -0
  407. package/src/rules/oas2/index.ts +89 -0
  408. package/src/rules/oas2/remove-unused-components.ts +76 -0
  409. package/src/rules/oas2/request-mime-type.ts +17 -0
  410. package/src/rules/oas2/response-contains-property.ts +36 -0
  411. package/src/rules/oas2/response-mime-type.ts +17 -0
  412. package/src/rules/oas3/__tests__/boolean-parameter-prefixes.test.ts +111 -0
  413. package/src/rules/oas3/__tests__/fixtures/common.yaml +11 -0
  414. package/src/rules/oas3/__tests__/no-empty-enum-servers.com.test.ts +205 -0
  415. package/src/rules/oas3/__tests__/no-example-value-and-externalValue.test.ts +65 -0
  416. package/src/rules/oas3/__tests__/no-invalid-media-type-examples.test.ts +392 -0
  417. package/src/rules/oas3/__tests__/no-server-example.com.test.ts +60 -0
  418. package/src/rules/oas3/__tests__/no-server-trailing-slash.test.ts +79 -0
  419. package/src/rules/oas3/__tests__/no-unused-components.test.ts +131 -0
  420. package/src/rules/oas3/__tests__/response-contains-header.test.ts +273 -0
  421. package/src/rules/oas3/__tests__/response-contains-property.test.ts +403 -0
  422. package/src/rules/oas3/__tests__/spec/callbacks.test.ts +41 -0
  423. package/src/rules/oas3/__tests__/spec/fixtures/description.md +1 -0
  424. package/src/rules/oas3/__tests__/spec/info.test.ts +391 -0
  425. package/src/rules/oas3/__tests__/spec/operation.test.ts +253 -0
  426. package/src/rules/oas3/__tests__/spec/paths.test.ts +284 -0
  427. package/src/rules/oas3/__tests__/spec/referenceableScalars.test.ts +77 -0
  428. package/src/rules/oas3/__tests__/spec/servers.test.ts +499 -0
  429. package/src/rules/oas3/__tests__/spec/spec.test.ts +288 -0
  430. package/src/rules/oas3/__tests__/spec/utils.ts +32 -0
  431. package/src/rules/oas3/boolean-parameter-prefixes.ts +28 -0
  432. package/src/rules/oas3/index.ts +105 -0
  433. package/src/rules/oas3/no-empty-servers.ts +22 -0
  434. package/src/rules/oas3/no-example-value-and-externalValue.ts +14 -0
  435. package/src/rules/oas3/no-invalid-media-type-examples.ts +41 -0
  436. package/src/rules/oas3/no-server-example.com.ts +14 -0
  437. package/src/rules/oas3/no-server-trailing-slash.ts +15 -0
  438. package/src/rules/oas3/no-servers-empty-enum.ts +67 -0
  439. package/src/rules/oas3/no-undefined-server-variable.ts +30 -0
  440. package/src/rules/oas3/no-unused-components.ts +75 -0
  441. package/src/rules/oas3/remove-unused-components.ts +84 -0
  442. package/src/rules/oas3/request-mime-type.ts +31 -0
  443. package/src/rules/oas3/response-contains-property.ts +38 -0
  444. package/src/rules/oas3/response-mime-type.ts +31 -0
  445. package/src/rules/other/stats.ts +44 -0
  446. package/src/rules/utils.ts +123 -0
  447. package/src/types/index.ts +138 -0
  448. package/src/types/oas2.ts +397 -0
  449. package/src/types/oas3.ts +510 -0
  450. package/src/types/oas3_1.ts +253 -0
  451. package/src/types/redocly-yaml.ts +647 -0
  452. package/src/typings/common.ts +9 -0
  453. package/src/typings/openapi.ts +298 -0
  454. package/src/typings/swagger.ts +236 -0
  455. package/src/utils.ts +193 -0
  456. package/src/visitors.ts +448 -0
  457. package/src/walk.ts +416 -0
  458. package/tsconfig.json +8 -0
  459. package/tsconfig.tsbuildinfo +1 -0
package/lib/walk.js ADDED
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.walkDocument = void 0;
4
+ const ref_utils_1 = require("./ref-utils");
5
+ const resolve_1 = require("./resolve");
6
+ const utils_1 = require("./utils");
7
+ const types_1 = require("./types");
8
+ function collectParents(ctx) {
9
+ var _a;
10
+ const parents = {};
11
+ while (ctx.parent) {
12
+ parents[ctx.parent.type.name] = (_a = ctx.parent.activatedOn) === null || _a === void 0 ? void 0 : _a.value.node;
13
+ ctx = ctx.parent;
14
+ }
15
+ return parents;
16
+ }
17
+ function collectParentsLocations(ctx) {
18
+ var _a, _b;
19
+ const locations = {};
20
+ while (ctx.parent) {
21
+ if ((_a = ctx.parent.activatedOn) === null || _a === void 0 ? void 0 : _a.value.location) {
22
+ locations[ctx.parent.type.name] = (_b = ctx.parent.activatedOn) === null || _b === void 0 ? void 0 : _b.value.location;
23
+ }
24
+ ctx = ctx.parent;
25
+ }
26
+ return locations;
27
+ }
28
+ function walkDocument(opts) {
29
+ const { document, rootType, normalizedVisitors, resolvedRefMap, ctx } = opts;
30
+ const seenNodesPerType = {};
31
+ const seenRefs = new Set();
32
+ walkNode(document.parsed, rootType, new ref_utils_1.Location(document.source, '#/'), undefined, '');
33
+ function walkNode(node, type, location, parent, key) {
34
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
35
+ let currentLocation = location;
36
+ const { node: resolvedNode, location: resolvedLocation, error } = resolve(node);
37
+ const enteredContexts = new Set();
38
+ if (ref_utils_1.isRef(node)) {
39
+ const refEnterVisitors = normalizedVisitors.ref.enter;
40
+ for (const { visit: visitor, ruleId, severity, context } of refEnterVisitors) {
41
+ if (!seenRefs.has(node)) {
42
+ enteredContexts.add(context);
43
+ const report = reportFn.bind(undefined, ruleId, severity);
44
+ visitor(node, {
45
+ report,
46
+ resolve,
47
+ location,
48
+ type,
49
+ parent,
50
+ key,
51
+ parentLocations: {},
52
+ oasVersion: ctx.oasVersion,
53
+ getVisitorData: getVisitorDataFn.bind(undefined, ruleId)
54
+ }, { node: resolvedNode, location: resolvedLocation, error });
55
+ if ((resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source.absoluteRef) && ctx.refTypes) {
56
+ ctx.refTypes.set(resolvedLocation === null || resolvedLocation === void 0 ? void 0 : resolvedLocation.source.absoluteRef, type);
57
+ }
58
+ }
59
+ }
60
+ }
61
+ if (resolvedNode !== undefined && resolvedLocation && type.name !== 'scalar') {
62
+ currentLocation = resolvedLocation;
63
+ const isNodeSeen = (_b = (_a = seenNodesPerType[type.name]) === null || _a === void 0 ? void 0 : _a.has) === null || _b === void 0 ? void 0 : _b.call(_a, resolvedNode);
64
+ let visitedBySome = false;
65
+ const anyEnterVisitors = normalizedVisitors.any.enter;
66
+ const currentEnterVisitors = anyEnterVisitors.concat(((_c = normalizedVisitors[type.name]) === null || _c === void 0 ? void 0 : _c.enter) || []);
67
+ const activatedContexts = [];
68
+ for (const { context, visit, skip, ruleId, severity } of currentEnterVisitors) {
69
+ if (context.isSkippedLevel) {
70
+ if (context.parent.activatedOn &&
71
+ !context.parent.activatedOn.value.nextLevelTypeActivated &&
72
+ !context.seen.has(node)) {
73
+ // TODO: test for walk through duplicated $ref-ed node
74
+ context.seen.add(node);
75
+ visitedBySome = true;
76
+ activatedContexts.push(context);
77
+ }
78
+ }
79
+ else {
80
+ if ((context.parent && // if nested
81
+ context.parent.activatedOn &&
82
+ ((_d = context.activatedOn) === null || _d === void 0 ? void 0 : _d.value.withParentNode) !== context.parent.activatedOn.value.node &&
83
+ // do not enter if visited by parent children (it works thanks because deeper visitors are sorted before)
84
+ ((_e = context.parent.activatedOn.value.nextLevelTypeActivated) === null || _e === void 0 ? void 0 : _e.value) !== type) ||
85
+ (!context.parent && !isNodeSeen) // if top-level visit each node just once
86
+ ) {
87
+ activatedContexts.push(context);
88
+ const activatedOn = {
89
+ node: resolvedNode,
90
+ location: resolvedLocation,
91
+ nextLevelTypeActivated: null,
92
+ withParentNode: (_g = (_f = context.parent) === null || _f === void 0 ? void 0 : _f.activatedOn) === null || _g === void 0 ? void 0 : _g.value.node,
93
+ skipped: (_k = (((_j = (_h = context.parent) === null || _h === void 0 ? void 0 : _h.activatedOn) === null || _j === void 0 ? void 0 : _j.value.skipped) || (skip === null || skip === void 0 ? void 0 : skip(resolvedNode, key)))) !== null && _k !== void 0 ? _k : false,
94
+ };
95
+ context.activatedOn = utils_1.pushStack(context.activatedOn, activatedOn);
96
+ let ctx = context.parent;
97
+ while (ctx) {
98
+ ctx.activatedOn.value.nextLevelTypeActivated = utils_1.pushStack(ctx.activatedOn.value.nextLevelTypeActivated, type);
99
+ ctx = ctx.parent;
100
+ }
101
+ if (!activatedOn.skipped) {
102
+ visitedBySome = true;
103
+ enteredContexts.add(context);
104
+ const { ignoreNextVisitorsOnNode } = visitWithContext(visit, resolvedNode, context, ruleId, severity);
105
+ if (ignoreNextVisitorsOnNode)
106
+ break;
107
+ }
108
+ }
109
+ }
110
+ }
111
+ if (visitedBySome || !isNodeSeen) {
112
+ seenNodesPerType[type.name] = seenNodesPerType[type.name] || new Set();
113
+ seenNodesPerType[type.name].add(resolvedNode);
114
+ if (Array.isArray(resolvedNode)) {
115
+ const itemsType = type.items;
116
+ if (itemsType !== undefined) {
117
+ for (let i = 0; i < resolvedNode.length; i++) {
118
+ walkNode(resolvedNode[i], itemsType, resolvedLocation.child([i]), resolvedNode, i);
119
+ }
120
+ }
121
+ }
122
+ else if (typeof resolvedNode === 'object' && resolvedNode !== null) {
123
+ // visit in order from type-tree first
124
+ const props = Object.keys(type.properties);
125
+ if (type.additionalProperties) {
126
+ props.push(...Object.keys(resolvedNode).filter((k) => !props.includes(k)));
127
+ }
128
+ if (ref_utils_1.isRef(node)) {
129
+ props.push(...Object.keys(node).filter((k) => k !== '$ref' && !props.includes(k))); // properties on the same level as $ref
130
+ }
131
+ for (const propName of props) {
132
+ let value = resolvedNode[propName];
133
+ let loc = resolvedLocation;
134
+ if (value === undefined) {
135
+ value = node[propName];
136
+ loc = location; // properties on the same level as $ref should resolve against original location, not target
137
+ }
138
+ let propType = type.properties[propName];
139
+ if (propType === undefined)
140
+ propType = type.additionalProperties;
141
+ if (typeof propType === 'function')
142
+ propType = propType(value, propName);
143
+ if (!types_1.isNamedType(propType) && (propType === null || propType === void 0 ? void 0 : propType.directResolveAs)) {
144
+ propType = propType.directResolveAs;
145
+ value = { $ref: value };
146
+ }
147
+ if (propType && propType.name === undefined && propType.resolvable !== false) {
148
+ propType = { name: 'scalar', properties: {} };
149
+ }
150
+ if (!types_1.isNamedType(propType) || (propType.name === 'scalar' && !ref_utils_1.isRef(value))) {
151
+ continue;
152
+ }
153
+ walkNode(value, propType, loc.child([propName]), resolvedNode, propName);
154
+ }
155
+ }
156
+ }
157
+ const anyLeaveVisitors = normalizedVisitors.any.leave;
158
+ const currentLeaveVisitors = (((_l = normalizedVisitors[type.name]) === null || _l === void 0 ? void 0 : _l.leave) || []).concat(anyLeaveVisitors);
159
+ for (const context of activatedContexts.reverse()) {
160
+ if (context.isSkippedLevel) {
161
+ context.seen.delete(resolvedNode);
162
+ }
163
+ else {
164
+ context.activatedOn = utils_1.popStack(context.activatedOn);
165
+ if (context.parent) {
166
+ let ctx = context.parent;
167
+ while (ctx) {
168
+ ctx.activatedOn.value.nextLevelTypeActivated = utils_1.popStack(ctx.activatedOn.value.nextLevelTypeActivated);
169
+ ctx = ctx.parent;
170
+ }
171
+ }
172
+ }
173
+ }
174
+ for (const { context, visit, ruleId, severity } of currentLeaveVisitors) {
175
+ if (!context.isSkippedLevel && enteredContexts.has(context)) {
176
+ visitWithContext(visit, resolvedNode, context, ruleId, severity);
177
+ }
178
+ }
179
+ }
180
+ currentLocation = location;
181
+ if (ref_utils_1.isRef(node)) {
182
+ const refLeaveVisitors = normalizedVisitors.ref.leave;
183
+ for (const { visit: visitor, ruleId, severity, context } of refLeaveVisitors) {
184
+ if (enteredContexts.has(context)) {
185
+ const report = reportFn.bind(undefined, ruleId, severity);
186
+ visitor(node, {
187
+ report,
188
+ resolve,
189
+ location,
190
+ type,
191
+ parent,
192
+ key,
193
+ parentLocations: {},
194
+ oasVersion: ctx.oasVersion,
195
+ getVisitorData: getVisitorDataFn.bind(undefined, ruleId)
196
+ }, { node: resolvedNode, location: resolvedLocation, error });
197
+ }
198
+ }
199
+ }
200
+ // returns true ignores all the next visitors on the specific node
201
+ function visitWithContext(visit, node, context, ruleId, severity) {
202
+ const report = reportFn.bind(undefined, ruleId, severity);
203
+ let ignoreNextVisitorsOnNode = false;
204
+ visit(node, {
205
+ report,
206
+ resolve,
207
+ location: currentLocation,
208
+ type,
209
+ parent,
210
+ key,
211
+ parentLocations: collectParentsLocations(context),
212
+ oasVersion: ctx.oasVersion,
213
+ ignoreNextVisitorsOnNode: () => { ignoreNextVisitorsOnNode = true; },
214
+ getVisitorData: getVisitorDataFn.bind(undefined, ruleId),
215
+ }, collectParents(context), context);
216
+ return { ignoreNextVisitorsOnNode };
217
+ }
218
+ function resolve(ref, from = currentLocation.source.absoluteRef) {
219
+ if (!ref_utils_1.isRef(ref))
220
+ return { location, node: ref };
221
+ const refId = resolve_1.makeRefId(from, ref.$ref);
222
+ const resolvedRef = resolvedRefMap.get(refId);
223
+ if (!resolvedRef) {
224
+ return {
225
+ location: undefined,
226
+ node: undefined,
227
+ };
228
+ }
229
+ const { resolved, node, document, nodePointer, error } = resolvedRef;
230
+ const newLocation = resolved
231
+ ? new ref_utils_1.Location(document.source, nodePointer)
232
+ : error instanceof resolve_1.YamlParseError
233
+ ? new ref_utils_1.Location(error.source, '')
234
+ : undefined;
235
+ return { location: newLocation, node, error };
236
+ }
237
+ function reportFn(ruleId, severity, opts) {
238
+ const loc = opts.location
239
+ ? Array.isArray(opts.location)
240
+ ? opts.location
241
+ : [opts.location]
242
+ : [Object.assign(Object.assign({}, currentLocation), { reportOnKey: false })];
243
+ ctx.problems.push(Object.assign(Object.assign({ ruleId: opts.ruleId || ruleId, severity: opts.forceSeverity || severity }, opts), { suggest: opts.suggest || [], location: loc.map((loc) => {
244
+ return Object.assign(Object.assign(Object.assign({}, currentLocation), { reportOnKey: false }), loc);
245
+ }) }));
246
+ }
247
+ function getVisitorDataFn(ruleId) {
248
+ ctx.visitorsData[ruleId] = ctx.visitorsData[ruleId] || {};
249
+ return ctx.visitorsData[ruleId];
250
+ }
251
+ }
252
+ }
253
+ exports.walkDocument = walkDocument;
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@redocly/openapi-core",
3
+ "version": "1.0.0-beta.100",
4
+ "description": "",
5
+ "main": "lib/index.js",
6
+ "engines": {
7
+ "node": ">=12.0.0"
8
+ },
9
+ "engineStrict": true,
10
+ "license": "MIT",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/Redocly/redocly-cli.git"
14
+ },
15
+ "browser": {
16
+ "fs": false,
17
+ "path": "path-browserify",
18
+ "os": false,
19
+ "node-fetch": false
20
+ },
21
+ "homepage": "https://github.com/Redocly/redocly-cli",
22
+ "keywords": [
23
+ "linter",
24
+ "OpenAPI",
25
+ "Swagger",
26
+ "OpenAPI linter",
27
+ "Swagger linter",
28
+ "oas"
29
+ ],
30
+ "contributors": [
31
+ "Sergey Dubovyk <serhii@redoc.ly> (https://redoc.ly/)",
32
+ "Roman Hotsiy <roman@redoc.ly> (https://redoc.ly/)",
33
+ "Andriy Leliv <andriy@redoc.ly> (https://redoc.ly/)"
34
+ ],
35
+ "dependencies": {
36
+ "@redocly/ajv": "^8.6.4",
37
+ "@types/node": "^14.11.8",
38
+ "colorette": "^1.2.0",
39
+ "js-levenshtein": "^1.1.6",
40
+ "js-yaml": "^4.1.0",
41
+ "lodash.isequal": "^4.5.0",
42
+ "minimatch": "^5.0.1",
43
+ "node-fetch": "^2.6.1",
44
+ "pluralize": "^8.0.0",
45
+ "yaml-ast-parser": "0.0.43"
46
+ },
47
+ "devDependencies": {
48
+ "@types/js-levenshtein": "^1.1.0",
49
+ "@types/js-yaml": "^4.0.3",
50
+ "@types/lodash.isequal": "^4.5.5",
51
+ "@types/minimatch": "^3.0.5",
52
+ "@types/node-fetch": "^2.5.7",
53
+ "@types/pluralize": "^0.0.29",
54
+ "typescript": "^4.0.5"
55
+ }
56
+ }
@@ -0,0 +1,255 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`bundle should bundle external refs 1`] = `
4
+ openapi: 3.0.0
5
+ paths:
6
+ /pet:
7
+ parameters:
8
+ - $ref: '#/components/parameters/path-param'
9
+ put:
10
+ parameters:
11
+ - $ref: '#/components/parameters/param-a'
12
+ - $ref: '#/components/parameters/param-b'
13
+ - name: test
14
+ get:
15
+ parameters:
16
+ - $ref: '#/components/parameters/param-a'
17
+ - $ref: '#/components/parameters/param-c'
18
+ post:
19
+ parameters:
20
+ - $ref: '#/paths/~1pet/put/parameters/2'
21
+ components:
22
+ parameters:
23
+ param-a:
24
+ name: param_a
25
+ schema:
26
+ $ref: '#/components/schemas/schema-a'
27
+ examples:
28
+ first:
29
+ $ref: '#/components/examples/param-a-first'
30
+ second:
31
+ $ref: '#/components/examples/second'
32
+ path-param:
33
+ name: path_param
34
+ examples:
35
+ first:
36
+ $ref: '#/components/examples/first'
37
+ param-c:
38
+ name: param_c
39
+ param-b:
40
+ name: param_b
41
+ examples:
42
+ first:
43
+ value: b1
44
+ param-a-first:
45
+ value: a1
46
+ second:
47
+ value: a2
48
+ schemas:
49
+ schema-a:
50
+ type: string
51
+
52
+ `;
53
+
54
+ exports[`bundle should bundle external refs and warn for conflicting names 1`] = `
55
+ openapi: 3.0.0
56
+ paths:
57
+ /pet:
58
+ parameters:
59
+ - $ref: '#/components/parameters/path-param'
60
+ put:
61
+ parameters:
62
+ - $ref: '#/components/parameters/param-b'
63
+ - $ref: '#/components/parameters/param-b-2'
64
+ get:
65
+ parameters:
66
+ - $ref: '#/components/parameters/param-a'
67
+ - $ref: '#/components/parameters/param-c'
68
+ components:
69
+ parameters:
70
+ param-a:
71
+ name: test
72
+ param-b:
73
+ name: param_b_alt
74
+ path-param:
75
+ name: path_param
76
+ param-c:
77
+ name: param_c
78
+ param-b-2:
79
+ name: param_b
80
+
81
+ `;
82
+
83
+ exports[`bundle should dereferenced correctly when used with dereference 1`] = `
84
+ openapi: 3.0.0
85
+ paths:
86
+ /pet:
87
+ get:
88
+ operationId: get
89
+ parameters:
90
+ - name: shared-a
91
+ - name: get_b
92
+ post:
93
+ operationId: post
94
+ parameters:
95
+ - name: shared-a
96
+ components:
97
+ parameters:
98
+ shared_a:
99
+ name: shared-a
100
+
101
+ `;
102
+
103
+ exports[`bundle should not bundle url refs if used with keepUrlRefs 1`] = `
104
+ openapi: 3.0.0
105
+ paths:
106
+ /pet:
107
+ parameters:
108
+ - $ref: '#/components/parameters/path-param'
109
+ put:
110
+ parameters:
111
+ - $ref: https://someexternal.schema
112
+ - $ref: '#/components/parameters/param-b'
113
+ - name: test
114
+ get:
115
+ parameters:
116
+ - $ref: http://someexternal.schema
117
+ - $ref: '#/components/parameters/param-c'
118
+ components:
119
+ parameters:
120
+ path-param:
121
+ name: path_param
122
+ param-c:
123
+ name: param_c
124
+ param-b:
125
+ name: param_b
126
+
127
+ `;
128
+
129
+ exports[`bundle should not place referened schema inline when component in question is not of type "schemas" 1`] = `
130
+ openapi: 3.0.0
131
+ paths:
132
+ /pet:
133
+ post:
134
+ requestBody:
135
+ content:
136
+ application/json:
137
+ schema:
138
+ $ref: '#/components/schemas/requestBody'
139
+ components:
140
+ schemas:
141
+ requestBody:
142
+ content:
143
+ application/json:
144
+ schema:
145
+ type: object
146
+ properties:
147
+ a:
148
+ type: string
149
+ b:
150
+ type: number
151
+
152
+ `;
153
+
154
+ exports[`bundle should place referenced schema inline when referenced schema name resolves to original schema name 1`] = `
155
+ openapi: 3.1.0
156
+ info:
157
+ title: My API
158
+ description: It ain't so wonderful, but at least it's mine.
159
+ version: '1.0'
160
+ contact:
161
+ email: me@theintenet.com
162
+ name: me
163
+ paths:
164
+ /test:
165
+ get:
166
+ summary: test
167
+ responses:
168
+ '200':
169
+ description: test
170
+ content:
171
+ application/json:
172
+ schema:
173
+ $ref: '#/components/schemas/vendor.schema'
174
+ components:
175
+ schemas:
176
+ vendor:
177
+ $ref: '#/components/schemas/vendor.schema'
178
+ myvendor:
179
+ $ref: '#/components/schemas/vendor.schema'
180
+ simple:
181
+ type: string
182
+ A:
183
+ type: string
184
+ test:
185
+ $ref: '#/components/schemas/rename-2'
186
+ rename:
187
+ type: string
188
+ rename-2:
189
+ type: number
190
+ vendor.schema:
191
+ title: vendor
192
+ type: object
193
+ description: Vendors
194
+ properties:
195
+ key:
196
+ type: string
197
+ description: System-assigned key for the vendor.
198
+ readOnly: true
199
+ id:
200
+ type: string
201
+ description: >
202
+ Unique identifier of the vendor.
203
+
204
+ You must specify a unique vendor ID when creating a vendor unless
205
+ document sequencing is configured, in which case the ID is
206
+ auto-generated.
207
+ name:
208
+ type: string
209
+ description: Name of the vendor.
210
+ isOneTimeUse:
211
+ type: boolean
212
+ description: One-time use
213
+ default: false
214
+
215
+ `;
216
+
217
+ exports[`bundle should pull hosted schema 1`] = `
218
+ openapi: 3.0.3
219
+ info:
220
+ title: bugtest
221
+ version: '1.0'
222
+ description: Demo
223
+ license:
224
+ name: DEMO
225
+ url: https://demo.com
226
+ servers:
227
+ - url: http://demo.com/api
228
+ paths:
229
+ /customer:
230
+ summary: Customer scope
231
+ get:
232
+ summary: Get demo no refs
233
+ operationId: GetCustomer
234
+ description: Returns Demo No Refs
235
+ responses:
236
+ '200':
237
+ description: Demo No Refs
238
+ content:
239
+ application/json:
240
+ schema:
241
+ $ref: '#/components/schemas/Customer'
242
+ components:
243
+ schemas:
244
+ Customer:
245
+ type: object
246
+ properties:
247
+ customerName:
248
+ type: string
249
+ accounts:
250
+ type: array
251
+ items:
252
+ $ref: '#/components/schemas/someexternal'
253
+ someexternal: External schema content
254
+
255
+ `;