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,290 +1,457 @@
1
1
  package main
2
2
 
3
3
  import (
4
- "bytes"
5
- "flag"
6
- "fmt"
7
- "os"
8
- "path/filepath"
9
- "regexp"
10
- "sort"
11
- "strings"
4
+ "bytes"
5
+ "encoding/json"
6
+ "flag"
7
+ "fmt"
8
+ "os"
9
+ "path/filepath"
10
+ "regexp"
11
+ "sort"
12
+ "strings"
12
13
 
13
- shimcompiler "github.com/microsoft/typescript-go/shim/compiler"
14
- "github.com/samchon/ttsc/packages/ttsc/driver"
15
- typiaadapter "github.com/samchon/typia/packages/typia/native/adapter"
14
+ shimcompiler "github.com/microsoft/typescript-go/shim/compiler"
15
+ "github.com/samchon/ttsc/packages/ttsc/driver"
16
+ typiaadapter "github.com/samchon/typia/packages/typia/native/adapter"
16
17
  )
17
18
 
18
19
  func runTransform(args []string) int {
19
- fs := flag.NewFlagSet("transform", flag.ContinueOnError)
20
- fs.SetOutput(stderr)
21
- file := fs.String("file", "", "absolute or cwd-relative path of the .ts file to transform")
22
- tsconfigPath := fs.String("tsconfig", "tsconfig.json", "tsconfig.json owning --file")
23
- cwdOverride := fs.String("cwd", "", "override the working directory")
24
- out := fs.String("out", "", "write output JS to PATH")
25
- rewriteMode := fs.String("rewrite-mode", "typia", "native rewrite backend id")
26
- output := fs.String("output", defaultTransformOutput(), "transform output kind: js or ts")
27
- _ = fs.String("plugins-json", "", "ordered ttsc plugin payload")
28
- if err := fs.Parse(args); err != nil {
29
- return 2
30
- }
31
- if *file == "" {
32
- fmt.Fprintln(stderr, "ttsc-typia transform: --file is required")
33
- return 2
34
- }
35
- if *rewriteMode != "none" && *rewriteMode != "typia" {
36
- fmt.Fprintf(stderr, "ttsc-typia transform: unknown --rewrite-mode value %q\n", *rewriteMode)
37
- return 2
38
- }
39
- if *output != "js" && *output != "ts" {
40
- fmt.Fprintf(stderr, "ttsc-typia transform: unknown --output value %q\n", *output)
41
- return 2
42
- }
43
- cwd := *cwdOverride
44
- if cwd == "" {
45
- var err error
46
- cwd, err = os.Getwd()
47
- if err != nil {
48
- fmt.Fprintf(stderr, "ttsc-typia transform: cwd: %v\n", err)
49
- return 2
50
- }
51
- }
20
+ fs := flag.NewFlagSet("transform", flag.ContinueOnError)
21
+ fs.SetOutput(stderr)
22
+ file := fs.String("file", "", "absolute or cwd-relative path of the .ts file to transform")
23
+ tsconfigPath := fs.String("tsconfig", "tsconfig.json", "tsconfig.json owning --file")
24
+ cwdOverride := fs.String("cwd", "", "override the working directory")
25
+ out := fs.String("out", "", "write output JS to PATH")
26
+ rewriteMode := fs.String("rewrite-mode", "typia", "native rewrite backend id")
27
+ output := fs.String("output", defaultTransformOutput(), "transform output kind: js or ts")
28
+ _ = fs.String("plugins-json", "", "ordered ttsc plugin payload")
29
+ if err := fs.Parse(args); err != nil {
30
+ return 2
31
+ }
32
+ if *rewriteMode != "none" && *rewriteMode != "typia" {
33
+ fmt.Fprintf(stderr, "ttsc-typia transform: unknown --rewrite-mode value %q\n", *rewriteMode)
34
+ return 2
35
+ }
36
+ if *output != "js" && *output != "ts" {
37
+ fmt.Fprintf(stderr, "ttsc-typia transform: unknown --output value %q\n", *output)
38
+ return 2
39
+ }
40
+ cwd := *cwdOverride
41
+ if cwd == "" {
42
+ var err error
43
+ cwd, err = os.Getwd()
44
+ if err != nil {
45
+ fmt.Fprintf(stderr, "ttsc-typia transform: cwd: %v\n", err)
46
+ return 2
47
+ }
48
+ }
52
49
 
53
- prog, diags, err := driver.LoadProgram(cwd, *tsconfigPath, driver.LoadProgramOptions{
54
- ForceEmit: true,
55
- })
56
- if err != nil {
57
- fmt.Fprintf(stderr, "ttsc-typia transform: %v\n", err)
58
- return 2
59
- }
60
- if len(diags) > 0 {
61
- driver.WritePrettyDiagnostics(stderr, diags, cwd)
62
- return 2
63
- }
64
- defer prog.Close()
50
+ prog, diags, err := driver.LoadProgram(cwd, *tsconfigPath, driver.LoadProgramOptions{
51
+ ForceEmit: true,
52
+ })
53
+ if err != nil {
54
+ fmt.Fprintf(stderr, "ttsc-typia transform: %v\n", err)
55
+ return 2
56
+ }
57
+ if len(diags) > 0 {
58
+ driver.WritePrettyDiagnostics(stderr, diags, cwd)
59
+ return 2
60
+ }
61
+ defer prog.Close()
65
62
 
66
- absFile := *file
67
- if !filepath.IsAbs(absFile) {
68
- absFile = filepath.Join(cwd, absFile)
69
- }
70
- absFile = filepath.ToSlash(absFile)
63
+ if *file == "" {
64
+ if *out != "" {
65
+ fmt.Fprintln(stderr, "ttsc-typia transform: --out requires --file")
66
+ return 2
67
+ }
68
+ return runTransformProject(prog, cwd, *rewriteMode, *tsconfigPath)
69
+ }
71
70
 
72
- rewrites := driver.NewRewriteSet()
73
- if *rewriteMode == "typia" {
74
- if _, _, diagnostics := collectTypiaRewrites(prog, cwd, true, true, absFile, rewrites, readTypiaPluginOptions(cwd, *tsconfigPath)); len(diagnostics) > 0 {
75
- writeTypiaTransformDiagnostics(stderr, diagnostics, cwd)
76
- return 3
77
- }
78
- }
71
+ absFile := *file
72
+ if !filepath.IsAbs(absFile) {
73
+ absFile = filepath.Join(cwd, absFile)
74
+ }
75
+ absFile = filepath.ToSlash(absFile)
79
76
 
80
- target := prog.SourceFile(absFile)
81
- if target == nil {
82
- fmt.Fprintf(stderr, "ttsc-typia transform: source file is not in program: %s\n", absFile)
83
- return 2
84
- }
85
- if *output == "ts" {
86
- return runTransformTypeScript(prog, cwd, absFile, target, *rewriteMode, *tsconfigPath, *out)
87
- }
77
+ rewrites := driver.NewRewriteSet()
78
+ if *rewriteMode == "typia" {
79
+ if _, _, diagnostics := collectTypiaRewrites(prog, cwd, true, true, absFile, rewrites, readTypiaPluginOptions(cwd, *tsconfigPath)); len(diagnostics) > 0 {
80
+ writeTypiaTransformDiagnostics(stderr, diagnostics, cwd)
81
+ return 3
82
+ }
83
+ }
88
84
 
89
- var captured []byte
90
- capture := func(name, text string, data *shimcompiler.WriteFileData) error {
91
- rel := filepath.ToSlash(name)
92
- if !strings.HasSuffix(rel, ".js") {
93
- return nil
94
- }
95
- captured = []byte(typiaadapter.CleanupTransformedText(text))
96
- return nil
97
- }
98
- _, eDiags, err := prog.EmitFile(rewrites, target, capture)
99
- if err != nil {
100
- fmt.Fprintf(stderr, "ttsc-typia transform: emit: %v\n", err)
101
- return 3
102
- }
103
- for _, d := range eDiags {
104
- fmt.Fprintln(stderr, " -", d.String())
105
- }
106
- if captured == nil {
107
- fmt.Fprintf(stderr, "ttsc-typia transform: no output produced for %s\n", absFile)
108
- return 3
109
- }
110
- if *out == "" {
111
- if _, werr := bytes.NewReader(captured).WriteTo(stdout); werr != nil {
112
- fmt.Fprintf(stderr, "ttsc-typia transform: write stdout: %v\n", werr)
113
- return 3
114
- }
115
- return 0
116
- }
117
- if dir := filepath.Dir(*out); dir != "" {
118
- if err := os.MkdirAll(dir, 0o755); err != nil {
119
- fmt.Fprintf(stderr, "ttsc-typia transform: mkdir: %v\n", err)
120
- return 3
121
- }
122
- }
123
- if err := os.WriteFile(*out, captured, 0o644); err != nil {
124
- fmt.Fprintf(stderr, "ttsc-typia transform: write %s: %v\n", *out, err)
125
- return 3
126
- }
127
- return 0
85
+ target := prog.SourceFile(absFile)
86
+ if target == nil {
87
+ fmt.Fprintf(stderr, "ttsc-typia transform: source file is not in program: %s\n", absFile)
88
+ return 2
89
+ }
90
+ if *output == "ts" {
91
+ return runTransformTypeScript(prog, cwd, absFile, target, *rewriteMode, *tsconfigPath, *out)
92
+ }
93
+
94
+ var captured []byte
95
+ capture := func(name, text string, data *shimcompiler.WriteFileData) error {
96
+ rel := filepath.ToSlash(name)
97
+ if !strings.HasSuffix(rel, ".js") {
98
+ return nil
99
+ }
100
+ captured = []byte(typiaadapter.CleanupTransformedText(text))
101
+ return nil
102
+ }
103
+ _, eDiags, err := prog.EmitFile(rewrites, target, capture)
104
+ if err != nil {
105
+ fmt.Fprintf(stderr, "ttsc-typia transform: emit: %v\n", err)
106
+ return 3
107
+ }
108
+ for _, d := range eDiags {
109
+ fmt.Fprintln(stderr, " -", d.String())
110
+ }
111
+ if captured == nil {
112
+ fmt.Fprintf(stderr, "ttsc-typia transform: no output produced for %s\n", absFile)
113
+ return 3
114
+ }
115
+ if *out == "" {
116
+ if _, werr := bytes.NewReader(captured).WriteTo(stdout); werr != nil {
117
+ fmt.Fprintf(stderr, "ttsc-typia transform: write stdout: %v\n", werr)
118
+ return 3
119
+ }
120
+ return 0
121
+ }
122
+ if dir := filepath.Dir(*out); dir != "" {
123
+ if err := os.MkdirAll(dir, 0o755); err != nil {
124
+ fmt.Fprintf(stderr, "ttsc-typia transform: mkdir: %v\n", err)
125
+ return 3
126
+ }
127
+ }
128
+ if err := os.WriteFile(*out, captured, 0o644); err != nil {
129
+ fmt.Fprintf(stderr, "ttsc-typia transform: write %s: %v\n", *out, err)
130
+ return 3
131
+ }
132
+ return 0
128
133
  }
