typia 13.1.1 → 13.2.0

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 (581) hide show
  1. package/README.md +3 -0
  2. package/lib/_virtual/_rolldown/runtime.mjs +1 -5
  3. package/lib/executable/FileSystemIdentity.d.ts +44 -0
  4. package/lib/executable/FileSystemIdentity.js +213 -0
  5. package/lib/executable/FileSystemIdentity.js.map +1 -0
  6. package/lib/executable/FileSystemIdentity.mjs +133 -0
  7. package/lib/executable/FileSystemIdentity.mjs.map +1 -0
  8. package/lib/executable/TypiaGenerateWizard.js +272 -106
  9. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  10. package/lib/executable/TypiaGenerateWizard.mjs +239 -95
  11. package/lib/executable/TypiaGenerateWizard.mjs.map +1 -1
  12. package/lib/functional.d.ts +15 -12
  13. package/lib/functional.js.map +1 -1
  14. package/lib/functional.mjs.map +1 -1
  15. package/lib/internal/_ProtobufReader.d.ts +32 -0
  16. package/lib/internal/_ProtobufReader.js +148 -48
  17. package/lib/internal/_ProtobufReader.js.map +1 -1
  18. package/lib/internal/_ProtobufReader.mjs +137 -41
  19. package/lib/internal/_ProtobufReader.mjs.map +1 -1
  20. package/lib/internal/_createStandardSchema.js +18 -1
  21. package/lib/internal/_createStandardSchema.js.map +1 -1
  22. package/lib/internal/_createStandardSchema.mjs +12 -1
  23. package/lib/internal/_createStandardSchema.mjs.map +1 -1
  24. package/lib/internal/_decimal.d.ts +14 -0
  25. package/lib/internal/_decimal.js +61 -0
  26. package/lib/internal/_decimal.js.map +1 -0
  27. package/lib/internal/_decimal.mjs +49 -0
  28. package/lib/internal/_decimal.mjs.map +1 -0
  29. package/lib/internal/_httpQueryParseURLSearchParams.js +23 -2
  30. package/lib/internal/_httpQueryParseURLSearchParams.js.map +1 -1
  31. package/lib/internal/_httpQueryParseURLSearchParams.mjs +20 -2
  32. package/lib/internal/_httpQueryParseURLSearchParams.mjs.map +1 -1
  33. package/lib/internal/_isFormatByte.js +2 -5
  34. package/lib/internal/_isFormatByte.js.map +1 -1
  35. package/lib/internal/_isFormatByte.mjs +2 -5
  36. package/lib/internal/_isFormatByte.mjs.map +1 -1
  37. package/lib/internal/_isFormatDate.js +15 -2
  38. package/lib/internal/_isFormatDate.js.map +1 -1
  39. package/lib/internal/_isFormatDate.mjs +22 -2
  40. package/lib/internal/_isFormatDate.mjs.map +1 -1
  41. package/lib/internal/_isFormatDateTime.js +21 -2
  42. package/lib/internal/_isFormatDateTime.js.map +1 -1
  43. package/lib/internal/_isFormatDateTime.mjs +13 -2
  44. package/lib/internal/_isFormatDateTime.mjs.map +1 -1
  45. package/lib/internal/_isFormatIri.js +3 -2
  46. package/lib/internal/_isFormatIri.js.map +1 -1
  47. package/lib/internal/_isFormatIri.mjs +3 -2
  48. package/lib/internal/_isFormatIri.mjs.map +1 -1
  49. package/lib/internal/_isFormatIriReference.js +10 -2
  50. package/lib/internal/_isFormatIriReference.js.map +1 -1
  51. package/lib/internal/_isFormatIriReference.mjs +9 -2
  52. package/lib/internal/_isFormatIriReference.mjs.map +1 -1
  53. package/lib/internal/_isFormatUriReference.js +1 -1
  54. package/lib/internal/_isFormatUriReference.js.map +1 -1
  55. package/lib/internal/_isFormatUriReference.mjs +1 -1
  56. package/lib/internal/_isFormatUriReference.mjs.map +1 -1
  57. package/lib/internal/_isMultipleOf.d.ts +1 -0
  58. package/lib/internal/_isMultipleOf.js +13 -0
  59. package/lib/internal/_isMultipleOf.js.map +1 -0
  60. package/lib/internal/_isMultipleOf.mjs +12 -0
  61. package/lib/internal/_isMultipleOf.mjs.map +1 -0
  62. package/lib/internal/_isTypeFloat.js +1 -1
  63. package/lib/internal/_isTypeFloat.js.map +1 -1
  64. package/lib/internal/_isTypeFloat.mjs +1 -1
  65. package/lib/internal/_isTypeFloat.mjs.map +1 -1
  66. package/lib/internal/_isTypeInt64.js +1 -0
  67. package/lib/internal/_isTypeInt64.js.map +1 -1
  68. package/lib/internal/_isTypeInt64.mjs.map +1 -1
  69. package/lib/internal/_isTypeInt64Bigint.d.ts +1 -0
  70. package/lib/internal/_isTypeInt64Bigint.js +15 -0
  71. package/lib/internal/_isTypeInt64Bigint.js.map +1 -0
  72. package/lib/internal/_isTypeInt64Bigint.mjs +8 -0
  73. package/lib/internal/_isTypeInt64Bigint.mjs.map +1 -0
  74. package/lib/internal/_isTypeUint64.js +1 -0
  75. package/lib/internal/_isTypeUint64.js.map +1 -1
  76. package/lib/internal/_isTypeUint64.mjs.map +1 -1
  77. package/lib/internal/_isTypeUint64Bigint.d.ts +1 -0
  78. package/lib/internal/_isTypeUint64Bigint.js +10 -0
  79. package/lib/internal/_isTypeUint64Bigint.js.map +1 -0
  80. package/lib/internal/_isTypeUint64Bigint.mjs +8 -0
  81. package/lib/internal/_isTypeUint64Bigint.mjs.map +1 -0
  82. package/lib/internal/_isUniqueItems.js +96 -109
  83. package/lib/internal/_isUniqueItems.js.map +1 -1
  84. package/lib/internal/_isUniqueItems.mjs +62 -50
  85. package/lib/internal/_isUniqueItems.mjs.map +1 -1
  86. package/lib/internal/_jsonStringifyArray.d.ts +1 -0
  87. package/lib/internal/_jsonStringifyArray.js +48 -0
  88. package/lib/internal/_jsonStringifyArray.js.map +1 -0
  89. package/lib/internal/_jsonStringifyArray.mjs +40 -0
  90. package/lib/internal/_jsonStringifyArray.mjs.map +1 -0
  91. package/lib/internal/_jsonStringifyElement.d.ts +1 -0
  92. package/lib/internal/_jsonStringifyElement.js +23 -0
  93. package/lib/internal/_jsonStringifyElement.js.map +1 -0
  94. package/lib/internal/_jsonStringifyElement.mjs +23 -0
  95. package/lib/internal/_jsonStringifyElement.mjs.map +1 -0
  96. package/lib/internal/_jsonStringifyProperty.d.ts +1 -0
  97. package/lib/internal/_jsonStringifyProperty.js +31 -0
  98. package/lib/internal/_jsonStringifyProperty.js.map +1 -0
  99. package/lib/internal/_jsonStringifyProperty.mjs +31 -0
  100. package/lib/internal/_jsonStringifyProperty.mjs.map +1 -0
  101. package/lib/internal/_llmApplicationFinalize.js +1 -1
  102. package/lib/internal/_llmApplicationFinalize.js.map +1 -1
  103. package/lib/internal/_llmApplicationFinalize.mjs +1 -1
  104. package/lib/internal/_llmApplicationFinalize.mjs.map +1 -1
  105. package/lib/internal/_notationAny.js +8 -1
  106. package/lib/internal/_notationAny.js.map +1 -1
  107. package/lib/internal/_notationAny.mjs +7 -1
  108. package/lib/internal/_notationAny.mjs.map +1 -1
  109. package/lib/internal/_notationAssign.d.ts +1 -0
  110. package/lib/internal/_notationAssign.js +18 -0
  111. package/lib/internal/_notationAssign.js.map +1 -0
  112. package/lib/internal/_notationAssign.mjs +17 -0
  113. package/lib/internal/_notationAssign.mjs.map +1 -0
  114. package/lib/internal/_notationCamel.js +30 -9
  115. package/lib/internal/_notationCamel.js.map +1 -1
  116. package/lib/internal/_notationCamel.mjs +13 -5
  117. package/lib/internal/_notationCamel.mjs.map +1 -1
  118. package/lib/internal/_notationKebab.d.ts +1 -0
  119. package/lib/internal/_notationKebab.js +15 -0
  120. package/lib/internal/_notationKebab.js.map +1 -0
  121. package/lib/internal/_notationKebab.mjs +15 -0
  122. package/lib/internal/_notationKebab.mjs.map +1 -0
  123. package/lib/internal/_notationKeyCollision.d.ts +1 -0
  124. package/lib/internal/_notationKeyCollision.js +8 -0
  125. package/lib/internal/_notationKeyCollision.js.map +1 -0
  126. package/lib/internal/_notationKeyCollision.mjs +8 -0
  127. package/lib/internal/_notationKeyCollision.mjs.map +1 -0
  128. package/lib/internal/_notationPascal.js +20 -5
  129. package/lib/internal/_notationPascal.js.map +1 -1
  130. package/lib/internal/_notationPascal.mjs +10 -5
  131. package/lib/internal/_notationPascal.mjs.map +1 -1
  132. package/lib/internal/_notationSnake.js +25 -22
  133. package/lib/internal/_notationSnake.js.map +1 -1
  134. package/lib/internal/_notationSnake.mjs +11 -11
  135. package/lib/internal/_notationSnake.mjs.map +1 -1
  136. package/lib/internal/_plainCloneAny.js +174 -38
  137. package/lib/internal/_plainCloneAny.js.map +1 -1
  138. package/lib/internal/_plainCloneAny.mjs +126 -22
  139. package/lib/internal/_plainCloneAny.mjs.map +1 -1
  140. package/lib/internal/_randomArray.d.ts +1 -1
  141. package/lib/internal/_randomArray.js +11 -4
  142. package/lib/internal/_randomArray.js.map +1 -1
  143. package/lib/internal/_randomArray.mjs +9 -3
  144. package/lib/internal/_randomArray.mjs.map +1 -1
  145. package/lib/internal/_randomFormatByte.d.ts +2 -1
  146. package/lib/internal/_randomFormatByte.js +25 -1
  147. package/lib/internal/_randomFormatByte.js.map +1 -1
  148. package/lib/internal/_randomFormatByte.mjs +20 -1
  149. package/lib/internal/_randomFormatByte.mjs.map +1 -1
  150. package/lib/internal/_randomFormatDate.d.ts +3 -4
  151. package/lib/internal/_randomFormatDate.js +3 -10
  152. package/lib/internal/_randomFormatDate.js.map +1 -1
  153. package/lib/internal/_randomFormatDate.mjs +3 -6
  154. package/lib/internal/_randomFormatDate.mjs.map +1 -1
  155. package/lib/internal/_randomFormatDatetime.d.ts +3 -4
  156. package/lib/internal/_randomFormatDatetime.js +26 -8
  157. package/lib/internal/_randomFormatDatetime.js.map +1 -1
  158. package/lib/internal/_randomFormatDatetime.mjs +17 -6
  159. package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
  160. package/lib/internal/_randomFormatDuration.d.ts +2 -1
  161. package/lib/internal/_randomFormatDuration.js +23 -14
  162. package/lib/internal/_randomFormatDuration.js.map +1 -1
  163. package/lib/internal/_randomFormatDuration.mjs +22 -13
  164. package/lib/internal/_randomFormatDuration.mjs.map +1 -1
  165. package/lib/internal/_randomFormatEmail.d.ts +2 -1
  166. package/lib/internal/_randomFormatEmail.js +8 -1
  167. package/lib/internal/_randomFormatEmail.js.map +1 -1
  168. package/lib/internal/_randomFormatEmail.mjs +5 -1
  169. package/lib/internal/_randomFormatEmail.mjs.map +1 -1
  170. package/lib/internal/_randomFormatHostname.d.ts +8 -1
  171. package/lib/internal/_randomFormatHostname.js +45 -2
  172. package/lib/internal/_randomFormatHostname.js.map +1 -1
  173. package/lib/internal/_randomFormatHostname.mjs +38 -2
  174. package/lib/internal/_randomFormatHostname.mjs.map +1 -1
  175. package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
  176. package/lib/internal/_randomFormatIdnEmail.js +16 -2
  177. package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
  178. package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
  179. package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
  180. package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
  181. package/lib/internal/_randomFormatIdnHostname.js +26 -1
  182. package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
  183. package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
  184. package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
  185. package/lib/internal/_randomFormatIpv4.d.ts +2 -1
  186. package/lib/internal/_randomFormatIpv4.js +32 -1
  187. package/lib/internal/_randomFormatIpv4.js.map +1 -1
  188. package/lib/internal/_randomFormatIpv4.mjs +23 -1
  189. package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
  190. package/lib/internal/_randomFormatIpv6.d.ts +2 -1
  191. package/lib/internal/_randomFormatIpv6.js +58 -1
  192. package/lib/internal/_randomFormatIpv6.js.map +1 -1
  193. package/lib/internal/_randomFormatIpv6.mjs +45 -1
  194. package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
  195. package/lib/internal/_randomFormatIri.d.ts +2 -1
  196. package/lib/internal/_randomFormatIri.js +1 -1
  197. package/lib/internal/_randomFormatIri.js.map +1 -1
  198. package/lib/internal/_randomFormatIri.mjs +1 -1
  199. package/lib/internal/_randomFormatIri.mjs.map +1 -1
  200. package/lib/internal/_randomFormatIriReference.d.ts +2 -1
  201. package/lib/internal/_randomFormatIriReference.js +1 -1
  202. package/lib/internal/_randomFormatIriReference.js.map +1 -1
  203. package/lib/internal/_randomFormatIriReference.mjs +1 -1
  204. package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
  205. package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
  206. package/lib/internal/_randomFormatJsonPointer.js +20 -1
  207. package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
  208. package/lib/internal/_randomFormatJsonPointer.mjs +15 -1
  209. package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
  210. package/lib/internal/_randomFormatPassword.d.ts +2 -1
  211. package/lib/internal/_randomFormatPassword.js +7 -5
  212. package/lib/internal/_randomFormatPassword.js.map +1 -1
  213. package/lib/internal/_randomFormatPassword.mjs +5 -1
  214. package/lib/internal/_randomFormatPassword.mjs.map +1 -1
  215. package/lib/internal/_randomFormatRegex.d.ts +2 -1
  216. package/lib/internal/_randomFormatRegex.js +15 -1
  217. package/lib/internal/_randomFormatRegex.js.map +1 -1
  218. package/lib/internal/_randomFormatRegex.mjs +14 -1
  219. package/lib/internal/_randomFormatRegex.mjs.map +1 -1
  220. package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
  221. package/lib/internal/_randomFormatRelativeJsonPointer.js +20 -5
  222. package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
  223. package/lib/internal/_randomFormatRelativeJsonPointer.mjs +21 -5
  224. package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
  225. package/lib/internal/_randomFormatTime.d.ts +2 -1
  226. package/lib/internal/_randomFormatTime.js +34 -7
  227. package/lib/internal/_randomFormatTime.js.map +1 -1
  228. package/lib/internal/_randomFormatTime.mjs +37 -4
  229. package/lib/internal/_randomFormatTime.mjs.map +1 -1
  230. package/lib/internal/_randomFormatUri.d.ts +2 -1
  231. package/lib/internal/_randomFormatUri.js +1 -1
  232. package/lib/internal/_randomFormatUri.js.map +1 -1
  233. package/lib/internal/_randomFormatUri.mjs +1 -1
  234. package/lib/internal/_randomFormatUri.mjs.map +1 -1
  235. package/lib/internal/_randomFormatUriReference.d.ts +2 -1
  236. package/lib/internal/_randomFormatUriReference.js +1 -1
  237. package/lib/internal/_randomFormatUriReference.js.map +1 -1
  238. package/lib/internal/_randomFormatUriReference.mjs +1 -1
  239. package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
  240. package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
  241. package/lib/internal/_randomFormatUriTemplate.js +1 -1
  242. package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
  243. package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
  244. package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
  245. package/lib/internal/_randomFormatUrl.d.ts +2 -1
  246. package/lib/internal/_randomFormatUrl.js +21 -1
  247. package/lib/internal/_randomFormatUrl.js.map +1 -1
  248. package/lib/internal/_randomFormatUrl.mjs +18 -1
  249. package/lib/internal/_randomFormatUrl.mjs.map +1 -1
  250. package/lib/internal/_randomFormatUuid.d.ts +2 -1
  251. package/lib/internal/_randomFormatUuid.js +3 -2
  252. package/lib/internal/_randomFormatUuid.js.map +1 -1
  253. package/lib/internal/_randomFormatUuid.mjs +3 -2
  254. package/lib/internal/_randomFormatUuid.mjs.map +1 -1
  255. package/lib/internal/_randomInteger.js +59 -28
  256. package/lib/internal/_randomInteger.js.map +1 -1
  257. package/lib/internal/_randomInteger.mjs +56 -16
  258. package/lib/internal/_randomInteger.mjs.map +1 -1
  259. package/lib/internal/_randomMultiple.d.ts +8 -0
  260. package/lib/internal/_randomMultiple.js +168 -0
  261. package/lib/internal/_randomMultiple.js.map +1 -0
  262. package/lib/internal/_randomMultiple.mjs +158 -0
  263. package/lib/internal/_randomMultiple.mjs.map +1 -0
  264. package/lib/internal/_randomNumber.js +42 -42
  265. package/lib/internal/_randomNumber.js.map +1 -1
  266. package/lib/internal/_randomNumber.mjs +41 -27
  267. package/lib/internal/_randomNumber.mjs.map +1 -1
  268. package/lib/internal/_randomPattern.d.ts +2 -1
  269. package/lib/internal/_randomPattern.js +19 -4
  270. package/lib/internal/_randomPattern.js.map +1 -1
  271. package/lib/internal/_randomPattern.mjs +10 -4
  272. package/lib/internal/_randomPattern.mjs.map +1 -1
  273. package/lib/internal/_randomStringLength.d.ts +64 -0
  274. package/lib/internal/_randomStringLength.js +84 -0
  275. package/lib/internal/_randomStringLength.js.map +1 -0
  276. package/lib/internal/_randomStringLength.mjs +79 -0
  277. package/lib/internal/_randomStringLength.mjs.map +1 -0
  278. package/lib/internal/_stringLength.d.ts +1 -0
  279. package/lib/internal/_stringLength.js +11 -0
  280. package/lib/internal/_stringLength.js.map +1 -0
  281. package/lib/internal/_stringLength.mjs +10 -0
  282. package/lib/internal/_stringLength.mjs.map +1 -0
  283. package/lib/internal/_validateReport.js +4 -1
  284. package/lib/internal/_validateReport.js.map +1 -1
  285. package/lib/internal/_validateReport.mjs +2 -1
  286. package/lib/internal/_validateReport.mjs.map +1 -1
  287. package/lib/internal/private/__notationRename.d.ts +14 -0
  288. package/lib/internal/private/__notationRename.js +25 -0
  289. package/lib/internal/private/__notationRename.js.map +1 -0
  290. package/lib/internal/private/__notationRename.mjs +24 -0
  291. package/lib/internal/private/__notationRename.mjs.map +1 -0
  292. package/lib/internal/private/__randomComposition.d.ts +23 -0
  293. package/lib/internal/private/__randomComposition.js +48 -0
  294. package/lib/internal/private/__randomComposition.js.map +1 -0
  295. package/lib/internal/private/__randomComposition.mjs +54 -0
  296. package/lib/internal/private/__randomComposition.mjs.map +1 -0
  297. package/lib/internal/private/__randomEpoch.d.ts +19 -0
  298. package/lib/internal/private/__randomEpoch.js +31 -0
  299. package/lib/internal/private/__randomEpoch.js.map +1 -0
  300. package/lib/internal/private/__randomEpoch.mjs +28 -0
  301. package/lib/internal/private/__randomEpoch.mjs.map +1 -0
  302. package/lib/json.d.ts +2 -2
  303. package/lib/json.mjs.map +1 -1
  304. package/lib/module.d.ts +2 -2
  305. package/lib/module.js.map +1 -1
  306. package/lib/module.mjs.map +1 -1
  307. package/lib/notations.d.ts +20 -4
  308. package/lib/notations.js.map +1 -1
  309. package/lib/notations.mjs.map +1 -1
  310. package/native/adapter/plugin_options.go +117 -0
  311. package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
  312. package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
  313. package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
  314. package/native/cmd/ttsc-typia/build.go +84 -64
  315. package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
  316. package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
  317. package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
  318. package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
  319. package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
  320. package/native/cmd/ttsc-typia/callable_interface_function_semantics_transform_test.go +331 -0
  321. package/native/cmd/ttsc-typia/callable_type_literal_boundaries_transform_test.go +1184 -0
  322. package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
  323. package/native/cmd/ttsc-typia/compare_functional_union_membership_transform_test.go +434 -0
  324. package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
  325. package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
  326. package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
  327. package/native/cmd/ttsc-typia/compare_template_literal_union_transform_test.go +241 -0
  328. package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
  329. package/native/cmd/ttsc-typia/default_library_spoof_native_identity_transform_test.go +216 -0
  330. package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
  331. package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
  332. package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
  333. package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
  334. package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
  335. package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
  336. package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
  337. package/native/cmd/ttsc-typia/json_schema_dynamic_key_determinism_transform_test.go +246 -0
  338. package/native/cmd/ttsc-typia/json_stringify_contextual_undefined_transform_test.go +556 -0
  339. package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
  340. package/native/cmd/ttsc-typia/lib_replacement_native_identity_transform_test.go +277 -0
  341. package/native/cmd/ttsc-typia/main_wasm.go +21 -2
  342. package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
  343. package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
  344. package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
  345. package/native/cmd/ttsc-typia/native_named_intersection_union_transform_test.go +390 -0
  346. package/native/cmd/ttsc-typia/node_buffer_native_exports_is_transform_test.go +526 -0
  347. package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
  348. package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
  349. package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
  350. package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
  351. package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
  352. package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
  353. package/native/cmd/ttsc-typia/package_declaration_native_identity_is_transform_test.go +293 -0
  354. package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
  355. package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
  356. package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
  357. package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
  358. package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
  359. package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
  360. package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
  361. package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
  362. package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
  363. package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
  364. package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
  365. package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
  366. package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
  367. package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
  368. package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
  369. package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
  370. package/native/cmd/ttsc-typia/protobuf_diagnostic_code_transform_test.go +167 -0
  371. package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
  372. package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
  373. package/native/cmd/ttsc-typia/symbol_index_domain_transform_test.go +316 -0
  374. package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
  375. package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
  376. package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
  377. package/native/cmd/ttsc-typia/transform.go +251 -39
  378. package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
  379. package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
  380. package/native/cmd/ttsc-typia/transform_helpers_test.go +236 -3
  381. package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
  382. package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
  383. package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
  384. package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
  385. package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
  386. package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
  387. package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
  388. package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
  389. package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
  390. package/native/cmd/ttsc-typia/user_global_native_identity_transform_test.go +484 -0
  391. package/native/core/factories/FormatCheatSheet.go +40 -7
  392. package/native/core/factories/IdentifierFactory.go +131 -4
  393. package/native/core/factories/MetadataCommentTagFactory.go +83 -40
  394. package/native/core/factories/MetadataTypeTagFactory.go +13 -1
  395. package/native/core/factories/NumericRangeFactory.go +60 -17
  396. package/native/core/factories/ProtobufFactory.go +13 -5
  397. package/native/core/factories/factory_utility_coverage_test.go +8 -2
  398. package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
  399. package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
  400. package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
  401. package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
  402. package/native/core/factories/internal/metadata/MetadataHelper.go +226 -17
  403. package/native/core/factories/internal/metadata/emplace_metadata_object.go +141 -8
  404. package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
  405. package/native/core/factories/internal/metadata/iterate_metadata_function.go +5 -12
  406. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +111 -29
  407. package/native/core/factories/internal/metadata/iterate_metadata_map.go +5 -0
  408. package/native/core/factories/internal/metadata/iterate_metadata_native.go +45 -2
  409. package/native/core/factories/internal/metadata/iterate_metadata_set.go +5 -0
  410. package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
  411. package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
  412. package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
  413. package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
  414. package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
  415. package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
  416. package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
  417. package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
  418. package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
  419. package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
  420. package/native/core/programmers/IsProgrammer.go +15 -1
  421. package/native/core/programmers/RandomProgrammer.go +51 -14
  422. package/native/core/programmers/compare/CompareEqualProgrammer.go +410 -8
  423. package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
  424. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
  425. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
  426. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
  427. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
  428. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
  429. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
  430. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
  431. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
  432. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
  433. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
  434. package/native/core/programmers/helpers/CloneJoiner.go +32 -0
  435. package/native/core/programmers/helpers/FunctionProgrammer.go +6 -13
  436. package/native/core/programmers/helpers/NotationJoiner.go +86 -28
  437. package/native/core/programmers/helpers/StringifyJoinder.go +161 -51
  438. package/native/core/programmers/helpers/UnionExplorer.go +203 -61
  439. package/native/core/programmers/helpers/joiner_branch_coverage_test.go +116 -118
  440. package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
  441. package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
  442. package/native/core/programmers/iterate/check_template.go +344 -32
  443. package/native/core/programmers/iterate/iterate_check_coverage_test.go +76 -158
  444. package/native/core/programmers/iterate/iterate_utility_coverage_test.go +231 -270
  445. package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
  446. package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
  447. package/native/core/programmers/iterate/json_schema_object.go +49 -7
  448. package/native/core/programmers/iterate/json_schema_pattern_property_order_test.go +44 -0
  449. package/native/core/programmers/iterate/openapi_v3_downgrader.go +674 -0
  450. package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
  451. package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
  452. package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
  453. package/native/core/programmers/iterate/template_runtime_pattern.go +63 -7
  454. package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
  455. package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
  456. package/native/core/programmers/json/JsonStringifyProgrammer.go +47 -6
  457. package/native/core/programmers/llm/LlmApplicationProgrammer.go +21 -11
  458. package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
  459. package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
  460. package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
  461. package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
  462. package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
  463. package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
  464. package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
  465. package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
  466. package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
  467. package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
  468. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
  469. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +41 -22
  470. package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
  471. package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
  472. package/native/core/schemas/metadata/MetadataCollection.go +266 -25
  473. package/native/core/schemas/metadata/MetadataDefaultLibrary.go +81 -0
  474. package/native/core/schemas/metadata/MetadataDependency.go +388 -0
  475. package/native/core/schemas/metadata/MetadataObjectType.go +24 -22
  476. package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
  477. package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
  478. package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
  479. package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
  480. package/native/core/utils/PatternUtil.go +13 -0
  481. package/native/core/utils/PromiseTypeFactory.go +59 -0
  482. package/native/core/utils/ProtobufNameEncoder.go +8 -0
  483. package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
  484. package/native/go.mod +9 -1
  485. package/native/transform/CallExpressionTransformer.go +12 -0
  486. package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
  487. package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
  488. package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
  489. package/native/transform/features/protobuf/ProtobufMessageTransformer.go +1 -1
  490. package/package.json +12 -4
  491. package/src/executable/FileSystemIdentity.ts +222 -0
  492. package/src/executable/TypiaGenerateWizard.ts +386 -113
  493. package/src/functional.ts +30 -60
  494. package/src/internal/_ProtobufReader.ts +161 -46
  495. package/src/internal/_createStandardSchema.ts +15 -1
  496. package/src/internal/_decimal.ts +69 -0
  497. package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
  498. package/src/internal/_isFormatByte.ts +2 -5
  499. package/src/internal/_isFormatDate.ts +15 -2
  500. package/src/internal/_isFormatDateTime.ts +28 -2
  501. package/src/internal/_isFormatIri.ts +5 -2
  502. package/src/internal/_isFormatIriReference.ts +11 -3
  503. package/src/internal/_isFormatUriReference.ts +1 -1
  504. package/src/internal/_isMultipleOf.ts +8 -0
  505. package/src/internal/_isTypeFloat.ts +1 -1
  506. package/src/internal/_isTypeInt64.ts +1 -0
  507. package/src/internal/_isTypeInt64Bigint.ts +12 -0
  508. package/src/internal/_isTypeUint64.ts +1 -0
  509. package/src/internal/_isTypeUint64Bigint.ts +7 -0
  510. package/src/internal/_isUniqueItems.ts +134 -132
  511. package/src/internal/_jsonStringifyArray.ts +50 -0
  512. package/src/internal/_jsonStringifyElement.ts +19 -0
  513. package/src/internal/_jsonStringifyProperty.ts +30 -0
  514. package/src/internal/_llmApplicationFinalize.ts +6 -1
  515. package/src/internal/_notationAny.ts +9 -4
  516. package/src/internal/_notationAssign.ts +20 -0
  517. package/src/internal/_notationCamel.ts +31 -10
  518. package/src/internal/_notationKebab.ts +11 -0
  519. package/src/internal/_notationKeyCollision.ts +9 -0
  520. package/src/internal/_notationPascal.ts +19 -6
  521. package/src/internal/_notationSnake.ts +24 -21
  522. package/src/internal/_plainCloneAny.ts +208 -33
  523. package/src/internal/_randomArray.ts +13 -4
  524. package/src/internal/_randomFormatByte.ts +31 -1
  525. package/src/internal/_randomFormatDate.ts +6 -17
  526. package/src/internal/_randomFormatDatetime.ts +34 -15
  527. package/src/internal/_randomFormatDuration.ts +30 -13
  528. package/src/internal/_randomFormatEmail.ts +8 -2
  529. package/src/internal/_randomFormatHostname.ts +48 -1
  530. package/src/internal/_randomFormatIdnEmail.ts +18 -2
  531. package/src/internal/_randomFormatIdnHostname.ts +34 -2
  532. package/src/internal/_randomFormatIpv4.ts +43 -2
  533. package/src/internal/_randomFormatIpv6.ts +67 -2
  534. package/src/internal/_randomFormatIri.ts +3 -1
  535. package/src/internal/_randomFormatIriReference.ts +3 -1
  536. package/src/internal/_randomFormatJsonPointer.ts +28 -2
  537. package/src/internal/_randomFormatPassword.ts +11 -6
  538. package/src/internal/_randomFormatRegex.ts +22 -1
  539. package/src/internal/_randomFormatRelativeJsonPointer.ts +26 -6
  540. package/src/internal/_randomFormatTime.ts +46 -10
  541. package/src/internal/_randomFormatUri.ts +3 -1
  542. package/src/internal/_randomFormatUriReference.ts +3 -1
  543. package/src/internal/_randomFormatUriTemplate.ts +3 -1
  544. package/src/internal/_randomFormatUrl.ts +25 -2
  545. package/src/internal/_randomFormatUuid.ts +10 -6
  546. package/src/internal/_randomInteger.ts +87 -40
  547. package/src/internal/_randomMultiple.ts +245 -0
  548. package/src/internal/_randomNumber.ts +72 -55
  549. package/src/internal/_randomPattern.ts +29 -4
  550. package/src/internal/_randomStringLength.ts +116 -0
  551. package/src/internal/_stringLength.ts +5 -0
  552. package/src/internal/_validateReport.ts +5 -1
  553. package/src/internal/private/__notationRename.ts +21 -0
  554. package/src/internal/private/__randomComposition.ts +50 -0
  555. package/src/internal/private/__randomEpoch.ts +34 -0
  556. package/src/json.ts +2 -2
  557. package/src/module.ts +4 -6
  558. package/src/notations.ts +20 -4
  559. package/lib/internal/private/__notationCapitalize.d.ts +0 -1
  560. package/lib/internal/private/__notationCapitalize.js +0 -6
  561. package/lib/internal/private/__notationCapitalize.js.map +0 -1
  562. package/lib/internal/private/__notationCapitalize.mjs +0 -6
  563. package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
  564. package/lib/internal/private/__notationUnsnake.d.ts +0 -4
  565. package/lib/internal/private/__notationUnsnake.js +0 -26
  566. package/lib/internal/private/__notationUnsnake.js.map +0 -1
  567. package/lib/internal/private/__notationUnsnake.mjs +0 -15
  568. package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
  569. package/native/adapter/visit.go +0 -173
  570. package/native/adapter/visit_property_chain_edges_test.go +0 -129
  571. package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
  572. package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
  573. package/native/core/programmers/helpers/disable_function_programmer_declare.go +0 -10
  574. package/native/core/programmers/iterate/check_union_array_like.go +0 -422
  575. package/native/core/programmers/iterate/prune_object_properties.go +0 -105
  576. package/native/core/programmers/iterate/stringify_dynamic_properties.go +0 -219
  577. package/native/core/programmers/iterate/stringify_native.go +0 -14
  578. package/native/core/programmers/iterate/stringify_regular_properties.go +0 -112
  579. package/native/core/schemas/metadata/MetadataApplication.go +0 -41
  580. package/src/internal/private/__notationCapitalize.ts +0 -2
  581. package/src/internal/private/__notationUnsnake.ts +0 -24
