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
@@ -67,24 +67,61 @@ func Emplace_metadata_object(props IMetadataIteratorProps) *schemametadata.Metad
67
67
  // plain.classify cannot soundly field-copy (Object.create + assign) a class
68
68
  // that has them — and the PROTOTYPE CHAIN matters: a field-copied subclass
69
69
  // of a #private-bearing base would equally throw "Cannot read private
70
- // member". The type system hides #private from ApparentProperties, so detect
71
- // it on the class declaration(s), walking the `extends` chain. Additive flag,
72
- // read only by the classify programmer.
70
+ // member". A `#private` member DOES surface in ApparentProperties (as a
71
+ // mangled key), so the member filter below must drop it from the validated
72
+ // shape; here it is detected on the class declaration(s) — where its
73
+ // KindPrivateIdentifier name is unambiguous and statics are skippable —
74
+ // walking the `extends` chain. Additive flag, read only by the classify
75
+ // programmer.
73
76
  if emplace_metadata_object_private_fields(props.Checker, props.Type, map[*nativechecker.Type]bool{}) {
74
77
  obj.PrivateFields = true
75
78
  }
76
79
  }
77
80
  }
78
81
 
82
+ // Report the `extends` / `implements` chain to the dependency listener. The
83
+ // apparent-property walk below already registers the declaring file of every
84
+ // inherited member, but a base that currently contributes no property (an
85
+ // empty interface or class) would otherwise stay invisible — and gaining its
86
+ // first property is exactly the change that must invalidate the consumer.
87
+ if props.Type != nil && schemametadata.MetadataDependency_active(props.Checker) {
88
+ emplace_metadata_object_touch_heritage(props.Checker, props.Type.Symbol(), map[*nativeast.Symbol]bool{})
89
+ }
90
+
79
91
  isClass := props.Type != nil && props.Type.IsClass()
80
92
  isProperty := emplace_metadata_object_significant(props.Options.Functional, props.Options.Methods)
81
- pred := func(node *nativeast.Node) bool {
93
+ pred := func(symbol *nativeast.Symbol, node *nativeast.Node) bool {
94
+ // A `symbol`-keyed member (`[uniqueSymbol]: T`, `[Symbol.toStringTag]: T`,
95
+ // ...) is not a string / number key: it is unreachable through the string
96
+ // index access typia emits, `JSON.stringify` ignores it, and JSON Schema has
97
+ // no representation for it. So it is not part of the structural,
98
+ // externally-observable shape — exclude it exactly as a `private`/`protected`
99
+ // keyword member and an ES `#private` one. The checker escapes such a member
100
+ // name with the 0xFE `InternalSymbolNamePrefix`, and ApparentProperties
101
+ // otherwise surfaces it under that mangled name, which no runtime object
102
+ // carries: every real value would fail its own guard, and the emitted schema
103
+ // would declare an uninhabitable required property (#2226). Checked on the
104
+ // SYMBOL rather than a declaration node so a late-bound member with no
105
+ // reachable declaration is excluded too.
106
+ if symbol != nil && iterate_metadata_intersection_is_symbol_name(symbol.Name) {
107
+ return false
108
+ }
82
109
  if node == nil {
83
110
  return true
84
111
  }
85
112
  if isClass && node.ModifierFlags()&(nativeast.ModifierFlagsPrivate|nativeast.ModifierFlagsProtected) != 0 {
86
113
  return false
87
114
  }
115
+ // An ES `#private` member (field, method, or accessor) carries no
116
+ // Private/Protected modifier — its identity is a KindPrivateIdentifier name.
117
+ // It is installed only by the constructor and is unreachable via index
118
+ // access, so it is not part of the structural shape; exclude it exactly as a
119
+ // `private`/`protected` keyword member (see ClassNonPublic). ApparentProperties
120
+ // otherwise surfaces it as a mangled key that no runtime object carries, so
121
+ // every real instance would fail its own guard (#2213).
122
+ if isClass && node.Name() != nil && node.Name().Kind == nativeast.KindPrivateIdentifier {
123
+ return false
124
+ }
88
125
  return isProperty(node)
89
126
  }
90
127
 
@@ -111,7 +148,7 @@ func Emplace_metadata_object(props IMetadataIteratorProps) *schemametadata.Metad
111
148
  } else {
112
149
  typ = nativechecker.Checker_getTypeOfPropertyOfType(props.Checker, props.Type, symbol.Name)
113
150
  }
