typia 13.0.0-dev.20260501 → 13.0.0-dev.20260506

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 (371) hide show
  1. package/lib/executable/generate/ttsc.js.map +1 -1
  2. package/lib/executable/setup/PluginConfigurator.js.map +1 -1
  3. package/lib/internal/_randomInteger.js.map +1 -1
  4. package/lib/internal/_validateReport.js.map +1 -1
  5. package/lib/transform.js.map +1 -1
  6. package/native/adapter/adapter.go +128 -128
  7. package/native/adapter/cleanup.go +155 -155
  8. package/native/adapter/imports.go +80 -80
  9. package/native/adapter/visit.go +142 -142
  10. package/native/cmd/ttsc-typia/build.go +223 -223
  11. package/native/cmd/ttsc-typia/main.go +57 -57
  12. package/native/cmd/ttsc-typia/transform.go +393 -385
  13. package/native/cmd/ttsc-typia/transform_test.go +40 -0
  14. package/native/core/context/IProgrammerProps.go +7 -7
  15. package/native/core/context/ITransformOptions.go +5 -5
  16. package/native/core/context/ITypiaContext.go +13 -13
  17. package/native/core/context/TransformerError.go +81 -81
  18. package/native/core/factories/CommentFactory.go +9 -9
  19. package/native/core/factories/ExpressionFactory.go +254 -254
  20. package/native/core/factories/FormatCheatSheet.go +23 -23
  21. package/native/core/factories/IdentifierFactory.go +130 -130
  22. package/native/core/factories/JsonMetadataFactory.go +129 -129
  23. package/native/core/factories/LiteralFactory.go +192 -192
  24. package/native/core/factories/MetadataCommentTagFactory.go +379 -379
  25. package/native/core/factories/MetadataFactory.go +462 -462
  26. package/native/core/factories/MetadataTypeTagFactory.go +498 -498
  27. package/native/core/factories/MetadataTypeTagSchemaFactory.go +102 -102
  28. package/native/core/factories/NumericRangeFactory.go +84 -84
  29. package/native/core/factories/ProtobufFactory.go +933 -933
  30. package/native/core/factories/StatementFactory.go +72 -72
  31. package/native/core/factories/TemplateFactory.go +57 -57
  32. package/native/core/factories/TypeFactory.go +125 -125
  33. package/native/core/factories/ValueFactory.go +12 -12
  34. package/native/core/factories/internal/metadata/IMetadataIteratorProps.go +35 -35
  35. package/native/core/factories/internal/metadata/MetadataHelper.go +176 -176
  36. package/native/core/factories/internal/metadata/emend_metadata_atomics.go +69 -69
  37. package/native/core/factories/internal/metadata/emplace_metadata_alias.go +27 -27
  38. package/native/core/factories/internal/metadata/emplace_metadata_array_type.go +33 -33
  39. package/native/core/factories/internal/metadata/emplace_metadata_object.go +209 -209
  40. package/native/core/factories/internal/metadata/emplace_metadata_tuple.go +50 -50
  41. package/native/core/factories/internal/metadata/explore_metadata.go +29 -29
  42. package/native/core/factories/internal/metadata/iterate_metadata.go +46 -46
  43. package/native/core/factories/internal/metadata/iterate_metadata_alias.go +25 -25
  44. package/native/core/factories/internal/metadata/iterate_metadata_array.go +65 -65
  45. package/native/core/factories/internal/metadata/iterate_metadata_atomic.go +49 -49
  46. package/native/core/factories/internal/metadata/iterate_metadata_coalesce.go +22 -22
  47. package/native/core/factories/internal/metadata/iterate_metadata_collection.go +228 -228
  48. package/native/core/factories/internal/metadata/iterate_metadata_comment_tags.go +12 -12
  49. package/native/core/factories/internal/metadata/iterate_metadata_constant.go +71 -71
  50. package/native/core/factories/internal/metadata/iterate_metadata_escape.go +48 -48
  51. package/native/core/factories/internal/metadata/iterate_metadata_function.go +82 -82
  52. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +319 -319
  53. package/native/core/factories/internal/metadata/iterate_metadata_map.go +51 -51
  54. package/native/core/factories/internal/metadata/iterate_metadata_native.go +85 -85
  55. package/native/core/factories/internal/metadata/iterate_metadata_object.go +27 -27
  56. package/native/core/factories/internal/metadata/iterate_metadata_set.go +37 -37
  57. package/native/core/factories/internal/metadata/iterate_metadata_sort.go +137 -137
  58. package/native/core/factories/internal/metadata/iterate_metadata_template.go +33 -33
  59. package/native/core/factories/internal/metadata/iterate_metadata_tuple.go +16 -16
  60. package/native/core/factories/internal/metadata/iterate_metadata_union.go +18 -18
  61. package/native/core/programmers/AssertProgrammer.go +389 -389
  62. package/native/core/programmers/ImportProgrammer.go +196 -196
  63. package/native/core/programmers/IsProgrammer.go +293 -293
  64. package/native/core/programmers/RandomProgrammer.go +1094 -1094
  65. package/native/core/programmers/ValidateProgrammer.go +369 -369
  66. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +133 -133
  67. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +104 -104
  68. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +100 -100
  69. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +79 -79
  70. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +159 -159
  71. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +99 -99
  72. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +138 -138
  73. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +222 -222
  74. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +116 -116
  75. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +36 -36
  76. package/native/core/programmers/helpers/AtomicPredicator.go +35 -35
  77. package/native/core/programmers/helpers/CloneJoiner.go +217 -217
  78. package/native/core/programmers/helpers/FunctionProgrammer.go +79 -79
  79. package/native/core/programmers/helpers/HttpMetadataUtil.go +17 -17
  80. package/native/core/programmers/helpers/ICheckEntry.go +5 -5
  81. package/native/core/programmers/helpers/IExpressionEntry.go +6 -6
  82. package/native/core/programmers/helpers/NotationJoiner.go +159 -159
  83. package/native/core/programmers/helpers/OptionPredicator.go +4 -4
  84. package/native/core/programmers/helpers/ProtobufUtil.go +231 -231
  85. package/native/core/programmers/helpers/ProtobufWire.go +6 -6
  86. package/native/core/programmers/helpers/PruneJoiner.go +227 -227
  87. package/native/core/programmers/helpers/RandomJoiner.go +155 -155
  88. package/native/core/programmers/helpers/StringifyJoinder.go +331 -331
  89. package/native/core/programmers/helpers/StringifyPredicator.go +10 -10
  90. package/native/core/programmers/helpers/UnionExplorer.go +835 -835
  91. package/native/core/programmers/helpers/UnionPredicator.go +78 -78
  92. package/native/core/programmers/helpers/disable_function_programmer_declare.go +6 -6
  93. package/native/core/programmers/http/HttpAssertFormDataProgrammer.go +93 -93
  94. package/native/core/programmers/http/HttpAssertHeadersProgrammer.go +42 -42
  95. package/native/core/programmers/http/HttpAssertQueryProgrammer.go +51 -51
  96. package/native/core/programmers/http/HttpFormDataProgrammer.go +351 -351
  97. package/native/core/programmers/http/HttpHeadersProgrammer.go +370 -370
  98. package/native/core/programmers/http/HttpIsFormDataProgrammer.go +109 -109
  99. package/native/core/programmers/http/HttpIsHeadersProgrammer.go +36 -36
  100. package/native/core/programmers/http/HttpIsQueryProgrammer.go +45 -45
  101. package/native/core/programmers/http/HttpParameterProgrammer.go +158 -158
  102. package/native/core/programmers/http/HttpQueryProgrammer.go +422 -422
  103. package/native/core/programmers/http/HttpValidateFormDataProgrammer.go +87 -87
  104. package/native/core/programmers/http/HttpValidateHeadersProgrammer.go +39 -39
  105. package/native/core/programmers/http/HttpValidateQueryProgrammer.go +48 -48
  106. package/native/core/programmers/internal/CheckerProgrammer.go +1490 -1490
  107. package/native/core/programmers/internal/FeatureProgrammer.go +589 -589
  108. package/native/core/programmers/iterate/check_array_length.go +46 -46
  109. package/native/core/programmers/iterate/check_bigint.go +52 -52
  110. package/native/core/programmers/iterate/check_dynamic_key.go +220 -220
  111. package/native/core/programmers/iterate/check_dynamic_properties.go +245 -245
  112. package/native/core/programmers/iterate/check_everything.go +21 -21
  113. package/native/core/programmers/iterate/check_native.go +25 -25
  114. package/native/core/programmers/iterate/check_number.go +135 -135
  115. package/native/core/programmers/iterate/check_object.go +66 -66
  116. package/native/core/programmers/iterate/check_string.go +52 -52
  117. package/native/core/programmers/iterate/check_template.go +57 -57
  118. package/native/core/programmers/iterate/check_union_array_like.go +372 -372
  119. package/native/core/programmers/iterate/decode_union_object.go +118 -118
  120. package/native/core/programmers/iterate/feature_object_entries.go +134 -134
  121. package/native/core/programmers/iterate/json_schema_alias.go +52 -52
  122. package/native/core/programmers/iterate/json_schema_array.go +52 -52
  123. package/native/core/programmers/iterate/json_schema_bigint.go +8 -8
  124. package/native/core/programmers/iterate/json_schema_boolean.go +8 -8
  125. package/native/core/programmers/iterate/json_schema_constant.go +38 -38
  126. package/native/core/programmers/iterate/json_schema_description.go +12 -12
  127. package/native/core/programmers/iterate/json_schema_discriminator.go +47 -47
  128. package/native/core/programmers/iterate/json_schema_escaped.go +58 -58
  129. package/native/core/programmers/iterate/json_schema_jsDocTags.go +34 -34
  130. package/native/core/programmers/iterate/json_schema_native.go +43 -43
  131. package/native/core/programmers/iterate/json_schema_number.go +8 -8
  132. package/native/core/programmers/iterate/json_schema_object.go +149 -149
  133. package/native/core/programmers/iterate/json_schema_plugin.go +35 -35
  134. package/native/core/programmers/iterate/json_schema_station.go +211 -211
  135. package/native/core/programmers/iterate/json_schema_string.go +8 -8
  136. package/native/core/programmers/iterate/json_schema_template.go +53 -53
  137. package/native/core/programmers/iterate/json_schema_title.go +16 -16
  138. package/native/core/programmers/iterate/json_schema_tuple.go +34 -34
  139. package/native/core/programmers/iterate/metadata_to_pattern.go +53 -53
  140. package/native/core/programmers/iterate/postfix_of_tuple.go +5 -5
  141. package/native/core/programmers/iterate/prune_object_properties.go +85 -85
  142. package/native/core/programmers/iterate/stringify_dynamic_properties.go +193 -193
  143. package/native/core/programmers/iterate/stringify_native.go +1 -1
  144. package/native/core/programmers/iterate/stringify_regular_properties.go +84 -84
  145. package/native/core/programmers/iterate/template_to_pattern.go +20 -20
  146. package/native/core/programmers/iterate/wrap_metadata_rest_tuple.go +13 -13
  147. package/native/core/programmers/json/JsonApplicationProgrammer.go +323 -323
  148. package/native/core/programmers/json/JsonAssertParseProgrammer.go +100 -100
  149. package/native/core/programmers/json/JsonAssertStringifyProgrammer.go +88 -88
  150. package/native/core/programmers/json/JsonIsParseProgrammer.go +130 -130
  151. package/native/core/programmers/json/JsonIsStringifyProgrammer.go +92 -92
  152. package/native/core/programmers/json/JsonSchemaProgrammer.go +65 -65
  153. package/native/core/programmers/json/JsonSchemasProgrammer.go +116 -116
  154. package/native/core/programmers/json/JsonStringifyProgrammer.go +1245 -1245
  155. package/native/core/programmers/json/JsonValidateParseProgrammer.go +89 -89
  156. package/native/core/programmers/json/JsonValidateStringifyProgrammer.go +106 -106
  157. package/native/core/programmers/llm/LlmApplicationProgrammer.go +445 -445
  158. package/native/core/programmers/llm/LlmCoerceProgrammer.go +79 -79
  159. package/native/core/programmers/llm/LlmControllerProgrammer.go +35 -35
  160. package/native/core/programmers/llm/LlmMetadataFactory.go +74 -74
  161. package/native/core/programmers/llm/LlmParametersProgrammer.go +104 -104
  162. package/native/core/programmers/llm/LlmParseProgrammer.go +88 -88
  163. package/native/core/programmers/llm/LlmSchemaProgrammer.go +702 -702
  164. package/native/core/programmers/llm/LlmStructuredOutputProgrammer.go +123 -123
  165. package/native/core/programmers/misc/MiscAssertCloneProgrammer.go +82 -82
  166. package/native/core/programmers/misc/MiscAssertPruneProgrammer.go +97 -97
  167. package/native/core/programmers/misc/MiscCloneProgrammer.go +1056 -1056
  168. package/native/core/programmers/misc/MiscIsCloneProgrammer.go +94 -94
  169. package/native/core/programmers/misc/MiscIsPruneProgrammer.go +86 -86
  170. package/native/core/programmers/misc/MiscLiteralsProgrammer.go +99 -99
  171. package/native/core/programmers/misc/MiscPruneProgrammer.go +700 -700
  172. package/native/core/programmers/misc/MiscValidateCloneProgrammer.go +103 -103
  173. package/native/core/programmers/misc/MiscValidatePruneProgrammer.go +94 -94
  174. package/native/core/programmers/notations/NotationAssertGeneralProgrammer.go +85 -85
  175. package/native/core/programmers/notations/NotationGeneralProgrammer.go +1188 -1188
  176. package/native/core/programmers/notations/NotationIsGeneralProgrammer.go +90 -90
  177. package/native/core/programmers/notations/NotationValidateGeneralProgrammer.go +109 -109
  178. package/native/core/programmers/protobuf/ProtobufAssertDecodeProgrammer.go +99 -99
  179. package/native/core/programmers/protobuf/ProtobufAssertEncodeProgrammer.go +114 -114
  180. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +697 -697
  181. package/native/core/programmers/protobuf/ProtobufEncodeProgrammer.go +1039 -1039
  182. package/native/core/programmers/protobuf/ProtobufIsDecodeProgrammer.go +99 -99
  183. package/native/core/programmers/protobuf/ProtobufIsEncodeProgrammer.go +93 -93
  184. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +228 -228
  185. package/native/core/programmers/protobuf/ProtobufValidateDecodeProgrammer.go +88 -88
  186. package/native/core/programmers/protobuf/ProtobufValidateEncodeProgrammer.go +120 -120
  187. package/native/core/schemas/metadata/IMetadataDictionary.go +4 -4
  188. package/native/core/schemas/metadata/MetadataAlias.go +15 -15
  189. package/native/core/schemas/metadata/MetadataAliasType.go +36 -36
  190. package/native/core/schemas/metadata/MetadataApplication.go +25 -25
  191. package/native/core/schemas/metadata/MetadataArray.go +15 -15
  192. package/native/core/schemas/metadata/MetadataArrayType.go +31 -31
  193. package/native/core/schemas/metadata/MetadataAtomic.go +45 -45
  194. package/native/core/schemas/metadata/MetadataCollection.go +380 -380
  195. package/native/core/schemas/metadata/MetadataComponents.go +95 -95
  196. package/native/core/schemas/metadata/MetadataConstant.go +31 -31
  197. package/native/core/schemas/metadata/MetadataConstantValue.go +63 -63
  198. package/native/core/schemas/metadata/MetadataEscaped.go +17 -17
  199. package/native/core/schemas/metadata/MetadataFunction.go +30 -30
  200. package/native/core/schemas/metadata/MetadataMap.go +21 -21
  201. package/native/core/schemas/metadata/MetadataNative.go +48 -48
  202. package/native/core/schemas/metadata/MetadataObject.go +15 -15
  203. package/native/core/schemas/metadata/MetadataObjectType.go +116 -116
  204. package/native/core/schemas/metadata/MetadataParameter.go +28 -28
  205. package/native/core/schemas/metadata/MetadataProperty.go +32 -32
  206. package/native/core/schemas/metadata/MetadataSchema.go +766 -766
  207. package/native/core/schemas/metadata/MetadataSet.go +17 -17
  208. package/native/core/schemas/metadata/MetadataTemplate.go +43 -43
  209. package/native/core/schemas/metadata/MetadataTuple.go +10 -10
  210. package/native/core/schemas/metadata/MetadataTupleType.go +38 -38
  211. package/native/core/schemas/protobuf/IProtobufProperty.go +2 -2
  212. package/native/core/schemas/protobuf/IProtobufPropertyType.go +18 -18
  213. package/native/core/schemas/protobuf/IProtobufSchema.go +17 -17
  214. package/native/core/typings/Writable.go +1 -1
  215. package/native/core/utils/PatternUtil.go +38 -38
  216. package/native/core/utils/ProtobufNameEncoder.go +28 -28
  217. package/native/shim/printer/go.mod +1 -1
  218. package/native/shim/printer/shim.go +213 -213
  219. package/native/third_party/ttsc/driver/host.go +9 -9
  220. package/native/third_party/ttsc/driver/program.go +344 -281
  221. package/native/third_party/ttsc/driver/rewrite.go +247 -221
  222. package/native/third_party/ttsc/go.mod +5 -3
  223. package/native/third_party/ttsc/go.sum +2 -2
  224. package/native/third_party/ttsc/shim/ast/go.mod +1 -1
  225. package/native/third_party/ttsc/shim/ast/lint.go +174 -171
  226. package/native/third_party/ttsc/shim/ast/shim.go +86 -85
  227. package/native/third_party/ttsc/shim/bundled/go.mod +1 -1
  228. package/native/third_party/ttsc/shim/bundled/shim.go +5 -1
  229. package/native/third_party/ttsc/shim/checker/go.mod +1 -1
  230. package/native/third_party/ttsc/shim/checker/shim.go +79 -79
  231. package/native/third_party/ttsc/shim/compiler/go.mod +1 -1
  232. package/native/third_party/ttsc/shim/compiler/shim.go +16 -1
  233. package/native/third_party/ttsc/shim/core/go.mod +1 -1
  234. package/native/third_party/ttsc/shim/core/shim.go +13 -10
  235. package/native/third_party/ttsc/shim/diagnosticwriter/go.mod +1 -1
  236. package/native/third_party/ttsc/shim/diagnosticwriter/lint.go +79 -79
  237. package/native/third_party/ttsc/shim/diagnosticwriter/shim.go +19 -19
  238. package/native/third_party/ttsc/shim/parser/go.mod +1 -1
  239. package/native/third_party/ttsc/shim/parser/shim.go +7 -1
  240. package/native/third_party/ttsc/shim/scanner/go.mod +1 -1
  241. package/native/third_party/ttsc/shim/scanner/shim.go +39 -1
  242. package/native/third_party/ttsc/shim/tsoptions/go.mod +1 -1
  243. package/native/third_party/ttsc/shim/tsoptions/shim.go +51 -1
  244. package/native/third_party/ttsc/shim/tspath/go.mod +1 -1
  245. package/native/third_party/ttsc/shim/tspath/shim.go +72 -1
  246. package/native/third_party/ttsc/shim/vfs/cachedvfs/go.mod +1 -1
  247. package/native/third_party/ttsc/shim/vfs/cachedvfs/shim.go +1 -1
  248. package/native/third_party/ttsc/shim/vfs/go.mod +1 -1
  249. package/native/third_party/ttsc/shim/vfs/osvfs/go.mod +1 -1
  250. package/native/third_party/ttsc/shim/vfs/osvfs/shim.go +1 -1
  251. package/native/third_party/ttsc/shim/vfs/shim.go +4 -1
  252. package/native/transform/CallExpressionTransformer.go +556 -556
  253. package/native/transform/FileTransformer.go +123 -123
  254. package/native/transform/ImportTransformer.go +224 -224
  255. package/native/transform/NodeTransformer.go +11 -11
  256. package/native/transform/TypiaGenerator.go +136 -136
  257. package/native/transform/features/AssertTransformer.go +28 -28
  258. package/native/transform/features/CreateAssertTransformer.go +28 -28
  259. package/native/transform/features/CreateIsTransformer.go +24 -24
  260. package/native/transform/features/CreateRandomTransformer.go +35 -35
  261. package/native/transform/features/CreateValidateTransformer.go +24 -24
  262. package/native/transform/features/IsTransformer.go +24 -24
  263. package/native/transform/features/RandomTransformer.go +37 -37
  264. package/native/transform/features/ValidateTransformer.go +24 -24
  265. package/native/transform/features/functional/FunctionalGenericTransformer.go +48 -48
  266. package/native/transform/features/http/CreateHttpAssertFormDataTransformer.go +11 -11
  267. package/native/transform/features/http/CreateHttpAssertHeadersTransformer.go +11 -11
  268. package/native/transform/features/http/CreateHttpAssertQueryTransformer.go +17 -17
  269. package/native/transform/features/http/CreateHttpFormDataTransformer.go +11 -11
  270. package/native/transform/features/http/CreateHttpHeadersTransformer.go +11 -11
  271. package/native/transform/features/http/CreateHttpIsFormDataTransformer.go +11 -11
  272. package/native/transform/features/http/CreateHttpIsHeadersTransformer.go +11 -11
  273. package/native/transform/features/http/CreateHttpIsQueryTransformer.go +17 -17
  274. package/native/transform/features/http/CreateHttpParameterTransformer.go +11 -11
  275. package/native/transform/features/http/CreateHttpQueryTransformer.go +17 -17
  276. package/native/transform/features/http/CreateHttpValidateFormDataTransformer.go +11 -11
  277. package/native/transform/features/http/CreateHttpValidateHeadersTransformer.go +11 -11
  278. package/native/transform/features/http/CreateHttpValidateQueryTransformer.go +17 -17
  279. package/native/transform/features/http/HttpAssertFormDataTransformer.go +11 -11
  280. package/native/transform/features/http/HttpAssertHeadersTransformer.go +11 -11
  281. package/native/transform/features/http/HttpAssertQueryTransformer.go +17 -17
  282. package/native/transform/features/http/HttpFormDataTransformer.go +11 -11
  283. package/native/transform/features/http/HttpHeadersTransformer.go +11 -11
  284. package/native/transform/features/http/HttpIsFormDataTransformer.go +11 -11
  285. package/native/transform/features/http/HttpIsHeadersTransformer.go +11 -11
  286. package/native/transform/features/http/HttpIsQueryTransformer.go +17 -17
  287. package/native/transform/features/http/HttpParameterTransformer.go +11 -11
  288. package/native/transform/features/http/HttpQueryTransformer.go +17 -17
  289. package/native/transform/features/http/HttpValidateFormDataTransformer.go +11 -11
  290. package/native/transform/features/http/HttpValidateHeadersTransformer.go +11 -11
  291. package/native/transform/features/http/HttpValidateQueryTransformer.go +17 -17
  292. package/native/transform/features/json/JsonApplicationTransformer.go +61 -61
  293. package/native/transform/features/json/JsonAssertParseTransformer.go +11 -11
  294. package/native/transform/features/json/JsonAssertStringifyTransformer.go +11 -11
  295. package/native/transform/features/json/JsonCreateAssertParseTransformer.go +11 -11
  296. package/native/transform/features/json/JsonCreateAssertStringifyTransformer.go +11 -11
  297. package/native/transform/features/json/JsonCreateIsParseTransformer.go +11 -11
  298. package/native/transform/features/json/JsonCreateIsStringifyTransformer.go +11 -11
  299. package/native/transform/features/json/JsonCreateStringifyTransformer.go +11 -11
  300. package/native/transform/features/json/JsonCreateValidateParseTransformer.go +11 -11
  301. package/native/transform/features/json/JsonCreateValidateStringifyProgrammer.go +11 -11
  302. package/native/transform/features/json/JsonIsParseTransformer.go +11 -11
  303. package/native/transform/features/json/JsonIsStringifyTransformer.go +11 -11
  304. package/native/transform/features/json/JsonSchemaTransformer.go +148 -148
  305. package/native/transform/features/json/JsonSchemasTransformer.go +94 -94
  306. package/native/transform/features/json/JsonStringifyTransformer.go +11 -11
  307. package/native/transform/features/json/JsonValidateParseTransformer.go +11 -11
  308. package/native/transform/features/json/JsonValidateStringifyTransformer.go +11 -11
  309. package/native/transform/features/llm/LlmApplicationTransformer.go +43 -43
  310. package/native/transform/features/llm/LlmCoerceTransformer.go +50 -50
  311. package/native/transform/features/llm/LlmControllerTransformer.go +48 -48
  312. package/native/transform/features/llm/LlmCreateCoerceTransformer.go +43 -43
  313. package/native/transform/features/llm/LlmCreateParseTransformer.go +43 -43
  314. package/native/transform/features/llm/LlmParametersTransformer.go +38 -38
  315. package/native/transform/features/llm/LlmParseTransformer.go +50 -50
  316. package/native/transform/features/llm/LlmSchemaTransformer.go +129 -129
  317. package/native/transform/features/llm/LlmStructuredOutputTransformer.go +44 -44
  318. package/native/transform/features/misc/MiscAssertCloneTransformer.go +11 -11
  319. package/native/transform/features/misc/MiscAssertPruneTransformer.go +11 -11
  320. package/native/transform/features/misc/MiscCloneTransformer.go +11 -11
  321. package/native/transform/features/misc/MiscCreateAssertCloneTransformer.go +11 -11
  322. package/native/transform/features/misc/MiscCreateAssertPruneTransformer.go +11 -11
  323. package/native/transform/features/misc/MiscCreateCloneTransformer.go +11 -11
  324. package/native/transform/features/misc/MiscCreateIsCloneTransformer.go +11 -11
  325. package/native/transform/features/misc/MiscCreateIsPruneTransformer.go +11 -11
  326. package/native/transform/features/misc/MiscCreatePruneTransformer.go +11 -11
  327. package/native/transform/features/misc/MiscCreateValidateCloneTransformer.go +11 -11
  328. package/native/transform/features/misc/MiscCreateValidatePruneTransformer.go +11 -11
  329. package/native/transform/features/misc/MiscIsCloneTransformer.go +11 -11
  330. package/native/transform/features/misc/MiscIsPruneTransformer.go +11 -11
  331. package/native/transform/features/misc/MiscLiteralsTransformer.go +21 -21
  332. package/native/transform/features/misc/MiscPruneTransformer.go +11 -11
  333. package/native/transform/features/misc/MiscValidateCloneTransformer.go +11 -11
  334. package/native/transform/features/misc/MiscValidatePruneTransformer.go +11 -11
  335. package/native/transform/features/notations/NotationAssertGeneralTransformer.go +16 -16
  336. package/native/transform/features/notations/NotationCreateAssertGeneralTransformer.go +16 -16
  337. package/native/transform/features/notations/NotationCreateGeneralTransformer.go +16 -16
  338. package/native/transform/features/notations/NotationCreateIsGeneralTransformer.go +16 -16
  339. package/native/transform/features/notations/NotationCreateValidateGeneralTransformer.go +16 -16
  340. package/native/transform/features/notations/NotationGeneralTransformer.go +21 -21
  341. package/native/transform/features/notations/NotationIsGeneralTransformer.go +16 -16
  342. package/native/transform/features/notations/NotationValidateGeneralTransformer.go +16 -16
  343. package/native/transform/features/protobuf/ProtobufAssertDecodeTransformer.go +11 -11
  344. package/native/transform/features/protobuf/ProtobufAssertEncodeTransformer.go +11 -11
  345. package/native/transform/features/protobuf/ProtobufCreateAssertDecodeTransformer.go +11 -11
  346. package/native/transform/features/protobuf/ProtobufCreateAssertEncodeTransformer.go +11 -11
  347. package/native/transform/features/protobuf/ProtobufCreateDecodeTransformer.go +11 -11
  348. package/native/transform/features/protobuf/ProtobufCreateEncodeTransformer.go +11 -11
  349. package/native/transform/features/protobuf/ProtobufCreateIsDecodeTransformer.go +11 -11
  350. package/native/transform/features/protobuf/ProtobufCreateIsEncodeTransformer.go +11 -11
  351. package/native/transform/features/protobuf/ProtobufCreateValidateDecodeTransformer.go +11 -11
  352. package/native/transform/features/protobuf/ProtobufCreateValidateEncodeTransformer.go +11 -11
  353. package/native/transform/features/protobuf/ProtobufDecodeTransformer.go +11 -11
  354. package/native/transform/features/protobuf/ProtobufEncodeTransformer.go +11 -11
  355. package/native/transform/features/protobuf/ProtobufIsDecodeTransformer.go +11 -11
  356. package/native/transform/features/protobuf/ProtobufIsEncodeTransformer.go +11 -11
  357. package/native/transform/features/protobuf/ProtobufMessageTransformer.go +20 -20
  358. package/native/transform/features/protobuf/ProtobufValidateDecodeTransformer.go +11 -11
  359. package/native/transform/features/protobuf/ProtobufValidateEncodeTransformer.go +11 -11
  360. package/native/transform/features/reflect/ReflectMetadataTransformer.go +59 -59
  361. package/native/transform/features/reflect/ReflectNameTransformer.go +78 -78
  362. package/native/transform/features/reflect/ReflectSchemaTransformer.go +121 -121
  363. package/native/transform/features/reflect/ReflectSchemasTransformer.go +55 -55
  364. package/native/transform/internal/GenericTransformer.go +173 -173
  365. package/native/transform/transform.go +32 -32
  366. package/package.json +5 -5
  367. package/src/executable/generate/ttsc.ts +2 -3
  368. package/src/executable/setup/PluginConfigurator.ts +2 -3
  369. package/src/internal/_randomInteger.ts +5 -5
  370. package/src/internal/_validateReport.ts +1 -2
  371. package/src/transform.ts +1 -1
