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
@@ -4,6 +4,7 @@
4
4
  package main
5
5
 
6
6
  import (
7
+ "encoding/json"
7
8
  "path/filepath"
8
9
  "strings"
9
10
  "testing"
@@ -16,10 +17,19 @@ import (
16
17
  // Running them through the same project transform mode gives Go coverage for
17
18
  // those native branches without duplicating that TypeScript corpus here.
18
19
  //
20
+ // Each project is held to what its purpose guarantees, never to what its sources
21
+ // happen to contain today. The feature projects exist to compile accepted typia
22
+ // call sites, so they must transform without a diagnostic. `tests/test-error`
23
+ // exists to hold call sites typia rejects, so it must report them. `tests/debug`
24
+ // is a scratchpad whose contents are arbitrary by design (samchon/typia#2141): a
25
+ // valid sample and a deliberately broken one are equally legitimate states, so
26
+ // only the envelope contract itself is asserted for it. Asserting that the
27
+ // scratchpad reports diagnostics is asserting that it always holds broken code.
28
+ //
19
29
  // 1. Resolve existing TypeScript catalog projects from the repository root.
20
30
  // 2. Run project transform mode so every source file contributes call sites.
21
31
  // 3. Require JSON project output to include a TypeScript map.
22
- // 4. Fail on any native transform diagnostic from the catalog project.
32
+ // 4. Hold each project to its own purpose's diagnostic contract.
23
33
  func TestProjectCatalogTransformCoverage(t *testing.T) {
24
34
  root := transformCoverageRepoRoot(t)
25
35
  for _, project := range []string{
@@ -35,14 +45,7 @@ func TestProjectCatalogTransformCoverage(t *testing.T) {
35
45
  } {
36
46
  project := project
37
47
  t.Run(project, func(t *testing.T) {
38
- cwd := filepath.Join(root, "tests", project)
39
- out, errText, code := transformCoverageCapture(func() int {
40
- return runTransform([]string{
41
- "--cwd", cwd,
42
- "--tsconfig", "tsconfig.json",
43
- "--output", "ts",
44
- })
45
- })
48
+ out, errText, code := transformCatalogProject(root, project)
46
49
  if code != 0 {
47
50
  t.Fatalf("%s transform failed: code=%d stderr=\n%s", project, code, errText)
48
51
  }
@@ -51,23 +54,66 @@ func TestProjectCatalogTransformCoverage(t *testing.T) {
51
54
  }
52
55
  })
53
56
  }
54
- for _, project := range []string{"debug", "test-error"} {
55
- project := project
56
- t.Run(project, func(t *testing.T) {
57
- cwd := filepath.Join(root, "tests", project)
58
- out, _, code := transformCoverageCapture(func() int {
59
- return runTransform([]string{
60
- "--cwd", cwd,
61
- "--tsconfig", "tsconfig.json",
62
- "--output", "ts",
63
- })
64
- })
65
- if code != 3 {
66
- t.Fatalf("%s transform should report diagnostics with code 3, got %d", project, code)
67
- }
68
- if !strings.Contains(out, `"diagnostics"`) || !strings.Contains(out, `"typescript"`) {
69
- t.Fatalf("%s output should include diagnostics and TypeScript map:\n%s", project, out)
70
- }
57
+ // tests/test-error compiles deliberately invalid call sites, and reporting them
58
+ // is that workspace's entire reason to exist. Its diagnostics are a contract,
59
+ // not an accident of what it currently holds.
60
+ t.Run("test-error", func(t *testing.T) {
61
+ out, _, code := transformCatalogProject(root, "test-error")
62
+ if code != 3 {
63
+ t.Fatalf("test-error transform should report diagnostics with code 3, got %d", code)
64
+ }
65
+ if !strings.Contains(out, `"diagnostics"`) || !strings.Contains(out, `"typescript"`) {
66
+ t.Fatalf("test-error output should include diagnostics and TypeScript map:\n%s", out)
67
+ }
68
+ })
69
+ // tests/debug is a one-off repro scratchpad, so nothing about its sources is
70
+ // promised: it holds valid code between investigations and invalid code during
71
+ // one. What survives both states is the project transform's own envelope
72
+ // contract, so that is what this pins. The project must resolve and reach a
73
+ // transform decision rather than fail to load (exit 2), it must still
74
+ // contribute transformed sources, and its exit code must agree with the
75
+ // envelope it published.
76
+ //
77
+ // Accepting either 0 or 3 is derived, not observed: transform mode never
78
+ // typechecks, so exit 2 is reachable only from a flag, cwd, or tsconfig-load
79
+ // failure (semantic diagnostics belong to the build route). No source content a
80
+ // repro leaves behind can produce it -- even an outright type error still exits
81
+ // 0 here -- which is what makes the band content-agnostic.
82
+ //
83
+ // The envelope is decoded rather than substring-matched because `"typescript"`
84
+ // carries no `omitempty` and runTransformProject initializes the map before its
85
+ // source loop: the key is present even when the workspace resolved no source at
86
+ // all. That empty envelope is the shape a `rootDir` or `include` rot leaves
87
+ // behind, and this workspace is the one that already shipped such a rot
88
+ // (samchon/typia#2132), so a key-presence check would pass over the one failure
89
+ // worth catching here.
90
+ t.Run("debug", func(t *testing.T) {
91
+ out, errText, code := transformCatalogProject(root, "debug")
92
+ if code != 0 && code != 3 {
93
+ t.Fatalf("debug transform should load and transform the project, got code=%d stderr=\n%s", code, errText)
94
+ }
95
+ var envelope transformProjectOutput
96
+ if err := json.Unmarshal([]byte(out), &envelope); err != nil {
97
+ t.Fatalf("debug project output should be a transform envelope: %v\n%s", err, out)
98
+ }
99
+ if len(envelope.TypeScript) == 0 {
100
+ t.Fatalf("debug project should contribute transformed sources, got an empty TypeScript map:\n%s", out)
101
+ }
102
+ if diagnosed := len(envelope.Diagnostics) > 0; diagnosed != (code == 3) {
103
+ t.Fatalf("debug exit code %d disagrees with its envelope (diagnostics present: %v):\n%s", code, diagnosed, out)
104
+ }
105
+ })
106
+ }
107
+
108
+ // transformCatalogProject runs project transform mode over one repository test
109
+ // project and returns its captured stdout, stderr, and exit code.
110
+ func transformCatalogProject(root string, project string) (string, string, int) {
111
+ cwd := filepath.Join(root, "tests", project)
112
+ return transformCoverageCapture(func() int {
113
+ return runTransform([]string{
114
+ "--cwd", cwd,
115
+ "--tsconfig", "tsconfig.json",
116
+ "--output", "ts",
71
117
  })
72
- }
118
+ })
73
119
  }
@@ -0,0 +1,120 @@
1
+ package main
2
+
3
+ import (
4
+ "encoding/json"
5
+ "os"
6
+ "path/filepath"
7
+ "testing"
8
+ )
9
+
10
+ // TestProjectDependenciesBarrelReexportTransform verifies every barrel a type
11
+ // is reached through registers, and no sibling the barrel merely also exports.
12
+ //
13
+ // A barrel re-export is an intermediate whose CONTENTS select which declaration
14
+ // the reference reaches: re-pointing `export { Alpha } from "./alpha"` at
15
+ // another module changes the generated validator. Resolving the alias straight
16
+ // to its terminus reported only the concrete module, so a bundler cache had no
17
+ // edge to invalidate and served a stale validator (samchon/typia#2126). The
18
+ // negative twin pins the other direction — the chain must report the modules it
19
+ // walked, not everything the barrels export.
20
+ //
21
+ // 1. Build a project where `a.ts` validates `Alpha` imported from `barrel.ts`,
22
+ // which re-exports it from `inner.ts`, which re-exports it from `alpha.ts`;
23
+ // `barrel.ts` also re-exports an unconsumed `Beta` from `beta.ts`.
24
+ // 2. Run project transform mode and decode the JSON envelope.
25
+ // 3. Assert `dependencies["src/a.ts"]` contains both barrels (`barrel.ts`,
26
+ // `inner.ts`) and the concrete module `alpha.ts`.
27
+ // 4. Assert it does NOT contain `beta.ts`, which no consulted type reaches.
28
+ func TestProjectDependenciesBarrelReexportTransform(t *testing.T) {
29
+ project := projectDependenciesBarrelReexportProject(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/inner.ts"] {
55
+ t.Fatalf("dependencies of src/a.ts must contain the chained barrel src/inner.ts: %v", entries)
56
+ }
57
+ if !found["src/alpha.ts"] {
58
+ t.Fatalf("dependencies of src/a.ts must contain the concrete module src/alpha.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 exports but no consulted type reaches: %v", entries)
62
+ }
63
+ }
64
+
65
+ func projectDependenciesBarrelReexportProject(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-barrel-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": projectDependenciesBarrelReexportSourceA,
86
+ "barrel.ts": projectDependenciesBarrelReexportSourceBarrel,
87
+ "inner.ts": projectDependenciesBarrelReexportSourceInner,
88
+ "alpha.ts": projectDependenciesBarrelReexportSourceAlpha,
89
+ "beta.ts": projectDependenciesBarrelReexportSourceBeta,
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 projectDependenciesBarrelReexportSourceA = `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 projectDependenciesBarrelReexportSourceBarrel = `export { Alpha } from "./inner";
106
+ export { Beta } from "./beta";
107
+ `
108
+
109
+ const projectDependenciesBarrelReexportSourceInner = `export { Alpha } from "./alpha";
110
+ `
111
+
112
+ const projectDependenciesBarrelReexportSourceAlpha = `export interface Alpha {
113
+ id: string;
114
+ }
115
+ `
116
+
117
+ const projectDependenciesBarrelReexportSourceBeta = `export interface Beta {
118
+ flag: boolean;
119
+ }
120
+ `
@@ -0,0 +1,134 @@
1
+ package main
2
+
3
+ import (
4
+ "encoding/json"
5
+ "os"
6
+ "path/filepath"
7
+ "testing"
8
+ )
9
+
10
+ // TestProjectDependenciesCollapsedAliasTransform verifies written references
11
+ // register files the checker's type graph collapses, and nothing more.
12
+ //
13
+ // An alias of an intrinsic (`type Inner = number`) is interned by the checker
14
+ // without an alias symbol, so the semantic type-graph touches alone can never
15
+ // see its declaring file — only the WRITTEN reference walk can. The negative
16
+ // twin pins the walk's boundary: a type referenced only inside a method BODY
17
+ // is not part of the consulted type surface and must not register.
18
+ //
19
+ // 1. Build a project where `a.ts` validates `Outer` (`t.ts`, an alias whose
20
+ // property type is the collapsed alias `Inner` from `u.ts`), the directly
21
+ // collapsed alias `Direct` from `v.ts`, and a class from `m.ts` whose
22
+ // method body (and only its body) references a type from `w.ts`.
23
+ // 2. Run project transform mode and decode the JSON envelope.
24
+ // 3. Assert `dependencies["src/a.ts"]` contains `t.ts`, `u.ts`, and `v.ts`.
25
+ // 4. Assert it does NOT contain `w.ts` (body-only reference).
26
+ func TestProjectDependenciesCollapsedAliasTransform(t *testing.T) {
27
+ project := projectDependenciesCollapsedAliasProject(t)
28
+ out, errText, code := ttscTypiaTestCapture(func() int {
29
+ return runTransform([]string{
30
+ "--cwd", project,
31
+ "--tsconfig", "tsconfig.json",
32
+ "--output", "ts",
33
+ })
34
+ })
35
+ if code != 0 {
36
+ t.Fatalf("project transform failed: code=%d stderr=\n%s", code, errText)
37
+ }
38
+ var envelope struct {
39
+ Dependencies map[string][]string `json:"dependencies"`
40
+ }
41
+ if err := json.Unmarshal([]byte(out), &envelope); err != nil {
42
+ t.Fatalf("decode envelope: %v\n%s", err, out)
43
+ }
44
+ entries := envelope.Dependencies["src/a.ts"]
45
+ found := map[string]bool{}
46
+ for _, entry := range entries {
47
+ found[entry] = true
48
+ }
49
+ if !found["src/t.ts"] {
50
+ t.Fatalf("dependencies of src/a.ts must contain the outer alias file src/t.ts: %v", entries)
51
+ }
52
+ if !found["src/u.ts"] {
53
+ t.Fatalf("dependencies of src/a.ts must contain the collapsed property alias file src/u.ts: %v", entries)
54
+ }
55
+ if !found["src/v.ts"] {
56
+ t.Fatalf("dependencies of src/a.ts must contain the collapsed top-level alias file src/v.ts: %v", entries)
57
+ }
58
+ if found["src/w.ts"] {
59
+ t.Fatalf("dependencies of src/a.ts must not contain the body-only reference file src/w.ts: %v", entries)
60
+ }
61
+ }
62
+
63
+ func projectDependenciesCollapsedAliasProject(t *testing.T) string {
64
+ t.Helper()
65
+ root := ttscTypiaTestRepoRoot(t)
66
+ base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
67
+ if err := os.MkdirAll(base, 0o755); err != nil {
68
+ t.Fatalf("mkdir temp base: %v", err)
69
+ }
70
+ dir, err := os.MkdirTemp(base, "project-dependencies-collapsed-alias-")
71
+ if err != nil {
72
+ t.Fatalf("create temp fixture: %v", err)
73
+ }
74
+ t.Cleanup(func() { _ = os.RemoveAll(dir) })
75
+ src := filepath.Join(dir, "src")
76
+ if err := os.MkdirAll(src, 0o755); err != nil {
77
+ t.Fatalf("mkdir fixture src: %v", err)
78
+ }
79
+ if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(projectDependenciesEnvelopeTSConfig), 0o644); err != nil {
80
+ t.Fatalf("write tsconfig: %v", err)
81
+ }
82
+ for name, body := range map[string]string{
83
+ "a.ts": projectDependenciesCollapsedAliasSourceA,
84
+ "t.ts": projectDependenciesCollapsedAliasSourceT,
85
+ "u.ts": projectDependenciesCollapsedAliasSourceU,
86
+ "v.ts": projectDependenciesCollapsedAliasSourceV,
87
+ "m.ts": projectDependenciesCollapsedAliasSourceM,
88
+ "w.ts": projectDependenciesCollapsedAliasSourceW,
89
+ } {
90
+ if err := os.WriteFile(filepath.Join(src, name), []byte(body), 0o644); err != nil {
91
+ t.Fatalf("write %s: %v", name, err)
92
+ }
93
+ }
94
+ return dir
95
+ }
96
+
97
+ const projectDependenciesCollapsedAliasSourceA = `import typia from "typia";
98
+
99
+ import { WithMethod } from "./m";
100
+ import { Outer } from "./t";
101
+ import { Direct } from "./v";
102
+
103
+ export const validateOuter = (input: unknown) => typia.validate<Outer>(input);
104
+ export const validateDirect = (input: unknown) => typia.validate<Direct>(input);
105
+ export const validateWithMethod = (input: unknown) => typia.validate<WithMethod>(input);
106
+ `
107
+
108
+ const projectDependenciesCollapsedAliasSourceT = `import { Inner } from "./u";
109
+
110
+ export type Outer = { value: Inner };
111
+ `
112
+
113
+ const projectDependenciesCollapsedAliasSourceU = `export type Inner = number;
114
+ `
115
+
116
+ const projectDependenciesCollapsedAliasSourceV = `export type Direct = string;
117
+ `
118
+
119
+ const projectDependenciesCollapsedAliasSourceM = `import { BodyOnly } from "./w";
120
+
121
+ export class WithMethod {
122
+ public id!: string;
123
+
124
+ public describe(): string {
125
+ const helper: BodyOnly = { tag: "x" };
126
+ return helper.tag;
127
+ }
128
+ }
129
+ `
130
+
131
+ const projectDependenciesCollapsedAliasSourceW = `export interface BodyOnly {
132
+ tag: string;
133
+ }
134
+ `
@@ -0,0 +1,135 @@
1
+ package main
2
+
3
+ import (
4
+ "encoding/json"
5
+ "os"
6
+ "path/filepath"
7
+ "strings"
8
+ "testing"
9
+ )
10
+
11
+ // TestProjectDependenciesCustomLibNameTransform verifies a project-owned
12
+ // ambient declaration file named `lib.custom.d.ts` appears in the transform
13
+ // envelope's `dependencies`.
14
+ //
15
+ // Default-library exclusion must come from the compiler's own classification,
16
+ // never from a filename pattern: a basename predicate (`lib.*.d.ts`) silently
17
+ // drops a project's own ambient file with that common naming, so its changes
18
+ // never invalidate consumers and persistent bundler caches serve stale
19
+ // validators (samchon/typia#2108). Compiler-owned default libraries must still
20
+ // stay excluded.
21
+ //
22
+ // 1. Build a project where `a.ts` calls `typia.validate<Bee>()` with `Bee`
23
+ // declared in `b.ts` consuming the ambient `CustomAmbient` interface
24
+ // declared in `src/lib.custom.d.ts`, plus a `Date` property so the
25
+ // analysis touches real default libraries.
26
+ // 2. Run project transform mode and decode the JSON envelope.
27
+ // 3. Assert `dependencies["src/a.ts"]` contains `src/lib.custom.d.ts`.
28
+ // 4. Assert no compiler-owned default library (virtual `bundled:///` URI or
29
+ // any value outside the project) leaks into the entry.
30
+ func TestProjectDependenciesCustomLibNameTransform(t *testing.T) {
31
+ project := projectDependenciesCustomLibNameProject(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
+ TypeScript map[string]string `json:"typescript"`
44
+ Dependencies map[string][]string `json:"dependencies"`
45
+ }
46
+ if err := json.Unmarshal([]byte(out), &envelope); err != nil {
47
+ t.Fatalf("decode envelope: %v\n%s", err, out)
48
+ }
49
+ entries := envelope.Dependencies["src/a.ts"]
50
+ if len(entries) == 0 {
51
+ t.Fatalf("dependencies must contain an entry for src/a.ts:\n%s", out)
52
+ }
53
+ found := map[string]bool{}
54
+ for _, entry := range entries {
55
+ found[entry] = true
56
+ if strings.Contains(entry, "://") {
57
+ t.Fatalf("dependencies must exclude virtual URI sources, got %q in %v", entry, entries)
58
+ }
59
+ if filepath.IsAbs(filepath.FromSlash(entry)) || strings.HasPrefix(entry, "../") {
60
+ t.Fatalf("dependencies must not report files outside the project, got %q in %v", entry, entries)
61
+ }
62
+ }
63
+ if !found["src/lib.custom.d.ts"] {
64
+ t.Fatalf("dependencies of src/a.ts must contain the project-owned src/lib.custom.d.ts: %v", entries)
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
+ }
70
+
71
+ func projectDependenciesCustomLibNameProject(t *testing.T) string {
72
+ t.Helper()
73
+ root := ttscTypiaTestRepoRoot(t)
74
+ base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
75
+ if err := os.MkdirAll(base, 0o755); err != nil {
76
+ t.Fatalf("mkdir temp base: %v", err)
77
+ }
78
+ dir, err := os.MkdirTemp(base, "project-dependencies-custom-lib-name-")
79
+ if err != nil {
80
+ t.Fatalf("create temp fixture: %v", err)
81
+ }
82
+ t.Cleanup(func() { _ = os.RemoveAll(dir) })
83
+ src := filepath.Join(dir, "src")
84
+ if err := os.MkdirAll(src, 0o755); err != nil {
85
+ t.Fatalf("mkdir fixture src: %v", err)
86
+ }
87
+ if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(projectDependenciesCustomLibNameTSConfig), 0o644); err != nil {
88
+ t.Fatalf("write tsconfig: %v", err)
89
+ }
90
+ for name, body := range map[string]string{
91
+ "a.ts": projectDependenciesCustomLibNameSourceA,
92
+ "b.ts": projectDependenciesCustomLibNameSourceB,
93
+ "lib.custom.d.ts": projectDependenciesCustomLibNameSourceLib,
94
+ } {
95
+ if err := os.WriteFile(filepath.Join(src, name), []byte(body), 0o644); err != nil {
96
+ t.Fatalf("write %s: %v", name, err)
97
+ }
98
+ }
99
+ return dir
100
+ }
101
+
102
+ const projectDependenciesCustomLibNameTSConfig = `{
103
+ "compilerOptions": {
104
+ "target": "ES2022",
105
+ "module": "commonjs",
106
+ "moduleResolution": "bundler",
107
+ "ignoreDeprecations": "6.0",
108
+ "esModuleInterop": true,
109
+ "strict": true,
110
+ "skipLibCheck": true,
111
+ "rootDir": "src",
112
+ "outDir": "dist"
113
+ },
114
+ "include": ["src"]
115
+ }
116
+ `
117
+
118
+ const projectDependenciesCustomLibNameSourceA = `import typia from "typia";
119
+
120
+ import { Bee } from "./b";
121
+
122
+ export const validateBee = (input: unknown) => typia.validate<Bee>(input);
123
+ `
124
+
125
+ const projectDependenciesCustomLibNameSourceB = `export interface Bee {
126
+ id: string;
127
+ when: Date;
128
+ ambient: CustomAmbient;
129
+ }
130
+ `
131
+
132
+ const projectDependenciesCustomLibNameSourceLib = `declare interface CustomAmbient {
133
+ tag: string;
134
+ }
135
+ `
@@ -0,0 +1,114 @@
1
+ package main
2
+
3
+ import (
4
+ "encoding/json"
5
+ "os"
6
+ "path/filepath"
7
+ "testing"
8
+ )
9
+
10
+ // TestProjectDependenciesDefaultBarrelTransform verifies a default-export
11
+ // barrel reports the module it forwards to, and never a same-named sibling.
12
+ //
13
+ // A default import binds `default`, not its own local name, so an alias walk
14
+ // that stepped through the local name would look up whatever the barrel happens
15
+ // to export under it — reporting a module the reference never consults and
16
+ // invalidating consumers on edits that cannot reach them. `dependencies` names
17
+ // every file whose edit can change the generated output and ONLY those, so this
18
+ // pins both halves of that invariant on one fixture (samchon/typia#2126).
19
+ //
20
+ // 1. Build a project where `a.ts` validates the default import `Alpha` from
21
+ // `barrel.ts`, which forwards `default` from `real.ts` while separately
22
+ // exporting an unrelated NAMED `Alpha` from `unrelated.ts`.
23
+ // 2. Run project transform mode and decode the JSON envelope.
24
+ // 3. Assert `dependencies["src/a.ts"]` contains `barrel.ts` and `real.ts`.
25
+ // 4. Assert it does NOT contain `unrelated.ts`, whose only tie to the walk is
26
+ // sharing the local name of the default import.
27
+ func TestProjectDependenciesDefaultBarrelTransform(t *testing.T) {
28
+ project := projectDependenciesDefaultBarrelProject(t)
29
+ out, errText, code := ttscTypiaTestCapture(func() int {
30
+ return runTransform([]string{
31
+ "--cwd", project,
32
+ "--tsconfig", "tsconfig.json",
33
+ "--output", "ts",
34
+ })
35
+ })
36
+ if code != 0 {
37
+ t.Fatalf("project transform failed: code=%d stderr=\n%s", code, errText)
38
+ }
39
+ var envelope struct {
40
+ Dependencies map[string][]string `json:"dependencies"`
41
+ }
42
+ if err := json.Unmarshal([]byte(out), &envelope); err != nil {
43
+ t.Fatalf("decode envelope: %v\n%s", err, out)
44
+ }
45
+ entries := envelope.Dependencies["src/a.ts"]
46
+ found := map[string]bool{}
47
+ for _, entry := range entries {
48
+ found[entry] = true
49
+ }
50
+ if !found["src/barrel.ts"] {
51
+ t.Fatalf("dependencies of src/a.ts must contain the default barrel src/barrel.ts: %v", entries)
52
+ }
53
+ if !found["src/real.ts"] {
54
+ t.Fatalf("dependencies of src/a.ts must contain the forwarded module src/real.ts: %v", entries)
55
+ }
56
+ if found["src/unrelated.ts"] {
57
+ t.Fatalf("dependencies of src/a.ts must not contain src/unrelated.ts: the default import never consults the barrel's same-named export: %v", entries)
58
+ }
59
+ }
60
+
61
+ func projectDependenciesDefaultBarrelProject(t *testing.T) string {
62
+ t.Helper()
63
+ root := ttscTypiaTestRepoRoot(t)
64
+ base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
65
+ if err := os.MkdirAll(base, 0o755); err != nil {
66
+ t.Fatalf("mkdir temp base: %v", err)
67
+ }
68
+ dir, err := os.MkdirTemp(base, "project-dependencies-default-barrel-")
69
+ if err != nil {
70
+ t.Fatalf("create temp fixture: %v", err)
71
+ }
72
+ t.Cleanup(func() { _ = os.RemoveAll(dir) })
73
+ src := filepath.Join(dir, "src")
74
+ if err := os.MkdirAll(src, 0o755); err != nil {
75
+ t.Fatalf("mkdir fixture src: %v", err)
76
+ }
77
+ if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(projectDependenciesEnvelopeTSConfig), 0o644); err != nil {
78
+ t.Fatalf("write tsconfig: %v", err)
79
+ }
80
+ for name, body := range map[string]string{
81
+ "a.ts": projectDependenciesDefaultBarrelSourceA,
82
+ "barrel.ts": projectDependenciesDefaultBarrelSourceBarrel,
83
+ "real.ts": projectDependenciesDefaultBarrelSourceReal,
84
+ "unrelated.ts": projectDependenciesDefaultBarrelSourceUnrelated,
85
+ } {
86
+ if err := os.WriteFile(filepath.Join(src, name), []byte(body), 0o644); err != nil {
87
+ t.Fatalf("write %s: %v", name, err)
88
+ }
89
+ }
90
+ return dir
91
+ }
92
+
93
+ const projectDependenciesDefaultBarrelSourceA = `import typia from "typia";
94
+
95
+ import Alpha from "./barrel";
96
+
97
+ export const validateAlpha = (input: unknown) => typia.validate<Alpha>(input);
98
+ `
99
+
100
+ const projectDependenciesDefaultBarrelSourceBarrel = `export { default } from "./real";
101
+ export { Alpha } from "./unrelated";
102
+ `
103
+
104
+ const projectDependenciesDefaultBarrelSourceReal = `interface Real {
105
+ id: string;
106
+ }
107
+
108
+ export default Real;
109
+ `
110
+
111
+ const projectDependenciesDefaultBarrelSourceUnrelated = `export interface Alpha {
112
+ nope: boolean;
113
+ }
114
+ `