typia 13.0.0-dev.20260430 → 13.0.0-dev.20260502-2

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 (364) hide show
  1. package/lib/executable/TypiaGenerateWizard.js +55 -8
  2. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  3. package/lib/executable/TypiaGenerateWizard2.mjs +55 -8
  4. package/lib/executable/TypiaGenerateWizard2.mjs.map +1 -1
  5. package/lib/executable/generate/ttsc.js.map +1 -1
  6. package/lib/executable/setup/PluginConfigurator.js.map +1 -1
  7. package/lib/internal/_randomInteger.js.map +1 -1
  8. package/lib/internal/_validateReport.js.map +1 -1
  9. package/lib/transform.d.ts +2 -13
  10. package/lib/transform.js +4 -11
  11. package/lib/transform.js.map +1 -1
  12. package/lib/transform2.mjs +6 -14
  13. package/lib/transform2.mjs.map +1 -1
  14. package/native/adapter/adapter.go +128 -128
  15. package/native/adapter/cleanup.go +155 -172
  16. package/native/adapter/imports.go +80 -80
  17. package/native/adapter/visit.go +142 -142
  18. package/native/cmd/ttsc-typia/build.go +223 -223
  19. package/native/cmd/ttsc-typia/main.go +57 -57
  20. package/native/cmd/ttsc-typia/transform.go +421 -254
  21. package/native/cmd/ttsc-typia/transform_test.go +40 -0
  22. package/native/core/context/IProgrammerProps.go +7 -7
  23. package/native/core/context/ITransformOptions.go +5 -5
  24. package/native/core/context/ITypiaContext.go +13 -13
  25. package/native/core/context/TransformerError.go +81 -81
  26. package/native/core/factories/CommentFactory.go +9 -9
  27. package/native/core/factories/ExpressionFactory.go +254 -254
  28. package/native/core/factories/FormatCheatSheet.go +23 -23
  29. package/native/core/factories/IdentifierFactory.go +130 -130
  30. package/native/core/factories/JsonMetadataFactory.go +129 -129
  31. package/native/core/factories/LiteralFactory.go +195 -182
  32. package/native/core/factories/MetadataCommentTagFactory.go +379 -379
  33. package/native/core/factories/MetadataFactory.go +462 -462
  34. package/native/core/factories/MetadataTypeTagFactory.go +498 -498
  35. package/native/core/factories/MetadataTypeTagSchemaFactory.go +102 -102
  36. package/native/core/factories/NumericRangeFactory.go +84 -84
  37. package/native/core/factories/ProtobufFactory.go +933 -933
  38. package/native/core/factories/StatementFactory.go +72 -72
  39. package/native/core/factories/TemplateFactory.go +57 -57
  40. package/native/core/factories/TypeFactory.go +125 -125
  41. package/native/core/factories/ValueFactory.go +12 -12
  42. package/native/core/factories/internal/metadata/IMetadataIteratorProps.go +35 -35
  43. package/native/core/factories/internal/metadata/MetadataHelper.go +176 -176
  44. package/native/core/factories/internal/metadata/emend_metadata_atomics.go +69 -69
  45. package/native/core/factories/internal/metadata/emplace_metadata_alias.go +27 -27
  46. package/native/core/factories/internal/metadata/emplace_metadata_array_type.go +33 -33
  47. package/native/core/factories/internal/metadata/emplace_metadata_object.go +209 -209
  48. package/native/core/factories/internal/metadata/emplace_metadata_tuple.go +50 -50
  49. package/native/core/factories/internal/metadata/explore_metadata.go +29 -29
  50. package/native/core/factories/internal/metadata/iterate_metadata.go +46 -46
  51. package/native/core/factories/internal/metadata/iterate_metadata_alias.go +25 -25
  52. package/native/core/factories/internal/metadata/iterate_metadata_array.go +65 -65
  53. package/native/core/factories/internal/metadata/iterate_metadata_atomic.go +49 -49
  54. package/native/core/factories/internal/metadata/iterate_metadata_coalesce.go +22 -22
  55. package/native/core/factories/internal/metadata/iterate_metadata_collection.go +228 -228
  56. package/native/core/factories/internal/metadata/iterate_metadata_comment_tags.go +12 -12
  57. package/native/core/factories/internal/metadata/iterate_metadata_constant.go +71 -71
  58. package/native/core/factories/internal/metadata/iterate_metadata_escape.go +48 -48
  59. package/native/core/factories/internal/metadata/iterate_metadata_function.go +82 -82
  60. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +319 -319
  61. package/native/core/factories/internal/metadata/iterate_metadata_map.go +51 -51
  62. package/native/core/factories/internal/metadata/iterate_metadata_native.go +85 -85
  63. package/native/core/factories/internal/metadata/iterate_metadata_object.go +27 -27
  64. package/native/core/factories/internal/metadata/iterate_metadata_set.go +37 -37
  65. package/native/core/factories/internal/metadata/iterate_metadata_sort.go +137 -137
  66. package/native/core/factories/internal/metadata/iterate_metadata_template.go +33 -33
  67. package/native/core/factories/internal/metadata/iterate_metadata_tuple.go +16 -16
  68. package/native/core/factories/internal/metadata/iterate_metadata_union.go +18 -18
  69. package/native/core/programmers/AssertProgrammer.go +389 -389
  70. package/native/core/programmers/ImportProgrammer.go +196 -196
  71. package/native/core/programmers/IsProgrammer.go +293 -293
  72. package/native/core/programmers/RandomProgrammer.go +1094 -1094
  73. package/native/core/programmers/ValidateProgrammer.go +369 -369
  74. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +133 -133
  75. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +104 -104
  76. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +100 -100
  77. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +79 -79
  78. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +159 -159
  79. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +99 -99
  80. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +138 -138
  81. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +222 -222
  82. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +116 -116
  83. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +36 -36
  84. package/native/core/programmers/helpers/AtomicPredicator.go +35 -35
  85. package/native/core/programmers/helpers/CloneJoiner.go +217 -217
  86. package/native/core/programmers/helpers/FunctionProgrammer.go +79 -79
  87. package/native/core/programmers/helpers/HttpMetadataUtil.go +17 -17
  88. package/native/core/programmers/helpers/ICheckEntry.go +5 -5
  89. package/native/core/programmers/helpers/IExpressionEntry.go +6 -6
  90. package/native/core/programmers/helpers/NotationJoiner.go +159 -159
  91. package/native/core/programmers/helpers/OptionPredicator.go +4 -4
  92. package/native/core/programmers/helpers/ProtobufUtil.go +231 -231
  93. package/native/core/programmers/helpers/ProtobufWire.go +6 -6
  94. package/native/core/programmers/helpers/PruneJoiner.go +227 -227
  95. package/native/core/programmers/helpers/RandomJoiner.go +155 -155
  96. package/native/core/programmers/helpers/StringifyJoinder.go +331 -331
  97. package/native/core/programmers/helpers/StringifyPredicator.go +10 -10
  98. package/native/core/programmers/helpers/UnionExplorer.go +835 -835
  99. package/native/core/programmers/helpers/UnionPredicator.go +78 -78
  100. package/native/core/programmers/helpers/disable_function_programmer_declare.go +6 -6
  101. package/native/core/programmers/http/HttpAssertFormDataProgrammer.go +93 -93
  102. package/native/core/programmers/http/HttpAssertHeadersProgrammer.go +42 -42
  103. package/native/core/programmers/http/HttpAssertQueryProgrammer.go +51 -51
  104. package/native/core/programmers/http/HttpFormDataProgrammer.go +351 -351
  105. package/native/core/programmers/http/HttpHeadersProgrammer.go +370 -370
  106. package/native/core/programmers/http/HttpIsFormDataProgrammer.go +109 -109
  107. package/native/core/programmers/http/HttpIsHeadersProgrammer.go +36 -36
  108. package/native/core/programmers/http/HttpIsQueryProgrammer.go +45 -45
  109. package/native/core/programmers/http/HttpParameterProgrammer.go +158 -158
  110. package/native/core/programmers/http/HttpQueryProgrammer.go +422 -422
  111. package/native/core/programmers/http/HttpValidateFormDataProgrammer.go +87 -87
  112. package/native/core/programmers/http/HttpValidateHeadersProgrammer.go +39 -39
  113. package/native/core/programmers/http/HttpValidateQueryProgrammer.go +48 -48
  114. package/native/core/programmers/internal/CheckerProgrammer.go +1490 -1490
  115. package/native/core/programmers/internal/FeatureProgrammer.go +589 -589
  116. package/native/core/programmers/iterate/check_array_length.go +46 -46
  117. package/native/core/programmers/iterate/check_bigint.go +52 -52
  118. package/native/core/programmers/iterate/check_dynamic_key.go +220 -220
  119. package/native/core/programmers/iterate/check_dynamic_properties.go +245 -245
  120. package/native/core/programmers/iterate/check_everything.go +21 -21
  121. package/native/core/programmers/iterate/check_native.go +25 -25
  122. package/native/core/programmers/iterate/check_number.go +135 -135
  123. package/native/core/programmers/iterate/check_object.go +66 -66
  124. package/native/core/programmers/iterate/check_string.go +52 -52
  125. package/native/core/programmers/iterate/check_template.go +57 -57
  126. package/native/core/programmers/iterate/check_union_array_like.go +372 -372
  127. package/native/core/programmers/iterate/decode_union_object.go +118 -118
  128. package/native/core/programmers/iterate/feature_object_entries.go +134 -134
  129. package/native/core/programmers/iterate/json_schema_alias.go +52 -52
  130. package/native/core/programmers/iterate/json_schema_array.go +52 -52
  131. package/native/core/programmers/iterate/json_schema_bigint.go +8 -8
  132. package/native/core/programmers/iterate/json_schema_boolean.go +8 -8
  133. package/native/core/programmers/iterate/json_schema_constant.go +38 -38
  134. package/native/core/programmers/iterate/json_schema_description.go +12 -12
  135. package/native/core/programmers/iterate/json_schema_discriminator.go +47 -47
  136. package/native/core/programmers/iterate/json_schema_escaped.go +58 -58
  137. package/native/core/programmers/iterate/json_schema_jsDocTags.go +34 -34
  138. package/native/core/programmers/iterate/json_schema_native.go +43 -43
  139. package/native/core/programmers/iterate/json_schema_number.go +8 -8
  140. package/native/core/programmers/iterate/json_schema_object.go +149 -149
  141. package/native/core/programmers/iterate/json_schema_plugin.go +35 -35
  142. package/native/core/programmers/iterate/json_schema_station.go +211 -211
  143. package/native/core/programmers/iterate/json_schema_string.go +8 -8
  144. package/native/core/programmers/iterate/json_schema_template.go +53 -53
  145. package/native/core/programmers/iterate/json_schema_title.go +16 -16
  146. package/native/core/programmers/iterate/json_schema_tuple.go +34 -34
  147. package/native/core/programmers/iterate/metadata_to_pattern.go +53 -53
  148. package/native/core/programmers/iterate/postfix_of_tuple.go +5 -5
  149. package/native/core/programmers/iterate/prune_object_properties.go +85 -85
  150. package/native/core/programmers/iterate/stringify_dynamic_properties.go +193 -193
  151. package/native/core/programmers/iterate/stringify_native.go +1 -1
  152. package/native/core/programmers/iterate/stringify_regular_properties.go +84 -84
  153. package/native/core/programmers/iterate/template_to_pattern.go +20 -20
  154. package/native/core/programmers/iterate/wrap_metadata_rest_tuple.go +13 -13
  155. package/native/core/programmers/json/JsonApplicationProgrammer.go +323 -323
  156. package/native/core/programmers/json/JsonAssertParseProgrammer.go +100 -100
  157. package/native/core/programmers/json/JsonAssertStringifyProgrammer.go +88 -88
  158. package/native/core/programmers/json/JsonIsParseProgrammer.go +130 -130
  159. package/native/core/programmers/json/JsonIsStringifyProgrammer.go +92 -92
  160. package/native/core/programmers/json/JsonSchemaProgrammer.go +65 -65
  161. package/native/core/programmers/json/JsonSchemasProgrammer.go +116 -116
  162. package/native/core/programmers/json/JsonStringifyProgrammer.go +1245 -1245
  163. package/native/core/programmers/json/JsonValidateParseProgrammer.go +89 -89
  164. package/native/core/programmers/json/JsonValidateStringifyProgrammer.go +106 -106
  165. package/native/core/programmers/llm/LlmApplicationProgrammer.go +449 -437
  166. package/native/core/programmers/llm/LlmCoerceProgrammer.go +79 -79
  167. package/native/core/programmers/llm/LlmControllerProgrammer.go +35 -35
  168. package/native/core/programmers/llm/LlmMetadataFactory.go +74 -74
  169. package/native/core/programmers/llm/LlmParametersProgrammer.go +105 -132
  170. package/native/core/programmers/llm/LlmParseProgrammer.go +88 -88
  171. package/native/core/programmers/llm/LlmSchemaProgrammer.go +780 -423
  172. package/native/core/programmers/llm/LlmStructuredOutputProgrammer.go +123 -123
  173. package/native/core/programmers/misc/MiscAssertCloneProgrammer.go +82 -82
  174. package/native/core/programmers/misc/MiscAssertPruneProgrammer.go +97 -97
  175. package/native/core/programmers/misc/MiscCloneProgrammer.go +1056 -1056
  176. package/native/core/programmers/misc/MiscIsCloneProgrammer.go +94 -94
  177. package/native/core/programmers/misc/MiscIsPruneProgrammer.go +86 -86
  178. package/native/core/programmers/misc/MiscLiteralsProgrammer.go +99 -99
  179. package/native/core/programmers/misc/MiscPruneProgrammer.go +700 -700
  180. package/native/core/programmers/misc/MiscValidateCloneProgrammer.go +103 -103
  181. package/native/core/programmers/misc/MiscValidatePruneProgrammer.go +94 -94
  182. package/native/core/programmers/notations/NotationAssertGeneralProgrammer.go +85 -85
  183. package/native/core/programmers/notations/NotationGeneralProgrammer.go +1188 -1188
  184. package/native/core/programmers/notations/NotationIsGeneralProgrammer.go +90 -90
  185. package/native/core/programmers/notations/NotationValidateGeneralProgrammer.go +109 -109
  186. package/native/core/programmers/protobuf/ProtobufAssertDecodeProgrammer.go +99 -99
  187. package/native/core/programmers/protobuf/ProtobufAssertEncodeProgrammer.go +114 -114
  188. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +697 -697
  189. package/native/core/programmers/protobuf/ProtobufEncodeProgrammer.go +1039 -1039
  190. package/native/core/programmers/protobuf/ProtobufIsDecodeProgrammer.go +99 -99
  191. package/native/core/programmers/protobuf/ProtobufIsEncodeProgrammer.go +93 -93
  192. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +228 -228
  193. package/native/core/programmers/protobuf/ProtobufValidateDecodeProgrammer.go +88 -88
  194. package/native/core/programmers/protobuf/ProtobufValidateEncodeProgrammer.go +120 -120
  195. package/native/core/schemas/metadata/IMetadataDictionary.go +4 -4
  196. package/native/core/schemas/metadata/MetadataAlias.go +15 -15
  197. package/native/core/schemas/metadata/MetadataAliasType.go +36 -36
  198. package/native/core/schemas/metadata/MetadataApplication.go +25 -25
  199. package/native/core/schemas/metadata/MetadataArray.go +15 -15
  200. package/native/core/schemas/metadata/MetadataArrayType.go +31 -31
  201. package/native/core/schemas/metadata/MetadataAtomic.go +45 -45
  202. package/native/core/schemas/metadata/MetadataCollection.go +380 -380
  203. package/native/core/schemas/metadata/MetadataComponents.go +95 -95
  204. package/native/core/schemas/metadata/MetadataConstant.go +31 -31
  205. package/native/core/schemas/metadata/MetadataConstantValue.go +63 -63
  206. package/native/core/schemas/metadata/MetadataEscaped.go +17 -17
  207. package/native/core/schemas/metadata/MetadataFunction.go +30 -30
  208. package/native/core/schemas/metadata/MetadataMap.go +21 -21
  209. package/native/core/schemas/metadata/MetadataNative.go +48 -48
  210. package/native/core/schemas/metadata/MetadataObject.go +15 -15
  211. package/native/core/schemas/metadata/MetadataObjectType.go +116 -116
  212. package/native/core/schemas/metadata/MetadataParameter.go +28 -28
  213. package/native/core/schemas/metadata/MetadataProperty.go +32 -32
  214. package/native/core/schemas/metadata/MetadataSchema.go +766 -766
  215. package/native/core/schemas/metadata/MetadataSet.go +17 -17
  216. package/native/core/schemas/metadata/MetadataTemplate.go +43 -43
  217. package/native/core/schemas/metadata/MetadataTuple.go +10 -10
  218. package/native/core/schemas/metadata/MetadataTupleType.go +38 -38
  219. package/native/core/schemas/protobuf/IProtobufProperty.go +2 -2
  220. package/native/core/schemas/protobuf/IProtobufPropertyType.go +18 -18
  221. package/native/core/schemas/protobuf/IProtobufSchema.go +17 -17
  222. package/native/core/typings/Writable.go +1 -1
  223. package/native/core/utils/PatternUtil.go +38 -38
  224. package/native/core/utils/ProtobufNameEncoder.go +28 -28
  225. package/native/shim/printer/shim.go +213 -213
  226. package/native/third_party/ttsc/driver/host.go +7 -7
  227. package/native/third_party/ttsc/driver/program.go +275 -275
  228. package/native/third_party/ttsc/driver/rewrite.go +219 -219
  229. package/native/third_party/ttsc/shim/ast/lint.go +171 -171
  230. package/native/third_party/ttsc/shim/ast/shim.go +83 -83
  231. package/native/third_party/ttsc/shim/bundled/shim.go +5 -1
  232. package/native/third_party/ttsc/shim/checker/shim.go +79 -79
  233. package/native/third_party/ttsc/shim/compiler/shim.go +16 -1
  234. package/native/third_party/ttsc/shim/core/shim.go +10 -10
  235. package/native/third_party/ttsc/shim/diagnosticwriter/lint.go +79 -79
  236. package/native/third_party/ttsc/shim/diagnosticwriter/shim.go +19 -19
  237. package/native/third_party/ttsc/shim/parser/shim.go +7 -1
  238. package/native/third_party/ttsc/shim/scanner/shim.go +39 -1
  239. package/native/third_party/ttsc/shim/tsoptions/shim.go +51 -1
  240. package/native/third_party/ttsc/shim/tspath/shim.go +72 -1
  241. package/native/third_party/ttsc/shim/vfs/cachedvfs/shim.go +1 -1
  242. package/native/third_party/ttsc/shim/vfs/osvfs/shim.go +1 -1
  243. package/native/third_party/ttsc/shim/vfs/shim.go +4 -1
  244. package/native/transform/CallExpressionTransformer.go +556 -556
  245. package/native/transform/FileTransformer.go +123 -123
  246. package/native/transform/ImportTransformer.go +224 -224
  247. package/native/transform/NodeTransformer.go +11 -11
  248. package/native/transform/TypiaGenerator.go +136 -136
  249. package/native/transform/features/AssertTransformer.go +28 -28
  250. package/native/transform/features/CreateAssertTransformer.go +28 -28
  251. package/native/transform/features/CreateIsTransformer.go +24 -24
  252. package/native/transform/features/CreateRandomTransformer.go +35 -35
  253. package/native/transform/features/CreateValidateTransformer.go +24 -24
  254. package/native/transform/features/IsTransformer.go +24 -24
  255. package/native/transform/features/RandomTransformer.go +37 -37
  256. package/native/transform/features/ValidateTransformer.go +24 -24
  257. package/native/transform/features/functional/FunctionalGenericTransformer.go +48 -48
  258. package/native/transform/features/http/CreateHttpAssertFormDataTransformer.go +11 -11
  259. package/native/transform/features/http/CreateHttpAssertHeadersTransformer.go +11 -11
  260. package/native/transform/features/http/CreateHttpAssertQueryTransformer.go +17 -17
  261. package/native/transform/features/http/CreateHttpFormDataTransformer.go +11 -11
  262. package/native/transform/features/http/CreateHttpHeadersTransformer.go +11 -11
  263. package/native/transform/features/http/CreateHttpIsFormDataTransformer.go +11 -11
  264. package/native/transform/features/http/CreateHttpIsHeadersTransformer.go +11 -11
  265. package/native/transform/features/http/CreateHttpIsQueryTransformer.go +17 -17
  266. package/native/transform/features/http/CreateHttpParameterTransformer.go +11 -11
  267. package/native/transform/features/http/CreateHttpQueryTransformer.go +17 -17
  268. package/native/transform/features/http/CreateHttpValidateFormDataTransformer.go +11 -11
  269. package/native/transform/features/http/CreateHttpValidateHeadersTransformer.go +11 -11
  270. package/native/transform/features/http/CreateHttpValidateQueryTransformer.go +17 -17
  271. package/native/transform/features/http/HttpAssertFormDataTransformer.go +11 -11
  272. package/native/transform/features/http/HttpAssertHeadersTransformer.go +11 -11
  273. package/native/transform/features/http/HttpAssertQueryTransformer.go +17 -17
  274. package/native/transform/features/http/HttpFormDataTransformer.go +11 -11
  275. package/native/transform/features/http/HttpHeadersTransformer.go +11 -11
  276. package/native/transform/features/http/HttpIsFormDataTransformer.go +11 -11
  277. package/native/transform/features/http/HttpIsHeadersTransformer.go +11 -11
  278. package/native/transform/features/http/HttpIsQueryTransformer.go +17 -17
  279. package/native/transform/features/http/HttpParameterTransformer.go +11 -11
  280. package/native/transform/features/http/HttpQueryTransformer.go +17 -17
  281. package/native/transform/features/http/HttpValidateFormDataTransformer.go +11 -11
  282. package/native/transform/features/http/HttpValidateHeadersTransformer.go +11 -11
  283. package/native/transform/features/http/HttpValidateQueryTransformer.go +17 -17
  284. package/native/transform/features/json/JsonApplicationTransformer.go +61 -61
  285. package/native/transform/features/json/JsonAssertParseTransformer.go +11 -11
  286. package/native/transform/features/json/JsonAssertStringifyTransformer.go +11 -11
  287. package/native/transform/features/json/JsonCreateAssertParseTransformer.go +11 -11
  288. package/native/transform/features/json/JsonCreateAssertStringifyTransformer.go +11 -11
  289. package/native/transform/features/json/JsonCreateIsParseTransformer.go +11 -11
  290. package/native/transform/features/json/JsonCreateIsStringifyTransformer.go +11 -11
  291. package/native/transform/features/json/JsonCreateStringifyTransformer.go +11 -11
  292. package/native/transform/features/json/JsonCreateValidateParseTransformer.go +11 -11
  293. package/native/transform/features/json/JsonCreateValidateStringifyProgrammer.go +11 -11
  294. package/native/transform/features/json/JsonIsParseTransformer.go +11 -11
  295. package/native/transform/features/json/JsonIsStringifyTransformer.go +11 -11
  296. package/native/transform/features/json/JsonSchemaTransformer.go +148 -148
  297. package/native/transform/features/json/JsonSchemasTransformer.go +94 -94
  298. package/native/transform/features/json/JsonStringifyTransformer.go +11 -11
  299. package/native/transform/features/json/JsonValidateParseTransformer.go +11 -11
  300. package/native/transform/features/json/JsonValidateStringifyTransformer.go +11 -11
  301. package/native/transform/features/llm/LlmApplicationTransformer.go +43 -43
  302. package/native/transform/features/llm/LlmCoerceTransformer.go +50 -50
  303. package/native/transform/features/llm/LlmControllerTransformer.go +48 -48
  304. package/native/transform/features/llm/LlmCreateCoerceTransformer.go +43 -43
  305. package/native/transform/features/llm/LlmCreateParseTransformer.go +43 -43
  306. package/native/transform/features/llm/LlmParametersTransformer.go +38 -38
  307. package/native/transform/features/llm/LlmParseTransformer.go +50 -50
  308. package/native/transform/features/llm/LlmSchemaTransformer.go +129 -129
  309. package/native/transform/features/llm/LlmStructuredOutputTransformer.go +44 -44
  310. package/native/transform/features/misc/MiscAssertCloneTransformer.go +11 -11
  311. package/native/transform/features/misc/MiscAssertPruneTransformer.go +11 -11
  312. package/native/transform/features/misc/MiscCloneTransformer.go +11 -11
  313. package/native/transform/features/misc/MiscCreateAssertCloneTransformer.go +11 -11
  314. package/native/transform/features/misc/MiscCreateAssertPruneTransformer.go +11 -11
  315. package/native/transform/features/misc/MiscCreateCloneTransformer.go +11 -11
  316. package/native/transform/features/misc/MiscCreateIsCloneTransformer.go +11 -11
  317. package/native/transform/features/misc/MiscCreateIsPruneTransformer.go +11 -11
  318. package/native/transform/features/misc/MiscCreatePruneTransformer.go +11 -11
  319. package/native/transform/features/misc/MiscCreateValidateCloneTransformer.go +11 -11
  320. package/native/transform/features/misc/MiscCreateValidatePruneTransformer.go +11 -11
  321. package/native/transform/features/misc/MiscIsCloneTransformer.go +11 -11
  322. package/native/transform/features/misc/MiscIsPruneTransformer.go +11 -11
  323. package/native/transform/features/misc/MiscLiteralsTransformer.go +21 -21
  324. package/native/transform/features/misc/MiscPruneTransformer.go +11 -11
  325. package/native/transform/features/misc/MiscValidateCloneTransformer.go +11 -11
  326. package/native/transform/features/misc/MiscValidatePruneTransformer.go +11 -11
  327. package/native/transform/features/notations/NotationAssertGeneralTransformer.go +16 -16
  328. package/native/transform/features/notations/NotationCreateAssertGeneralTransformer.go +16 -16
  329. package/native/transform/features/notations/NotationCreateGeneralTransformer.go +16 -16
  330. package/native/transform/features/notations/NotationCreateIsGeneralTransformer.go +16 -16
  331. package/native/transform/features/notations/NotationCreateValidateGeneralTransformer.go +16 -16
  332. package/native/transform/features/notations/NotationGeneralTransformer.go +21 -21
  333. package/native/transform/features/notations/NotationIsGeneralTransformer.go +16 -16
  334. package/native/transform/features/notations/NotationValidateGeneralTransformer.go +16 -16
  335. package/native/transform/features/protobuf/ProtobufAssertDecodeTransformer.go +11 -11
  336. package/native/transform/features/protobuf/ProtobufAssertEncodeTransformer.go +11 -11
  337. package/native/transform/features/protobuf/ProtobufCreateAssertDecodeTransformer.go +11 -11
  338. package/native/transform/features/protobuf/ProtobufCreateAssertEncodeTransformer.go +11 -11
  339. package/native/transform/features/protobuf/ProtobufCreateDecodeTransformer.go +11 -11
  340. package/native/transform/features/protobuf/ProtobufCreateEncodeTransformer.go +11 -11
  341. package/native/transform/features/protobuf/ProtobufCreateIsDecodeTransformer.go +11 -11
  342. package/native/transform/features/protobuf/ProtobufCreateIsEncodeTransformer.go +11 -11
  343. package/native/transform/features/protobuf/ProtobufCreateValidateDecodeTransformer.go +11 -11
  344. package/native/transform/features/protobuf/ProtobufCreateValidateEncodeTransformer.go +11 -11
  345. package/native/transform/features/protobuf/ProtobufDecodeTransformer.go +11 -11
  346. package/native/transform/features/protobuf/ProtobufEncodeTransformer.go +11 -11
  347. package/native/transform/features/protobuf/ProtobufIsDecodeTransformer.go +11 -11
  348. package/native/transform/features/protobuf/ProtobufIsEncodeTransformer.go +11 -11
  349. package/native/transform/features/protobuf/ProtobufMessageTransformer.go +20 -20
  350. package/native/transform/features/protobuf/ProtobufValidateDecodeTransformer.go +11 -11
  351. package/native/transform/features/protobuf/ProtobufValidateEncodeTransformer.go +11 -11
  352. package/native/transform/features/reflect/ReflectMetadataTransformer.go +59 -59
  353. package/native/transform/features/reflect/ReflectNameTransformer.go +78 -78
  354. package/native/transform/features/reflect/ReflectSchemaTransformer.go +121 -121
  355. package/native/transform/features/reflect/ReflectSchemasTransformer.go +55 -55
  356. package/native/transform/internal/GenericTransformer.go +173 -173
  357. package/native/transform/transform.go +32 -32
  358. package/package.json +4 -4
  359. package/src/executable/TypiaGenerateWizard.ts +78 -9
  360. package/src/executable/generate/ttsc.ts +2 -3
  361. package/src/executable/setup/PluginConfigurator.ts +2 -3
  362. package/src/internal/_randomInteger.ts +5 -5
  363. package/src/internal/_validateReport.ts +1 -2
  364. package/src/transform.ts +6 -11
