typia 13.1.1 → 13.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/README.md +3 -0
  2. package/lib/_virtual/_rolldown/runtime.mjs +1 -5
  3. package/lib/executable/FileSystemIdentity.d.ts +44 -0
  4. package/lib/executable/FileSystemIdentity.js +213 -0
  5. package/lib/executable/FileSystemIdentity.js.map +1 -0
  6. package/lib/executable/FileSystemIdentity.mjs +133 -0
  7. package/lib/executable/FileSystemIdentity.mjs.map +1 -0
  8. package/lib/executable/TypiaGenerateWizard.js +272 -106
  9. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  10. package/lib/executable/TypiaGenerateWizard.mjs +239 -95
  11. package/lib/executable/TypiaGenerateWizard.mjs.map +1 -1
  12. package/lib/functional.d.ts +15 -12
  13. package/lib/functional.js.map +1 -1
  14. package/lib/functional.mjs.map +1 -1
  15. package/lib/internal/_ProtobufReader.d.ts +32 -0
  16. package/lib/internal/_ProtobufReader.js +148 -48
  17. package/lib/internal/_ProtobufReader.js.map +1 -1
  18. package/lib/internal/_ProtobufReader.mjs +137 -41
  19. package/lib/internal/_ProtobufReader.mjs.map +1 -1
  20. package/lib/internal/_createStandardSchema.js +18 -1
  21. package/lib/internal/_createStandardSchema.js.map +1 -1
  22. package/lib/internal/_createStandardSchema.mjs +12 -1
  23. package/lib/internal/_createStandardSchema.mjs.map +1 -1
  24. package/lib/internal/_decimal.d.ts +14 -0
  25. package/lib/internal/_decimal.js +61 -0
  26. package/lib/internal/_decimal.js.map +1 -0
  27. package/lib/internal/_decimal.mjs +49 -0
  28. package/lib/internal/_decimal.mjs.map +1 -0
  29. package/lib/internal/_httpQueryParseURLSearchParams.js +23 -2
  30. package/lib/internal/_httpQueryParseURLSearchParams.js.map +1 -1
  31. package/lib/internal/_httpQueryParseURLSearchParams.mjs +20 -2
  32. package/lib/internal/_httpQueryParseURLSearchParams.mjs.map +1 -1
  33. package/lib/internal/_isFormatByte.js +2 -5
  34. package/lib/internal/_isFormatByte.js.map +1 -1
  35. package/lib/internal/_isFormatByte.mjs +2 -5
  36. package/lib/internal/_isFormatByte.mjs.map +1 -1
  37. package/lib/internal/_isFormatDate.js +15 -2
  38. package/lib/internal/_isFormatDate.js.map +1 -1
  39. package/lib/internal/_isFormatDate.mjs +22 -2
  40. package/lib/internal/_isFormatDate.mjs.map +1 -1
  41. package/lib/internal/_isFormatDateTime.js +21 -2
  42. package/lib/internal/_isFormatDateTime.js.map +1 -1
  43. package/lib/internal/_isFormatDateTime.mjs +13 -2
  44. package/lib/internal/_isFormatDateTime.mjs.map +1 -1
  45. package/lib/internal/_isFormatIri.js +3 -2
  46. package/lib/internal/_isFormatIri.js.map +1 -1
  47. package/lib/internal/_isFormatIri.mjs +3 -2
  48. package/lib/internal/_isFormatIri.mjs.map +1 -1
  49. package/lib/internal/_isFormatIriReference.js +10 -2
  50. package/lib/internal/_isFormatIriReference.js.map +1 -1
  51. package/lib/internal/_isFormatIriReference.mjs +9 -2
  52. package/lib/internal/_isFormatIriReference.mjs.map +1 -1
  53. package/lib/internal/_isFormatUriReference.js +1 -1
  54. package/lib/internal/_isFormatUriReference.js.map +1 -1
  55. package/lib/internal/_isFormatUriReference.mjs +1 -1
  56. package/lib/internal/_isFormatUriReference.mjs.map +1 -1
  57. package/lib/internal/_isMultipleOf.d.ts +1 -0
  58. package/lib/internal/_isMultipleOf.js +13 -0
  59. package/lib/internal/_isMultipleOf.js.map +1 -0
  60. package/lib/internal/_isMultipleOf.mjs +12 -0
  61. package/lib/internal/_isMultipleOf.mjs.map +1 -0
  62. package/lib/internal/_isTypeFloat.js +1 -1
  63. package/lib/internal/_isTypeFloat.js.map +1 -1
  64. package/lib/internal/_isTypeFloat.mjs +1 -1
  65. package/lib/internal/_isTypeFloat.mjs.map +1 -1
  66. package/lib/internal/_isTypeInt64.js +1 -0
  67. package/lib/internal/_isTypeInt64.js.map +1 -1
  68. package/lib/internal/_isTypeInt64.mjs.map +1 -1
  69. package/lib/internal/_isTypeInt64Bigint.d.ts +1 -0
  70. package/lib/internal/_isTypeInt64Bigint.js +15 -0
  71. package/lib/internal/_isTypeInt64Bigint.js.map +1 -0
  72. package/lib/internal/_isTypeInt64Bigint.mjs +8 -0
  73. package/lib/internal/_isTypeInt64Bigint.mjs.map +1 -0
  74. package/lib/internal/_isTypeUint64.js +1 -0
  75. package/lib/internal/_isTypeUint64.js.map +1 -1
  76. package/lib/internal/_isTypeUint64.mjs.map +1 -1
  77. package/lib/internal/_isTypeUint64Bigint.d.ts +1 -0
  78. package/lib/internal/_isTypeUint64Bigint.js +10 -0
  79. package/lib/internal/_isTypeUint64Bigint.js.map +1 -0
  80. package/lib/internal/_isTypeUint64Bigint.mjs +8 -0
  81. package/lib/internal/_isTypeUint64Bigint.mjs.map +1 -0
  82. package/lib/internal/_isUniqueItems.js +96 -109
  83. package/lib/internal/_isUniqueItems.js.map +1 -1
  84. package/lib/internal/_isUniqueItems.mjs +62 -50
  85. package/lib/internal/_isUniqueItems.mjs.map +1 -1
  86. package/lib/internal/_jsonStringifyArray.d.ts +1 -0
  87. package/lib/internal/_jsonStringifyArray.js +48 -0
  88. package/lib/internal/_jsonStringifyArray.js.map +1 -0
  89. package/lib/internal/_jsonStringifyArray.mjs +40 -0
  90. package/lib/internal/_jsonStringifyArray.mjs.map +1 -0
  91. package/lib/internal/_jsonStringifyElement.d.ts +1 -0
  92. package/lib/internal/_jsonStringifyElement.js +23 -0
  93. package/lib/internal/_jsonStringifyElement.js.map +1 -0
  94. package/lib/internal/_jsonStringifyElement.mjs +23 -0
  95. package/lib/internal/_jsonStringifyElement.mjs.map +1 -0
  96. package/lib/internal/_jsonStringifyProperty.d.ts +1 -0
  97. package/lib/internal/_jsonStringifyProperty.js +31 -0
  98. package/lib/internal/_jsonStringifyProperty.js.map +1 -0
  99. package/lib/internal/_jsonStringifyProperty.mjs +31 -0
  100. package/lib/internal/_jsonStringifyProperty.mjs.map +1 -0
  101. package/lib/internal/_llmApplicationFinalize.js +1 -1
  102. package/lib/internal/_llmApplicationFinalize.js.map +1 -1
  103. package/lib/internal/_llmApplicationFinalize.mjs +1 -1
  104. package/lib/internal/_llmApplicationFinalize.mjs.map +1 -1
  105. package/lib/internal/_notationAny.js +8 -1
  106. package/lib/internal/_notationAny.js.map +1 -1
  107. package/lib/internal/_notationAny.mjs +7 -1
  108. package/lib/internal/_notationAny.mjs.map +1 -1
  109. package/lib/internal/_notationAssign.d.ts +1 -0
  110. package/lib/internal/_notationAssign.js +18 -0
  111. package/lib/internal/_notationAssign.js.map +1 -0
  112. package/lib/internal/_notationAssign.mjs +17 -0
  113. package/lib/internal/_notationAssign.mjs.map +1 -0
  114. package/lib/internal/_notationCamel.js +30 -9
  115. package/lib/internal/_notationCamel.js.map +1 -1
  116. package/lib/internal/_notationCamel.mjs +13 -5
  117. package/lib/internal/_notationCamel.mjs.map +1 -1
  118. package/lib/internal/_notationKebab.d.ts +1 -0
  119. package/lib/internal/_notationKebab.js +15 -0
  120. package/lib/internal/_notationKebab.js.map +1 -0
  121. package/lib/internal/_notationKebab.mjs +15 -0
  122. package/lib/internal/_notationKebab.mjs.map +1 -0
  123. package/lib/internal/_notationKeyCollision.d.ts +1 -0
  124. package/lib/internal/_notationKeyCollision.js +8 -0
  125. package/lib/internal/_notationKeyCollision.js.map +1 -0
  126. package/lib/internal/_notationKeyCollision.mjs +8 -0
  127. package/lib/internal/_notationKeyCollision.mjs.map +1 -0
  128. package/lib/internal/_notationPascal.js +20 -5
  129. package/lib/internal/_notationPascal.js.map +1 -1
  130. package/lib/internal/_notationPascal.mjs +10 -5
  131. package/lib/internal/_notationPascal.mjs.map +1 -1
  132. package/lib/internal/_notationSnake.js +25 -22
  133. package/lib/internal/_notationSnake.js.map +1 -1
  134. package/lib/internal/_notationSnake.mjs +11 -11
  135. package/lib/internal/_notationSnake.mjs.map +1 -1
  136. package/lib/internal/_plainCloneAny.js +174 -38
  137. package/lib/internal/_plainCloneAny.js.map +1 -1
  138. package/lib/internal/_plainCloneAny.mjs +126 -22
  139. package/lib/internal/_plainCloneAny.mjs.map +1 -1
  140. package/lib/internal/_randomArray.d.ts +1 -1
  141. package/lib/internal/_randomArray.js +11 -4
  142. package/lib/internal/_randomArray.js.map +1 -1
  143. package/lib/internal/_randomArray.mjs +9 -3
  144. package/lib/internal/_randomArray.mjs.map +1 -1
  145. package/lib/internal/_randomFormatByte.d.ts +2 -1
  146. package/lib/internal/_randomFormatByte.js +25 -1
  147. package/lib/internal/_randomFormatByte.js.map +1 -1
  148. package/lib/internal/_randomFormatByte.mjs +20 -1
  149. package/lib/internal/_randomFormatByte.mjs.map +1 -1
  150. package/lib/internal/_randomFormatDate.d.ts +3 -4
  151. package/lib/internal/_randomFormatDate.js +3 -10
  152. package/lib/internal/_randomFormatDate.js.map +1 -1
  153. package/lib/internal/_randomFormatDate.mjs +3 -6
  154. package/lib/internal/_randomFormatDate.mjs.map +1 -1
  155. package/lib/internal/_randomFormatDatetime.d.ts +3 -4
  156. package/lib/internal/_randomFormatDatetime.js +26 -8
  157. package/lib/internal/_randomFormatDatetime.js.map +1 -1
  158. package/lib/internal/_randomFormatDatetime.mjs +17 -6
  159. package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
  160. package/lib/internal/_randomFormatDuration.d.ts +2 -1
  161. package/lib/internal/_randomFormatDuration.js +23 -14
  162. package/lib/internal/_randomFormatDuration.js.map +1 -1
  163. package/lib/internal/_randomFormatDuration.mjs +22 -13
  164. package/lib/internal/_randomFormatDuration.mjs.map +1 -1
  165. package/lib/internal/_randomFormatEmail.d.ts +2 -1
  166. package/lib/internal/_randomFormatEmail.js +8 -1
  167. package/lib/internal/_randomFormatEmail.js.map +1 -1
  168. package/lib/internal/_randomFormatEmail.mjs +5 -1
  169. package/lib/internal/_randomFormatEmail.mjs.map +1 -1
  170. package/lib/internal/_randomFormatHostname.d.ts +8 -1
  171. package/lib/internal/_randomFormatHostname.js +45 -2
  172. package/lib/internal/_randomFormatHostname.js.map +1 -1
  173. package/lib/internal/_randomFormatHostname.mjs +38 -2
  174. package/lib/internal/_randomFormatHostname.mjs.map +1 -1
  175. package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
  176. package/lib/internal/_randomFormatIdnEmail.js +16 -2
  177. package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
  178. package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
  179. package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
  180. package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
  181. package/lib/internal/_randomFormatIdnHostname.js +26 -1
  182. package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
  183. package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
  184. package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
  185. package/lib/internal/_randomFormatIpv4.d.ts +2 -1
  186. package/lib/internal/_randomFormatIpv4.js +32 -1
  187. package/lib/internal/_randomFormatIpv4.js.map +1 -1
  188. package/lib/internal/_randomFormatIpv4.mjs +23 -1
  189. package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
  190. package/lib/internal/_randomFormatIpv6.d.ts +2 -1
  191. package/lib/internal/_randomFormatIpv6.js +58 -1
  192. package/lib/internal/_randomFormatIpv6.js.map +1 -1
  193. package/lib/internal/_randomFormatIpv6.mjs +45 -1
  194. package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
  195. package/lib/internal/_randomFormatIri.d.ts +2 -1
  196. package/lib/internal/_randomFormatIri.js +1 -1
  197. package/lib/internal/_randomFormatIri.js.map +1 -1
  198. package/lib/internal/_randomFormatIri.mjs +1 -1
  199. package/lib/internal/_randomFormatIri.mjs.map +1 -1
  200. package/lib/internal/_randomFormatIriReference.d.ts +2 -1
  201. package/lib/internal/_randomFormatIriReference.js +1 -1
  202. package/lib/internal/_randomFormatIriReference.js.map +1 -1
  203. package/lib/internal/_randomFormatIriReference.mjs +1 -1
  204. package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
  205. package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
  206. package/lib/internal/_randomFormatJsonPointer.js +20 -1
  207. package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
  208. package/lib/internal/_randomFormatJsonPointer.mjs +15 -1
  209. package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
  210. package/lib/internal/_randomFormatPassword.d.ts +2 -1
  211. package/lib/internal/_randomFormatPassword.js +7 -5
  212. package/lib/internal/_randomFormatPassword.js.map +1 -1
  213. package/lib/internal/_randomFormatPassword.mjs +5 -1
  214. package/lib/internal/_randomFormatPassword.mjs.map +1 -1
  215. package/lib/internal/_randomFormatRegex.d.ts +2 -1
  216. package/lib/internal/_randomFormatRegex.js +15 -1
  217. package/lib/internal/_randomFormatRegex.js.map +1 -1
  218. package/lib/internal/_randomFormatRegex.mjs +14 -1
  219. package/lib/internal/_randomFormatRegex.mjs.map +1 -1
  220. package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
  221. package/lib/internal/_randomFormatRelativeJsonPointer.js +20 -5
  222. package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
  223. package/lib/internal/_randomFormatRelativeJsonPointer.mjs +21 -5
  224. package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
  225. package/lib/internal/_randomFormatTime.d.ts +2 -1
  226. package/lib/internal/_randomFormatTime.js +34 -7
  227. package/lib/internal/_randomFormatTime.js.map +1 -1
  228. package/lib/internal/_randomFormatTime.mjs +37 -4
  229. package/lib/internal/_randomFormatTime.mjs.map +1 -1
  230. package/lib/internal/_randomFormatUri.d.ts +2 -1
  231. package/lib/internal/_randomFormatUri.js +1 -1
  232. package/lib/internal/_randomFormatUri.js.map +1 -1
  233. package/lib/internal/_randomFormatUri.mjs +1 -1
  234. package/lib/internal/_randomFormatUri.mjs.map +1 -1
  235. package/lib/internal/_randomFormatUriReference.d.ts +2 -1
  236. package/lib/internal/_randomFormatUriReference.js +1 -1
  237. package/lib/internal/_randomFormatUriReference.js.map +1 -1
  238. package/lib/internal/_randomFormatUriReference.mjs +1 -1
  239. package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
  240. package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
  241. package/lib/internal/_randomFormatUriTemplate.js +1 -1
  242. package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
  243. package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
  244. package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
  245. package/lib/internal/_randomFormatUrl.d.ts +2 -1
  246. package/lib/internal/_randomFormatUrl.js +21 -1
  247. package/lib/internal/_randomFormatUrl.js.map +1 -1
  248. package/lib/internal/_randomFormatUrl.mjs +18 -1
  249. package/lib/internal/_randomFormatUrl.mjs.map +1 -1
  250. package/lib/internal/_randomFormatUuid.d.ts +2 -1
  251. package/lib/internal/_randomFormatUuid.js +3 -2
  252. package/lib/internal/_randomFormatUuid.js.map +1 -1
  253. package/lib/internal/_randomFormatUuid.mjs +3 -2
  254. package/lib/internal/_randomFormatUuid.mjs.map +1 -1
  255. package/lib/internal/_randomInteger.js +59 -28
  256. package/lib/internal/_randomInteger.js.map +1 -1
  257. package/lib/internal/_randomInteger.mjs +56 -16
  258. package/lib/internal/_randomInteger.mjs.map +1 -1
  259. package/lib/internal/_randomMultiple.d.ts +8 -0
  260. package/lib/internal/_randomMultiple.js +168 -0
  261. package/lib/internal/_randomMultiple.js.map +1 -0
  262. package/lib/internal/_randomMultiple.mjs +158 -0
  263. package/lib/internal/_randomMultiple.mjs.map +1 -0
  264. package/lib/internal/_randomNumber.js +42 -42
  265. package/lib/internal/_randomNumber.js.map +1 -1
  266. package/lib/internal/_randomNumber.mjs +41 -27
  267. package/lib/internal/_randomNumber.mjs.map +1 -1
  268. package/lib/internal/_randomPattern.d.ts +2 -1
  269. package/lib/internal/_randomPattern.js +19 -4
  270. package/lib/internal/_randomPattern.js.map +1 -1
  271. package/lib/internal/_randomPattern.mjs +10 -4
  272. package/lib/internal/_randomPattern.mjs.map +1 -1
  273. package/lib/internal/_randomStringLength.d.ts +64 -0
  274. package/lib/internal/_randomStringLength.js +84 -0
  275. package/lib/internal/_randomStringLength.js.map +1 -0
  276. package/lib/internal/_randomStringLength.mjs +79 -0
  277. package/lib/internal/_randomStringLength.mjs.map +1 -0
  278. package/lib/internal/_stringLength.d.ts +1 -0
  279. package/lib/internal/_stringLength.js +11 -0
  280. package/lib/internal/_stringLength.js.map +1 -0
  281. package/lib/internal/_stringLength.mjs +10 -0
  282. package/lib/internal/_stringLength.mjs.map +1 -0
  283. package/lib/internal/_validateReport.js +4 -1
  284. package/lib/internal/_validateReport.js.map +1 -1
  285. package/lib/internal/_validateReport.mjs +2 -1
  286. package/lib/internal/_validateReport.mjs.map +1 -1
  287. package/lib/internal/private/__notationRename.d.ts +14 -0
  288. package/lib/internal/private/__notationRename.js +25 -0
  289. package/lib/internal/private/__notationRename.js.map +1 -0
  290. package/lib/internal/private/__notationRename.mjs +24 -0
  291. package/lib/internal/private/__notationRename.mjs.map +1 -0
  292. package/lib/internal/private/__randomComposition.d.ts +23 -0
  293. package/lib/internal/private/__randomComposition.js +48 -0
  294. package/lib/internal/private/__randomComposition.js.map +1 -0
  295. package/lib/internal/private/__randomComposition.mjs +54 -0
  296. package/lib/internal/private/__randomComposition.mjs.map +1 -0
  297. package/lib/internal/private/__randomEpoch.d.ts +19 -0
  298. package/lib/internal/private/__randomEpoch.js +31 -0
  299. package/lib/internal/private/__randomEpoch.js.map +1 -0
  300. package/lib/internal/private/__randomEpoch.mjs +28 -0
  301. package/lib/internal/private/__randomEpoch.mjs.map +1 -0
  302. package/lib/json.d.ts +2 -2
  303. package/lib/json.mjs.map +1 -1
  304. package/lib/module.d.ts +2 -2
  305. package/lib/module.js.map +1 -1
  306. package/lib/module.mjs.map +1 -1
  307. package/lib/notations.d.ts +20 -4
  308. package/lib/notations.js.map +1 -1
  309. package/lib/notations.mjs.map +1 -1
  310. package/native/adapter/plugin_options.go +117 -0
  311. package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
  312. package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
  313. package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
  314. package/native/cmd/ttsc-typia/build.go +84 -64
  315. package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
  316. package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
  317. package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
  318. package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
  319. package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
  320. package/native/cmd/ttsc-typia/callable_interface_function_semantics_transform_test.go +331 -0
  321. package/native/cmd/ttsc-typia/callable_type_literal_boundaries_transform_test.go +1184 -0
  322. package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
  323. package/native/cmd/ttsc-typia/compare_functional_union_membership_transform_test.go +434 -0
  324. package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
  325. package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
  326. package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
  327. package/native/cmd/ttsc-typia/compare_template_literal_union_transform_test.go +241 -0
  328. package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
  329. package/native/cmd/ttsc-typia/default_library_spoof_native_identity_transform_test.go +216 -0
  330. package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
  331. package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
  332. package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
  333. package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
  334. package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
  335. package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
  336. package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
  337. package/native/cmd/ttsc-typia/json_schema_dynamic_key_determinism_transform_test.go +246 -0
  338. package/native/cmd/ttsc-typia/json_stringify_contextual_undefined_transform_test.go +556 -0
  339. package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
  340. package/native/cmd/ttsc-typia/lib_replacement_native_identity_transform_test.go +277 -0
  341. package/native/cmd/ttsc-typia/main_wasm.go +21 -2
  342. package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
  343. package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
  344. package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
  345. package/native/cmd/ttsc-typia/native_named_intersection_union_transform_test.go +390 -0
  346. package/native/cmd/ttsc-typia/node_buffer_native_exports_is_transform_test.go +526 -0
  347. package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
  348. package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
  349. package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
  350. package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
  351. package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
  352. package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
  353. package/native/cmd/ttsc-typia/package_declaration_native_identity_is_transform_test.go +293 -0
  354. package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
  355. package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
  356. package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
  357. package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
  358. package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
  359. package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
  360. package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
  361. package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
  362. package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
  363. package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
  364. package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
  365. package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
  366. package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
  367. package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
  368. package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
  369. package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
  370. package/native/cmd/ttsc-typia/protobuf_diagnostic_code_transform_test.go +167 -0
  371. package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
  372. package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
  373. package/native/cmd/ttsc-typia/symbol_index_domain_transform_test.go +316 -0
  374. package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
  375. package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
  376. package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
  377. package/native/cmd/ttsc-typia/transform.go +251 -39
  378. package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
  379. package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
  380. package/native/cmd/ttsc-typia/transform_helpers_test.go +236 -3
  381. package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
  382. package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
  383. package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
  384. package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
  385. package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
  386. package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
  387. package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
  388. package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
  389. package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
  390. package/native/cmd/ttsc-typia/user_global_native_identity_transform_test.go +484 -0
  391. package/native/core/factories/FormatCheatSheet.go +40 -7
  392. package/native/core/factories/IdentifierFactory.go +131 -4
  393. package/native/core/factories/MetadataCommentTagFactory.go +83 -40
  394. package/native/core/factories/MetadataTypeTagFactory.go +13 -1
  395. package/native/core/factories/NumericRangeFactory.go +60 -17
  396. package/native/core/factories/ProtobufFactory.go +13 -5
  397. package/native/core/factories/factory_utility_coverage_test.go +8 -2
  398. package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
  399. package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
  400. package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
  401. package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
  402. package/native/core/factories/internal/metadata/MetadataHelper.go +226 -17
  403. package/native/core/factories/internal/metadata/emplace_metadata_object.go +141 -8
  404. package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
  405. package/native/core/factories/internal/metadata/iterate_metadata_function.go +5 -12
  406. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +111 -29
  407. package/native/core/factories/internal/metadata/iterate_metadata_map.go +5 -0
  408. package/native/core/factories/internal/metadata/iterate_metadata_native.go +45 -2
  409. package/native/core/factories/internal/metadata/iterate_metadata_set.go +5 -0
  410. package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
  411. package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
  412. package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
  413. package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
  414. package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
  415. package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
  416. package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
  417. package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
  418. package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
  419. package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
  420. package/native/core/programmers/IsProgrammer.go +15 -1
  421. package/native/core/programmers/RandomProgrammer.go +51 -14
  422. package/native/core/programmers/compare/CompareEqualProgrammer.go +410 -8
  423. package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
  424. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
  425. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
  426. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
  427. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
  428. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
  429. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
  430. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
  431. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
  432. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
  433. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
  434. package/native/core/programmers/helpers/CloneJoiner.go +32 -0
  435. package/native/core/programmers/helpers/FunctionProgrammer.go +6 -13
  436. package/native/core/programmers/helpers/NotationJoiner.go +86 -28
  437. package/native/core/programmers/helpers/StringifyJoinder.go +161 -51
  438. package/native/core/programmers/helpers/UnionExplorer.go +203 -61
  439. package/native/core/programmers/helpers/joiner_branch_coverage_test.go +116 -118
  440. package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
  441. package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
  442. package/native/core/programmers/iterate/check_template.go +344 -32
  443. package/native/core/programmers/iterate/iterate_check_coverage_test.go +76 -158
  444. package/native/core/programmers/iterate/iterate_utility_coverage_test.go +231 -270
  445. package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
  446. package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
  447. package/native/core/programmers/iterate/json_schema_object.go +49 -7
  448. package/native/core/programmers/iterate/json_schema_pattern_property_order_test.go +44 -0
  449. package/native/core/programmers/iterate/openapi_v3_downgrader.go +674 -0
  450. package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
  451. package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
  452. package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
  453. package/native/core/programmers/iterate/template_runtime_pattern.go +63 -7
  454. package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
  455. package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
  456. package/native/core/programmers/json/JsonStringifyProgrammer.go +47 -6
  457. package/native/core/programmers/llm/LlmApplicationProgrammer.go +21 -11
  458. package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
  459. package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
  460. package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
  461. package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
  462. package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
  463. package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
  464. package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
  465. package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
  466. package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
  467. package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
  468. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
  469. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +41 -22
  470. package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
  471. package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
  472. package/native/core/schemas/metadata/MetadataCollection.go +266 -25
  473. package/native/core/schemas/metadata/MetadataDefaultLibrary.go +81 -0
  474. package/native/core/schemas/metadata/MetadataDependency.go +388 -0
  475. package/native/core/schemas/metadata/MetadataObjectType.go +24 -22
  476. package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
  477. package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
  478. package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
  479. package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
  480. package/native/core/utils/PatternUtil.go +13 -0
  481. package/native/core/utils/PromiseTypeFactory.go +59 -0
  482. package/native/core/utils/ProtobufNameEncoder.go +8 -0
  483. package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
  484. package/native/go.mod +9 -1
  485. package/native/transform/CallExpressionTransformer.go +12 -0
  486. package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
  487. package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
  488. package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
  489. package/native/transform/features/protobuf/ProtobufMessageTransformer.go +1 -1
  490. package/package.json +12 -4
  491. package/src/executable/FileSystemIdentity.ts +222 -0
  492. package/src/executable/TypiaGenerateWizard.ts +386 -113
  493. package/src/functional.ts +30 -60
  494. package/src/internal/_ProtobufReader.ts +161 -46
  495. package/src/internal/_createStandardSchema.ts +15 -1
  496. package/src/internal/_decimal.ts +69 -0
  497. package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
  498. package/src/internal/_isFormatByte.ts +2 -5
  499. package/src/internal/_isFormatDate.ts +15 -2
  500. package/src/internal/_isFormatDateTime.ts +28 -2
  501. package/src/internal/_isFormatIri.ts +5 -2
  502. package/src/internal/_isFormatIriReference.ts +11 -3
  503. package/src/internal/_isFormatUriReference.ts +1 -1
  504. package/src/internal/_isMultipleOf.ts +8 -0
  505. package/src/internal/_isTypeFloat.ts +1 -1
  506. package/src/internal/_isTypeInt64.ts +1 -0
  507. package/src/internal/_isTypeInt64Bigint.ts +12 -0
  508. package/src/internal/_isTypeUint64.ts +1 -0
  509. package/src/internal/_isTypeUint64Bigint.ts +7 -0
  510. package/src/internal/_isUniqueItems.ts +134 -132
  511. package/src/internal/_jsonStringifyArray.ts +50 -0
  512. package/src/internal/_jsonStringifyElement.ts +19 -0
  513. package/src/internal/_jsonStringifyProperty.ts +30 -0
  514. package/src/internal/_llmApplicationFinalize.ts +6 -1
  515. package/src/internal/_notationAny.ts +9 -4
  516. package/src/internal/_notationAssign.ts +20 -0
  517. package/src/internal/_notationCamel.ts +31 -10
  518. package/src/internal/_notationKebab.ts +11 -0
  519. package/src/internal/_notationKeyCollision.ts +9 -0
  520. package/src/internal/_notationPascal.ts +19 -6
  521. package/src/internal/_notationSnake.ts +24 -21
  522. package/src/internal/_plainCloneAny.ts +208 -33
  523. package/src/internal/_randomArray.ts +13 -4
  524. package/src/internal/_randomFormatByte.ts +31 -1
  525. package/src/internal/_randomFormatDate.ts +6 -17
  526. package/src/internal/_randomFormatDatetime.ts +34 -15
  527. package/src/internal/_randomFormatDuration.ts +30 -13
  528. package/src/internal/_randomFormatEmail.ts +8 -2
  529. package/src/internal/_randomFormatHostname.ts +48 -1
  530. package/src/internal/_randomFormatIdnEmail.ts +18 -2
  531. package/src/internal/_randomFormatIdnHostname.ts +34 -2
  532. package/src/internal/_randomFormatIpv4.ts +43 -2
  533. package/src/internal/_randomFormatIpv6.ts +67 -2
  534. package/src/internal/_randomFormatIri.ts +3 -1
  535. package/src/internal/_randomFormatIriReference.ts +3 -1
  536. package/src/internal/_randomFormatJsonPointer.ts +28 -2
  537. package/src/internal/_randomFormatPassword.ts +11 -6
  538. package/src/internal/_randomFormatRegex.ts +22 -1
  539. package/src/internal/_randomFormatRelativeJsonPointer.ts +26 -6
  540. package/src/internal/_randomFormatTime.ts +46 -10
  541. package/src/internal/_randomFormatUri.ts +3 -1
  542. package/src/internal/_randomFormatUriReference.ts +3 -1
  543. package/src/internal/_randomFormatUriTemplate.ts +3 -1
  544. package/src/internal/_randomFormatUrl.ts +25 -2
  545. package/src/internal/_randomFormatUuid.ts +10 -6
  546. package/src/internal/_randomInteger.ts +87 -40
  547. package/src/internal/_randomMultiple.ts +245 -0
  548. package/src/internal/_randomNumber.ts +72 -55
  549. package/src/internal/_randomPattern.ts +29 -4
  550. package/src/internal/_randomStringLength.ts +116 -0
  551. package/src/internal/_stringLength.ts +5 -0
  552. package/src/internal/_validateReport.ts +5 -1
  553. package/src/internal/private/__notationRename.ts +21 -0
  554. package/src/internal/private/__randomComposition.ts +50 -0
  555. package/src/internal/private/__randomEpoch.ts +34 -0
  556. package/src/json.ts +2 -2
  557. package/src/module.ts +4 -6
  558. package/src/notations.ts +20 -4
  559. package/lib/internal/private/__notationCapitalize.d.ts +0 -1
  560. package/lib/internal/private/__notationCapitalize.js +0 -6
  561. package/lib/internal/private/__notationCapitalize.js.map +0 -1
  562. package/lib/internal/private/__notationCapitalize.mjs +0 -6
  563. package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
  564. package/lib/internal/private/__notationUnsnake.d.ts +0 -4
  565. package/lib/internal/private/__notationUnsnake.js +0 -26
  566. package/lib/internal/private/__notationUnsnake.js.map +0 -1
  567. package/lib/internal/private/__notationUnsnake.mjs +0 -15
  568. package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
  569. package/native/adapter/visit.go +0 -173
  570. package/native/adapter/visit_property_chain_edges_test.go +0 -129
  571. package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
  572. package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
  573. package/native/core/programmers/helpers/disable_function_programmer_declare.go +0 -10
  574. package/native/core/programmers/iterate/check_union_array_like.go +0 -422
  575. package/native/core/programmers/iterate/prune_object_properties.go +0 -105
  576. package/native/core/programmers/iterate/stringify_dynamic_properties.go +0 -219
  577. package/native/core/programmers/iterate/stringify_native.go +0 -14
  578. package/native/core/programmers/iterate/stringify_regular_properties.go +0 -112
  579. package/native/core/schemas/metadata/MetadataApplication.go +0 -41
  580. package/src/internal/private/__notationCapitalize.ts +0 -2
  581. package/src/internal/private/__notationUnsnake.ts +0 -24
