@typia/utils 12.1.0-dev.20260325 → 13.0.0-dev.20260425

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 (619) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +85 -85
  3. package/lib/_virtual/ArrayUtil.mjs +4 -0
  4. package/lib/_virtual/ArrayUtil.mjs.map +1 -0
  5. package/lib/_virtual/EndpointUtil.mjs +4 -0
  6. package/lib/_virtual/EndpointUtil.mjs.map +1 -0
  7. package/lib/_virtual/HttpError.mjs +4 -0
  8. package/lib/_virtual/HttpError.mjs.map +1 -0
  9. package/lib/_virtual/HttpLlm.mjs +4 -0
  10. package/lib/_virtual/HttpLlm.mjs.map +1 -0
  11. package/lib/_virtual/HttpLlmApplicationComposer.mjs +4 -0
  12. package/lib/_virtual/HttpLlmApplicationComposer.mjs.map +1 -0
  13. package/lib/_virtual/HttpLlmFunctionFetcher.mjs +4 -0
  14. package/lib/_virtual/HttpLlmFunctionFetcher.mjs.map +1 -0
  15. package/lib/_virtual/HttpMigrateApplicationComposer.mjs +4 -0
  16. package/lib/_virtual/HttpMigrateApplicationComposer.mjs.map +1 -0
  17. package/lib/_virtual/HttpMigrateRouteAccessor.mjs +4 -0
  18. package/lib/_virtual/HttpMigrateRouteAccessor.mjs.map +1 -0
  19. package/lib/_virtual/HttpMigrateRouteComposer.mjs +4 -0
  20. package/lib/_virtual/HttpMigrateRouteComposer.mjs.map +1 -0
  21. package/lib/_virtual/HttpMigrateRouteFetcher.mjs +4 -0
  22. package/lib/_virtual/HttpMigrateRouteFetcher.mjs.map +1 -0
  23. package/lib/_virtual/HttpMigration.mjs +4 -0
  24. package/lib/_virtual/HttpMigration.mjs.map +1 -0
  25. package/lib/_virtual/IOpenApiValidatorContext.mjs +4 -0
  26. package/lib/_virtual/IOpenApiValidatorContext.mjs.map +1 -0
  27. package/lib/_virtual/JsonDescriptor.mjs +4 -0
  28. package/lib/_virtual/JsonDescriptor.mjs.map +1 -0
  29. package/lib/_virtual/LlmDescriptionInverter.mjs +4 -0
  30. package/lib/_virtual/LlmDescriptionInverter.mjs.map +1 -0
  31. package/lib/_virtual/LlmJson.mjs +4 -0
  32. package/lib/_virtual/LlmJson.mjs.map +1 -0
  33. package/lib/_virtual/LlmParametersComposer.mjs +4 -0
  34. package/lib/_virtual/LlmParametersComposer.mjs.map +1 -0
  35. package/lib/_virtual/LlmSchemaConverter.mjs +4 -0
  36. package/lib/_virtual/LlmSchemaConverter.mjs.map +1 -0
  37. package/lib/_virtual/LlmTypeChecker.mjs +4 -0
  38. package/lib/_virtual/LlmTypeChecker.mjs.map +1 -0
  39. package/lib/_virtual/MapUtil.mjs +4 -0
  40. package/lib/_virtual/MapUtil.mjs.map +1 -0
  41. package/lib/_virtual/NamingConvention.mjs +4 -0
  42. package/lib/_virtual/NamingConvention.mjs.map +1 -0
  43. package/lib/_virtual/OpenApiArrayValidator.mjs +4 -0
  44. package/lib/_virtual/OpenApiArrayValidator.mjs.map +1 -0
  45. package/lib/_virtual/OpenApiBooleanValidator.mjs +4 -0
  46. package/lib/_virtual/OpenApiBooleanValidator.mjs.map +1 -0
  47. package/lib/_virtual/OpenApiConstantValidator.mjs +4 -0
  48. package/lib/_virtual/OpenApiConstantValidator.mjs.map +1 -0
  49. package/lib/_virtual/OpenApiConstraintShifter.mjs +4 -0
  50. package/lib/_virtual/OpenApiConstraintShifter.mjs.map +1 -0
  51. package/lib/_virtual/OpenApiConverter.mjs +4 -0
  52. package/lib/_virtual/OpenApiConverter.mjs.map +1 -0
  53. package/lib/_virtual/OpenApiExclusiveEmender.mjs +4 -0
  54. package/lib/_virtual/OpenApiExclusiveEmender.mjs.map +1 -0
  55. package/lib/_virtual/OpenApiIntegerValidator.mjs +4 -0
  56. package/lib/_virtual/OpenApiIntegerValidator.mjs.map +1 -0
  57. package/lib/_virtual/OpenApiNumberValidator.mjs +4 -0
  58. package/lib/_virtual/OpenApiNumberValidator.mjs.map +1 -0
  59. package/lib/_virtual/OpenApiObjectValidator.mjs +4 -0
  60. package/lib/_virtual/OpenApiObjectValidator.mjs.map +1 -0
  61. package/lib/_virtual/OpenApiOneOfValidator.mjs +4 -0
  62. package/lib/_virtual/OpenApiOneOfValidator.mjs.map +1 -0
  63. package/lib/_virtual/OpenApiSchemaNamingRule.mjs +4 -0
  64. package/lib/_virtual/OpenApiSchemaNamingRule.mjs.map +1 -0
  65. package/lib/_virtual/OpenApiStationValidator.mjs +4 -0
  66. package/lib/_virtual/OpenApiStationValidator.mjs.map +1 -0
  67. package/lib/_virtual/OpenApiStringValidator.mjs +4 -0
  68. package/lib/_virtual/OpenApiStringValidator.mjs.map +1 -0
  69. package/lib/_virtual/OpenApiTupleValidator.mjs +4 -0
  70. package/lib/_virtual/OpenApiTupleValidator.mjs.map +1 -0
  71. package/lib/_virtual/OpenApiTypeChecker.mjs +4 -0
  72. package/lib/_virtual/OpenApiTypeChecker.mjs.map +1 -0
  73. package/lib/_virtual/OpenApiTypeCheckerBase.mjs +4 -0
  74. package/lib/_virtual/OpenApiTypeCheckerBase.mjs.map +1 -0
  75. package/lib/_virtual/OpenApiV3Downgrader.mjs +4 -0
  76. package/lib/_virtual/OpenApiV3Downgrader.mjs.map +1 -0
  77. package/lib/_virtual/OpenApiV3TypeChecker.mjs +4 -0
  78. package/lib/_virtual/OpenApiV3TypeChecker.mjs.map +1 -0
  79. package/lib/_virtual/OpenApiV3Upgrader.mjs +4 -0
  80. package/lib/_virtual/OpenApiV3Upgrader.mjs.map +1 -0
  81. package/lib/_virtual/OpenApiV3_1Downgrader.mjs +4 -0
  82. package/lib/_virtual/OpenApiV3_1Downgrader.mjs.map +1 -0
  83. package/lib/_virtual/OpenApiV3_1TypeChecker.mjs +4 -0
  84. package/lib/_virtual/OpenApiV3_1TypeChecker.mjs.map +1 -0
  85. package/lib/_virtual/OpenApiV3_1Upgrader.mjs +4 -0
  86. package/lib/_virtual/OpenApiV3_1Upgrader.mjs.map +1 -0
  87. package/lib/_virtual/OpenApiV3_2Upgrader.mjs +4 -0
  88. package/lib/_virtual/OpenApiV3_2Upgrader.mjs.map +1 -0
  89. package/lib/_virtual/OpenApiValidator.mjs +4 -0
  90. package/lib/_virtual/OpenApiValidator.mjs.map +1 -0
  91. package/lib/_virtual/Singleton.mjs +4 -0
  92. package/lib/_virtual/Singleton.mjs.map +1 -0
  93. package/lib/_virtual/StringUtil.mjs +4 -0
  94. package/lib/_virtual/StringUtil.mjs.map +1 -0
  95. package/lib/_virtual/SwaggerV2Downgrader.mjs +4 -0
  96. package/lib/_virtual/SwaggerV2Downgrader.mjs.map +1 -0
  97. package/lib/_virtual/SwaggerV2TypeChecker.mjs +4 -0
  98. package/lib/_virtual/SwaggerV2TypeChecker.mjs.map +1 -0
  99. package/lib/_virtual/SwaggerV2Upgrader.mjs +4 -0
  100. package/lib/_virtual/SwaggerV2Upgrader.mjs.map +1 -0
  101. package/lib/_virtual/_commonjsHelpers.mjs +6 -0
  102. package/lib/_virtual/_commonjsHelpers.mjs.map +1 -0
  103. package/lib/_virtual/_isBigintString.mjs +4 -0
  104. package/lib/_virtual/_isBigintString.mjs.map +1 -0
  105. package/lib/_virtual/_isFormatByte.mjs +4 -0
  106. package/lib/_virtual/_isFormatByte.mjs.map +1 -0
  107. package/lib/_virtual/_isFormatDate.mjs +4 -0
  108. package/lib/_virtual/_isFormatDate.mjs.map +1 -0
  109. package/lib/_virtual/_isFormatDateTime.mjs +4 -0
  110. package/lib/_virtual/_isFormatDateTime.mjs.map +1 -0
  111. package/lib/_virtual/_isFormatDuration.mjs +4 -0
  112. package/lib/_virtual/_isFormatDuration.mjs.map +1 -0
  113. package/lib/_virtual/_isFormatEmail.mjs +4 -0
  114. package/lib/_virtual/_isFormatEmail.mjs.map +1 -0
  115. package/lib/_virtual/_isFormatHostname.mjs +4 -0
  116. package/lib/_virtual/_isFormatHostname.mjs.map +1 -0
  117. package/lib/_virtual/_isFormatIdnEmail.mjs +4 -0
  118. package/lib/_virtual/_isFormatIdnEmail.mjs.map +1 -0
  119. package/lib/_virtual/_isFormatIdnHostname.mjs +4 -0
  120. package/lib/_virtual/_isFormatIdnHostname.mjs.map +1 -0
  121. package/lib/_virtual/_isFormatIpv4.mjs +4 -0
  122. package/lib/_virtual/_isFormatIpv4.mjs.map +1 -0
  123. package/lib/_virtual/_isFormatIpv6.mjs +4 -0
  124. package/lib/_virtual/_isFormatIpv6.mjs.map +1 -0
  125. package/lib/_virtual/_isFormatIri.mjs +4 -0
  126. package/lib/_virtual/_isFormatIri.mjs.map +1 -0
  127. package/lib/_virtual/_isFormatIriReference.mjs +4 -0
  128. package/lib/_virtual/_isFormatIriReference.mjs.map +1 -0
  129. package/lib/_virtual/_isFormatJsonPointer.mjs +4 -0
  130. package/lib/_virtual/_isFormatJsonPointer.mjs.map +1 -0
  131. package/lib/_virtual/_isFormatPassword.mjs +4 -0
  132. package/lib/_virtual/_isFormatPassword.mjs.map +1 -0
  133. package/lib/_virtual/_isFormatRegex.mjs +4 -0
  134. package/lib/_virtual/_isFormatRegex.mjs.map +1 -0
  135. package/lib/_virtual/_isFormatRelativeJsonPointer.mjs +4 -0
  136. package/lib/_virtual/_isFormatRelativeJsonPointer.mjs.map +1 -0
  137. package/lib/_virtual/_isFormatTime.mjs +4 -0
  138. package/lib/_virtual/_isFormatTime.mjs.map +1 -0
  139. package/lib/_virtual/_isFormatUri.mjs +4 -0
  140. package/lib/_virtual/_isFormatUri.mjs.map +1 -0
  141. package/lib/_virtual/_isFormatUriReference.mjs +4 -0
  142. package/lib/_virtual/_isFormatUriReference.mjs.map +1 -0
  143. package/lib/_virtual/_isFormatUriTemplate.mjs +4 -0
  144. package/lib/_virtual/_isFormatUriTemplate.mjs.map +1 -0
  145. package/lib/_virtual/_isFormatUrl.mjs +4 -0
  146. package/lib/_virtual/_isFormatUrl.mjs.map +1 -0
  147. package/lib/_virtual/_isFormatUuid.mjs +4 -0
  148. package/lib/_virtual/_isFormatUuid.mjs.map +1 -0
  149. package/lib/_virtual/_isUniqueItems.mjs +4 -0
  150. package/lib/_virtual/_isUniqueItems.mjs.map +1 -0
  151. package/lib/_virtual/coerceLlmArguments.mjs +4 -0
  152. package/lib/_virtual/coerceLlmArguments.mjs.map +1 -0
  153. package/lib/_virtual/dedent.mjs +4 -0
  154. package/lib/_virtual/dedent.mjs.map +1 -0
  155. package/lib/_virtual/index.mjs +4 -0
  156. package/lib/_virtual/index.mjs.map +1 -0
  157. package/lib/_virtual/index2.mjs +4 -0
  158. package/lib/_virtual/index2.mjs.map +1 -0
  159. package/lib/_virtual/index3.mjs +4 -0
  160. package/lib/_virtual/index3.mjs.map +1 -0
  161. package/lib/_virtual/index4.mjs +4 -0
  162. package/lib/_virtual/index4.mjs.map +1 -0
  163. package/lib/_virtual/index5.mjs +4 -0
  164. package/lib/_virtual/index5.mjs.map +1 -0
  165. package/lib/_virtual/parseLenientJson.mjs +4 -0
  166. package/lib/_virtual/parseLenientJson.mjs.map +1 -0
  167. package/lib/_virtual/stringifyValidationFailure.mjs +4 -0
  168. package/lib/_virtual/stringifyValidationFailure.mjs.map +1 -0
  169. package/lib/converters/LlmSchemaConverter.js +149 -51
  170. package/lib/converters/LlmSchemaConverter.js.map +1 -1
  171. package/lib/converters/LlmSchemaConverter.mjs +5 -511
  172. package/lib/converters/LlmSchemaConverter.mjs.map +1 -1
  173. package/lib/converters/LlmSchemaConverter2.mjs +551 -0
  174. package/lib/converters/LlmSchemaConverter2.mjs.map +1 -0
  175. package/lib/converters/OpenApiConverter.js.map +1 -1
  176. package/lib/converters/OpenApiConverter.mjs +5 -146
  177. package/lib/converters/OpenApiConverter.mjs.map +1 -1
  178. package/lib/converters/OpenApiConverter2.mjs +167 -0
  179. package/lib/converters/OpenApiConverter2.mjs.map +1 -0
  180. package/lib/converters/index.mjs +7 -3
  181. package/lib/converters/index.mjs.map +1 -1
  182. package/lib/converters/index2.mjs +37 -0
  183. package/lib/converters/index2.mjs.map +1 -0
  184. package/lib/converters/internal/LlmDescriptionInverter.js.map +1 -1
  185. package/lib/converters/internal/LlmDescriptionInverter.mjs +5 -138
  186. package/lib/converters/internal/LlmDescriptionInverter.mjs.map +1 -1
  187. package/lib/converters/internal/LlmDescriptionInverter2.mjs +153 -0
  188. package/lib/converters/internal/LlmDescriptionInverter2.mjs.map +1 -0
  189. package/lib/converters/internal/LlmParametersComposer.js +14 -17
  190. package/lib/converters/internal/LlmParametersComposer.js.map +1 -1
  191. package/lib/converters/internal/LlmParametersComposer.mjs +5 -39
  192. package/lib/converters/internal/LlmParametersComposer.mjs.map +1 -1
  193. package/lib/converters/internal/LlmParametersComposer2.mjs +48 -0
  194. package/lib/converters/internal/LlmParametersComposer2.mjs.map +1 -0
  195. package/lib/converters/internal/OpenApiConstraintShifter.js.map +1 -1
  196. package/lib/converters/internal/OpenApiConstraintShifter.mjs +5 -99
  197. package/lib/converters/internal/OpenApiConstraintShifter.mjs.map +1 -1
  198. package/lib/converters/internal/OpenApiConstraintShifter2.mjs +115 -0
  199. package/lib/converters/internal/OpenApiConstraintShifter2.mjs.map +1 -0
  200. package/lib/converters/internal/OpenApiExclusiveEmender.js.map +1 -1
  201. package/lib/converters/internal/OpenApiExclusiveEmender.mjs +6 -33
  202. package/lib/converters/internal/OpenApiExclusiveEmender.mjs.map +1 -1
  203. package/lib/converters/internal/OpenApiExclusiveEmender2.mjs +43 -0
  204. package/lib/converters/internal/OpenApiExclusiveEmender2.mjs.map +1 -0
  205. package/lib/converters/internal/OpenApiV3Downgrader.js +2 -1
  206. package/lib/converters/internal/OpenApiV3Downgrader.js.map +1 -1
  207. package/lib/converters/internal/OpenApiV3Downgrader.mjs +5 -299
  208. package/lib/converters/internal/OpenApiV3Downgrader.mjs.map +1 -1
  209. package/lib/converters/internal/OpenApiV3Downgrader2.mjs +247 -0
  210. package/lib/converters/internal/OpenApiV3Downgrader2.mjs.map +1 -0
  211. package/lib/converters/internal/OpenApiV3Upgrader.js +58 -67
  212. package/lib/converters/internal/OpenApiV3Upgrader.js.map +1 -1
  213. package/lib/converters/internal/OpenApiV3Upgrader.mjs +5 -367
  214. package/lib/converters/internal/OpenApiV3Upgrader.mjs.map +1 -1
  215. package/lib/converters/internal/OpenApiV3Upgrader2.mjs +308 -0
  216. package/lib/converters/internal/OpenApiV3Upgrader2.mjs.map +1 -0
  217. package/lib/converters/internal/OpenApiV3_1Downgrader.js.map +1 -1
  218. package/lib/converters/internal/OpenApiV3_1Downgrader.mjs +5 -236
  219. package/lib/converters/internal/OpenApiV3_1Downgrader.mjs.map +1 -1
  220. package/lib/converters/internal/OpenApiV3_1Downgrader2.mjs +203 -0
  221. package/lib/converters/internal/OpenApiV3_1Downgrader2.mjs.map +1 -0
  222. package/lib/converters/internal/OpenApiV3_1Upgrader.js +68 -70
  223. package/lib/converters/internal/OpenApiV3_1Upgrader.js.map +1 -1
  224. package/lib/converters/internal/OpenApiV3_1Upgrader.mjs +5 -564
  225. package/lib/converters/internal/OpenApiV3_1Upgrader.mjs.map +1 -1
  226. package/lib/converters/internal/OpenApiV3_1Upgrader2.mjs +435 -0
  227. package/lib/converters/internal/OpenApiV3_1Upgrader2.mjs.map +1 -0
  228. package/lib/converters/internal/OpenApiV3_2Upgrader.js +57 -63
  229. package/lib/converters/internal/OpenApiV3_2Upgrader.js.map +1 -1
  230. package/lib/converters/internal/OpenApiV3_2Upgrader.mjs +5 -240
  231. package/lib/converters/internal/OpenApiV3_2Upgrader.mjs.map +1 -1
  232. package/lib/converters/internal/OpenApiV3_2Upgrader2.mjs +211 -0
  233. package/lib/converters/internal/OpenApiV3_2Upgrader2.mjs.map +1 -0
  234. package/lib/converters/internal/SwaggerV2Downgrader.js +44 -56
  235. package/lib/converters/internal/SwaggerV2Downgrader.js.map +1 -1
  236. package/lib/converters/internal/SwaggerV2Downgrader.mjs +5 -352
  237. package/lib/converters/internal/SwaggerV2Downgrader.mjs.map +1 -1
  238. package/lib/converters/internal/SwaggerV2Downgrader2.mjs +297 -0
  239. package/lib/converters/internal/SwaggerV2Downgrader2.mjs.map +1 -0
  240. package/lib/converters/internal/SwaggerV2Upgrader.js +52 -63
  241. package/lib/converters/internal/SwaggerV2Upgrader.js.map +1 -1
  242. package/lib/converters/internal/SwaggerV2Upgrader.mjs +5 -421
  243. package/lib/converters/internal/SwaggerV2Upgrader.mjs.map +1 -1
  244. package/lib/converters/internal/SwaggerV2Upgrader2.mjs +378 -0
  245. package/lib/converters/internal/SwaggerV2Upgrader2.mjs.map +1 -0
  246. package/lib/http/HttpError.js.map +1 -1
  247. package/lib/http/HttpError.mjs +6 -74
  248. package/lib/http/HttpError.mjs.map +1 -1
  249. package/lib/http/HttpError2.mjs +81 -0
  250. package/lib/http/HttpError2.mjs.map +1 -0
  251. package/lib/http/HttpLlm.js +5 -4
  252. package/lib/http/HttpLlm.js.map +1 -1
  253. package/lib/http/HttpLlm.mjs +5 -96
  254. package/lib/http/HttpLlm.mjs.map +1 -1
  255. package/lib/http/HttpLlm2.mjs +115 -0
  256. package/lib/http/HttpLlm2.mjs.map +1 -0
  257. package/lib/http/HttpMigration.js.map +1 -1
  258. package/lib/http/HttpMigration.mjs +5 -49
  259. package/lib/http/HttpMigration.mjs.map +1 -1
  260. package/lib/http/HttpMigration2.mjs +66 -0
  261. package/lib/http/HttpMigration2.mjs.map +1 -0
  262. package/lib/http/index.mjs +7 -3
  263. package/lib/http/index.mjs.map +1 -1
  264. package/lib/http/index2.mjs +36 -0
  265. package/lib/http/index2.mjs.map +1 -0
  266. package/lib/http/internal/HttpLlmApplicationComposer.js +12 -13
  267. package/lib/http/internal/HttpLlmApplicationComposer.js.map +1 -1
  268. package/lib/http/internal/HttpLlmApplicationComposer.mjs +5 -297
  269. package/lib/http/internal/HttpLlmApplicationComposer.mjs.map +1 -1
  270. package/lib/http/internal/HttpLlmApplicationComposer2.mjs +309 -0
  271. package/lib/http/internal/HttpLlmApplicationComposer2.mjs.map +1 -0
  272. package/lib/http/internal/HttpLlmFunctionFetcher.js.map +1 -1
  273. package/lib/http/internal/HttpLlmFunctionFetcher.mjs +5 -21
  274. package/lib/http/internal/HttpLlmFunctionFetcher.mjs.map +1 -1
  275. package/lib/http/internal/HttpLlmFunctionFetcher2.mjs +36 -0
  276. package/lib/http/internal/HttpLlmFunctionFetcher2.mjs.map +1 -0
  277. package/lib/http/internal/HttpMigrateApplicationComposer.js.map +1 -1
  278. package/lib/http/internal/HttpMigrateApplicationComposer.mjs +5 -44
  279. package/lib/http/internal/HttpMigrateApplicationComposer.mjs.map +1 -1
  280. package/lib/http/internal/HttpMigrateApplicationComposer2.mjs +59 -0
  281. package/lib/http/internal/HttpMigrateApplicationComposer2.mjs.map +1 -0
  282. package/lib/http/internal/HttpMigrateRouteAccessor.js.map +1 -1
  283. package/lib/http/internal/HttpMigrateRouteAccessor.mjs +5 -103
  284. package/lib/http/internal/HttpMigrateRouteAccessor.mjs.map +1 -1
  285. package/lib/http/internal/HttpMigrateRouteAccessor2.mjs +121 -0
  286. package/lib/http/internal/HttpMigrateRouteAccessor2.mjs.map +1 -0
  287. package/lib/http/internal/HttpMigrateRouteComposer.js +35 -54
  288. package/lib/http/internal/HttpMigrateRouteComposer.js.map +1 -1
  289. package/lib/http/internal/HttpMigrateRouteComposer.mjs +5 -381
  290. package/lib/http/internal/HttpMigrateRouteComposer.mjs.map +1 -1
  291. package/lib/http/internal/HttpMigrateRouteComposer2.mjs +384 -0
  292. package/lib/http/internal/HttpMigrateRouteComposer2.mjs.map +1 -0
  293. package/lib/http/internal/HttpMigrateRouteFetcher.js +7 -6
  294. package/lib/http/internal/HttpMigrateRouteFetcher.js.map +1 -1
  295. package/lib/http/internal/HttpMigrateRouteFetcher.mjs +5 -171
  296. package/lib/http/internal/HttpMigrateRouteFetcher.mjs.map +1 -1
  297. package/lib/http/internal/HttpMigrateRouteFetcher2.mjs +192 -0
  298. package/lib/http/internal/HttpMigrateRouteFetcher2.mjs.map +1 -0
  299. package/lib/index.mjs +7 -19
  300. package/lib/index.mjs.map +1 -1
  301. package/lib/index2.mjs +38 -0
  302. package/lib/index2.mjs.map +1 -0
  303. package/lib/utils/ArrayUtil.js.map +1 -1
  304. package/lib/utils/ArrayUtil.mjs +6 -26
  305. package/lib/utils/ArrayUtil.mjs.map +1 -1
  306. package/lib/utils/ArrayUtil2.mjs +40 -0
  307. package/lib/utils/ArrayUtil2.mjs.map +1 -0
  308. package/lib/utils/LlmJson.d.ts +1 -1
  309. package/lib/utils/LlmJson.js.map +1 -1
  310. package/lib/utils/LlmJson.mjs +5 -153
  311. package/lib/utils/LlmJson.mjs.map +1 -1
  312. package/lib/utils/LlmJson2.mjs +172 -0
  313. package/lib/utils/LlmJson2.mjs.map +1 -0
  314. package/lib/utils/MapUtil.js.map +1 -1
  315. package/lib/utils/MapUtil.mjs +6 -13
  316. package/lib/utils/MapUtil.mjs.map +1 -1
  317. package/lib/utils/MapUtil2.mjs +27 -0
  318. package/lib/utils/MapUtil2.mjs.map +1 -0
  319. package/lib/utils/NamingConvention.js.map +1 -1
  320. package/lib/utils/NamingConvention.mjs +6 -196
  321. package/lib/utils/NamingConvention.mjs.map +1 -1
  322. package/lib/utils/NamingConvention2.mjs +210 -0
  323. package/lib/utils/NamingConvention2.mjs.map +1 -0
  324. package/lib/utils/Singleton.d.ts +6 -1
  325. package/lib/utils/Singleton.js +0 -1
  326. package/lib/utils/Singleton.js.map +1 -1
  327. package/lib/utils/Singleton.mjs +6 -16
  328. package/lib/utils/Singleton.mjs.map +1 -1
  329. package/lib/utils/Singleton2.mjs +28 -0
  330. package/lib/utils/Singleton2.mjs.map +1 -0
  331. package/lib/utils/StringUtil.js +6 -9
  332. package/lib/utils/StringUtil.js.map +1 -1
  333. package/lib/utils/StringUtil.mjs +6 -11
  334. package/lib/utils/StringUtil.mjs.map +1 -1
  335. package/lib/utils/StringUtil2.mjs +25 -0
  336. package/lib/utils/StringUtil2.mjs.map +1 -0
  337. package/lib/utils/dedent.js.map +1 -1
  338. package/lib/utils/dedent.mjs +6 -48
  339. package/lib/utils/dedent.mjs.map +1 -1
  340. package/lib/utils/dedent2.mjs +62 -0
  341. package/lib/utils/dedent2.mjs.map +1 -0
  342. package/lib/utils/index.mjs +7 -7
  343. package/lib/utils/index.mjs.map +1 -1
  344. package/lib/utils/index2.mjs +44 -0
  345. package/lib/utils/index2.mjs.map +1 -0
  346. package/lib/utils/internal/EndpointUtil.js.map +1 -1
  347. package/lib/utils/internal/EndpointUtil.mjs +5 -34
  348. package/lib/utils/internal/EndpointUtil.mjs.map +1 -1
  349. package/lib/utils/internal/EndpointUtil2.mjs +49 -0
  350. package/lib/utils/internal/EndpointUtil2.mjs.map +1 -0
  351. package/lib/utils/internal/JsonDescriptor.js +18 -25
  352. package/lib/utils/internal/JsonDescriptor.js.map +1 -1
  353. package/lib/utils/internal/JsonDescriptor.mjs +5 -45
  354. package/lib/utils/internal/JsonDescriptor.mjs.map +1 -1
  355. package/lib/utils/internal/JsonDescriptor2.mjs +64 -0
  356. package/lib/utils/internal/JsonDescriptor2.mjs.map +1 -0
  357. package/lib/utils/internal/OpenApiTypeCheckerBase.js +15 -9
  358. package/lib/utils/internal/OpenApiTypeCheckerBase.js.map +1 -1
  359. package/lib/utils/internal/OpenApiTypeCheckerBase.mjs +5 -581
  360. package/lib/utils/internal/OpenApiTypeCheckerBase.mjs.map +1 -1
  361. package/lib/utils/internal/OpenApiTypeCheckerBase2.mjs +539 -0
  362. package/lib/utils/internal/OpenApiTypeCheckerBase2.mjs.map +1 -0
  363. package/lib/utils/internal/coerceLlmArguments.js +18 -4
  364. package/lib/utils/internal/coerceLlmArguments.js.map +1 -1
  365. package/lib/utils/internal/coerceLlmArguments.mjs +5 -245
  366. package/lib/utils/internal/coerceLlmArguments.mjs.map +1 -1
  367. package/lib/utils/internal/coerceLlmArguments2.mjs +276 -0
  368. package/lib/utils/internal/coerceLlmArguments2.mjs.map +1 -0
  369. package/lib/utils/internal/parseLenientJson.js.map +1 -1
  370. package/lib/utils/internal/parseLenientJson.mjs +6 -803
  371. package/lib/utils/internal/parseLenientJson.mjs.map +1 -1
  372. package/lib/utils/internal/parseLenientJson2.mjs +815 -0
  373. package/lib/utils/internal/parseLenientJson2.mjs.map +1 -0
  374. package/lib/utils/internal/stringifyValidationFailure.js.map +1 -1
  375. package/lib/utils/internal/stringifyValidationFailure.mjs +5 -315
  376. package/lib/utils/internal/stringifyValidationFailure.mjs.map +1 -1
  377. package/lib/utils/internal/stringifyValidationFailure2.mjs +333 -0
  378. package/lib/utils/internal/stringifyValidationFailure2.mjs.map +1 -0
  379. package/lib/validators/LlmTypeChecker.js +4 -3
  380. package/lib/validators/LlmTypeChecker.js.map +1 -1
  381. package/lib/validators/LlmTypeChecker.mjs +5 -297
  382. package/lib/validators/LlmTypeChecker.mjs.map +1 -1
  383. package/lib/validators/LlmTypeChecker2.mjs +323 -0
  384. package/lib/validators/LlmTypeChecker2.mjs.map +1 -0
  385. package/lib/validators/OpenApiTypeChecker.js.map +1 -1
  386. package/lib/validators/OpenApiTypeChecker.mjs +5 -215
  387. package/lib/validators/OpenApiTypeChecker.mjs.map +1 -1
  388. package/lib/validators/OpenApiTypeChecker2.mjs +219 -0
  389. package/lib/validators/OpenApiTypeChecker2.mjs.map +1 -0
  390. package/lib/validators/OpenApiV3TypeChecker.js.map +1 -1
  391. package/lib/validators/OpenApiV3TypeChecker.mjs +6 -27
  392. package/lib/validators/OpenApiV3TypeChecker.mjs.map +1 -1
  393. package/lib/validators/OpenApiV3TypeChecker2.mjs +41 -0
  394. package/lib/validators/OpenApiV3TypeChecker2.mjs.map +1 -0
  395. package/lib/validators/OpenApiV3_1TypeChecker.js.map +1 -1
  396. package/lib/validators/OpenApiV3_1TypeChecker.mjs +6 -31
  397. package/lib/validators/OpenApiV3_1TypeChecker.mjs.map +1 -1
  398. package/lib/validators/OpenApiV3_1TypeChecker2.mjs +45 -0
  399. package/lib/validators/OpenApiV3_1TypeChecker2.mjs.map +1 -0
  400. package/lib/validators/OpenApiValidator.js.map +1 -1
  401. package/lib/validators/OpenApiValidator.mjs +5 -72
  402. package/lib/validators/OpenApiValidator.mjs.map +1 -1
  403. package/lib/validators/OpenApiValidator2.mjs +83 -0
  404. package/lib/validators/OpenApiValidator2.mjs.map +1 -0
  405. package/lib/validators/SwaggerV2TypeChecker.js.map +1 -1
  406. package/lib/validators/SwaggerV2TypeChecker.mjs +6 -28
  407. package/lib/validators/SwaggerV2TypeChecker.mjs.map +1 -1
  408. package/lib/validators/SwaggerV2TypeChecker2.mjs +42 -0
  409. package/lib/validators/SwaggerV2TypeChecker2.mjs.map +1 -0
  410. package/lib/validators/functional/_isBigintString.js.map +1 -1
  411. package/lib/validators/functional/_isBigintString.mjs +6 -10
  412. package/lib/validators/functional/_isBigintString.mjs.map +1 -1
  413. package/lib/validators/functional/_isBigintString2.mjs +25 -0
  414. package/lib/validators/functional/_isBigintString2.mjs.map +1 -0
  415. package/lib/validators/functional/_isFormatByte.js.map +1 -1
  416. package/lib/validators/functional/_isFormatByte.mjs +6 -6
  417. package/lib/validators/functional/_isFormatByte.mjs.map +1 -1
  418. package/lib/validators/functional/_isFormatByte2.mjs +21 -0
  419. package/lib/validators/functional/_isFormatByte2.mjs.map +1 -0
  420. package/lib/validators/functional/_isFormatDate.js.map +1 -1
  421. package/lib/validators/functional/_isFormatDate.mjs +6 -3
  422. package/lib/validators/functional/_isFormatDate.mjs.map +1 -1
  423. package/lib/validators/functional/_isFormatDate2.mjs +18 -0
  424. package/lib/validators/functional/_isFormatDate2.mjs.map +1 -0
  425. package/lib/validators/functional/_isFormatDateTime.js.map +1 -1
  426. package/lib/validators/functional/_isFormatDateTime.mjs +6 -3
  427. package/lib/validators/functional/_isFormatDateTime.mjs.map +1 -1
  428. package/lib/validators/functional/_isFormatDateTime2.mjs +18 -0
  429. package/lib/validators/functional/_isFormatDateTime2.mjs.map +1 -0
  430. package/lib/validators/functional/_isFormatDuration.js.map +1 -1
  431. package/lib/validators/functional/_isFormatDuration.mjs +6 -3
  432. package/lib/validators/functional/_isFormatDuration.mjs.map +1 -1
  433. package/lib/validators/functional/_isFormatDuration2.mjs +18 -0
  434. package/lib/validators/functional/_isFormatDuration2.mjs.map +1 -0
  435. package/lib/validators/functional/_isFormatEmail.js.map +1 -1
  436. package/lib/validators/functional/_isFormatEmail.mjs +6 -3
  437. package/lib/validators/functional/_isFormatEmail.mjs.map +1 -1
  438. package/lib/validators/functional/_isFormatEmail2.mjs +18 -0
  439. package/lib/validators/functional/_isFormatEmail2.mjs.map +1 -0
  440. package/lib/validators/functional/_isFormatHostname.js.map +1 -1
  441. package/lib/validators/functional/_isFormatHostname.mjs +6 -3
  442. package/lib/validators/functional/_isFormatHostname.mjs.map +1 -1
  443. package/lib/validators/functional/_isFormatHostname2.mjs +18 -0
  444. package/lib/validators/functional/_isFormatHostname2.mjs.map +1 -0
  445. package/lib/validators/functional/_isFormatIdnEmail.js.map +1 -1
  446. package/lib/validators/functional/_isFormatIdnEmail.mjs +6 -3
  447. package/lib/validators/functional/_isFormatIdnEmail.mjs.map +1 -1
  448. package/lib/validators/functional/_isFormatIdnEmail2.mjs +18 -0
  449. package/lib/validators/functional/_isFormatIdnEmail2.mjs.map +1 -0
  450. package/lib/validators/functional/_isFormatIdnHostname.js.map +1 -1
  451. package/lib/validators/functional/_isFormatIdnHostname.mjs +6 -3
  452. package/lib/validators/functional/_isFormatIdnHostname.mjs.map +1 -1
  453. package/lib/validators/functional/_isFormatIdnHostname2.mjs +18 -0
  454. package/lib/validators/functional/_isFormatIdnHostname2.mjs.map +1 -0
  455. package/lib/validators/functional/_isFormatIpv4.js.map +1 -1
  456. package/lib/validators/functional/_isFormatIpv4.mjs +6 -3
  457. package/lib/validators/functional/_isFormatIpv4.mjs.map +1 -1
  458. package/lib/validators/functional/_isFormatIpv42.mjs +18 -0
  459. package/lib/validators/functional/_isFormatIpv42.mjs.map +1 -0
  460. package/lib/validators/functional/_isFormatIpv6.js.map +1 -1
  461. package/lib/validators/functional/_isFormatIpv6.mjs +6 -3
  462. package/lib/validators/functional/_isFormatIpv6.mjs.map +1 -1
  463. package/lib/validators/functional/_isFormatIpv62.mjs +18 -0
  464. package/lib/validators/functional/_isFormatIpv62.mjs.map +1 -0
  465. package/lib/validators/functional/_isFormatIri.js.map +1 -1
  466. package/lib/validators/functional/_isFormatIri.mjs +6 -3
  467. package/lib/validators/functional/_isFormatIri.mjs.map +1 -1
  468. package/lib/validators/functional/_isFormatIri2.mjs +18 -0
  469. package/lib/validators/functional/_isFormatIri2.mjs.map +1 -0
  470. package/lib/validators/functional/_isFormatIriReference.js.map +1 -1
  471. package/lib/validators/functional/_isFormatIriReference.mjs +6 -3
  472. package/lib/validators/functional/_isFormatIriReference.mjs.map +1 -1
  473. package/lib/validators/functional/_isFormatIriReference2.mjs +18 -0
  474. package/lib/validators/functional/_isFormatIriReference2.mjs.map +1 -0
  475. package/lib/validators/functional/_isFormatJsonPointer.js.map +1 -1
  476. package/lib/validators/functional/_isFormatJsonPointer.mjs +6 -3
  477. package/lib/validators/functional/_isFormatJsonPointer.mjs.map +1 -1
  478. package/lib/validators/functional/_isFormatJsonPointer2.mjs +18 -0
  479. package/lib/validators/functional/_isFormatJsonPointer2.mjs.map +1 -0
  480. package/lib/validators/functional/_isFormatPassword.js.map +1 -1
  481. package/lib/validators/functional/_isFormatPassword.mjs +6 -2
  482. package/lib/validators/functional/_isFormatPassword.mjs.map +1 -1
  483. package/lib/validators/functional/_isFormatPassword2.mjs +17 -0
  484. package/lib/validators/functional/_isFormatPassword2.mjs.map +1 -0
  485. package/lib/validators/functional/_isFormatRegex.js.map +1 -1
  486. package/lib/validators/functional/_isFormatRegex.mjs +6 -10
  487. package/lib/validators/functional/_isFormatRegex.mjs.map +1 -1
  488. package/lib/validators/functional/_isFormatRegex2.mjs +25 -0
  489. package/lib/validators/functional/_isFormatRegex2.mjs.map +1 -0
  490. package/lib/validators/functional/_isFormatRelativeJsonPointer.js.map +1 -1
  491. package/lib/validators/functional/_isFormatRelativeJsonPointer.mjs +6 -3
  492. package/lib/validators/functional/_isFormatRelativeJsonPointer.mjs.map +1 -1
  493. package/lib/validators/functional/_isFormatRelativeJsonPointer2.mjs +18 -0
  494. package/lib/validators/functional/_isFormatRelativeJsonPointer2.mjs.map +1 -0
  495. package/lib/validators/functional/_isFormatTime.js.map +1 -1
  496. package/lib/validators/functional/_isFormatTime.mjs +6 -3
  497. package/lib/validators/functional/_isFormatTime.mjs.map +1 -1
  498. package/lib/validators/functional/_isFormatTime2.mjs +18 -0
  499. package/lib/validators/functional/_isFormatTime2.mjs.map +1 -0
  500. package/lib/validators/functional/_isFormatUri.js.map +1 -1
  501. package/lib/validators/functional/_isFormatUri.mjs +6 -4
  502. package/lib/validators/functional/_isFormatUri.mjs.map +1 -1
  503. package/lib/validators/functional/_isFormatUri2.mjs +19 -0
  504. package/lib/validators/functional/_isFormatUri2.mjs.map +1 -0
  505. package/lib/validators/functional/_isFormatUriReference.js.map +1 -1
  506. package/lib/validators/functional/_isFormatUriReference.mjs +6 -3
  507. package/lib/validators/functional/_isFormatUriReference.mjs.map +1 -1
  508. package/lib/validators/functional/_isFormatUriReference2.mjs +18 -0
  509. package/lib/validators/functional/_isFormatUriReference2.mjs.map +1 -0
  510. package/lib/validators/functional/_isFormatUriTemplate.js.map +1 -1
  511. package/lib/validators/functional/_isFormatUriTemplate.mjs +6 -3
  512. package/lib/validators/functional/_isFormatUriTemplate.mjs.map +1 -1
  513. package/lib/validators/functional/_isFormatUriTemplate2.mjs +18 -0
  514. package/lib/validators/functional/_isFormatUriTemplate2.mjs.map +1 -0
  515. package/lib/validators/functional/_isFormatUrl.js.map +1 -1
  516. package/lib/validators/functional/_isFormatUrl.mjs +6 -3
  517. package/lib/validators/functional/_isFormatUrl.mjs.map +1 -1
  518. package/lib/validators/functional/_isFormatUrl2.mjs +18 -0
  519. package/lib/validators/functional/_isFormatUrl2.mjs.map +1 -0
  520. package/lib/validators/functional/_isFormatUuid.js.map +1 -1
  521. package/lib/validators/functional/_isFormatUuid.mjs +6 -3
  522. package/lib/validators/functional/_isFormatUuid.mjs.map +1 -1
  523. package/lib/validators/functional/_isFormatUuid2.mjs +18 -0
  524. package/lib/validators/functional/_isFormatUuid2.mjs.map +1 -0
  525. package/lib/validators/functional/_isUniqueItems.js.map +1 -1
  526. package/lib/validators/functional/_isUniqueItems.mjs +6 -136
  527. package/lib/validators/functional/_isUniqueItems.mjs.map +1 -1
  528. package/lib/validators/functional/_isUniqueItems2.mjs +151 -0
  529. package/lib/validators/functional/_isUniqueItems2.mjs.map +1 -0
  530. package/lib/validators/index.d.ts +1 -0
  531. package/lib/validators/index.js +0 -1
  532. package/lib/validators/index.js.map +1 -1
  533. package/lib/validators/index.mjs +7 -6
  534. package/lib/validators/index.mjs.map +1 -1
  535. package/lib/validators/index2.mjs +45 -0
  536. package/lib/validators/index2.mjs.map +1 -0
  537. package/lib/validators/internal/IOpenApiValidatorContext.mjs +6 -0
  538. package/lib/validators/internal/IOpenApiValidatorContext.mjs.map +1 -1
  539. package/lib/validators/internal/IOpenApiValidatorContext2.mjs +14 -0
  540. package/lib/validators/internal/IOpenApiValidatorContext2.mjs.map +1 -0
  541. package/lib/validators/internal/OpenApiArrayValidator.js.map +1 -1
  542. package/lib/validators/internal/OpenApiArrayValidator.mjs +5 -44
  543. package/lib/validators/internal/OpenApiArrayValidator.mjs.map +1 -1
  544. package/lib/validators/internal/OpenApiArrayValidator2.mjs +45 -0
  545. package/lib/validators/internal/OpenApiArrayValidator2.mjs.map +1 -0
  546. package/lib/validators/internal/OpenApiBooleanValidator.js.map +1 -1
  547. package/lib/validators/internal/OpenApiBooleanValidator.mjs +6 -7
  548. package/lib/validators/internal/OpenApiBooleanValidator.mjs.map +1 -1
  549. package/lib/validators/internal/OpenApiBooleanValidator2.mjs +21 -0
  550. package/lib/validators/internal/OpenApiBooleanValidator2.mjs.map +1 -0
  551. package/lib/validators/internal/OpenApiConstantValidator.js.map +1 -1
  552. package/lib/validators/internal/OpenApiConstantValidator.mjs +6 -7
  553. package/lib/validators/internal/OpenApiConstantValidator.mjs.map +1 -1
  554. package/lib/validators/internal/OpenApiConstantValidator2.mjs +21 -0
  555. package/lib/validators/internal/OpenApiConstantValidator2.mjs.map +1 -0
  556. package/lib/validators/internal/OpenApiIntegerValidator.js.map +1 -1
  557. package/lib/validators/internal/OpenApiIntegerValidator.mjs +6 -45
  558. package/lib/validators/internal/OpenApiIntegerValidator.mjs.map +1 -1
  559. package/lib/validators/internal/OpenApiIntegerValidator2.mjs +44 -0
  560. package/lib/validators/internal/OpenApiIntegerValidator2.mjs.map +1 -0
  561. package/lib/validators/internal/OpenApiNumberValidator.js.map +1 -1
  562. package/lib/validators/internal/OpenApiNumberValidator.mjs +6 -45
  563. package/lib/validators/internal/OpenApiNumberValidator.mjs.map +1 -1
  564. package/lib/validators/internal/OpenApiNumberValidator2.mjs +44 -0
  565. package/lib/validators/internal/OpenApiNumberValidator2.mjs.map +1 -0
  566. package/lib/validators/internal/OpenApiObjectValidator.js +6 -12
  567. package/lib/validators/internal/OpenApiObjectValidator.js.map +1 -1
  568. package/lib/validators/internal/OpenApiObjectValidator.mjs +5 -65
  569. package/lib/validators/internal/OpenApiObjectValidator.mjs.map +1 -1
  570. package/lib/validators/internal/OpenApiObjectValidator2.mjs +65 -0
  571. package/lib/validators/internal/OpenApiObjectValidator2.mjs.map +1 -0
  572. package/lib/validators/internal/OpenApiOneOfValidator.js +20 -20
  573. package/lib/validators/internal/OpenApiOneOfValidator.js.map +1 -1
  574. package/lib/validators/internal/OpenApiOneOfValidator.mjs +5 -203
  575. package/lib/validators/internal/OpenApiOneOfValidator.mjs.map +1 -1
  576. package/lib/validators/internal/OpenApiOneOfValidator2.mjs +196 -0
  577. package/lib/validators/internal/OpenApiOneOfValidator2.mjs.map +1 -0
  578. package/lib/validators/internal/OpenApiSchemaNamingRule.js.map +1 -1
  579. package/lib/validators/internal/OpenApiSchemaNamingRule.mjs +5 -118
  580. package/lib/validators/internal/OpenApiSchemaNamingRule.mjs.map +1 -1
  581. package/lib/validators/internal/OpenApiSchemaNamingRule2.mjs +134 -0
  582. package/lib/validators/internal/OpenApiSchemaNamingRule2.mjs.map +1 -0
  583. package/lib/validators/internal/OpenApiStationValidator.js +2 -1
  584. package/lib/validators/internal/OpenApiStationValidator.js.map +1 -1
  585. package/lib/validators/internal/OpenApiStationValidator.mjs +5 -104
  586. package/lib/validators/internal/OpenApiStationValidator.mjs.map +1 -1
  587. package/lib/validators/internal/OpenApiStationValidator2.mjs +86 -0
  588. package/lib/validators/internal/OpenApiStationValidator2.mjs.map +1 -0
  589. package/lib/validators/internal/OpenApiStringValidator.js.map +1 -1
  590. package/lib/validators/internal/OpenApiStringValidator.mjs +5 -82
  591. package/lib/validators/internal/OpenApiStringValidator.mjs.map +1 -1
  592. package/lib/validators/internal/OpenApiStringValidator2.mjs +105 -0
  593. package/lib/validators/internal/OpenApiStringValidator2.mjs.map +1 -0
  594. package/lib/validators/internal/OpenApiTupleValidator.js.map +1 -1
  595. package/lib/validators/internal/OpenApiTupleValidator.mjs +5 -43
  596. package/lib/validators/internal/OpenApiTupleValidator.mjs.map +1 -1
  597. package/lib/validators/internal/OpenApiTupleValidator2.mjs +43 -0
  598. package/lib/validators/internal/OpenApiTupleValidator2.mjs.map +1 -0
  599. package/package.json +8 -9
  600. package/src/converters/LlmSchemaConverter.ts +152 -33
  601. package/src/converters/OpenApiConverter.ts +375 -375
  602. package/src/converters/internal/OpenApiV3Downgrader.ts +381 -381
  603. package/src/converters/internal/OpenApiV3Upgrader.ts +494 -494
  604. package/src/converters/internal/OpenApiV3_1Downgrader.ts +318 -318
  605. package/src/converters/internal/OpenApiV3_1Upgrader.ts +713 -710
  606. package/src/converters/internal/OpenApiV3_2Upgrader.ts +342 -342
  607. package/src/converters/internal/SwaggerV2Downgrader.ts +450 -450
  608. package/src/converters/internal/SwaggerV2Upgrader.ts +547 -547
  609. package/src/http/HttpError.ts +114 -114
  610. package/src/http/HttpLlm.ts +169 -169
  611. package/src/http/HttpMigration.ts +94 -94
  612. package/src/http/internal/HttpMigrateApplicationComposer.ts +56 -56
  613. package/src/http/internal/HttpMigrateRouteComposer.ts +505 -505
  614. package/src/utils/LlmJson.ts +173 -173
  615. package/src/utils/Singleton.ts +0 -1
  616. package/src/utils/internal/OpenApiTypeCheckerBase.ts +2 -0
  617. package/src/utils/internal/coerceLlmArguments.ts +21 -3
  618. package/src/utils/internal/parseLenientJson.ts +919 -919
  619. package/src/validators/index.ts +0 -1