@@ -1,17 +1,20 @@
1
1
  package llm
2
2
 
3
3
  import (
4
- "fmt"
5
- "strings"
6
-
7
- shimast "github.com/microsoft/typescript-go/shim/ast"
8
- nativecontext "github.com/samchon/typia/packages/typia/native/core/context"
9
- nativefactories "github.com/samchon/typia/packages/typia/native/core/factories"
10
- nativeprogrammers "github.com/samchon/typia/packages/typia/native/core/programmers"
11
- nativehelpers "github.com/samchon/typia/packages/typia/native/core/programmers/helpers"
12
- nativeiterate "github.com/samchon/typia/packages/typia/native/core/programmers/iterate"
13
- nativejson "github.com/samchon/typia/packages/typia/native/core/programmers/json"
14
- schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
4
+ "fmt"
5
+ "reflect"
6
+ "sort"
7
+ "strconv"
8
+ "strings"
9
+
10
+ shimast "github.com/microsoft/typescript-go/shim/ast"
11
+ nativecontext "github.com/samchon/typia/packages/typia/native/core/context"
12
+ nativefactories "github.com/samchon/typia/packages/typia/native/core/factories"
13
+ nativeprogrammers "github.com/samchon/typia/packages/typia/native/core/programmers"
14
+ nativehelpers "github.com/samchon/typia/packages/typia/native/core/programmers/helpers"
15
+ nativeiterate "github.com/samchon/typia/packages/typia/native/core/programmers/iterate"
16
+ nativejson "github.com/samchon/typia/packages/typia/native/core/programmers/json"
17
+ schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
15
18
  )
