@skmtc/core 0.29.0 → 0.31.0

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 (409) hide show
  1. package/esm/_dnt.polyfills.d.ts +11 -0
  2. package/esm/_dnt.polyfills.js +14 -0
  3. package/esm/context/ParseContext.js +9 -1
  4. package/esm/context/generateTypes.d.ts +14 -2
  5. package/esm/context/generateTypes.js +5 -1
  6. package/esm/dsl/GeneratorKeys.d.ts +2 -2
  7. package/esm/dsl/GeneratorKeys.js +6 -3
  8. package/esm/helpers/naming.d.ts +2 -1
  9. package/esm/helpers/naming.js +4 -2
  10. package/esm/mod.d.ts +1 -0
  11. package/esm/mod.js +1 -0
  12. package/esm/oas/discriminator/Discriminator.d.ts +3 -0
  13. package/esm/oas/discriminator/Discriminator.js +7 -0
  14. package/esm/oas/document/Document.d.ts +7 -0
  15. package/esm/oas/document/Document.js +8 -0
  16. package/esm/oas/example/Example.d.ts +10 -1
  17. package/esm/oas/example/Example.js +16 -0
  18. package/esm/oas/header/Header.d.ts +4 -2
  19. package/esm/oas/header/Header.js +12 -5
  20. package/esm/oas/mediaType/MediaType.d.ts +12 -0
  21. package/esm/oas/mediaType/MediaType.js +24 -0
  22. package/esm/oas/mediaType/jsonMediaType.d.ts +50 -0
  23. package/esm/oas/mediaType/jsonMediaType.js +64 -0
  24. package/esm/oas/mediaType/toContentSchema.d.ts +8 -0
  25. package/esm/oas/mediaType/toContentSchema.js +6 -0
  26. package/esm/oas/operation/Operation.d.ts +10 -2
  27. package/esm/oas/operation/Operation.js +20 -7
  28. package/esm/oas/parameter/Parameter.d.ts +3 -2
  29. package/esm/oas/parameter/Parameter.js +11 -5
  30. package/esm/oas/parameter/parameter-types.d.ts +10 -2
  31. package/esm/oas/parameter/parameter-types.js +3 -1
  32. package/esm/oas/requestBody/RequestBody.d.ts +11 -0
  33. package/esm/oas/requestBody/RequestBody.js +16 -2
  34. package/esm/oas/response/Response.d.ts +17 -1
  35. package/esm/oas/response/Response.js +24 -2
  36. package/esm/oas/securitySchemes/SecurityScheme.d.ts +47 -4
  37. package/esm/oas/securitySchemes/SecurityScheme.js +46 -1
  38. package/esm/oas/securitySchemes/security-scheme-types.d.ts +21 -0
  39. package/esm/oas/server/Server.d.ts +8 -2
  40. package/esm/oas/server/Server.js +10 -1
  41. package/esm/oas/tag/Tag.d.ts +9 -0
  42. package/esm/oas/tag/Tag.js +9 -0
  43. package/esm/oas/webhook/Webhook.d.ts +4 -4
  44. package/esm/oas/webhook/Webhook.js +6 -6
  45. package/esm/parse/logBodyMediaTypes.d.ts +27 -0
  46. package/esm/parse/logBodyMediaTypes.js +50 -0
  47. package/esm/parse/toOasDialect.d.ts +8 -7
  48. package/esm/parse/toOasDialect.js +4 -2
  49. package/esm/parse/v3-0/methods.d.ts +11 -0
  50. package/esm/parse/v3-0/methods.js +16 -0
  51. package/esm/parse/v3-0/operation/toOperationsV3.js +5 -5
  52. package/esm/parse/v3-0/parameter/toParameterV3.d.ts +4 -2
  53. package/esm/parse/v3-0/parameter/toParameterV3.js +17 -3
  54. package/esm/parse/v3-0/requestBody/toRequestBodiesV3.js +4 -1
  55. package/esm/parse/v3-0/response/toResponseV3.js +4 -1
  56. package/esm/parse/v3-0/securitySchemes/toSecuritySchemes.js +50 -38
  57. package/esm/parse/v3-0/webhook/toWebhooksV3.js +5 -5
  58. package/esm/parse/v3-1/methods.d.ts +11 -0
  59. package/esm/parse/v3-1/methods.js +16 -0
  60. package/esm/parse/v3-1/operation/toOperationsV3.js +5 -5
  61. package/esm/parse/v3-1/parameter/toParameterV3.d.ts +4 -2
  62. package/esm/parse/v3-1/parameter/toParameterV3.js +17 -3
  63. package/esm/parse/v3-1/requestBody/toRequestBodiesV3.js +4 -1
  64. package/esm/parse/v3-1/response/toResponseV3.js +4 -1
  65. package/esm/parse/v3-1/securitySchemes/toSecuritySchemes.js +50 -38
  66. package/esm/parse/v3-1/webhook/toWebhooksV3.js +5 -5
  67. package/esm/parse/v3-2/_helpers/parseDefault.d.ts +43 -0
  68. package/esm/parse/v3-2/_helpers/parseDefault.js +39 -0
  69. package/esm/parse/v3-2/_helpers/parseEnum.d.ts +13 -0
  70. package/esm/parse/v3-2/_helpers/parseEnum.js +23 -0
  71. package/esm/parse/v3-2/_helpers/parseExample.d.ts +41 -0
  72. package/esm/parse/v3-2/_helpers/parseExample.js +37 -0
  73. package/esm/parse/v3-2/_helpers/parseNullable.d.ts +141 -0
  74. package/esm/parse/v3-2/_helpers/parseNullable.js +140 -0
  75. package/esm/parse/v3-2/_merge-all-of/check-array-item-type-conflicts.d.ts +2 -0
  76. package/esm/parse/v3-2/_merge-all-of/check-array-item-type-conflicts.js +9 -0
  77. package/esm/parse/v3-2/_merge-all-of/check-at-least-one-type-match.d.ts +4 -0
  78. package/esm/parse/v3-2/_merge-all-of/check-at-least-one-type-match.js +5 -0
  79. package/esm/parse/v3-2/_merge-all-of/check-enum-conflicts.d.ts +2 -0
  80. package/esm/parse/v3-2/_merge-all-of/check-enum-conflicts.js +11 -0
  81. package/esm/parse/v3-2/_merge-all-of/check-format-conflicts.d.ts +2 -0
  82. package/esm/parse/v3-2/_merge-all-of/check-format-conflicts.js +5 -0
  83. package/esm/parse/v3-2/_merge-all-of/check-number-constraints-conflicts.d.ts +2 -0
  84. package/esm/parse/v3-2/_merge-all-of/check-number-constraints-conflicts.js +11 -0
  85. package/esm/parse/v3-2/_merge-all-of/check-read-only-write-only-conflicts.d.ts +2 -0
  86. package/esm/parse/v3-2/_merge-all-of/check-read-only-write-only-conflicts.js +5 -0
  87. package/esm/parse/v3-2/_merge-all-of/check-type-conflicts.d.ts +2 -0
  88. package/esm/parse/v3-2/_merge-all-of/check-type-conflicts.js +5 -0
  89. package/esm/parse/v3-2/_merge-all-of/cross-product.d.ts +2 -0
  90. package/esm/parse/v3-2/_merge-all-of/cross-product.js +3 -0
  91. package/esm/parse/v3-2/_merge-all-of/decompose-intersection.d.ts +6 -0
  92. package/esm/parse/v3-2/_merge-all-of/decompose-intersection.js +27 -0
  93. package/esm/parse/v3-2/_merge-all-of/decompose-union.d.ts +12 -0
  94. package/esm/parse/v3-2/_merge-all-of/decompose-union.js +69 -0
  95. package/esm/parse/v3-2/_merge-all-of/generic-merge.d.ts +3 -0
  96. package/esm/parse/v3-2/_merge-all-of/generic-merge.js +12 -0
  97. package/esm/parse/v3-2/_merge-all-of/is-equal.d.ts +1 -0
  98. package/esm/parse/v3-2/_merge-all-of/is-equal.js +19 -0
  99. package/esm/parse/v3-2/_merge-all-of/merge-array-constraints.d.ts +2 -0
  100. package/esm/parse/v3-2/_merge-all-of/merge-array-constraints.js +44 -0
  101. package/esm/parse/v3-2/_merge-all-of/merge-boolean-constraints.d.ts +3 -0
  102. package/esm/parse/v3-2/_merge-all-of/merge-boolean-constraints.js +7 -0
  103. package/esm/parse/v3-2/_merge-all-of/merge-enum-values.d.ts +3 -0
  104. package/esm/parse/v3-2/_merge-all-of/merge-enum-values.js +32 -0
  105. package/esm/parse/v3-2/_merge-all-of/merge-integer-constraints.d.ts +3 -0
  106. package/esm/parse/v3-2/_merge-all-of/merge-integer-constraints.js +41 -0
  107. package/esm/parse/v3-2/_merge-all-of/merge-intersection.d.ts +8 -0
  108. package/esm/parse/v3-2/_merge-all-of/merge-intersection.js +16 -0
  109. package/esm/parse/v3-2/_merge-all-of/merge-number-constraints.d.ts +3 -0
  110. package/esm/parse/v3-2/_merge-all-of/merge-number-constraints.js +41 -0
  111. package/esm/parse/v3-2/_merge-all-of/merge-object-constraints.d.ts +5 -0
  112. package/esm/parse/v3-2/_merge-all-of/merge-object-constraints.js +28 -0
  113. package/esm/parse/v3-2/_merge-all-of/merge-properties.d.ts +2 -0
  114. package/esm/parse/v3-2/_merge-all-of/merge-properties.js +25 -0
  115. package/esm/parse/v3-2/_merge-all-of/merge-required.d.ts +3 -0
  116. package/esm/parse/v3-2/_merge-all-of/merge-required.js +10 -0
  117. package/esm/parse/v3-2/_merge-all-of/merge-string-constraints.d.ts +3 -0
  118. package/esm/parse/v3-2/_merge-all-of/merge-string-constraints.js +55 -0
  119. package/esm/parse/v3-2/_merge-all-of/merge-union.d.ts +15 -0
  120. package/esm/parse/v3-2/_merge-all-of/merge-union.js +53 -0
  121. package/esm/parse/v3-2/_merge-all-of/merge.d.ts +2 -0
  122. package/esm/parse/v3-2/_merge-all-of/merge.js +155 -0
  123. package/esm/parse/v3-2/_merge-all-of/nullable-merge.d.ts +3 -0
  124. package/esm/parse/v3-2/_merge-all-of/nullable-merge.js +12 -0
  125. package/esm/parse/v3-2/_merge-all-of/types.d.ts +14 -0
  126. package/esm/parse/v3-2/_merge-all-of/types.js +2 -0
  127. package/esm/parse/v3-2/array/toArray.d.ts +80 -0
  128. package/esm/parse/v3-2/array/toArray.js +165 -0
  129. package/esm/parse/v3-2/boolean/toBoolean.d.ts +78 -0
  130. package/esm/parse/v3-2/boolean/toBoolean.js +139 -0
  131. package/esm/parse/v3-2/components/toComponentsV3.d.ts +14 -0
  132. package/esm/parse/v3-2/components/toComponentsV3.js +43 -0
  133. package/esm/parse/v3-2/contact/toContactV3.d.ts +5 -0
  134. package/esm/parse/v3-2/contact/toContactV3.js +18 -0
  135. package/esm/parse/v3-2/discriminator/toDiscriminatorV3.d.ts +14 -0
  136. package/esm/parse/v3-2/discriminator/toDiscriminatorV3.js +21 -0
  137. package/esm/parse/v3-2/document/toDocumentFieldsV3.d.ts +16 -0
  138. package/esm/parse/v3-2/document/toDocumentFieldsV3.js +33 -0
  139. package/esm/parse/v3-2/example/toExamplesV3.d.ts +77 -0
  140. package/esm/parse/v3-2/example/toExamplesV3.js +143 -0
  141. package/esm/parse/v3-2/externalDocs/toExternalDocs.d.ts +10 -0
  142. package/esm/parse/v3-2/externalDocs/toExternalDocs.js +15 -0
  143. package/esm/parse/v3-2/header/toHeadersV3.d.ts +18 -0
  144. package/esm/parse/v3-2/header/toHeadersV3.js +47 -0
  145. package/esm/parse/v3-2/info/toInfoV3.d.ts +10 -0
  146. package/esm/parse/v3-2/info/toInfoV3.js +23 -0
  147. package/esm/parse/v3-2/integer/toInteger.d.ts +21 -0
  148. package/esm/parse/v3-2/integer/toInteger.js +115 -0
  149. package/esm/parse/v3-2/license/toLicenseV3.d.ts +5 -0
  150. package/esm/parse/v3-2/license/toLicenseV3.js +17 -0
  151. package/esm/parse/v3-2/link/toLinksV3.d.ts +16 -0
  152. package/esm/parse/v3-2/link/toLinksV3.js +40 -0
  153. package/esm/parse/v3-2/mediaType/toMediaTypeItemV3.d.ts +323 -0
  154. package/esm/parse/v3-2/mediaType/toMediaTypeItemV3.js +375 -0
  155. package/esm/parse/v3-2/methods.d.ts +17 -0
  156. package/esm/parse/v3-2/methods.js +21 -0
  157. package/esm/parse/v3-2/number/toNumber.d.ts +10 -0
  158. package/esm/parse/v3-2/number/toNumber.js +115 -0
  159. package/esm/parse/v3-2/object/toAdditionalPropertiesV3.d.ts +11 -0
  160. package/esm/parse/v3-2/object/toAdditionalPropertiesV3.js +10 -0
  161. package/esm/parse/v3-2/object/toObject.d.ts +10 -0
  162. package/esm/parse/v3-2/object/toObject.js +90 -0
  163. package/esm/parse/v3-2/operation/toOperationsV3.d.ts +25 -0
  164. package/esm/parse/v3-2/operation/toOperationsV3.js +129 -0
  165. package/esm/parse/v3-2/parameter/toParameterV3.d.ts +39 -0
  166. package/esm/parse/v3-2/parameter/toParameterV3.js +152 -0
  167. package/esm/parse/v3-2/parameter/warnQuerystringConflictsV3.d.ts +22 -0
  168. package/esm/parse/v3-2/parameter/warnQuerystringConflictsV3.js +39 -0
  169. package/esm/parse/v3-2/pathItem/dropAdditionalOperationsV3.d.ts +17 -0
  170. package/esm/parse/v3-2/pathItem/dropAdditionalOperationsV3.js +34 -0
  171. package/esm/parse/v3-2/pathItem/toPathItemV3.d.ts +23 -0
  172. package/esm/parse/v3-2/pathItem/toPathItemV3.js +45 -0
  173. package/esm/parse/v3-2/ref/toRefV31.d.ts +19 -0
  174. package/esm/parse/v3-2/ref/toRefV31.js +10 -0
  175. package/esm/parse/v3-2/requestBody/toRequestBodiesV3.d.ts +18 -0
  176. package/esm/parse/v3-2/requestBody/toRequestBodiesV3.js +47 -0
  177. package/esm/parse/v3-2/response/toResponseV3.d.ts +29 -0
  178. package/esm/parse/v3-2/response/toResponseV3.js +59 -0
  179. package/esm/parse/v3-2/schema/toSchemasV3.d.ts +29 -0
  180. package/esm/parse/v3-2/schema/toSchemasV3.js +511 -0
  181. package/esm/parse/v3-2/securityRequirement/toSecurityRequirement.d.ts +9 -0
  182. package/esm/parse/v3-2/securityRequirement/toSecurityRequirement.js +9 -0
  183. package/esm/parse/v3-2/securitySchemes/toSecuritySchemes.d.ts +17 -0
  184. package/esm/parse/v3-2/securitySchemes/toSecuritySchemes.js +152 -0
  185. package/esm/parse/v3-2/server/toServerV3.d.ts +26 -0
  186. package/esm/parse/v3-2/server/toServerV3.js +31 -0
  187. package/esm/parse/v3-2/serverVariable/toServerVariableV3.d.ts +22 -0
  188. package/esm/parse/v3-2/serverVariable/toServerVariableV3.js +30 -0
  189. package/esm/parse/v3-2/specificationExtensions/toSpecificationExtensionsV3.d.ts +14 -0
  190. package/esm/parse/v3-2/specificationExtensions/toSpecificationExtensionsV3.js +25 -0
  191. package/esm/parse/v3-2/string/toString.d.ts +146 -0
  192. package/esm/parse/v3-2/string/toString.js +211 -0
  193. package/esm/parse/v3-2/tag/toTagsV3.d.ts +22 -0
  194. package/esm/parse/v3-2/tag/toTagsV3.js +78 -0
  195. package/esm/parse/v3-2/union/toUnion.d.ts +12 -0
  196. package/esm/parse/v3-2/union/toUnion.js +68 -0
  197. package/esm/parse/v3-2/unknown/toUnknown.d.ts +10 -0
  198. package/esm/parse/v3-2/unknown/toUnknown.js +19 -0
  199. package/esm/parse/v3-2/webhook/toWebhooksV3.d.ts +48 -0
  200. package/esm/parse/v3-2/webhook/toWebhooksV3.js +139 -0
  201. package/esm/types/Method.d.ts +7 -4
  202. package/esm/types/Method.js +17 -4
  203. package/esm/types/Preview.d.ts +2 -1
  204. package/esm/types/SkmtcDocument.d.ts +6 -6
  205. package/package.json +1 -1
  206. package/script/_dnt.polyfills.d.ts +11 -0
  207. package/script/_dnt.polyfills.js +14 -0
  208. package/script/context/ParseContext.js +9 -1
  209. package/script/context/generateTypes.d.ts +14 -2
  210. package/script/context/generateTypes.js +5 -1
  211. package/script/dsl/GeneratorKeys.d.ts +2 -2
  212. package/script/dsl/GeneratorKeys.js +6 -3
  213. package/script/helpers/naming.d.ts +2 -1
  214. package/script/helpers/naming.js +4 -2
  215. package/script/mod.d.ts +1 -0
  216. package/script/mod.js +1 -0
  217. package/script/oas/discriminator/Discriminator.d.ts +3 -0
  218. package/script/oas/discriminator/Discriminator.js +7 -0
  219. package/script/oas/document/Document.d.ts +7 -0
  220. package/script/oas/document/Document.js +8 -0
  221. package/script/oas/example/Example.d.ts +10 -1
  222. package/script/oas/example/Example.js +16 -0
  223. package/script/oas/header/Header.d.ts +4 -2
  224. package/script/oas/header/Header.js +12 -5
  225. package/script/oas/mediaType/MediaType.d.ts +12 -0
  226. package/script/oas/mediaType/MediaType.js +24 -0
  227. package/script/oas/mediaType/jsonMediaType.d.ts +50 -0
  228. package/script/oas/mediaType/jsonMediaType.js +71 -0
  229. package/script/oas/mediaType/toContentSchema.d.ts +8 -0
  230. package/script/oas/mediaType/toContentSchema.js +10 -0
  231. package/script/oas/operation/Operation.d.ts +10 -2
  232. package/script/oas/operation/Operation.js +20 -7
  233. package/script/oas/parameter/Parameter.d.ts +3 -2
  234. package/script/oas/parameter/Parameter.js +11 -5
  235. package/script/oas/parameter/parameter-types.d.ts +10 -2
  236. package/script/oas/parameter/parameter-types.js +3 -1
  237. package/script/oas/requestBody/RequestBody.d.ts +11 -0
  238. package/script/oas/requestBody/RequestBody.js +16 -2
  239. package/script/oas/response/Response.d.ts +17 -1
  240. package/script/oas/response/Response.js +24 -2
  241. package/script/oas/securitySchemes/SecurityScheme.d.ts +47 -4
  242. package/script/oas/securitySchemes/SecurityScheme.js +46 -1
  243. package/script/oas/securitySchemes/security-scheme-types.d.ts +21 -0
  244. package/script/oas/server/Server.d.ts +8 -2
  245. package/script/oas/server/Server.js +10 -1
  246. package/script/oas/tag/Tag.d.ts +9 -0
  247. package/script/oas/tag/Tag.js +9 -0
  248. package/script/oas/webhook/Webhook.d.ts +4 -4
  249. package/script/oas/webhook/Webhook.js +6 -6
  250. package/script/parse/logBodyMediaTypes.d.ts +27 -0
  251. package/script/parse/logBodyMediaTypes.js +54 -0
  252. package/script/parse/toOasDialect.d.ts +8 -7
  253. package/script/parse/toOasDialect.js +4 -2
  254. package/script/parse/v3-0/methods.d.ts +11 -0
  255. package/script/parse/v3-0/methods.js +20 -0
  256. package/script/parse/v3-0/operation/toOperationsV3.js +5 -5
  257. package/script/parse/v3-0/parameter/toParameterV3.d.ts +4 -2
  258. package/script/parse/v3-0/parameter/toParameterV3.js +17 -3
  259. package/script/parse/v3-0/requestBody/toRequestBodiesV3.js +4 -1
  260. package/script/parse/v3-0/response/toResponseV3.js +4 -1
  261. package/script/parse/v3-0/securitySchemes/toSecuritySchemes.js +49 -37
  262. package/script/parse/v3-0/webhook/toWebhooksV3.js +5 -5
  263. package/script/parse/v3-1/methods.d.ts +11 -0
  264. package/script/parse/v3-1/methods.js +20 -0
  265. package/script/parse/v3-1/operation/toOperationsV3.js +5 -5
  266. package/script/parse/v3-1/parameter/toParameterV3.d.ts +4 -2
  267. package/script/parse/v3-1/parameter/toParameterV3.js +17 -3
  268. package/script/parse/v3-1/requestBody/toRequestBodiesV3.js +4 -1
  269. package/script/parse/v3-1/response/toResponseV3.js +4 -1
  270. package/script/parse/v3-1/securitySchemes/toSecuritySchemes.js +49 -37
  271. package/script/parse/v3-1/webhook/toWebhooksV3.js +5 -5
  272. package/script/parse/v3-2/_helpers/parseDefault.d.ts +43 -0
  273. package/script/parse/v3-2/_helpers/parseDefault.js +43 -0
  274. package/script/parse/v3-2/_helpers/parseEnum.d.ts +13 -0
  275. package/script/parse/v3-2/_helpers/parseEnum.js +27 -0
  276. package/script/parse/v3-2/_helpers/parseExample.d.ts +41 -0
  277. package/script/parse/v3-2/_helpers/parseExample.js +41 -0
  278. package/script/parse/v3-2/_helpers/parseNullable.d.ts +141 -0
  279. package/script/parse/v3-2/_helpers/parseNullable.js +144 -0
  280. package/script/parse/v3-2/_merge-all-of/check-array-item-type-conflicts.d.ts +2 -0
  281. package/script/parse/v3-2/_merge-all-of/check-array-item-type-conflicts.js +13 -0
  282. package/script/parse/v3-2/_merge-all-of/check-at-least-one-type-match.d.ts +4 -0
  283. package/script/parse/v3-2/_merge-all-of/check-at-least-one-type-match.js +9 -0
  284. package/script/parse/v3-2/_merge-all-of/check-enum-conflicts.d.ts +2 -0
  285. package/script/parse/v3-2/_merge-all-of/check-enum-conflicts.js +15 -0
  286. package/script/parse/v3-2/_merge-all-of/check-format-conflicts.d.ts +2 -0
  287. package/script/parse/v3-2/_merge-all-of/check-format-conflicts.js +9 -0
  288. package/script/parse/v3-2/_merge-all-of/check-number-constraints-conflicts.d.ts +2 -0
  289. package/script/parse/v3-2/_merge-all-of/check-number-constraints-conflicts.js +15 -0
  290. package/script/parse/v3-2/_merge-all-of/check-read-only-write-only-conflicts.d.ts +2 -0
  291. package/script/parse/v3-2/_merge-all-of/check-read-only-write-only-conflicts.js +9 -0
  292. package/script/parse/v3-2/_merge-all-of/check-type-conflicts.d.ts +2 -0
  293. package/script/parse/v3-2/_merge-all-of/check-type-conflicts.js +9 -0
  294. package/script/parse/v3-2/_merge-all-of/cross-product.d.ts +2 -0
  295. package/script/parse/v3-2/_merge-all-of/cross-product.js +7 -0
  296. package/script/parse/v3-2/_merge-all-of/decompose-intersection.d.ts +6 -0
  297. package/script/parse/v3-2/_merge-all-of/decompose-intersection.js +31 -0
  298. package/script/parse/v3-2/_merge-all-of/decompose-union.d.ts +12 -0
  299. package/script/parse/v3-2/_merge-all-of/decompose-union.js +73 -0
  300. package/script/parse/v3-2/_merge-all-of/generic-merge.d.ts +3 -0
  301. package/script/parse/v3-2/_merge-all-of/generic-merge.js +16 -0
  302. package/script/parse/v3-2/_merge-all-of/is-equal.d.ts +1 -0
  303. package/script/parse/v3-2/_merge-all-of/is-equal.js +23 -0
  304. package/script/parse/v3-2/_merge-all-of/merge-array-constraints.d.ts +2 -0
  305. package/script/parse/v3-2/_merge-all-of/merge-array-constraints.js +80 -0
  306. package/script/parse/v3-2/_merge-all-of/merge-boolean-constraints.d.ts +3 -0
  307. package/script/parse/v3-2/_merge-all-of/merge-boolean-constraints.js +43 -0
  308. package/script/parse/v3-2/_merge-all-of/merge-enum-values.d.ts +3 -0
  309. package/script/parse/v3-2/_merge-all-of/merge-enum-values.js +68 -0
  310. package/script/parse/v3-2/_merge-all-of/merge-integer-constraints.d.ts +3 -0
  311. package/script/parse/v3-2/_merge-all-of/merge-integer-constraints.js +77 -0
  312. package/script/parse/v3-2/_merge-all-of/merge-intersection.d.ts +8 -0
  313. package/script/parse/v3-2/_merge-all-of/merge-intersection.js +20 -0
  314. package/script/parse/v3-2/_merge-all-of/merge-number-constraints.d.ts +3 -0
  315. package/script/parse/v3-2/_merge-all-of/merge-number-constraints.js +77 -0
  316. package/script/parse/v3-2/_merge-all-of/merge-object-constraints.d.ts +5 -0
  317. package/script/parse/v3-2/_merge-all-of/merge-object-constraints.js +65 -0
  318. package/script/parse/v3-2/_merge-all-of/merge-properties.d.ts +2 -0
  319. package/script/parse/v3-2/_merge-all-of/merge-properties.js +29 -0
  320. package/script/parse/v3-2/_merge-all-of/merge-required.d.ts +3 -0
  321. package/script/parse/v3-2/_merge-all-of/merge-required.js +15 -0
  322. package/script/parse/v3-2/_merge-all-of/merge-string-constraints.d.ts +3 -0
  323. package/script/parse/v3-2/_merge-all-of/merge-string-constraints.js +91 -0
  324. package/script/parse/v3-2/_merge-all-of/merge-union.d.ts +15 -0
  325. package/script/parse/v3-2/_merge-all-of/merge-union.js +58 -0
  326. package/script/parse/v3-2/_merge-all-of/merge.d.ts +2 -0
  327. package/script/parse/v3-2/_merge-all-of/merge.js +159 -0
  328. package/script/parse/v3-2/_merge-all-of/nullable-merge.d.ts +3 -0
  329. package/script/parse/v3-2/_merge-all-of/nullable-merge.js +17 -0
  330. package/script/parse/v3-2/_merge-all-of/types.d.ts +14 -0
  331. package/script/parse/v3-2/_merge-all-of/types.js +38 -0
  332. package/script/parse/v3-2/array/toArray.d.ts +80 -0
  333. package/script/parse/v3-2/array/toArray.js +203 -0
  334. package/script/parse/v3-2/boolean/toBoolean.d.ts +78 -0
  335. package/script/parse/v3-2/boolean/toBoolean.js +177 -0
  336. package/script/parse/v3-2/components/toComponentsV3.d.ts +14 -0
  337. package/script/parse/v3-2/components/toComponentsV3.js +47 -0
  338. package/script/parse/v3-2/contact/toContactV3.d.ts +5 -0
  339. package/script/parse/v3-2/contact/toContactV3.js +22 -0
  340. package/script/parse/v3-2/discriminator/toDiscriminatorV3.d.ts +14 -0
  341. package/script/parse/v3-2/discriminator/toDiscriminatorV3.js +25 -0
  342. package/script/parse/v3-2/document/toDocumentFieldsV3.d.ts +16 -0
  343. package/script/parse/v3-2/document/toDocumentFieldsV3.js +37 -0
  344. package/script/parse/v3-2/example/toExamplesV3.d.ts +77 -0
  345. package/script/parse/v3-2/example/toExamplesV3.js +149 -0
  346. package/script/parse/v3-2/externalDocs/toExternalDocs.d.ts +10 -0
  347. package/script/parse/v3-2/externalDocs/toExternalDocs.js +52 -0
  348. package/script/parse/v3-2/header/toHeadersV3.d.ts +18 -0
  349. package/script/parse/v3-2/header/toHeadersV3.js +51 -0
  350. package/script/parse/v3-2/info/toInfoV3.d.ts +10 -0
  351. package/script/parse/v3-2/info/toInfoV3.js +27 -0
  352. package/script/parse/v3-2/integer/toInteger.d.ts +21 -0
  353. package/script/parse/v3-2/integer/toInteger.js +153 -0
  354. package/script/parse/v3-2/license/toLicenseV3.d.ts +5 -0
  355. package/script/parse/v3-2/license/toLicenseV3.js +21 -0
  356. package/script/parse/v3-2/link/toLinksV3.d.ts +16 -0
  357. package/script/parse/v3-2/link/toLinksV3.js +44 -0
  358. package/script/parse/v3-2/mediaType/toMediaTypeItemV3.d.ts +323 -0
  359. package/script/parse/v3-2/mediaType/toMediaTypeItemV3.js +381 -0
  360. package/script/parse/v3-2/methods.d.ts +17 -0
  361. package/script/parse/v3-2/methods.js +25 -0
  362. package/script/parse/v3-2/number/toNumber.d.ts +10 -0
  363. package/script/parse/v3-2/number/toNumber.js +152 -0
  364. package/script/parse/v3-2/object/toAdditionalPropertiesV3.d.ts +11 -0
  365. package/script/parse/v3-2/object/toAdditionalPropertiesV3.js +14 -0
  366. package/script/parse/v3-2/object/toObject.d.ts +10 -0
  367. package/script/parse/v3-2/object/toObject.js +94 -0
  368. package/script/parse/v3-2/operation/toOperationsV3.d.ts +25 -0
  369. package/script/parse/v3-2/operation/toOperationsV3.js +134 -0
  370. package/script/parse/v3-2/parameter/toParameterV3.d.ts +39 -0
  371. package/script/parse/v3-2/parameter/toParameterV3.js +191 -0
  372. package/script/parse/v3-2/parameter/warnQuerystringConflictsV3.d.ts +22 -0
  373. package/script/parse/v3-2/parameter/warnQuerystringConflictsV3.js +43 -0
  374. package/script/parse/v3-2/pathItem/dropAdditionalOperationsV3.d.ts +17 -0
  375. package/script/parse/v3-2/pathItem/dropAdditionalOperationsV3.js +38 -0
  376. package/script/parse/v3-2/pathItem/toPathItemV3.d.ts +23 -0
  377. package/script/parse/v3-2/pathItem/toPathItemV3.js +50 -0
  378. package/script/parse/v3-2/ref/toRefV31.d.ts +19 -0
  379. package/script/parse/v3-2/ref/toRefV31.js +14 -0
  380. package/script/parse/v3-2/requestBody/toRequestBodiesV3.d.ts +18 -0
  381. package/script/parse/v3-2/requestBody/toRequestBodiesV3.js +52 -0
  382. package/script/parse/v3-2/response/toResponseV3.d.ts +29 -0
  383. package/script/parse/v3-2/response/toResponseV3.js +65 -0
  384. package/script/parse/v3-2/schema/toSchemasV3.d.ts +29 -0
  385. package/script/parse/v3-2/schema/toSchemasV3.js +518 -0
  386. package/script/parse/v3-2/securityRequirement/toSecurityRequirement.d.ts +9 -0
  387. package/script/parse/v3-2/securityRequirement/toSecurityRequirement.js +13 -0
  388. package/script/parse/v3-2/securitySchemes/toSecuritySchemes.d.ts +17 -0
  389. package/script/parse/v3-2/securitySchemes/toSecuritySchemes.js +189 -0
  390. package/script/parse/v3-2/server/toServerV3.d.ts +26 -0
  391. package/script/parse/v3-2/server/toServerV3.js +37 -0
  392. package/script/parse/v3-2/serverVariable/toServerVariableV3.d.ts +22 -0
  393. package/script/parse/v3-2/serverVariable/toServerVariableV3.js +36 -0
  394. package/script/parse/v3-2/specificationExtensions/toSpecificationExtensionsV3.d.ts +14 -0
  395. package/script/parse/v3-2/specificationExtensions/toSpecificationExtensionsV3.js +30 -0
  396. package/script/parse/v3-2/string/toString.d.ts +146 -0
  397. package/script/parse/v3-2/string/toString.js +249 -0
  398. package/script/parse/v3-2/tag/toTagsV3.d.ts +22 -0
  399. package/script/parse/v3-2/tag/toTagsV3.js +83 -0
  400. package/script/parse/v3-2/union/toUnion.d.ts +12 -0
  401. package/script/parse/v3-2/union/toUnion.js +72 -0
  402. package/script/parse/v3-2/unknown/toUnknown.d.ts +10 -0
  403. package/script/parse/v3-2/unknown/toUnknown.js +23 -0
  404. package/script/parse/v3-2/webhook/toWebhooksV3.d.ts +48 -0
  405. package/script/parse/v3-2/webhook/toWebhooksV3.js +144 -0
  406. package/script/types/Method.d.ts +7 -4
  407. package/script/types/Method.js +17 -4
  408. package/script/types/Preview.d.ts +2 -1
  409. package/script/types/SkmtcDocument.d.ts +6 -6