@@ -1,450 +1,450 @@
1
- import { OpenApi, SwaggerV2 } from "@typia/interface";
2
-
3
- import { OpenApiTypeChecker } from "../../validators/OpenApiTypeChecker";
4
-
5
- export namespace SwaggerV2Downgrader {
6
- export interface IComponentsCollection {
7
- original: OpenApi.IComponents;
8
- downgraded: Record<string, SwaggerV2.IJsonSchema>;
9
- }
10
-
11
- export const downgrade = (input: OpenApi.IDocument): SwaggerV2.IDocument => {
12
- const collection: IComponentsCollection = downgradeComponents(
13
- input.components,
14
- );
15
- return {
16
- swagger: "2.0",
17
- info: input.info,
18
- host: input.servers?.[0]?.url
19
- ? input.servers[0].url.split("://").pop()!
20
- : "",
21
- definitions: collection.downgraded,
22
- securityDefinitions: input.components?.securitySchemes
23
- ? Object.fromEntries(
24
- Object.entries(input.components.securitySchemes)
25
- .filter(([_, v]) => v !== undefined)
26
- .map(([key, value]) =>
27
- downgradeSecurityScheme(value).map((v) => [key, v]),
28
- )
29
- .flat(),
30
- )
31
- : undefined,
32
- paths: input.paths
33
- ? Object.fromEntries(
34
- Object.entries(input.paths)
35
- .filter(([_, v]) => v !== undefined)
36
- .map(
37
- ([key, value]) =>
38
- [key, downgradePathItem(collection)(value)] as const,
39
- ),
40
- )
41
- : undefined,
42
- security: input.security,
43
- tags: input.tags,
44
- };
45
- };
46
-
47
- /* -----------------------------------------------------------
48
- OPERATORS
49
- ----------------------------------------------------------- */
50
- const downgradePathItem =
51
- (collection: IComponentsCollection) =>
52
- (pathItem: OpenApi.IPath): SwaggerV2.IPath => {
53
- // Collect non-standard operations for x-additionalOperations
54
- const xAdditionalOperations: Record<string, SwaggerV2.IOperation> = {};
55
-
56
- // query method goes to x-additionalOperations
57
- if (pathItem.query) {
58
- xAdditionalOperations["query"] = downgradeOperation(collection)(pathItem.query);
59
- }
60
-
61
- // additionalOperations also go to x-additionalOperations
62
- if (pathItem.additionalOperations) {
63
- for (const [key, value] of Object.entries(pathItem.additionalOperations)) {
64
- if (value !== undefined) {
65
- xAdditionalOperations[key] = downgradeOperation(collection)(value);
66
- }
67
- }
68
- }
69
-
70
- return {
71
- ...(pathItem as any),
72
- ...(pathItem.get
73
- ? { get: downgradeOperation(collection)(pathItem.get) }
74
- : undefined),
75
- ...(pathItem.put
76
- ? { put: downgradeOperation(collection)(pathItem.put) }
77
- : undefined),
78
- ...(pathItem.post
79
- ? { post: downgradeOperation(collection)(pathItem.post) }
80
- : undefined),
81
- ...(pathItem.delete
82
- ? { delete: downgradeOperation(collection)(pathItem.delete) }
83
- : undefined),
84
- ...(pathItem.options
85
- ? { options: downgradeOperation(collection)(pathItem.options) }
86
- : undefined),
87
- ...(pathItem.head
88
- ? { head: downgradeOperation(collection)(pathItem.head) }
89
- : undefined),
90
- ...(pathItem.patch
91
- ? { patch: downgradeOperation(collection)(pathItem.patch) }
92
- : undefined),
93
- ...(pathItem.trace
94
- ? { trace: downgradeOperation(collection)(pathItem.trace) }
95
- : undefined),
96
- ...(Object.keys(xAdditionalOperations).length > 0
97
- ? { "x-additionalOperations": xAdditionalOperations }
98
- : undefined),
99
- // Remove v3.2-only properties from spread
100
- query: undefined,
101
- additionalOperations: undefined,
102
- };
103
- };
104
-
105
- const downgradeOperation =
106
- (collection: IComponentsCollection) =>
107
- (input: OpenApi.IOperation): SwaggerV2.IOperation => ({
108
- ...input,
109
- parameters:
110
- input.parameters !== undefined || input.requestBody !== undefined
111
- ? [
112
- ...(input.parameters ?? []).map(downgradeParameter(collection)),
113
- ...(input.requestBody
114
- ? [downgradeRequestBody(collection)(input.requestBody)]
115
- : []),
116
- ]
117
- : undefined,
118
- responses: input.responses
119
- ? Object.fromEntries(
120
- Object.entries(input.responses)
121
- .filter(([_, v]) => v !== undefined)
122
- .map(([key, value]) => [
123
- key,
124
- downgradeResponse(collection)(value),
125
- ]),
126
- )
127
- : undefined,
128
- ...{
129
- requestBody: undefined,
130
- servers: undefined,
131
- },
132
- });
133
-
134
- const downgradeParameter =
135
- (collection: IComponentsCollection) =>
136
- (
137
- input: OpenApi.IOperation.IParameter,
138
- i: number,
139
- ): SwaggerV2.IOperation.IParameter =>
140
- ({
141
- ...downgradeSchema(collection)(input.schema),
142
- ...input,
143
- in: input.in === "querystring" ? "query" : input.in,
144
- required: (input.schema as any)?.required,
145
- schema: undefined,
146
- name: input.name ?? `p${i}`,
147
- ...{
148
- example: undefined,
149
- examples: undefined,
150
- },
151
- }) as any;
152
-
153
- const downgradeRequestBody =
154
- (collection: IComponentsCollection) =>
155
- (
156
- input: OpenApi.IOperation.IRequestBody,
157
- ): SwaggerV2.IOperation.IParameter => ({
158
- name: "body",
159
- in: "body",
160
- description: input.description,
161
- required: input.required,
162
- schema: downgradeSchema(collection)(
163
- Object.values(input.content ?? {})[0]?.schema ?? {},
164
- ),
165
- });
166
-
167
- const downgradeResponse =
168
- (collection: IComponentsCollection) =>
169
- (input: OpenApi.IOperation.IResponse): SwaggerV2.IOperation.IResponse => ({
170
- description: input.description,
171
- schema: downgradeSchema(collection)(
172
- Object.values(input.content ?? {})[0]?.schema ?? {},
173
- ),
174
- headers: input.headers
175
- ? Object.fromEntries(
176
- Object.entries(input.headers)
177
- .filter(([_, v]) => v !== undefined)
178
- .map(([key, value]) => [
179
- key,
180
- {
181
- ...value,
182
- schema: downgradeSchema(collection)(value.schema),
183
- ...{
184
- example: undefined,
185
- examples: undefined,
186
- },
187
- },
188
- ]),
189
- )
190
- : undefined,
191
- });
192
-
193
- /* -----------------------------------------------------------
194
- DEFINITIONS
195
- ----------------------------------------------------------- */
196
- export const downgradeComponents = (
197
- input: OpenApi.IComponents,
198
- ): IComponentsCollection => {
199
- const collection: IComponentsCollection = {
200
- original: input,
201
- downgraded: {},
202
- };
203
- if (input.schemas) {
204
- collection.downgraded.schemas = {};
205
- for (const [key, value] of Object.entries(input.schemas))
206
- if (value !== undefined)
207
- collection.downgraded[key.split("/").pop()!] =
208
- downgradeSchema(collection)(value);
209
- }
210
- return collection;
211
- };
212
-
213
- export const downgradeSchema =
214
- (collection: IComponentsCollection) =>
215
- (input: OpenApi.IJsonSchema): SwaggerV2.IJsonSchema => {
216
- const nullable: boolean = isNullable(new Set())(collection.original)(
217
- input,
218
- );
219
- const union: SwaggerV2.IJsonSchema[] = [];
220
- const attribute: SwaggerV2.IJsonSchema.__IAttribute = {
221
- title: input.title,
222
- description: input.description,
223
- deprecated: input.deprecated,
224
- readOnly: input.readOnly,
225
- example: input.example,
226
- examples: input.examples ? Object.values(input.examples) : undefined,
227
- ...Object.fromEntries(
228
- Object.entries(input).filter(
229
- ([key, value]) => key.startsWith("x-") && value !== undefined,
230
- ),
231
- ),
232
- };
233
- const visit = (schema: OpenApi.IJsonSchema): void => {
234
- if (OpenApiTypeChecker.isBoolean(schema))
235
- union.push({ type: "boolean" });
236
- else if (
237
- OpenApiTypeChecker.isBoolean(schema) ||
238
- OpenApiTypeChecker.isInteger(schema) ||
239
- OpenApiTypeChecker.isNumber(schema) ||
240
- OpenApiTypeChecker.isString(schema)
241
- )
242
- union.push({
243
- ...schema,
244
- examples: schema.examples
245
- ? Object.values(schema.examples)
246
- : undefined,
247
- });
248
- else if (OpenApiTypeChecker.isReference(schema))
249
- union.push({ $ref: `#/definitions/${schema.$ref.split("/").pop()}` });
250
- else if (OpenApiTypeChecker.isArray(schema))
251
- union.push({
252
- ...schema,
253
- items: downgradeSchema(collection)(schema.items),
254
- examples: schema.examples
255
- ? Object.values(schema.examples)
256
- : undefined,
257
- });
258
- else if (OpenApiTypeChecker.isTuple(schema))
259
- union.push({
260
- ...schema,
261
- items: ((): SwaggerV2.IJsonSchema => {
262
- if (schema.additionalItems === true) return {};
263
- const elements = [
264
- ...schema.prefixItems,
265
- ...(typeof schema.additionalItems === "object"
266
- ? [downgradeSchema(collection)(schema.additionalItems)]
267
- : []),
268
- ];
269
- if (elements.length === 0) return {};
270
- return {
271
- "x-oneOf": elements.map(downgradeSchema(collection) as any),
272
- };
273
- })(),
274
- minItems: schema.prefixItems.length,
275
- maxItems:
276
- !!schema.additionalItems === true
277
- ? undefined
278
- : schema.prefixItems.length,
279
- ...{
280
- prefixItems: undefined,
281
- additionalItems: undefined,
282
- },
283
- examples: schema.examples
284
- ? Object.values(schema.examples)
285
- : undefined,
286
- });
287
- else if (OpenApiTypeChecker.isObject(schema))
288
- union.push({
289
- ...schema,
290
- properties: schema.properties
291
- ? Object.fromEntries(
292
- Object.entries(schema.properties)
293
- .filter(([_, v]) => v !== undefined)
294
- .map(([key, value]) => [
295
- key,
296
- downgradeSchema(collection)(value),
297
- ]),
298
- )
299
- : undefined,
300
- additionalProperties:
301
- typeof schema.additionalProperties === "object"
302
- ? downgradeSchema(collection)(schema.additionalProperties)
303
- : schema.additionalProperties,
304
- required: schema.required,
305
- examples: schema.examples
306
- ? Object.values(schema.examples)
307
- : undefined,
308
- });
309
- else if (OpenApiTypeChecker.isOneOf(schema))
310
- schema.oneOf.forEach(visit);
311
- };
312
- const visitConstant = (schema: OpenApi.IJsonSchema): void => {
313
- const insert = (value: any): void => {
314
- const matched: SwaggerV2.IJsonSchema.INumber | undefined = union.find(
315
- (u) =>
316
- (u as SwaggerV2.IJsonSchema.__ISignificant<any>).type === value,
317
- ) as SwaggerV2.IJsonSchema.INumber | undefined;
318
- if (matched !== undefined) {
319
- matched.enum ??= [];
320
- matched.enum.push(value);
321
- } else union.push({ type: typeof value as "number", enum: [value] });
322
- if (OpenApiTypeChecker.isConstant(schema)) insert(schema.const);
323
- else if (OpenApiTypeChecker.isOneOf(schema))
324
- schema.oneOf.forEach(insert);
325
- };
326
- };
327
-
328
- visit(input);
329
- visitConstant(input);
330
- if (nullable) {
331
- for (const u of union)
332
- if (OpenApiTypeChecker.isReference(u as any))
333
- downgradeNullableReference(new Set())(collection)(u as any);
334
- else (u as SwaggerV2.IJsonSchema.IArray)["x-nullable"] = true;
335
- }
336
-
337
- if (nullable === true && union.length === 0)
338
- return { type: "null", ...attribute };
339
- return {
340
- ...(union.length === 0
341
- ? { type: undefined }
342
- : union.length === 1
343
- ? { ...union[0] }
344
- : { "x-oneOf": union }),
345
- ...attribute,
346
- ...(union.length > 1 ? { discriminator: undefined } : {}),
347
- };
348
- };
349
-
350
- const downgradeNullableReference =
351
- (visited: Set<string>) =>
352
- (collection: IComponentsCollection) =>
353
- (schema: SwaggerV2.IJsonSchema.IReference): void => {
354
- const key: string = schema.$ref.split("/").pop()!;
355
- if (key.endsWith(".Nullable")) return;
356
-
357
- const found: OpenApi.IJsonSchema | undefined =
358
- collection.original.schemas?.[key];
359
- if (found === undefined) return;
360
- else if (isNullable(visited)(collection.original)(found) === true) return;
361
- else if (collection.downgraded[`${key}.Nullable`] === undefined) {
362
- collection.downgraded[`${key}.Nullable`] = {};
363
- collection.downgraded[`${key}.Nullable`] = downgradeSchema(collection)(
364
- OpenApiTypeChecker.isOneOf(found)
365
- ? {
366
- ...found,
367
- oneOf: [...found.oneOf, { type: "null" }],
368
- }
369
- : {
370
- title: found.title,
371
- description: found.description,
372
- example: found.example,
373
- examples: found.examples
374
- ? Object.values(found.examples)
375
- : undefined,
376
- ...Object.fromEntries(
377
- Object.entries(found).filter(
378
- ([key, value]) =>
379
- key.startsWith("x-") && value !== undefined,
380
- ),
381
- ),
382
- oneOf: [found, { type: "null" }],
383
- },
384
- );
385
- }
386
- schema.$ref += ".Nullable";
387
- };
388
-
389
- const downgradeSecurityScheme = (
390
- input: OpenApi.ISecurityScheme,
391
- ): SwaggerV2.ISecurityDefinition[] => {
392
- if (input.type === "apiKey") return [input];
393
- else if (input.type === "http")
394
- if (input.scheme === "basic")
395
- return [{ type: "basic", description: input.description }];
396
- else return [];
397
- else if (input.type === "oauth2") {
398
- const output: SwaggerV2.ISecurityDefinition[] = [];
399
- if (input.flows.implicit)
400
- output.push({
401
- type: "oauth2",
402
- flow: "implicit",
403
- authorizationUrl: input.flows.implicit.authorizationUrl,
404
- scopes: input.flows.implicit.scopes,
405
- });
406
- if (input.flows.password)
407
- output.push({
408
- type: "oauth2",
409
- flow: "password",
410
- tokenUrl: input.flows.password.tokenUrl,
411
- scopes: input.flows.password.scopes,
412
- });
413
- if (input.flows.clientCredentials)
414
- output.push({
415
- type: "oauth2",
416
- flow: "application",
417
- tokenUrl: input.flows.clientCredentials.tokenUrl,
418
- scopes: input.flows.clientCredentials.scopes,
419
- });
420
- if (input.flows.authorizationCode)
421
- output.push({
422
- type: "oauth2",
423
- flow: "accessCode",
424
- authorizationUrl: input.flows.authorizationCode.authorizationUrl,
425
- tokenUrl: input.flows.authorizationCode.tokenUrl,
426
- scopes: input.flows.authorizationCode.scopes,
427
- });
428
- return output;
429
- }
430
- return [];
431
- };
432
-
433
- const isNullable =
434
- (visited: Set<string>) =>
435
- (components: OpenApi.IComponents) =>
436
- (schema: OpenApi.IJsonSchema): boolean => {
437
- if (OpenApiTypeChecker.isNull(schema)) return true;
438
- else if (OpenApiTypeChecker.isReference(schema)) {
439
- if (visited.has(schema.$ref)) return false;
440
- visited.add(schema.$ref);
441
- const key: string = schema.$ref.split("/").pop()!;
442
- const next: OpenApi.IJsonSchema | undefined = components.schemas?.[key];
443
- return next ? isNullable(visited)(components)(next) : false;
444
- }
445
- return (
446
- OpenApiTypeChecker.isOneOf(schema) &&
447
- schema.oneOf.some(isNullable(visited)(components))
448
- );
449
- };
450
- }
1
+ import { OpenApi, SwaggerV2 } from "@typia/interface";
2
+
3
+ import { OpenApiTypeChecker } from "../../validators/OpenApiTypeChecker";
4
+
5
+ export namespace SwaggerV2Downgrader {
6
+ export interface IComponentsCollection {
7
+ original: OpenApi.IComponents;
8
+ downgraded: Record<string, SwaggerV2.IJsonSchema>;
9
+ }
10
+
11
+ export const downgrade = (input: OpenApi.IDocument): SwaggerV2.IDocument => {
12
+ const collection: IComponentsCollection = downgradeComponents(
13
+ input.components,
14
+ );
15
+ return {
16
+ swagger: "2.0",
17
+ info: input.info,
18
+ host: input.servers?.[0]?.url
19
+ ? input.servers[0].url.split("://").pop()!
20
+ : "",
21
+ definitions: collection.downgraded,
22
+ securityDefinitions: input.components?.securitySchemes
23
+ ? Object.fromEntries(
24
+ Object.entries(input.components.securitySchemes)
25
+ .filter(([_, v]) => v !== undefined)
26
+ .map(([key, value]) =>
27
+ downgradeSecurityScheme(value).map((v) => [key, v]),
28
+ )
29
+ .flat(),
30
+ )
31
+ : undefined,
32
+ paths: input.paths
33
+ ? Object.fromEntries(
34
+ Object.entries(input.paths)
35
+ .filter(([_, v]) => v !== undefined)
36
+ .map(
37
+ ([key, value]) =>
38
+ [key, downgradePathItem(collection)(value)] as const,
39
+ ),
40
+ )
41
+ : undefined,
42
+ security: input.security,
43
+ tags: input.tags,
44
+ };
45
+ };
46
+
47
+ /* -----------------------------------------------------------
48
+ OPERATORS
49
+ ----------------------------------------------------------- */
50
+ const downgradePathItem =
51
+ (collection: IComponentsCollection) =>
52
+ (pathItem: OpenApi.IPath): SwaggerV2.IPath => {
53
+ // Collect non-standard operations for x-additionalOperations
54
+ const xAdditionalOperations: Record<string, SwaggerV2.IOperation> = {};
55
+
56
+ // query method goes to x-additionalOperations
57
+ if (pathItem.query) {
58
+ xAdditionalOperations["query"] = downgradeOperation(collection)(pathItem.query);
59
+ }
60
+
61
+ // additionalOperations also go to x-additionalOperations
62
+ if (pathItem.additionalOperations) {
63
+ for (const [key, value] of Object.entries(pathItem.additionalOperations)) {
64
+ if (value !== undefined) {
65
+ xAdditionalOperations[key] = downgradeOperation(collection)(value);
66
+ }
67
+ }
68
+ }
69
+
70
+ return {
71
+ ...(pathItem as any),
72
+ ...(pathItem.get
73
+ ? { get: downgradeOperation(collection)(pathItem.get) }
74
+ : undefined),
75
+ ...(pathItem.put
76
+ ? { put: downgradeOperation(collection)(pathItem.put) }
77
+ : undefined),
78
+ ...(pathItem.post
79
+ ? { post: downgradeOperation(collection)(pathItem.post) }
80
+ : undefined),
81
+ ...(pathItem.delete
82
+ ? { delete: downgradeOperation(collection)(pathItem.delete) }
83
+ : undefined),
84
+ ...(pathItem.options
85
+ ? { options: downgradeOperation(collection)(pathItem.options) }
86
+ : undefined),
87
+ ...(pathItem.head
88
+ ? { head: downgradeOperation(collection)(pathItem.head) }
89
+ : undefined),
90
+ ...(pathItem.patch
91
+ ? { patch: downgradeOperation(collection)(pathItem.patch) }
92
+ : undefined),
93
+ ...(pathItem.trace
94
+ ? { trace: downgradeOperation(collection)(pathItem.trace) }
95
+ : undefined),
96
+ ...(Object.keys(xAdditionalOperations).length > 0
97
+ ? { "x-additionalOperations": xAdditionalOperations }
98
+ : undefined),
99
+ // Remove v3.2-only properties from spread
100
+ query: undefined,
101
+ additionalOperations: undefined,
102
+ };
103
+ };
104
+
105
+ const downgradeOperation =
106
+ (collection: IComponentsCollection) =>
107
+ (input: OpenApi.IOperation): SwaggerV2.IOperation => ({
108
+ ...input,
109
+ parameters:
110
+ input.parameters !== undefined || input.requestBody !== undefined
111
+ ? [
112
+ ...(input.parameters ?? []).map(downgradeParameter(collection)),
113
+ ...(input.requestBody
114
+ ? [downgradeRequestBody(collection)(input.requestBody)]
115
+ : []),
116
+ ]
117
+ : undefined,
118
+ responses: input.responses
119
+ ? Object.fromEntries(
120
+ Object.entries(input.responses)
121
+ .filter(([_, v]) => v !== undefined)
122
+ .map(([key, value]) => [
123
+ key,
124
+ downgradeResponse(collection)(value),
125
+ ]),
126
+ )
127
+ : undefined,
128
+ ...{
129
+ requestBody: undefined,
130
+ servers: undefined,
131
+ },
132
+ });
133
+
134
+ const downgradeParameter =
135
+ (collection: IComponentsCollection) =>
136
+ (
137
+ input: OpenApi.IOperation.IParameter,
138
+ i: number,
139
+ ): SwaggerV2.IOperation.IParameter =>
140
+ ({
141
+ ...downgradeSchema(collection)(input.schema),
142
+ ...input,
143
+ in: input.in === "querystring" ? "query" : input.in,
144
+ required: (input.schema as any)?.required,
145
+ schema: undefined,
146
+ name: input.name ?? `p${i}`,
147
+ ...{
148
+ example: undefined,
149
+ examples: undefined,
150
+ },
151
+ }) as any;
152
+
153
+ const downgradeRequestBody =
154
+ (collection: IComponentsCollection) =>
155
+ (
156
+ input: OpenApi.IOperation.IRequestBody,
157
+ ): SwaggerV2.IOperation.IParameter => ({
158
+ name: "body",
159
+ in: "body",
160
+ description: input.description,
161
+ required: input.required,
162
+ schema: downgradeSchema(collection)(
163
+ Object.values(input.content ?? {})[0]?.schema ?? {},
164
+ ),
165
+ });
166
+
167
+ const downgradeResponse =
168
+ (collection: IComponentsCollection) =>
169
+ (input: OpenApi.IOperation.IResponse): SwaggerV2.IOperation.IResponse => ({
170
+ description: input.description,
171
+ schema: downgradeSchema(collection)(
172
+ Object.values(input.content ?? {})[0]?.schema ?? {},
173
+ ),
174
+ headers: input.headers
175
+ ? Object.fromEntries(
176
+ Object.entries(input.headers)
177
+ .filter(([_, v]) => v !== undefined)
178
+ .map(([key, value]) => [
179
+ key,
180
+ {
181
+ ...value,
182
+ schema: downgradeSchema(collection)(value.schema),
183
+ ...{
184
+ example: undefined,
185
+ examples: undefined,
186
+ },
187
+ },
188
+ ]),
189
+ )
190
+ : undefined,
191
+ });
192
+
193
+ /* -----------------------------------------------------------
194
+ DEFINITIONS
195
+ ----------------------------------------------------------- */
196
+ export const downgradeComponents = (
197
+ input: OpenApi.IComponents,
198
+ ): IComponentsCollection => {
199
+ const collection: IComponentsCollection = {
200
+ original: input,
201
+ downgraded: {},
202
+ };
203
+ if (input.schemas) {
204
+ collection.downgraded.schemas = {};
205
+ for (const [key, value] of Object.entries(input.schemas))
206
+ if (value !== undefined)
207
+ collection.downgraded[key.split("/").pop()!] =
208
+ downgradeSchema(collection)(value);
209
+ }
210
+ return collection;
211
+ };
212
+
213
+ export const downgradeSchema =
214
+ (collection: IComponentsCollection) =>
215
+ (input: OpenApi.IJsonSchema): SwaggerV2.IJsonSchema => {
216
+ const nullable: boolean = isNullable(new Set())(collection.original)(
217
+ input,
218
+ );
219
+ const union: SwaggerV2.IJsonSchema[] = [];
220
+ const attribute: SwaggerV2.IJsonSchema.__IAttribute = {
221
+ title: input.title,
222
+ description: input.description,
223
+ deprecated: input.deprecated,
224
+ readOnly: input.readOnly,
225
+ example: input.example,
226
+ examples: input.examples ? Object.values(input.examples) : undefined,
227
+ ...Object.fromEntries(
228
+ Object.entries(input).filter(
229
+ ([key, value]) => key.startsWith("x-") && value !== undefined,
230
+ ),
231
+ ),
232
+ };
233
+ const visit = (schema: OpenApi.IJsonSchema): void => {
234
+ if (OpenApiTypeChecker.isBoolean(schema))
235
+ union.push({ type: "boolean" });
236
+ else if (
237
+ OpenApiTypeChecker.isBoolean(schema) ||
238
+ OpenApiTypeChecker.isInteger(schema) ||
239
+ OpenApiTypeChecker.isNumber(schema) ||
240
+ OpenApiTypeChecker.isString(schema)
241
+ )
242
+ union.push({
243
+ ...schema,
244
+ examples: schema.examples
245
+ ? Object.values(schema.examples)
246
+ : undefined,
247
+ });
248
+ else if (OpenApiTypeChecker.isReference(schema))
249
+ union.push({ $ref: `#/definitions/${schema.$ref.split("/").pop()}` });
250
+ else if (OpenApiTypeChecker.isArray(schema))
251
+ union.push({
252
+ ...schema,
253
+ items: downgradeSchema(collection)(schema.items),
254
+ examples: schema.examples
255
+ ? Object.values(schema.examples)
256
+ : undefined,
257
+ });
258
+ else if (OpenApiTypeChecker.isTuple(schema))
259
+ union.push({
260
+ ...schema,
261
+ items: ((): SwaggerV2.IJsonSchema => {
262
+ if (schema.additionalItems === true) return {};
263
+ const elements = [
264
+ ...schema.prefixItems,
265
+ ...(typeof schema.additionalItems === "object"
266
+ ? [downgradeSchema(collection)(schema.additionalItems)]
267
+ : []),
268
+ ];
269
+ if (elements.length === 0) return {};
270
+ return {
271
+ "x-oneOf": elements.map(downgradeSchema(collection) as any),
272
+ };
273
+ })(),
274
+ minItems: schema.prefixItems.length,
275
+ maxItems:
276
+ !!schema.additionalItems === true
277
+ ? undefined
278
+ : schema.prefixItems.length,
279
+ ...{
280
+ prefixItems: undefined,
281
+ additionalItems: undefined,
282
+ },
283
+ examples: schema.examples
284
+ ? Object.values(schema.examples)
285
+ : undefined,
286
+ });
287
+ else if (OpenApiTypeChecker.isObject(schema))
288
+ union.push({
289
+ ...schema,
290
+ properties: schema.properties
291
+ ? Object.fromEntries(
292
+ Object.entries(schema.properties)
293
+ .filter(([_, v]) => v !== undefined)
294
+ .map(([key, value]) => [
295
+ key,
296
+ downgradeSchema(collection)(value),
297
+ ]),
298
+ )
299
+ : undefined,
300
+ additionalProperties:
301
+ typeof schema.additionalProperties === "object"
302
+ ? downgradeSchema(collection)(schema.additionalProperties)
303
+ : schema.additionalProperties,
304
+ required: schema.required,
305
+ examples: schema.examples
306
+ ? Object.values(schema.examples)
307
+ : undefined,
308
+ });
309
+ else if (OpenApiTypeChecker.isOneOf(schema))
310
+ schema.oneOf.forEach(visit);
311
+ };
312
+ const visitConstant = (schema: OpenApi.IJsonSchema): void => {
313
+ const insert = (value: any): void => {
314
+ const matched: SwaggerV2.IJsonSchema.INumber | undefined = union.find(
315
+ (u) =>
316
+ (u as SwaggerV2.IJsonSchema.__ISignificant<any>).type === value,
317
+ ) as SwaggerV2.IJsonSchema.INumber | undefined;
318
+ if (matched !== undefined) {
319
+ matched.enum ??= [];
320
+ matched.enum.push(value);
321
+ } else union.push({ type: typeof value as "number", enum: [value] });
322
+ if (OpenApiTypeChecker.isConstant(schema)) insert(schema.const);
323
+ else if (OpenApiTypeChecker.isOneOf(schema))
324
+ schema.oneOf.forEach(insert);
325
+ };
326
+ };
327
+
328
+ visit(input);
329
+ visitConstant(input);
330
+ if (nullable) {
331
+ for (const u of union)
332
+ if (OpenApiTypeChecker.isReference(u as any))
333
+ downgradeNullableReference(new Set())(collection)(u as any);
334
+ else (u as SwaggerV2.IJsonSchema.IArray)["x-nullable"] = true;
335
+ }
336
+
337
+ if (nullable === true && union.length === 0)
338
+ return { type: "null", ...attribute };
339
+ return {
340
+ ...(union.length === 0
341
+ ? { type: undefined }
342
+ : union.length === 1
343
+ ? { ...union[0] }
344
+ : { "x-oneOf": union }),
345
+ ...attribute,
346
+ ...(union.length > 1 ? { discriminator: undefined } : {}),
347
+ };
348
+ };
349
+
350
+ const downgradeNullableReference =
351
+ (visited: Set<string>) =>
352
+ (collection: IComponentsCollection) =>
353
+ (schema: SwaggerV2.IJsonSchema.IReference): void => {
354
+ const key: string = schema.$ref.split("/").pop()!;
355
+ if (key.endsWith(".Nullable")) return;
356
+
357
+ const found: OpenApi.IJsonSchema | undefined =
358
+ collection.original.schemas?.[key];
359
+ if (found === undefined) return;
360
+ else if (isNullable(visited)(collection.original)(found) === true) return;
361
+ else if (collection.downgraded[`${key}.Nullable`] === undefined) {
362
+ collection.downgraded[`${key}.Nullable`] = {};
363
+ collection.downgraded[`${key}.Nullable`] = downgradeSchema(collection)(
364
+ OpenApiTypeChecker.isOneOf(found)
365
+ ? {
366
+ ...found,
367
+ oneOf: [...found.oneOf, { type: "null" }],
368
+ }
369
+ : {
370
+ title: found.title,
371
+ description: found.description,
372
+ example: found.example,
373
+ examples: found.examples
374
+ ? Object.values(found.examples)
375
+ : undefined,
376
+ ...Object.fromEntries(
377
+ Object.entries(found).filter(
378
+ ([key, value]) =>
379
+ key.startsWith("x-") && value !== undefined,
380
+ ),
381
+ ),
382
+ oneOf: [found, { type: "null" }],
383
+ },
384
+ );
385
+ }
386
+ schema.$ref += ".Nullable";
387
+ };
388
+
389
+ const downgradeSecurityScheme = (
390
+ input: OpenApi.ISecurityScheme,
391
+ ): SwaggerV2.ISecurityDefinition[] => {
392
+ if (input.type === "apiKey") return [input];
393
+ else if (input.type === "http")
394
+ if (input.scheme === "basic")
395
+ return [{ type: "basic", description: input.description }];
396
+ else return [];
397
+ else if (input.type === "oauth2") {
398
+ const output: SwaggerV2.ISecurityDefinition[] = [];
399
+ if (input.flows.implicit)
400
+ output.push({
401
+ type: "oauth2",
402
+ flow: "implicit",
403
+ authorizationUrl: input.flows.implicit.authorizationUrl,
404
+ scopes: input.flows.implicit.scopes,
405
+ });
406
+ if (input.flows.password)
407
+ output.push({
408
+ type: "oauth2",
409
+ flow: "password",
410
+ tokenUrl: input.flows.password.tokenUrl,
411
+ scopes: input.flows.password.scopes,
412
+ });
413
+ if (input.flows.clientCredentials)
414
+ output.push({
415
+ type: "oauth2",
416
+ flow: "application",
417
+ tokenUrl: input.flows.clientCredentials.tokenUrl,
418
+ scopes: input.flows.clientCredentials.scopes,
419
+ });
420
+ if (input.flows.authorizationCode)
421
+ output.push({
422
+ type: "oauth2",
423
+ flow: "accessCode",
424
+ authorizationUrl: input.flows.authorizationCode.authorizationUrl,
425
+ tokenUrl: input.flows.authorizationCode.tokenUrl,
426
+ scopes: input.flows.authorizationCode.scopes,
427
+ });
428
+ return output;
429
+ }
430
+ return [];
431
+ };
432
+
433
+ const isNullable =
434
+ (visited: Set<string>) =>
435
+ (components: OpenApi.IComponents) =>
436
+ (schema: OpenApi.IJsonSchema): boolean => {
437
+ if (OpenApiTypeChecker.isNull(schema)) return true;
438
+ else if (OpenApiTypeChecker.isReference(schema)) {
439
+ if (visited.has(schema.$ref)) return false;
440
+ visited.add(schema.$ref);
441
+ const key: string = schema.$ref.split("/").pop()!;
442
+ const next: OpenApi.IJsonSchema | undefined = components.schemas?.[key];
443
+ return next ? isNullable(visited)(components)(next) : false;
444
+ }
445
+ return (
446
+ OpenApiTypeChecker.isOneOf(schema) &&
447
+ schema.oneOf.some(isNullable(visited)(components))
448
+ );
449
+ };
450
+ }