129
134
 
130
135
  func defaultTransformOutput() string {
131
- if os.Getenv("TYPIA_TTSC_TRANSFORM_OUTPUT") == "ts" {
132
- return "ts"
133
- }
134
- return "js"
136
+ if os.Getenv("TYPIA_TTSC_TRANSFORM_OUTPUT") == "ts" {
137
+ return "ts"
138
+ }
139
+ return "js"
140
+ }
141
+
142
+ type transformProjectOutput struct {
143
+ Diagnostics []transformCompilerDiagnostic `json:"diagnostics,omitempty"`
144
+ TypeScript map[string]string `json:"typescript"`
145
+ }
146
+
147
+ type transformCompilerDiagnostic struct {
148
+ File *string `json:"file"`
149
+ Category string `json:"category"`
150
+ Code string `json:"code"`
151
+ Line int `json:"line,omitempty"`
152
+ Character int `json:"character,omitempty"`
153
+ MessageText string `json:"messageText"`
135
154
  }
136
155
 
137
156
  type transformSourceRewrite struct {
138
- start int
139
- end int
140
- replacement string
157
+ start int
158
+ end int
159
+ replacement string
160
+ }
161
+
162
+ func runTransformProject(
163
+ prog *driver.Program,
164
+ cwd string,
165
+ rewriteMode string,
166
+ tsconfigPath string,
167
+ ) int {
168
+ rewrites := map[string][]transformSourceRewrite{}
169
+ diagnostics := []transformCompilerDiagnostic{}
170
+ if rewriteMode == "typia" {
171
+ grouped, diags := collectTypiaSourceRewriteMap(
172
+ prog,
173
+ readTypiaPluginOptions(cwd, tsconfigPath),
174
+ )
175
+ rewrites = grouped
176
+ for _, diag := range diags {
177
+ diagnostics = append(diagnostics, transformDiagnosticToCompilerDiagnostic(diag))
178
+ }
179
+ }
180
+
181
+ output := transformProjectOutput{
182
+ Diagnostics: diagnostics,
183
+ TypeScript: map[string]string{},
184
+ }
185
+ for _, file := range prog.SourceFiles() {
186
+ filename := filepath.ToSlash(file.FileName())
187
+ source, ok := sourceFileText(file)
188
+ if !ok {
189
+ output.Diagnostics = append(
190
+ output.Diagnostics,
191
+ newTransformCompilerDiagnostic(
192
+ filename,
193
+ 0,
194
+ 0,
195
+ "typia.transform",
196
+ "source text is unavailable",
197
+ ),
198
+ )
199
+ continue
200
+ }
201
+ transformed, err := applySourceRewrites(source, rewrites[filename])
202
+ if err != nil {
203
+ output.Diagnostics = append(
204
+ output.Diagnostics,
205
+ newTransformCompilerDiagnostic(
206
+ filename,
207
+ 0,
208
+ 0,
209
+ "typia.transform",
210
+ err.Error(),
211
+ ),
212
+ )
213
+ continue
214
+ }
215
+ output.TypeScript[sourceFileKey(cwd, filename)] = cleanupTypeScriptTransformText(transformed)
216
+ }
217
+
218
+ if err := json.NewEncoder(stdout).Encode(output); err != nil {
219
+ fmt.Fprintf(stderr, "ttsc-typia transform: encode output: %v\n", err)
220
+ return 3
221
+ }
222
+ if len(output.Diagnostics) > 0 {
223
+ return 3
224
+ }
225
+ return 0
141
226
  }