16
19
 
17
20
  type llmSchemaProgrammerNamespace struct{}
@@ -19,456 +22,810 @@ type llmSchemaProgrammerNamespace struct{}
19
22
  var LlmSchemaProgrammer = llmSchemaProgrammerNamespace{}
20
23
 
21
24
  type LlmSchemaProgrammer_IProps struct {
22
- Context nativecontext.ITypiaContext
23
- Modulo *shimast.Node
24
- Type any
25
- Name *string
26
- Init *shimast.Node
27
- Config map[string]any
25
+ Context nativecontext.ITypiaContext
26
+ Modulo *shimast.Node
27
+ Type any
28
+ Name *string
29
+ Init *shimast.Node
30
+ Config map[string]any
28
31
  }
29
32
 
30
33
  type LlmSchemaProgrammer_IOutput struct {
31
- Schema map[string]any
32
- Defs map[string]any
34
+ Schema map[string]any
35
+ Defs map[string]any
33
36
  }
34
37
 
35
38
  type LlmSchemaProgrammer_IWriteProps struct {
36
- Context nativecontext.ITypiaContext
37
- Metadata *schemametadata.MetadataSchema
38
- Config map[string]any
39
+ Context nativecontext.ITypiaContext
40
+ Metadata *schemametadata.MetadataSchema
41
+ Config map[string]any
39
42
  }
