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

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,547 +1,547 @@
1
- import { IJsonSchemaAttribute, OpenApi, SwaggerV2 } from "@typia/interface";
2
-
3
- import { OpenApiTypeChecker } from "../../validators/OpenApiTypeChecker";
4
- import { SwaggerV2TypeChecker } from "../../validators/SwaggerV2TypeChecker";
5
- import { OpenApiExclusiveEmender } from "./OpenApiExclusiveEmender";
6
-
7
- export namespace SwaggerV2Upgrader {
8
- export const convert = (input: SwaggerV2.IDocument): OpenApi.IDocument => ({
9
- openapi: "3.2.0",
10
- info: input.info,
11
- components: convertComponents(input),
12
- paths: input.paths
13
- ? Object.fromEntries(
14
- Object.entries(input.paths)
15
- .filter(([_, v]) => v !== undefined)
16
- .map(
17
- ([key, value]) => [key, convertPathItem(input)(value)] as const,
18
- ),
19
- )
20
- : undefined,
21
- servers: input.host
22
- ? [
23
- {
24
- url: input.host,
25
- },
26
- ]
27
- : undefined,
28
- security: input.security,
29
- tags: input.tags,
30
- "x-typia-emended-v12": true,
31
- });
32
-
33
- /* -----------------------------------------------------------
34
- OPERATORS
35
- ----------------------------------------------------------- */
36
- const convertPathItem =
37
- (doc: SwaggerV2.IDocument) =>
38
- (pathItem: SwaggerV2.IPath): OpenApi.IPath => {
39
- // Convert x-additionalOperations to additionalOperations
40
- // Promote "query" to standard method (it's a v3.2 standard method)
41
- const xAdditional = pathItem["x-additionalOperations"];
42
- const queryOp = xAdditional?.["query"];
43
- const additionalOperations = xAdditional
44
- ? Object.fromEntries(
45
- Object.entries(xAdditional)
46
- .filter(([key, v]) => key !== "query" && v !== undefined)
47
- .map(([key, value]) => [
48
- key,
49
- convertOperation(doc)(pathItem)(value),
50
- ]),
51
- )
52
- : undefined;
53
-
54
- return {
55
- ...(pathItem as any),
56
- ...(pathItem.get
57
- ? { get: convertOperation(doc)(pathItem)(pathItem.get) }
58
- : undefined),
59
- ...(pathItem.put
60
- ? { put: convertOperation(doc)(pathItem)(pathItem.put) }
61
- : undefined),
62
- ...(pathItem.post
63
- ? { post: convertOperation(doc)(pathItem)(pathItem.post) }
64
- : undefined),
65
- ...(pathItem.delete
66
- ? { delete: convertOperation(doc)(pathItem)(pathItem.delete) }
67
- : undefined),
68
- ...(pathItem.options
69
- ? { options: convertOperation(doc)(pathItem)(pathItem.options) }
70
- : undefined),
71
- ...(pathItem.head
72
- ? { head: convertOperation(doc)(pathItem)(pathItem.head) }
73
- : undefined),
74
- ...(pathItem.patch
75
- ? { patch: convertOperation(doc)(pathItem)(pathItem.patch) }
76
- : undefined),
77
- ...(pathItem.trace
78
- ? { trace: convertOperation(doc)(pathItem)(pathItem.trace) }
79
- : undefined),
80
- ...(queryOp
81
- ? { query: convertOperation(doc)(pathItem)(queryOp) }
82
- : undefined),
83
- ...(additionalOperations && Object.keys(additionalOperations).length > 0
84
- ? { additionalOperations }
85
- : undefined),
86
- "x-additionalOperations": undefined,
87
- };
88
- };
89
-
90
- const convertOperation =
91
- (doc: SwaggerV2.IDocument) =>
92
- (pathItem: SwaggerV2.IPath) =>
93
- (input: SwaggerV2.IOperation): OpenApi.IOperation => ({
94
- ...input,
95
- parameters:
96
- pathItem.parameters !== undefined || input.parameters !== undefined
97
- ? (
98
- [...(pathItem.parameters ?? []), ...(input.parameters ?? [])]
99
- .map((p) =>
100
- SwaggerV2TypeChecker.isReference(p)
101
- ? doc.parameters?.[p.$ref.split("/").pop() ?? ""]!
102
- : p,
103
- )
104
- .filter(
105
- (p) =>
106
- p !== undefined &&
107
- p.in !== "body" &&
108
- (p as SwaggerV2.IOperation.IBodyParameter).schema ===
109
- undefined,
110
- ) as SwaggerV2.IOperation.IGeneralParameter[]
111
- ).map(convertParameter(doc.definitions ?? {}))
112
- : undefined,
113
- requestBody: (() => {
114
- const found: SwaggerV2.IOperation.IBodyParameter | undefined =
115
- input.parameters?.find((p) => {
116
- if (SwaggerV2TypeChecker.isReference(p))
117
- p = doc.parameters?.[p.$ref.split("/").pop() ?? ""]!;
118
- return (
119
- (p as SwaggerV2.IOperation.IBodyParameter)?.schema !== undefined
120
- );
121
- }) as SwaggerV2.IOperation.IBodyParameter | undefined;
122
- return found
123
- ? convertRequestBody(doc.definitions ?? {})(found)
124
- : undefined;
125
- })(),
126
- responses: input.responses
127
- ? Object.fromEntries(
128
- Object.entries(input.responses)
129
- .filter(([_, v]) => v !== undefined)
130
- .map(
131
- ([key, value]) => [key, convertResponse(doc)(value)!] as const,
132
- )
133
- .filter(([_, v]) => v !== undefined),
134
- )
135
- : undefined,
136
- });
137
-
138
- const convertParameter =
139
- (definitions: Record<string, SwaggerV2.IJsonSchema>) =>
140
- (
141
- input: SwaggerV2.IOperation.IGeneralParameter,
142
- ): OpenApi.IOperation.IParameter => ({
143
- name: input.name,
144
- in: input.in as any,
145
- description: input.description,
146
- schema: convertSchema(definitions)(input),
147
- required: true,
148
- });
149
- const convertRequestBody =
150
- (definitions: Record<string, SwaggerV2.IJsonSchema>) =>
151
- (
152
- input: SwaggerV2.IOperation.IBodyParameter,
153
- ): OpenApi.IOperation.IRequestBody => ({
154
- description: input.description,
155
- content: {
156
- "application/json": {
157
- schema: convertSchema(definitions)(input.schema),
158
- },
159
- },
160
- });
161
-
162
- const convertResponse =
163
- (doc: SwaggerV2.IDocument) =>
164
- (
165
- input:
166
- | SwaggerV2.IOperation.IResponse
167
- | SwaggerV2.IJsonSchema.IReference<`#/definitions/responses/${string}`>,
168
- ): OpenApi.IOperation.IResponse | undefined => {
169
- if (SwaggerV2TypeChecker.isReference(input)) {
170
- const found: SwaggerV2.IOperation.IResponse | undefined =
171
- doc.responses?.[input.$ref.split("/").pop() ?? ""]!;
172
- if (found === undefined) return undefined;
173
- input = found;
174
- }
175
- return {
176
- description: input.description,
177
- content: input.schema
178
- ? {
179
- "application/json": {
180
- schema: convertSchema(doc.definitions ?? {})(input.schema),
181
- example: input.example,
182
- },
183
- }
184
- : undefined,
185
- headers: input.headers
186
- ? Object.fromEntries(
187
- Object.entries(input.headers)
188
- .filter(([_, v]) => v !== undefined)
189
- .map(
190
- ([key, value]) =>
191
- [
192
- key,
193
- {
194
- schema: convertSchema(doc.definitions ?? {})(value),
195
- in: "header",
196
- },
197
- ] as const,
198
- ),
199
- )
200
- : undefined,
201
- };
202
- };
203
-
204
- /* -----------------------------------------------------------
205
- DEFINITIONS
206
- ----------------------------------------------------------- */
207
- export const convertComponents = (
208
- input: SwaggerV2.IDocument,
209
- ): OpenApi.IComponents => ({
210
- schemas: Object.fromEntries(
211
- Object.entries(input.definitions ?? {})
212
- .filter(([_, v]) => v !== undefined)
213
- .map(([key, value]) => [
214
- key,
215
- convertSchema(input.definitions ?? {})(value),
216
- ]),
217
- ),
218
- securitySchemes: input.securityDefinitions
219
- ? Object.fromEntries(
220
- Object.entries(input.securityDefinitions)
221
- .filter(([_, v]) => v !== undefined)
222
- .map(([key, value]) => [key, convertSecurityScheme(value)])
223
- .filter(([_, v]) => v !== undefined),
224
- )
225
- : undefined,
226
- });
227
-
228
- const convertSecurityScheme = (
229
- input: SwaggerV2.ISecurityDefinition,
230
- ): OpenApi.ISecurityScheme => {
231
- if (input.type === "apiKey") return input;
232
- else if (input.type === "basic")
233
- return {
234
- type: "http",
235
- scheme: "basic",
236
- description: input.description,
237
- };
238
- else if (input.type === "oauth2")
239
- if (input.flow === "implicit")
240
- return {
241
- type: "oauth2",
242
- description: input.description,
243
- flows: {
244
- implicit: {
245
- authorizationUrl: input.authorizationUrl,
246
- scopes: input.scopes,
247
- },
248
- },
249
- };
250
- else if (input.flow === "accessCode")
251
- return {
252
- type: "oauth2",
253
- description: input.description,
254
- flows: {
255
- authorizationCode: {
256
- authorizationUrl: input.authorizationUrl,
257
- tokenUrl: input.tokenUrl,
258
- scopes: input.scopes,
259
- },
260
- },
261
- };
262
- else if (input.flow === "password")
263
- return {
264
- type: "oauth2",
265
- description: input.description,
266
- flows: {
267
- password: {
268
- tokenUrl: input.tokenUrl,
269
- scopes: input.scopes,
270
- },
271
- },
272
- };
273
- else if (input.flow === "application")
274
- return {
275
- type: "oauth2",
276
- description: input.description,
277
- flows: {
278
- clientCredentials: {
279
- tokenUrl: input.tokenUrl,
280
- scopes: input.scopes,
281
- },
282
- },
283
- };
284
- else return undefined!;
285
- return undefined!;
286
- };
287
-
288
- export const convertSchema =
289
- (definitions: Record<string, SwaggerV2.IJsonSchema>) =>
290
- (input: SwaggerV2.IJsonSchema): OpenApi.IJsonSchema => {
291
- const nullable: { value: boolean; default?: null } = {
292
- value: false,
293
- default: undefined,
294
- };
295
- const union: OpenApi.IJsonSchema[] = [];
296
- const attribute: IJsonSchemaAttribute = {
297
- title: input.title,
298
- description: input.description,
299
- deprecated: input.deprecated,
300
- readOnly: input.readOnly,
301
- example: input.example,
302
- examples: input.examples
303
- ? Object.fromEntries(input.examples.map((v, i) => [`v${i}`, v]))
304
- : undefined,
305
- ...Object.fromEntries(
306
- Object.entries(input).filter(
307
- ([key, value]) => key.startsWith("x-") && value !== undefined,
308
- ),
309
- ),
310
- };
311
- const visit = (schema: SwaggerV2.IJsonSchema): void => {
312
- // NULLABLE PROPERTY
313
- if (
314
- (schema as SwaggerV2.IJsonSchema.__ISignificant<any>)[
315
- "x-nullable"
316
- ] === true
317
- ) {
318
- nullable.value ||= true;
319
- if ((schema as SwaggerV2.IJsonSchema.INumber).default === null)
320
- nullable.default = null;
321
- }
322
- if (
323
- Array.isArray((schema as SwaggerV2.IJsonSchema.INumber).enum) &&
324
- (schema as SwaggerV2.IJsonSchema.INumber).enum?.length &&
325
- (schema as SwaggerV2.IJsonSchema.INumber).enum?.some(
326
- (e) => e === null,
327
- )
328
- )
329
- nullable.value ||= true;
330
- // UNION TYPE CASE
331
- if (SwaggerV2TypeChecker.isAnyOf(schema))
332
- schema["x-anyOf"].forEach(visit);
333
- else if (SwaggerV2TypeChecker.isOneOf(schema))
334
- schema["x-oneOf"].forEach(visit);
335
- else if (SwaggerV2TypeChecker.isAllOf(schema))
336
- if (schema.allOf.length === 1) visit(schema.allOf[0]!);
337
- else union.push(convertAllOfSchema(definitions)(schema));
338
- // ATOMIC TYPE CASE (CONSIDER ENUM VALUES)
339
- else if (
340
- SwaggerV2TypeChecker.isBoolean(schema) ||
341
- SwaggerV2TypeChecker.isInteger(schema) ||
342
- SwaggerV2TypeChecker.isNumber(schema) ||
343
- SwaggerV2TypeChecker.isString(schema)
344
- )
345
- if (
346
- schema.enum?.length &&
347
- schema.enum.filter((e) => e !== null).length
348
- )
349
- union.push(
350
- ...schema.enum
351
- .filter((v) => v !== null)
352
- .map((value) => ({ const: value })),
353
- );
354
- else if (
355
- SwaggerV2TypeChecker.isInteger(schema) ||
356
- SwaggerV2TypeChecker.isNumber(schema)
357
- )
358
- union.push(
359
- OpenApiExclusiveEmender.emend({
360
- ...schema,
361
- default: (schema.default ?? undefined) satisfies
362
- | boolean
363
- | number
364
- | string
365
- | undefined as any,
366
- examples: schema.examples
367
- ? Object.fromEntries(
368
- schema.examples.map((v, i) => [`v${i}`, v]),
369
- )
370
- : undefined,
371
- exclusiveMinimum:
372
- typeof schema.exclusiveMinimum === "boolean"
373
- ? schema.exclusiveMinimum === true
374
- ? schema.minimum
375
- : undefined
376
- : schema.exclusiveMinimum,
377
- exclusiveMaximum:
378
- typeof schema.exclusiveMaximum === "boolean"
379
- ? schema.exclusiveMaximum === true
380
- ? schema.maximum
381
- : undefined
382
- : schema.exclusiveMaximum,
383
- minimum:
384
- schema.exclusiveMinimum === true ? undefined : schema.minimum,
385
- maximum:
386
- schema.exclusiveMaximum === true ? undefined : schema.maximum,
387
- ...{ enum: undefined },
388
- }),
389
- );
390
- else
391
- union.push({
392
- ...schema,
393
- default: (schema.default ?? undefined) satisfies
394
- | boolean
395
- | number
396
- | string
397
- | undefined as any,
398
- examples: schema.examples
399
- ? Object.fromEntries(
400
- schema.examples.map((v, i) => [`v${i}`, v]),
401
- )
402
- : undefined,
403
- ...{ enum: undefined },
404
- });
405
- // INSTANCE TYPE CASE
406
- else if (SwaggerV2TypeChecker.isArray(schema))
407
- union.push({
408
- ...schema,
409
- items: convertSchema(definitions)(schema.items),
410
- examples: schema.examples
411
- ? Object.fromEntries(schema.examples.map((v, i) => [`v${i}`, v]))
412
- : undefined,
413
- });
414
- else if (SwaggerV2TypeChecker.isObject(schema))
415
- union.push({
416
- ...schema,
417
- ...{
418
- properties: schema.properties
419
- ? Object.fromEntries(
420
- Object.entries(schema.properties)
421
- .filter(([_, v]) => v !== undefined)
422
- .map(([key, value]) => [
423
- key,
424
- convertSchema(definitions)(value),
425
- ]),
426
- )
427
- : {},
428
- additionalProperties: schema.additionalProperties
429
- ? typeof schema.additionalProperties === "object" &&
430
- schema.additionalProperties !== null
431
- ? convertSchema(definitions)(schema.additionalProperties)
432
- : schema.additionalProperties
433
- : undefined,
434
- },
435
- examples: schema.examples
436
- ? Object.fromEntries(schema.examples.map((v, i) => [`v${i}`, v]))
437
- : undefined,
438
- required: schema.required ?? [],
439
- });
440
- else if (SwaggerV2TypeChecker.isReference(schema))
441
- union.push({
442
- ...schema,
443
- $ref: schema.$ref.replace(
444
- "#/definitions/",
445
- "#/components/schemas/",
446
- ),
447
- examples: schema.examples
448
- ? Object.fromEntries(schema.examples.map((v, i) => [`v${i}`, v]))
449
- : undefined,
450
- });
451
- else
452
- union.push({
453
- ...schema,
454
- examples: schema.examples
455
- ? Object.fromEntries(schema.examples.map((v, i) => [`v${i}`, v]))
456
- : undefined,
457
- });
458
- };
459
-
460
- visit(input);
461
- if (
462
- nullable.value === true &&
463
- !union.some((e) => (e as OpenApi.IJsonSchema.INull).type === "null")
464
- )
465
- union.push({
466
- type: "null",
467
- default: nullable.default,
468
- });
469
- if (
470
- union.length === 2 &&
471
- union.filter((x) => OpenApiTypeChecker.isNull(x)).length === 1
472
- ) {
473
- const type: OpenApi.IJsonSchema = union.filter(
474
- (x) => OpenApiTypeChecker.isNull(x) === false,
475
- )[0]!;
476
- for (const key of [
477
- "title",
478
- "description",
479
- "deprecated",
480
- "example",
481
- "examples",
482
- ] as const)
483
- if (type[key] !== undefined) delete type[key];
484
- }
485
- return {
486
- ...(union.length === 0
487
- ? { type: undefined }
488
- : union.length === 1
489
- ? { ...union[0] }
490
- : { oneOf: union.map((u) => ({ ...u, "x-nullable": undefined })) }),
491
- ...attribute,
492
- ...{ "x-nullable": undefined },
493
- };
494
- };
495
-
496
- const convertAllOfSchema =
497
- (definitions: Record<string, SwaggerV2.IJsonSchema>) =>
498
- (input: SwaggerV2.IJsonSchema.IAllOf): OpenApi.IJsonSchema => {
499
- const objects: Array<SwaggerV2.IJsonSchema.IObject | null> =
500
- input.allOf.map((schema) => retrieveObject(definitions)(schema));
501
- if (objects.some((obj) => obj === null))
502
- return {
503
- type: undefined,
504
- ...{
505
- allOf: undefined,
506
- },
507
- };
508
- return {
509
- ...input,
510
- type: "object",
511
- properties: Object.fromEntries(
512
- objects
513
- .map((o) => Object.entries(o?.properties ?? {}))
514
- .flat()
515
- .map(
516
- ([key, value]) =>
517
- [key, convertSchema(definitions)(value)] as const,
518
- ),
519
- ),
520
- ...{
521
- allOf: undefined,
522
- required: [...new Set(objects.map((o) => o?.required ?? []).flat())],
523
- },
524
- };
525
- };
526
-
527
- const retrieveObject =
528
- (definitions: Record<string, SwaggerV2.IJsonSchema>) =>
529
- (
530
- input: SwaggerV2.IJsonSchema,
531
- visited: Set<SwaggerV2.IJsonSchema> = new Set(),
532
- ): SwaggerV2.IJsonSchema.IObject | null => {
533
- if (SwaggerV2TypeChecker.isObject(input))
534
- return input.properties !== undefined && !input.additionalProperties
535
- ? input
536
- : null;
537
- else if (visited.has(input)) return null;
538
- else visited.add(input);
539
-
540
- if (SwaggerV2TypeChecker.isReference(input))
541
- return retrieveObject(definitions)(
542
- definitions?.[input.$ref.split("/").pop() ?? ""] ?? {},
543
- visited,
544
- );
545
- return null;
546
- };
547
- }
1
+ import { IJsonSchemaAttribute, OpenApi, SwaggerV2 } from "@typia/interface";
2
+
3
+ import { OpenApiTypeChecker } from "../../validators/OpenApiTypeChecker";
4
+ import { SwaggerV2TypeChecker } from "../../validators/SwaggerV2TypeChecker";
5
+ import { OpenApiExclusiveEmender } from "./OpenApiExclusiveEmender";
6
+
7
+ export namespace SwaggerV2Upgrader {
8
+ export const convert = (input: SwaggerV2.IDocument): OpenApi.IDocument => ({
9
+ openapi: "3.2.0",
10
+ info: input.info,
11
+ components: convertComponents(input),
12
+ paths: input.paths
13
+ ? Object.fromEntries(
14
+ Object.entries(input.paths)
15
+ .filter(([_, v]) => v !== undefined)
16
+ .map(
17
+ ([key, value]) => [key, convertPathItem(input)(value)] as const,
18
+ ),
19
+ )
20
+ : undefined,
21
+ servers: input.host
22
+ ? [
23
+ {
24
+ url: input.host,
25
+ },
26
+ ]
27
+ : undefined,
28
+ security: input.security,
29
+ tags: input.tags,
30
+ "x-typia-emended-v12": true,
31
+ });
32
+
33
+ /* -----------------------------------------------------------
34
+ OPERATORS
35
+ ----------------------------------------------------------- */
36
+ const convertPathItem =
37
+ (doc: SwaggerV2.IDocument) =>
38
+ (pathItem: SwaggerV2.IPath): OpenApi.IPath => {
39
+ // Convert x-additionalOperations to additionalOperations
40
+ // Promote "query" to standard method (it's a v3.2 standard method)
41
+ const xAdditional = pathItem["x-additionalOperations"];
42
+ const queryOp = xAdditional?.["query"];
43
+ const additionalOperations = xAdditional
44
+ ? Object.fromEntries(
45
+ Object.entries(xAdditional)
46
+ .filter(([key, v]) => key !== "query" && v !== undefined)
47
+ .map(([key, value]) => [
48
+ key,
49
+ convertOperation(doc)(pathItem)(value),
50
+ ]),
51
+ )
52
+ : undefined;
53
+
54
+ return {
55
+ ...(pathItem as any),
56
+ ...(pathItem.get
57
+ ? { get: convertOperation(doc)(pathItem)(pathItem.get) }
58
+ : undefined),
59
+ ...(pathItem.put
60
+ ? { put: convertOperation(doc)(pathItem)(pathItem.put) }
61
+ : undefined),
62
+ ...(pathItem.post
63
+ ? { post: convertOperation(doc)(pathItem)(pathItem.post) }
64
+ : undefined),
65
+ ...(pathItem.delete
66
+ ? { delete: convertOperation(doc)(pathItem)(pathItem.delete) }
67
+ : undefined),
68
+ ...(pathItem.options
69
+ ? { options: convertOperation(doc)(pathItem)(pathItem.options) }
70
+ : undefined),
71
+ ...(pathItem.head
72
+ ? { head: convertOperation(doc)(pathItem)(pathItem.head) }
73
+ : undefined),
74
+ ...(pathItem.patch
75
+ ? { patch: convertOperation(doc)(pathItem)(pathItem.patch) }
76
+ : undefined),
77
+ ...(pathItem.trace
78
+ ? { trace: convertOperation(doc)(pathItem)(pathItem.trace) }
79
+ : undefined),
80
+ ...(queryOp
81
+ ? { query: convertOperation(doc)(pathItem)(queryOp) }
82
+ : undefined),
83
+ ...(additionalOperations && Object.keys(additionalOperations).length > 0
84
+ ? { additionalOperations }
85
+ : undefined),
86
+ "x-additionalOperations": undefined,
87
+ };
88
+ };
89
+
90
+ const convertOperation =
91
+ (doc: SwaggerV2.IDocument) =>
92
+ (pathItem: SwaggerV2.IPath) =>
93
+ (input: SwaggerV2.IOperation): OpenApi.IOperation => ({
94
+ ...input,
95
+ parameters:
96
+ pathItem.parameters !== undefined || input.parameters !== undefined
97
+ ? (
98
+ [...(pathItem.parameters ?? []), ...(input.parameters ?? [])]
99
+ .map((p) =>
100
+ SwaggerV2TypeChecker.isReference(p)
101
+ ? doc.parameters?.[p.$ref.split("/").pop() ?? ""]!
102
+ : p,
103
+ )
104
+ .filter(
105
+ (p) =>
106
+ p !== undefined &&
107
+ p.in !== "body" &&
108
+ (p as SwaggerV2.IOperation.IBodyParameter).schema ===
109
+ undefined,
110
+ ) as SwaggerV2.IOperation.IGeneralParameter[]
111
+ ).map(convertParameter(doc.definitions ?? {}))
112
+ : undefined,
113
+ requestBody: (() => {
114
+ const found: SwaggerV2.IOperation.IBodyParameter | undefined =
115
+ input.parameters?.find((p) => {
116
+ if (SwaggerV2TypeChecker.isReference(p))
117
+ p = doc.parameters?.[p.$ref.split("/").pop() ?? ""]!;
118
+ return (
119
+ (p as SwaggerV2.IOperation.IBodyParameter)?.schema !== undefined
120
+ );
121
+ }) as SwaggerV2.IOperation.IBodyParameter | undefined;
122
+ return found
123
+ ? convertRequestBody(doc.definitions ?? {})(found)
124
+ : undefined;
125
+ })(),
126
+ responses: input.responses
127
+ ? Object.fromEntries(
128
+ Object.entries(input.responses)
129
+ .filter(([_, v]) => v !== undefined)
130
+ .map(
131
+ ([key, value]) => [key, convertResponse(doc)(value)!] as const,
132
+ )
133
+ .filter(([_, v]) => v !== undefined),
134
+ )
135
+ : undefined,
136
+ });
137
+
138
+ const convertParameter =
139
+ (definitions: Record<string, SwaggerV2.IJsonSchema>) =>
140
+ (
141
+ input: SwaggerV2.IOperation.IGeneralParameter,
142
+ ): OpenApi.IOperation.IParameter => ({
143
+ name: input.name,
144
+ in: input.in as any,
145
+ description: input.description,
146
+ schema: convertSchema(definitions)(input),
147
+ required: true,
148
+ });
149
+ const convertRequestBody =
150
+ (definitions: Record<string, SwaggerV2.IJsonSchema>) =>
151
+ (
152
+ input: SwaggerV2.IOperation.IBodyParameter,
153
+ ): OpenApi.IOperation.IRequestBody => ({
154
+ description: input.description,
155
+ content: {
156
+ "application/json": {
157
+ schema: convertSchema(definitions)(input.schema),
158
+ },
159
+ },
160
+ });
161
+
162
+ const convertResponse =
163
+ (doc: SwaggerV2.IDocument) =>
164
+ (
165
+ input:
166
+ | SwaggerV2.IOperation.IResponse
167
+ | SwaggerV2.IJsonSchema.IReference<`#/definitions/responses/${string}`>,
168
+ ): OpenApi.IOperation.IResponse | undefined => {
169
+ if (SwaggerV2TypeChecker.isReference(input)) {
170
+ const found: SwaggerV2.IOperation.IResponse | undefined =
171
+ doc.responses?.[input.$ref.split("/").pop() ?? ""]!;
172
+ if (found === undefined) return undefined;
173
+ input = found;
174
+ }
175
+ return {
176
+ description: input.description,
177
+ content: input.schema
178
+ ? {
179
+ "application/json": {
180
+ schema: convertSchema(doc.definitions ?? {})(input.schema),
181
+ example: input.example,
182
+ },
183
+ }
184
+ : undefined,
185
+ headers: input.headers
186
+ ? Object.fromEntries(
187
+ Object.entries(input.headers)
188
+ .filter(([_, v]) => v !== undefined)
189
+ .map(
190
+ ([key, value]) =>
191
+ [
192
+ key,
193
+ {
194
+ schema: convertSchema(doc.definitions ?? {})(value),
195
+ in: "header",
196
+ },
197
+ ] as const,
198
+ ),
199
+ )
200
+ : undefined,
201
+ };
202
+ };
203
+
204
+ /* -----------------------------------------------------------
205
+ DEFINITIONS
206
+ ----------------------------------------------------------- */
207
+ export const convertComponents = (
208
+ input: SwaggerV2.IDocument,
209
+ ): OpenApi.IComponents => ({
210
+ schemas: Object.fromEntries(
211
+ Object.entries(input.definitions ?? {})
212
+ .filter(([_, v]) => v !== undefined)
213
+ .map(([key, value]) => [
214
+ key,
215
+ convertSchema(input.definitions ?? {})(value),
216
+ ]),
217
+ ),
218
+ securitySchemes: input.securityDefinitions
219
+ ? Object.fromEntries(
220
+ Object.entries(input.securityDefinitions)
221
+ .filter(([_, v]) => v !== undefined)
222
+ .map(([key, value]) => [key, convertSecurityScheme(value)])
223
+ .filter(([_, v]) => v !== undefined),
224
+ )
225
+ : undefined,
226
+ });
227
+
228
+ const convertSecurityScheme = (
229
+ input: SwaggerV2.ISecurityDefinition,
230
+ ): OpenApi.ISecurityScheme => {
231
+ if (input.type === "apiKey") return input;
232
+ else if (input.type === "basic")
233
+ return {
234
+ type: "http",
235
+ scheme: "basic",
236
+ description: input.description,
237
+ };
238
+ else if (input.type === "oauth2")
239
+ if (input.flow === "implicit")
240
+ return {
241
+ type: "oauth2",
242
+ description: input.description,
243
+ flows: {
244
+ implicit: {
245
+ authorizationUrl: input.authorizationUrl,
246
+ scopes: input.scopes,
247
+ },
248
+ },
249
+ };
250
+ else if (input.flow === "accessCode")
251
+ return {
252
+ type: "oauth2",
253
+ description: input.description,
254
+ flows: {
255
+ authorizationCode: {
256
+ authorizationUrl: input.authorizationUrl,
257
+ tokenUrl: input.tokenUrl,
258
+ scopes: input.scopes,
259
+ },
260
+ },
261
+ };
262
+ else if (input.flow === "password")
263
+ return {
264
+ type: "oauth2",
265
+ description: input.description,
266
+ flows: {
267
+ password: {
268
+ tokenUrl: input.tokenUrl,
269
+ scopes: input.scopes,
270
+ },
271
+ },
272
+ };
273
+ else if (input.flow === "application")
274
+ return {
275
+ type: "oauth2",
276
+ description: input.description,
277
+ flows: {
278
+ clientCredentials: {
279
+ tokenUrl: input.tokenUrl,
280
+ scopes: input.scopes,
281
+ },
282
+ },
283
+ };
284
+ else return undefined!;
285
+ return undefined!;
286
+ };
287
+
288
+ export const convertSchema =
289
+ (definitions: Record<string, SwaggerV2.IJsonSchema>) =>
290
+ (input: SwaggerV2.IJsonSchema): OpenApi.IJsonSchema => {
291
+ const nullable: { value: boolean; default?: null } = {
292
+ value: false,
293
+ default: undefined,
294
+ };
295
+ const union: OpenApi.IJsonSchema[] = [];
296
+ const attribute: IJsonSchemaAttribute = {
297
+ title: input.title,
298
+ description: input.description,
299
+ deprecated: input.deprecated,
300
+ readOnly: input.readOnly,
301
+ example: input.example,
302
+ examples: input.examples
303
+ ? Object.fromEntries(input.examples.map((v, i) => [`v${i}`, v]))
304
+ : undefined,
305
+ ...Object.fromEntries(
306
+ Object.entries(input).filter(
307
+ ([key, value]) => key.startsWith("x-") && value !== undefined,
308
+ ),
309
+ ),
310
+ };
311
+ const visit = (schema: SwaggerV2.IJsonSchema): void => {
312
+ // NULLABLE PROPERTY
313
+ if (
314
+ (schema as SwaggerV2.IJsonSchema.__ISignificant<any>)[
315
+ "x-nullable"
316
+ ] === true
317
+ ) {
318
+ nullable.value ||= true;
319
+ if ((schema as SwaggerV2.IJsonSchema.INumber).default === null)
320
+ nullable.default = null;
321
+ }
322
+ if (
323
+ Array.isArray((schema as SwaggerV2.IJsonSchema.INumber).enum) &&
324
+ (schema as SwaggerV2.IJsonSchema.INumber).enum?.length &&
325
+ (schema as SwaggerV2.IJsonSchema.INumber).enum?.some(
326
+ (e) => e === null,
327
+ )
328
+ )
329
+ nullable.value ||= true;
330
+ // UNION TYPE CASE
331
+ if (SwaggerV2TypeChecker.isAnyOf(schema))
332
+ schema["x-anyOf"].forEach(visit);
333
+ else if (SwaggerV2TypeChecker.isOneOf(schema))
334
+ schema["x-oneOf"].forEach(visit);
335
+ else if (SwaggerV2TypeChecker.isAllOf(schema))
336
+ if (schema.allOf.length === 1) visit(schema.allOf[0]!);
337
+ else union.push(convertAllOfSchema(definitions)(schema));
338
+ // ATOMIC TYPE CASE (CONSIDER ENUM VALUES)
339
+ else if (
340
+ SwaggerV2TypeChecker.isBoolean(schema) ||
341
+ SwaggerV2TypeChecker.isInteger(schema) ||
342
+ SwaggerV2TypeChecker.isNumber(schema) ||
343
+ SwaggerV2TypeChecker.isString(schema)
344
+ )
345
+ if (
346
+ schema.enum?.length &&
347
+ schema.enum.filter((e) => e !== null).length
348
+ )
349
+ union.push(
350
+ ...schema.enum
351
+ .filter((v) => v !== null)
352
+ .map((value) => ({ const: value })),
353
+ );
354
+ else if (
355
+ SwaggerV2TypeChecker.isInteger(schema) ||
356
+ SwaggerV2TypeChecker.isNumber(schema)
357
+ )
358
+ union.push(
359
+ OpenApiExclusiveEmender.emend({
360
+ ...schema,
361
+ default: (schema.default ?? undefined) satisfies
362
+ | boolean
363
+ | number
364
+ | string
365
+ | undefined as any,
366
+ examples: schema.examples
367
+ ? Object.fromEntries(
368
+ schema.examples.map((v, i) => [`v${i}`, v]),
369
+ )
370
+ : undefined,
371
+ exclusiveMinimum:
372
+ typeof schema.exclusiveMinimum === "boolean"
373
+ ? schema.exclusiveMinimum === true
374
+ ? schema.minimum
375
+ : undefined
376
+ : schema.exclusiveMinimum,
377
+ exclusiveMaximum:
378
+ typeof schema.exclusiveMaximum === "boolean"
379
+ ? schema.exclusiveMaximum === true
380
+ ? schema.maximum
381
+ : undefined
382
+ : schema.exclusiveMaximum,
383
+ minimum:
384
+ schema.exclusiveMinimum === true ? undefined : schema.minimum,
385
+ maximum:
386
+ schema.exclusiveMaximum === true ? undefined : schema.maximum,
387
+ ...{ enum: undefined },
388
+ }),
389
+ );
390
+ else
391
+ union.push({
392
+ ...schema,
393
+ default: (schema.default ?? undefined) satisfies
394
+ | boolean
395
+ | number
396
+ | string
397
+ | undefined as any,
398
+ examples: schema.examples
399
+ ? Object.fromEntries(
400
+ schema.examples.map((v, i) => [`v${i}`, v]),
401
+ )
402
+ : undefined,
403
+ ...{ enum: undefined },
404
+ });
405
+ // INSTANCE TYPE CASE
406
+ else if (SwaggerV2TypeChecker.isArray(schema))
407
+ union.push({
408
+ ...schema,
409
+ items: convertSchema(definitions)(schema.items),
410
+ examples: schema.examples
411
+ ? Object.fromEntries(schema.examples.map((v, i) => [`v${i}`, v]))
412
+ : undefined,
413
+ });
414
+ else if (SwaggerV2TypeChecker.isObject(schema))
415
+ union.push({
416
+ ...schema,
417
+ ...{
418
+ properties: schema.properties
419
+ ? Object.fromEntries(
420
+ Object.entries(schema.properties)
421
+ .filter(([_, v]) => v !== undefined)
422
+ .map(([key, value]) => [
423
+ key,
424
+ convertSchema(definitions)(value),
425
+ ]),
426
+ )
427
+ : {},
428
+ additionalProperties: schema.additionalProperties
429
+ ? typeof schema.additionalProperties === "object" &&
430
+ schema.additionalProperties !== null
431
+ ? convertSchema(definitions)(schema.additionalProperties)
432
+ : schema.additionalProperties
433
+ : undefined,
434
+ },
435
+ examples: schema.examples
436
+ ? Object.fromEntries(schema.examples.map((v, i) => [`v${i}`, v]))
437
+ : undefined,
438
+ required: schema.required ?? [],
439
+ });
440
+ else if (SwaggerV2TypeChecker.isReference(schema))
441
+ union.push({
442
+ ...schema,
443
+ $ref: schema.$ref.replace(
444
+ "#/definitions/",
445
+ "#/components/schemas/",
446
+ ),
447
+ examples: schema.examples
448
+ ? Object.fromEntries(schema.examples.map((v, i) => [`v${i}`, v]))
449
+ : undefined,
450
+ });
451
+ else
452
+ union.push({
453
+ ...schema,
454
+ examples: schema.examples
455
+ ? Object.fromEntries(schema.examples.map((v, i) => [`v${i}`, v]))
456
+ : undefined,
457
+ });
458
+ };
459
+
460
+ visit(input);
461
+ if (
462
+ nullable.value === true &&
463
+ !union.some((e) => (e as OpenApi.IJsonSchema.INull).type === "null")
464
+ )
465
+ union.push({
466
+ type: "null",
467
+ default: nullable.default,
468
+ });
469
+ if (
470
+ union.length === 2 &&
471
+ union.filter((x) => OpenApiTypeChecker.isNull(x)).length === 1
472
+ ) {
473
+ const type: OpenApi.IJsonSchema = union.filter(
474
+ (x) => OpenApiTypeChecker.isNull(x) === false,
475
+ )[0]!;
476
+ for (const key of [
477
+ "title",
478
+ "description",
479
+ "deprecated",
480
+ "example",
481
+ "examples",
482
+ ] as const)
483
+ if (type[key] !== undefined) delete type[key];
484
+ }
485
+ return {
486
+ ...(union.length === 0
487
+ ? { type: undefined }
488
+ : union.length === 1
489
+ ? { ...union[0] }
490
+ : { oneOf: union.map((u) => ({ ...u, "x-nullable": undefined })) }),
491
+ ...attribute,
492
+ ...{ "x-nullable": undefined },
493
+ };
494
+ };
495
+
496
+ const convertAllOfSchema =
497
+ (definitions: Record<string, SwaggerV2.IJsonSchema>) =>
498
+ (input: SwaggerV2.IJsonSchema.IAllOf): OpenApi.IJsonSchema => {
499
+ const objects: Array<SwaggerV2.IJsonSchema.IObject | null> =
500
+ input.allOf.map((schema) => retrieveObject(definitions)(schema));
501
+ if (objects.some((obj) => obj === null))
502
+ return {
503
+ type: undefined,
504
+ ...{
505
+ allOf: undefined,
506
+ },
507
+ };
508
+ return {
509
+ ...input,
510
+ type: "object",
511
+ properties: Object.fromEntries(
512
+ objects
513
+ .map((o) => Object.entries(o?.properties ?? {}))
514
+ .flat()
515
+ .map(
516
+ ([key, value]) =>
517
+ [key, convertSchema(definitions)(value)] as const,
518
+ ),
519
+ ),
520
+ ...{
521
+ allOf: undefined,
522
+ required: [...new Set(objects.map((o) => o?.required ?? []).flat())],
523
+ },
524
+ };
525
+ };
526
+
527
+ const retrieveObject =
528
+ (definitions: Record<string, SwaggerV2.IJsonSchema>) =>
529
+ (
530
+ input: SwaggerV2.IJsonSchema,
531
+ visited: Set<SwaggerV2.IJsonSchema> = new Set(),
532
+ ): SwaggerV2.IJsonSchema.IObject | null => {
533
+ if (SwaggerV2TypeChecker.isObject(input))
534
+ return input.properties !== undefined && !input.additionalProperties
535
+ ? input
536
+ : null;
537
+ else if (visited.has(input)) return null;
538
+ else visited.add(input);
539
+
540
+ if (SwaggerV2TypeChecker.isReference(input))
541
+ return retrieveObject(definitions)(
542
+ definitions?.[input.$ref.split("/").pop() ?? ""] ?? {},
543
+ visited,
544
+ );
545
+ return null;
546
+ };
547
+ }