142
227
 
143
228
  func runTransformTypeScript(
144
- prog *driver.Program,
145
- cwd string,
146
- absFile string,
147
- target any,
148
- rewriteMode string,
149
- tsconfigPath string,
150
- out string,
229
+ prog *driver.Program,
230
+ cwd string,
231
+ absFile string,
232
+ target any,
233
+ rewriteMode string,
234
+ tsconfigPath string,
235
+ out string,
151
236
  ) int {
152
- source, ok := sourceFileText(target)
153
- if !ok {
154
- fmt.Fprintf(stderr, "ttsc-typia transform: source text is unavailable for %s\n", absFile)
155
- return 3
156
- }
157
- rewrites := []transformSourceRewrite{}
158
- if rewriteMode == "typia" {
159
- var diagnostics []typiaTransformDiagnostic
160
- rewrites, diagnostics = collectTypiaSourceRewrites(
161
- prog,
162
- cwd,
163
- absFile,
164
- readTypiaPluginOptions(cwd, tsconfigPath),
165
- )
166
- if len(diagnostics) > 0 {
167
- writeTypiaTransformDiagnostics(stderr, diagnostics, cwd)
168
- return 3
169
- }
170
- }
171
- transformed, err := applySourceRewrites(source, rewrites)
172
- if err != nil {
173
- fmt.Fprintf(stderr, "ttsc-typia transform: source rewrite: %v\n", err)
174
- return 3
175
- }
176
- transformed = cleanupTypeScriptTransformText(transformed)
177
- if out == "" {
178
- if _, werr := bytes.NewBufferString(transformed).WriteTo(stdout); werr != nil {
179
- fmt.Fprintf(stderr, "ttsc-typia transform: write stdout: %v\n", werr)
180
- return 3
181
- }
182
- return 0
183
- }
184
- if dir := filepath.Dir(out); dir != "" {
185
- if err := os.MkdirAll(dir, 0o755); err != nil {
186
- fmt.Fprintf(stderr, "ttsc-typia transform: mkdir: %v\n", err)
187
- return 3
188
- }
189
- }
190
- if err := os.WriteFile(out, []byte(transformed), 0o644); err != nil {
191
- fmt.Fprintf(stderr, "ttsc-typia transform: write %s: %v\n", out, err)
192
- return 3
193
- }
194
- return 0
237
+ source, ok := sourceFileText(target)
238
+ if !ok {
239
+ fmt.Fprintf(stderr, "ttsc-typia transform: source text is unavailable for %s\n", absFile)
240
+ return 3
241
+ }
242
+ rewrites := []transformSourceRewrite{}
243
+ if rewriteMode == "typia" {
244
+ var diagnostics []typiaTransformDiagnostic
245
+ rewrites, diagnostics = collectTypiaSourceRewrites(
246
+ prog,
247
+ cwd,
248
+ absFile,
249
+ readTypiaPluginOptions(cwd, tsconfigPath),
250
+ )
251
+ if len(diagnostics) > 0 {
252
+ writeTypiaTransformDiagnostics(stderr, diagnostics, cwd)
253
+ return 3
254
+ }
255
+ }
256
+ transformed, err := applySourceRewrites(source, rewrites)
257
+ if err != nil {
258
+ fmt.Fprintf(stderr, "ttsc-typia transform: source rewrite: %v\n", err)
259
+ return 3
260
+ }
261
+ transformed = cleanupTypeScriptTransformText(transformed)
262
+ if out == "" {
263
+ if _, werr := bytes.NewBufferString(transformed).WriteTo(stdout); werr != nil {
264
+ fmt.Fprintf(stderr, "ttsc-typia transform: write stdout: %v\n", werr)
265
+ return 3
266
+ }
267
+ return 0
268
+ }
269
+ if dir := filepath.Dir(out); dir != "" {
270
+ if err := os.MkdirAll(dir, 0o755); err != nil {
271
+ fmt.Fprintf(stderr, "ttsc-typia transform: mkdir: %v\n", err)
272
+ return 3
273
+ }
274
+ }
275
+ if err := os.WriteFile(out, []byte(transformed), 0o644); err != nil {
276
+ fmt.Fprintf(stderr, "ttsc-typia transform: write %s: %v\n", out, err)
277
+ return 3
278
+ }
279
+ return 0
195
280
  }