@@ -1,21 +1,23 @@
1
1
  package driver
2
2
 
3
3
  import (
4
- "context"
5
- "errors"
6
- "fmt"
7
- "io"
8
- "path/filepath"
9
-
10
- "github.com/microsoft/typescript-go/shim/ast"
11
- shimchecker "github.com/microsoft/typescript-go/shim/checker"
12
- shimcompiler "github.com/microsoft/typescript-go/shim/compiler"
13
- "github.com/microsoft/typescript-go/shim/core"
14
- shimdiagnosticwriter "github.com/microsoft/typescript-go/shim/diagnosticwriter"
15
- shimscanner "github.com/microsoft/typescript-go/shim/scanner"
16
- "github.com/microsoft/typescript-go/shim/tsoptions"
17
- "github.com/microsoft/typescript-go/shim/tspath"
18
- "github.com/microsoft/typescript-go/shim/vfs"
4
+ "context"
5
+ "errors"
6
+ "fmt"
7
+ "io"
8
+ "path/filepath"
9
+ "strings"
10
+ "time"
11
+
12
+ "github.com/microsoft/typescript-go/shim/ast"
13
+ shimchecker "github.com/microsoft/typescript-go/shim/checker"
14
+ shimcompiler "github.com/microsoft/typescript-go/shim/compiler"
15
+ "github.com/microsoft/typescript-go/shim/core"
16
+ shimdiagnosticwriter "github.com/microsoft/typescript-go/shim/diagnosticwriter"
17
+ shimscanner "github.com/microsoft/typescript-go/shim/scanner"
18
+ "github.com/microsoft/typescript-go/shim/tsoptions"
19
+ "github.com/microsoft/typescript-go/shim/tspath"
20
+ "github.com/microsoft/typescript-go/shim/vfs"
19
21
  )