114
- if (node != nil && pred(node) == false) || typ == nil {
151
+ if pred(symbol, node) == false || typ == nil {
115
152
  continue
116
153
  }
117
154
 
@@ -145,6 +182,14 @@ func Emplace_metadata_object(props IMetadataIteratorProps) *schemametadata.Metad
145
182
  }
146
183
 
147
184
  for _, index := range props.Components.IndexInfos(props.Checker, props.Type) {
185
+ // IndexInfo keeps union domains separate, but a branded symbol key remains
186
+ // an intersection. Only string/number domains can describe properties seen
187
+ // through Object.keys or JSON Schema additionalProperties; walk nested
188
+ // intersections so every symbol-only form stays outside typia's structural
189
+ // JSON shape, just like an explicit symbol-keyed member (#2240).
190
+ if emplace_metadata_object_is_symbol_index_key(index.KeyType()) {
191
+ continue
192
+ }
148
193
  analyzer := func(typ *nativechecker.Type) func(any) *schemametadata.MetadataSchema {
149
194
  return func(property any) *schemametadata.MetadataSchema {
150
195
  explore := MetadataFactory_IExplore{
@@ -197,6 +242,77 @@ func Emplace_metadata_object(props IMetadataIteratorProps) *schemametadata.Metad
197
242
  return obj
198
243
  }
199
244
 
245
+ // emplace_metadata_object_touch_heritage reports every `extends` / `implements`
246
+ // heritage target of `symbol`'s class / interface declarations to the
247
+ // dependency listener, following the chain recursively so intermediate empty
248
+ // bases register too. Import aliases resolve to their final target symbol,
249
+ // whose declarations carry the real declaring files. Walking runs only while a
250
+ // listener is active (see the call site), so ordinary analysis pays nothing.
251
+ func emplace_metadata_object_touch_heritage(
252
+ checker *nativechecker.Checker,
253
+ symbol *nativeast.Symbol,
254
+ visited map[*nativeast.Symbol]bool,
255
+ ) {
256
+ if checker == nil || symbol == nil || visited[symbol] {
257
+ return
258
+ }
259
+ visited[symbol] = true
260
+ for _, decl := range symbol.Declarations {
261
+ if decl == nil {
262
+ continue
263
+ }
264
+ var clauses *nativeast.NodeList
265
+ switch decl.Kind {
266
+ case nativeast.KindClassDeclaration:
267
+ if cd := decl.AsClassDeclaration(); cd != nil {
268
+ clauses = cd.HeritageClauses
269
+ }
270
+ case nativeast.KindClassExpression:
271
+ if ce := decl.AsClassExpression(); ce != nil {
272
+ clauses = ce.HeritageClauses
273
+ }
274
+ case nativeast.KindInterfaceDeclaration:
275
+ if id := decl.AsInterfaceDeclaration(); id != nil {
276
+ clauses = id.HeritageClauses
277
+ }
278
+ }
279
+ if clauses == nil {
280
+ continue
281
+ }
282
+ for _, clause := range clauses.Nodes {
283
+ if clause == nil || clause.Kind != nativeast.KindHeritageClause {
284
+ continue
285
+ }
286
+ hc := clause.AsHeritageClause()
287
+ if hc == nil || hc.Types == nil {
288
+ continue
289
+ }
290
+ for _, element := range hc.Types.Nodes {
291
+ if element == nil {
292
+ continue
293
+ }
294
+ // The node walk reports the heritage expression's symbol and every
295
+ // reference written in its type arguments (e.g. `extends Base<Id>`).
296
+ schemametadata.MetadataDependency_touchTypeNode(checker, element)
297
+ expr := element.AsExpressionWithTypeArguments()
298
+ if expr == nil || expr.Expression == nil {
299
+ continue
300
+ }
301
+ target := checker.GetSymbolAtLocation(expr.Expression)
302
+ if target == nil {
303
+ continue
304
+ }
305
+ if target.Flags&nativeast.SymbolFlagsAlias != 0 {
306
+ if resolved := nativechecker.Checker_getAliasedSymbol(checker, target); resolved != nil {
307
+ target = resolved
308
+ }
309
+ }
310
+ emplace_metadata_object_touch_heritage(checker, target, visited)
311
+ }
312
+ }
313
+ }
314
+ }
315
+
200
316
  // emplace_metadata_object_private_fields reports whether `typ` or any class in
201
317
  // its `extends` chain declares an INSTANCE ES #private member — which field-copy
202
318
  // (Object.create + assign) cannot reconstruct, so plain.classify must reject it.
@@ -350,7 +466,7 @@ func emplace_metadata_object_intersection(
350
466
  props IMetadataIteratorProps,
351
467
  obj *schemametadata.MetadataObjectType,
352
468
  insert func(emplace_metadata_object_insert) *schemametadata.MetadataProperty,
353
- pred func(node *nativeast.Node) bool,
469
+ pred func(symbol *nativeast.Symbol, node *nativeast.Node) bool,
354
470
  ) bool {
355
471
  if props.Checker == nil ||
356
472
  props.Type == nil ||
@@ -424,7 +540,7 @@ func emplace_metadata_object_intersection_append(
424
540
  props IMetadataIteratorProps,
425
541
  child *nativechecker.Type,
426
542
  insert func(emplace_metadata_object_insert) *schemametadata.MetadataProperty,
427
- pred func(node *nativeast.Node) bool,
543
+ pred func(symbol *nativeast.Symbol, node *nativeast.Node) bool,
428
544
  ) bool {
429
545
  if props.Checker == nil || child == nil || len(props.Components.IndexInfos(props.Checker, child)) != 0 {
430
546
  return false
@@ -443,7 +559,7 @@ func emplace_metadata_object_intersection_append(
443
559
  } else {
444
560
  typ = nativechecker.Checker_getTypeOfPropertyOfType(props.Checker, child, symbol.Name)
445
561
  }
446
- if (node != nil && pred(node) == false) || typ == nil {
562
+ if pred(symbol, node) == false || typ == nil {
447
563
  continue
448
564
  }
449
565
 
@@ -573,6 +689,23 @@ func emplace_metadata_object_valid_dynamic_key(key *schemametadata.MetadataSchem
573
689
  return total == key.Size()
574
690
  }
575
691
 
692
+ func emplace_metadata_object_is_symbol_index_key(key *nativechecker.Type) bool {
693
+ if key == nil {
694
+ return false
695
+ }
696
+ if key.Flags()&nativechecker.TypeFlagsESSymbolLike != 0 {
697
+ return true
698
+ }
699
+ if key.IsIntersection() {
700
+ for _, child := range key.Types() {
701
+ if emplace_metadata_object_is_symbol_index_key(child) {
702
+ return true
703
+ }
704
+ }
705
+ }
706
+ return false
707
+ }
708
+
576
709
  func iterate_optional_coalesce(props struct {
577
710
  Metadata *schemametadata.MetadataSchema
578
711
  Type *nativechecker.Type
@@ -9,6 +9,12 @@ func Iterate_metadata(props IMetadataIteratorProps) {
9
9
  if props.Type == nil {
10
10
  return
11
11
  }
12
+ // Every type the analysis reads funnels through here (top types, union and
13
+ // intersection members, alias targets, array / tuple elements, generic
14
+ // arguments, property types), so this single touch reports the declaration
15
+ // files of the whole consulted type graph to the dependency listener the
16
+ // project transform host registers (see schemas/metadata/MetadataDependency).
17
+ schemametadata.MetadataDependency_touchType(props.Checker, props.Type)
12
18
  if props.Type.IsTypeParameter() == true {
13
19
  if props.Errors != nil {
14
20
  *props.Errors = append(*props.Errors, MetadataFactory_IError{
@@ -3,10 +3,11 @@ package metadata
3
3
  import (
4
4
  nativechecker "github.com/microsoft/typescript-go/shim/checker"
5
5
  schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
6
+ nativeutils "github.com/samchon/typia/packages/typia/native/core/utils"
6
7
  )
7
8
 
8
9
  func Iterate_metadata_function(props IMetadataIteratorProps) bool {
9
- declaration := metadata_get_function_node(props.Type)
10
+ declaration := metadata_get_function_node(props.Checker, props.Type)
10
11
  if declaration == nil {
11
12
  return false
12
13
  }
@@ -36,16 +37,8 @@ func Iterate_metadata_function(props IMetadataIteratorProps) bool {
36
37
 
37
38
  signature := signatures[0]
38
39
  returnType := props.Checker.GetReturnTypeOfSignature(signature)
39
- async := false
40
- if returnType != nil {
41
- if symbol := returnType.Symbol(); symbol != nil && symbol.Name == "Promise" {
42
- generic := metadata_get_type_arguments(props.Checker, returnType)
43
- if len(generic) != 0 {
44
- returnType = generic[0]
45
- }
46
- async = true
47
- }
48
- }
40
+ promised := nativeutils.PromiseTypeFactory.Resolve(props.Checker, returnType)
41
+ returnType = promised.Type
49
42
 
50
43
  parameters := make([]*schemametadata.MetadataParameter, 0, len(signature.Parameters()))
51
44
  for _, p := range signature.Parameters() {
@@ -87,7 +80,7 @@ func Iterate_metadata_function(props IMetadataIteratorProps) bool {
87
80
  props.Metadata.Functions = append(props.Metadata.Functions, schemametadata.MetadataFunction_create(schemametadata.MetadataFunction{
88
81
  Parameters: parameters,
89
82
  Output: output,
90
- Async: async,
83
+ Async: promised.Async,
91
84
  }))
92
85
  return true
93
86
  }
@@ -126,6 +126,50 @@ func Iterate_metadata_intersection(props IMetadataIteratorProps) bool {
126
126
  if onlyObjects && len(tagObjects) == 0 {
127
127
  return escape(false)
128
128
  }
129
+ // A call-signature-only arm is dropped before the phantom-brand pass, and only
130
+ // while something else survives. It cannot join that pass: the "every arm was
131
+ // removable" guard below exists to refuse an intersection of nothing but
132
+ // brands, and an arm such as `Record<never, never>` is vacuously a phantom
133
+ // brand, so counting signatures as removable would turn
134
+ // `call & Record<never, never>` — which the interface spelling accepts — into a
135
+ // rejection.
136
+ if len(metadatas) > 1 {
137
+ kept := make([]*schemametadata.MetadataSchema, 0, len(metadatas))
138
+ keptIndexes := make([]int, 0, len(indexes))
139
+ for i, m := range metadatas {
140
+ if iterate_metadata_intersection_is_call_signature_only(m) {
141
+ continue
142
+ }
143
+ kept = append(kept, m)
144
+ keptIndexes = append(keptIndexes, indexes[i])
145
+ }
146
+ substantial := false
147
+ for _, m := range kept {
148
+ if iterate_metadata_intersection_is_removable_brand(m) == false {
149
+ substantial = true
150
+ break
151
+ }
152
+ }
153
+ if substantial {
154
+ // Something that carries real obligations survives, so the signatures are
155
+ // the part with nothing to describe and the members are what both
156
+ // spellings must answer for.
157
+ metadatas = kept
158
+ indexes = keptIndexes
159
+ } else if len(kept) == 0 {
160
+ // Every arm was signatures only — an overload set, a call-and-construct
161
+ // pair, or two constructors. That is a member-free callable, which is what
162
+ // the interface spelling of the same type produces, so this iterator has
163
+ // nothing to merge and hands the type back rather than refusing it.
164
+ //
165
+ // Widening this to "signatures were dropped and only brands remain" was
166
+ // tried and is wrong: `call & Record<never, never>` must reach the
167
+ // phantom-brand pass below, which drops the brand and leaves the call arm.
168
+ // Escaping instead makes the emitted validator refuse a function, which
169
+ // the `directPureCall*EmptyIntersection` anchors catch.
170
+ return escape(false)
171
+ }
172
+ }
129
173
  if len(metadatas) != 1 {
130
174
  removable := []int{}
131
175
  for i, m := range metadatas {
@@ -297,6 +341,29 @@ func Iterate_metadata_intersection(props IMetadataIteratorProps) bool {
297
341
  return true
298
342
  }
299
343
 
344
+ // iterate_metadata_intersection_is_call_signature_only reports whether an arm
345
+ // contributes nothing but call or construct signatures, which the intersection
346
+ // can drop the way it drops a phantom brand.
347
+ //
348
+ // `((v: number) => string) & { label: string }` and
349
+ // `interface T { (v: number): string; label: string }` are the same type, and
350
+ // only the first reaches this function — the second is one object carrying a
351
+ // call signature. Without this the first was refused as a nonsensible
352
+ // intersection while the second was accepted, so the answer depended on the
353
+ // spelling (samchon/typia#2276).
354
+ //
355
+ // Dropping the arm loses nothing the interface spelling keeps. #2250 settled
356
+ // that a member-carrying callable stays structural, so neither spelling
357
+ // validates the call signature; the members are what both must describe. An arm
358
+ // that carries any data alongside its signatures is not this case and stays,
359
+ // because dropping it would erase a declared obligation.
360
+ func iterate_metadata_intersection_is_call_signature_only(m *schemametadata.MetadataSchema) bool {
361
+ return m != nil &&
362
+ len(m.Functions) != 0 &&
363
+ m.Nullable == false &&
364
+ m.Size() == len(m.Functions)
365
+ }
366
+
300
367
  // iterate_metadata_intersection_is_removable_brand reports whether an explored
301
368
  // member schema is a phantom "brand" object that an intersection with a
302
369
  // non-object member may drop. A value intersected with a non-object survivor is
@@ -314,6 +381,8 @@ func Iterate_metadata_intersection(props IMetadataIteratorProps) bool {
314
381
  // a symbol-keyed property is never observable on a JSON value. Any required
315
382
  // string-keyed property (literal or not) might be real data, so it keeps the
316
383
  // intersection nonsensible rather than silently dropping a declared constraint.
384
+
385
+
317
386
  func iterate_metadata_intersection_is_removable_brand(m *schemametadata.MetadataSchema) bool {
318
387
  if m == nil || m.Size() != 1 || len(m.Objects) != 1 {
319
388
  return false
@@ -357,8 +426,10 @@ func iterate_metadata_intersection_is_symbol_key(key *schemametadata.MetadataSch
357
426
  // name is a computed `symbol` member. The TypeScript checker prefixes such names
358
427
  // with a 0xFE byte (`InternalSymbolNamePrefix`), an invalid UTF-8 lead unit that
359
428
  // never begins a real string property name. This runs on the raw checker symbol
360
- // name (`is_removable_object_constraint`) as well as the metadata key literal
361
- // (`is_symbol_key`), so both the type-level and schema-level brand checks agree.
429
+ // name (`is_removable_object_constraint`, and the member filter in
430
+ // `Emplace_metadata_object` that keeps such a member out of the validated shape)
431
+ // as well as the metadata key literal (`is_symbol_key`), so the type-level,
432
+ // member-level, and schema-level checks all agree on what a symbol key is.
362
433
  func iterate_metadata_intersection_is_symbol_name(name string) bool {
363
434
  return len(name) != 0 && name[0] == 0xFE
364
435
  }
@@ -479,18 +550,15 @@ func iterate_metadata_intersection_is_removable_object_constraint(
479
550
  if nativechecker.IsTupleType(typ) || nativechecker.Checker_isArrayType(checker, typ) {
480
551
  return false
481
552
  }
482
- if metadata_get_function_node(typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
553
+ if metadata_get_function_node(checker, typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
483
554
  return false
484
555
  }
485
- name := iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(typ))
486
- if name == "" {
487
- name = iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(checker.GetApparentType(typ)))
488
- }
489
- if _, ok := iterate_metadata_native_simples[name]; ok {
556
+ name, symbol := iterate_metadata_intersection_type_name_and_symbol(checker, typ)
557
+ if _, ok := iterate_metadata_native_simples[name]; ok && metadata_symbol_is_runtime_native_type(checker, symbol, name) {
490
558
  return false
491
559
  }
492
560
  for _, generic := range iterate_metadata_native_generics {
493
- if strings.HasPrefix(name, generic.Name) {
561
+ if name == generic.Name || strings.HasPrefix(name, generic.Name+"<") {
494
562
  return false
495
563
  }
496
564
  }
@@ -522,6 +590,29 @@ type iterate_metadata_intersection_identity struct {
522
590
  Shareable bool
523
591
  }
524
592
 
593
+ // iterate_metadata_intersection_type_name_and_symbol keeps the normalized name
594
+ // paired with the symbol that supplied it, including the apparent-type fallback.
595
+ // Intersection classifiers can then apply the same runtime-native identity gate
596
+ // as direct native metadata without re-resolving either half independently.
597
+ func iterate_metadata_intersection_type_name_and_symbol(
598
+ checker *nativechecker.Checker,
599
+ typ *nativechecker.Type,
600
+ ) (string, *nativeast.Symbol) {
601
+ if typ == nil {
602
+ return "", nil
603
+ }
604
+ symbol := typ.Symbol()
605
+ name := iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(typ))
606
+ if name == "" && checker != nil {
607
+ apparent := checker.GetApparentType(typ)
608
+ if apparent != nil {
609
+ symbol = apparent.Symbol()
610
+ name = iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(apparent))
611
+ }
612
+ }
613
+ return name, symbol
614
+ }
615
+
525
616
  func iterate_metadata_intersection_identify(
526
617
  checker *nativechecker.Checker,
527
618
  collection *schemametadata.MetadataCollection,
@@ -541,10 +632,7 @@ func iterate_metadata_intersection_identify(
541
632
  return iterate_metadata_intersection_identity{Kind: "primitive", Name: info.name}
542
633
  }
543
634
  }
544
- name := iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(typ))
545
- if name == "" {
546
- name = iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(checker.GetApparentType(typ)))
547
- }
635
+ name, symbol := iterate_metadata_intersection_type_name_and_symbol(checker, typ)
548
636
  if atomic, ok := schemametadata.MetadataSchema_atomicLikeNative(name); ok {
549
637
  return iterate_metadata_intersection_identity{Kind: "primitive", Name: atomic}
550
638
  }
@@ -559,11 +647,11 @@ func iterate_metadata_intersection_identify(
559
647
  return iterate_metadata_intersection_identity{Kind: "tag"}
560
648
  }
561
649
  }
562
- if _, ok := iterate_metadata_native_simples[name]; ok {
650
+ if _, ok := iterate_metadata_native_simples[name]; ok && metadata_symbol_is_runtime_native_type(checker, symbol, name) {
563
651
  return iterate_metadata_intersection_identity{Kind: "native", Name: name}
564
652
  }
565
653
  for _, generic := range iterate_metadata_native_generics {
566
- if strings.HasPrefix(name, generic.Name) {
654
+ if name == generic.Name || strings.HasPrefix(name, generic.Name+"<") {
567
655
  return iterate_metadata_intersection_identity{Kind: "native", Name: generic.Name}
568
656
  }
569
657
  }
@@ -666,19 +754,16 @@ func iterate_metadata_intersection_is_plain_object_only(
666
754
  if nativechecker.IsTupleType(typ) || nativechecker.Checker_isArrayType(checker, typ) {
667
755
  return false
668
756
  }
669
- if metadata_get_function_node(typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
757
+ if metadata_get_function_node(checker, typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
670
758
  return false
671
759
  }
672
760
 
673
- name := iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(typ))
674
- if name == "" {
675
- name = iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(checker.GetApparentType(typ)))
676
- }
677
- if _, ok := iterate_metadata_native_simples[name]; ok {
761
+ name, symbol := iterate_metadata_intersection_type_name_and_symbol(checker, typ)
762
+ if _, ok := iterate_metadata_native_simples[name]; ok && metadata_symbol_is_runtime_native_type(checker, symbol, name) {
678
763
  return false
679
764
  }
680
765
  for _, generic := range iterate_metadata_native_generics {
681
- if strings.HasPrefix(name, generic.Name) {
766
+ if name == generic.Name || strings.HasPrefix(name, generic.Name+"<") {
682
767
  return false
683
768
  }
684
769
  }
@@ -973,28 +1058,25 @@ func iterate_metadata_intersection_category(
973
1058
  return "tag"
974
1059
  }
975
1060
  }
976
- name := iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(typ))
977
- if name == "" {
978
- name = iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(checker.GetApparentType(typ)))
979
- }
1061
+ name, symbol := iterate_metadata_intersection_type_name_and_symbol(checker, typ)
980
1062
  if atomic, ok := schemametadata.MetadataSchema_atomicLikeNative(name); ok {
981
1063
  return "primitive:" + atomic
982
1064
  }
983
1065
  if name == "Array" || name == "ReadonlyArray" {
984
1066
  return "array"
985
1067
  }
986
- if _, ok := iterate_metadata_native_simples[name]; ok {
1068
+ if _, ok := iterate_metadata_native_simples[name]; ok && metadata_symbol_is_runtime_native_type(checker, symbol, name) {
987
1069
  return "native:" + name
988
1070
  }
989
1071
  for _, generic := range iterate_metadata_native_generics {
990
- if strings.HasPrefix(name, generic.Name) {
1072
+ if name == generic.Name || strings.HasPrefix(name, generic.Name+"<") {
991
1073
  return "object"
992
1074
  }
993
1075
  }
994
1076
  if name == "Map" || name == "ReadonlyMap" || name == "Set" || name == "ReadonlySet" {
995
1077
  return "object"
996
1078
  }
997
- if metadata_get_function_node(typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
1079
+ if metadata_get_function_node(checker, typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
998
1080
  return "object"
999
1081
  }
1000
1082
  if typ.Flags()&nativechecker.TypeFlagsObject != 0 {
@@ -10,6 +10,11 @@ func Iterate_metadata_map(props IMetadataIteratorProps) bool {
10
10
  if metadata_type_symbol_base_name(typ) != "Map" {
11
11
  return false
12
12
  }
13
+ // The native Map is the runtime-provided global type, not any same-named
14
+ // package declaration or user-authored global (#2200, #2212, #2239).
15
+ if !metadata_symbol_is_runtime_global_type(props.Checker, typ.Symbol(), "Map") {
16
+ return false
17
+ }
13
18
  generic := metadata_get_type_arguments(props.Checker, typ)
14
19
  if len(generic) != 2 {
15
20
  return false
@@ -3,24 +3,48 @@ package metadata
3
3
  import (
4
4
  "strings"
5
5
 
6
+ nativeast "github.com/microsoft/typescript-go/shim/ast"
6
7
  schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
7
8
  )
8
9
 
9
10
  func Iterate_metadata_native(props IMetadataIteratorProps) bool {
11
+ var symbol *nativeast.Symbol
10
12
  name := ""
11
13
  if props.Type != nil {
14
+ symbol = props.Type.Symbol()
12
15
  name = metadata_type_symbol_base_name(props.Type)
13
16
  }
14
17
  if name == "" && props.Checker != nil && props.Type != nil {
15
- name = metadata_type_symbol_base_name(props.Checker.GetApparentType(props.Type))
18
+ apparent := props.Checker.GetApparentType(props.Type)
19
+ if apparent != nil {
20
+ symbol = apparent.Symbol()
21
+ }
22
+ name = metadata_type_symbol_base_name(apparent)
16
23
  }
17
24
  name = iterate_metadata_native_getNativeName(name)
18
25
  if _, ok := iterate_metadata_native_simples[name]; ok {
26
+ // Match the built-in only when the checker resolves this exact symbol from
27
+ // the global type table *and* a runtime authority provides its constructor.
28
+ // A colliding package declaration then falls through to its structural
29
+ // members regardless of whether it was authored in `.ts` or published
30
+ // through `.d.ts` (#2239), and so does a purely user-authored global that
31
+ // merely wins the same global lookup (#2200). Node's authoritative Blob and
32
+ // File module exports are distinct symbols for the same runtime globals, so
33
+ // admit only their value-bearing exact core-module declaration shape as the
34
+ // second identity path (#1568).
35
+ if !metadata_symbol_is_runtime_native_type(props.Checker, symbol, name) {
36
+ return false
37
+ }
19
38
  iterate_metadata_native_take(props.Metadata, name)
20
39
  return true
21
40
  }
22
41
  for _, generic := range iterate_metadata_native_generics {
23
- if strings.HasPrefix(name, generic.Name) {
42
+ if name == generic.Name || strings.HasPrefix(name, generic.Name+"<") {
43
+ // Use the same runtime-provenance identity gate for WeakMap/WeakSet. The
44
+ // `+"<"` arity guard (#2181) and generic metadata remain unchanged.
45
+ if !metadata_symbol_is_runtime_global_type(props.Checker, symbol, generic.Name) {
46
+ return false
47
+ }
24
48
  iterate_metadata_native_take(props.Metadata, generic.Name)
25
49
  return true
26
50
  }
@@ -44,6 +68,25 @@ func iterate_metadata_native_getNativeName(name string) string {
44
68
  if index := strings.Index(name, "<"); index != -1 {
45
69
  name = name[:index]
46
70
  }
71
+ // `global.` is the qualifier `metadata_symbol_name` produces for a symbol
72
+ // declared inside a `declare global` block, which is how @types/node declares
73
+ // the bare `Blob` and `File` globals. A project that includes the DOM library
74
+ // never showed it, because the DOM declares those names at file scope and the
75
+ // DOM declaration won the name; drop the DOM library — an ordinary Node
76
+ // service compiled with `"lib": ["ES2022"]` — and the only declaration left is
77
+ // the augmented one, so the name arrives as `global.Blob` and this lookup
78
+ // misses before any identity question is asked. Stripping the qualifier only
79
+ // restores the question; whether the declaration is a runtime-provided native
80
+ // or a same-named user global stays the identity gate's answer to give.
81
+ //
82
+ // An ambient module's qualifier is deliberately not stripped here: a lookalike
83
+ // published as `declare module "user-buffer-lookalike"` arrives as
84
+ // `user-buffer-lookalike.Blob` and must keep failing this lookup.
85
+ for _, module := range []string{"node:buffer.", "buffer.", "global."} {
86
+ if strings.HasPrefix(name, module) {
87
+ return strings.TrimPrefix(name, module)
88
+ }
89
+ }
47
90
  if strings.HasPrefix(name, "\"") && strings.Contains(name, "\".") {
48
91
  if index := strings.Index(name[1:], "\"."); index != -1 {
49
92
  name = name[index+3:]
@@ -10,6 +10,11 @@ func Iterate_metadata_set(props IMetadataIteratorProps) bool {
10
10
  if metadata_type_symbol_base_name(typ) != "Set" {
11
11
  return false
12
12
  }
13
+ // The native Set is the runtime-provided global type, not any same-named
14
+ // package declaration or user-authored global (#2200, #2212, #2239).
15
+ if !metadata_symbol_is_runtime_global_type(props.Checker, typ.Symbol(), "Set") {
16
+ return false
17
+ }
13
18
  generic := metadata_get_type_arguments(props.Checker, typ)
14
19
  if len(generic) != 1 {
15
20
  return false