196
281
 
197
282
  func sourceFileText(target any) (string, bool) {
198
- type sourceText interface {
199
- Text() string
200
- }
201
- if file, ok := target.(sourceText); ok {
202
- return file.Text(), true
203
- }
204
- return "", false
283
+ type sourceText interface {
284
+ Text() string
285
+ }
286
+ if file, ok := target.(sourceText); ok {
287
+ return file.Text(), true
288
+ }
289
+ return "", false
205
290
  }
206
291
 
207
292
  func collectTypiaSourceRewrites(
208
- prog *driver.Program,
209
- cwd string,
210
- onlyFile string,
211
- pluginOptions typiaadapter.PluginOptions,
293
+ prog *driver.Program,
294
+ cwd string,
295
+ onlyFile string,
296
+ pluginOptions typiaadapter.PluginOptions,
212
297
  ) ([]transformSourceRewrite, []typiaTransformDiagnostic) {
213
- sites := typiaadapter.CollectCallSites(prog.SourceFiles(), prog.Checker)
214
- rewrites := []transformSourceRewrite{}
215
- diagnostics := []typiaTransformDiagnostic{}
216
- for _, site := range sites {
217
- if filepath.ToSlash(site.FilePath) != filepath.ToSlash(onlyFile) {
218
- continue
219
- }
220
- if reason := typiaadapter.UnsupportedReason(site); reason != "" {
221
- diagnostics = append(diagnostics, newTypiaTransformDiagnostic(site, reason))
222
- continue
223
- }
224
- expr, handled, err := typiaadapter.EmitCallWithOptionsPreservingTypes(prog, site, pluginOptions)
225
- if !handled {
226
- diagnostics = append(diagnostics, newTypiaTransformDiagnostic(site, "method not covered"))
227
- continue
228
- }
229
- if err != nil {
230
- diagnostics = append(diagnostics, newTypiaTransformDiagnostic(site, err.Error()))
231
- continue
232
- }
233
- node := site.Call.AsNode()
234
- rewrites = append(rewrites, transformSourceRewrite{
235
- start: node.Pos(),
236
- end: node.End(),
237
- replacement: expr,
238
- })
239
- _ = cwd
240
- }
241
- return rewrites, diagnostics
298
+ sites := typiaadapter.CollectCallSites(prog.SourceFiles(), prog.Checker)
299
+ rewrites := []transformSourceRewrite{}
300
+ diagnostics := []typiaTransformDiagnostic{}
301
+ for _, site := range sites {
302
+ if filepath.ToSlash(site.FilePath) != filepath.ToSlash(onlyFile) {
303
+ continue
304
+ }
305
+ if reason := typiaadapter.UnsupportedReason(site); reason != "" {
306
+ diagnostics = append(diagnostics, newTypiaTransformDiagnostic(site, reason))
307
+ continue
308
+ }
309
+ expr, handled, err := typiaadapter.EmitCallWithOptionsPreservingTypes(prog, site, pluginOptions)
310
+ if !handled {
311
+ diagnostics = append(diagnostics, newTypiaTransformDiagnostic(site, "method not covered"))
312
+ continue
313
+ }
314
+ if err != nil {
315
+ diagnostics = append(diagnostics, newTypiaTransformDiagnostic(site, err.Error()))
316
+ continue
317
+ }
318
+ node := site.Call.AsNode()
319
+ rewrites = append(rewrites, transformSourceRewrite{
320
+ start: node.Pos(),
321
+ end: node.End(),
322
+ replacement: expr,
323
+ })
324
+ _ = cwd
325
+ }
326
+ return rewrites, diagnostics
327
+ }
328
+
329
+ func collectTypiaSourceRewriteMap(
330
+ prog *driver.Program,
331
+ pluginOptions typiaadapter.PluginOptions,
332
+ ) (map[string][]transformSourceRewrite, []typiaTransformDiagnostic) {
333
+ sites := typiaadapter.CollectCallSites(prog.SourceFiles(), prog.Checker)
334
+ rewrites := map[string][]transformSourceRewrite{}
335
+ diagnostics := []typiaTransformDiagnostic{}
336
+ for _, site := range sites {
337
+ file := filepath.ToSlash(site.FilePath)
338
+ if reason := typiaadapter.UnsupportedReason(site); reason != "" {
339
+ diagnostics = append(diagnostics, newTypiaTransformDiagnostic(site, reason))
340
+ continue
341
+ }
342
+ expr, handled, err := typiaadapter.EmitCallWithOptionsPreservingTypes(prog, site, pluginOptions)
343
+ if !handled {
344
+ diagnostics = append(diagnostics, newTypiaTransformDiagnostic(site, "method not covered"))
345
+ continue
346
+ }
347
+ if err != nil {
348
+ diagnostics = append(diagnostics, newTypiaTransformDiagnostic(site, err.Error()))
349
+ continue
350
+ }
351
+ node := site.Call.AsNode()
352
+ rewrites[file] = append(rewrites[file], transformSourceRewrite{
353
+ start: node.Pos(),
354
+ end: node.End(),
355
+ replacement: expr,
356
+ })
357
+ }
358
+ return rewrites, diagnostics
242
359
  }