20
22
 
21
23
  // Diagnostic is the compilation diagnostic shape ttsc passes around. Kept
@@ -27,13 +29,16 @@ import (
27
29
  // `@ttsc/lint`). At most one of `raw` / `lint` is non-nil; both nil falls
28
30
  // back to the legacy single-line form.
29
31
  type Diagnostic struct {
30
- File string
31
- Line int
32
- Column int
33
- Message string
34
- Severity Severity
35
- raw *ast.Diagnostic
36
- lint *shimdiagnosticwriter.LintDiagnostic
32
+ File string
33
+ Line int
34
+ Column int
35
+ Code int32
36
+ Start *int
37
+ Length *int
38
+ Message string
39
+ Severity Severity
40
+ raw *ast.Diagnostic
41
+ lint *shimdiagnosticwriter.LintDiagnostic
37
42
  }
38
43
 
39
44
  // Severity classifies a diagnostic's blast radius. ttsc treats Error as a
@@ -41,12 +46,12 @@ type Diagnostic struct {
41
46
  type Severity int
42
47
 
43
48
  const (
44
- // SeverityError is the default for tsgo typecheck output and any
45
- // plugin-emitted finding that should fail the build.
46
- SeverityError Severity = iota
47
- // SeverityWarning prints with warning coloring but keeps the build
48
- // status at zero.
49
- SeverityWarning
49
+ // SeverityError is the default for tsgo typecheck output and any
50
+ // plugin-emitted finding that should fail the build.
51
+ SeverityError Severity = iota
52
+ // SeverityWarning prints with warning coloring but keeps the build
53
+ // status at zero.
54
+ SeverityWarning
50
55
  )
51
56
 
52
57
  // IsError reports whether the diagnostic counts toward the build's error
@@ -60,56 +65,60 @@ func (d Diagnostic) IsError() bool { return d.Severity == SeverityError }
60
65
  // rule's enum index). Severity controls both the rendered banner color and
61
66
  // the exit-code outcome.
62
67
  func NewLintDiagnostic(
63
- file *ast.SourceFile,
64
- pos, end int,
65
- code int32,
66
- severity Severity,
67
- message string,
68
+ file *ast.SourceFile,
69
+ pos, end int,
70
+ code int32,
71
+ severity Severity,
72
+ message string,
68
73
  ) Diagnostic {
69
- cat := shimdiagnosticwriter.LintCategoryError
70
- if severity == SeverityWarning {
71
- cat = shimdiagnosticwriter.LintCategoryWarning
72
- }
73
- lint := shimdiagnosticwriter.NewLintDiagnostic(file, pos, end, code, cat, message)
74
- d := Diagnostic{
75
- Message: message,
76
- Severity: severity,
77
- lint: lint,
78
- }
79
- if file != nil {
80
- d.File = file.FileName()
81
- if pos >= 0 {
82
- line, col := shimscanner.GetECMALineAndByteOffsetOfPosition(file, pos)
83
- d.Line = line + 1
84
- d.Column = col + 1
85
- }
86
- }
87
- return d
74
+ cat := shimdiagnosticwriter.LintCategoryError
75
+ if severity == SeverityWarning {
76
+ cat = shimdiagnosticwriter.LintCategoryWarning
77
+ }
78
+ lint := shimdiagnosticwriter.NewLintDiagnostic(file, pos, end, code, cat, message)
79
+ d := Diagnostic{
80
+ Code: code,
81
+ Message: message,
82
+ Severity: severity,
83
+ lint: lint,
84
+ }
85
+ if file != nil {
86
+ d.File = file.FileName()
87
+ if pos >= 0 {
88
+ length := end - pos
89
+ d.Start = &pos
90
+ d.Length = &length
91
+ line, col := shimscanner.GetECMALineAndByteOffsetOfPosition(file, pos)
92
+ d.Line = line + 1
93
+ d.Column = col + 1
94
+ }
95
+ }
96
+ return d
88
97
  }
89
98
 
90
99
  // SourceFile returns the program source file matching filename.
91
100
  func (p *Program) SourceFile(filename string) *ast.SourceFile {
92
- if p == nil || p.TSProgram == nil {
93
- return nil
94
- }
95
- normalized := filepath.ToSlash(filename)
96
- for _, file := range p.TSProgram.SourceFiles() {
97
- if filepath.ToSlash(file.FileName()) == normalized {
98
- return file
99
- }
100
- }
101
- return nil
101
+ if p == nil || p.TSProgram == nil {
102
+ return nil
103
+ }
104
+ normalized := filepath.ToSlash(filename)
105
+ for _, file := range p.TSProgram.SourceFiles() {
106
+ if filepath.ToSlash(file.FileName()) == normalized {
107
+ return file
108
+ }
109
+ }
110
+ return nil
102
111
  }
103
112
 
104
113
  // String returns a `path:line:col: message` formatted string.
105
114
  func (d Diagnostic) String() string {
106
- if d.File == "" {
107
- return d.Message
108
- }
109
- if d.Line > 0 {
110
- return fmt.Sprintf("%s:%d:%d: %s", d.File, d.Line, d.Column, d.Message)
111
- }
112
- return fmt.Sprintf("%s: %s", d.File, d.Message)
115
+ if d.File == "" {
116
+ return d.Message
117
+ }
118
+ if d.Line > 0 {
119
+ return fmt.Sprintf("%s:%d:%d: %s", d.File, d.Line, d.Column, d.Message)
120
+ }
121
+ return fmt.Sprintf("%s: %s", d.File, d.Message)
113
122
  }
114
123
 
115
124
  // WritePrettyDiagnostics renders diagnostics with TypeScript-style colors,
@@ -118,90 +127,91 @@ func (d Diagnostic) String() string {
118
127
  // are rendered through the same color/context pipeline; entries without
119
128
  // either anchor fall back to the legacy `path:line:col: message` form.
120
129
  func WritePrettyDiagnostics(w io.Writer, diagnostics []Diagnostic, cwd string) {
121
- if len(diagnostics) == 0 {
122
- return
123
- }
124
- rich := make([]Diagnostic, 0, len(diagnostics))
125
- plain := make([]Diagnostic, 0)
126
- for _, d := range diagnostics {
127
- if d.raw != nil || d.lint != nil {
128
- rich = append(rich, d)
129
- } else {
130
- plain = append(plain, d)
131
- }
132
- }
133
- if len(rich) > 0 {
134
- astDiags := make([]*ast.Diagnostic, 0, len(rich))
135
- lintDiags := make([]*shimdiagnosticwriter.LintDiagnostic, 0, len(rich))
136
- for _, d := range rich {
137
- if d.raw != nil {
138
- astDiags = append(astDiags, d.raw)
139
- }
140
- if d.lint != nil {
141
- lintDiags = append(lintDiags, d.lint)
142
- }
143
- }
144
- shimdiagnosticwriter.FormatMixedDiagnostics(w, astDiags, lintDiags, cwd)
145
- }
146
- for _, d := range plain {
147
- fmt.Fprintln(w, " -", d.String())
148
- }
130
+ if len(diagnostics) == 0 {
131
+ return
132
+ }
133
+ rich := make([]Diagnostic, 0, len(diagnostics))
134
+ plain := make([]Diagnostic, 0)
135
+ for _, d := range diagnostics {
136
+ if d.raw != nil || d.lint != nil {
137
+ rich = append(rich, d)
138
+ } else {
139
+ plain = append(plain, d)
140
+ }
141
+ }
142
+ if len(rich) > 0 {
143
+ astDiags := make([]*ast.Diagnostic, 0, len(rich))
144
+ lintDiags := make([]*shimdiagnosticwriter.LintDiagnostic, 0, len(rich))
145
+ for _, d := range rich {
146
+ if d.raw != nil {
147
+ astDiags = append(astDiags, d.raw)
148
+ }
149
+ if d.lint != nil {
150
+ lintDiags = append(lintDiags, d.lint)
151
+ }
152
+ }
153
+ shimdiagnosticwriter.FormatMixedDiagnostics(w, astDiags, lintDiags, cwd)
154
+ }
155
+ for _, d := range plain {
156
+ fmt.Fprintln(w, " -", d.String())
157
+ }
149
158
  }
150
159
 
151
160
  // CountErrors returns the number of diagnostics that should fail the build.
152
161
  // tsgo diagnostics carry their own `Error` category; lint diagnostics carry a
153
162
  // caller-set Severity. Anything that isn't an explicit warning counts.
154
163
  func CountErrors(diagnostics []Diagnostic) int {
155
- n := 0
156
- for _, d := range diagnostics {
157
- if d.lint != nil {
158
- if d.lint.IsError() {
159
- n++
160
- }
161
- continue
162
- }
163
- if d.raw != nil {
164
- // tsgo diagnostics use the diagnostics package category. The
165
- // renderer shim already mirrors the same Error/Warning split, so
166
- // re-categorize via the public IsError shortcut.
167
- if d.Severity != SeverityWarning {
168
- n++
169
- }
170
- continue
171
- }
172
- // Plain text diagnostics (manually assembled): treat as errors so
173
- // "ttsc: tsconfig not found"-style failures still flip the exit code.
174
- n++
175
- }
176
- return n
164
+ n := 0
165
+ for _, d := range diagnostics {
166
+ if d.lint != nil {
167
+ if d.lint.IsError() {
168
+ n++
169
+ }
170
+ continue
171
+ }
172
+ if d.raw != nil {
173
+ // tsgo diagnostics use the diagnostics package category. The
174
+ // renderer shim already mirrors the same Error/Warning split, so
175
+ // re-categorize via the public IsError shortcut.
176
+ if d.Severity != SeverityWarning {
177
+ n++
178
+ }
179
+ continue
180
+ }
181
+ // Plain text diagnostics (manually assembled): treat as errors so
182
+ // "ttsc: tsconfig not found"-style failures still flip the exit code.
183
+ n++
184
+ }
185
+ return n
177
186
  }
178
187
 
179
188
  // Program is the shim-agnostic facade the rest of the engine sees.
180
189
  type Program struct {
181
- TSProgram *shimcompiler.Program
182
- ParsedConfig *tsoptions.ParsedCommandLine
183
- Checker *shimchecker.Checker
184
- checkerRelease func()
185
- Host shimcompiler.CompilerHost
186
- FS vfs.FS
190
+ TSProgram *shimcompiler.Program
191
+ ParsedConfig *tsoptions.ParsedCommandLine
192
+ Checker *shimchecker.Checker
193
+ checkerRelease func()
194
+ Host shimcompiler.CompilerHost
195
+ FS vfs.FS
187
196
  }
188
197
 
189
198
  // LoadProgramOptions controls tsconfig overrides applied before tsgo creates
190
- // the program. `ForceEmit` is used by `ttsc --emit` and `ttsc transform`
191
- // so runtime compilation still works when the project defaults to `noEmit`.
199
+ // the program. `ForceEmit` is used by `ttsc --emit` and runtime compilation
200
+ // so execution still works when the project defaults to `noEmit`.
192
201
  type LoadProgramOptions struct {
193
- ForceEmit bool
194
- ForceNoEmit bool
195
- OutDir string
202
+ ForceEmit bool
203
+ ForceNoEmit bool
204
+ OutDir string
205
+ SourcePreamble string
196
206
  }
197
207
 
198
208
  // Close releases the checker pool lease acquired by LoadProgram.
199
209
  func (p *Program) Close() error {
200
- if p.checkerRelease != nil {
201
- p.checkerRelease()
202
- p.checkerRelease = nil
203
- }
204
- return nil
210
+ if p.checkerRelease != nil {
211
+ p.checkerRelease()
212
+ p.checkerRelease = nil
213
+ }
214
+ return nil
205
215
  }
206
216
 
207
217
  // ParseTSConfig parses a tsconfig.json file via tsgo's native JSONC parser.
@@ -211,36 +221,36 @@ func (p *Program) Close() error {
211
221
  // tsgo's filesystem APIs require absolute paths — mirrors what tsc does when
212
222
  // you pass a relative `--project` flag.
213
223
  func ParseTSConfig(fs vfs.FS, cwd, tsconfigPath string, host shimcompiler.CompilerHost) (*tsoptions.ParsedCommandLine, []Diagnostic, error) {
214
- resolved := tspath.ResolvePath(cwd, tsconfigPath)
215
- if !fs.FileExists(resolved) {
216
- return nil, nil, fmt.Errorf("tsconfig not found: %s", resolved)
217
- }
218
- parsed, diags := tsoptions.GetParsedCommandLineOfConfigFile(resolved, &core.CompilerOptions{}, nil, host, nil)
219
- if len(diags) > 0 {
220
- return nil, convertDiagnostics(diags), nil
221
- }
222
- if parsed == nil {
223
- return nil, nil, errors.New("tsoptions: parsed command line was nil")
224
- }
225
- if len(parsed.Errors) > 0 {
226
- return nil, convertDiagnostics(parsed.Errors), nil
227
- }
228
- return parsed, nil, nil
224
+ resolved := tspath.ResolvePath(cwd, tsconfigPath)
225
+ if !fs.FileExists(resolved) {
226
+ return nil, nil, fmt.Errorf("tsconfig not found: %s", resolved)
227
+ }
228
+ parsed, diags := tsoptions.GetParsedCommandLineOfConfigFile(resolved, &core.CompilerOptions{}, nil, host, nil)
229
+ if len(diags) > 0 {
230
+ return nil, convertDiagnostics(diags), nil
231
+ }
232
+ if parsed == nil {
233
+ return nil, nil, errors.New("tsoptions: parsed command line was nil")
234
+ }
235
+ if len(parsed.Errors) > 0 {
236
+ return nil, convertDiagnostics(parsed.Errors), nil
237
+ }
238
+ return parsed, nil, nil
229
239
  }
230
240
 
231
241
  // CreateProgramFromConfig builds a tsgo Program from the parsed config.
232
242
  func CreateProgramFromConfig(parsed *tsoptions.ParsedCommandLine, host shimcompiler.CompilerHost) (*shimcompiler.Program, []Diagnostic, error) {
233
- opts := shimcompiler.ProgramOptions{
234
- Config: parsed,
235
- SingleThreaded: core.TSTrue,
236
- Host: host,
237
- UseSourceOfProjectReference: true,
238
- }
239
- p := shimcompiler.NewProgram(opts)
240
- if p == nil {
241
- return nil, nil, errors.New("shimcompiler.NewProgram returned nil")
242
- }
243
- return p, nil, nil
243
+ opts := shimcompiler.ProgramOptions{
244
+ Config: parsed,
245
+ SingleThreaded: core.TSTrue,
246
+ Host: host,
247
+ UseSourceOfProjectReference: true,
248
+ }
249
+ p := shimcompiler.NewProgram(opts)
250
+ if p == nil {
251
+ return nil, nil, errors.New("shimcompiler.NewProgram returned nil")
252
+ }
253
+ return p, nil, nil
244
254
  }
245
255
 
246
256
  // LoadProgram is the one-shot convenience used by `ttsc`.
@@ -249,155 +259,208 @@ func CreateProgramFromConfig(parsed *tsoptions.ParsedCommandLine, host shimcompi
249
259
  //
250
260
  // cwd must be absolute; tsconfigPath may be relative to cwd.
251
261
  func LoadProgram(cwd, tsconfigPath string, options LoadProgramOptions) (*Program, []Diagnostic, error) {
252
- if !filepath.IsAbs(cwd) {
253
- if abs, err := filepath.Abs(cwd); err == nil {
254
- cwd = abs
255
- }
256
- }
257
- cwd = tspath.ResolvePath(cwd)
258
- fs := DefaultFS()
259
- host := DefaultHost(cwd, fs)
260
-
261
- parsed, diags, err := ParseTSConfig(fs, cwd, tsconfigPath, host)
262
- if err != nil {
263
- return nil, nil, err
264
- }
265
- if len(diags) > 0 {
266
- return nil, diags, nil
267
- }
268
- if options.ForceNoEmit {
269
- forceNoEmit(parsed)
270
- }
271
- if options.ForceEmit {
272
- forceEmit(parsed)
273
- }
274
- if options.OutDir != "" {
275
- overrideOutDir(cwd, parsed, options.OutDir)
276
- }
277
-
278
- tsProgram, progDiags, err := CreateProgramFromConfig(parsed, host)
279
- if err != nil {
280
- return nil, nil, err
281
- }
282
- if len(progDiags) > 0 {
283
- return nil, progDiags, nil
284
- }
285
-
286
- checker, done := tsProgram.GetTypeChecker(context.Background())
287
- return &Program{
288
- TSProgram: tsProgram,
289
- ParsedConfig: parsed,
290
- Checker: checker,
291
- checkerRelease: done,
292
- Host: host,
293
- FS: fs,
294
- }, nil, nil
262
+ if !filepath.IsAbs(cwd) {
263
+ if abs, err := filepath.Abs(cwd); err == nil {
264
+ cwd = abs
265
+ }
266
+ }
267
+ cwd = tspath.ResolvePath(cwd)
268
+ fs := DefaultFS()
269
+ if options.SourcePreamble != "" {
270
+ fs = sourcePreambleFS{
271
+ FS: fs,
272
+ preamble: options.SourcePreamble,
273
+ }
274
+ }
275
+ host := DefaultHost(cwd, fs)
276
+
277
+ parsed, diags, err := ParseTSConfig(fs, cwd, tsconfigPath, host)
278
+ if err != nil {
279
+ return nil, nil, err
280
+ }
281
+ if len(diags) > 0 {
282
+ return nil, diags, nil
283
+ }
284
+ if options.ForceNoEmit {
285
+ forceNoEmit(parsed)
286
+ }
287
+ if options.ForceEmit {
288
+ forceEmit(parsed)
289
+ }
290
+ if options.OutDir != "" {
291
+ overrideOutDir(cwd, parsed, options.OutDir)
292
+ }
293
+
294
+ tsProgram, progDiags, err := CreateProgramFromConfig(parsed, host)
295
+ if err != nil {
296
+ return nil, nil, err
297
+ }
298
+ if len(progDiags) > 0 {
299
+ return nil, progDiags, nil
300
+ }
301
+
302
+ checker, done := tsProgram.GetTypeChecker(context.Background())
303
+ return &Program{
304
+ TSProgram: tsProgram,
305
+ ParsedConfig: parsed,
306
+ Checker: checker,
307
+ checkerRelease: done,
308
+ Host: host,
309
+ FS: fs,
310
+ }, nil, nil
295
311
  }
296
312
 
297
313
  func forceEmit(parsed *tsoptions.ParsedCommandLine) {
298
- if parsed == nil || parsed.ParsedConfig == nil || parsed.ParsedConfig.CompilerOptions == nil {
299
- return
300
- }
301
- options := parsed.ParsedConfig.CompilerOptions
302
- options.NoEmit = core.TSFalse
303
- options.EmitDeclarationOnly = core.TSFalse
314
+ if parsed == nil || parsed.ParsedConfig == nil || parsed.ParsedConfig.CompilerOptions == nil {
315
+ return
316
+ }
317
+ options := parsed.ParsedConfig.CompilerOptions
318
+ options.NoEmit = core.TSFalse
319
+ options.EmitDeclarationOnly = core.TSFalse
304
320
  }
305
321
 
306
322
  func forceNoEmit(parsed *tsoptions.ParsedCommandLine) {
307
- if parsed == nil || parsed.ParsedConfig == nil || parsed.ParsedConfig.CompilerOptions == nil {
308
- return
309
- }
310
- parsed.ParsedConfig.CompilerOptions.NoEmit = core.TSTrue
323
+ if parsed == nil || parsed.ParsedConfig == nil || parsed.ParsedConfig.CompilerOptions == nil {
324
+ return
325
+ }
326
+ parsed.ParsedConfig.CompilerOptions.NoEmit = core.TSTrue
311
327
  }
312
328
 
313
329
  func overrideOutDir(cwd string, parsed *tsoptions.ParsedCommandLine, outDir string) {
314
- if parsed == nil || parsed.ParsedConfig == nil || parsed.ParsedConfig.CompilerOptions == nil {
315
- return
316
- }
317
- parsed.ParsedConfig.CompilerOptions.OutDir = tspath.ResolvePath(cwd, outDir)
330
+ if parsed == nil || parsed.ParsedConfig == nil || parsed.ParsedConfig.CompilerOptions == nil {
331
+ return
332
+ }
333
+ parsed.ParsedConfig.CompilerOptions.OutDir = tspath.ResolvePath(cwd, outDir)
334
+ }
335
+
336
+ type sourcePreambleFS struct {
337
+ vfs.FS
338
+ preamble string
339
+ }
340
+
341
+ func (fs sourcePreambleFS) ReadFile(filePath string) (string, bool) {
342
+ contents, ok := fs.FS.ReadFile(filePath)
343
+ if !ok || !isSourcePreambleTarget(filePath) {
344
+ return contents, ok
345
+ }
346
+ return fs.preamble + contents, true
347
+ }
348
+
349
+ func (fs sourcePreambleFS) WriteFile(filePath string, data string) error {
350
+ return fs.FS.WriteFile(filePath, data)
351
+ }
352
+
353
+ func (fs sourcePreambleFS) AppendFile(filePath string, data string) error {
354
+ return fs.FS.AppendFile(filePath, data)
355
+ }
356
+
357
+ func (fs sourcePreambleFS) Remove(filePath string) error {
358
+ return fs.FS.Remove(filePath)
359
+ }
360
+
361
+ func (fs sourcePreambleFS) Chtimes(filePath string, aTime time.Time, mTime time.Time) error {
362
+ return fs.FS.Chtimes(filePath, aTime, mTime)
363
+ }
364
+
365
+ func isSourcePreambleTarget(filePath string) bool {
366
+ lower := strings.ToLower(filepath.ToSlash(filePath))
367
+ for _, suffix := range []string{".d.ts", ".d.mts", ".d.cts"} {
368
+ if strings.HasSuffix(lower, suffix) {
369
+ return false
370
+ }
371
+ }
372
+ for _, suffix := range []string{".ts", ".tsx", ".mts", ".cts", ".js", ".jsx", ".mjs", ".cjs"} {
373
+ if strings.HasSuffix(lower, suffix) {
374
+ return true
375
+ }
376
+ }
377
+ return false
318
378
  }
319
379
 
320
380
  // SourceFiles exposes the program's user-authored source files (declaration
321
381
  // files filtered out).
322
382
  func (p *Program) SourceFiles() []*ast.SourceFile {
323
- out := make([]*ast.SourceFile, 0)
324
- for _, f := range p.TSProgram.SourceFiles() {
325
- if f.IsDeclarationFile {
326
- continue
327
- }
328
- out = append(out, f)
329
- }
330
- return out
383
+ out := make([]*ast.SourceFile, 0)
384
+ for _, f := range p.TSProgram.SourceFiles() {
385
+ if f.IsDeclarationFile {
386
+ continue
387
+ }
388
+ out = append(out, f)
389
+ }
390
+ return out
331
391
  }
332
392
 
333
393
  // Diagnostics returns project diagnostics that must block compilation or
334
394
  // runtime execution before any JavaScript is emitted or evaluated.
335
395
  func (p *Program) Diagnostics() []Diagnostic {
336
- if p == nil || p.TSProgram == nil {
337
- return []Diagnostic{{Message: "driver: nil program"}}
338
- }
339
- ctx := context.Background()
340
- raw := shimcompiler.GetDiagnosticsOfAnyProgram(
341
- ctx,
342
- p.TSProgram,
343
- nil,
344
- false,
345
- p.TSProgram.GetBindDiagnostics,
346
- p.TSProgram.GetSemanticDiagnostics,
347
- )
348
- raw = filterDiagnostics(raw)
349
- return convertDiagnostics(shimcompiler.SortAndDeduplicateDiagnostics(raw))
396
+ if p == nil || p.TSProgram == nil {
397
+ return []Diagnostic{{Message: "driver: nil program"}}
398
+ }
399
+ ctx := context.Background()
400
+ raw := shimcompiler.GetDiagnosticsOfAnyProgram(
401
+ ctx,
402
+ p.TSProgram,
403
+ nil,
404
+ false,
405
+ p.TSProgram.GetBindDiagnostics,
406
+ p.TSProgram.GetSemanticDiagnostics,
407
+ )
408
+ raw = filterDiagnostics(raw)
409
+ return convertDiagnostics(shimcompiler.SortAndDeduplicateDiagnostics(raw))
350
410
  }
351
411
 
352
412
  func filterDiagnostics(in []*ast.Diagnostic) []*ast.Diagnostic {
353
- out := in[:0]
354
- for _, d := range in {
355
- if isUnusedOverloadSignatureTypeParameterDiagnostic(d) {
356
- continue
357
- }
358
- out = append(out, d)
359
- }
360
- return out
413
+ out := in[:0]
414
+ for _, d := range in {
415
+ if isUnusedOverloadSignatureTypeParameterDiagnostic(d) {
416
+ continue
417
+ }
418
+ out = append(out, d)
419
+ }
420
+ return out
361
421
  }
362
422
 
363
423
  func isUnusedOverloadSignatureTypeParameterDiagnostic(d *ast.Diagnostic) bool {
364
- if d == nil || d.File() == nil {
365
- return false
366
- }
367
- switch d.Code() {
368
- case 6196, 6205: // unused declaration / all type parameters are unused
369
- default:
370
- return false
371
- }
372
- node := ast.GetNodeAtPosition(d.File(), d.Pos(), false)
373
- for node != nil {
374
- if node.Kind == ast.KindFunctionDeclaration {
375
- return node.Body() == nil
376
- }
377
- node = node.Parent
378
- }
379
- return false
424
+ if d == nil || d.File() == nil {
425
+ return false
426
+ }
427
+ switch d.Code() {
428
+ case 6196, 6205: // unused declaration / all type parameters are unused
429
+ default:
430
+ return false
431
+ }
432
+ node := ast.GetNodeAtPosition(d.File(), d.Pos(), false)
433
+ for node != nil {
434
+ if node.Kind == ast.KindFunctionDeclaration {
435
+ return node.Body() == nil
436
+ }
437
+ node = node.Parent
438
+ }
439
+ return false
380
440
  }
381
441
 
382
442
  // convertDiagnostics translates shim-specific diagnostics into the plain
383
443
  // Diagnostic struct with line/column populated via tsgo's ECMALineMap (the
384
444
  // same helper tsc uses for its "file:line:col: message" banner).
385
445
  func convertDiagnostics(in []*ast.Diagnostic) []Diagnostic {
386
- out := make([]Diagnostic, 0, len(in))
387
- for _, d := range in {
388
- if d == nil {
389
- continue
390
- }
391
- diag := Diagnostic{Message: d.String(), raw: d}
392
- if file := d.File(); file != nil {
393
- diag.File = file.FileName()
394
- if pos := d.Pos(); pos >= 0 {
395
- line, col := shimscanner.GetECMALineAndByteOffsetOfPosition(file, pos)
396
- diag.Line = line + 1
397
- diag.Column = col + 1
398
- }
399
- }
400
- out = append(out, diag)
401
- }
402
- return out
446
+ out := make([]Diagnostic, 0, len(in))
447
+ for _, d := range in {
448
+ if d == nil {
449
+ continue
450
+ }
451
+ diag := Diagnostic{Code: d.Code(), Message: d.String(), raw: d}
452
+ if file := d.File(); file != nil {
453
+ diag.File = file.FileName()
454
+ if pos := d.Pos(); pos >= 0 {
455
+ length := d.Len()
456
+ diag.Start = &pos
457
+ diag.Length = &length
458
+ line, col := shimscanner.GetECMALineAndByteOffsetOfPosition(file, pos)
459
+ diag.Line = line + 1
460
+ diag.Column = col + 1
461
+ }
462
+ }
463
+ out = append(out, diag)
464
+ }
465
+ return out
403
466
  }