40
43
 
41
44
  var llmSchemaProgrammer_factory = shimast.NewNodeFactory(shimast.NodeFactoryHooks{})
42
45
 
43
46
  func (llmSchemaProgrammerNamespace) Write(props LlmSchemaProgrammer_IWriteProps) *shimast.Node {
44
- collection := nativejson.JsonSchemasProgrammer.WriteSchemas(struct {
45
- Version string
46
- Metadatas []*schemametadata.MetadataSchema
47
- }{
48
- Version: "3.1",
49
- Metadatas: []*schemametadata.MetadataSchema{props.Metadata},
50
- })
51
- output := LlmSchemaProgrammer.WriteSchema(struct {
52
- Metadata *schemametadata.MetadataSchema
53
- Config map[string]any
54
- }{
55
- Metadata: props.Metadata,
56
- Config: props.Config,
57
- })
58
- schema := nativeiterate.JsonSchema{}
59
- if len(collection.Schemas) != 0 {
60
- schema = collection.Schemas[0]
61
- }
62
- schemaTypeNode := llmProgrammer_import_type(props.Context, nativeprogrammers.ImportProgrammer_TypeProps{
63
- File: "typia",
64
- Name: "ILlmSchema",
65
- })
66
- schemaLiteral := llmSchemaProgrammer_factory.NewAsExpression(
67
- llmSchemaProgrammer_factory.NewSatisfiesExpression(
68
- llmSchemaProgrammer_write_schema_expression(props.Context, collection.Components, schema, props.Config, nil),
69
- schemaTypeNode,
70
- ),
71
- schemaTypeNode,
72
- )
73
- if len(output.Defs) == 0 {
74
- return schemaLiteral
75
- }
76
- recordType := llmSchemaProgrammer_factory.NewTypeReferenceNode(
77
- llmSchemaProgrammer_factory.NewIdentifier("Record"),
78
- llmSchemaProgrammer_factory.NewNodeList([]*shimast.Node{
79
- nativefactories.TypeFactory.Keyword("string"),
80
- schemaTypeNode,
81
- }),
82
- )
83
- return llmSchemaProgrammer_factory.NewArrowFunction(
84
- nil,
85
- nil,
86
- llmSchemaProgrammer_factory.NewNodeList([]*shimast.Node{
87
- nativefactories.IdentifierFactory.Parameter("$defs", recordType, nil),
88
- }),
89
- schemaTypeNode,
90
- nil,
91
- llmSchemaProgrammer_factory.NewToken(shimast.KindEqualsGreaterThanToken),
92
- llmSchemaProgrammer_factory.NewBlock(llmSchemaProgrammer_factory.NewNodeList([]*shimast.Node{
93
- llmSchemaProgrammer_factory.NewReturnStatement(llmSchemaProgrammer_factory.NewAsExpression(
94
- llmSchemaProgrammer_factory.NewSatisfiesExpression(
95
- llmSchemaProgrammer_write_schema_expression(
96
- props.Context,
97
- collection.Components,
98
- schema,
99
- props.Config,
100
- llmSchemaProgrammer_factory.NewIdentifier("$defs"),
101
- ),
102
- schemaTypeNode,
103
- ),
104
- schemaTypeNode,
105
- )),
106
- }), true),
107
- )
47
+ output := LlmSchemaProgrammer.WriteSchema(struct {
48
+ Metadata *schemametadata.MetadataSchema
49
+ Config map[string]any
50
+ }{
51
+ Metadata: props.Metadata,
52
+ Config: props.Config,
53
+ })
54
+ schemaTypeNode := llmProgrammer_import_type(props.Context, nativeprogrammers.ImportProgrammer_TypeProps{
55
+ File: "typia",
56
+ Name: "ILlmSchema",
57
+ })
58
+ schemaLiteral := llmSchemaProgrammer_factory.NewAsExpression(
59
+ llmSchemaProgrammer_factory.NewSatisfiesExpression(
60
+ nativefactories.LiteralFactory.Write(output.Schema),
61
+ schemaTypeNode,
62
+ ),
63
+ schemaTypeNode,
64
+ )
65
+ if len(output.Defs) == 0 {
66
+ return schemaLiteral
67
+ }
68
+ recordType := llmSchemaProgrammer_record_type(schemaTypeNode)
69
+ return llmSchemaProgrammer_factory.NewArrowFunction(
70
+ nil,
71
+ nil,
72
+ llmSchemaProgrammer_factory.NewNodeList([]*shimast.Node{
73
+ nativefactories.IdentifierFactory.Parameter("$defs", recordType, nil),
74
+ }),
75
+ schemaTypeNode,
76
+ nil,
77
+ llmSchemaProgrammer_factory.NewToken(shimast.KindEqualsGreaterThanToken),
78
+ llmSchemaProgrammer_factory.NewBlock(llmSchemaProgrammer_factory.NewNodeList([]*shimast.Node{
79
+ llmSchemaProgrammer_factory.NewExpressionStatement(
80
+ llmSchemaProgrammer_factory.NewCallExpression(
81
+ llmSchemaProgrammer_factory.NewIdentifier("Object.assign"),
82
+ nil,
83
+ nil,
84
+ llmSchemaProgrammer_factory.NewNodeList([]*shimast.Node{
85
+ llmSchemaProgrammer_factory.NewIdentifier("$defs"),
86
+ llmSchemaProgrammer_factory.NewAsExpression(
87
+ nativefactories.LiteralFactory.Write(output.Defs),
88
+ llmSchemaProgrammer_record_type(schemaTypeNode),
89
+ ),
90
+ }),
91
+ shimast.NodeFlagsNone,
92
+ ),
93
+ ),
94
+ llmSchemaProgrammer_factory.NewReturnStatement(schemaLiteral),
95
+ }), true),
96
+ )
97
+ }
98
+
99
+ func llmSchemaProgrammer_record_type(schemaTypeNode *shimast.Node) *shimast.Node {
100
+ return llmSchemaProgrammer_factory.NewTypeReferenceNode(
101
+ llmSchemaProgrammer_factory.NewIdentifier("Record"),
102
+ llmSchemaProgrammer_factory.NewNodeList([]*shimast.Node{
103
+ nativefactories.TypeFactory.Keyword("string"),
104
+ schemaTypeNode,
105
+ }),
106
+ )
108
107
  }
109
108
 
110
109
  func (llmSchemaProgrammerNamespace) WriteSchema(props struct {
111
- Metadata *schemametadata.MetadataSchema
112
- Config map[string]any
110
+ Metadata *schemametadata.MetadataSchema
111
+ Config map[string]any
113
112
  }) LlmSchemaProgrammer_IOutput {
114
- collection := nativejson.JsonSchemasProgrammer.WriteSchemas(struct {
115
- Version string
116
- Metadatas []*schemametadata.MetadataSchema
117
- }{
118
- Version: "3.1",
119
- Metadatas: []*schemametadata.MetadataSchema{props.Metadata},
120
- })
121
- defs := map[string]any{}
122
- schema := map[string]any{}
123
- if len(collection.Schemas) != 0 {
124
- schema = llmSchemaProgrammer_convert_schema(collection.Schemas[0], collection.Components, defs)
125
- }
126
- return LlmSchemaProgrammer_IOutput{
127
- Defs: defs,
128
- Schema: schema,
129
- }
113
+ collection := nativejson.JsonSchemasProgrammer.WriteSchemas(struct {
114
+ Version string
115
+ Metadatas []*schemametadata.MetadataSchema
116
+ }{
117
+ Version: "3.1",
118
+ Metadatas: []*schemametadata.MetadataSchema{props.Metadata},
119
+ })
120
+ defs := map[string]any{}
121
+ schema := map[string]any{}
122
+ if len(collection.Schemas) != 0 {
123
+ schema = llmSchemaProgrammer_convert_schema_config(collection.Schemas[0], collection.Components, defs, props.Config)
124
+ }
125
+ return LlmSchemaProgrammer_IOutput{
126
+ Defs: defs,
127
+ Schema: schema,
128
+ }
130
129
  }
131
130
 