243
360
 
244
361
  func applySourceRewrites(source string, rewrites []transformSourceRewrite) (string, error) {
245
- sort.SliceStable(rewrites, func(i, j int) bool {
246
- return rewrites[i].start > rewrites[j].start
247
- })
248
- output := source
249
- for _, rewrite := range rewrites {
250
- if rewrite.start < 0 || rewrite.end < rewrite.start || rewrite.end > len(output) {
251
- return "", fmt.Errorf("invalid rewrite range [%d,%d)", rewrite.start, rewrite.end)
252
- }
253
- output = output[:rewrite.start] + rewrite.replacement + output[rewrite.end:]
254
- }
255
- return output, nil
362
+ sort.SliceStable(rewrites, func(i, j int) bool {
363
+ return rewrites[i].start > rewrites[j].start
364
+ })
365
+ output := source
366
+ for _, rewrite := range rewrites {
367
+ if rewrite.start < 0 || rewrite.end < rewrite.start || rewrite.end > len(output) {
368
+ return "", fmt.Errorf("invalid rewrite range [%d,%d)", rewrite.start, rewrite.end)
369
+ }
370
+ output = output[:rewrite.start] + rewrite.replacement + output[rewrite.end:]
371
+ }
372
+ return output, nil
256
373
  }
257
374
 