@@ -0,0 +1,278 @@
1
+ package main
2
+
3
+ import (
4
+ "os"
5
+ "os/exec"
6
+ "path/filepath"
7
+ "strings"
8
+ "testing"
9
+ )
10
+
11
+ // TestPrivateFieldFilterIsTransform verifies an ES `#private` instance field is
12
+ // excluded from a class's validated shape, so a real instance passes its own
13
+ // `is`/`assert`/`validate` guard (#2213).
14
+ //
15
+ // A `#private` field is installed only by the constructor and is unreachable via
16
+ // index access, so it is not part of a type's structural, externally-observable
17
+ // shape. Before the fix the member filter excluded only the TypeScript keyword
18
+ // `private`/`protected` members, so a `#private` field leaked into the validated
19
+ // shape as a mangled key (`input["�#1@#secret"]`) that no runtime object
20
+ // carries — making the guard unconditionally false.
21
+ //
22
+ // 1. Emit `is`/`assert`/`validate` for a class carrying a `#private` field
23
+ // alongside a public property, a subclass that adds another `#private`, an
24
+ // all-`#private` class, a class with `#private` method / accessor members,
25
+ // and a keyword `private`/`protected` class.
26
+ // 2. Assert the emitted validators never reference a mangled `#private` key.
27
+ // 3. Execute the validators against real instances and plain public-shape
28
+ // objects, proving each passes on its public shape.
29
+ func TestPrivateFieldFilterIsTransform(t *testing.T) {
30
+ project := privateFieldFilterProject(t)
31
+
32
+ ts := privateFieldFilterTransform(t, project, "ts")
33
+ // A `#private` member surfaces in a validator only as a mangled key —
34
+ // `input["�#1@#secret"]`. The class SOURCE (echoed above the validators)
35
+ // also spells `#secret`, so the bare name is not a defect marker; the `@#`
36
+ // infix is unique to the mangled key and never appears in class source, so it
37
+ // is the exact byte signature of the leak.
38
+ if strings.Contains(ts, "@#") {
39
+ t.Fatalf("emit references a mangled #private key (leaked into validated shape):\n%s", ts)
40
+ }
41
+ // The public shape must still be validated.
42
+ for _, needle := range []string{"input.label", "input.tag"} {
43
+ if !strings.Contains(ts, needle) {
44
+ t.Fatalf("emit dropped a public property %q:\n%s", needle, ts)
45
+ }
46
+ }
47
+
48
+ privateFieldFilterRunRuntimeCases(
49
+ t,
50
+ project,
51
+ privateFieldFilterTransform(t, project, "js"),
52
+ )
53
+ }
54
+
55
+ func privateFieldFilterProject(t *testing.T) string {
56
+ t.Helper()
57
+ root := ttscTypiaTestRepoRoot(t)
58
+ base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
59
+ if err := os.MkdirAll(base, 0o755); err != nil {
60
+ t.Fatalf("mkdir temp base: %v", err)
61
+ }
62
+ dir, err := os.MkdirTemp(base, "private-field-filter-")
63
+ if err != nil {
64
+ t.Fatalf("create temp fixture: %v", err)
65
+ }
66
+ t.Cleanup(func() {
67
+ _ = os.RemoveAll(dir)
68
+ })
69
+ src := filepath.Join(dir, "src")
70
+ if err := os.MkdirAll(src, 0o755); err != nil {
71
+ t.Fatalf("mkdir fixture src: %v", err)
72
+ }
73
+ if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(privateFieldFilterTSConfig), 0o644); err != nil {
74
+ t.Fatalf("write tsconfig: %v", err)
75
+ }
76
+ if err := os.WriteFile(filepath.Join(src, "main.ts"), []byte(privateFieldFilterSource), 0o644); err != nil {
77
+ t.Fatalf("write source: %v", err)
78
+ }
79
+ return dir
80
+ }
81
+
82
+ func privateFieldFilterTransform(t *testing.T, project string, output string) string {
83
+ t.Helper()
84
+ out, errText, code := ttscTypiaTestCapture(func() int {
85
+ return runTransform([]string{
86
+ "--cwd", project,
87
+ "--tsconfig", "tsconfig.json",
88
+ "--file", "src/main.ts",
89
+ "--output", output,
90
+ })
91
+ })
92
+ if code != 0 {
93
+ t.Fatalf("private field filter transform failed: output=%s code=%d stderr=\n%s", output, code, errText)
94
+ }
95
+ return out
96
+ }
97
+
98
+ func privateFieldFilterRunRuntimeCases(t *testing.T, project string, js string) {
99
+ t.Helper()
100
+ node, err := exec.LookPath("node")
101
+ if err != nil {
102
+ t.Skip("node executable not found")
103
+ }
104
+ runtimeDir := filepath.Join(project, "runtime")
105
+ if err := os.MkdirAll(runtimeDir, 0o755); err != nil {
106
+ t.Fatalf("mkdir runtime dir: %v", err)
107
+ }
108
+ ttscTypiaTestWriteCommonRuntimeStubs(t, runtimeDir)
109
+ runtimeJS := ttscTypiaTestRewriteCommonJS(t, js)
110
+ if err := os.WriteFile(filepath.Join(runtimeDir, "main.cjs"), []byte(runtimeJS), 0o644); err != nil {
111
+ t.Fatalf("write runtime module: %v", err)
112
+ }
113
+ runner := filepath.Join(runtimeDir, "run.cjs")
114
+ if err := os.WriteFile(runner, []byte(privateFieldFilterRuntimeRunner), 0o644); err != nil {
115
+ t.Fatalf("write runtime runner: %v", err)
116
+ }
117
+ cmd := exec.Command(node, runner)
118
+ cmd.Dir = runtimeDir
119
+ if output, err := cmd.CombinedOutput(); err != nil {
120
+ t.Fatalf("private field filter runtime cases failed: %v\n%s", err, output)
121
+ }
122
+ }
123
+
124
+ const privateFieldFilterTSConfig = `{
125
+ "compilerOptions": {
126
+ "target": "ES2022",
127
+ "module": "commonjs",
128
+ "moduleResolution": "bundler",
129
+ "ignoreDeprecations": "6.0",
130
+ "types": ["*"],
131
+ "esModuleInterop": true,
132
+ "strict": true,
133
+ "skipLibCheck": true
134
+ },
135
+ "include": ["src"]
136
+ }
137
+ `
138
+
139
+ const privateFieldFilterSource = `import typia from "typia";
140
+
141
+ export class Box {
142
+ #secret: boolean;
143
+ public label: string;
144
+ constructor(label: string, secret: boolean) {
145
+ this.label = label;
146
+ this.#secret = secret;
147
+ }
148
+ }
149
+
150
+ export class SubBox extends Box {
151
+ #extra: number;
152
+ public tag: string;
153
+ constructor() {
154
+ super("hi", true);
155
+ this.#extra = 1;
156
+ this.tag = "t";
157
+ }
158
+ }
159
+
160
+ export class SoloPrivate {
161
+ #solo: string;
162
+ constructor() {
163
+ this.#solo = "x";
164
+ }
165
+ }
166
+
167
+ export class MethodPrivate {
168
+ public label: string;
169
+ #hidden(): number {
170
+ return 1;
171
+ }
172
+ get #view(): number {
173
+ return 2;
174
+ }
175
+ set #view(_next: number) {}
176
+ constructor(label: string) {
177
+ this.label = label;
178
+ void this.#hidden();
179
+ this.#view = this.#view;
180
+ }
181
+ }
182
+
183
+ export class KeywordBox {
184
+ private secret: boolean;
185
+ protected token: string;
186
+ public label: string;
187
+ constructor(label: string, secret: boolean, token: string) {
188
+ this.label = label;
189
+ this.secret = secret;
190
+ this.token = token;
191
+ }
192
+ }
193
+
194
+ export const isBox = typia.createIs<Box>();
195
+ export const assertBox = typia.createAssert<Box>();
196
+ export const validateBox = typia.createValidate<Box>();
197
+ export const isSubBox = typia.createIs<SubBox>();
198
+ export const isSolo = typia.createIs<SoloPrivate>();
199
+ export const isMethod = typia.createIs<MethodPrivate>();
200
+ export const isKeyword = typia.createIs<KeywordBox>();
201
+ `
202
+
203
+ const privateFieldFilterRuntimeRunner = `const mod = require("./main.cjs");
204
+
205
+ class Box {
206
+ #secret;
207
+ label;
208
+ constructor(label, secret) {
209
+ this.label = label;
210
+ this.#secret = secret;
211
+ }
212
+ }
213
+ class SubBox extends Box {
214
+ #extra;
215
+ tag;
216
+ constructor() {
217
+ super("hi", true);
218
+ this.#extra = 1;
219
+ this.tag = "t";
220
+ }
221
+ }
222
+ class SoloPrivate {
223
+ #solo;
224
+ constructor() {
225
+ this.#solo = "x";
226
+ }
227
+ }
228
+ class MethodPrivate {
229
+ label;
230
+ #hidden() {
231
+ return 1;
232
+ }
233
+ get #view() {
234
+ return 2;
235
+ }
236
+ set #view(_next) {}
237
+ constructor(label) {
238
+ this.label = label;
239
+ }
240
+ }
241
+
242
+ const expect = (label, actual, expected) => {
243
+ if (actual !== expected) {
244
+ throw new Error(label + ": expected " + expected + " but got " + actual);
245
+ }
246
+ };
247
+
248
+ // A real instance carrying #private members passes its own guard.
249
+ expect("is real Box instance", mod.isBox(new Box("hi", true)), true);
250
+ expect("is real SubBox instance", mod.isSubBox(new SubBox()), true);
251
+ expect("is real SoloPrivate instance", mod.isSolo(new SoloPrivate()), true);
252
+ expect("is real MethodPrivate instance", mod.isMethod(new MethodPrivate("hi")), true);
253
+
254
+ // The #private field is not part of the structural shape: a plain object with
255
+ // only the public members is accepted, exactly like a keyword-private class.
256
+ expect("is plain public Box shape", mod.isBox({ label: "hi" }), true);
257
+ expect("is plain public SubBox shape", mod.isSubBox({ label: "hi", tag: "t" }), true);
258
+ expect("is empty SoloPrivate shape", mod.isSolo({}), true);
259
+ expect("is plain public MethodPrivate shape", mod.isMethod({ label: "hi" }), true);
260
+ expect("is plain public KeywordBox shape", mod.isKeyword({ label: "hi" }), true);
261
+
262
+ // The public shape is still validated structurally.
263
+ expect("reject wrong public label type", mod.isBox({ label: 123 }), false);
264
+ expect("reject missing public label", mod.isBox({}), false);
265
+
266
+ // assert / validate accept a real instance without touching a mangled key.
267
+ expect("assert real Box returns input", mod.assertBox(new Box("hi", true)) instanceof Box, true);
268
+ expect("validate real Box succeeds", mod.validateBox(new Box("hi", true)).success, true);
269
+ expect("validate plain public Box succeeds", mod.validateBox({ label: "hi" }).success, true);
270
+
271
+ let threw = false;
272
+ try {
273
+ mod.assertBox({ label: 123 });
274
+ } catch (_exp) {
275
+ threw = true;
276
+ }
277
+ expect("assert rejects wrong public label", threw, true);
278
+ `
@@ -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
+ `