typia 13.1.1 → 13.1.19

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 (515) hide show
  1. package/README.md +3 -0
  2. package/lib/_virtual/_rolldown/runtime.mjs +1 -5
  3. package/lib/executable/FileSystemIdentity.d.ts +21 -0
  4. package/lib/executable/FileSystemIdentity.js +183 -0
  5. package/lib/executable/FileSystemIdentity.js.map +1 -0
  6. package/lib/executable/FileSystemIdentity.mjs +129 -0
  7. package/lib/executable/FileSystemIdentity.mjs.map +1 -0
  8. package/lib/executable/TypiaGenerateWizard.js +264 -104
  9. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  10. package/lib/executable/TypiaGenerateWizard.mjs +233 -93
  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 +17 -0
  16. package/lib/internal/_ProtobufReader.js +117 -45
  17. package/lib/internal/_ProtobufReader.js.map +1 -1
  18. package/lib/internal/_ProtobufReader.mjs +108 -39
  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/_notationAny.js +8 -1
  87. package/lib/internal/_notationAny.js.map +1 -1
  88. package/lib/internal/_notationAny.mjs +7 -1
  89. package/lib/internal/_notationAny.mjs.map +1 -1
  90. package/lib/internal/_notationAssign.d.ts +1 -0
  91. package/lib/internal/_notationAssign.js +18 -0
  92. package/lib/internal/_notationAssign.js.map +1 -0
  93. package/lib/internal/_notationAssign.mjs +17 -0
  94. package/lib/internal/_notationAssign.mjs.map +1 -0
  95. package/lib/internal/_notationCamel.js +30 -9
  96. package/lib/internal/_notationCamel.js.map +1 -1
  97. package/lib/internal/_notationCamel.mjs +13 -5
  98. package/lib/internal/_notationCamel.mjs.map +1 -1
  99. package/lib/internal/_notationKebab.d.ts +1 -0
  100. package/lib/internal/_notationKebab.js +15 -0
  101. package/lib/internal/_notationKebab.js.map +1 -0
  102. package/lib/internal/_notationKebab.mjs +15 -0
  103. package/lib/internal/_notationKebab.mjs.map +1 -0
  104. package/lib/internal/_notationKeyCollision.d.ts +1 -0
  105. package/lib/internal/_notationKeyCollision.js +8 -0
  106. package/lib/internal/_notationKeyCollision.js.map +1 -0
  107. package/lib/internal/_notationKeyCollision.mjs +8 -0
  108. package/lib/internal/_notationKeyCollision.mjs.map +1 -0
  109. package/lib/internal/_notationPascal.js +20 -5
  110. package/lib/internal/_notationPascal.js.map +1 -1
  111. package/lib/internal/_notationPascal.mjs +10 -5
  112. package/lib/internal/_notationPascal.mjs.map +1 -1
  113. package/lib/internal/_notationSnake.js +25 -22
  114. package/lib/internal/_notationSnake.js.map +1 -1
  115. package/lib/internal/_notationSnake.mjs +11 -11
  116. package/lib/internal/_notationSnake.mjs.map +1 -1
  117. package/lib/internal/_plainCloneAny.js +174 -38
  118. package/lib/internal/_plainCloneAny.js.map +1 -1
  119. package/lib/internal/_plainCloneAny.mjs +126 -22
  120. package/lib/internal/_plainCloneAny.mjs.map +1 -1
  121. package/lib/internal/_randomArray.d.ts +1 -1
  122. package/lib/internal/_randomArray.js +11 -4
  123. package/lib/internal/_randomArray.js.map +1 -1
  124. package/lib/internal/_randomArray.mjs +9 -3
  125. package/lib/internal/_randomArray.mjs.map +1 -1
  126. package/lib/internal/_randomFormatByte.d.ts +2 -1
  127. package/lib/internal/_randomFormatByte.js +2 -1
  128. package/lib/internal/_randomFormatByte.js.map +1 -1
  129. package/lib/internal/_randomFormatByte.mjs +2 -1
  130. package/lib/internal/_randomFormatByte.mjs.map +1 -1
  131. package/lib/internal/_randomFormatDate.d.ts +2 -0
  132. package/lib/internal/_randomFormatDate.js +3 -2
  133. package/lib/internal/_randomFormatDate.js.map +1 -1
  134. package/lib/internal/_randomFormatDate.mjs +3 -2
  135. package/lib/internal/_randomFormatDate.mjs.map +1 -1
  136. package/lib/internal/_randomFormatDatetime.d.ts +2 -0
  137. package/lib/internal/_randomFormatDatetime.js +3 -2
  138. package/lib/internal/_randomFormatDatetime.js.map +1 -1
  139. package/lib/internal/_randomFormatDatetime.mjs +3 -2
  140. package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
  141. package/lib/internal/_randomFormatDuration.d.ts +2 -1
  142. package/lib/internal/_randomFormatDuration.js +3 -2
  143. package/lib/internal/_randomFormatDuration.js.map +1 -1
  144. package/lib/internal/_randomFormatDuration.mjs +3 -2
  145. package/lib/internal/_randomFormatDuration.mjs.map +1 -1
  146. package/lib/internal/_randomFormatEmail.d.ts +2 -1
  147. package/lib/internal/_randomFormatEmail.js +8 -1
  148. package/lib/internal/_randomFormatEmail.js.map +1 -1
  149. package/lib/internal/_randomFormatEmail.mjs +5 -1
  150. package/lib/internal/_randomFormatEmail.mjs.map +1 -1
  151. package/lib/internal/_randomFormatHostname.d.ts +8 -1
  152. package/lib/internal/_randomFormatHostname.js +45 -2
  153. package/lib/internal/_randomFormatHostname.js.map +1 -1
  154. package/lib/internal/_randomFormatHostname.mjs +38 -2
  155. package/lib/internal/_randomFormatHostname.mjs.map +1 -1
  156. package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
  157. package/lib/internal/_randomFormatIdnEmail.js +16 -2
  158. package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
  159. package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
  160. package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
  161. package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
  162. package/lib/internal/_randomFormatIdnHostname.js +26 -1
  163. package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
  164. package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
  165. package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
  166. package/lib/internal/_randomFormatIpv4.d.ts +2 -1
  167. package/lib/internal/_randomFormatIpv4.js +2 -1
  168. package/lib/internal/_randomFormatIpv4.js.map +1 -1
  169. package/lib/internal/_randomFormatIpv4.mjs +2 -1
  170. package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
  171. package/lib/internal/_randomFormatIpv6.d.ts +2 -1
  172. package/lib/internal/_randomFormatIpv6.js +2 -1
  173. package/lib/internal/_randomFormatIpv6.js.map +1 -1
  174. package/lib/internal/_randomFormatIpv6.mjs +2 -1
  175. package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
  176. package/lib/internal/_randomFormatIri.d.ts +2 -1
  177. package/lib/internal/_randomFormatIri.js +1 -1
  178. package/lib/internal/_randomFormatIri.js.map +1 -1
  179. package/lib/internal/_randomFormatIri.mjs +1 -1
  180. package/lib/internal/_randomFormatIri.mjs.map +1 -1
  181. package/lib/internal/_randomFormatIriReference.d.ts +2 -1
  182. package/lib/internal/_randomFormatIriReference.js +1 -1
  183. package/lib/internal/_randomFormatIriReference.js.map +1 -1
  184. package/lib/internal/_randomFormatIriReference.mjs +1 -1
  185. package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
  186. package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
  187. package/lib/internal/_randomFormatJsonPointer.js +8 -1
  188. package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
  189. package/lib/internal/_randomFormatJsonPointer.mjs +5 -1
  190. package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
  191. package/lib/internal/_randomFormatPassword.d.ts +2 -1
  192. package/lib/internal/_randomFormatPassword.js +7 -5
  193. package/lib/internal/_randomFormatPassword.js.map +1 -1
  194. package/lib/internal/_randomFormatPassword.mjs +5 -1
  195. package/lib/internal/_randomFormatPassword.mjs.map +1 -1
  196. package/lib/internal/_randomFormatRegex.d.ts +2 -1
  197. package/lib/internal/_randomFormatRegex.js +2 -1
  198. package/lib/internal/_randomFormatRegex.js.map +1 -1
  199. package/lib/internal/_randomFormatRegex.mjs +2 -1
  200. package/lib/internal/_randomFormatRegex.mjs.map +1 -1
  201. package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
  202. package/lib/internal/_randomFormatRelativeJsonPointer.js +3 -2
  203. package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
  204. package/lib/internal/_randomFormatRelativeJsonPointer.mjs +3 -2
  205. package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
  206. package/lib/internal/_randomFormatTime.d.ts +2 -1
  207. package/lib/internal/_randomFormatTime.js +3 -2
  208. package/lib/internal/_randomFormatTime.js.map +1 -1
  209. package/lib/internal/_randomFormatTime.mjs +3 -2
  210. package/lib/internal/_randomFormatTime.mjs.map +1 -1
  211. package/lib/internal/_randomFormatUri.d.ts +2 -1
  212. package/lib/internal/_randomFormatUri.js +1 -1
  213. package/lib/internal/_randomFormatUri.js.map +1 -1
  214. package/lib/internal/_randomFormatUri.mjs +1 -1
  215. package/lib/internal/_randomFormatUri.mjs.map +1 -1
  216. package/lib/internal/_randomFormatUriReference.d.ts +2 -1
  217. package/lib/internal/_randomFormatUriReference.js +1 -1
  218. package/lib/internal/_randomFormatUriReference.js.map +1 -1
  219. package/lib/internal/_randomFormatUriReference.mjs +1 -1
  220. package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
  221. package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
  222. package/lib/internal/_randomFormatUriTemplate.js +1 -1
  223. package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
  224. package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
  225. package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
  226. package/lib/internal/_randomFormatUrl.d.ts +2 -1
  227. package/lib/internal/_randomFormatUrl.js +21 -1
  228. package/lib/internal/_randomFormatUrl.js.map +1 -1
  229. package/lib/internal/_randomFormatUrl.mjs +18 -1
  230. package/lib/internal/_randomFormatUrl.mjs.map +1 -1
  231. package/lib/internal/_randomFormatUuid.d.ts +2 -1
  232. package/lib/internal/_randomFormatUuid.js +3 -2
  233. package/lib/internal/_randomFormatUuid.js.map +1 -1
  234. package/lib/internal/_randomFormatUuid.mjs +3 -2
  235. package/lib/internal/_randomFormatUuid.mjs.map +1 -1
  236. package/lib/internal/_randomInteger.js +59 -28
  237. package/lib/internal/_randomInteger.js.map +1 -1
  238. package/lib/internal/_randomInteger.mjs +56 -16
  239. package/lib/internal/_randomInteger.mjs.map +1 -1
  240. package/lib/internal/_randomMultiple.d.ts +8 -0
  241. package/lib/internal/_randomMultiple.js +168 -0
  242. package/lib/internal/_randomMultiple.js.map +1 -0
  243. package/lib/internal/_randomMultiple.mjs +158 -0
  244. package/lib/internal/_randomMultiple.mjs.map +1 -0
  245. package/lib/internal/_randomNumber.js +42 -42
  246. package/lib/internal/_randomNumber.js.map +1 -1
  247. package/lib/internal/_randomNumber.mjs +41 -27
  248. package/lib/internal/_randomNumber.mjs.map +1 -1
  249. package/lib/internal/_randomPattern.d.ts +2 -1
  250. package/lib/internal/_randomPattern.js +19 -4
  251. package/lib/internal/_randomPattern.js.map +1 -1
  252. package/lib/internal/_randomPattern.mjs +10 -4
  253. package/lib/internal/_randomPattern.mjs.map +1 -1
  254. package/lib/internal/_randomStringLength.d.ts +33 -0
  255. package/lib/internal/_randomStringLength.js +48 -0
  256. package/lib/internal/_randomStringLength.js.map +1 -0
  257. package/lib/internal/_randomStringLength.mjs +44 -0
  258. package/lib/internal/_randomStringLength.mjs.map +1 -0
  259. package/lib/internal/_stringLength.d.ts +1 -0
  260. package/lib/internal/_stringLength.js +11 -0
  261. package/lib/internal/_stringLength.js.map +1 -0
  262. package/lib/internal/_stringLength.mjs +10 -0
  263. package/lib/internal/_stringLength.mjs.map +1 -0
  264. package/lib/internal/_validateReport.js +4 -1
  265. package/lib/internal/_validateReport.js.map +1 -1
  266. package/lib/internal/_validateReport.mjs +2 -1
  267. package/lib/internal/_validateReport.mjs.map +1 -1
  268. package/lib/internal/private/__notationRename.d.ts +14 -0
  269. package/lib/internal/private/__notationRename.js +25 -0
  270. package/lib/internal/private/__notationRename.js.map +1 -0
  271. package/lib/internal/private/__notationRename.mjs +24 -0
  272. package/lib/internal/private/__notationRename.mjs.map +1 -0
  273. package/lib/json.d.ts +2 -2
  274. package/lib/json.mjs.map +1 -1
  275. package/lib/module.d.ts +2 -2
  276. package/lib/module.js.map +1 -1
  277. package/lib/module.mjs.map +1 -1
  278. package/lib/notations.d.ts +20 -4
  279. package/lib/notations.js.map +1 -1
  280. package/lib/notations.mjs.map +1 -1
  281. package/native/adapter/plugin_options.go +117 -0
  282. package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
  283. package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
  284. package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
  285. package/native/cmd/ttsc-typia/build.go +81 -64
  286. package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
  287. package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
  288. package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
  289. package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
  290. package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
  291. package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
  292. package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
  293. package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
  294. package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
  295. package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
  296. package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
  297. package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
  298. package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
  299. package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
  300. package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
  301. package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
  302. package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
  303. package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
  304. package/native/cmd/ttsc-typia/main_wasm.go +21 -2
  305. package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
  306. package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
  307. package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
  308. package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
  309. package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
  310. package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
  311. package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
  312. package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
  313. package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
  314. package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
  315. package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
  316. package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
  317. package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
  318. package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
  319. package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
  320. package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
  321. package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
  322. package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
  323. package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
  324. package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
  325. package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
  326. package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
  327. package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
  328. package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
  329. package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
  330. package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
  331. package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
  332. package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
  333. package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
  334. package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
  335. package/native/cmd/ttsc-typia/transform.go +228 -39
  336. package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
  337. package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
  338. package/native/cmd/ttsc-typia/transform_helpers_test.go +159 -1
  339. package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
  340. package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
  341. package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
  342. package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
  343. package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
  344. package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
  345. package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
  346. package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
  347. package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
  348. package/native/core/factories/FormatCheatSheet.go +40 -7
  349. package/native/core/factories/IdentifierFactory.go +131 -4
  350. package/native/core/factories/MetadataCommentTagFactory.go +83 -40
  351. package/native/core/factories/MetadataTypeTagFactory.go +13 -1
  352. package/native/core/factories/NumericRangeFactory.go +60 -17
  353. package/native/core/factories/ProtobufFactory.go +7 -4
  354. package/native/core/factories/factory_utility_coverage_test.go +8 -2
  355. package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
  356. package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
  357. package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
  358. package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
  359. package/native/core/factories/internal/metadata/MetadataHelper.go +60 -6
  360. package/native/core/factories/internal/metadata/emplace_metadata_object.go +116 -8
  361. package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
  362. package/native/core/factories/internal/metadata/iterate_metadata_function.go +4 -11
  363. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +8 -6
  364. package/native/core/factories/internal/metadata/iterate_metadata_map.go +9 -0
  365. package/native/core/factories/internal/metadata/iterate_metadata_native.go +27 -2
  366. package/native/core/factories/internal/metadata/iterate_metadata_set.go +9 -0
  367. package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
  368. package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
  369. package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
  370. package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
  371. package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
  372. package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
  373. package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
  374. package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
  375. package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
  376. package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
  377. package/native/core/programmers/IsProgrammer.go +15 -1
  378. package/native/core/programmers/RandomProgrammer.go +51 -14
  379. package/native/core/programmers/compare/CompareEqualProgrammer.go +393 -5
  380. package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
  381. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
  382. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
  383. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
  384. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
  385. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
  386. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
  387. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
  388. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
  389. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
  390. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
  391. package/native/core/programmers/helpers/CloneJoiner.go +32 -0
  392. package/native/core/programmers/helpers/NotationJoiner.go +86 -28
  393. package/native/core/programmers/helpers/StringifyJoinder.go +32 -1
  394. package/native/core/programmers/helpers/UnionExplorer.go +203 -61
  395. package/native/core/programmers/helpers/joiner_branch_coverage_test.go +5 -3
  396. package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
  397. package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
  398. package/native/core/programmers/iterate/check_template.go +344 -32
  399. package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
  400. package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
  401. package/native/core/programmers/iterate/openapi_v3_downgrader.go +641 -0
  402. package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
  403. package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
  404. package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
  405. package/native/core/programmers/iterate/template_runtime_pattern.go +52 -7
  406. package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
  407. package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
  408. package/native/core/programmers/llm/LlmApplicationProgrammer.go +12 -10
  409. package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
  410. package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
  411. package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
  412. package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
  413. package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
  414. package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
  415. package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
  416. package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
  417. package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
  418. package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
  419. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
  420. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +40 -21
  421. package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
  422. package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
  423. package/native/core/schemas/metadata/MetadataCollection.go +270 -20
  424. package/native/core/schemas/metadata/MetadataDependency.go +388 -0
  425. package/native/core/schemas/metadata/MetadataObjectType.go +17 -4
  426. package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
  427. package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
  428. package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
  429. package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
  430. package/native/core/utils/PatternUtil.go +13 -0
  431. package/native/core/utils/PromiseTypeFactory.go +59 -0
  432. package/native/core/utils/ProtobufNameEncoder.go +8 -0
  433. package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
  434. package/native/go.mod +9 -1
  435. package/native/transform/CallExpressionTransformer.go +12 -0
  436. package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
  437. package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
  438. package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
  439. package/package.json +16 -4
  440. package/src/executable/FileSystemIdentity.ts +189 -0
  441. package/src/executable/TypiaGenerateWizard.ts +377 -110
  442. package/src/functional.ts +30 -60
  443. package/src/internal/_ProtobufReader.ts +129 -43
  444. package/src/internal/_createStandardSchema.ts +15 -1
  445. package/src/internal/_decimal.ts +69 -0
  446. package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
  447. package/src/internal/_isFormatByte.ts +2 -5
  448. package/src/internal/_isFormatDate.ts +15 -2
  449. package/src/internal/_isFormatDateTime.ts +28 -2
  450. package/src/internal/_isFormatIri.ts +5 -2
  451. package/src/internal/_isFormatIriReference.ts +11 -3
  452. package/src/internal/_isFormatUriReference.ts +1 -1
  453. package/src/internal/_isMultipleOf.ts +8 -0
  454. package/src/internal/_isTypeFloat.ts +1 -1
  455. package/src/internal/_isTypeInt64.ts +1 -0
  456. package/src/internal/_isTypeInt64Bigint.ts +12 -0
  457. package/src/internal/_isTypeUint64.ts +1 -0
  458. package/src/internal/_isTypeUint64Bigint.ts +7 -0
  459. package/src/internal/_isUniqueItems.ts +134 -132
  460. package/src/internal/_notationAny.ts +9 -4
  461. package/src/internal/_notationAssign.ts +20 -0
  462. package/src/internal/_notationCamel.ts +31 -10
  463. package/src/internal/_notationKebab.ts +11 -0
  464. package/src/internal/_notationKeyCollision.ts +9 -0
  465. package/src/internal/_notationPascal.ts +19 -6
  466. package/src/internal/_notationSnake.ts +24 -21
  467. package/src/internal/_plainCloneAny.ts +208 -33
  468. package/src/internal/_randomArray.ts +13 -4
  469. package/src/internal/_randomFormatByte.ts +4 -1
  470. package/src/internal/_randomFormatDate.ts +17 -12
  471. package/src/internal/_randomFormatDatetime.ts +15 -10
  472. package/src/internal/_randomFormatDuration.ts +16 -14
  473. package/src/internal/_randomFormatEmail.ts +8 -2
  474. package/src/internal/_randomFormatHostname.ts +48 -1
  475. package/src/internal/_randomFormatIdnEmail.ts +18 -2
  476. package/src/internal/_randomFormatIdnHostname.ts +34 -2
  477. package/src/internal/_randomFormatIpv4.ts +3 -2
  478. package/src/internal/_randomFormatIpv6.ts +3 -2
  479. package/src/internal/_randomFormatIri.ts +3 -1
  480. package/src/internal/_randomFormatIriReference.ts +3 -1
  481. package/src/internal/_randomFormatJsonPointer.ts +8 -2
  482. package/src/internal/_randomFormatPassword.ts +11 -6
  483. package/src/internal/_randomFormatRegex.ts +4 -1
  484. package/src/internal/_randomFormatRelativeJsonPointer.ts +13 -6
  485. package/src/internal/_randomFormatTime.ts +13 -10
  486. package/src/internal/_randomFormatUri.ts +3 -1
  487. package/src/internal/_randomFormatUriReference.ts +3 -1
  488. package/src/internal/_randomFormatUriTemplate.ts +3 -1
  489. package/src/internal/_randomFormatUrl.ts +25 -2
  490. package/src/internal/_randomFormatUuid.ts +10 -6
  491. package/src/internal/_randomInteger.ts +87 -40
  492. package/src/internal/_randomMultiple.ts +245 -0
  493. package/src/internal/_randomNumber.ts +72 -55
  494. package/src/internal/_randomPattern.ts +26 -4
  495. package/src/internal/_randomStringLength.ts +72 -0
  496. package/src/internal/_stringLength.ts +5 -0
  497. package/src/internal/_validateReport.ts +5 -1
  498. package/src/internal/private/__notationRename.ts +24 -0
  499. package/src/json.ts +2 -2
  500. package/src/module.ts +4 -6
  501. package/src/notations.ts +20 -4
  502. package/lib/internal/private/__notationCapitalize.d.ts +0 -1
  503. package/lib/internal/private/__notationCapitalize.js +0 -6
  504. package/lib/internal/private/__notationCapitalize.js.map +0 -1
  505. package/lib/internal/private/__notationCapitalize.mjs +0 -6
  506. package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
  507. package/lib/internal/private/__notationUnsnake.d.ts +0 -4
  508. package/lib/internal/private/__notationUnsnake.js +0 -26
  509. package/lib/internal/private/__notationUnsnake.js.map +0 -1
  510. package/lib/internal/private/__notationUnsnake.mjs +0 -15
  511. package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
  512. package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
  513. package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
  514. package/src/internal/private/__notationCapitalize.ts +0 -2
  515. package/src/internal/private/__notationUnsnake.ts +0 -24