258
375
  func cleanupTypeScriptTransformText(text string) string {
259
- text = typiaadapter.CleanupTransformedText(text)
260
- text = regexp.MustCompile(`(?m)^import type \{([^{}\n]+)\} from`).ReplaceAllStringFunc(text, func(line string) string {
261
- return regexp.MustCompile(`^import type \{\s*([^{}\n]+?)\s*\} from`).ReplaceAllString(line, "import type { $1 } from")
262
- })
263
- text = regexp.MustCompile(`(?m)(^import [^\n]+;\n)\n+(const |let |var |export )`).ReplaceAllString(text, "$1$2")
264
- text = strings.ReplaceAll(text, "=(() =>", "= (() =>")
265
- text = strings.ReplaceAll(text, ": (any) =>", ": any =>")
266
- text = strings.ReplaceAll(text, ": (boolean) =>", ": boolean =>")
267
- text = regexp.MustCompile(`input is \(([A-Za-z_$][A-Za-z0-9_$.]*)\)`).ReplaceAllString(text, "input is $1")
268
- text = strings.ReplaceAll(text, "return (success ? ", "return success ? ")
269
- text = strings.ReplaceAll(text, "}) as any;", "} as any;")
270
- text = strings.ReplaceAll(text, "(() => {\n const ", "(() => { const ")
271
- text = strings.ReplaceAll(text, "(() => {\n let ", "(() => { let ")
272
- text = strings.ReplaceAll(text, "(() => {\n return ", "(() => { return ")
273
- text = strings.ReplaceAll(text, ";\n const ", "; const ")
274
- text = strings.ReplaceAll(text, ";\n let ", "; let ")
275
- text = strings.ReplaceAll(text, ";\n return ", "; return ")
276
- text = strings.ReplaceAll(text, "\n };\n})()", "\n}; })()")
277
- text = strings.ReplaceAll(text, "\n });\n})()", "\n}); })()")
278
- text = strings.ReplaceAll(text, "\n }); let ", "\n}); let ")
279
- text = strings.ReplaceAll(text, ";\n})()", "; })()")
280
- text = strings.ReplaceAll(text, "\n ", "\n ")
281
- text = regexp.MustCompile(`\n\n([A-Za-z_$][A-Za-z0-9_$]*\([^;\n]*\);?)`).ReplaceAllString(text, "\n$1")
282
- trimmed := strings.TrimRight(text, " \t\r\n")
283
- if strings.HasSuffix(trimmed, ")") && !strings.HasSuffix(trimmed, ";") {
284
- return trimmed + ";\n"
285
- }
286
- if text != "" && !strings.HasSuffix(text, "\n") {
287
- return text + "\n"
288
- }
289
- return text
376
+ text = typiaadapter.CleanupTransformedText(text)
377
+ text = normalizeParenthesizedTypeAnnotations(text)
378
+ text = regexp.MustCompile(`(?m)^import type \{([^{}\n]+)\} from`).ReplaceAllStringFunc(text, func(line string) string {
379
+ return regexp.MustCompile(`^import type \{\s*([^{}\n]+?)\s*\} from`).ReplaceAllString(line, "import type { $1 } from")
380
+ })
381
+ text = regexp.MustCompile(`(?m)(^import [^\n]+;\n)\n+(const |let |var |export )`).ReplaceAllString(text, "$1$2")
382
+ text = strings.ReplaceAll(text, "=(() =>", "= (() =>")
383
+ text = strings.ReplaceAll(text, ": (any) =>", ": any =>")
384
+ text = strings.ReplaceAll(text, ": (boolean) =>", ": boolean =>")
385
+ text = regexp.MustCompile(`input is \(([A-Za-z_$][A-Za-z0-9_$.]*)\)`).ReplaceAllString(text, "input is $1")
386
+ text = strings.ReplaceAll(text, "return (success ? ", "return success ? ")
387
+ text = strings.ReplaceAll(text, "}) as any;", "} as any;")
388
+ text = strings.ReplaceAll(text, "(() => {\n const ", "(() => { const ")
389
+ text = strings.ReplaceAll(text, "(() => {\n let ", "(() => { let ")
390
+ text = strings.ReplaceAll(text, "(() => {\n return ", "(() => { return ")
391
+ text = strings.ReplaceAll(text, ";\n const ", "; const ")
392
+ text = strings.ReplaceAll(text, ";\n let ", "; let ")
393
+ text = strings.ReplaceAll(text, ";\n return ", "; return ")
394
+ text = strings.ReplaceAll(text, "\n };\n})()", "\n}; })()")
395
+ text = strings.ReplaceAll(text, "\n });\n})()", "\n}); })()")
396
+ text = strings.ReplaceAll(text, "\n }); let ", "\n}); let ")
397
+ text = strings.ReplaceAll(text, ";\n})()", "; })()")
398
+ text = strings.ReplaceAll(text, "\n ", "\n ")
399
+ text = regexp.MustCompile(`\n\n([A-Za-z_$][A-Za-z0-9_$]*\([^;\n]*\);?)`).ReplaceAllString(text, "\n$1")
400
+ trimmed := strings.TrimRight(text, " \t\r\n")
401
+ if strings.HasSuffix(trimmed, ")") && !strings.HasSuffix(trimmed, ";") {
402
+ return trimmed + ";\n"
403
+ }
404
+ if text != "" && !strings.HasSuffix(text, "\n") {
405
+ return text + "\n"
406
+ }
407
+ return text
408
+ }
409
+
410
+ func normalizeParenthesizedTypeAnnotations(text string) string {
411
+ typeAtom := `([A-Za-z_$][A-Za-z0-9_$.]*(<[^()\n;{}]*>)?)`
412
+ text = regexp.MustCompile(`: \(`+typeAtom+`\)(\s*=>)`).ReplaceAllString(text, ": $1$3")
413
+ text = regexp.MustCompile(`\| \((null|undefined)\)`).ReplaceAllString(text, "| $1")
414
+ return text
415
+ }
416
+
417
+ func sourceFileKey(cwd string, file string) string {
418
+ rel, err := filepath.Rel(cwd, filepath.FromSlash(file))
419
+ if err != nil || rel == ".." || strings.HasPrefix(rel, ".."+string(os.PathSeparator)) {
420
+ return filepath.ToSlash(file)
421
+ }
422
+ return filepath.ToSlash(rel)
423
+ }
424
+
425
+ func transformDiagnosticToCompilerDiagnostic(
426
+ diag typiaTransformDiagnostic,
427
+ ) transformCompilerDiagnostic {
428
+ return newTransformCompilerDiagnostic(
429
+ diag.File,
430
+ diag.Line,
431
+ diag.Column,
432
+ diag.Code,
433
+ diag.Message,
434
+ )
435
+ }
436
+
437
+ func newTransformCompilerDiagnostic(
438
+ file string,
439
+ line int,
440
+ character int,
441
+ code string,
442
+ message string,
443
+ ) transformCompilerDiagnostic {
444
+ var ptr *string
445
+ if file != "" {
446
+ normalized := filepath.ToSlash(file)
447
+ ptr = &normalized
448
+ }
449
+ return transformCompilerDiagnostic{
450
+ File: ptr,
451
+ Category: "error",
452
+ Code: code,
453
+ Line: line,
454
+ Character: character,
455
+ MessageText: message,
456
+ }
290
457
  }