typia 13.1.1 → 13.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (515) hide show
  1. package/README.md +3 -0
  2. package/lib/_virtual/_rolldown/runtime.mjs +1 -5
  3. package/lib/executable/FileSystemIdentity.d.ts +21 -0
  4. package/lib/executable/FileSystemIdentity.js +183 -0
  5. package/lib/executable/FileSystemIdentity.js.map +1 -0
  6. package/lib/executable/FileSystemIdentity.mjs +129 -0
  7. package/lib/executable/FileSystemIdentity.mjs.map +1 -0
  8. package/lib/executable/TypiaGenerateWizard.js +264 -104
  9. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  10. package/lib/executable/TypiaGenerateWizard.mjs +233 -93
  11. package/lib/executable/TypiaGenerateWizard.mjs.map +1 -1
  12. package/lib/functional.d.ts +15 -12
  13. package/lib/functional.js.map +1 -1
  14. package/lib/functional.mjs.map +1 -1
  15. package/lib/internal/_ProtobufReader.d.ts +17 -0
  16. package/lib/internal/_ProtobufReader.js +117 -45
  17. package/lib/internal/_ProtobufReader.js.map +1 -1
  18. package/lib/internal/_ProtobufReader.mjs +108 -39
  19. package/lib/internal/_ProtobufReader.mjs.map +1 -1
  20. package/lib/internal/_createStandardSchema.js +18 -1
  21. package/lib/internal/_createStandardSchema.js.map +1 -1
  22. package/lib/internal/_createStandardSchema.mjs +12 -1
  23. package/lib/internal/_createStandardSchema.mjs.map +1 -1
  24. package/lib/internal/_decimal.d.ts +14 -0
  25. package/lib/internal/_decimal.js +61 -0
  26. package/lib/internal/_decimal.js.map +1 -0
  27. package/lib/internal/_decimal.mjs +49 -0
  28. package/lib/internal/_decimal.mjs.map +1 -0
  29. package/lib/internal/_httpQueryParseURLSearchParams.js +23 -2
  30. package/lib/internal/_httpQueryParseURLSearchParams.js.map +1 -1
  31. package/lib/internal/_httpQueryParseURLSearchParams.mjs +20 -2
  32. package/lib/internal/_httpQueryParseURLSearchParams.mjs.map +1 -1
  33. package/lib/internal/_isFormatByte.js +2 -5
  34. package/lib/internal/_isFormatByte.js.map +1 -1
  35. package/lib/internal/_isFormatByte.mjs +2 -5
  36. package/lib/internal/_isFormatByte.mjs.map +1 -1
  37. package/lib/internal/_isFormatDate.js +15 -2
  38. package/lib/internal/_isFormatDate.js.map +1 -1
  39. package/lib/internal/_isFormatDate.mjs +22 -2
  40. package/lib/internal/_isFormatDate.mjs.map +1 -1
  41. package/lib/internal/_isFormatDateTime.js +21 -2
  42. package/lib/internal/_isFormatDateTime.js.map +1 -1
  43. package/lib/internal/_isFormatDateTime.mjs +13 -2
  44. package/lib/internal/_isFormatDateTime.mjs.map +1 -1
  45. package/lib/internal/_isFormatIri.js +3 -2
  46. package/lib/internal/_isFormatIri.js.map +1 -1
  47. package/lib/internal/_isFormatIri.mjs +3 -2
  48. package/lib/internal/_isFormatIri.mjs.map +1 -1
  49. package/lib/internal/_isFormatIriReference.js +10 -2
  50. package/lib/internal/_isFormatIriReference.js.map +1 -1
  51. package/lib/internal/_isFormatIriReference.mjs +9 -2
  52. package/lib/internal/_isFormatIriReference.mjs.map +1 -1
  53. package/lib/internal/_isFormatUriReference.js +1 -1
  54. package/lib/internal/_isFormatUriReference.js.map +1 -1
  55. package/lib/internal/_isFormatUriReference.mjs +1 -1
  56. package/lib/internal/_isFormatUriReference.mjs.map +1 -1
  57. package/lib/internal/_isMultipleOf.d.ts +1 -0
  58. package/lib/internal/_isMultipleOf.js +13 -0
  59. package/lib/internal/_isMultipleOf.js.map +1 -0
  60. package/lib/internal/_isMultipleOf.mjs +12 -0
  61. package/lib/internal/_isMultipleOf.mjs.map +1 -0
  62. package/lib/internal/_isTypeFloat.js +1 -1
  63. package/lib/internal/_isTypeFloat.js.map +1 -1
  64. package/lib/internal/_isTypeFloat.mjs +1 -1
  65. package/lib/internal/_isTypeFloat.mjs.map +1 -1
  66. package/lib/internal/_isTypeInt64.js +1 -0
  67. package/lib/internal/_isTypeInt64.js.map +1 -1
  68. package/lib/internal/_isTypeInt64.mjs.map +1 -1
  69. package/lib/internal/_isTypeInt64Bigint.d.ts +1 -0
  70. package/lib/internal/_isTypeInt64Bigint.js +15 -0
  71. package/lib/internal/_isTypeInt64Bigint.js.map +1 -0
  72. package/lib/internal/_isTypeInt64Bigint.mjs +8 -0
  73. package/lib/internal/_isTypeInt64Bigint.mjs.map +1 -0
  74. package/lib/internal/_isTypeUint64.js +1 -0
  75. package/lib/internal/_isTypeUint64.js.map +1 -1
  76. package/lib/internal/_isTypeUint64.mjs.map +1 -1
  77. package/lib/internal/_isTypeUint64Bigint.d.ts +1 -0
  78. package/lib/internal/_isTypeUint64Bigint.js +10 -0
  79. package/lib/internal/_isTypeUint64Bigint.js.map +1 -0
  80. package/lib/internal/_isTypeUint64Bigint.mjs +8 -0
  81. package/lib/internal/_isTypeUint64Bigint.mjs.map +1 -0
  82. package/lib/internal/_isUniqueItems.js +96 -109
  83. package/lib/internal/_isUniqueItems.js.map +1 -1
  84. package/lib/internal/_isUniqueItems.mjs +62 -50
  85. package/lib/internal/_isUniqueItems.mjs.map +1 -1
  86. package/lib/internal/_notationAny.js +8 -1
  87. package/lib/internal/_notationAny.js.map +1 -1
  88. package/lib/internal/_notationAny.mjs +7 -1
  89. package/lib/internal/_notationAny.mjs.map +1 -1
  90. package/lib/internal/_notationAssign.d.ts +1 -0
  91. package/lib/internal/_notationAssign.js +18 -0
  92. package/lib/internal/_notationAssign.js.map +1 -0
  93. package/lib/internal/_notationAssign.mjs +17 -0
  94. package/lib/internal/_notationAssign.mjs.map +1 -0
  95. package/lib/internal/_notationCamel.js +30 -9
  96. package/lib/internal/_notationCamel.js.map +1 -1
  97. package/lib/internal/_notationCamel.mjs +13 -5
  98. package/lib/internal/_notationCamel.mjs.map +1 -1
  99. package/lib/internal/_notationKebab.d.ts +1 -0
  100. package/lib/internal/_notationKebab.js +15 -0
  101. package/lib/internal/_notationKebab.js.map +1 -0
  102. package/lib/internal/_notationKebab.mjs +15 -0
  103. package/lib/internal/_notationKebab.mjs.map +1 -0
  104. package/lib/internal/_notationKeyCollision.d.ts +1 -0
  105. package/lib/internal/_notationKeyCollision.js +8 -0
  106. package/lib/internal/_notationKeyCollision.js.map +1 -0
  107. package/lib/internal/_notationKeyCollision.mjs +8 -0
  108. package/lib/internal/_notationKeyCollision.mjs.map +1 -0
  109. package/lib/internal/_notationPascal.js +20 -5
  110. package/lib/internal/_notationPascal.js.map +1 -1
  111. package/lib/internal/_notationPascal.mjs +10 -5
  112. package/lib/internal/_notationPascal.mjs.map +1 -1
  113. package/lib/internal/_notationSnake.js +25 -22
  114. package/lib/internal/_notationSnake.js.map +1 -1
  115. package/lib/internal/_notationSnake.mjs +11 -11
  116. package/lib/internal/_notationSnake.mjs.map +1 -1
  117. package/lib/internal/_plainCloneAny.js +174 -38
  118. package/lib/internal/_plainCloneAny.js.map +1 -1
  119. package/lib/internal/_plainCloneAny.mjs +126 -22
  120. package/lib/internal/_plainCloneAny.mjs.map +1 -1
  121. package/lib/internal/_randomArray.d.ts +1 -1
  122. package/lib/internal/_randomArray.js +11 -4
  123. package/lib/internal/_randomArray.js.map +1 -1
  124. package/lib/internal/_randomArray.mjs +9 -3
  125. package/lib/internal/_randomArray.mjs.map +1 -1
  126. package/lib/internal/_randomFormatByte.d.ts +2 -1
  127. package/lib/internal/_randomFormatByte.js +2 -1
  128. package/lib/internal/_randomFormatByte.js.map +1 -1
  129. package/lib/internal/_randomFormatByte.mjs +2 -1
  130. package/lib/internal/_randomFormatByte.mjs.map +1 -1
  131. package/lib/internal/_randomFormatDate.d.ts +2 -0
  132. package/lib/internal/_randomFormatDate.js +3 -2
  133. package/lib/internal/_randomFormatDate.js.map +1 -1
  134. package/lib/internal/_randomFormatDate.mjs +3 -2
  135. package/lib/internal/_randomFormatDate.mjs.map +1 -1
  136. package/lib/internal/_randomFormatDatetime.d.ts +2 -0
  137. package/lib/internal/_randomFormatDatetime.js +3 -2
  138. package/lib/internal/_randomFormatDatetime.js.map +1 -1
  139. package/lib/internal/_randomFormatDatetime.mjs +3 -2
  140. package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
  141. package/lib/internal/_randomFormatDuration.d.ts +2 -1
  142. package/lib/internal/_randomFormatDuration.js +3 -2
  143. package/lib/internal/_randomFormatDuration.js.map +1 -1
  144. package/lib/internal/_randomFormatDuration.mjs +3 -2
  145. package/lib/internal/_randomFormatDuration.mjs.map +1 -1
  146. package/lib/internal/_randomFormatEmail.d.ts +2 -1
  147. package/lib/internal/_randomFormatEmail.js +8 -1
  148. package/lib/internal/_randomFormatEmail.js.map +1 -1
  149. package/lib/internal/_randomFormatEmail.mjs +5 -1
  150. package/lib/internal/_randomFormatEmail.mjs.map +1 -1
  151. package/lib/internal/_randomFormatHostname.d.ts +8 -1
  152. package/lib/internal/_randomFormatHostname.js +45 -2
  153. package/lib/internal/_randomFormatHostname.js.map +1 -1
  154. package/lib/internal/_randomFormatHostname.mjs +38 -2
  155. package/lib/internal/_randomFormatHostname.mjs.map +1 -1
  156. package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
  157. package/lib/internal/_randomFormatIdnEmail.js +16 -2
  158. package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
  159. package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
  160. package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
  161. package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
  162. package/lib/internal/_randomFormatIdnHostname.js +26 -1
  163. package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
  164. package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
  165. package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
  166. package/lib/internal/_randomFormatIpv4.d.ts +2 -1
  167. package/lib/internal/_randomFormatIpv4.js +2 -1
  168. package/lib/internal/_randomFormatIpv4.js.map +1 -1
  169. package/lib/internal/_randomFormatIpv4.mjs +2 -1
  170. package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
  171. package/lib/internal/_randomFormatIpv6.d.ts +2 -1
  172. package/lib/internal/_randomFormatIpv6.js +2 -1
  173. package/lib/internal/_randomFormatIpv6.js.map +1 -1
  174. package/lib/internal/_randomFormatIpv6.mjs +2 -1
  175. package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
  176. package/lib/internal/_randomFormatIri.d.ts +2 -1
  177. package/lib/internal/_randomFormatIri.js +1 -1
  178. package/lib/internal/_randomFormatIri.js.map +1 -1
  179. package/lib/internal/_randomFormatIri.mjs +1 -1
  180. package/lib/internal/_randomFormatIri.mjs.map +1 -1
  181. package/lib/internal/_randomFormatIriReference.d.ts +2 -1
  182. package/lib/internal/_randomFormatIriReference.js +1 -1
  183. package/lib/internal/_randomFormatIriReference.js.map +1 -1
  184. package/lib/internal/_randomFormatIriReference.mjs +1 -1
  185. package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
  186. package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
  187. package/lib/internal/_randomFormatJsonPointer.js +8 -1
  188. package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
  189. package/lib/internal/_randomFormatJsonPointer.mjs +5 -1
  190. package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
  191. package/lib/internal/_randomFormatPassword.d.ts +2 -1
  192. package/lib/internal/_randomFormatPassword.js +7 -5
  193. package/lib/internal/_randomFormatPassword.js.map +1 -1
  194. package/lib/internal/_randomFormatPassword.mjs +5 -1
  195. package/lib/internal/_randomFormatPassword.mjs.map +1 -1
  196. package/lib/internal/_randomFormatRegex.d.ts +2 -1
  197. package/lib/internal/_randomFormatRegex.js +2 -1
  198. package/lib/internal/_randomFormatRegex.js.map +1 -1
  199. package/lib/internal/_randomFormatRegex.mjs +2 -1
  200. package/lib/internal/_randomFormatRegex.mjs.map +1 -1
  201. package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
  202. package/lib/internal/_randomFormatRelativeJsonPointer.js +3 -2
  203. package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
  204. package/lib/internal/_randomFormatRelativeJsonPointer.mjs +3 -2
  205. package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
  206. package/lib/internal/_randomFormatTime.d.ts +2 -1
  207. package/lib/internal/_randomFormatTime.js +3 -2
  208. package/lib/internal/_randomFormatTime.js.map +1 -1
  209. package/lib/internal/_randomFormatTime.mjs +3 -2
  210. package/lib/internal/_randomFormatTime.mjs.map +1 -1
  211. package/lib/internal/_randomFormatUri.d.ts +2 -1
  212. package/lib/internal/_randomFormatUri.js +1 -1
  213. package/lib/internal/_randomFormatUri.js.map +1 -1
  214. package/lib/internal/_randomFormatUri.mjs +1 -1
  215. package/lib/internal/_randomFormatUri.mjs.map +1 -1
  216. package/lib/internal/_randomFormatUriReference.d.ts +2 -1
  217. package/lib/internal/_randomFormatUriReference.js +1 -1
  218. package/lib/internal/_randomFormatUriReference.js.map +1 -1
  219. package/lib/internal/_randomFormatUriReference.mjs +1 -1
  220. package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
  221. package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
  222. package/lib/internal/_randomFormatUriTemplate.js +1 -1
  223. package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
  224. package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
  225. package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
  226. package/lib/internal/_randomFormatUrl.d.ts +2 -1
  227. package/lib/internal/_randomFormatUrl.js +21 -1
  228. package/lib/internal/_randomFormatUrl.js.map +1 -1
  229. package/lib/internal/_randomFormatUrl.mjs +18 -1
  230. package/lib/internal/_randomFormatUrl.mjs.map +1 -1
  231. package/lib/internal/_randomFormatUuid.d.ts +2 -1
  232. package/lib/internal/_randomFormatUuid.js +3 -2
  233. package/lib/internal/_randomFormatUuid.js.map +1 -1
  234. package/lib/internal/_randomFormatUuid.mjs +3 -2
  235. package/lib/internal/_randomFormatUuid.mjs.map +1 -1
  236. package/lib/internal/_randomInteger.js +59 -28
  237. package/lib/internal/_randomInteger.js.map +1 -1
  238. package/lib/internal/_randomInteger.mjs +56 -16
  239. package/lib/internal/_randomInteger.mjs.map +1 -1
  240. package/lib/internal/_randomMultiple.d.ts +8 -0
  241. package/lib/internal/_randomMultiple.js +168 -0
  242. package/lib/internal/_randomMultiple.js.map +1 -0
  243. package/lib/internal/_randomMultiple.mjs +158 -0
  244. package/lib/internal/_randomMultiple.mjs.map +1 -0
  245. package/lib/internal/_randomNumber.js +42 -42
  246. package/lib/internal/_randomNumber.js.map +1 -1
  247. package/lib/internal/_randomNumber.mjs +41 -27
  248. package/lib/internal/_randomNumber.mjs.map +1 -1
  249. package/lib/internal/_randomPattern.d.ts +2 -1
  250. package/lib/internal/_randomPattern.js +19 -4
  251. package/lib/internal/_randomPattern.js.map +1 -1
  252. package/lib/internal/_randomPattern.mjs +10 -4
  253. package/lib/internal/_randomPattern.mjs.map +1 -1
  254. package/lib/internal/_randomStringLength.d.ts +33 -0
  255. package/lib/internal/_randomStringLength.js +48 -0
  256. package/lib/internal/_randomStringLength.js.map +1 -0
  257. package/lib/internal/_randomStringLength.mjs +44 -0
  258. package/lib/internal/_randomStringLength.mjs.map +1 -0
  259. package/lib/internal/_stringLength.d.ts +1 -0
  260. package/lib/internal/_stringLength.js +11 -0
  261. package/lib/internal/_stringLength.js.map +1 -0
  262. package/lib/internal/_stringLength.mjs +10 -0
  263. package/lib/internal/_stringLength.mjs.map +1 -0
  264. package/lib/internal/_validateReport.js +4 -1
  265. package/lib/internal/_validateReport.js.map +1 -1
  266. package/lib/internal/_validateReport.mjs +2 -1
  267. package/lib/internal/_validateReport.mjs.map +1 -1
  268. package/lib/internal/private/__notationRename.d.ts +14 -0
  269. package/lib/internal/private/__notationRename.js +25 -0
  270. package/lib/internal/private/__notationRename.js.map +1 -0
  271. package/lib/internal/private/__notationRename.mjs +24 -0
  272. package/lib/internal/private/__notationRename.mjs.map +1 -0
  273. package/lib/json.d.ts +2 -2
  274. package/lib/json.mjs.map +1 -1
  275. package/lib/module.d.ts +2 -2
  276. package/lib/module.js.map +1 -1
  277. package/lib/module.mjs.map +1 -1
  278. package/lib/notations.d.ts +20 -4
  279. package/lib/notations.js.map +1 -1
  280. package/lib/notations.mjs.map +1 -1
  281. package/native/adapter/plugin_options.go +117 -0
  282. package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
  283. package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
  284. package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
  285. package/native/cmd/ttsc-typia/build.go +81 -64
  286. package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
  287. package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
  288. package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
  289. package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
  290. package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
  291. package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
  292. package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
  293. package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
  294. package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
  295. package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
  296. package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
  297. package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
  298. package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
  299. package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
  300. package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
  301. package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
  302. package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
  303. package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
  304. package/native/cmd/ttsc-typia/main_wasm.go +21 -2
  305. package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
  306. package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
  307. package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
  308. package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
  309. package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
  310. package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
  311. package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
  312. package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
  313. package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
  314. package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
  315. package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
  316. package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
  317. package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
  318. package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
  319. package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
  320. package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
  321. package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
  322. package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
  323. package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
  324. package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
  325. package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
  326. package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
  327. package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
  328. package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
  329. package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
  330. package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
  331. package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
  332. package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
  333. package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
  334. package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
  335. package/native/cmd/ttsc-typia/transform.go +228 -39
  336. package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
  337. package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
  338. package/native/cmd/ttsc-typia/transform_helpers_test.go +159 -1
  339. package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
  340. package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
  341. package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
  342. package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
  343. package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
  344. package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
  345. package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
  346. package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
  347. package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
  348. package/native/core/factories/FormatCheatSheet.go +40 -7
  349. package/native/core/factories/IdentifierFactory.go +131 -4
  350. package/native/core/factories/MetadataCommentTagFactory.go +83 -40
  351. package/native/core/factories/MetadataTypeTagFactory.go +13 -1
  352. package/native/core/factories/NumericRangeFactory.go +60 -17
  353. package/native/core/factories/ProtobufFactory.go +7 -4
  354. package/native/core/factories/factory_utility_coverage_test.go +8 -2
  355. package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
  356. package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
  357. package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
  358. package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
  359. package/native/core/factories/internal/metadata/MetadataHelper.go +60 -6
  360. package/native/core/factories/internal/metadata/emplace_metadata_object.go +116 -8
  361. package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
  362. package/native/core/factories/internal/metadata/iterate_metadata_function.go +4 -11
  363. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +8 -6
  364. package/native/core/factories/internal/metadata/iterate_metadata_map.go +9 -0
  365. package/native/core/factories/internal/metadata/iterate_metadata_native.go +27 -2
  366. package/native/core/factories/internal/metadata/iterate_metadata_set.go +9 -0
  367. package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
  368. package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
  369. package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
  370. package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
  371. package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
  372. package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
  373. package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
  374. package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
  375. package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
  376. package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
  377. package/native/core/programmers/IsProgrammer.go +15 -1
  378. package/native/core/programmers/RandomProgrammer.go +51 -14
  379. package/native/core/programmers/compare/CompareEqualProgrammer.go +393 -5
  380. package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
  381. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
  382. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
  383. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
  384. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
  385. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
  386. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
  387. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
  388. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
  389. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
  390. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
  391. package/native/core/programmers/helpers/CloneJoiner.go +32 -0
  392. package/native/core/programmers/helpers/NotationJoiner.go +86 -28
  393. package/native/core/programmers/helpers/StringifyJoinder.go +32 -1
  394. package/native/core/programmers/helpers/UnionExplorer.go +203 -61
  395. package/native/core/programmers/helpers/joiner_branch_coverage_test.go +5 -3
  396. package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
  397. package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
  398. package/native/core/programmers/iterate/check_template.go +344 -32
  399. package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
  400. package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
  401. package/native/core/programmers/iterate/openapi_v3_downgrader.go +641 -0
  402. package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
  403. package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
  404. package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
  405. package/native/core/programmers/iterate/template_runtime_pattern.go +52 -7
  406. package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
  407. package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
  408. package/native/core/programmers/llm/LlmApplicationProgrammer.go +12 -10
  409. package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
  410. package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
  411. package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
  412. package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
  413. package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
  414. package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
  415. package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
  416. package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
  417. package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
  418. package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
  419. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
  420. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +40 -21
  421. package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
  422. package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
  423. package/native/core/schemas/metadata/MetadataCollection.go +270 -20
  424. package/native/core/schemas/metadata/MetadataDependency.go +388 -0
  425. package/native/core/schemas/metadata/MetadataObjectType.go +17 -4
  426. package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
  427. package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
  428. package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
  429. package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
  430. package/native/core/utils/PatternUtil.go +13 -0
  431. package/native/core/utils/PromiseTypeFactory.go +59 -0
  432. package/native/core/utils/ProtobufNameEncoder.go +8 -0
  433. package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
  434. package/native/go.mod +9 -1
  435. package/native/transform/CallExpressionTransformer.go +12 -0
  436. package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
  437. package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
  438. package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
  439. package/package.json +16 -4
  440. package/src/executable/FileSystemIdentity.ts +189 -0
  441. package/src/executable/TypiaGenerateWizard.ts +377 -110
  442. package/src/functional.ts +30 -60
  443. package/src/internal/_ProtobufReader.ts +129 -43
  444. package/src/internal/_createStandardSchema.ts +15 -1
  445. package/src/internal/_decimal.ts +69 -0
  446. package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
  447. package/src/internal/_isFormatByte.ts +2 -5
  448. package/src/internal/_isFormatDate.ts +15 -2
  449. package/src/internal/_isFormatDateTime.ts +28 -2
  450. package/src/internal/_isFormatIri.ts +5 -2
  451. package/src/internal/_isFormatIriReference.ts +11 -3
  452. package/src/internal/_isFormatUriReference.ts +1 -1
  453. package/src/internal/_isMultipleOf.ts +8 -0
  454. package/src/internal/_isTypeFloat.ts +1 -1
  455. package/src/internal/_isTypeInt64.ts +1 -0
  456. package/src/internal/_isTypeInt64Bigint.ts +12 -0
  457. package/src/internal/_isTypeUint64.ts +1 -0
  458. package/src/internal/_isTypeUint64Bigint.ts +7 -0
  459. package/src/internal/_isUniqueItems.ts +134 -132
  460. package/src/internal/_notationAny.ts +9 -4
  461. package/src/internal/_notationAssign.ts +20 -0
  462. package/src/internal/_notationCamel.ts +31 -10
  463. package/src/internal/_notationKebab.ts +11 -0
  464. package/src/internal/_notationKeyCollision.ts +9 -0
  465. package/src/internal/_notationPascal.ts +19 -6
  466. package/src/internal/_notationSnake.ts +24 -21
  467. package/src/internal/_plainCloneAny.ts +208 -33
  468. package/src/internal/_randomArray.ts +13 -4
  469. package/src/internal/_randomFormatByte.ts +4 -1
  470. package/src/internal/_randomFormatDate.ts +17 -12
  471. package/src/internal/_randomFormatDatetime.ts +15 -10
  472. package/src/internal/_randomFormatDuration.ts +16 -14
  473. package/src/internal/_randomFormatEmail.ts +8 -2
  474. package/src/internal/_randomFormatHostname.ts +48 -1
  475. package/src/internal/_randomFormatIdnEmail.ts +18 -2
  476. package/src/internal/_randomFormatIdnHostname.ts +34 -2
  477. package/src/internal/_randomFormatIpv4.ts +3 -2
  478. package/src/internal/_randomFormatIpv6.ts +3 -2
  479. package/src/internal/_randomFormatIri.ts +3 -1
  480. package/src/internal/_randomFormatIriReference.ts +3 -1
  481. package/src/internal/_randomFormatJsonPointer.ts +8 -2
  482. package/src/internal/_randomFormatPassword.ts +11 -6
  483. package/src/internal/_randomFormatRegex.ts +4 -1
  484. package/src/internal/_randomFormatRelativeJsonPointer.ts +13 -6
  485. package/src/internal/_randomFormatTime.ts +13 -10
  486. package/src/internal/_randomFormatUri.ts +3 -1
  487. package/src/internal/_randomFormatUriReference.ts +3 -1
  488. package/src/internal/_randomFormatUriTemplate.ts +3 -1
  489. package/src/internal/_randomFormatUrl.ts +25 -2
  490. package/src/internal/_randomFormatUuid.ts +10 -6
  491. package/src/internal/_randomInteger.ts +87 -40
  492. package/src/internal/_randomMultiple.ts +245 -0
  493. package/src/internal/_randomNumber.ts +72 -55
  494. package/src/internal/_randomPattern.ts +26 -4
  495. package/src/internal/_randomStringLength.ts +72 -0
  496. package/src/internal/_stringLength.ts +5 -0
  497. package/src/internal/_validateReport.ts +5 -1
  498. package/src/internal/private/__notationRename.ts +24 -0
  499. package/src/json.ts +2 -2
  500. package/src/module.ts +4 -6
  501. package/src/notations.ts +20 -4
  502. package/lib/internal/private/__notationCapitalize.d.ts +0 -1
  503. package/lib/internal/private/__notationCapitalize.js +0 -6
  504. package/lib/internal/private/__notationCapitalize.js.map +0 -1
  505. package/lib/internal/private/__notationCapitalize.mjs +0 -6
  506. package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
  507. package/lib/internal/private/__notationUnsnake.d.ts +0 -4
  508. package/lib/internal/private/__notationUnsnake.js +0 -26
  509. package/lib/internal/private/__notationUnsnake.js.map +0 -1
  510. package/lib/internal/private/__notationUnsnake.mjs +0 -15
  511. package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
  512. package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
  513. package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
  514. package/src/internal/private/__notationCapitalize.ts +0 -2
  515. package/src/internal/private/__notationUnsnake.ts +0 -24