@@ -7,13 +7,16 @@ import (
7
7
  "fmt"
8
8
  "os"
9
9
  "path/filepath"
10
+ "sort"
10
11
  "strings"
11
12
 
12
13
  shimast "github.com/microsoft/typescript-go/shim/ast"
13
14
  shimcompiler "github.com/microsoft/typescript-go/shim/compiler"
14
15
  shimprinter "github.com/microsoft/typescript-go/shim/printer"
15
16
  "github.com/samchon/ttsc/packages/ttsc/driver"
17
+ typiaadapter "github.com/samchon/typia/packages/typia/native/adapter"
16
18
  nativecontext "github.com/samchon/typia/packages/typia/native/core/context"
19
+ schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
17
20
  nativetransform "github.com/samchon/typia/packages/typia/native/transform"
18
21
  )
19
22
 
@@ -24,6 +27,10 @@ import (
24
27
  // transformers), so injected namespace imports stay as ES imports the caller
25
28
  // can type-strip per file. With no --file it emits a JSON envelope of every
26
29
  // project source keyed by its cwd-relative path; with --file it prints one file.
30
+ //
31
+ // Every host here consults the same transformDiags before choosing its exit code
32
+ // and before publishing anything: runTransformProject encodes them and returns 3,
33
+ // runTransformSingle reports them and withholds the artifact.
27
34
  func runTransform(args []string) int {
28
35
  fs := flag.NewFlagSet("transform", flag.ContinueOnError)
29
36
  fs.SetOutput(stderr)
@@ -33,7 +40,7 @@ func runTransform(args []string) int {
33
40
  out := fs.String("out", "", "write single-file output to PATH instead of stdout")
34
41
  rewriteMode := fs.String("rewrite-mode", "typia", "native rewrite backend id")
35
42
  output := fs.String("output", defaultTransformOutput(), "single-file output kind: js or ts")
36
- _ = fs.String("plugins-json", "", "ordered ttsc plugin payload")
43
+ pluginsJSON := fs.String("plugins-json", "", "ordered ttsc plugin payload")
37
44
  if err := fs.Parse(args); err != nil {
38
45
  return 2
39
46
  }
@@ -45,11 +52,17 @@ func runTransform(args []string) int {
45
52
  fmt.Fprintf(stderr, "ttsc-typia transform: unknown --output value %q\n", *output)
46
53
  return 2
47
54
  }
55
+ // Resolve the options before loading the program: they come from the payload
56
+ // alone, so an unreadable manifest is a usage error to report now rather than
57
+ // after a full transform has already run under the wrong configuration.
58
+ pluginOptions, err := typiaadapter.ReadPluginOptions(*pluginsJSON)
59
+ if err != nil {
60
+ fmt.Fprintf(stderr, "ttsc-typia transform: %v\n", err)
61
+ return 2
62
+ }
48
63
  cwd := *cwdOverride
49
64
  if cwd == "" {
50
- var err error
51
- cwd, err = os.Getwd()
52
- if err != nil {
65
+ if cwd, err = os.Getwd(); err != nil {
53
66
  fmt.Fprintf(stderr, "ttsc-typia transform: cwd: %v\n", err)
54
67
  return 2
55
68
  }
@@ -67,9 +80,10 @@ func runTransform(args []string) int {
67
80
  return 2
68
81
  }
69
82
  defer prog.Close()
83
+ registerTypiaDefaultLibraryClassifier(prog)
84
+ defer schemametadata.MetadataDefaultLibrary_release(prog.Checker)
70
85
 
71
86
  transformDiags := []typiaTransformDiagnostic{}
72
- pluginOptions := readTypiaPluginOptions(cwd, *tsconfigPath)
73
87
  transformOptions := pluginOptions.TransformOptions()
74
88
  extras := nativecontext.ITypiaContext_Extras{
75
89
  AddDiagnostic: func(diag *nativecontext.ITypiaDiagnostic) int {
@@ -102,15 +116,80 @@ func runTransform(args []string) int {
102
116
  fmt.Fprintf(stderr, "ttsc-typia transform: source file is not in program: %s\n", absFile)
103
117
  return 2
104
118
  }
105
- if *output == "js" {
106
- return runTransformSingleJS(prog, typiaTransform, target, absFile, *out)
119
+ return runTransformSingle(cwd, *out, &transformDiags, func() (string, int) {
120
+ if *output == "js" {
121
+ return transformSingleToJavaScript(prog, typiaTransform, target)
122
+ }
123
+ return transformFileToTypeScript(prog, typiaTransform, target), 0
124
+ })
125
+ }
126
+
127
+ // registerTypiaDefaultLibraryClassifier hands metadata analysis the program's
128
+ // own default-library classification, which runtime-native identity is decided
129
+ // from: a global is the JavaScript built-in only when a runtime authority
130
+ // declares it (#2200). `prog.TSProgram.IsLibFile` is the same oracle the
131
+ // dependency collector above uses, and for the same reason — a default library
132
+ // is not recognizable from its file name under `bundled:///`, `noembed`, or
133
+ // `libReplacement` (#2108).
134
+ //
135
+ // Every program-loading host registers it against the checker whose types the
136
+ // analysis reads, and releases it when that program closes, so no closed
137
+ // program's checker stays reachable from the registry.
138
+ func registerTypiaDefaultLibraryClassifier(prog *driver.Program) {
139
+ if prog == nil || prog.TSProgram == nil {
140
+ return
107
141
  }
108
- text := transformFileToTypeScript(prog, typiaTransform, target)
109
- return writeSingleOutput(text, *out)
142
+ program := prog.TSProgram
143
+ schemametadata.MetadataDefaultLibrary_register(prog.Checker, func(source *shimast.SourceFile) bool {
144
+ return source != nil && program.IsLibFile(source)
145
+ })
146
+ }
147
+
148
+ // runTransformSingle is the single-file counterpart of runTransformProject's
149
+ // diagnostic decision: produce the artifact into memory, then publish it only
150
+ // when typia's analysis reported nothing. Every single-file output mode routes
151
+ // through this one commit point, so a mode cannot exit 0 over a diagnostic and
152
+ // publish an untransformed `typia.is<T>(input)` call by forgetting its own check
153
+ // (samchon/typia#2117).
154
+ //
155
+ // Diagnostics outrank the producer's own failure code: when typia could not
156
+ // lower a call, that diagnostic is the cause a caller needs, not the "no output
157
+ // produced" symptom it leaves behind.
158
+ func runTransformSingle(
159
+ cwd string,
160
+ outPath string,
161
+ transformDiags *[]typiaTransformDiagnostic,
162
+ produce func() (string, int),
163
+ ) int {
164
+ text, code := produce()
165
+ if len(*transformDiags) > 0 {
166
+ writeTypiaTransformDiagnostics(stderr, *transformDiags, cwd)
167
+ return 3
168
+ }
169
+ if code != 0 {
170
+ return code
171
+ }
172
+ return writeSingleOutput(text, outPath)
110
173
  }
111
174
 
112
175
  // runTransformProject prints every non-declaration project source as transformed
113
- // TypeScript and encodes the JSON envelope the ttsc host expects.
176
+ // TypeScript and encodes the JSON envelope the ttsc host expects. Alongside the
177
+ // transformed sources it reports two invalidation channels the ttsc consumer
178
+ // registers with the bundler so persistent caches and watch mode invalidate
179
+ // generated validators soundly:
180
+ //
181
+ // - `graph`, the host-owned reference graph of the loaded program (direct
182
+ // resolved edges, ambient globals, tsconfig extends chain) computed by the
183
+ // ttsc driver SDK. It is the plugin-agnostic sound baseline under `tsc
184
+ // --incremental` semantics; the consumer registers, per file F,
185
+ // reach(edges, F) ∪ globals ∪ configs.
186
+ // - `dependencies`, typia's precise per-file list of the source files owning
187
+ // the declarations the typia analysis consulted for each transformed file.
188
+ //
189
+ // The consumer unions the two (reach(edges, F) ∪ globals ∪ configs ∪
190
+ // dependencies[F]), so graph is added alongside dependencies, not a replacement.
191
+ // Every section keys through driver.TransformOutputKey, so the consumer joins
192
+ // them by key.
114
193
  func runTransformProject(
115
194
  prog *driver.Program,
116
195
  cwd string,
@@ -121,16 +200,29 @@ func runTransformProject(
121
200
  Diagnostics: []transformCompilerDiagnostic{},
122
201
  TypeScript: map[string]string{},
123
202
  }
203
+ // Compute the reference graph from the loaded program before the transform
204
+ // loop runs typia's per-file node transformer: the graph must describe the
205
+ // original source's resolved references (the transform's inputs), matching
206
+ // ttsc's own `api-transform` host.
207
+ out.Graph = driver.NewTransformGraph(prog, cwd)
208
+ collector := newTransformDependencyCollector(cwd, func(fileName string) bool {
209
+ sf := prog.SourceFile(fileName)
210
+ return sf != nil && prog.TSProgram.IsLibFile(sf)
211
+ })
212
+ schemametadata.MetadataDependency_listen(prog.Checker, collector.Touch)
213
+ defer schemametadata.MetadataDependency_release(prog.Checker)
124
214
  for _, sf := range prog.SourceFiles() {
125
215
  if sf.IsDeclarationFile {
126
216
  continue
127
217
  }
128
- key := sourceFileKey(cwd, filepath.ToSlash(sf.FileName()))
218
+ key := driver.TransformOutputKey(cwd, sf.FileName())
129
219
  if filepath.IsAbs(key) || key == ".." || strings.HasPrefix(key, "../") {
130
220
  continue
131
221
  }
222
+ collector.Begin(key)
132
223
  out.TypeScript[key] = transformFileToTypeScript(prog, typiaTransform, sf)
133
224
  }
225
+ out.Dependencies = collector.ToJSON()
134
226
  for _, diag := range *transformDiags {
135
227
  out.Diagnostics = append(out.Diagnostics, transformDiagnosticToCompilerDiagnostic(diag))
136
228
  }
@@ -165,21 +257,45 @@ func transformFileToTypeScript(
165
257
  return writer.String()
166
258
  }
167
259
 
168
- // runTransformSingleJS emits a single file's JS through the full node-path emit
169
- // pipeline and writes it to stdout or --out.
170
- func runTransformSingleJS(
260
+ // transformSingleToJavaScript emits a single file's JS through the full node-path
261
+ // emit pipeline and returns the captured text. It only produces; publishing is
262
+ // runTransformSingle's decision, so a diagnostic can withhold the artifact.
263
+ //
264
+ // The emit pass covers every file in the program, so unlike the `ts` mode -- which
265
+ // transforms only the target -- a diagnostic raised by any project source reaches
266
+ // runTransformSingle and withholds this file's artifact. That is deliberate and
267
+ // matches the build host, which fails the whole build on any transform diagnostic:
268
+ // the emit that produced this text is the same one that could not lower the other
269
+ // call, so its success is not independently trustworthy.
270
+ //
271
+ // The emit writes every project output through one callback, so the target's own
272
+ // artifact has to be identified among them. That identity comes from the
273
+ // compiler's output-path resolution rather than from a resemblance between the
274
+ // source and emitted paths, because the emit chooses its write path with that
275
+ // same resolution: `outDir`, `rootDir`, and nested source directories may move
276
+ // the artifact anywhere without the two disagreeing, and two sources sharing a
277
+ // basename in different directories resolve to different artifacts instead of
278
+ // collapsing onto one. Deriving the path instead of matching stems is what fixed
279
+ // samchon/typia#2134, where a whole-path-stem match asked whether `dist/main`
280
+ // equaled `src/main` and so reported "no output produced" for every project
281
+ // with an `outDir`.
282
+ func transformSingleToJavaScript(
171
283
  prog *driver.Program,
172
284
  typiaTransform driver.PluginTransform,
173
285
  target *shimast.SourceFile,
174
- absFile string,
175
- outPath string,
176
- ) int {
286
+ ) (string, int) {
287
+ // The resolution answers with an empty path for a source that has no
288
+ // JavaScript lane of its own -- a JSON module that would be emitted over
289
+ // itself. Nothing the emit writes is then this file's artifact, so guard the
290
+ // comparison rather than let an empty expectation match anything.
291
+ expected := ""
292
+ if paths := shimcompiler.GetOutputPathsFor(target, prog.TSProgram.Options(), prog.TSProgram, false); paths != nil {
293
+ expected = filepath.ToSlash(paths.JsFilePath())
294
+ }
177
295
  var captured string
178
296
  found := false
179
- targetKey := filepath.ToSlash(absFile)
180
297
  writeFile := shimcompiler.WriteFile(func(fileName, text string, _ *shimcompiler.WriteFileData) error {
181
- // The emitted .js maps back to its .ts; match on basename stem.
182
- if sameSourceStem(targetKey, fileName) {
298
+ if expected != "" && filepath.ToSlash(fileName) == expected {
183
299
  captured = text
184
300
  found = true
185
301
  }
@@ -187,20 +303,13 @@ func runTransformSingleJS(
187
303
  })
188
304
  if _, err := prog.EmitWithPluginTransformers([]driver.PluginTransform{typiaTransform}, writeFile); err != nil {
189
305
  fmt.Fprintf(stderr, "ttsc-typia transform: emit: %v\n", err)
190
- return 3
306
+ return "", 3
191
307
  }
192
308
  if !found {
193
- fmt.Fprintf(stderr, "ttsc-typia transform: no output produced for %s\n", absFile)
194
- return 3
309
+ fmt.Fprintf(stderr, "ttsc-typia transform: no output produced for %s\n", target.FileName())
310
+ return "", 3
195
311
  }
196
- return writeSingleOutput(captured, outPath)
197
- }
198
-
199
- // sameSourceStem reports whether an emitted .js path corresponds to a .ts source
200
- // path by comparing their extension-stripped values.
201
- func sameSourceStem(tsPath, jsPath string) bool {
202
- return strings.TrimSuffix(filepath.ToSlash(jsPath), filepath.Ext(jsPath)) ==
203
- strings.TrimSuffix(tsPath, filepath.Ext(tsPath))
312
+ return captured, 0
204
313
  }
205
314
 
206
315
  func writeSingleOutput(text, outPath string) int {
@@ -234,6 +343,117 @@ func defaultTransformOutput() string {
234
343
  type transformProjectOutput struct {
235
344
  Diagnostics []transformCompilerDiagnostic `json:"diagnostics,omitempty"`
236
345
  TypeScript map[string]string `json:"typescript"`
346
+ // Graph is the host-owned reference graph of the loaded program produced by
347
+ // the ttsc driver SDK (driver.NewTransformGraph): direct resolved reference
348
+ // edges, ambient global-scope files, and the tsconfig extends chain, keyed
349
+ // like TypeScript through driver.TransformOutputKey. It is the plugin-agnostic
350
+ // sound invalidation baseline; the consumer unions it with Dependencies.
351
+ // Omitted only when the program is nil (never here — a nil program returns
352
+ // earlier).
353
+ Graph *driver.TransformGraph `json:"graph,omitempty"`
354
+ // Dependencies maps each transformed file (same project-relative keys as
355
+ // TypeScript) to the source files owning the declarations typia's analysis
356
+ // consulted for it. Values are project-relative when the file lives under the
357
+ // project and absolute otherwise; the consumer absolutizes against the
358
+ // project root and drops the file itself. Compiler-owned default library
359
+ // files are excluded (toolchain-versioned, not project inputs);
360
+ // `node_modules` declaration files are included.
361
+ Dependencies map[string][]string `json:"dependencies,omitempty"`
362
+ }
363
+
364
+ // transformDependencyCollector accumulates the consulted-declaration files the
365
+ // metadata dependency listener reports while one project file is transformed,
366
+ // attributing them to that file's envelope key.
367
+ type transformDependencyCollector struct {
368
+ cwd string
369
+ current string
370
+ files map[string]map[string]bool
371
+ // isLibraryFile reports the compiler's own classification of a file as a
372
+ // default library. Classification must come from the program, never from a
373
+ // filename pattern: a project's own ambient declaration file may legitimately
374
+ // be named `lib.custom.d.ts`, and dropping it by basename silently loses
375
+ // cache invalidation for the types it declares (samchon/typia#2108).
376
+ isLibraryFile func(fileName string) bool
377
+ // values memoizes fileName -> envelope value ("" for a dropped file): the
378
+ // listener reports the same declaration files repeatedly across call sites.
379
+ values map[string]string
380
+ }
381
+
382
+ func newTransformDependencyCollector(
383
+ cwd string,
384
+ isLibraryFile func(fileName string) bool,
385
+ ) *transformDependencyCollector {
386
+ return &transformDependencyCollector{
387
+ cwd: cwd,
388
+ isLibraryFile: isLibraryFile,
389
+ files: map[string]map[string]bool{},
390
+ values: map[string]string{},
391
+ }
392
+ }
393
+
394
+ // Begin attributes subsequent touches to the given envelope key.
395
+ func (collector *transformDependencyCollector) Begin(key string) {
396
+ collector.current = key
397
+ }
398
+
399
+ // Touch records one consulted declaration file for the current key. Default
400
+ // library files, virtual URI sources (e.g. tsgo's `bundled:///` libraries),
401
+ // and the transformed file itself are dropped so the envelope carries only
402
+ // actionable project inputs.
403
+ func (collector *transformDependencyCollector) Touch(fileName string) {
404
+ if collector.current == "" {
405
+ return
406
+ }
407
+ value, memoized := collector.values[fileName]
408
+ if memoized == false {
409
+ value = collector.value(fileName)
410
+ collector.values[fileName] = value
411
+ }
412
+ if value == "" || value == collector.current {
413
+ return
414
+ }
415
+ set := collector.files[collector.current]
416
+ if set == nil {
417
+ set = map[string]bool{}
418
+ collector.files[collector.current] = set
419
+ }
420
+ set[value] = true
421
+ }
422
+
423
+ // value renders one reported file as its envelope value, or "" when the file
424
+ // must be dropped: virtual URI sources (e.g. tsgo's `bundled:///` embedded
425
+ // libraries) cannot be watched, and files the compiler classifies as default
426
+ // libraries (on-disk in `noembed` or `libReplacement` configurations) are
427
+ // toolchain inputs, not project inputs.
428
+ func (collector *transformDependencyCollector) value(fileName string) string {
429
+ if strings.Contains(fileName, "://") || collector.isLibraryFile(fileName) {
430
+ return ""
431
+ }
432
+ return driver.TransformOutputKey(collector.cwd, fileName)
433
+ }
434
+
435
+ // ToJSON renders the collected sets as the envelope's `dependencies` map with
436
+ // deterministically sorted values, or nil when nothing was collected.
437
+ func (collector *transformDependencyCollector) ToJSON() map[string][]string {
438
+ if len(collector.files) == 0 {
439
+ return nil
440
+ }
441
+ output := map[string][]string{}
442
+ for key, set := range collector.files {
443
+ if len(set) == 0 {
444
+ continue
445
+ }
446
+ values := make([]string, 0, len(set))
447
+ for value := range set {
448
+ values = append(values, value)
449
+ }
450
+ sort.Strings(values)
451
+ output[key] = values
452
+ }
453
+ if len(output) == 0 {
454
+ return nil
455
+ }
456
+ return output
237
457
  }
238
458
 
239
459
  type transformCompilerDiagnostic struct {
@@ -245,14 +465,6 @@ type transformCompilerDiagnostic struct {
245
465
  MessageText string `json:"messageText"`
246
466
  }
247
467
 
248
- func sourceFileKey(cwd string, file string) string {
249
- rel, err := filepath.Rel(cwd, filepath.FromSlash(file))
250
- if err != nil {
251
- return filepath.ToSlash(file)
252
- }
253
- return filepath.ToSlash(rel)
254
- }
255
-
256
468
  func transformDiagnosticToCompilerDiagnostic(diag typiaTransformDiagnostic) transformCompilerDiagnostic {
257
469
  var ptr *string
258
470
  if diag.File != "" {
@@ -10,17 +10,25 @@ import (
10
10
  "testing"
11
11
  )
12
12
 
13
- // TestTransformDeclarationSourceProducesNoJS verifies JS transform reports empty emission.
13
+ // TestTransformDeclarationSourceProducesNoJavaScript verifies JS transform reports empty emission.
14
14
  //
15
15
  // Declaration files can belong to the program while producing no JavaScript
16
16
  // output. The single-file transform path must detect that empty capture instead
17
17
  // of returning a successful but blank result.
18
18
  //
19
+ // The file name deliberately spells out "javascript". Go reads a trailing `_js`
20
+ // on a source file name as a `GOOS=js` build constraint, so under the earlier
21
+ // name `..._produces_no_js_test.go` this case built only for `GOOS=js` -- where
22
+ // `main.go` (`//go:build !js`) drops out and the test package does not compile
23
+ // at all. It therefore ran on no platform whatsoever, and the tag it carries was
24
+ // never the reason. Keep a `_js`, `_windows`, `_linux`, or `_darwin` ending off
25
+ // a Go file name unless that constraint is meant.
26
+ //
19
27
  // 1. Create a project that includes only a declaration source file.
20
28
  // 2. Run single-file transform with JavaScript output.
21
29
  // 3. Capture the command diagnostics.
22
30
  // 4. Assert the command reports that no output was produced.
23
- func TestTransformDeclarationSourceProducesNoJS(t *testing.T) {
31
+ func TestTransformDeclarationSourceProducesNoJavaScript(t *testing.T) {
24
32
  root := transformCoverageRepoRoot(t)
25
33
  base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
26
34
  if err := os.MkdirAll(base, 0o755); err != nil {
@@ -20,9 +20,19 @@ import (
20
20
  // directly, which makes transformer, adapter, and programmer code visible to
21
21
  // `-coverpkg`.
22
22
  //
23
+ // The `_js` lane asserted the opposite of this until samchon/typia#2134 was
24
+ // fixed: it required every fixture to report "no output produced". These
25
+ // projects all set `rootDir`/`outDir`, and the old identity check compared whole
26
+ // path stems, so it asked whether `dist/main` equaled `src/main` and never
27
+ // found the artifact the emit had just written. Reading those exit 3s as the
28
+ // specification turned this suite into the defect's own guard rail -- it would
29
+ // have failed the repair -- and left the JS emit path it exists to cover
30
+ // unreached, since the run stopped at the identity check.
31
+ //
23
32
  // 1. Create isolated temporary TypeScript projects under the native package.
24
33
  // 2. Transform each project's `src/main.ts` to TypeScript output in memory.
25
- // 3. Exercise JavaScript single-file output error handling for synthetic projects.
34
+ // 3. Transform each project's `src/main.ts` to JavaScript and require emitted
35
+ // CommonJS, which is what reaches the printer and the emit path.
26
36
  // 4. Cover reflect metadata, protobuf maps, and object-union emit paths.
27
37
  // 5. Run build/check/project-transform command paths against the same project.
28
38
  func TestTransformSyntheticEmitCoverage(t *testing.T) {
@@ -63,7 +73,7 @@ func TestTransformSyntheticEmitCoverage(t *testing.T) {
63
73
  for _, tc := range cases {
64
74
  tc := tc
65
75
  t.Run(tc.name+"_js", func(t *testing.T) {
66
- _, errText, code := transformCoverageCapture(func() int {
76
+ out, errText, code := transformCoverageCapture(func() int {
67
77
  return runTransform([]string{
68
78
  "--cwd", projects[tc.name],
69
79
  "--tsconfig", "tsconfig.json",
@@ -71,8 +81,15 @@ func TestTransformSyntheticEmitCoverage(t *testing.T) {
71
81
  "--output", "js",
72
82
  })
73
83
  })
74
- if code != 3 || !strings.Contains(errText, "no output produced") {
75
- t.Fatalf("transform js should report no output for %s: code=%d stderr=\n%s", tc.name, code, errText)
84
+ if code != 0 {
85
+ t.Fatalf("transform js failed for %s: code=%d stderr=\n%s", tc.name, code, errText)
86
+ }
87
+ // These fixtures compile as `commonjs`, so a real emit is module-wrapped
88
+ // JavaScript. The lowering itself is pinned by the dedicated single-file
89
+ // `js` cases; what this lane adds is that every fixture's shape reaches
90
+ // the printer at all.
91
+ if !strings.Contains(out, `"use strict"`) || !strings.Contains(out, "exports.") {
92
+ t.Fatalf("transform js output for %s is not emitted CommonJS:\n%s", tc.name, out)
76
93
  }
77
94
  })
78
95
  }