@@ -0,0 +1,59 @@
1
+ import { toRefV31 } from '../ref/toRefV31.js';
2
+ import { toHeadersV3 } from '../header/toHeadersV3.js';
3
+ import { toLinksV3 } from '../link/toLinksV3.js';
4
+ import { isRef } from '../../../helpers/refFns.js';
5
+ import { toOptionalMediaTypeItemsV3 } from '../mediaType/toMediaTypeItemV3.js';
6
+ import { OasResponse } from '../../../oas/response/Response.js';
7
+ import { toSpecificationExtensionsV3 } from '../specificationExtensions/toSpecificationExtensionsV3.js';
8
+ import { tryParseAt } from '../../../context/tryParseAt.js';
9
+ import { logBodyMediaTypes } from '../../logBodyMediaTypes.js';
10
+ export const toResponsesV3 = ({ responses, stackTrail, context }) => {
11
+ const output = {};
12
+ const entries = Object.entries(responses);
13
+ for (const [key, value] of entries) {
14
+ const parsed = tryParseAt({
15
+ stackTrail,
16
+ key,
17
+ context,
18
+ type: 'INVALID_RESPONSE',
19
+ parent: value,
20
+ fn: st => toResponseV3({ response: value, stackTrail: st, context })
21
+ });
22
+ if (parsed !== undefined) {
23
+ output[key] = parsed;
24
+ }
25
+ }
26
+ return output;
27
+ };
28
+ export const toOptionalResponsesV3 = ({ responses, stackTrail, context }) => {
29
+ if (!responses) {
30
+ return undefined;
31
+ }
32
+ return toResponsesV3({ responses, stackTrail, context });
33
+ };
34
+ export const toResponseV3 = ({ response, stackTrail, context }) => {
35
+ if (isRef(response)) {
36
+ return toRefV31({ ref: response, refType: 'response', stackTrail, context });
37
+ }
38
+ const { summary, description, headers, links, content, ...skipped } = response;
39
+ const extensionFields = toSpecificationExtensionsV3({
40
+ skipped,
41
+ parent: response,
42
+ context,
43
+ stackTrail,
44
+ parentType: 'response'
45
+ });
46
+ const parsedHeaders = stackTrail.trace('headers', st => toHeadersV3({ headers, stackTrail: st, context }));
47
+ const parsedLinks = stackTrail.trace('links', st => toLinksV3({ links, stackTrail: st, context }));
48
+ const parsedContent = stackTrail.trace('content', st => toOptionalMediaTypeItemsV3({ content, stackTrail: st, context }));
49
+ const parsed = context.withStackTrail(stackTrail, () => new OasResponse({
50
+ summary,
51
+ description,
52
+ headers: parsedHeaders,
53
+ links: parsedLinks,
54
+ content: parsedContent,
55
+ extensionFields
56
+ }, context));
57
+ logBodyMediaTypes({ content: parsedContent, stackTrail, context });
58
+ return parsed;
59
+ };
@@ -0,0 +1,29 @@
1
+ import type { ParseContextType } from '../../../context/parseTypes.js';
2
+ import type { OpenAPIV3 } from 'openapi-types';
3
+ import type { OasSchema } from '../../../oas/schema/Schema.js';
4
+ import type { OasRef } from '../../../oas/ref/Ref.js';
5
+ import type { StackTrail } from '../../../context/StackTrail.js';
6
+ export type ToSchemasV3Args = {
7
+ schemas: Record<string, OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject>;
8
+ stackTrail: StackTrail;
9
+ context: ParseContextType;
10
+ };
11
+ export declare const toSchemasV3: ({ schemas, stackTrail, context }: ToSchemasV3Args) => Record<string, OasSchema | OasRef<"schema">>;
12
+ export type ToOptionalSchemasV3Args = {
13
+ schemas: Record<string, OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject> | undefined;
14
+ stackTrail: StackTrail;
15
+ context: ParseContextType;
16
+ };
17
+ export declare const toOptionalSchemasV3: ({ schemas, stackTrail, context }: ToOptionalSchemasV3Args) => Record<string, OasSchema | OasRef<"schema">> | undefined;
18
+ export type ToSchemaV3Args = {
19
+ schema: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject;
20
+ stackTrail: StackTrail;
21
+ context: ParseContextType;
22
+ };
23
+ export declare const toSchemaV3: ({ schema, stackTrail, context }: ToSchemaV3Args) => OasSchema | OasRef<"schema">;
24
+ export type ToOptionalSchemaV3Args = {
25
+ schema: OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject | undefined;
26
+ stackTrail: StackTrail;
27
+ context: ParseContextType;
28
+ };
29
+ export declare const toOptionalSchemaV3: ({ schema, stackTrail, context }: ToOptionalSchemaV3Args) => OasSchema | OasRef<"schema"> | undefined;
@@ -0,0 +1,511 @@
1
+ import { toRefV31 } from '../ref/toRefV31.js';
2
+ import { isRef } from '../../../helpers/refFns.js';
3
+ import { toArray } from '../array/toArray.js';
4
+ import { toObject } from '../object/toObject.js';
5
+ import { toInteger } from '../integer/toInteger.js';
6
+ import { toNumber } from '../number/toNumber.js';
7
+ import { toBoolean } from '../boolean/toBoolean.js';
8
+ import { toString } from '../string/toString.js';
9
+ import { toUnknown } from '../unknown/toUnknown.js';
10
+ import { toUnion } from '../union/toUnion.js';
11
+ import { toGetRef } from '../../../helpers/refFns.js';
12
+ import { mergeIntersection } from '../_merge-all-of/merge-intersection.js';
13
+ import { mergeUnion } from '../_merge-all-of/merge-union.js';
14
+ import { tryParseAt } from '../../../context/tryParseAt.js';
15
+ export const toSchemasV3 = ({ schemas, stackTrail, context }) => {
16
+ const output = {};
17
+ const entries = Object.entries(schemas);
18
+ for (const [key, schema] of entries) {
19
+ const value = tryParseAt({
20
+ stackTrail,
21
+ key,
22
+ context,
23
+ type: 'INVALID_SCHEMA',
24
+ parent: schema,
25
+ fn: st => toSchemaV3({ schema, stackTrail: st, context })
26
+ });
27
+ if (value !== undefined) {
28
+ output[key] = value;
29
+ }
30
+ }
31
+ return output;
32
+ };
33
+ export const toOptionalSchemasV3 = ({ schemas, stackTrail, context }) => {
34
+ if (!schemas) {
35
+ return undefined;
36
+ }
37
+ return toSchemasV3({ schemas, stackTrail, context });
38
+ };
39
+ /**
40
+ * OpenAPI 3.1 lets a schema's `type` be an ARRAY (e.g. `['string', 'null']`),
41
+ * which the shared IR — modelling a single `type` plus a `nullable` flag —
42
+ * does not. Normalize the array form into shapes the rest of the dispatcher
43
+ * already understands:
44
+ *
45
+ * - `['T', 'null']` (one non-null type) → `{ type: 'T', nullable: true }`
46
+ * - `['T1', 'T2', …]` (several non-null) → a `oneOf` of the bare types,
47
+ * i.e. the 3.1 multi-type union. 3.0 cannot express this — it is the
48
+ * CASE-2 gap where the v3-0 parser degrades to OasUnknown.
49
+ * - `['null']` (only null) → left unchanged → OasUnknown,
50
+ * since there is no first-class OasNull IR node yet (a documented gap).
51
+ *
52
+ * The hoisted `nullable` flag is the IR's representation of nullability; the
53
+ * leaf parsers read it via `parseNullable`. A non-array `type` passes through.
54
+ */
55
+ const normalizeTypeArray = (schema) => {
56
+ const rawType = schema.type;
57
+ if (!Array.isArray(rawType)) {
58
+ return schema;
59
+ }
60
+ const members = rawType.filter(member => member !== 'null');
61
+ const nullable = rawType.length !== members.length || schema.nullable;
62
+ // Only `null` (`type: ['null']`): no OasNull node yet — fall through.
63
+ if (members.length === 0) {
64
+ return schema;
65
+ }
66
+ // Several non-null types: a 3.1 multi-type union. Model it as a `oneOf`
67
+ // of the bare types and let the oneOf branch build the OasUnion.
68
+ if (members.length > 1) {
69
+ const { type: _type, ...rest } = schema;
70
+ return { ...rest, nullable, oneOf: members.map(member => ({ type: member })) };
71
+ }
72
+ // Exactly one non-null type: dispatch as that type, carrying nullability.
73
+ switch (members[0]) {
74
+ case 'object':
75
+ case 'integer':
76
+ case 'number':
77
+ case 'boolean':
78
+ case 'string':
79
+ return { ...schema, type: members[0], nullable };
80
+ case 'array':
81
+ return 'items' in schema ? { ...schema, type: members[0], nullable } : schema;
82
+ default:
83
+ return schema;
84
+ }
85
+ };
86
+ /**
87
+ * OpenAPI 3.1 `const: X` is the single-value form of `enum` (3.0 expresses a
88
+ * literal as a one-element `enum`). Rewrite it so the existing enum-aware leaf
89
+ * parsers handle it; matches down-convert's `convertConstToEnum`, so a 3.0
90
+ * `enum:[X]` and a 3.1 `const:X` land on the same IR.
91
+ */
92
+ const normalizeConst = (schema) => {
93
+ if (!('const' in schema)) {
94
+ return schema;
95
+ }
96
+ // `const` is a 3.1 keyword the 3.0-typed SchemaObject does not model; read
97
+ // it via an annotated destructure rather than a cast.
98
+ const { const: constValue, ...rest } = schema;
99
+ return { ...rest, enum: [constValue] };
100
+ };
101
+ /**
102
+ * OpenAPI 3.1 schemas carry `examples` (an array, JSON Schema 2020-12); 3.0
103
+ * and the IR use a single `example`. Adopt the first array element as the IR
104
+ * `example` when no singular `example` is set, and drop the array. Matches
105
+ * down-convert's `convertJsonSchemaExamples`.
106
+ */
107
+ const normalizeExamples = (schema) => {
108
+ if ('example' in schema || !('examples' in schema)) {
109
+ return schema;
110
+ }
111
+ // `examples` is a 3.1 keyword the 3.0-typed SchemaObject does not model.
112
+ const { examples, ...rest } = schema;
113
+ if (!Array.isArray(examples) || examples.length === 0) {
114
+ return rest;
115
+ }
116
+ return { ...rest, example: examples[0] };
117
+ };
118
+ /**
119
+ * OpenAPI 3.1 expresses exclusive bounds as NUMBERS (`exclusiveMinimum: 5`
120
+ * means "> 5"); the shared IR (and 3.0) model them as a boolean flag paired
121
+ * with `minimum`/`maximum`. Convert the numeric form so the number/integer
122
+ * leaves validate. Matches down-convert's `convertExclusiveMinMax`, so a 3.0
123
+ * `{minimum:5, exclusiveMinimum:true}` and a 3.1 `{exclusiveMinimum:5}` land
124
+ * on the same IR.
125
+ */
126
+ const normalizeExclusiveBounds = (schema) => {
127
+ // `exclusiveMinimum`/`exclusiveMaximum` are 3.0-typed boolean here; in 3.1
128
+ // they arrive as numbers, so read them loosely.
129
+ const exclusiveMinimum = schema.exclusiveMinimum;
130
+ const exclusiveMaximum = schema.exclusiveMaximum;
131
+ if (typeof exclusiveMinimum !== 'number' && typeof exclusiveMaximum !== 'number') {
132
+ return schema;
133
+ }
134
+ const next = { ...schema };
135
+ if (typeof exclusiveMinimum === 'number') {
136
+ next.minimum = exclusiveMinimum;
137
+ next.exclusiveMinimum = true;
138
+ }
139
+ if (typeof exclusiveMaximum === 'number') {
140
+ next.maximum = exclusiveMaximum;
141
+ next.exclusiveMaximum = true;
142
+ }
143
+ return next;
144
+ };
145
+ /**
146
+ * OpenAPI 3.1 / JSON Schema 2020-12 expresses a binary string payload with
147
+ * `contentMediaType: 'application/octet-stream'` and base64 with
148
+ * `contentEncoding: 'base64'`; the shared IR (and 3.0) carry these as a string
149
+ * `format` (`binary` / `byte`, both in the format allow-list). Map them so the
150
+ * format reaches the IR. Mirrors down-convert's
151
+ * `convertJsonSchemaContentMediaType` / `convertJsonSchemaContentEncoding`:
152
+ * string schemas only, and a pre-existing (conflicting) `format` wins — the
153
+ * content keyword is dropped, not overwritten. Without this, retiring
154
+ * down-convert would silently lose the `format` signal on 3.1 binary uploads.
155
+ */
156
+ const normalizeContentFormat = (schema) => {
157
+ if (schema.type !== 'string') {
158
+ return schema;
159
+ }
160
+ // `contentMediaType`/`contentEncoding` are 3.1 keywords the 3.0-typed
161
+ // SchemaObject does not model; read them loosely.
162
+ const view = schema;
163
+ const derivedFormat = view.contentMediaType === 'application/octet-stream'
164
+ ? 'binary'
165
+ : view.contentEncoding === 'base64'
166
+ ? 'byte'
167
+ : undefined;
168
+ if (derivedFormat === undefined) {
169
+ return schema;
170
+ }
171
+ const { contentMediaType: _contentMediaType, contentEncoding: _contentEncoding, ...rest } = view;
172
+ return 'format' in rest ? rest : { ...rest, format: derivedFormat };
173
+ };
174
+ /**
175
+ * Map the 3.1-only schema-shape encodings onto the shared IR shape before
176
+ * dispatching: type arrays, `const`, `examples[]`, numeric exclusive bounds,
177
+ * and binary/base64 content keywords. Each step returns its input unchanged
178
+ * when it does not apply, so the composed result is referentially equal to
179
+ * `schema` when nothing matched — letting the dispatcher re-dispatch only when
180
+ * needed.
181
+ */
182
+ const normalizeSchemaShape = (schema) => {
183
+ return normalizeExclusiveBounds(normalizeExamples(normalizeConst(normalizeContentFormat(normalizeTypeArray(schema)))));
184
+ };
185
+ /**
186
+ * Is this a 3.1 `{ type: 'null' }` schema member? (`'null'` is a 3.1 type
187
+ * literal the 3.0-typed SchemaObject does not model, so read it loosely.)
188
+ */
189
+ const isNullTypeSchema = (member) => {
190
+ if (isRef(member)) {
191
+ return false;
192
+ }
193
+ const type = member.type;
194
+ return type === 'null';
195
+ };
196
+ /**
197
+ * Split `oneOf`/`anyOf` members into the non-null members plus whether a
198
+ * `{ type: 'null' }` member was present. In 3.1 that null member is how a
199
+ * union expresses nullability (3.0 used the hoisted `nullable` keyword);
200
+ * folding it into a flag lets the collapse/union logic stay unchanged.
201
+ */
202
+ const partitionNullMember = (members) => {
203
+ const nonNull = members.filter(member => !isNullTypeSchema(member));
204
+ return { members: nonNull, nullable: nonNull.length !== members.length };
205
+ };
206
+ /**
207
+ * Collapse a single-member `oneOf`/`anyOf` into its surviving member.
208
+ *
209
+ * The wrapper's sibling keywords must ride into the member rather than
210
+ * being discarded. The critical one is `nullable`: the 3.1 idiom
211
+ * `oneOf:[{type:'string'},{type:'null'}]` ("string or null") has its
212
+ * `{type:'null'}` member folded out by `partitionNullMember` above, leaving
213
+ * `oneOf:[{type:'string'}]` + `nullable:true` on the wrapper. Re-dispatching
214
+ * `members[0]` alone would drop the wrapper (`...value`) and silently turn
215
+ * `string | null` back into a non-nullable `string`.
216
+ * `description`/`title`/`readOnly`/... ride along the same way.
217
+ *
218
+ * Precedence: the member is the more specific schema, so it wins direct
219
+ * conflicts (`{ ...value, ...member }`). `nullable` is the exception — it
220
+ * OR-ins, because a nullable wrapper makes the whole schema nullable even
221
+ * when the member itself is not.
222
+ *
223
+ * A ref member only reaches here when the wrapper carries no `nullable`
224
+ * (the nullable-ref case stamps `nullable` on the OasRef node at the call
225
+ * site, via `toRefV31`). Any other wrapper siblings on a bare `$ref` are
226
+ * ignored per 3.0 ref semantics, so the ref is returned untouched.
227
+ */
228
+ const collapseSingleMember = (value, member) => {
229
+ if (isRef(member)) {
230
+ return member;
231
+ }
232
+ const merged = { ...value, ...member };
233
+ if (value.nullable || member.nullable) {
234
+ merged.nullable = true;
235
+ }
236
+ return merged;
237
+ };
238
+ export const toSchemaV3 = ({ schema, stackTrail, context }) => {
239
+ if (isRef(schema)) {
240
+ return toRefV31({ ref: schema, refType: 'schema', stackTrail, context });
241
+ }
242
+ // OpenAPI `not` has no faithful TypeScript representation: a generated type
243
+ // that ignored it would *widen* the contract (accepting shapes the schema
244
+ // forbids). Refuse the schema rather than emit a type that lies. The throw
245
+ // is isolated by `tryParseAt` into an `INVALID_SCHEMA` issue, and consumers
246
+ // of this schema are pruned via `removeErroredItems` (INVALID_DEPENDENCY_REF).
247
+ if ('not' in schema) {
248
+ throw new Error('Schema uses unsupported "not" keyword');
249
+ }
250
+ const normalized = normalizeSchemaShape(schema);
251
+ if (normalized !== schema) {
252
+ return toSchemaV3({ schema: normalized, stackTrail, context });
253
+ }
254
+ if ('allOf' in schema && Array.isArray(schema.allOf)) {
255
+ return stackTrail.trace('allOf', st => {
256
+ // A single-member allOf collapses to its sole member — the value must
257
+ // satisfy exactly that one schema. When the member is a `$ref`, keep it
258
+ // LAZY (as an OasRef) rather than resolving + merging its target: a
259
+ // `{ allOf: [{$ref: self}], nullable: true }` (a nullable reference
260
+ // written as a one-member allOf — common in real specs) is
261
+ // self-referential, and eagerly resolving it would not terminate. The
262
+ // ref resolves at use time like every other ref. Mirrors the
263
+ // single-member oneOf/anyOf handling below.
264
+ const { allOf, ...value } = schema;
265
+ const members = allOf ?? [];
266
+ if (members.length === 1) {
267
+ const [member] = members;
268
+ if (isRef(member) && value.nullable) {
269
+ return toRefV31({
270
+ ref: member,
271
+ refType: 'schema',
272
+ nullable: true,
273
+ stackTrail: st,
274
+ context
275
+ });
276
+ }
277
+ return toSchemaV3({
278
+ schema: collapseSingleMember(value, member),
279
+ stackTrail: st,
280
+ context
281
+ });
282
+ }
283
+ const merged = mergeIntersection({
284
+ schema,
285
+ getRef: toGetRef(context.documentObject)
286
+ });
287
+ return toSchemaV3({ schema: merged, stackTrail: st, context });
288
+ });
289
+ }
290
+ if ('oneOf' in schema && Array.isArray(schema.oneOf)) {
291
+ return stackTrail.trace('oneOf', st => {
292
+ // 3.1: a `{ type: 'null' }` member makes the union nullable. Fold it
293
+ // into a `nullable` flag the collapse/union logic already understands.
294
+ const { members: oneOfWithoutNull, nullable: hasNullMember } = partitionNullMember(schema.oneOf ?? []);
295
+ const withoutNull = hasNullMember
296
+ ? { ...schema, oneOf: oneOfWithoutNull, nullable: true }
297
+ : schema;
298
+ const merged = mergeUnion({
299
+ schema: withoutNull,
300
+ getRef: toGetRef(context.documentObject),
301
+ groupType: 'oneOf'
302
+ });
303
+ if (!('oneOf' in merged) || !Array.isArray(merged.oneOf)) {
304
+ throw new Error('Missing "oneOf" array');
305
+ }
306
+ const { oneOf: members, ...value } = merged;
307
+ if (members.length === 0) {
308
+ throw new Error('"oneOf" array is empty');
309
+ }
310
+ if (members.length === 1) {
311
+ const [soleMember] = members;
312
+ // A 3.1 nullable reference `oneOf:[{$ref},{type:'null'}]` becomes a
313
+ // single `$ref` member + `nullable:true` once the null member above
314
+ // is folded out. Nullability here is a *use-site* property — the same
315
+ // refName may be referenced nullable at one site and not another — so
316
+ // it rides the OasRef node itself, NOT the shared referent and NOT a
317
+ // synthetic union. Generators read `ref.nullable` and render
318
+ // `Foo | null`; `ModelDriver` builds the un-nullable shared `Foo` from
319
+ // the refName. See
320
+ // notes/openapi-3.1-webhooks-and-parser-architecture.md §3.4.
321
+ if (isRef(soleMember) && value.nullable) {
322
+ return toRefV31({
323
+ ref: soleMember,
324
+ refType: 'schema',
325
+ nullable: true,
326
+ stackTrail: st,
327
+ context
328
+ });
329
+ }
330
+ return toSchemaV3({
331
+ schema: collapseSingleMember(value, soleMember),
332
+ stackTrail: st,
333
+ context
334
+ });
335
+ }
336
+ return toUnion({ value, members, parentType: 'oneOf', stackTrail: st, context });
337
+ });
338
+ }
339
+ if ('anyOf' in schema && Array.isArray(schema.anyOf)) {
340
+ return stackTrail.trace('anyOf', st => {
341
+ // deno-lint-ignore ban-ts-comment
342
+ // @ts-expect-error
343
+ if (schema['x-expansionResources'] && Array.isArray(schema.anyOf)) {
344
+ const { anyOf, ...value } = schema;
345
+ return toUnion({ value, members: anyOf, parentType: 'anyOf', stackTrail: st, context });
346
+ }
347
+ // 3.1: a `{ type: 'null' }` member makes the union nullable (mirrors
348
+ // the oneOf branch above).
349
+ const { members: anyOfWithoutNull, nullable: hasNullMember } = partitionNullMember(schema.anyOf ?? []);
350
+ const withoutNull = hasNullMember
351
+ ? { ...schema, anyOf: anyOfWithoutNull, nullable: true }
352
+ : schema;
353
+ const merged = mergeUnion({
354
+ schema: withoutNull,
355
+ getRef: toGetRef(context.documentObject),
356
+ groupType: 'anyOf'
357
+ });
358
+ if (!('anyOf' in merged) || !Array.isArray(merged.anyOf)) {
359
+ throw new Error('Missing "anyOf" array');
360
+ }
361
+ const { anyOf: members, ...value } = merged;
362
+ if (members.length === 0) {
363
+ throw new Error('"anyOf" array is empty');
364
+ }
365
+ if (members.length === 1) {
366
+ const [soleMember] = members;
367
+ // See the oneOf branch: a single `$ref` carrying a hoisted `nullable`
368
+ // sets `nullable` on the OasRef node itself.
369
+ if (isRef(soleMember) && value.nullable) {
370
+ return toRefV31({
371
+ ref: soleMember,
372
+ refType: 'schema',
373
+ nullable: true,
374
+ stackTrail: st,
375
+ context
376
+ });
377
+ }
378
+ return toSchemaV3({
379
+ schema: collapseSingleMember(value, soleMember),
380
+ stackTrail: st,
381
+ context
382
+ });
383
+ }
384
+ return toUnion({ value, members, parentType: 'anyOf', stackTrail: st, context });
385
+ });
386
+ }
387
+ if ('type' in schema) {
388
+ switch (schema.type) {
389
+ case 'object':
390
+ return toObject({ value: schema, stackTrail, context });
391
+ case 'array':
392
+ return toArray({ value: schema, stackTrail, context });
393
+ case 'integer':
394
+ return toInteger({ value: schema, stackTrail, context });
395
+ case 'number':
396
+ return toNumber({ value: schema, stackTrail, context });
397
+ case 'boolean':
398
+ return toBoolean({ value: schema, stackTrail, context });
399
+ case 'string':
400
+ return toString({ value: schema, stackTrail, context });
401
+ }
402
+ }
403
+ // Otherwise cases
404
+ if (possibleObject(schema)) {
405
+ // In 3.1 `type` is optional, so a schema with `properties` and no `type`
406
+ // is a normal, valid object schema — inferring `object` is the expected
407
+ // reading, not a deviation, so it is silent. (The v3-0 parser keeps the
408
+ // MISSING_OBJECT_TYPE warning: 3.0 requires `type`, so its absence there
409
+ // is a real signal.)
410
+ return toObject({
411
+ value: {
412
+ ...schema,
413
+ type: 'object'
414
+ },
415
+ stackTrail,
416
+ context
417
+ });
418
+ }
419
+ if (possibleArray(schema)) {
420
+ context.logIssueNoKey({
421
+ level: 'warning',
422
+ message: 'Object has "items" property, but is missing type="array" property',
423
+ parent: schema,
424
+ stackTrail,
425
+ type: 'MISSING_ARRAY_TYPE'
426
+ });
427
+ return toArray({
428
+ value: {
429
+ ...schema,
430
+ type: 'array'
431
+ // Adding cast here since {} is a valid value for items
432
+ },
433
+ stackTrail,
434
+ context
435
+ });
436
+ }
437
+ if (possibleBoolean(schema)) {
438
+ context.logIssueNoKey({
439
+ level: 'warning',
440
+ message: 'Object has a boolean "default" or "example" property, but is missing type="boolean" property',
441
+ parent: schema,
442
+ stackTrail,
443
+ type: 'MISSING_BOOLEAN_TYPE'
444
+ });
445
+ return toBoolean({
446
+ value: {
447
+ ...schema,
448
+ type: 'boolean'
449
+ },
450
+ stackTrail,
451
+ context
452
+ });
453
+ }
454
+ if (possibleString(schema)) {
455
+ context.logIssueNoKey({
456
+ level: 'warning',
457
+ message: 'Object has a string "default" or "example" property, but is missing type="string" property',
458
+ parent: schema,
459
+ stackTrail,
460
+ type: 'MISSING_STRING_TYPE'
461
+ });
462
+ return toString({
463
+ value: {
464
+ ...schema,
465
+ type: 'string'
466
+ },
467
+ stackTrail,
468
+ context
469
+ });
470
+ }
471
+ return toUnknown({ value: schema, stackTrail, context });
472
+ };
473
+ const possibleString = (value) => {
474
+ return (value &&
475
+ typeof value === 'object' &&
476
+ (('default' in value && typeof value.default === 'string') ||
477
+ ('example' in value && typeof value.example === 'string') ||
478
+ ('enum' in value &&
479
+ Array.isArray(value.enum) &&
480
+ value.enum.every(item => typeof item === 'string')) ||
481
+ ('format' in value &&
482
+ typeof value.format === 'string' &&
483
+ ['date', 'date-time', 'binary', 'byte'].includes(value.format))));
484
+ };
485
+ const possibleBoolean = (value) => {
486
+ return (value &&
487
+ typeof value === 'object' &&
488
+ (('default' in value && typeof value.default === 'boolean') ||
489
+ ('example' in value && typeof value.example === 'boolean')));
490
+ };
491
+ const possibleArray = (value) => {
492
+ return (value &&
493
+ typeof value === 'object' &&
494
+ 'items' in value &&
495
+ value.items &&
496
+ typeof value.items === 'object' &&
497
+ value.items);
498
+ };
499
+ const possibleObject = (value) => {
500
+ return (value &&
501
+ typeof value === 'object' &&
502
+ 'properties' in value &&
503
+ typeof value.properties === 'object' &&
504
+ value.properties);
505
+ };
506
+ export const toOptionalSchemaV3 = ({ schema, stackTrail, context }) => {
507
+ if (!schema) {
508
+ return undefined;
509
+ }
510
+ return toSchemaV3({ schema, stackTrail, context });
511
+ };
@@ -0,0 +1,9 @@
1
+ import type { ParseContextType } from '../../../context/parseTypes.js';
2
+ import { OasSecurityRequirement } from '../../../oas/securityRequirement/SecurityRequirement.js';
3
+ import type { StackTrail } from '../../../context/StackTrail.js';
4
+ export type ToSecurityRequirementsV3Args = {
5
+ security: Record<string, string[]>[] | undefined;
6
+ stackTrail: StackTrail;
7
+ context: ParseContextType;
8
+ };
9
+ export declare const toSecurityRequirementsV3: ({ security, stackTrail, context }: ToSecurityRequirementsV3Args) => OasSecurityRequirement[] | undefined;
@@ -0,0 +1,9 @@
1
+ import { OasSecurityRequirement } from '../../../oas/securityRequirement/SecurityRequirement.js';
2
+ export const toSecurityRequirementsV3 = ({ security, stackTrail, context }) => {
3
+ if (!security) {
4
+ return undefined;
5
+ }
6
+ return security.map(requirement => {
7
+ return new OasSecurityRequirement({ requirement }, context.oasDocument);
8
+ });
9
+ };
@@ -0,0 +1,17 @@
1
+ import type { OpenAPIV3 } from 'openapi-types';
2
+ import type { ParseContextType } from '../../../context/parseTypes.js';
3
+ import type { OasSecurityScheme } from '../../../oas/securitySchemes/SecurityScheme.js';
4
+ import type { OasRef } from '../../../oas/ref/Ref.js';
5
+ import type { StackTrail } from '../../../context/StackTrail.js';
6
+ export type ToSecuritySchemesArgs = {
7
+ securitySchemes: Record<string, OpenAPIV3.ReferenceObject | OpenAPIV3.SecuritySchemeObject> | undefined;
8
+ stackTrail: StackTrail;
9
+ context: ParseContextType;
10
+ };
11
+ export declare const toSecuritySchemesV3: ({ securitySchemes, stackTrail, context }: ToSecuritySchemesArgs) => // 'http' | 'apiKey' | 'oauth2' | 'openIdConnect'
12
+ Record<string, OasSecurityScheme | OasRef<"securityScheme">> | undefined;
13
+ export type ToSecuritySchemeV3Args = {
14
+ securityScheme: OpenAPIV3.ReferenceObject | OpenAPIV3.SecuritySchemeObject;
15
+ stackTrail: StackTrail;
16
+ context: ParseContextType;
17
+ };