@swagger-api/apidom-ns-openapi-3-1 0.68.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 (283) hide show
  1. package/CHANGELOG.md +398 -0
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/LICENSES/MIT.txt +9 -0
  4. package/NOTICE +57 -0
  5. package/README.md +468 -0
  6. package/cjs/elements/Callback.cjs +8 -0
  7. package/cjs/elements/Components.cjs +15 -0
  8. package/cjs/elements/Contact.cjs +8 -0
  9. package/cjs/elements/Discriminator.cjs +8 -0
  10. package/cjs/elements/Encoding.cjs +8 -0
  11. package/cjs/elements/Example.cjs +8 -0
  12. package/cjs/elements/ExternalDocumentation.cjs +8 -0
  13. package/cjs/elements/Header.cjs +15 -0
  14. package/cjs/elements/Info.cjs +21 -0
  15. package/cjs/elements/JsonSchemaDialect.cjs +14 -0
  16. package/cjs/elements/License.cjs +15 -0
  17. package/cjs/elements/Link.cjs +8 -0
  18. package/cjs/elements/MediaType.cjs +15 -0
  19. package/cjs/elements/OAuthFlow.cjs +8 -0
  20. package/cjs/elements/OAuthFlows.cjs +8 -0
  21. package/cjs/elements/OpenApi3-1.cjs +75 -0
  22. package/cjs/elements/Openapi.cjs +8 -0
  23. package/cjs/elements/Operation.cjs +15 -0
  24. package/cjs/elements/Parameter.cjs +15 -0
  25. package/cjs/elements/PathItem.cjs +57 -0
  26. package/cjs/elements/Paths.cjs +8 -0
  27. package/cjs/elements/Reference.cjs +26 -0
  28. package/cjs/elements/RequestBody.cjs +8 -0
  29. package/cjs/elements/Response.cjs +8 -0
  30. package/cjs/elements/Responses.cjs +8 -0
  31. package/cjs/elements/Schema.cjs +473 -0
  32. package/cjs/elements/SecurityRequirement.cjs +8 -0
  33. package/cjs/elements/SecurityScheme.cjs +8 -0
  34. package/cjs/elements/Server.cjs +8 -0
  35. package/cjs/elements/ServerVariable.cjs +8 -0
  36. package/cjs/elements/Tag.cjs +8 -0
  37. package/cjs/elements/Xml.cjs +8 -0
  38. package/cjs/elements/nces/ComponentsPathItems.cjs +14 -0
  39. package/cjs/elements/nces/Webhooks.cjs +14 -0
  40. package/cjs/index.cjs +151 -0
  41. package/cjs/media-types.cjs +24 -0
  42. package/cjs/namespace.cjs +80 -0
  43. package/cjs/predicates.cjs +271 -0
  44. package/cjs/refractor/index.cjs +48 -0
  45. package/cjs/refractor/plugins/normalize-header-examples.cjs +77 -0
  46. package/cjs/refractor/plugins/normalize-operation-ids.cjs +140 -0
  47. package/cjs/refractor/plugins/normalize-parameter-examples.cjs +77 -0
  48. package/cjs/refractor/plugins/normalize-parameters.cjs +77 -0
  49. package/cjs/refractor/plugins/normalize-security-requirements.cjs +53 -0
  50. package/cjs/refractor/plugins/normalize-servers.cjs +83 -0
  51. package/cjs/refractor/plugins/replace-empty-element.cjs +672 -0
  52. package/cjs/refractor/predicates.cjs +11 -0
  53. package/cjs/refractor/registration.cjs +102 -0
  54. package/cjs/refractor/specification.cjs +557 -0
  55. package/cjs/refractor/toolbox.cjs +26 -0
  56. package/cjs/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.cjs +21 -0
  57. package/cjs/refractor/visitors/open-api-3-1/WebhooksVisitor.cjs +39 -0
  58. package/cjs/refractor/visitors/open-api-3-1/callback/index.cjs +44 -0
  59. package/cjs/refractor/visitors/open-api-3-1/components/PathItemsVisitor.cjs +32 -0
  60. package/cjs/refractor/visitors/open-api-3-1/components/SchemasVisitor.cjs +18 -0
  61. package/cjs/refractor/visitors/open-api-3-1/components/index.cjs +26 -0
  62. package/cjs/refractor/visitors/open-api-3-1/contact/index.cjs +26 -0
  63. package/cjs/refractor/visitors/open-api-3-1/distriminator/index.cjs +29 -0
  64. package/cjs/refractor/visitors/open-api-3-1/encoding/index.cjs +26 -0
  65. package/cjs/refractor/visitors/open-api-3-1/example/index.cjs +26 -0
  66. package/cjs/refractor/visitors/open-api-3-1/external-documentation/index.cjs +26 -0
  67. package/cjs/refractor/visitors/open-api-3-1/header/index.cjs +26 -0
  68. package/cjs/refractor/visitors/open-api-3-1/index.cjs +30 -0
  69. package/cjs/refractor/visitors/open-api-3-1/info/SummaryVisitor.cjs +8 -0
  70. package/cjs/refractor/visitors/open-api-3-1/info/index.cjs +26 -0
  71. package/cjs/refractor/visitors/open-api-3-1/license/IdentifierVisitor.cjs +8 -0
  72. package/cjs/refractor/visitors/open-api-3-1/license/index.cjs +26 -0
  73. package/cjs/refractor/visitors/open-api-3-1/link/index.cjs +26 -0
  74. package/cjs/refractor/visitors/open-api-3-1/media-type/index.cjs +26 -0
  75. package/cjs/refractor/visitors/open-api-3-1/oauth-flow/index.cjs +26 -0
  76. package/cjs/refractor/visitors/open-api-3-1/oauth-flows/index.cjs +26 -0
  77. package/cjs/refractor/visitors/open-api-3-1/operation/index.cjs +26 -0
  78. package/cjs/refractor/visitors/open-api-3-1/parameter/index.cjs +26 -0
  79. package/cjs/refractor/visitors/open-api-3-1/path-item/index.cjs +26 -0
  80. package/cjs/refractor/visitors/open-api-3-1/paths/index.cjs +26 -0
  81. package/cjs/refractor/visitors/open-api-3-1/reference/DescriptionVisitor.cjs +8 -0
  82. package/cjs/refractor/visitors/open-api-3-1/reference/SummaryVisitor.cjs +8 -0
  83. package/cjs/refractor/visitors/open-api-3-1/reference/index.cjs +26 -0
  84. package/cjs/refractor/visitors/open-api-3-1/request-body/index.cjs +26 -0
  85. package/cjs/refractor/visitors/open-api-3-1/response/index.cjs +26 -0
  86. package/cjs/refractor/visitors/open-api-3-1/responses/index.cjs +26 -0
  87. package/cjs/refractor/visitors/open-api-3-1/schema/$anchorVisitor.cjs +8 -0
  88. package/cjs/refractor/visitors/open-api-3-1/schema/$commentVisitor.cjs +8 -0
  89. package/cjs/refractor/visitors/open-api-3-1/schema/$defsVisitor.cjs +21 -0
  90. package/cjs/refractor/visitors/open-api-3-1/schema/$dynamicAnchorVisitor.cjs +8 -0
  91. package/cjs/refractor/visitors/open-api-3-1/schema/$dynamicRefVisitor.cjs +8 -0
  92. package/cjs/refractor/visitors/open-api-3-1/schema/$idVisitor.cjs +8 -0
  93. package/cjs/refractor/visitors/open-api-3-1/schema/$refVisitor.cjs +19 -0
  94. package/cjs/refractor/visitors/open-api-3-1/schema/$schemaVisitor.cjs +8 -0
  95. package/cjs/refractor/visitors/open-api-3-1/schema/$vocabularyVisitor.cjs +19 -0
  96. package/cjs/refractor/visitors/open-api-3-1/schema/AllOfVisitor.cjs +32 -0
  97. package/cjs/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.cjs +32 -0
  98. package/cjs/refractor/visitors/open-api-3-1/schema/ConstVisitor.cjs +8 -0
  99. package/cjs/refractor/visitors/open-api-3-1/schema/ContentEncodingVisitor.cjs +8 -0
  100. package/cjs/refractor/visitors/open-api-3-1/schema/ContentMediaTypeVisitor.cjs +8 -0
  101. package/cjs/refractor/visitors/open-api-3-1/schema/DefaultVisitor.cjs +8 -0
  102. package/cjs/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.cjs +19 -0
  103. package/cjs/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.cjs +21 -0
  104. package/cjs/refractor/visitors/open-api-3-1/schema/DeprecatedVisitor.cjs +8 -0
  105. package/cjs/refractor/visitors/open-api-3-1/schema/DescriptionVisitor.cjs +8 -0
  106. package/cjs/refractor/visitors/open-api-3-1/schema/EnumVisitor.cjs +19 -0
  107. package/cjs/refractor/visitors/open-api-3-1/schema/ExampleVisitor.cjs +8 -0
  108. package/cjs/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.cjs +19 -0
  109. package/cjs/refractor/visitors/open-api-3-1/schema/ExclusiveMaximumVisitor.cjs +8 -0
  110. package/cjs/refractor/visitors/open-api-3-1/schema/ExclusiveMinimumVisitor.cjs +8 -0
  111. package/cjs/refractor/visitors/open-api-3-1/schema/FormatVisitor.cjs +8 -0
  112. package/cjs/refractor/visitors/open-api-3-1/schema/MaxContainsVisitor.cjs +8 -0
  113. package/cjs/refractor/visitors/open-api-3-1/schema/MaxItemsVisitor.cjs +8 -0
  114. package/cjs/refractor/visitors/open-api-3-1/schema/MaxLengthVisitor.cjs +8 -0
  115. package/cjs/refractor/visitors/open-api-3-1/schema/MaxPropertiesVisitor.cjs +8 -0
  116. package/cjs/refractor/visitors/open-api-3-1/schema/MaximumVisitor.cjs +8 -0
  117. package/cjs/refractor/visitors/open-api-3-1/schema/MinContainsVisitor.cjs +8 -0
  118. package/cjs/refractor/visitors/open-api-3-1/schema/MinItemsVisitor.cjs +8 -0
  119. package/cjs/refractor/visitors/open-api-3-1/schema/MinLengthVisitor.cjs +8 -0
  120. package/cjs/refractor/visitors/open-api-3-1/schema/MinPropertiesVisitor.cjs +8 -0
  121. package/cjs/refractor/visitors/open-api-3-1/schema/MinimumVisitor.cjs +8 -0
  122. package/cjs/refractor/visitors/open-api-3-1/schema/MultipleOfVisitor.cjs +8 -0
  123. package/cjs/refractor/visitors/open-api-3-1/schema/OneOfVisitor.cjs +32 -0
  124. package/cjs/refractor/visitors/open-api-3-1/schema/ParentSchemaAwareVisitor.cjs +20 -0
  125. package/cjs/refractor/visitors/open-api-3-1/schema/PatternProperties.cjs +21 -0
  126. package/cjs/refractor/visitors/open-api-3-1/schema/PatternVisitor.cjs +8 -0
  127. package/cjs/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.cjs +32 -0
  128. package/cjs/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.cjs +22 -0
  129. package/cjs/refractor/visitors/open-api-3-1/schema/ReadOnlyVisitor.cjs +8 -0
  130. package/cjs/refractor/visitors/open-api-3-1/schema/RequiredVisitor.cjs +19 -0
  131. package/cjs/refractor/visitors/open-api-3-1/schema/TitleVisitor.cjs +8 -0
  132. package/cjs/refractor/visitors/open-api-3-1/schema/TypeVisitor.cjs +24 -0
  133. package/cjs/refractor/visitors/open-api-3-1/schema/UniqueItemsVisitor.cjs +8 -0
  134. package/cjs/refractor/visitors/open-api-3-1/schema/WriteOnlyVisitor.cjs +8 -0
  135. package/cjs/refractor/visitors/open-api-3-1/schema/index.cjs +100 -0
  136. package/cjs/refractor/visitors/open-api-3-1/security-requirement/index.cjs +26 -0
  137. package/cjs/refractor/visitors/open-api-3-1/security-scheme/index.cjs +26 -0
  138. package/cjs/refractor/visitors/open-api-3-1/server/index.cjs +26 -0
  139. package/cjs/refractor/visitors/open-api-3-1/server-variable/index.cjs +26 -0
  140. package/cjs/refractor/visitors/open-api-3-1/tag/index.cjs +26 -0
  141. package/cjs/refractor/visitors/open-api-3-1/xml/index.cjs +26 -0
  142. package/cjs/traversal/visitor.cjs +55 -0
  143. package/dist/apidom-ns-openapi-3-1.browser.js +46188 -0
  144. package/dist/apidom-ns-openapi-3-1.browser.min.js +1 -0
  145. package/es/elements/Callback.js +3 -0
  146. package/es/elements/Components.js +10 -0
  147. package/es/elements/Contact.js +3 -0
  148. package/es/elements/Discriminator.js +3 -0
  149. package/es/elements/Encoding.js +3 -0
  150. package/es/elements/Example.js +3 -0
  151. package/es/elements/ExternalDocumentation.js +3 -0
  152. package/es/elements/Header.js +10 -0
  153. package/es/elements/Info.js +16 -0
  154. package/es/elements/JsonSchemaDialect.js +10 -0
  155. package/es/elements/License.js +10 -0
  156. package/es/elements/Link.js +3 -0
  157. package/es/elements/MediaType.js +10 -0
  158. package/es/elements/OAuthFlow.js +3 -0
  159. package/es/elements/OAuthFlows.js +3 -0
  160. package/es/elements/OpenApi3-1.js +70 -0
  161. package/es/elements/Openapi.js +3 -0
  162. package/es/elements/Operation.js +10 -0
  163. package/es/elements/Parameter.js +10 -0
  164. package/es/elements/PathItem.js +52 -0
  165. package/es/elements/Paths.js +3 -0
  166. package/es/elements/Reference.js +21 -0
  167. package/es/elements/RequestBody.js +3 -0
  168. package/es/elements/Response.js +3 -0
  169. package/es/elements/Responses.js +3 -0
  170. package/es/elements/Schema.js +468 -0
  171. package/es/elements/SecurityRequirement.js +3 -0
  172. package/es/elements/SecurityScheme.js +3 -0
  173. package/es/elements/Server.js +3 -0
  174. package/es/elements/ServerVariable.js +3 -0
  175. package/es/elements/Tag.js +3 -0
  176. package/es/elements/Xml.js +3 -0
  177. package/es/elements/nces/ComponentsPathItems.js +10 -0
  178. package/es/elements/nces/Webhooks.js +10 -0
  179. package/es/index.js +19 -0
  180. package/es/media-types.js +18 -0
  181. package/es/namespace.js +73 -0
  182. package/es/predicates.js +237 -0
  183. package/es/refractor/index.js +43 -0
  184. package/es/refractor/plugins/normalize-header-examples.js +73 -0
  185. package/es/refractor/plugins/normalize-operation-ids.js +136 -0
  186. package/es/refractor/plugins/normalize-parameter-examples.js +73 -0
  187. package/es/refractor/plugins/normalize-parameters.js +73 -0
  188. package/es/refractor/plugins/normalize-security-requirements.js +49 -0
  189. package/es/refractor/plugins/normalize-servers.js +79 -0
  190. package/es/refractor/plugins/replace-empty-element.js +664 -0
  191. package/es/refractor/predicates.js +7 -0
  192. package/es/refractor/registration.js +66 -0
  193. package/es/refractor/specification.js +551 -0
  194. package/es/refractor/toolbox.js +20 -0
  195. package/es/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.js +15 -0
  196. package/es/refractor/visitors/open-api-3-1/WebhooksVisitor.js +33 -0
  197. package/es/refractor/visitors/open-api-3-1/callback/index.js +38 -0
  198. package/es/refractor/visitors/open-api-3-1/components/PathItemsVisitor.js +26 -0
  199. package/es/refractor/visitors/open-api-3-1/components/SchemasVisitor.js +12 -0
  200. package/es/refractor/visitors/open-api-3-1/components/index.js +20 -0
  201. package/es/refractor/visitors/open-api-3-1/contact/index.js +20 -0
  202. package/es/refractor/visitors/open-api-3-1/distriminator/index.js +23 -0
  203. package/es/refractor/visitors/open-api-3-1/encoding/index.js +20 -0
  204. package/es/refractor/visitors/open-api-3-1/example/index.js +20 -0
  205. package/es/refractor/visitors/open-api-3-1/external-documentation/index.js +20 -0
  206. package/es/refractor/visitors/open-api-3-1/header/index.js +20 -0
  207. package/es/refractor/visitors/open-api-3-1/index.js +23 -0
  208. package/es/refractor/visitors/open-api-3-1/info/SummaryVisitor.js +3 -0
  209. package/es/refractor/visitors/open-api-3-1/info/index.js +20 -0
  210. package/es/refractor/visitors/open-api-3-1/license/IdentifierVisitor.js +3 -0
  211. package/es/refractor/visitors/open-api-3-1/license/index.js +20 -0
  212. package/es/refractor/visitors/open-api-3-1/link/index.js +20 -0
  213. package/es/refractor/visitors/open-api-3-1/media-type/index.js +20 -0
  214. package/es/refractor/visitors/open-api-3-1/oauth-flow/index.js +20 -0
  215. package/es/refractor/visitors/open-api-3-1/oauth-flows/index.js +20 -0
  216. package/es/refractor/visitors/open-api-3-1/operation/index.js +20 -0
  217. package/es/refractor/visitors/open-api-3-1/parameter/index.js +20 -0
  218. package/es/refractor/visitors/open-api-3-1/path-item/index.js +20 -0
  219. package/es/refractor/visitors/open-api-3-1/paths/index.js +20 -0
  220. package/es/refractor/visitors/open-api-3-1/reference/DescriptionVisitor.js +3 -0
  221. package/es/refractor/visitors/open-api-3-1/reference/SummaryVisitor.js +3 -0
  222. package/es/refractor/visitors/open-api-3-1/reference/index.js +20 -0
  223. package/es/refractor/visitors/open-api-3-1/request-body/index.js +20 -0
  224. package/es/refractor/visitors/open-api-3-1/response/index.js +20 -0
  225. package/es/refractor/visitors/open-api-3-1/responses/index.js +20 -0
  226. package/es/refractor/visitors/open-api-3-1/schema/$anchorVisitor.js +3 -0
  227. package/es/refractor/visitors/open-api-3-1/schema/$commentVisitor.js +3 -0
  228. package/es/refractor/visitors/open-api-3-1/schema/$defsVisitor.js +15 -0
  229. package/es/refractor/visitors/open-api-3-1/schema/$dynamicAnchorVisitor.js +3 -0
  230. package/es/refractor/visitors/open-api-3-1/schema/$dynamicRefVisitor.js +3 -0
  231. package/es/refractor/visitors/open-api-3-1/schema/$idVisitor.js +3 -0
  232. package/es/refractor/visitors/open-api-3-1/schema/$refVisitor.js +13 -0
  233. package/es/refractor/visitors/open-api-3-1/schema/$schemaVisitor.js +3 -0
  234. package/es/refractor/visitors/open-api-3-1/schema/$vocabularyVisitor.js +13 -0
  235. package/es/refractor/visitors/open-api-3-1/schema/AllOfVisitor.js +26 -0
  236. package/es/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.js +26 -0
  237. package/es/refractor/visitors/open-api-3-1/schema/ConstVisitor.js +3 -0
  238. package/es/refractor/visitors/open-api-3-1/schema/ContentEncodingVisitor.js +3 -0
  239. package/es/refractor/visitors/open-api-3-1/schema/ContentMediaTypeVisitor.js +3 -0
  240. package/es/refractor/visitors/open-api-3-1/schema/DefaultVisitor.js +3 -0
  241. package/es/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.js +13 -0
  242. package/es/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.js +15 -0
  243. package/es/refractor/visitors/open-api-3-1/schema/DeprecatedVisitor.js +3 -0
  244. package/es/refractor/visitors/open-api-3-1/schema/DescriptionVisitor.js +3 -0
  245. package/es/refractor/visitors/open-api-3-1/schema/EnumVisitor.js +13 -0
  246. package/es/refractor/visitors/open-api-3-1/schema/ExampleVisitor.js +3 -0
  247. package/es/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.js +13 -0
  248. package/es/refractor/visitors/open-api-3-1/schema/ExclusiveMaximumVisitor.js +3 -0
  249. package/es/refractor/visitors/open-api-3-1/schema/ExclusiveMinimumVisitor.js +3 -0
  250. package/es/refractor/visitors/open-api-3-1/schema/FormatVisitor.js +3 -0
  251. package/es/refractor/visitors/open-api-3-1/schema/MaxContainsVisitor.js +3 -0
  252. package/es/refractor/visitors/open-api-3-1/schema/MaxItemsVisitor.js +3 -0
  253. package/es/refractor/visitors/open-api-3-1/schema/MaxLengthVisitor.js +3 -0
  254. package/es/refractor/visitors/open-api-3-1/schema/MaxPropertiesVisitor.js +3 -0
  255. package/es/refractor/visitors/open-api-3-1/schema/MaximumVisitor.js +3 -0
  256. package/es/refractor/visitors/open-api-3-1/schema/MinContainsVisitor.js +3 -0
  257. package/es/refractor/visitors/open-api-3-1/schema/MinItemsVisitor.js +3 -0
  258. package/es/refractor/visitors/open-api-3-1/schema/MinLengthVisitor.js +3 -0
  259. package/es/refractor/visitors/open-api-3-1/schema/MinPropertiesVisitor.js +3 -0
  260. package/es/refractor/visitors/open-api-3-1/schema/MinimumVisitor.js +3 -0
  261. package/es/refractor/visitors/open-api-3-1/schema/MultipleOfVisitor.js +3 -0
  262. package/es/refractor/visitors/open-api-3-1/schema/OneOfVisitor.js +26 -0
  263. package/es/refractor/visitors/open-api-3-1/schema/ParentSchemaAwareVisitor.js +14 -0
  264. package/es/refractor/visitors/open-api-3-1/schema/PatternProperties.js +15 -0
  265. package/es/refractor/visitors/open-api-3-1/schema/PatternVisitor.js +3 -0
  266. package/es/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.js +26 -0
  267. package/es/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.js +16 -0
  268. package/es/refractor/visitors/open-api-3-1/schema/ReadOnlyVisitor.js +3 -0
  269. package/es/refractor/visitors/open-api-3-1/schema/RequiredVisitor.js +13 -0
  270. package/es/refractor/visitors/open-api-3-1/schema/TitleVisitor.js +3 -0
  271. package/es/refractor/visitors/open-api-3-1/schema/TypeVisitor.js +18 -0
  272. package/es/refractor/visitors/open-api-3-1/schema/UniqueItemsVisitor.js +3 -0
  273. package/es/refractor/visitors/open-api-3-1/schema/WriteOnlyVisitor.js +3 -0
  274. package/es/refractor/visitors/open-api-3-1/schema/index.js +94 -0
  275. package/es/refractor/visitors/open-api-3-1/security-requirement/index.js +20 -0
  276. package/es/refractor/visitors/open-api-3-1/security-scheme/index.js +20 -0
  277. package/es/refractor/visitors/open-api-3-1/server/index.js +20 -0
  278. package/es/refractor/visitors/open-api-3-1/server-variable/index.js +20 -0
  279. package/es/refractor/visitors/open-api-3-1/tag/index.js +20 -0
  280. package/es/refractor/visitors/open-api-3-1/xml/index.js +20 -0
  281. package/es/traversal/visitor.js +53 -0
  282. package/package.json +66 -0
  283. package/types/dist.d.ts +701 -0