@@ -1,9 +1,12 @@
1
1
  package metadata
2
2
 
3
3
  import (
4
+ "hash/fnv"
4
5
  "maps"
5
6
  "slices"
7
+ "strconv"
6
8
  "strings"
9
+ "unicode"
7
10
 
8
11
  nativeast "github.com/microsoft/typescript-go/shim/ast"
9
12
  nativechecker "github.com/microsoft/typescript-go/shim/checker"
@@ -28,7 +31,9 @@ type MetadataCollection struct {
28
31
  arrays_order_ []*nativechecker.Type
29
32
  tuples_order_ []*nativechecker.Type
30
33
 
31
- names_ map[string]map[*nativechecker.Type]string
34
+ names_ map[*nativechecker.Type]string
35
+ allocated_names_ map[string]bool
36
+ name_counters_ map[string]int
32
37
  type_full_names_ map[*nativechecker.Type]string
33
38
  full_names_ map[*nativechecker.Type]string
34
39
  display_names_ map[*nativechecker.Type]string
@@ -96,7 +101,9 @@ func NewMetadataCollection(options ...*MetadataCollection_IOptions) *MetadataCol
96
101
  arrays_order_: []*nativechecker.Type{},
97
102
  tuples_order_: []*nativechecker.Type{},
98
103
 
99
- names_: map[string]map[*nativechecker.Type]string{},
104
+ names_: map[*nativechecker.Type]string{},
105
+ allocated_names_: map[string]bool{},
106
+ name_counters_: map[string]int{},
100
107
  object_index_: 0,
101
108
  recursive_array_index_: 0,
102
109
  recursive_tuple_index_: 0,
@@ -126,7 +133,9 @@ func (collection *MetadataCollection) Clone() *MetadataCollection {
126
133
  arrays_order_: slices.Clone(collection.arrays_order_),
127
134
  tuples_order_: slices.Clone(collection.tuples_order_),
128
135
 
129
- names_: make(map[string]map[*nativechecker.Type]string, len(collection.names_)),
136
+ names_: maps.Clone(collection.names_),
137
+ allocated_names_: maps.Clone(collection.allocated_names_),
138
+ name_counters_: maps.Clone(collection.name_counters_),
130
139
  type_full_names_: maps.Clone(collection.type_full_names_),
131
140
  full_names_: maps.Clone(collection.full_names_),
132
141
  display_names_: maps.Clone(collection.display_names_),
@@ -142,9 +151,6 @@ func (collection *MetadataCollection) Clone() *MetadataCollection {
142
151
  for k, v := range collection.object_unions_ {
143
152
  output.object_unions_[k] = slices.Clone(v)
144
153
  }
145
- for k, v := range collection.names_ {
146
- output.names_[k] = maps.Clone(v)
147
- }
148
154
  return output
149
155
  }
150
156
 
@@ -171,7 +177,7 @@ func (collection *MetadataCollection) StoreExploreCache(key MetadataCollection_E
171
177
 
172
178
  func (collection *MetadataCollection) ApparentProperties(checker *nativechecker.Checker, typ *nativechecker.Type) []*nativeast.Symbol {
173
179
  if collection == nil {
174
- return nativechecker.Checker_getApparentProperties(checker, typ)
180
+ return metadataCollection_touchProperties(checker, nativechecker.Checker_getApparentProperties(checker, typ))
175
181
  }
176
182
  if collection.apparent_properties_ == nil {
177
183
  collection.apparent_properties_ = map[*nativechecker.Type][]*nativeast.Symbol{}
@@ -179,11 +185,22 @@ func (collection *MetadataCollection) ApparentProperties(checker *nativechecker.
179
185
  if value, ok := collection.apparent_properties_[typ]; ok {
180
186
  return value
181
187
  }
182
- value := nativechecker.Checker_getApparentProperties(checker, typ)
188
+ value := metadataCollection_touchProperties(checker, nativechecker.Checker_getApparentProperties(checker, typ))
183
189
  collection.apparent_properties_[typ] = value
184
190
  return value
185
191
  }
186
192
 
193
+ // metadataCollection_touchProperties reports each enumerated property symbol to
194
+ // the dependency listener. Inherited members keep their declaring symbol, so an
195
+ // object type declared in one file registers the base-interface or base-class
196
+ // files its properties actually come from.
197
+ func metadataCollection_touchProperties(checker *nativechecker.Checker, symbols []*nativeast.Symbol) []*nativeast.Symbol {
198
+ for _, symbol := range symbols {
199
+ MetadataDependency_touchSymbol(checker, symbol)
200
+ }
201
+ return symbols
202
+ }
203
+
187
204
  func (collection *MetadataCollection) IndexInfos(checker *nativechecker.Checker, typ *nativechecker.Type) []*nativechecker.IndexInfo {
188
205
  if collection == nil {
189
206
  return nativechecker.Checker_getIndexInfosOfType(checker, typ)
@@ -297,22 +314,70 @@ func (collection *MetadataCollection) getName(checker *nativechecker.Checker, ty
297
314
  if collection.Options != nil && collection.Options.Replace != nil {
298
315
  name = collection.Options.Replace(name)
299
316
  }
300
- duplicates := collection.names_[name]
301
- if duplicates == nil {
302
- duplicates = map[*nativechecker.Type]string{}
303
- collection.names_[name] = duplicates
304
- }
305
- if oldbie, ok := duplicates[typ]; ok {
317
+ if oldbie, ok := collection.names_[typ]; ok {
306
318
  return oldbie, display
307
319
  }
308
- addicted := name
309
- if len(duplicates) != 0 {
310
- addicted = name + ".o" + metadataCollection_itoa(len(duplicates))
311
- }
312
- duplicates[typ] = addicted
320
+ addicted, index := metadataCollection_allocateName(
321
+ collection.allocated_names_,
322
+ name,
323
+ collection.name_counters_[name],
324
+ )
325
+ collection.allocated_names_[addicted] = true
326
+ collection.name_counters_[name] = index + 1
327
+ collection.names_[typ] = addicted
313
328
  return addicted, display
314
329
  }
315
330
 
331
+ // metadataCollection_duplicateSuffix separates a duplicated base name from its
332
+ // disambiguating counter.
333
+ //
334
+ // It must not be ".", which is how a qualified name separates a namespace from
335
+ // its member. Two consumers read that meaning back out of an allocated id:
336
+ // `JsonDescriptor.cascade` inherits the prefix component's description into the
337
+ // child, and a reader of `reflect.name` sees a member of a namespace that never
338
+ // declared it. A dotted counter also let an invented id land on the real full
339
+ // name of a `namespace Foo { interface o1 }` member, and the loser was dropped
340
+ // from the document outright. "-" cannot occur in a qualified name, is in the
341
+ // OpenAPI Components Object key alphabet, and needs no JSON Pointer or URI
342
+ // escaping; `metadataCollection_openApiNameSuffix` picks it for the same reason.
343
+ const metadataCollection_duplicateSuffix = "-o"
344
+
345
+ // metadataCollection_allocateName mints the first id at or after `from` that no
346
+ // other type in the collection has already been given, and reports the counter
347
+ // it settled on.
348
+ //
349
+ // `taken` is the whole collection's allocated-id set, not one base name's
350
+ // bucket. Bucketing by base name alone cannot see that another base name
351
+ // already minted, or genuinely owns, the id being handed out, so two distinct
352
+ // types received one id and one of them silently disappeared from every
353
+ // generated document. Consulting the whole set is what makes an id unique; the
354
+ // separator only keeps that id from being *read* as something it is not.
355
+ //
356
+ // `from` is the caller's per-base-name counter and is an optimization, never
357
+ // the uniqueness argument: the set is still checked, so a wrong `from` costs a
358
+ // scan rather than a collision. It exists because every anonymous type shares
359
+ // the name `__type`. Always starting at zero rescans the whole run of previous
360
+ // `__type` ids for each new one, which is quadratic in a program's anonymous
361
+ // type count and cost 87s at 20k where resuming costs milliseconds.
362
+ func metadataCollection_allocateName(taken map[string]bool, name string, from int) (string, int) {
363
+ index := from
364
+ allocated := metadataCollection_composeName(name, index)
365
+ for taken[allocated] {
366
+ index++
367
+ allocated = metadataCollection_composeName(name, index)
368
+ }
369
+ return allocated, index
370
+ }
371
+
372
+ // metadataCollection_composeName renders a base name at a counter. Counter zero
373
+ // is the base name itself, so the first type of a name keeps it unchanged.
374
+ func metadataCollection_composeName(name string, index int) string {
375
+ if index == 0 {
376
+ return name
377
+ }
378
+ return name + metadataCollection_duplicateSuffix + metadataCollection_itoa(index)
379
+ }
380
+
316
381
  func (collection *MetadataCollection) getFullName(checker *nativechecker.Checker, typ *nativechecker.Type) string {
317
382
  fullName, ok := collection.full_names_[typ]
318
383
  if ok == false {
@@ -330,7 +395,7 @@ func (collection *MetadataCollection) getFullName(checker *nativechecker.Checker
330
395
  // getDisplayName renders the structural form (checker.TypeToString) of types
331
396
  // whose sanitized identifier name carries the anonymous "__type" marker, so
332
397
  // human-facing expected strings can show `{ id: string; name: string; }`
333
- // instead of `__type.o1`. Named types return "": their identifier name is
398
+ // instead of `__type-o1`. Named types return "": their identifier name is
334
399
  // already the best display, and so is the degenerate case where the rendering
335
400
  // brings no extra information.
336
401
  func (collection *MetadataCollection) getDisplayName(checker *nativechecker.Checker, typ *nativechecker.Type, sanitized string) string {
@@ -534,6 +599,191 @@ func MetadataCollection_replace(str string) string {
534
599
  return str
535
600
  }
536
601
 
602
+ // metadataCollection_qualifyOpenApiName keeps the dots of a type's own
603
+ // namespace qualification and rewrites every other dot in a rendered name.
604
+ //
605
+ // A dot in a Components Object key is read back as a namespace boundary:
606
+ // `JsonDescriptor.cascade` looks the dotted prefix up as a component and
607
+ // inherits its description into the child. Deleting a rendered name's angle
608
+ // brackets flattens a nested type into the key and used to leave that nested
609
+ // type's dots behind, so `Gen<Ns.Inner>` became `GenNs.Inner` and claimed the
610
+ // unrelated `GenNs` interface as its parent. The dots of a nested rendering —
611
+ // a type argument, a union member — belong to the nested type, never to the
612
+ // whole.
613
+ //
614
+ // Only the leading run of identifier runes is the type's own name, because
615
+ // `metadataCollection_exploreName` builds exactly that prefix from the
616
+ // declaration's enclosing module blocks. Once a structural rune appears the
617
+ // rendering has descended into another type, so no later dot can be this type's
618
+ // namespace boundary.
619
+ //
620
+ // This owns the OpenAPI key space alone. Deliberately not `MetadataCollection_replace`:
621
+ // the LLM `$defs` and `reflect.name` key spaces carry no namespace meaning, and
622
+ // no consumer reads a parent relation out of them.
623
+ func metadataCollection_qualifyOpenApiName(str string) string {
624
+ var builder strings.Builder
625
+ qualified := true
626
+ for _, ch := range str {
627
+ if ch == '.' {
628
+ if qualified {
629
+ builder.WriteRune('.')
630
+ } else {
631
+ builder.WriteString(metadataCollection_qualifySeparator)
632
+ }
633
+ continue
634
+ }
635
+ if metadataCollection_isIdentifierRune(ch) == false {
636
+ qualified = false
637
+ }
638
+ builder.WriteRune(ch)
639
+ }
640
+ return builder.String()
641
+ }
642
+
643
+ // metadataCollection_qualifySeparator renders a flattened nested type's
644
+ // boundary. "-" is in the OpenAPI key alphabet and cannot occur in a qualified
645
+ // name, so it can never be mistaken for the namespace boundary a dot denotes.
646
+ //
647
+ // A quoted literal argument can contain "-" of its own, so this alone is not
648
+ // injective; `metadataCollection_writeOpenApiQuotedRune` is what keeps a
649
+ // literal dot from colliding with it, and `metadataCollection_allocateName`
650
+ // bounds whatever remains.
651
+ const metadataCollection_qualifySeparator = "-"
652
+
653
+ // metadataCollection_isIdentifierRune reports whether a rune can appear in a
654
+ // TypeScript identifier, and therefore in a qualified name. Unicode letters
655
+ // count: `Café.Member` is a real qualification whose dot must survive, even
656
+ // though the final key escapes the accented rune.
657
+ func metadataCollection_isIdentifierRune(ch rune) bool {
658
+ return unicode.IsLetter(ch) ||
659
+ unicode.IsDigit(ch) ||
660
+ ch == '_' ||
661
+ ch == '$'
662
+ }
663
+
664
+ // MetadataCollection_replaceOpenApi converts a metadata display name into an
665
+ // OpenAPI Components Object key. Keep this separate from the general metadata
666
+ // replacement used by LLM `$defs`, for two reasons. OpenAPI restricts keys to
667
+ // an ASCII grammar, while an LLM definition map can own arbitrary JSON object
668
+ // keys. And an OpenAPI key is structure a consumer reads back — a dot in one is
669
+ // a namespace boundary to `JsonDescriptor.cascade` — so this replacer also owes
670
+ // `metadataCollection_qualifyOpenApiName`'s rule, which an LLM key does not.
671
+ func MetadataCollection_replaceOpenApi(str string) string {
672
+ var escaped strings.Builder
673
+ var quote rune
674
+ quotedContent := false
675
+ quotedEscape := false
676
+ disambiguate := false
677
+ for _, ch := range str {
678
+ if quote != 0 {
679
+ if quotedEscape {
680
+ disambiguate = metadataCollection_writeOpenApiQuotedRune(&escaped, ch) || disambiguate
681
+ quotedContent = true
682
+ quotedEscape = false
683
+ continue
684
+ }
685
+ if ch == '\\' {
686
+ disambiguate = metadataCollection_writeOpenApiQuotedRune(&escaped, ch) || disambiguate
687
+ quotedContent = true
688
+ quotedEscape = true
689
+ continue
690
+ }
691
+ if ch == quote {
692
+ if quotedContent == false {
693
+ disambiguate = true
694
+ }
695
+ quote = 0
696
+ continue
697
+ }
698
+ disambiguate = metadataCollection_writeOpenApiQuotedRune(&escaped, ch) || disambiguate
699
+ quotedContent = true
700
+ continue
701
+ }
702
+ if ch == '\'' || ch == '"' || ch == '`' {
703
+ quote = ch
704
+ quotedContent = false
705
+ continue
706
+ }
707
+ if ch == '$' {
708
+ disambiguate = metadataCollection_writeOpenApiNameRune(&escaped, ch) || disambiguate
709
+ } else {
710
+ escaped.WriteRune(ch)
711
+ }
712
+ }
713
+ normalized := MetadataCollection_replace(metadataCollection_qualifyOpenApiName(escaped.String()))
714
+ if len(normalized) == 0 {
715
+ normalized = "_"
716
+ disambiguate = true
717
+ }
718
+ var builder strings.Builder
719
+ for _, ch := range normalized {
720
+ disambiguate = metadataCollection_writeOpenApiNameRune(&builder, ch) || disambiguate
721
+ }
722
+ if disambiguate {
723
+ builder.WriteString(metadataCollection_openApiNameSuffix)
724
+ builder.WriteString(metadataCollection_openApiNameHash(str))
725
+ }
726
+ return builder.String()
727
+ }
728
+
729
+ // metadataCollection_openApiNameSuffix separates an escaped base name from its
730
+ // disambiguating hash. It must not be ".": JsonDescriptor.cascade reads a dot
731
+ // in a component key as a namespace boundary and inherits the parent
732
+ // component's description, so a dotted suffix would present the escaped base as
733
+ // a fake parent and pull an unrelated type's description into the escaped
734
+ // schema. "-" is in the OpenAPI key alphabet, needs no JSON Pointer or URI
735
+ // escaping, and carries no such meaning.
736
+ const metadataCollection_openApiNameSuffix = "-x"
737
+
738
+ func metadataCollection_writeOpenApiNameRune(builder *strings.Builder, ch rune) bool {
739
+ if metadataCollection_isOpenApiNameRune(ch) {
740
+ builder.WriteRune(ch)
741
+ return false
742
+ }
743
+ metadataCollection_writeOpenApiEscapedRune(builder, ch)
744
+ return true
745
+ }
746
+
747
+ // metadataCollection_writeOpenApiQuotedRune writes one rune of a quoted literal
748
+ // type argument, such as the `A.B` of `Recursive<"A.B">`.
749
+ //
750
+ // A dot inside a quote is literal content, never the namespace boundary a
751
+ // component key's dot denotes, so it is escaped like every other rune the key
752
+ // alphabet cannot carry unaltered. Escaping is also what keeps the rewrite
753
+ // injective: an escaped name earns the disambiguating hash of its original
754
+ // text, so `Recursive<"A.B">` can neither collide with the `Recursive<"A-B">`
755
+ // that `metadataCollection_qualifySeparator` would otherwise have shared, nor
756
+ // squat the name `Recursive<"A_x2E_B">` legally owns.
757
+ func metadataCollection_writeOpenApiQuotedRune(builder *strings.Builder, ch rune) bool {
758
+ if ch == '.' {
759
+ metadataCollection_writeOpenApiEscapedRune(builder, ch)
760
+ return true
761
+ }
762
+ return metadataCollection_writeOpenApiNameRune(builder, ch)
763
+ }
764
+
765
+ func metadataCollection_writeOpenApiEscapedRune(builder *strings.Builder, ch rune) {
766
+ builder.WriteString("_x")
767
+ builder.WriteString(strings.ToUpper(strconv.FormatInt(int64(ch), 16)))
768
+ builder.WriteByte('_')
769
+ }
770
+
771
+ func metadataCollection_openApiNameHash(str string) string {
772
+ hasher := fnv.New64a()
773
+ _, _ = hasher.Write([]byte(str))
774
+ encoded := strings.ToUpper(strconv.FormatUint(hasher.Sum64(), 16))
775
+ return strings.Repeat("0", 16-len(encoded)) + encoded
776
+ }
777
+
778
+ func metadataCollection_isOpenApiNameRune(ch rune) bool {
779
+ return (ch >= 'a' && ch <= 'z') ||
780
+ (ch >= 'A' && ch <= 'Z') ||
781
+ (ch >= '0' && ch <= '9') ||
782
+ ch == '.' ||
783
+ ch == '-' ||
784
+ ch == '_'
785
+ }
786
+
537
787
  func MetadataCollection_escape(str string) string {
538
788
  for _, pair := range metadataCollection_replacers {
539
789
  if pair.After != "" {