132
131
  func (llmSchemaProgrammerNamespace) Validate(props struct {
133
- Config map[string]any
134
- Metadata *schemametadata.MetadataSchema
135
- Explore nativefactories.MetadataFactory_IExplore
132
+ Config map[string]any
133
+ Metadata *schemametadata.MetadataSchema
134
+ Explore nativefactories.MetadataFactory_IExplore
136
135
  }) []string {
137
- output := []string{}
138
- strict, _ := props.Config["strict"].(bool)
139
- if strict {
140
- for _, object := range props.Metadata.Objects {
141
- for _, property := range object.Type.Properties {
142
- if property.Key.IsSoleLiteral() == false && property.Value.Size() != 0 {
143
- output = append(output, "Strict mode does not allow dynamic property in object.")
144
- break
145
- }
146
- }
147
- }
148
- for _, object := range props.Metadata.Objects {
149
- for _, property := range object.Type.Properties {
150
- if property.Value.IsRequired() == false {
151
- output = append(output, "Strict mode does not support optional property in object.")
152
- break
153
- }
154
- }
155
- }
156
- }
157
- for _, atomic := range props.Metadata.Atomics {
158
- if atomic.Type == "bigint" {
159
- output = append(output, "LLM schema does not support bigint type.")
160
- break
161
- }
162
- }
163
- for _, constant := range props.Metadata.Constants {
164
- if constant.Type == "bigint" {
165
- output = append(output, "LLM schema does not support bigint type.")
166
- break
167
- }
168
- }
169
- if len(props.Metadata.Tuples) != 0 {
170
- output = append(output, "LLM schema does not support tuple type.")
171
- }
172
- for _, array := range props.Metadata.Arrays {
173
- if array.Type.Value.IsRequired() == false {
174
- output = append(output, "LLM schema does not support undefined type in array.")
175
- break
176
- }
177
- }
178
- if len(props.Metadata.Maps) != 0 {
179
- output = append(output, "LLM schema does not support Map type.")
180
- }
181
- if len(props.Metadata.Sets) != 0 {
182
- output = append(output, "LLM schema does not support Set type.")
183
- }
184
- for _, native := range props.Metadata.Natives {
185
- if nativehelpers.AtomicPredicator.Native(native.Name) == false &&
186
- native.Name != "Date" &&
187
- native.Name != "Blob" &&
188
- native.Name != "File" {
189
- output = append(output, "LLM schema does not support "+native.Name+" type.")
190
- }
191
- }
192
- return output
136
+ output := []string{}
137
+ strict, _ := props.Config["strict"].(bool)
138
+ if strict {
139
+ for _, object := range props.Metadata.Objects {
140
+ for _, property := range object.Type.Properties {
141
+ if property.Key.IsSoleLiteral() == false && property.Value.Size() != 0 {
142
+ output = append(output, "Strict mode does not allow dynamic property in object.")
143
+ break
144
+ }
145
+ }
146
+ }
147
+ for _, object := range props.Metadata.Objects {
148
+ for _, property := range object.Type.Properties {
149
+ if property.Value.IsRequired() == false {
150
+ output = append(output, "Strict mode does not support optional property in object.")
151
+ break
152
+ }
153
+ }
154
+ }
155
+ }
156
+ for _, atomic := range props.Metadata.Atomics {
157
+ if atomic.Type == "bigint" {
158
+ output = append(output, "LLM schema does not support bigint type.")
159
+ break
160
+ }
161
+ }
162
+ for _, constant := range props.Metadata.Constants {
163
+ if constant.Type == "bigint" {
164
+ output = append(output, "LLM schema does not support bigint type.")
165
+ break
166
+ }
167
+ }
168
+ if len(props.Metadata.Tuples) != 0 {
169
+ output = append(output, "LLM schema does not support tuple type.")
170
+ }
171
+ for _, array := range props.Metadata.Arrays {
172
+ if array.Type.Value.IsRequired() == false {
173
+ output = append(output, "LLM schema does not support undefined type in array.")
174
+ break
175
+ }
176
+ }
177
+ if len(props.Metadata.Maps) != 0 {
178
+ output = append(output, "LLM schema does not support Map type.")
179
+ }
180
+ if len(props.Metadata.Sets) != 0 {
181
+ output = append(output, "LLM schema does not support Set type.")
182
+ }
183
+ for _, native := range props.Metadata.Natives {
184
+ if nativehelpers.AtomicPredicator.Native(native.Name) == false &&
185
+ native.Name != "Date" &&
186
+ native.Name != "Blob" &&
187
+ native.Name != "File" {
188
+ output = append(output, "LLM schema does not support "+native.Name+" type.")
189
+ }
190
+ }
191
+ return output
193
192
  }
194
193
 
195
194
  func llmSchemaProgrammer_size(metadata *schemametadata.MetadataSchema) int {
196
- total := 0
197
- if metadata.Escaped != nil {
198
- total += llmSchemaProgrammer_size(metadata.Escaped.Returns)
199
- }
200
- total += len(metadata.Aliases) + len(metadata.Objects) + len(metadata.Arrays) + len(metadata.Tuples)
201
- if len(metadata.Maps) != 0 {
202
- total++
203
- }
204
- if len(metadata.Sets) != 0 {
205
- total++
206
- }
207
- for _, atomic := range metadata.Atomics {
208
- if atomic.Type == "boolean" {
209
- total += len(nativeiterate.Json_schema_boolean_export(atomic))
210
- } else if atomic.Type == "bigint" {
211
- total += len(nativeiterate.Json_schema_bigint_export(atomic))
212
- } else if atomic.Type == "number" {
213
- total += len(nativeiterate.Json_schema_number_export(atomic))
214
- } else {
215
- total += len(nativeiterate.Json_schema_string_export(atomic))
216
- }
217
- }
218
- for _, constant := range metadata.Constants {
219
- found := false
220
- for _, atomic := range metadata.Atomics {
221
- if atomic.Type == constant.Type {
222
- found = true
223
- break
224
- }
225
- }
226
- if found == false {
227
- total++
228
- }
229
- }
230
- total += len(metadata.Templates)
231
- components := &nativeiterate.OpenApi_IComponents{Schemas: map[string]nativeiterate.JsonSchema{}}
232
- for _, native := range metadata.Natives {
233
- found := false
234
- for _, atomic := range metadata.Atomics {
235
- if atomic.Type == native.Name {
236
- found = true
237
- break
238
- }
239
- }
240
- for _, constant := range metadata.Constants {
241
- if constant.Type == native.Name {
242
- found = true
243
- break
244
- }
245
- }
246
- if found == false {
247
- total += len(nativeiterate.Json_schema_native_export(nativeiterate.Json_schema_native_export_props{
248
- Components: components,
249
- Native: native,
250
- }))
251
- }
252
- }
253
- return total
195
+ total := 0
196
+ if metadata.Escaped != nil {
197
+ total += llmSchemaProgrammer_size(metadata.Escaped.Returns)
198
+ }
199
+ total += len(metadata.Aliases) + len(metadata.Objects) + len(metadata.Arrays) + len(metadata.Tuples)
200
+ if len(metadata.Maps) != 0 {
201
+ total++
202
+ }
203
+ if len(metadata.Sets) != 0 {
204
+ total++
205
+ }
206
+ for _, atomic := range metadata.Atomics {
207
+ if atomic.Type == "boolean" {
208
+ total += len(nativeiterate.Json_schema_boolean_export(atomic))
209
+ } else if atomic.Type == "bigint" {
210
+ total += len(nativeiterate.Json_schema_bigint_export(atomic))
211
+ } else if atomic.Type == "number" {
212
+ total += len(nativeiterate.Json_schema_number_export(atomic))
213
+ } else {
214
+ total += len(nativeiterate.Json_schema_string_export(atomic))
215
+ }
216
+ }
217
+ for _, constant := range metadata.Constants {
218
+ found := false
219
+ for _, atomic := range metadata.Atomics {
220
+ if atomic.Type == constant.Type {
221
+ found = true
222
+ break
223
+ }
224
+ }
225
+ if found == false {
226
+ total++
227
+ }
228
+ }
229
+ total += len(metadata.Templates)
230
+ components := &nativeiterate.OpenApi_IComponents{Schemas: map[string]nativeiterate.JsonSchema{}}
231
+ for _, native := range metadata.Natives {
232
+ found := false
233
+ for _, atomic := range metadata.Atomics {
234
+ if atomic.Type == native.Name {
235
+ found = true
236
+ break
237
+ }
238
+ }
239
+ for _, constant := range metadata.Constants {
240
+ if constant.Type == native.Name {
241
+ found = true
242
+ break
243
+ }
244
+ }
245
+ if found == false {
246
+ total += len(nativeiterate.Json_schema_native_export(nativeiterate.Json_schema_native_export_props{
247
+ Components: components,
248
+ Native: native,
249
+ }))
250
+ }
251
+ }
252
+ return total
254
253
  }
255
254
 