@@ -0,0 +1,100 @@
1
+ package main
2
+
3
+ import (
4
+ "encoding/json"
5
+ "os"
6
+ "path/filepath"
7
+ "testing"
8
+ )
9
+
10
+ // TestProjectDependenciesEmptyHeritageTransform verifies heritage targets
11
+ // register as dependencies even when they contribute no property yet.
12
+ //
13
+ // Inherited members carry their declaring file through their property symbols,
14
+ // but a base interface that is currently EMPTY surfaces no symbol at all — and
15
+ // gaining its first property is exactly the change that must invalidate the
16
+ // consumer's cached validator. This pins the explicit `extends` chain walk.
17
+ //
18
+ // 1. Build a project where `main.ts` validates `Doc`, `doc.ts` declares
19
+ // `Doc extends Empty`, and `empty.ts` declares the empty interface.
20
+ // 2. Run project transform mode and decode the JSON envelope.
21
+ // 3. Assert `dependencies["src/main.ts"]` contains both `src/doc.ts` (the
22
+ // declaring file) and `src/empty.ts` (the property-less heritage target).
23
+ func TestProjectDependenciesEmptyHeritageTransform(t *testing.T) {
24
+ project := projectDependenciesEmptyHeritageProject(t)
25
+ out, errText, code := ttscTypiaTestCapture(func() int {
26
+ return runTransform([]string{
27
+ "--cwd", project,
28
+ "--tsconfig", "tsconfig.json",
29
+ "--output", "ts",
30
+ })
31
+ })
32
+ if code != 0 {
33
+ t.Fatalf("project transform failed: code=%d stderr=\n%s", code, errText)
34
+ }
35
+ var envelope struct {
36
+ Dependencies map[string][]string `json:"dependencies"`
37
+ }
38
+ if err := json.Unmarshal([]byte(out), &envelope); err != nil {
39
+ t.Fatalf("decode envelope: %v\n%s", err, out)
40
+ }
41
+ entries := envelope.Dependencies["src/main.ts"]
42
+ found := map[string]bool{}
43
+ for _, entry := range entries {
44
+ found[entry] = true
45
+ }
46
+ if !found["src/doc.ts"] {
47
+ t.Fatalf("dependencies of src/main.ts must contain the declaring file src/doc.ts: %v", entries)
48
+ }
49
+ if !found["src/empty.ts"] {
50
+ t.Fatalf("dependencies of src/main.ts must contain the empty heritage target src/empty.ts: %v", entries)
51
+ }
52
+ }
53
+
54
+ func projectDependenciesEmptyHeritageProject(t *testing.T) string {
55
+ t.Helper()
56
+ root := ttscTypiaTestRepoRoot(t)
57
+ base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
58
+ if err := os.MkdirAll(base, 0o755); err != nil {
59
+ t.Fatalf("mkdir temp base: %v", err)
60
+ }
61
+ dir, err := os.MkdirTemp(base, "project-dependencies-empty-heritage-")
62
+ if err != nil {
63
+ t.Fatalf("create temp fixture: %v", err)
64
+ }
65
+ t.Cleanup(func() { _ = os.RemoveAll(dir) })
66
+ src := filepath.Join(dir, "src")
67
+ if err := os.MkdirAll(src, 0o755); err != nil {
68
+ t.Fatalf("mkdir fixture src: %v", err)
69
+ }
70
+ if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(projectDependenciesEnvelopeTSConfig), 0o644); err != nil {
71
+ t.Fatalf("write tsconfig: %v", err)
72
+ }
73
+ for name, body := range map[string]string{
74
+ "main.ts": projectDependenciesEmptyHeritageMain,
75
+ "doc.ts": projectDependenciesEmptyHeritageDoc,
76
+ "empty.ts": projectDependenciesEmptyHeritageEmpty,
77
+ } {
78
+ if err := os.WriteFile(filepath.Join(src, name), []byte(body), 0o644); err != nil {
79
+ t.Fatalf("write %s: %v", name, err)
80
+ }
81
+ }
82
+ return dir
83
+ }
84
+
85
+ const projectDependenciesEmptyHeritageMain = `import typia from "typia";
86
+
87
+ import { Doc } from "./doc";
88
+
89
+ export const validateDoc = (input: unknown) => typia.validate<Doc>(input);
90
+ `
91
+
92
+ const projectDependenciesEmptyHeritageDoc = `import { Empty } from "./empty";
93
+
94
+ export interface Doc extends Empty {
95
+ id: string;
96
+ }
97
+ `
98
+
99
+ const projectDependenciesEmptyHeritageEmpty = `export interface Empty {}
100
+ `
@@ -0,0 +1,148 @@
1
+ package main
2
+
3
+ import (
4
+ "encoding/json"
5
+ "os"
6
+ "path/filepath"
7
+ "strings"
8
+ "testing"
9
+ )
10
+
11
+ // TestProjectDependenciesEnvelopeTransform verifies the project transform
12
+ // envelope reports consulted declaration files per transformed file.
13
+ //
14
+ // The `dependencies` section is what lets the ttsc consumer register a
15
+ // validated type's declaring files with the bundler; without it, persistent
16
+ // caches and watch mode serve stale validators when only the type's own file
17
+ // changes (samchon/typia#2092). This pins the producer contract: direct and
18
+ // transitive declaration files attributed to the call-expression site,
19
+ // nothing attributed to files without typia calls, no self entry, and no
20
+ // default-library noise.
21
+ //
22
+ // 1. Build a project where `a.ts` calls `typia.validate<Bee>()` with `Bee`
23
+ // declared in `b.ts` referencing `Cee` from `c.ts` through a property type,
24
+ // plus `d.ts` with no typia call.
25
+ // 2. Run project transform mode and decode the JSON envelope.
26
+ // 3. Assert `dependencies["src/a.ts"]` contains both `src/b.ts` and `src/c.ts`.
27
+ // 4. Assert no entry exists for `src/b.ts`, `src/c.ts`, or `src/d.ts`, the
28
+ // entry omits `src/a.ts` itself, and no `lib.*.d.ts` value leaks.
29
+ func TestProjectDependenciesEnvelopeTransform(t *testing.T) {
30
+ project := projectDependenciesEnvelopeProject(t)
31
+ out, errText, code := ttscTypiaTestCapture(func() int {
32
+ return runTransform([]string{
33
+ "--cwd", project,
34
+ "--tsconfig", "tsconfig.json",
35
+ "--output", "ts",
36
+ })
37
+ })
38
+ if code != 0 {
39
+ t.Fatalf("project transform failed: code=%d stderr=\n%s", code, errText)
40
+ }
41
+ var envelope struct {
42
+ TypeScript map[string]string `json:"typescript"`
43
+ Dependencies map[string][]string `json:"dependencies"`
44
+ }
45
+ if err := json.Unmarshal([]byte(out), &envelope); err != nil {
46
+ t.Fatalf("decode envelope: %v\n%s", err, out)
47
+ }
48
+ if _, ok := envelope.TypeScript["src/a.ts"]; !ok {
49
+ t.Fatalf("typescript map must contain src/a.ts, got keys of:\n%s", out)
50
+ }
51
+ entries := envelope.Dependencies["src/a.ts"]
52
+ if len(entries) == 0 {
53
+ t.Fatalf("dependencies must contain an entry for src/a.ts:\n%s", out)
54
+ }
55
+ found := map[string]bool{}
56
+ for _, entry := range entries {
57
+ found[entry] = true
58
+ if entry == "src/a.ts" {
59
+ t.Fatalf("dependencies of src/a.ts must omit the file itself: %v", entries)
60
+ }
61
+ base := filepath.Base(filepath.FromSlash(entry))
62
+ if strings.HasPrefix(base, "lib.") && strings.HasSuffix(base, ".d.ts") {
63
+ t.Fatalf("dependencies must exclude default library files, got %q in %v", entry, entries)
64
+ }
65
+ }
66
+ if !found["src/b.ts"] {
67
+ t.Fatalf("dependencies of src/a.ts must contain the direct declaration file src/b.ts: %v", entries)
68
+ }
69
+ if !found["src/c.ts"] {
70
+ t.Fatalf("dependencies of src/a.ts must contain the transitive declaration file src/c.ts: %v", entries)
71
+ }
72
+ for _, key := range []string{"src/b.ts", "src/c.ts", "src/d.ts"} {
73
+ if _, ok := envelope.Dependencies[key]; ok {
74
+ t.Fatalf("%s has no typia call and must report no dependency entry: %v", key, envelope.Dependencies[key])
75
+ }
76
+ }
77
+ }
78
+
79
+ func projectDependenciesEnvelopeProject(t *testing.T) string {
80
+ t.Helper()
81
+ root := ttscTypiaTestRepoRoot(t)
82
+ base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
83
+ if err := os.MkdirAll(base, 0o755); err != nil {
84
+ t.Fatalf("mkdir temp base: %v", err)
85
+ }
86
+ dir, err := os.MkdirTemp(base, "project-dependencies-envelope-")
87
+ if err != nil {
88
+ t.Fatalf("create temp fixture: %v", err)
89
+ }
90
+ t.Cleanup(func() { _ = os.RemoveAll(dir) })
91
+ src := filepath.Join(dir, "src")
92
+ if err := os.MkdirAll(src, 0o755); err != nil {
93
+ t.Fatalf("mkdir fixture src: %v", err)
94
+ }
95
+ if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(projectDependenciesEnvelopeTSConfig), 0o644); err != nil {
96
+ t.Fatalf("write tsconfig: %v", err)
97
+ }
98
+ for name, body := range map[string]string{
99
+ "a.ts": projectDependenciesEnvelopeSourceA,
100
+ "b.ts": projectDependenciesEnvelopeSourceB,
101
+ "c.ts": projectDependenciesEnvelopeSourceC,
102
+ "d.ts": projectDependenciesEnvelopeSourceD,
103
+ } {
104
+ if err := os.WriteFile(filepath.Join(src, name), []byte(body), 0o644); err != nil {
105
+ t.Fatalf("write %s: %v", name, err)
106
+ }
107
+ }
108
+ return dir
109
+ }
110
+
111
+ const projectDependenciesEnvelopeTSConfig = `{
112
+ "compilerOptions": {
113
+ "target": "ES2022",
114
+ "module": "commonjs",
115
+ "moduleResolution": "bundler",
116
+ "ignoreDeprecations": "6.0",
117
+ "esModuleInterop": true,
118
+ "strict": true,
119
+ "skipLibCheck": true,
120
+ "rootDir": "src",
121
+ "outDir": "dist"
122
+ },
123
+ "include": ["src"]
124
+ }
125
+ `
126
+
127
+ const projectDependenciesEnvelopeSourceA = `import typia from "typia";
128
+
129
+ import { Bee } from "./b";
130
+
131
+ export const validateBee = (input: unknown) => typia.validate<Bee>(input);
132
+ `
133
+
134
+ const projectDependenciesEnvelopeSourceB = `import { Cee } from "./c";
135
+
136
+ export interface Bee {
137
+ id: string;
138
+ nested: Cee;
139
+ }
140
+ `
141
+
142
+ const projectDependenciesEnvelopeSourceC = `export interface Cee {
143
+ value: number;
144
+ }
145
+ `
146
+
147
+ const projectDependenciesEnvelopeSourceD = `export const plain: number = 42;
148
+ `
@@ -0,0 +1,139 @@
1
+ package main
2
+
3
+ import (
4
+ "encoding/json"
5
+ "os"
6
+ "path/filepath"
7
+ "testing"
8
+ )
9
+
10
+ // TestProjectDependenciesIndexSignatureAliasTransform verifies an index
11
+ // signature's written key and value aliases register their declaring files.
12
+ //
13
+ // Index signatures carry no property symbol, so the apparent-property walk that
14
+ // registers every ordinary member never sees them; their aliases-of-intrinsics
15
+ // are then collapsed by the checker and leave no trace on the type graph
16
+ // either. Both `[k: string]: Value` and `[k: Key]: string` therefore changed the
17
+ // generated validator with no reported edge to invalidate
18
+ // (samchon/typia#2126). The negative twin pins the boundary: a file reached only
19
+ // from a member the index signature does not consult must stay out.
20
+ //
21
+ // 1. Build a project where `a.ts` validates `Target` from `model.ts`, whose
22
+ // index signature uses the key alias `Key` (`key.ts`) and the value alias
23
+ // `Value` (`value.ts`), and whose unrelated property references `Kept`
24
+ // (`kept.ts`) while a method body alone references `BodyOnly` (`body.ts`).
25
+ // 2. Run project transform mode and decode the JSON envelope.
26
+ // 3. Assert `dependencies["src/a.ts"]` contains `key.ts`, `value.ts`, and
27
+ // `kept.ts`.
28
+ // 4. Assert it does NOT contain the body-only `body.ts`.
29
+ func TestProjectDependenciesIndexSignatureAliasTransform(t *testing.T) {
30
+ project := projectDependenciesIndexSignatureAliasProject(t)
31
+ out, errText, code := ttscTypiaTestCapture(func() int {
32
+ return runTransform([]string{
33
+ "--cwd", project,
34
+ "--tsconfig", "tsconfig.json",
35
+ "--output", "ts",
36
+ })
37
+ })
38
+ if code != 0 {
39
+ t.Fatalf("project transform failed: code=%d stderr=\n%s", code, errText)
40
+ }
41
+ var envelope struct {
42
+ Dependencies map[string][]string `json:"dependencies"`
43
+ }
44
+ if err := json.Unmarshal([]byte(out), &envelope); err != nil {
45
+ t.Fatalf("decode envelope: %v\n%s", err, out)
46
+ }
47
+ entries := envelope.Dependencies["src/a.ts"]
48
+ found := map[string]bool{}
49
+ for _, entry := range entries {
50
+ found[entry] = true
51
+ }
52
+ if !found["src/value.ts"] {
53
+ t.Fatalf("dependencies of src/a.ts must contain the index-signature value alias file src/value.ts: %v", entries)
54
+ }
55
+ if !found["src/key.ts"] {
56
+ t.Fatalf("dependencies of src/a.ts must contain the index-signature key alias file src/key.ts: %v", entries)
57
+ }
58
+ if !found["src/kept.ts"] {
59
+ t.Fatalf("dependencies of src/a.ts must contain the property alias file src/kept.ts: %v", entries)
60
+ }
61
+ if found["src/body.ts"] {
62
+ t.Fatalf("dependencies of src/a.ts must not contain the body-only reference file src/body.ts: %v", entries)
63
+ }
64
+ }
65
+
66
+ func projectDependenciesIndexSignatureAliasProject(t *testing.T) string {
67
+ t.Helper()
68
+ root := ttscTypiaTestRepoRoot(t)
69
+ base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
70
+ if err := os.MkdirAll(base, 0o755); err != nil {
71
+ t.Fatalf("mkdir temp base: %v", err)
72
+ }
73
+ dir, err := os.MkdirTemp(base, "project-dependencies-index-signature-alias-")
74
+ if err != nil {
75
+ t.Fatalf("create temp fixture: %v", err)
76
+ }
77
+ t.Cleanup(func() { _ = os.RemoveAll(dir) })
78
+ src := filepath.Join(dir, "src")
79
+ if err := os.MkdirAll(src, 0o755); err != nil {
80
+ t.Fatalf("mkdir fixture src: %v", err)
81
+ }
82
+ if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(projectDependenciesEnvelopeTSConfig), 0o644); err != nil {
83
+ t.Fatalf("write tsconfig: %v", err)
84
+ }
85
+ for name, body := range map[string]string{
86
+ "a.ts": projectDependenciesIndexSignatureAliasSourceA,
87
+ "model.ts": projectDependenciesIndexSignatureAliasSourceModel,
88
+ "key.ts": projectDependenciesIndexSignatureAliasSourceKey,
89
+ "value.ts": projectDependenciesIndexSignatureAliasSourceValue,
90
+ "kept.ts": projectDependenciesIndexSignatureAliasSourceKept,
91
+ "body.ts": projectDependenciesIndexSignatureAliasSourceBody,
92
+ } {
93
+ if err := os.WriteFile(filepath.Join(src, name), []byte(body), 0o644); err != nil {
94
+ t.Fatalf("write %s: %v", name, err)
95
+ }
96
+ }
97
+ return dir
98
+ }
99
+
100
+ const projectDependenciesIndexSignatureAliasSourceA = `import typia from "typia";
101
+
102
+ import { Holder, Target } from "./model";
103
+
104
+ export const validateTarget = (input: unknown) => typia.validate<Target>(input);
105
+ export const validateHolder = (input: unknown) => typia.validate<Holder>(input);
106
+ `
107
+
108
+ const projectDependenciesIndexSignatureAliasSourceModel = `import { BodyOnly } from "./body";
109
+ import { Kept } from "./kept";
110
+ import { Key } from "./key";
111
+ import { Value } from "./value";
112
+
113
+ export interface Target {
114
+ [key: Key]: Value;
115
+ }
116
+
117
+ export class Holder {
118
+ public kept!: Kept;
119
+
120
+ public describe(): string {
121
+ const helper: BodyOnly = { tag: "x" };
122
+ return helper.tag;
123
+ }
124
+ }
125
+ `
126
+
127
+ const projectDependenciesIndexSignatureAliasSourceKey = `export type Key = string;
128
+ `
129
+
130
+ const projectDependenciesIndexSignatureAliasSourceValue = `export type Value = string;
131
+ `
132
+
133
+ const projectDependenciesIndexSignatureAliasSourceKept = `export type Kept = number;
134
+ `
135
+
136
+ const projectDependenciesIndexSignatureAliasSourceBody = `export interface BodyOnly {
137
+ tag: string;
138
+ }
139
+ `
@@ -0,0 +1,122 @@
1
+ package main
2
+
3
+ import (
4
+ "encoding/json"
5
+ "os"
6
+ "path/filepath"
7
+ "testing"
8
+ )
9
+
10
+ // TestProjectDependenciesLocalReexportTransform verifies a barrel that imports
11
+ // a name before re-exporting it still reports the module it imported from.
12
+ //
13
+ // `export { Alpha } from "./mid"` carries its module on the export declaration,
14
+ // but the equivalent `import { Alpha } from "./mid"; export { Alpha };` carries
15
+ // none: the export specifier re-publishes a LOCAL binding. A walk that reads
16
+ // only export declarations therefore loses `mid.ts` — while re-pointing that
17
+ // import still changes the generated validator, which is the same missing-edge
18
+ // defect in a second syntactic form (samchon/typia#2126).
19
+ //
20
+ // 1. Build a project where `a.ts` validates `Alpha` from `barrel.ts`, which
21
+ // imports it from `mid.ts` and re-exports the local binding; `mid.ts` in
22
+ // turn re-exports it from `real.ts`.
23
+ // 2. Run project transform mode and decode the JSON envelope.
24
+ // 3. Assert `dependencies["src/a.ts"]` contains `barrel.ts`, the intermediate
25
+ // `mid.ts`, and the concrete `real.ts`.
26
+ // 4. Assert it does NOT contain `beta.ts`, which `barrel.ts` also imports but
27
+ // no consulted type reaches.
28
+ func TestProjectDependenciesLocalReexportTransform(t *testing.T) {
29
+ project := projectDependenciesLocalReexportProject(t)
30
+ out, errText, code := ttscTypiaTestCapture(func() int {
31
+ return runTransform([]string{
32
+ "--cwd", project,
33
+ "--tsconfig", "tsconfig.json",
34
+ "--output", "ts",
35
+ })
36
+ })
37
+ if code != 0 {
38
+ t.Fatalf("project transform failed: code=%d stderr=\n%s", code, errText)
39
+ }
40
+ var envelope struct {
41
+ Dependencies map[string][]string `json:"dependencies"`
42
+ }
43
+ if err := json.Unmarshal([]byte(out), &envelope); err != nil {
44
+ t.Fatalf("decode envelope: %v\n%s", err, out)
45
+ }
46
+ entries := envelope.Dependencies["src/a.ts"]
47
+ found := map[string]bool{}
48
+ for _, entry := range entries {
49
+ found[entry] = true
50
+ }
51
+ if !found["src/barrel.ts"] {
52
+ t.Fatalf("dependencies of src/a.ts must contain the barrel src/barrel.ts: %v", entries)
53
+ }
54
+ if !found["src/mid.ts"] {
55
+ t.Fatalf("dependencies of src/a.ts must contain the locally re-exported module src/mid.ts: %v", entries)
56
+ }
57
+ if !found["src/real.ts"] {
58
+ t.Fatalf("dependencies of src/a.ts must contain the concrete module src/real.ts: %v", entries)
59
+ }
60
+ if found["src/beta.ts"] {
61
+ t.Fatalf("dependencies of src/a.ts must not contain src/beta.ts, which the barrel imports but no consulted type reaches: %v", entries)
62
+ }
63
+ }
64
+
65
+ func projectDependenciesLocalReexportProject(t *testing.T) string {
66
+ t.Helper()
67
+ root := ttscTypiaTestRepoRoot(t)
68
+ base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
69
+ if err := os.MkdirAll(base, 0o755); err != nil {
70
+ t.Fatalf("mkdir temp base: %v", err)
71
+ }
72
+ dir, err := os.MkdirTemp(base, "project-dependencies-local-reexport-")
73
+ if err != nil {
74
+ t.Fatalf("create temp fixture: %v", err)
75
+ }
76
+ t.Cleanup(func() { _ = os.RemoveAll(dir) })
77
+ src := filepath.Join(dir, "src")
78
+ if err := os.MkdirAll(src, 0o755); err != nil {
79
+ t.Fatalf("mkdir fixture src: %v", err)
80
+ }
81
+ if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(projectDependenciesEnvelopeTSConfig), 0o644); err != nil {
82
+ t.Fatalf("write tsconfig: %v", err)
83
+ }
84
+ for name, body := range map[string]string{
85
+ "a.ts": projectDependenciesLocalReexportSourceA,
86
+ "barrel.ts": projectDependenciesLocalReexportSourceBarrel,
87
+ "mid.ts": projectDependenciesLocalReexportSourceMid,
88
+ "real.ts": projectDependenciesLocalReexportSourceReal,
89
+ "beta.ts": projectDependenciesLocalReexportSourceBeta,
90
+ } {
91
+ if err := os.WriteFile(filepath.Join(src, name), []byte(body), 0o644); err != nil {
92
+ t.Fatalf("write %s: %v", name, err)
93
+ }
94
+ }
95
+ return dir
96
+ }
97
+
98
+ const projectDependenciesLocalReexportSourceA = `import typia from "typia";
99
+
100
+ import { Alpha } from "./barrel";
101
+
102
+ export const validateAlpha = (input: unknown) => typia.validate<Alpha>(input);
103
+ `
104
+
105
+ const projectDependenciesLocalReexportSourceBarrel = `import { Alpha } from "./mid";
106
+ import { Beta } from "./beta";
107
+
108
+ export { Alpha, Beta };
109
+ `
110
+
111
+ const projectDependenciesLocalReexportSourceMid = `export { Alpha } from "./real";
112
+ `
113
+
114
+ const projectDependenciesLocalReexportSourceReal = `export interface Alpha {
115
+ id: string;
116
+ }
117
+ `
118
+
119
+ const projectDependenciesLocalReexportSourceBeta = `export interface Beta {
120
+ flag: boolean;
121
+ }
122
+ `
@@ -0,0 +1,125 @@
1
+ package main
2
+
3
+ import (
4
+ "encoding/json"
5
+ "os"
6
+ "path/filepath"
7
+ "testing"
8
+ )
9
+
10
+ // TestProjectDependenciesSignatureAliasTransform verifies call- and
11
+ // construct-signature types stay OUT of the reported dependencies.
12
+ //
13
+ // `dependencies` must name every file whose edit can change the generated
14
+ // output — and only those. Typia validates a callable as `typeof x ===
15
+ // "function"` and never inspects its parameter or return types, so editing
16
+ // them provably cannot change the emitted validator; reporting them would
17
+ // invalidate consumers on edits that cannot affect them. This is the negative
18
+ // half of samchon/typia#2126, whose positive half adds the barrel and
19
+ // index-signature edges: the two were confirmed by the same probe, which showed
20
+ // the generated output is unchanged across these edits.
21
+ //
22
+ // 1. Build a project where `a.ts` validates `Target` from `model.ts`, whose
23
+ // call signature returns `CallRet` (`callret.ts`) and whose construct
24
+ // signature returns `NewRet` (`newret.ts`), while an ordinary property
25
+ // references `Kept` (`kept.ts`).
26
+ // 2. Run project transform mode and decode the JSON envelope.
27
+ // 3. Assert `dependencies["src/a.ts"]` contains `model.ts` and `kept.ts`, so
28
+ // the fixture is genuinely analyzed.
29
+ // 4. Assert it contains neither `callret.ts` nor `newret.ts`.
30
+ func TestProjectDependenciesSignatureAliasTransform(t *testing.T) {
31
+ project := projectDependenciesSignatureAliasProject(t)
32
+ out, errText, code := ttscTypiaTestCapture(func() int {
33
+ return runTransform([]string{
34
+ "--cwd", project,
35
+ "--tsconfig", "tsconfig.json",
36
+ "--output", "ts",
37
+ })
38
+ })
39
+ if code != 0 {
40
+ t.Fatalf("project transform failed: code=%d stderr=\n%s", code, errText)
41
+ }
42
+ var envelope struct {
43
+ Dependencies map[string][]string `json:"dependencies"`
44
+ }
45
+ if err := json.Unmarshal([]byte(out), &envelope); err != nil {
46
+ t.Fatalf("decode envelope: %v\n%s", err, out)
47
+ }
48
+ entries := envelope.Dependencies["src/a.ts"]
49
+ found := map[string]bool{}
50
+ for _, entry := range entries {
51
+ found[entry] = true
52
+ }
53
+ if !found["src/model.ts"] {
54
+ t.Fatalf("dependencies of src/a.ts must contain the declaring file src/model.ts: %v", entries)
55
+ }
56
+ if !found["src/kept.ts"] {
57
+ t.Fatalf("dependencies of src/a.ts must contain the consulted property alias file src/kept.ts: %v", entries)
58
+ }
59
+ if found["src/callret.ts"] {
60
+ t.Fatalf("dependencies of src/a.ts must not contain src/callret.ts: a call signature's return type cannot change the generated validator: %v", entries)
61
+ }
62
+ if found["src/newret.ts"] {
63
+ t.Fatalf("dependencies of src/a.ts must not contain src/newret.ts: a construct signature's return type cannot change the generated validator: %v", entries)
64
+ }
65
+ }
66
+
67
+ func projectDependenciesSignatureAliasProject(t *testing.T) string {
68
+ t.Helper()
69
+ root := ttscTypiaTestRepoRoot(t)
70
+ base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
71
+ if err := os.MkdirAll(base, 0o755); err != nil {
72
+ t.Fatalf("mkdir temp base: %v", err)
73
+ }
74
+ dir, err := os.MkdirTemp(base, "project-dependencies-signature-alias-")
75
+ if err != nil {
76
+ t.Fatalf("create temp fixture: %v", err)
77
+ }
78
+ t.Cleanup(func() { _ = os.RemoveAll(dir) })
79
+ src := filepath.Join(dir, "src")
80
+ if err := os.MkdirAll(src, 0o755); err != nil {
81
+ t.Fatalf("mkdir fixture src: %v", err)
82
+ }
83
+ if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(projectDependenciesEnvelopeTSConfig), 0o644); err != nil {
84
+ t.Fatalf("write tsconfig: %v", err)
85
+ }
86
+ for name, body := range map[string]string{
87
+ "a.ts": projectDependenciesSignatureAliasSourceA,
88
+ "model.ts": projectDependenciesSignatureAliasSourceModel,
89
+ "callret.ts": projectDependenciesSignatureAliasSourceCallRet,
90
+ "newret.ts": projectDependenciesSignatureAliasSourceNewRet,
91
+ "kept.ts": projectDependenciesSignatureAliasSourceKept,
92
+ } {
93
+ if err := os.WriteFile(filepath.Join(src, name), []byte(body), 0o644); err != nil {
94
+ t.Fatalf("write %s: %v", name, err)
95
+ }
96
+ }
97
+ return dir
98
+ }
99
+
100
+ const projectDependenciesSignatureAliasSourceA = `import typia from "typia";
101
+
102
+ import { Target } from "./model";
103
+
104
+ export const validateTarget = (input: unknown) => typia.validate<Target>(input);
105
+ `
106
+
107
+ const projectDependenciesSignatureAliasSourceModel = `import { CallRet } from "./callret";
108
+ import { Kept } from "./kept";
109
+ import { NewRet } from "./newret";
110
+
111
+ export interface Target {
112
+ kept: Kept;
113
+ (arg: string): CallRet;
114
+ new (arg: string): NewRet;
115
+ }
116
+ `
117
+
118
+ const projectDependenciesSignatureAliasSourceCallRet = `export type CallRet = string;
119
+ `
120
+
121
+ const projectDependenciesSignatureAliasSourceNewRet = `export type NewRet = string;
122
+ `
123
+
124
+ const projectDependenciesSignatureAliasSourceKept = `export type Kept = number;
125
+ `