@@ -0,0 +1,237 @@
1
+ import { createPredicate, isBooleanElement, isStringElement } from '@swagger-api/apidom-core';
2
+ import CallbackElement from "./elements/Callback.js";
3
+ import ComponentsElement from "./elements/Components.js";
4
+ import ContactElement from "./elements/Contact.js";
5
+ import ExampleElement from "./elements/Example.js";
6
+ import ExternalDocumentationElement from "./elements/ExternalDocumentation.js";
7
+ import HeaderElement from "./elements/Header.js";
8
+ import InfoElement from "./elements/Info.js";
9
+ import JsonSchemaDialectElement from "./elements/JsonSchemaDialect.js";
10
+ import LicenseElement from "./elements/License.js";
11
+ import LinkElement from "./elements/Link.js";
12
+ import OpenapiElement from "./elements/Openapi.js";
13
+ import OpenApi3_1Element from "./elements/OpenApi3-1.js";
14
+ import OperationElement from "./elements/Operation.js";
15
+ import ParameterElement from "./elements/Parameter.js";
16
+ import PathItemElement from "./elements/PathItem.js";
17
+ import PathsElement from "./elements/Paths.js";
18
+ import ReferenceElement from "./elements/Reference.js";
19
+ import RequestBodyElement from "./elements/RequestBody.js";
20
+ import ResponseElement from "./elements/Response.js";
21
+ import ResponsesElement from "./elements/Responses.js";
22
+ import SchemaElement from "./elements/Schema.js";
23
+ import SecurityRequirementElement from "./elements/SecurityRequirement.js";
24
+ import ServerElement from "./elements/Server.js";
25
+ import ServerVariableElement from "./elements/ServerVariable.js";
26
+ import MediaTypeElement from "./elements/MediaType.js";
27
+ export const isCallbackElement = createPredicate(({
28
+ hasBasicElementProps,
29
+ isElementType,
30
+ primitiveEq
31
+ }) => {
32
+ return element => element instanceof CallbackElement || hasBasicElementProps(element) && isElementType('callback', element) && primitiveEq('object', element);
33
+ });
34
+ export const isComponentsElement = createPredicate(({
35
+ hasBasicElementProps,
36
+ isElementType,
37
+ primitiveEq
38
+ }) => {
39
+ return element => element instanceof ComponentsElement || hasBasicElementProps(element) && isElementType('components', element) && primitiveEq('object', element);
40
+ });
41
+ export const isContactElement = createPredicate(({
42
+ hasBasicElementProps,
43
+ isElementType,
44
+ primitiveEq
45
+ }) => {
46
+ return element => element instanceof ContactElement || hasBasicElementProps(element) && isElementType('contact', element) && primitiveEq('object', element);
47
+ });
48
+ export const isExampleElement = createPredicate(({
49
+ hasBasicElementProps,
50
+ isElementType,
51
+ primitiveEq
52
+ }) => {
53
+ return element => element instanceof ExampleElement || hasBasicElementProps(element) && isElementType('example', element) && primitiveEq('object', element);
54
+ });
55
+ export const isExternalDocumentationElement = createPredicate(({
56
+ hasBasicElementProps,
57
+ isElementType,
58
+ primitiveEq
59
+ }) => {
60
+ return element => element instanceof ExternalDocumentationElement || hasBasicElementProps(element) && isElementType('externalDocumentation', element) && primitiveEq('object', element);
61
+ });
62
+ export const isHeaderElement = createPredicate(({
63
+ hasBasicElementProps,
64
+ isElementType,
65
+ primitiveEq
66
+ }) => {
67
+ return element => element instanceof HeaderElement || hasBasicElementProps(element) && isElementType('header', element) && primitiveEq('object', element);
68
+ });
69
+ export const isInfoElement = createPredicate(({
70
+ hasBasicElementProps,
71
+ isElementType,
72
+ primitiveEq
73
+ }) => {
74
+ return element => element instanceof InfoElement || hasBasicElementProps(element) && isElementType('info', element) && primitiveEq('object', element);
75
+ });
76
+ export const isJsonSchemaDialectElement = createPredicate(({
77
+ hasBasicElementProps,
78
+ isElementType,
79
+ primitiveEq
80
+ }) => {
81
+ return element => element instanceof JsonSchemaDialectElement || hasBasicElementProps(element) && isElementType('jsonSchemaDialect', element) && primitiveEq('string', element);
82
+ });
83
+ export const isLicenseElement = createPredicate(({
84
+ hasBasicElementProps,
85
+ isElementType,
86
+ primitiveEq
87
+ }) => {
88
+ return element => element instanceof LicenseElement || hasBasicElementProps(element) && isElementType('license', element) && primitiveEq('object', element);
89
+ });
90
+ export const isLinkElement = createPredicate(({
91
+ hasBasicElementProps,
92
+ isElementType,
93
+ primitiveEq
94
+ }) => {
95
+ return element => element instanceof LinkElement || hasBasicElementProps(element) && isElementType('link', element) && primitiveEq('object', element);
96
+ });
97
+ export const isLinkElementExternal = element => {
98
+ if (!isLinkElement(element)) {
99
+ return false;
100
+ }
101
+ if (!isStringElement(element.operationRef)) {
102
+ return false;
103
+ }
104
+ const value = element.operationRef.toValue();
105
+ return typeof value === 'string' && value.length > 0 && !value.startsWith('#');
106
+ };
107
+ export const isOpenapiElement = createPredicate(({
108
+ hasBasicElementProps,
109
+ isElementType,
110
+ primitiveEq
111
+ }) => {
112
+ return element => element instanceof OpenapiElement || hasBasicElementProps(element) && isElementType('openapi', element) && primitiveEq('string', element);
113
+ });
114
+
115
+ // eslint-disable-next-line @typescript-eslint/naming-convention
116
+ export const isOpenApi3_1Element = createPredicate(({
117
+ hasBasicElementProps,
118
+ isElementType,
119
+ primitiveEq,
120
+ hasClass
121
+ }) => {
122
+ return element => element instanceof OpenApi3_1Element || hasBasicElementProps(element) && isElementType('openApi3_1', element) && primitiveEq('object', element) && hasClass('api', element);
123
+ });
124
+ export const isOperationElement = createPredicate(({
125
+ hasBasicElementProps,
126
+ isElementType,
127
+ primitiveEq
128
+ }) => {
129
+ return element => element instanceof OperationElement || hasBasicElementProps(element) && isElementType('operation', element) && primitiveEq('object', element);
130
+ });
131
+ export const isParameterElement = createPredicate(({
132
+ hasBasicElementProps,
133
+ isElementType,
134
+ primitiveEq
135
+ }) => {
136
+ return element => element instanceof ParameterElement || hasBasicElementProps(element) && isElementType('parameter', element) && primitiveEq('object', element);
137
+ });
138
+ export const isPathItemElement = createPredicate(({
139
+ hasBasicElementProps,
140
+ isElementType,
141
+ primitiveEq
142
+ }) => {
143
+ return element => element instanceof PathItemElement || hasBasicElementProps(element) && isElementType('pathItem', element) && primitiveEq('object', element);
144
+ });
145
+ export const isPathItemElementExternal = element => {
146
+ if (!isPathItemElement(element)) {
147
+ return false;
148
+ }
149
+ if (!isStringElement(element.$ref)) {
150
+ return false;
151
+ }
152
+ const value = element.$ref.toValue();
153
+ return typeof value === 'string' && value.length > 0 && !value.startsWith('#');
154
+ };
155
+ export const isPathsElement = createPredicate(({
156
+ hasBasicElementProps,
157
+ isElementType,
158
+ primitiveEq
159
+ }) => {
160
+ return element => element instanceof PathsElement || hasBasicElementProps(element) && isElementType('paths', element) && primitiveEq('object', element);
161
+ });
162
+ export const isReferenceElement = createPredicate(({
163
+ hasBasicElementProps,
164
+ isElementType,
165
+ primitiveEq
166
+ }) => {
167
+ return element => element instanceof ReferenceElement || hasBasicElementProps(element) && isElementType('reference', element) && primitiveEq('object', element);
168
+ });
169
+ export const isReferenceElementExternal = element => {
170
+ if (!isReferenceElement(element)) {
171
+ return false;
172
+ }
173
+ if (!isStringElement(element.$ref)) {
174
+ return false;
175
+ }
176
+ const value = element.$ref.toValue();
177
+ return typeof value === 'string' && value.length > 0 && !value.startsWith('#');
178
+ };
179
+ export const isRequestBodyElement = createPredicate(({
180
+ hasBasicElementProps,
181
+ isElementType,
182
+ primitiveEq
183
+ }) => {
184
+ return element => element instanceof RequestBodyElement || hasBasicElementProps(element) && isElementType('requestBody', element) && primitiveEq('object', element);
185
+ });
186
+ export const isResponseElement = createPredicate(({
187
+ hasBasicElementProps,
188
+ isElementType,
189
+ primitiveEq
190
+ }) => {
191
+ return element => element instanceof ResponseElement || hasBasicElementProps(element) && isElementType('response', element) && primitiveEq('object', element);
192
+ });
193
+ export const isResponsesElement = createPredicate(({
194
+ hasBasicElementProps,
195
+ isElementType,
196
+ primitiveEq
197
+ }) => {
198
+ return element => element instanceof ResponsesElement || hasBasicElementProps(element) && isElementType('responses', element) && primitiveEq('object', element);
199
+ });
200
+ export const isSchemaElement = createPredicate(({
201
+ hasBasicElementProps,
202
+ isElementType,
203
+ primitiveEq
204
+ }) => {
205
+ return element => element instanceof SchemaElement || hasBasicElementProps(element) && isElementType('schema', element) && primitiveEq('object', element);
206
+ });
207
+ export const isBooleanJsonSchemaElement = element => {
208
+ return isBooleanElement(element) && element.classes.includes('boolean-json-schema');
209
+ };
210
+ export const isSecurityRequirementElement = createPredicate(({
211
+ hasBasicElementProps,
212
+ isElementType,
213
+ primitiveEq
214
+ }) => {
215
+ return element => element instanceof SecurityRequirementElement || hasBasicElementProps(element) && isElementType('securityRequirement', element) && primitiveEq('object', element);
216
+ });
217
+ export const isServerElement = createPredicate(({
218
+ hasBasicElementProps,
219
+ isElementType,
220
+ primitiveEq
221
+ }) => {
222
+ return element => element instanceof ServerElement || hasBasicElementProps(element) && isElementType('server', element) && primitiveEq('object', element);
223
+ });
224
+ export const isServerVariableElement = createPredicate(({
225
+ hasBasicElementProps,
226
+ isElementType,
227
+ primitiveEq
228
+ }) => {
229
+ return element => element instanceof ServerVariableElement || hasBasicElementProps(element) && isElementType('serverVariable', element) && primitiveEq('object', element);
230
+ });
231
+ export const isMediaTypeElement = createPredicate(({
232
+ hasBasicElementProps,
233
+ isElementType,
234
+ primitiveEq
235
+ }) => {
236
+ return element => element instanceof MediaTypeElement || hasBasicElementProps(element) && isElementType('mediaType', element) && primitiveEq('object', element);
237
+ });
@@ -0,0 +1,43 @@
1
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
2
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+ import { invokeArgs } from 'ramda-adjunct';
5
+ import { visit, dereference, refract as baseRefract, dispatchRefractorPlugins } from '@swagger-api/apidom-core';
6
+ import specification from "./specification.js";
7
+ import { keyMap, getNodeType } from "../traversal/visitor.js";
8
+ import createToolbox from "./toolbox.js";
9
+ const refract = (value, {
10
+ specPath = ['visitors', 'document', 'objects', 'OpenApi', '$visitor'],
11
+ plugins = []
12
+ } = {}) => {
13
+ const element = baseRefract(value);
14
+ const resolvedSpec = dereference(specification);
15
+
16
+ /**
17
+ * This is where generic ApiDOM becomes semantic (namespace applied).
18
+ * We don't allow consumers to hook into this translation.
19
+ * Though we allow consumers to define their onw plugins on already transformed ApiDOM.
20
+ */
21
+ const rootVisitor = invokeArgs(specPath, [], resolvedSpec);
22
+ // @ts-ignore
23
+ visit(element, rootVisitor, {
24
+ state: {
25
+ specObj: resolvedSpec
26
+ }
27
+ });
28
+
29
+ /**
30
+ * Running plugins visitors means extra single traversal === performance hit.
31
+ */
32
+ return dispatchRefractorPlugins(rootVisitor.element, plugins, {
33
+ toolboxCreator: createToolbox,
34
+ visitorOptions: {
35
+ keyMap,
36
+ nodeTypeGetter: getNodeType
37
+ }
38
+ });
39
+ };
40
+ export const createRefractor = specPath => (value, options = {}) => refract(value, _objectSpread({
41
+ specPath
42
+ }, options));
43
+ export default refract;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Override of Schema.example and Schema.examples field inside the Header Objects.
3
+ *
4
+ * Header Object has two fixed fields:
5
+ * - `example` of type `Any`
6
+ * - `examples` of type `Map[string, Example Object | Reference Object]`
7
+ *
8
+ * OpenAPI 3.1 specification excerpt that defines the override behavior:
9
+ *
10
+ * The example value SHALL override the example provided by the schema.
11
+ * Furthermore, if referencing a schema that contains an example, the examples value SHALL override the example provided by the schema.
12
+ */
13
+ /* eslint-disable no-param-reassign */
14
+ const plugin = () => ({
15
+ predicates
16
+ }) => {
17
+ return {
18
+ visitor: {
19
+ HeaderElement: {
20
+ leave(headerElement, key, parent, path, ancestors) {
21
+ var _headerElement$schema, _headerElement$schema2;
22
+ // skip visiting this Header Object
23
+ if (ancestors.some(predicates.isComponentsElement)) {
24
+ return;
25
+ }
26
+
27
+ // no Header.schema field present
28
+ if (typeof headerElement.schema === 'undefined' || !predicates.isSchemaElement(headerElement.schema)) {
29
+ return;
30
+ }
31
+ // Schema contains no example
32
+ if (typeof ((_headerElement$schema = headerElement.schema) === null || _headerElement$schema === void 0 ? void 0 : _headerElement$schema.example) === 'undefined' && typeof ((_headerElement$schema2 = headerElement.schema) === null || _headerElement$schema2 === void 0 ? void 0 : _headerElement$schema2.examples) === 'undefined') {
33
+ return;
34
+ }
35
+
36
+ /**
37
+ * Header.examples and Schema.examples have preferences over the older
38
+ * and deprected `example` field.
39
+ */
40
+ if (typeof headerElement.examples !== 'undefined' && predicates.isObjectElement(headerElement.examples)) {
41
+ // @ts-ignore
42
+ const examples = headerElement.examples.map(example => {
43
+ var _example$value;
44
+ return (_example$value = example.value) === null || _example$value === void 0 ? void 0 : _example$value.clone();
45
+ });
46
+ if (typeof headerElement.schema.examples !== 'undefined') {
47
+ headerElement.schema.set('examples', examples);
48
+ }
49
+ if (typeof headerElement.schema.example !== 'undefined') {
50
+ headerElement.schema.set('example', examples);
51
+ }
52
+ return;
53
+ }
54
+
55
+ /**
56
+ * Handle deprecated `example` field.
57
+ */
58
+ if (typeof headerElement.example !== 'undefined') {
59
+ if (typeof headerElement.schema.examples !== 'undefined') {
60
+ headerElement.schema.set('examples', [headerElement.example.clone()]);
61
+ }
62
+ if (typeof headerElement.schema.example !== 'undefined') {
63
+ headerElement.schema.set('example', headerElement.example.clone());
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ };
70
+ };
71
+ /* eslint-enable */
72
+
73
+ export default plugin;
@@ -0,0 +1,136 @@
1
+ import { last, defaultTo, groupBy } from 'ramda';
2
+ import { toValue } from '@swagger-api/apidom-core';
3
+ const removeSpaces = operationId => {
4
+ return operationId.replace(/\s/g, '');
5
+ };
6
+ const replaceSpecialCharsWithUnderscore = operationId => {
7
+ return operationId.replace(/\W/gi, '_');
8
+ };
9
+ const createNormalizedOperationId = (path, method) => {
10
+ const normalizedMethod = replaceSpecialCharsWithUnderscore(removeSpaces(method.toLowerCase()));
11
+ const normalizedPath = replaceSpecialCharsWithUnderscore(removeSpaces(path));
12
+ return `${normalizedMethod}${normalizedPath}`;
13
+ };
14
+ const normalizeOperationId = (operationId, path, method) => {
15
+ const withoutSpaces = removeSpaces(operationId);
16
+ if (withoutSpaces.length > 0) {
17
+ return replaceSpecialCharsWithUnderscore(withoutSpaces);
18
+ }
19
+ return createNormalizedOperationId(path, method);
20
+ };
21
+
22
+ /**
23
+ * Normalization of Operation.operationId field.
24
+ *
25
+ * This normalization is not guided by OpenAPI 3.1 specification.
26
+ *
27
+ * Existing Operation.operationId fields are normalized into snake case form.
28
+ *
29
+ * Operation Objects, that do not define operationId field, are left untouched.
30
+ *
31
+ * Original operationId is stored in meta and as new `__originalOperationId` field.
32
+ *
33
+ * This plugin also guarantees the uniqueness of all defined Operation.operationId fields,
34
+ * and make sure Link.operationId fields are pointing to correct and normalized Operation.operationId fields.
35
+ *
36
+ */
37
+ /* eslint-disable no-param-reassign */
38
+
39
+ const plugin = ({
40
+ operationIdNormalizer = normalizeOperationId
41
+ } = {}) => ({
42
+ predicates,
43
+ namespace
44
+ }) => {
45
+ const paths = [];
46
+ const normalizedOperations = [];
47
+ const links = [];
48
+ return {
49
+ visitor: {
50
+ OpenApi3_1Element: {
51
+ leave() {
52
+ // group normalized operations by normalized operationId
53
+ const normalizedOperationGroups = groupBy(operationElement => {
54
+ return toValue(operationElement.operationId);
55
+ }, normalizedOperations);
56
+
57
+ // append incremental numerical suffixes to identical operationIds
58
+ Object.entries(normalizedOperationGroups).forEach(([normalizedOperationId, operationElements]) => {
59
+ if (operationElements.length <= 1) return;
60
+ operationElements.forEach((operationElement, index) => {
61
+ const indexedNormalizedOperationId = `${normalizedOperationId}${index + 1}`;
62
+ // @ts-ignore
63
+ operationElement.operationId = new namespace.elements.String(indexedNormalizedOperationId);
64
+ });
65
+ });
66
+
67
+ // rectify possibly broken Link.operationId fields
68
+ links.forEach(linkElement => {
69
+ var _operationElement$ope;
70
+ if (typeof linkElement.operationId === 'undefined') return;
71
+ const linkOperationId = String(toValue(linkElement.operationId));
72
+ const operationElement = normalizedOperations.find(normalizedOperationElement => {
73
+ const originalOperationId = toValue(normalizedOperationElement.meta.get('originalOperationId'));
74
+ return originalOperationId === linkOperationId;
75
+ });
76
+
77
+ // Link Object doesn't need to be rectified
78
+ if (typeof operationElement === 'undefined') return;
79
+ linkElement.operationId = (_operationElement$ope = operationElement.operationId) === null || _operationElement$ope === void 0 ? void 0 : _operationElement$ope.clone();
80
+ linkElement.meta.set('originalOperationId', linkOperationId);
81
+ linkElement.set('__originalOperationId', linkOperationId);
82
+ });
83
+
84
+ // cleanup the references
85
+ normalizedOperations.length = 0;
86
+ links.length = 0;
87
+ }
88
+ },
89
+ PathItemElement: {
90
+ enter(pathItemElement) {
91
+ // `path` meta may not be always available, e.g. in Callback Object or Components Object
92
+ const path = defaultTo('path', toValue(pathItemElement.meta.get('path')));
93
+ paths.push(path);
94
+ },
95
+ leave() {
96
+ paths.pop();
97
+ }
98
+ },
99
+ OperationElement: {
100
+ enter(operationElement) {
101
+ // operationId field is undefined, needs no normalization
102
+ if (typeof operationElement.operationId === 'undefined') return;
103
+
104
+ // cast operationId to string type
105
+ const originalOperationId = String(toValue(operationElement.operationId));
106
+ // perform operationId normalization
107
+ const path = last(paths);
108
+ // `http-method` meta may not be always available, e.g. in Callback Object or Components Object
109
+ const method = defaultTo('method', toValue(operationElement.meta.get('http-method')));
110
+ const normalizedOperationId = operationIdNormalizer(originalOperationId, path, method);
111
+
112
+ // normalization is not necessary
113
+ if (originalOperationId === normalizedOperationId) return;
114
+
115
+ // @ts-ignore
116
+ operationElement.operationId = new namespace.elements.String(normalizedOperationId);
117
+ operationElement.set('__originalOperationId', originalOperationId);
118
+ operationElement.meta.set('originalOperationId', originalOperationId);
119
+ normalizedOperations.push(operationElement);
120
+ }
121
+ },
122
+ LinkElement: {
123
+ leave(linkElement) {
124
+ // make sure this Link elements doesn't come from base namespace
125
+ if (!predicates.isLinkElement(linkElement)) return;
126
+ // ignore Link Objects with undefined operationId
127
+ if (typeof linkElement.operationId === 'undefined') return;
128
+ links.push(linkElement);
129
+ }
130
+ }
131
+ }
132
+ };
133
+ };
134
+ /* eslint-enable */
135
+
136
+ export default plugin;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Override of Schema.example and Schema.examples field inside the Parameter Objects.
3
+ *
4
+ * Parameter Object has two fixed fields:
5
+ * - `example` of type `Any`
6
+ * - `examples` of type `Map[string, Example Object | Reference Object]`
7
+ *
8
+ * OpenAPI 3.1 specification excerpt that defines the override behavior:
9
+ *
10
+ * The example value SHALL override the example provided by the schema.
11
+ * Furthermore, if referencing a schema that contains an example, the examples value SHALL override the example provided by the schema.
12
+ */
13
+ /* eslint-disable no-param-reassign */
14
+ const plugin = () => ({
15
+ predicates
16
+ }) => {
17
+ return {
18
+ visitor: {
19
+ ParameterElement: {
20
+ leave(parameterElement, key, parent, path, ancestors) {
21
+ var _parameterElement$sch, _parameterElement$sch2;
22
+ // skip visiting this Parameter Object
23
+ if (ancestors.some(predicates.isComponentsElement)) {
24
+ return;
25
+ }
26
+
27
+ // no Parameter.schema field present
28
+ if (typeof parameterElement.schema === 'undefined' || !predicates.isSchemaElement(parameterElement.schema)) {
29
+ return;
30
+ }
31
+ // Schema contains no example
32
+ if (typeof ((_parameterElement$sch = parameterElement.schema) === null || _parameterElement$sch === void 0 ? void 0 : _parameterElement$sch.example) === 'undefined' && typeof ((_parameterElement$sch2 = parameterElement.schema) === null || _parameterElement$sch2 === void 0 ? void 0 : _parameterElement$sch2.examples) === 'undefined') {
33
+ return;
34
+ }
35
+
36
+ /**
37
+ * Parameter.examples and Schema.examples have preferences over the older
38
+ * and deprected `example` field.
39
+ */
40
+ if (typeof parameterElement.examples !== 'undefined' && predicates.isObjectElement(parameterElement.examples)) {
41
+ // @ts-ignore
42
+ const examples = parameterElement.examples.map(example => {
43
+ var _example$value;
44
+ return (_example$value = example.value) === null || _example$value === void 0 ? void 0 : _example$value.clone();
45
+ });
46
+ if (typeof parameterElement.schema.examples !== 'undefined') {
47
+ parameterElement.schema.set('examples', examples);
48
+ }
49
+ if (typeof parameterElement.schema.example !== 'undefined') {
50
+ parameterElement.schema.set('example', examples);
51
+ }
52
+ return;
53
+ }
54
+
55
+ /**
56
+ * Handle deprecated `example` field.
57
+ */
58
+ if (typeof parameterElement.example !== 'undefined') {
59
+ if (typeof parameterElement.schema.examples !== 'undefined') {
60
+ parameterElement.schema.set('examples', [parameterElement.example.clone()]);
61
+ }
62
+ if (typeof parameterElement.schema.example !== 'undefined') {
63
+ parameterElement.schema.set('example', parameterElement.example.clone());
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ };
70
+ };
71
+ /* eslint-enable */
72
+
73
+ export default plugin;
@@ -0,0 +1,73 @@
1
+ import { uniqWith, pathOr, last } from 'ramda';
2
+ import { toValue } from '@swagger-api/apidom-core';
3
+ import { OperationParametersElement } from '@swagger-api/apidom-ns-openapi-3-0';
4
+ /**
5
+ * Inheritance of Parameter Objects.
6
+ *
7
+ * OpenAPI 3.1 specification excerpt that defines the inheritance behavior:
8
+ *
9
+ * A list of parameters that are applicable for this operation. If a parameter is already defined at the Path Item,
10
+ * the new definition will override it but can never remove it. The list MUST NOT include duplicated parameters.
11
+ * A unique parameter is defined by a combination of a name and location.
12
+ */
13
+ /* eslint-disable no-param-reassign */
14
+ const plugin = () => ({
15
+ predicates
16
+ }) => {
17
+ /**
18
+ * Establishes identity between two Parameter Objects.
19
+ *
20
+ * {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#user-content-operationparameters}
21
+ */
22
+ const parameterEquals = (parameter1, parameter2) => {
23
+ if (!predicates.isParameterElement(parameter1)) return false;
24
+ if (!predicates.isParameterElement(parameter2)) return false;
25
+ if (!predicates.isStringElement(parameter1.name)) return false;
26
+ if (!predicates.isStringElement(parameter1.in)) return false;
27
+ if (!predicates.isStringElement(parameter2.name)) return false;
28
+ if (!predicates.isStringElement(parameter2.in)) return false;
29
+ return toValue(parameter1.name) === toValue(parameter2.name) && toValue(parameter1.in) === toValue(parameter2.in);
30
+ };
31
+ const pathItemParameters = [];
32
+ return {
33
+ visitor: {
34
+ PathItemElement: {
35
+ enter(pathItemElement, key, parent, path, ancestors) {
36
+ // skip visiting this Path Item
37
+ if (ancestors.some(predicates.isComponentsElement)) {
38
+ return;
39
+ }
40
+ const {
41
+ parameters
42
+ } = pathItemElement;
43
+ if (predicates.isArrayElement(parameters)) {
44
+ pathItemParameters.push([...parameters.content]);
45
+ } else {
46
+ pathItemParameters.push([]);
47
+ }
48
+ },
49
+ leave() {
50
+ pathItemParameters.pop();
51
+ }
52
+ },
53
+ OperationElement: {
54
+ leave(operationElement) {
55
+ const parentPathItemParameters = last(pathItemParameters);
56
+
57
+ // no Path Item Object parameters to inherit from
58
+ if (!Array.isArray(parentPathItemParameters) || parentPathItemParameters.length === 0) {
59
+ return;
60
+ }
61
+ const operationParameters = pathOr([], ['parameters', 'content'], operationElement);
62
+
63
+ // prefers the first item if two items compare equal based on the predicate
64
+ const mergedParameters = uniqWith(parameterEquals, [...operationParameters, ...parentPathItemParameters]);
65
+ operationElement.parameters = new OperationParametersElement(mergedParameters);
66
+ }
67
+ }
68
+ }
69
+ };
70
+ };
71
+ /* eslint-enable */
72
+
73
+ export default plugin;