256
255
  func llmSchemaProgrammer_convert_schema(schema nativeiterate.JsonSchema, components *nativeiterate.OpenApi_IComponents, defs map[string]any) map[string]any {
257
- output := map[string]any{}
258
- var oneOf any
259
- var discriminator map[string]any
260
- for key, value := range schema {
261
- if key == "$ref" {
262
- ref := fmt.Sprint(value)
263
- name := ref[strings.LastIndex(ref, "/")+1:]
264
- output["$ref"] = "#/$defs/" + name
265
- if components != nil && components.Schemas != nil {
266
- if target, ok := components.Schemas[name]; ok {
267
- if _, exists := defs[name]; exists == false {
268
- defs[name] = map[string]any{}
269
- defs[name] = llmSchemaProgrammer_convert_schema(target, components, defs)
270
- }
271
- }
272
- }
273
- continue
274
- }
275
- if key == "oneOf" {
276
- oneOf = value
277
- output["anyOf"] = llmSchemaProgrammer_convert_value(value, components, defs)
278
- continue
279
- }
280
- if key == "discriminator" {
281
- if mapValue, ok := value.(map[string]any); ok {
282
- discriminator = mapValue
283
- }
284
- continue
285
- }
286
- output[key] = llmSchemaProgrammer_convert_value(value, components, defs)
287
- }
288
- if oneOf != nil && discriminator != nil {
289
- if x := llmSchemaProgrammer_convert_discriminator(discriminator); x != nil {
290
- output["x-discriminator"] = x
291
- }
292
- }
293
- return output
294
- }
295
-
296
- func llmSchemaProgrammer_convert_discriminator(discriminator map[string]any) map[string]any {
297
- output := map[string]any{}
298
- if propertyName, ok := discriminator["propertyName"].(string); ok {
299
- output["propertyName"] = propertyName
300
- }
301
- if rawMapping, ok := discriminator["mapping"].(map[string]any); ok {
302
- mapping := map[string]any{}
303
- for key, value := range rawMapping {
304
- ref := fmt.Sprint(value)
305
- name := ref[strings.LastIndex(ref, "/")+1:]
306
- mapping[key] = "#/$defs/" + name
307
- }
308
- output["mapping"] = mapping
309
- }
310
- if len(output) == 0 {
311
- return nil
312
- }
313
- return output
314
- }
315
-
316
- func llmSchemaProgrammer_convert_value(value any, components *nativeiterate.OpenApi_IComponents, defs map[string]any) any {
317
- switch v := value.(type) {
318
- case nativeiterate.JsonSchema:
319
- return llmSchemaProgrammer_convert_schema(v, components, defs)
320
- case map[string]any:
321
- return llmSchemaProgrammer_convert_schema(nativeiterate.JsonSchema(v), components, defs)
322
- case []nativeiterate.JsonSchema:
323
- out := make([]any, 0, len(v))
324
- for _, elem := range v {
325
- out = append(out, llmSchemaProgrammer_convert_schema(elem, components, defs))
326
- }
327
- return out
328
- case []any:
329
- out := make([]any, 0, len(v))
330
- for _, elem := range v {
331
- out = append(out, llmSchemaProgrammer_convert_value(elem, components, defs))
332
- }
333
- return out
334
- default:
335
- return value
336
- }
337
- }
338
-
339
- func llmSchemaProgrammer_write_schema_expression(
340
- context nativecontext.ITypiaContext,
341
- components *nativeiterate.OpenApi_IComponents,
342
- schema nativeiterate.JsonSchema,
343
- config map[string]any,
344
- defs *shimast.Node,
345
- ) *shimast.Node {
346
- if defs == nil {
347
- defs = llmSchemaProgrammer_factory.NewObjectLiteralExpression(llmSchemaProgrammer_factory.NewNodeList(nil), false)
348
- }
349
- return llmProgrammer_converter_result(context, "schema", "typia.llm.schema", []*shimast.Node{
350
- llmProgrammer_object_property("config", llmProgrammer_config_expression(config)),
351
- llmProgrammer_object_property("components", nativefactories.LiteralFactory.Write(components)),
352
- llmProgrammer_object_property("schema", nativefactories.LiteralFactory.Write(schema)),
353
- llmProgrammer_object_property("$defs", defs),
354
- })
355
- }
356
-
357
- func llmProgrammer_converter_result(context nativecontext.ITypiaContext, method string, code string, properties []*shimast.Node) *shimast.Node {
358
- result := llmSchemaProgrammer_factory.NewIdentifier("__result")
359
- call := llmSchemaProgrammer_factory.NewCallExpression(
360
- nativefactories.IdentifierFactory.Access(llmProgrammer_llm_schema_converter(context), method),
361
- nil,
362
- nil,
363
- llmSchemaProgrammer_factory.NewNodeList([]*shimast.Node{
364
- llmSchemaProgrammer_factory.NewObjectLiteralExpression(llmSchemaProgrammer_factory.NewNodeList(properties), true),
365
- }),
366
- shimast.NodeFlagsNone,
367
- )
368
- return nativefactories.ExpressionFactory.SelfCall(
369
- llmSchemaProgrammer_factory.NewBlock(llmSchemaProgrammer_factory.NewNodeList([]*shimast.Node{
370
- nativefactories.StatementFactory.Constant(nativefactories.StatementFactory_ConstantProps{
371
- Name: "__result",
372
- Value: call,
373
- }),
374
- llmSchemaProgrammer_factory.NewIfStatement(
375
- llmSchemaProgrammer_factory.NewBinaryExpression(
376
- nil,
377
- nativefactories.IdentifierFactory.Access(result, "success"),
378
- nil,
379
- llmSchemaProgrammer_factory.NewToken(shimast.KindEqualsEqualsEqualsToken),
380
- llmSchemaProgrammer_factory.NewKeywordExpression(shimast.KindFalseKeyword),
381
- ),
382
- llmSchemaProgrammer_factory.NewThrowStatement(llmSchemaProgrammer_factory.NewNewExpression(
383
- llmSchemaProgrammer_factory.NewIdentifier("Error"),
384
- nil,
385
- llmSchemaProgrammer_factory.NewNodeList([]*shimast.Node{
386
- llmSchemaProgrammer_factory.NewStringLiteral("failed to convert JSON schema to LLM schema: "+code, shimast.TokenFlagsNone),
387
- }),
388
- )),
389
- nil,
390
- ),
391
- llmSchemaProgrammer_factory.NewReturnStatement(nativefactories.IdentifierFactory.Access(result, "value")),
392
- }), true),
393
- )
394
- }
395
-
396
- func llmProgrammer_object_property(name string, value *shimast.Node) *shimast.Node {
397
- return llmSchemaProgrammer_factory.NewPropertyAssignment(
398
- nil,
399
- nativefactories.IdentifierFactory.Identifier(name),
400
- nil,
401
- nil,
402
- value,
403
- )
404
- }
405
-
406
- func llmProgrammer_config_expression(config map[string]any) *shimast.Node {
407
- if config == nil {
408
- return llmSchemaProgrammer_factory.NewIdentifier("undefined")
409
- }
410
- return nativefactories.LiteralFactory.Write(config)
411
- }
412
-
413
- func llmProgrammer_llm_schema_converter(context nativecontext.ITypiaContext) *shimast.Node {
414
- if importer, ok := context.Importer.(interface {
415
- Namespace(nativeprogrammers.ImportProgrammer_INamespace) *shimast.Node
416
- }); ok {
417
- return nativefactories.IdentifierFactory.Access(importer.Namespace(nativeprogrammers.ImportProgrammer_INamespace{
418
- File: "@typia/utils",
419
- Name: "__typia_utils",
420
- }), "LlmSchemaConverter")
421
- }
422
- return nativefactories.IdentifierFactory.Access(llmSchemaProgrammer_factory.NewIdentifier("__typia_utils"), "LlmSchemaConverter")
256
+ return llmSchemaProgrammer_convert_schema_config(schema, components, defs, nil)
257
+ }
258
+
259
+ func llmSchemaProgrammer_convert_schema_config(schema nativeiterate.JsonSchema, components *nativeiterate.OpenApi_IComponents, defs map[string]any, config map[string]any) map[string]any {
260
+ strict := llmSchemaProgrammer_strict(config)
261
+ attribute := llmSchemaProgrammer_attribute(schema)
262
+ union := []map[string]any{}
263
+
264
+ insertConstant := func(value any) {
265
+ typ := llmSchemaProgrammer_constant_type(value)
266
+ for _, elem := range union {
267
+ if elem["type"] == typ {
268
+ elem["enum"] = append(llmSchemaProgrammer_array(elem["enum"]), value)
269
+ return
270
+ }
271
+ }
272
+ union = append(union, map[string]any{
273
+ "type": typ,
274
+ "enum": []any{value},
275
+ })
276
+ }
277
+ var visitConstant func(nativeiterate.JsonSchema)
278
+ visitConstant = func(input nativeiterate.JsonSchema) {
279
+ if value, ok := input["const"]; ok {
280
+ insertConstant(value)
281
+ return
282
+ }
283
+ for _, elem := range llmSchemaProgrammer_schema_array(input["oneOf"]) {
284
+ visitConstant(elem)
285
+ }
286
+ }
287
+
288
+ var visit func(nativeiterate.JsonSchema)
289
+ visit = func(input nativeiterate.JsonSchema) {
290
+ if oneOf := llmSchemaProgrammer_schema_array(input["oneOf"]); len(oneOf) != 0 {
291
+ for _, elem := range oneOf {
292
+ visit(elem)
293
+ }
294
+ return
295
+ }
296
+ if ref, ok := input["$ref"].(string); ok {
297
+ key := llmSchemaProgrammer_ref_key(ref)
298
+ if _, exists := defs[key]; exists == false {
299
+ defs[key] = map[string]any{}
300
+ if target, found := llmSchemaProgrammer_component(components, key); found {
301
+ defs[key] = llmSchemaProgrammer_convert_schema_config(target, components, defs, config)
302
+ }
303
+ }
304
+ union = append(union, map[string]any{"$ref": "#/$defs/" + key})
305
+ return
306
+ }
307
+ if input["type"] == "object" {
308
+ properties := map[string]any{}
309
+ if raw, ok := llmSchemaProgrammer_schema_map(input["properties"]); ok {
310
+ keys := make([]string, 0, len(raw))
311
+ for key := range raw {
312
+ keys = append(keys, key)
313
+ }
314
+ sort.Strings(keys)
315
+ for _, key := range keys {
316
+ if value, ok := llmSchemaProgrammer_schema_from_any(raw[key]); ok {
317
+ properties[key] = llmSchemaProgrammer_convert_schema_config(value, components, defs, config)
318
+ }
319
+ }
320
+ }
321
+ output := llmSchemaProgrammer_clone(input)
322
+ output["properties"] = properties
323
+ if additional, ok := llmSchemaProgrammer_schema_from_any(input["additionalProperties"]); ok {
324
+ output["additionalProperties"] = llmSchemaProgrammer_convert_schema_config(additional, components, defs, config)
325
+ } else if strict {
326
+ output["additionalProperties"] = false
327
+ } else if value, ok := input["additionalProperties"]; ok {
328
+ output["additionalProperties"] = value
329
+ }
330
+ if _, ok := input["required"]; ok {
331
+ output["required"] = input["required"]
332
+ } else {
333
+ output["required"] = []any{}
334
+ }
335
+ if strict {
336
+ if description := llmSchemaProgrammer_json_descriptor_take(input); description != nil {
337
+ output["description"] = *description
338
+ } else {
339
+ delete(output, "description")
340
+ }
341
+ }
342
+ union = append(union, output)
343
+ return
344
+ }
345
+ if input["type"] == "array" {
346
+ output := llmSchemaProgrammer_clone(input)
347
+ if items, ok := llmSchemaProgrammer_schema_from_any(input["items"]); ok {
348
+ output["items"] = llmSchemaProgrammer_convert_schema_config(items, components, defs, config)
349
+ }
350
+ if strict {
351
+ output = llmSchemaProgrammer_shift_array(output)
352
+ }
353
+ union = append(union, output)
354
+ return
355
+ }
356
+ if input["type"] == "string" {
357
+ output := llmSchemaProgrammer_clone(input)
358
+ if strict {
359
+ output = llmSchemaProgrammer_shift_string(output)
360
+ }
361
+ union = append(union, output)
362
+ return
363
+ }
364
+ if input["type"] == "number" || input["type"] == "integer" {
365
+ output := llmSchemaProgrammer_clone(input)
366
+ if strict {
367
+ output = llmSchemaProgrammer_shift_numeric(output)
368
+ }
369
+ union = append(union, output)
370
+ return
371
+ }
372
+ if _, ok := input["const"]; ok {
373
+ return
374
+ }
375
+ union = append(union, llmSchemaProgrammer_clone(input))
376
+ }
377
+
378
+ visitConstant(schema)
379
+ visit(schema)
380
+
381
+ if len(union) == 0 {
382
+ output := llmSchemaProgrammer_clone(attribute)
383
+ output["type"] = nil
384
+ return output
385
+ }
386
+ if len(union) == 1 {
387
+ output := llmSchemaProgrammer_merge(attribute, union[0])
388
+ if strict && llmSchemaProgrammer_is_reference(union[0]) {
389
+ delete(output, "description")
390
+ } else if description, ok := union[0]["description"]; ok {
391
+ output["description"] = description
392
+ } else if description, ok := attribute["description"]; ok {
393
+ output["description"] = description
394
+ }
395
+ return output
396
+ }
397
+ anyOf := make([]any, 0, len(union))
398
+ for _, elem := range union {
399
+ output := llmSchemaProgrammer_clone(elem)
400
+ if strict && llmSchemaProgrammer_is_reference(elem) {
401
+ delete(output, "description")
402
+ }
403
+ anyOf = append(anyOf, output)
404
+ }
405
+ output := llmSchemaProgrammer_clone(attribute)
406
+ output["anyOf"] = anyOf
407
+ if x := llmSchemaProgrammer_discriminator(schema, union); x != nil {
408
+ output["x-discriminator"] = x
409
+ }
410
+ return output
411
+ }
412
+
413
+ func llmSchemaProgrammer_strict(config map[string]any) bool {
414
+ strict, _ := config["strict"].(bool)
415
+ return strict
416
+ }
417
+
418
+ func llmSchemaProgrammer_attribute(schema nativeiterate.JsonSchema) map[string]any {
419
+ output := map[string]any{}
420
+ for _, key := range []string{
421
+ "title",
422
+ "description",
423
+ "deprecated",
424
+ "readOnly",
425
+ "writeOnly",
426
+ "example",
427
+ "examples",
428
+ } {
429
+ if value, ok := schema[key]; ok && llmSchemaProgrammer_is_nil_like(value) == false {
430
+ output[key] = value
431
+ }
432
+ }
433
+ for key, value := range schema {
434
+ if strings.HasPrefix(key, "x-") && llmSchemaProgrammer_is_nil_like(value) == false {
435
+ output[key] = value
436
+ }
437
+ }
438
+ return output
439
+ }
440
+
441
+ func llmSchemaProgrammer_clone(input map[string]any) map[string]any {
442
+ output := map[string]any{}
443
+ for key, value := range input {
444
+ if llmSchemaProgrammer_is_nil_like(value) {
445
+ continue
446
+ }
447
+ output[key] = value
448
+ }
449
+ return output
450
+ }
451
+
452
+ func llmSchemaProgrammer_is_nil_like(value any) bool {
453
+ if value == nil {
454
+ return true
455
+ }
456
+ reflected := reflect.ValueOf(value)
457
+ switch reflected.Kind() {
458
+ case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Pointer, reflect.Slice:
459
+ return reflected.IsNil()
460
+ default:
461
+ return false
462
+ }
463
+ }
464
+
465
+ func llmSchemaProgrammer_merge(left map[string]any, right map[string]any) map[string]any {
466
+ output := llmSchemaProgrammer_clone(left)
467
+ for key, value := range right {
468
+ output[key] = value
469
+ }
470
+ return output
471
+ }
472
+
473
+ func llmSchemaProgrammer_array(value any) []any {
474
+ switch v := value.(type) {
475
+ case []any:
476
+ return append([]any{}, v...)
477
+ case []string:
478
+ output := make([]any, 0, len(v))
479
+ for _, elem := range v {
480
+ output = append(output, elem)
481
+ }
482
+ return output
483
+ case []nativeiterate.JsonSchema:
484
+ output := make([]any, 0, len(v))
485
+ for _, elem := range v {
486
+ output = append(output, elem)
487
+ }
488
+ return output
489
+ default:
490
+ return []any{}
491
+ }
492
+ }
493
+
494
+ func llmSchemaProgrammer_schema_array(value any) []nativeiterate.JsonSchema {
495
+ switch v := value.(type) {
496
+ case []nativeiterate.JsonSchema:
497
+ return append([]nativeiterate.JsonSchema{}, v...)
498
+ case []map[string]any:
499
+ output := make([]nativeiterate.JsonSchema, 0, len(v))
500
+ for _, elem := range v {
501
+ output = append(output, nativeiterate.JsonSchema(elem))
502
+ }
503
+ return output
504
+ case []any:
505
+ output := make([]nativeiterate.JsonSchema, 0, len(v))
506
+ for _, elem := range v {
507
+ if schema, ok := llmSchemaProgrammer_schema_from_any(elem); ok {
508
+ output = append(output, schema)
509
+ }
510
+ }
511
+ return output
512
+ default:
513
+ return nil
514
+ }
515
+ }
516
+
517
+ func llmSchemaProgrammer_schema_map(value any) (map[string]any, bool) {
518
+ switch v := value.(type) {
519
+ case nativeiterate.JsonSchema:
520
+ output := map[string]any{}
521
+ for key, value := range v {
522
+ output[key] = value
523
+ }
524
+ return output, true
525
+ case map[string]any:
526
+ return v, true
527
+ default:
528
+ return nil, false
529
+ }
530
+ }
531
+
532
+ func llmSchemaProgrammer_schema_from_any(value any) (nativeiterate.JsonSchema, bool) {
533
+ switch v := value.(type) {
534
+ case nativeiterate.JsonSchema:
535
+ return v, true
536
+ case map[string]any:
537
+ return nativeiterate.JsonSchema(v), true
538
+ default:
539
+ return nil, false
540
+ }
541
+ }
542
+
543
+ func llmSchemaProgrammer_constant_type(value any) string {
544
+ reflected := reflect.ValueOf(value)
545
+ if reflected.IsValid() == false {
546
+ return fmt.Sprintf("%T", value)
547
+ }
548
+ switch reflected.Kind() {
549
+ case reflect.Bool:
550
+ return "boolean"
551
+ case reflect.String:
552
+ return "string"
553
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
554
+ reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
555
+ reflect.Float32, reflect.Float64:
556
+ return "number"
557
+ default:
558
+ return fmt.Sprintf("%T", value)
559
+ }
560
+ }
561
+
562
+ func llmSchemaProgrammer_ref_key(ref string) string {
563
+ if strings.Contains(ref, "#/components/schemas/") {
564
+ return strings.Split(ref, "#/components/schemas/")[1]
565
+ }
566
+ index := strings.LastIndex(ref, "/")
567
+ if index == -1 {
568
+ return ref
569
+ }
570
+ return ref[index+1:]
571
+ }
572
+
573
+ func llmSchemaProgrammer_component(components *nativeiterate.OpenApi_IComponents, key string) (nativeiterate.JsonSchema, bool) {
574
+ if components == nil || components.Schemas == nil {
575
+ return nil, false
576
+ }
577
+ schema, ok := components.Schemas[key]
578
+ return schema, ok
579
+ }
580
+
581
+ func llmSchemaProgrammer_is_reference(schema map[string]any) bool {
582
+ _, ok := schema["$ref"].(string)
583
+ return ok
584
+ }
585
+
586
+ func llmSchemaProgrammer_is_null(schema map[string]any) bool {
587
+ return schema["type"] == "null"
588
+ }
589
+
590
+ func llmSchemaProgrammer_discriminator(schema nativeiterate.JsonSchema, union []map[string]any) map[string]any {
591
+ discriminator, ok := llmSchemaProgrammer_schema_map(schema["discriminator"])
592
+ if ok == false || len(llmSchemaProgrammer_schema_array(schema["oneOf"])) != len(union) {
593
+ return nil
594
+ }
595
+ for _, elem := range union {
596
+ if llmSchemaProgrammer_is_reference(elem) == false && llmSchemaProgrammer_is_null(elem) == false {
597
+ return nil
598
+ }
599
+ }
600
+ output := map[string]any{}
601
+ if propertyName, ok := discriminator["propertyName"].(string); ok {
602
+ output["propertyName"] = propertyName
603
+ }
604
+ if rawMapping, ok := llmSchemaProgrammer_schema_map(discriminator["mapping"]); ok {
605
+ mapping := map[string]any{}
606
+ for key, value := range rawMapping {
607
+ mapping[key] = "#/$defs/" + llmSchemaProgrammer_ref_key(fmt.Sprint(value))
608
+ }
609
+ output["mapping"] = mapping
610
+ }
611
+ if len(output) == 0 {
612
+ return nil
613
+ }
614
+ return output
615
+ }
616
+
617
+ func llmSchemaProgrammer_shift_array(schema map[string]any) map[string]any {
618
+ output := llmSchemaProgrammer_clone(schema)
619
+ tags := []string{}
620
+ if value, ok := output["minItems"]; ok {
621
+ tags = append(tags, "@minItems "+fmt.Sprint(value))
622
+ delete(output, "minItems")
623
+ }
624
+ if value, ok := output["maxItems"]; ok {
625
+ tags = append(tags, "@maxItems "+fmt.Sprint(value))
626
+ delete(output, "maxItems")
627
+ }
628
+ if value, ok := output["uniqueItems"].(bool); ok {
629
+ if value {
630
+ tags = append(tags, "@uniqueItems")
631
+ }
632
+ delete(output, "uniqueItems")
633
+ }
634
+ llmSchemaProgrammer_write_tag_with_description(output, tags)
635
+ return output
636
+ }
637
+
638
+ func llmSchemaProgrammer_shift_numeric(schema map[string]any) map[string]any {
639
+ output := llmSchemaProgrammer_clone(schema)
640
+ llmSchemaProgrammer_emend_exclusive(output)
641
+ tags := []string{}
642
+ for _, key := range []string{"minimum", "maximum", "exclusiveMinimum", "exclusiveMaximum", "multipleOf"} {
643
+ if value, ok := output[key]; ok {
644
+ tags = append(tags, "@"+key+" "+fmt.Sprint(value))
645
+ delete(output, key)
646
+ }
647
+ }
648
+ llmSchemaProgrammer_write_tag_with_description(output, tags)
649
+ delete(output, "default")
650
+ return output
651
+ }
652
+
653
+ func llmSchemaProgrammer_shift_string(schema map[string]any) map[string]any {
654
+ output := llmSchemaProgrammer_clone(schema)
655
+ tags := []string{}
656
+ for _, key := range []string{"minLength", "maxLength", "format", "pattern", "contentMediaType", "default"} {
657
+ if value, ok := output[key]; ok {
658
+ tags = append(tags, "@"+key+" "+fmt.Sprint(value))
659
+ delete(output, key)
660
+ }
661
+ }
662
+ llmSchemaProgrammer_write_tag_with_description(output, tags)
663
+ return output
664
+ }
665
+
666
+ func llmSchemaProgrammer_write_tag_with_description(schema map[string]any, tags []string) {
667
+ if len(tags) == 0 {
668
+ return
669
+ }
670
+ lines := []string{}
671
+ if description, ok := schema["description"].(string); ok && len(description) != 0 {
672
+ lines = append(lines, description, "\n")
673
+ }
674
+ lines = append(lines, tags...)
675
+ schema["description"] = strings.Join(lines, "\n")
676
+ }
677
+
678
+ func llmSchemaProgrammer_emend_exclusive(schema map[string]any) {
679
+ if exclusiveMinimum, ok := llmSchemaProgrammer_number(schema["exclusiveMinimum"]); ok {
680
+ if minimum, found := llmSchemaProgrammer_number(schema["minimum"]); found {
681
+ if minimum > exclusiveMinimum {
682
+ schema["minimum"] = minimum
683
+ delete(schema, "exclusiveMinimum")
684
+ } else {
685
+ schema["exclusiveMinimum"] = exclusiveMinimum
686
+ delete(schema, "minimum")
687
+ }
688
+ }
689
+ }
690
+ if exclusiveMaximum, ok := llmSchemaProgrammer_number(schema["exclusiveMaximum"]); ok {
691
+ if maximum, found := llmSchemaProgrammer_number(schema["maximum"]); found {
692
+ if maximum < exclusiveMaximum {
693
+ schema["maximum"] = maximum
694
+ delete(schema, "exclusiveMaximum")
695
+ } else {
696
+ schema["exclusiveMaximum"] = exclusiveMaximum
697
+ delete(schema, "maximum")
698
+ }
699
+ }
700
+ }
701
+ }
702
+
703
+ func llmSchemaProgrammer_number(value any) (float64, bool) {
704
+ reflected := reflect.ValueOf(value)
705
+ if reflected.IsValid() == false {
706
+ return 0, false
707
+ }
708
+ switch reflected.Kind() {
709
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
710
+ return float64(reflected.Int()), true
711
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
712
+ return float64(reflected.Uint()), true
713
+ case reflect.Float32, reflect.Float64:
714
+ return reflected.Convert(reflect.TypeOf(float64(0))).Float(), true
715
+ default:
716
+ return 0, false
717
+ }
718
+ }
719
+
720
+ func llmSchemaProgrammer_json_descriptor_take(schema nativeiterate.JsonSchema) *string {
721
+ parts := []string{}
722
+ if description, ok := schema["description"].(string); ok && len(description) != 0 {
723
+ parts = append(parts, description)
724
+ }
725
+ properties, ok := llmSchemaProgrammer_schema_map(schema["properties"])
726
+ if ok {
727
+ keys := make([]string, 0, len(properties))
728
+ for key := range properties {
729
+ keys = append(keys, key)
730
+ }
731
+ sort.Strings(keys)
732
+ for _, key := range keys {
733
+ value, ok := llmSchemaProgrammer_schema_from_any(properties[key])
734
+ if ok == false || llmSchemaProgrammer_is_reference(value) == false {
735
+ continue
736
+ }
737
+ description, ok := value["description"].(string)
738
+ if ok == false || len(description) == 0 {
739
+ continue
740
+ }
741
+ name := key
742
+ if llmSchemaProgrammer_is_variable_name(key) == false {
743
+ name = strconv.Quote(key)
744
+ }
745
+ parts = append(parts, "### Description of {@link "+name+"} property:\n\n"+llmSchemaProgrammer_quote_description(description))
746
+ }
747
+ }
748
+ if len(parts) == 0 {
749
+ return nil
750
+ }
751
+ output := strings.Join(parts, "\n\n")
752
+ return &output
753
+ }
754
+
755
+ func llmSchemaProgrammer_quote_description(description string) string {
756
+ lines := strings.Split(description, "\n")
757
+ for i, line := range lines {
758
+ lines[i] = "> " + line
759
+ }
760
+ return strings.Join(lines, "\n")
761
+ }
762
+
763
+ func llmSchemaProgrammer_is_variable_name(str string) bool {
764
+ if len(str) == 0 {
765
+ return false
766
+ }
767
+ for i, r := range str {
768
+ if i == 0 {
769
+ if (r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || r == '_' || r == '$' {
770
+ continue
771
+ }
772
+ return false
773
+ }
774
+ if (r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '_' || r == '$' {
775
+ continue
776
+ }
777
+ return false
778
+ }
779
+ return true
423
780
  }
424
781
 
425
782
  func llmProgrammer_internal(context nativecontext.ITypiaContext, name string) *shimast.Node {
426
- if importer, ok := context.Importer.(interface{ Internal(string) *shimast.Node }); ok {
427
- return importer.Internal(name)
428
- }
429
- return llmSchemaProgrammer_factory.NewIdentifier(name)
783
+ if importer, ok := context.Importer.(interface{ Internal(string) *shimast.Node }); ok {
784
+ return importer.Internal(name)
785
+ }
786
+ return llmSchemaProgrammer_factory.NewIdentifier(name)
430
787
  }
431
788
 
432
789
  func llmProgrammer_import_type(context nativecontext.ITypiaContext, props nativeprogrammers.ImportProgrammer_TypeProps) *shimast.Node {
433
- if importer, ok := context.Importer.(interface {
434
- Type(nativeprogrammers.ImportProgrammer_TypeProps) *shimast.Node
435
- }); ok {
436
- return importer.Type(props)
437
- }
438
- if str, ok := props.Name.(string); ok {
439
- return llmSchemaProgrammer_factory.NewTypeReferenceNode(llmSchemaProgrammer_factory.NewIdentifier(str), llmSchemaProgrammer_factory.NewNodeList(props.Arguments))
440
- }
441
- return props.Name.(*shimast.Node)
790
+ if importer, ok := context.Importer.(interface {
791
+ Type(nativeprogrammers.ImportProgrammer_TypeProps) *shimast.Node
792
+ }); ok {
793
+ return importer.Type(props)
794
+ }
795
+ if str, ok := props.Name.(string); ok {
796
+ return llmSchemaProgrammer_factory.NewTypeReferenceNode(llmSchemaProgrammer_factory.NewIdentifier(str), llmSchemaProgrammer_factory.NewNodeList(props.Arguments))
797
+ }
798
+ return props.Name.(*shimast.Node)
442
799
  }
443
800
 
444
801
  func llmProgrammer_type_reference(name string) *shimast.Node {
445
- if name == "" {
446
- name = "unknown"
447
- }
448
- return llmSchemaProgrammer_factory.NewTypeReferenceNode(llmSchemaProgrammer_factory.NewIdentifier(name), nil)
802
+ if name == "" {
803
+ name = "unknown"
804
+ }
805
+ return llmSchemaProgrammer_factory.NewTypeReferenceNode(llmSchemaProgrammer_factory.NewIdentifier(name), nil)
449
806
  }
450
807
 
451
808
  func llmProgrammer_method_text(modulo *shimast.Node) string {
452
- if modulo == nil {
453
- return ""
454
- }
455
- return modulo.Text()
809
+ if modulo == nil {
810
+ return ""
811
+ }
812
+ return modulo.Text()
456
813
  }
457
814
 
458
815
  func llmProgrammer_concat_description(summary *string, description *string) *string {
459
- if summary == nil || len(*summary) == 0 || description == nil || len(*description) == 0 {
460
- if summary != nil && len(*summary) != 0 {
461
- return summary
462
- }
463
- return description
464
- }
465
- head := *summary
466
- if strings.HasSuffix(head, ".") {
467
- head = head[:len(head)-1]
468
- }
469
- if strings.HasPrefix(*description, head) {
470
- return description
471
- }
472
- out := head + ".\n\n" + *description
473
- return &out
816
+ if summary == nil || len(*summary) == 0 || description == nil || len(*description) == 0 {
817
+ if summary != nil && len(*summary) != 0 {
818
+ return summary
819
+ }
820
+ return description
821
+ }
822
+ head := *summary
823
+ if strings.HasSuffix(head, ".") {
824
+ head = head[:len(head)-1]
825
+ }
826
+ if strings.HasPrefix(*description, head) {
827
+ return description
828
+ }
829
+ out := head + ".\n\n" + *description
830
+ return &out
474
831
  }