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
@@ -79,11 +79,12 @@ type UnionExplorer_ObjectProps struct {
79
79
  }
80
80
 
81
81
  type UnionExplorer_ArrayLikeConfig struct {
82
- Checker func(props UnionExplorer_ArrayLikeCheckerProps) *shimast.Node
83
- Decoder func(props UnionExplorer_ArrayLikeDecoderProps) *shimast.Node
84
- Empty *shimast.Node
85
- Success *shimast.Expression
86
- Failure func(props UnionExplorer_ArrayLikeFailureProps) *shimast.Node
82
+ Checker func(props UnionExplorer_ArrayLikeCheckerProps) *shimast.Node
83
+ Candidate func(props UnionExplorer_ArrayLikeCandidateProps) *shimast.Node
84
+ Decoder func(props UnionExplorer_ArrayLikeDecoderProps) *shimast.Node
85
+ Empty *shimast.Node
86
+ Success *shimast.Expression
87
+ Failure func(props UnionExplorer_ArrayLikeFailureProps) *shimast.Node
87
88
  }
88
89
 
89
90
  type UnionExplorer_ArrayLikeCheckerProps struct {
@@ -99,6 +100,12 @@ type UnionExplorer_ArrayLikeDecoderProps struct {
99
100
  Explore any
100
101
  }
101
102
 
103
+ type UnionExplorer_ArrayLikeCandidateProps struct {
104
+ Input *shimast.Expression
105
+ Definition any
106
+ Explore any
107
+ }
108
+
102
109
  type UnionExplorer_ArrayLikeFailureProps struct {
103
110
  Input *shimast.Expression
104
111
  Expected string
@@ -622,46 +629,69 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
622
629
  inputType = nativefactories.TypeFactory.Keyword("any", props.Emit)
623
630
  postfix = "\"[0]\""
624
631
  }
625
- return f.NewAsExpression(
626
- f.NewArrayLiteralExpression(
632
+ entries := []*shimast.Node{
633
+ f.NewArrowFunction(
634
+ nil,
635
+ nil,
627
636
  f.NewNodeList([]*shimast.Node{
628
- f.NewArrowFunction(
629
- nil,
630
- nil,
631
- f.NewNodeList([]*shimast.Node{
632
- nativefactories.IdentifierFactory.Parameter("top", inputType, nil, props.Emit),
633
- }),
634
- nativefactories.TypeFactory.Keyword("any", props.Emit),
637
+ nativefactories.IdentifierFactory.Parameter("top", inputType, nil, props.Emit),
638
+ }),
639
+ nativefactories.TypeFactory.Keyword("any", props.Emit),
640
+ nil,
641
+ f.NewToken(shimast.KindEqualsGreaterThanToken),
642
+ props.Config.Checker(UnionExplorer_ArrayLikeCheckerProps{
643
+ Input: f.NewIdentifier("top"),
644
+ Definition: props.Accessor.Element(meta),
645
+ Explore: unionExplorer_with_postfix(props.Explore, false, postfix),
646
+ Container: array,
647
+ }),
648
+ ),
649
+ f.NewArrowFunction(
650
+ nil,
651
+ nil,
652
+ f.NewNodeList([]*shimast.Node{
653
+ nativefactories.IdentifierFactory.Parameter(
654
+ "entire",
655
+ f.NewTypeReferenceNode(f.NewIdentifier("any[]"), nil),
635
656
  nil,
636
- f.NewToken(shimast.KindEqualsGreaterThanToken),
637
- props.Config.Checker(UnionExplorer_ArrayLikeCheckerProps{
638
- Input: f.NewIdentifier("top"),
639
- Definition: props.Accessor.Element(meta),
640
- Explore: unionExplorer_with_postfix(props.Explore, false, postfix),
641
- Container: array,
642
- }),
657
+ props.Emit,
643
658
  ),
644
- f.NewArrowFunction(
645
- nil,
646
- nil,
647
- f.NewNodeList([]*shimast.Node{
648
- nativefactories.IdentifierFactory.Parameter(
649
- "entire",
650
- f.NewTypeReferenceNode(f.NewIdentifier("any[]"), nil),
651
- nil,
652
- props.Emit,
653
- ),
654
- }),
655
- nativefactories.TypeFactory.Keyword("any", props.Emit),
659
+ }),
660
+ nativefactories.TypeFactory.Keyword("any", props.Emit),
661
+ nil,
662
+ f.NewToken(shimast.KindEqualsGreaterThanToken),
663
+ props.Config.Decoder(UnionExplorer_ArrayLikeDecoderProps{
664
+ Input: f.NewIdentifier("entire"),
665
+ Definition: meta,
666
+ Explore: unionExplorer_with_tracable(props.Explore, true),
667
+ }),
668
+ ),
669
+ }
670
+ if props.Config.Candidate != nil {
671
+ entries = append(entries, f.NewArrowFunction(
672
+ nil,
673
+ nil,
674
+ f.NewNodeList([]*shimast.Node{
675
+ nativefactories.IdentifierFactory.Parameter(
676
+ "entire",
677
+ f.NewTypeReferenceNode(f.NewIdentifier("any[]"), nil),
656
678
  nil,
657
- f.NewToken(shimast.KindEqualsGreaterThanToken),
658
- props.Config.Decoder(UnionExplorer_ArrayLikeDecoderProps{
659
- Input: f.NewIdentifier("entire"),
660
- Definition: meta,
661
- Explore: unionExplorer_with_tracable(props.Explore, true),
662
- }),
679
+ props.Emit,
663
680
  ),
664
681
  }),
682
+ nativefactories.TypeFactory.Keyword("boolean", props.Emit),
683
+ nil,
684
+ f.NewToken(shimast.KindEqualsGreaterThanToken),
685
+ props.Config.Candidate(UnionExplorer_ArrayLikeCandidateProps{
686
+ Input: f.NewIdentifier("entire"),
687
+ Definition: meta,
688
+ Explore: unionExplorer_with_tracable(props.Explore, false),
689
+ }),
690
+ ))
691
+ }
692
+ return f.NewAsExpression(
693
+ f.NewArrayLiteralExpression(
694
+ f.NewNodeList(entries),
665
695
  true,
666
696
  ),
667
697
  f.NewTypeReferenceNode(f.NewIdentifier("const"), nil),
@@ -709,12 +739,17 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
709
739
  "pred",
710
740
  f.NewIdentifier("tuplePredicators"),
711
741
  f.NewIfStatement(
712
- f.NewCallExpression(
713
- f.NewIdentifier("pred[0]"),
714
- nil,
715
- nil,
716
- f.NewNodeList([]*shimast.Node{array}),
717
- shimast.NodeFlagsNone,
742
+ unionExplorer_array_candidate_condition(
743
+ f.NewCallExpression(
744
+ f.NewIdentifier("pred[0]"),
745
+ nil,
746
+ nil,
747
+ f.NewNodeList([]*shimast.Node{array}),
748
+ shimast.NodeFlagsNone,
749
+ ),
750
+ props.Config.Candidate != nil,
751
+ array,
752
+ props.Emit,
718
753
  ),
719
754
  f.NewReturnStatement(
720
755
  f.NewCallExpression(
@@ -741,12 +776,12 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
741
776
  for _, x := range arrayList {
742
777
  arrayPredicates = append(arrayPredicates, predicate(x))
743
778
  }
744
- statements = append(statements,
745
- nativefactories.StatementFactory.Constant(nativefactories.StatementFactory_ConstantProps{
746
- Name: "top",
747
- Value: props.Accessor.Front(props.Input),
748
- }, props.Emit),
749
- f.NewIfStatement(
779
+ statements = append(statements, nativefactories.StatementFactory.Constant(nativefactories.StatementFactory_ConstantProps{
780
+ Name: "top",
781
+ Value: props.Accessor.Front(props.Input),
782
+ }, props.Emit))
783
+ if props.Config.Candidate == nil {
784
+ statements = append(statements, f.NewIfStatement(
750
785
  f.NewBinaryExpression(
751
786
  nil,
752
787
  nativefactories.ExpressionFactory.Number(0, props.Emit),
@@ -756,7 +791,9 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
756
791
  ),
757
792
  unionExplorer_return_or_statement(props.Config.Empty, props.Emit),
758
793
  nil,
759
- ),
794
+ ))
795
+ }
796
+ statements = append(statements,
760
797
  nativefactories.StatementFactory.Constant(nativefactories.StatementFactory_ConstantProps{
761
798
  Name: "arrayPredicators",
762
799
  Value: f.NewArrayLiteralExpression(
@@ -780,19 +817,37 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
780
817
  nil,
781
818
  nil,
782
819
  f.NewToken(shimast.KindEqualsGreaterThanToken),
783
- f.NewCallExpression(
784
- f.NewIdentifier("pred[0]"),
785
- nil,
786
- nil,
787
- f.NewNodeList([]*shimast.Node{top}),
788
- shimast.NodeFlagsNone,
789
- ),
820
+ func() *shimast.Node {
821
+ element := f.NewCallExpression(
822
+ f.NewIdentifier("pred[0]"),
823
+ nil,
824
+ nil,
825
+ f.NewNodeList([]*shimast.Node{top}),
826
+ shimast.NodeFlagsNone,
827
+ )
828
+ if props.Config.Candidate == nil {
829
+ return element
830
+ }
831
+ return f.NewBinaryExpression(
832
+ nil,
833
+ f.NewBinaryExpression(
834
+ nil,
835
+ nativefactories.ExpressionFactory.Number(0, props.Emit),
836
+ nil,
837
+ f.NewToken(shimast.KindEqualsEqualsEqualsToken),
838
+ props.Accessor.Size(props.Input),
839
+ ),
840
+ nil,
841
+ f.NewToken(shimast.KindBarBarToken),
842
+ element,
843
+ )
844
+ }(),
790
845
  ),
791
846
  }),
792
847
  shimast.NodeFlagsNone,
793
848
  ),
794
849
  }, props.Emit),
795
- unionExplorer_array_if(iterate, array, top, props.Config.Success, props.Emit),
850
+ unionExplorer_array_if(iterate, array, top, props.Config.Success, props.Config.Candidate != nil, props.Emit),
796
851
  )
797
852
  }
798
853
  names := make([]string, 0, len(targets))
@@ -819,8 +874,75 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
819
874
  )
820
875
  }
821
876
 
822
- func unionExplorer_array_if(iterate func(init string, from *shimast.Expression, ifStatement *shimast.Node) *shimast.Node, array *shimast.Node, top *shimast.Node, success *shimast.Expression, emit ...*shimprinter.EmitContext) *shimast.Node {
877
+ func unionExplorer_array_if(iterate func(init string, from *shimast.Expression, ifStatement *shimast.Node) *shimast.Node, array *shimast.Node, top *shimast.Node, success *shimast.Expression, candidate bool, emit ...*shimprinter.EmitContext) *shimast.Node {
823
878
  f := nativecontext.EmitFactoryOf(unionExplorer_factory, emit...)
879
+ if candidate {
880
+ elementCondition := f.NewCallExpression(
881
+ nativefactories.IdentifierFactory.Access(nil, array, "every"),
882
+ nil,
883
+ nil,
884
+ f.NewNodeList([]*shimast.Node{
885
+ f.NewArrowFunction(
886
+ nil,
887
+ nil,
888
+ f.NewNodeList([]*shimast.Node{
889
+ nativefactories.IdentifierFactory.Parameter("value", nativefactories.TypeFactory.Keyword("any", emit...), nil, emit...),
890
+ }),
891
+ nil,
892
+ nil,
893
+ f.NewToken(shimast.KindEqualsGreaterThanToken),
894
+ f.NewBinaryExpression(
895
+ nil,
896
+ success,
897
+ nil,
898
+ f.NewToken(shimast.KindEqualsEqualsEqualsToken),
899
+ f.NewCallExpression(
900
+ f.NewIdentifier("pred[0]"),
901
+ nil,
902
+ nil,
903
+ f.NewNodeList([]*shimast.Node{f.NewIdentifier("value")}),
904
+ shimast.NodeFlagsNone,
905
+ ),
906
+ ),
907
+ ),
908
+ }),
909
+ shimast.NodeFlagsNone,
910
+ )
911
+ return f.NewBlock(f.NewNodeList([]*shimast.Node{
912
+ iterate(
913
+ "pred",
914
+ f.NewIdentifier("passed"),
915
+ f.NewIfStatement(
916
+ unionExplorer_array_candidate_condition(elementCondition, true, array, emit...),
917
+ f.NewReturnStatement(f.NewCallExpression(
918
+ f.NewIdentifier("pred[1]"),
919
+ nil,
920
+ nil,
921
+ f.NewNodeList([]*shimast.Node{array}),
922
+ shimast.NodeFlagsNone,
923
+ )),
924
+ nil,
925
+ ),
926
+ ),
927
+ f.NewIfStatement(
928
+ f.NewBinaryExpression(
929
+ nil,
930
+ nativefactories.ExpressionFactory.Number(0, emit...),
931
+ nil,
932
+ f.NewToken(shimast.KindLessThanToken),
933
+ f.NewIdentifier("passed.length"),
934
+ ),
935
+ f.NewReturnStatement(f.NewCallExpression(
936
+ f.NewIdentifier("passed[0][1]"),
937
+ nil,
938
+ nil,
939
+ f.NewNodeList([]*shimast.Node{array}),
940
+ shimast.NodeFlagsNone,
941
+ )),
942
+ nil,
943
+ ),
944
+ }), true)
945
+ }
824
946
  return f.NewIfStatement(
825
947
  f.NewBinaryExpression(
826
948
  nil,
@@ -910,6 +1032,26 @@ func unionExplorer_array_if(iterate func(init string, from *shimast.Expression,
910
1032
  )
911
1033
  }
912
1034
 
1035
+ func unionExplorer_array_candidate_condition(element *shimast.Node, candidate bool, array *shimast.Node, emit ...*shimprinter.EmitContext) *shimast.Node {
1036
+ if candidate == false {
1037
+ return element
1038
+ }
1039
+ f := nativecontext.EmitFactoryOf(unionExplorer_factory, emit...)
1040
+ return f.NewBinaryExpression(
1041
+ nil,
1042
+ f.NewCallExpression(
1043
+ f.NewIdentifier("pred[2]"),
1044
+ nil,
1045
+ nil,
1046
+ f.NewNodeList([]*shimast.Node{array}),
1047
+ shimast.NodeFlagsNone,
1048
+ ),
1049
+ nil,
1050
+ f.NewToken(shimast.KindAmpersandAmpersandToken),
1051
+ element,
1052
+ )
1053
+ }
1054
+
913
1055
  func unionExplorer_return_or_statement(node *shimast.Node, emit ...*shimprinter.EmitContext) *shimast.Node {
914
1056
  f := nativecontext.EmitFactoryOf(unionExplorer_factory, emit...)
915
1057
  if node == nil || node.Kind == shimast.KindReturnStatement {
@@ -52,9 +52,11 @@ func TestJoinerBranchCoverage(t *testing.T) {
52
52
  t.Fatal("clone joiner returned nil")
53
53
  }
54
54
  if NotationJoiner.Object(NotationJoiner_ObjectProps{
55
- Rename: func(str string) string { return str },
56
- Input: input,
57
- Entries: entries,
55
+ Rename: func(str string) string { return str },
56
+ DynamicRename: func() *shimast.Node { return factory.NewIdentifier("rename") },
57
+ DynamicAssign: func() *shimast.Node { return factory.NewIdentifier("assign") },
58
+ Input: input,
59
+ Entries: entries,
58
60
  }) == nil ||
59
61
  NotationJoiner.Tuple(NotationJoiner_TupleProps{Elements: []*shimast.Expression{value}, Rest: input}) == nil ||
60
62
  NotationJoiner.Array(NotationJoiner_ArrayProps{Input: input, Arrow: value}) == nil {
@@ -91,7 +91,7 @@ func TestUnionExplorerCoverage(t *testing.T) {
91
91
  if unionExplorer_array_if(func(init string, from *shimast.Expression, ifStatement *shimast.Node) *shimast.Node {
92
92
  iterated = init == "pred" && from != nil && ifStatement != nil
93
93
  return ifStatement
94
- }, input, input, factory.NewKeywordExpression(shimast.KindTrueKeyword)) == nil || !iterated {
94
+ }, input, input, factory.NewKeywordExpression(shimast.KindTrueKeyword), false) == nil || !iterated {
95
95
  t.Fatal("array disambiguation helper did not invoke iterator")
96
96
  }
97
97
  if unionExplorer_return_or_statement(input) == nil ||
@@ -826,21 +826,27 @@ func (checkerProgrammerNamespace) Decode(props CheckerProgrammer_DecodeProps) *s
826
826
  body = checkerProgrammer_explore_tuples(checkerProgrammer_exploreTuplesProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Tuples: props.Metadata.Tuples, Input: props.Input, Explore: explore})
827
827
  }
828
828
  } else if checkerProgrammer_array_any(props.Metadata.Arrays) {
829
- // Any-element arrays need no element exploration, but a sole array's
830
- // validating wrapper tags (MinItems, custom predicates, ...) still
831
- // constrain the container and survive on the entry conditions. Unions
832
- // mixing a tag-constrained any-element array with other array-like
833
- // variants keep the historical wholesale acceptance: the union
834
- // explorer discriminates by element checks, which an any element
835
- // satisfies trivially, so honoring those tags needs branch
836
- // backtracking (tracked on #1933).
837
- body = nil
829
+ // A sole any-element array only needs its wrapper predicates. In a
830
+ // union, however, those predicates participate in branch selection:
831
+ // a failed tagged-any candidate must backtrack to a concrete array or
832
+ // tuple candidate instead of accepting or rejecting the whole bucket.
838
833
  if len(props.Metadata.Arrays) == 1 && len(props.Metadata.Tuples) == 0 {
834
+ body = nil
839
835
  conditions = nativeiterate.Check_array_length(nativeiterate.Check_array_lengthProps{
840
836
  Context: props.Context,
841
837
  Array: props.Metadata.Arrays[0],
842
838
  Input: props.Input,
843
839
  }).Conditions
840
+ } else if checkerProgrammer_has_array_type_tags(props.Metadata.Arrays) {
841
+ explore := props.Explore
842
+ explore.From = "array"
843
+ if len(props.Metadata.Tuples) == 0 {
844
+ body = checkerProgrammer_explore_arrays(checkerProgrammer_exploreArraysProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Arrays: props.Metadata.Arrays, Input: props.Input, Explore: explore})
845
+ } else {
846
+ body = checkerProgrammer_explore_arrays_and_tuples(checkerProgrammer_exploreArraysAndTuplesProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Definitions: checkerProgrammer_array_tuple_definitions(props.Metadata.Arrays, props.Metadata.Tuples), Input: props.Input, Explore: explore})
847
+ }
848
+ } else {
849
+ body = nil
844
850
  }
845
851
  } else if len(props.Metadata.Tuples) == 0 {
846
852
  explore := props.Explore
@@ -1540,14 +1546,18 @@ func checkerProgrammer_explore_arrays(props checkerProgrammer_exploreArraysProps
1540
1546
  for _, value := range next.Definitions {
1541
1547
  arrays = append(arrays, value.(*nativemetadata.MetadataArray))
1542
1548
  }
1549
+ config := checkerProgrammer_array_like_config(props.Context, props.Config, props.Functor,
1550
+ func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1551
+ return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Metadata: v.Definition.(*nativemetadata.MetadataSchema), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)})
1552
+ },
1553
+ func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1554
+ return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Array: v.Definition.(*nativemetadata.MetadataArray), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)})
1555
+ })
1556
+ if checkerProgrammer_has_array_type_tags(arrays) {
1557
+ config.Candidate = checkerProgrammer_array_tag_candidate(props.Context)
1558
+ }
1543
1559
  return nativehelpers.UnionExplorer.Array(nativehelpers.UnionExplorer_ArrayProps{
1544
- Config: checkerProgrammer_array_like_config(props.Context, props.Config, props.Functor,
1545
- func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1546
- return CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Metadata: v.Definition.(*nativemetadata.MetadataSchema), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)})
1547
- },
1548
- func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1549
- return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Array: v.Definition.(*nativemetadata.MetadataArray), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)})
1550
- }),
1560
+ Config: config,
1551
1561
  Parameters: next.Parameters,
1552
1562
  Arrays: arrays,
1553
1563
  Input: next.Input,
@@ -1562,37 +1572,41 @@ func checkerProgrammer_explore_arrays_and_tuples(props checkerProgrammer_explore
1562
1572
  return checkerProgrammer_explore_array_like_union_types(checkerProgrammer_exploreArrayLikeUnionTypesProps{
1563
1573
  Config: props.Config, Functor: props.Functor, Definitions: props.Definitions, Input: props.Input, Explore: props.Explore, Emit: props.Context.Emit,
1564
1574
  Factory: func(next checkerProgrammer_exploreArrayLikeUnionTypesFactoryProps) *shimast.Node {
1565
- return nativehelpers.UnionExplorer.Array_or_tuple(nativehelpers.UnionExplorer_ArrayOrTupleProps{
1566
- Config: checkerProgrammer_array_like_config(props.Context, props.Config, props.Functor,
1567
- func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1568
- if tuple, ok := v.Definition.(*nativemetadata.MetadataTuple); ok {
1569
- return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Input: v.Input, Tuple: tuple, Explore: featureProgrammer_as_explore(v.Explore)})
1570
- }
1571
- expected := []string{}
1572
- for _, elem := range props.Definitions {
1573
- switch x := elem.(type) {
1574
- case *nativemetadata.MetadataArray:
1575
- expected = append(expected, x.GetDisplayName())
1576
- case *nativemetadata.MetadataTuple:
1577
- expected = append(expected, x.Type.GetDisplayName())
1578
- }
1579
- }
1580
- return props.Config.Atomist(CheckerProgrammer_AtomistProps{
1581
- Explore: featureProgrammer_as_explore(v.Explore),
1582
- Entry: nativehelpers.ICheckEntry{
1583
- Expected: strings.Join(expected, " | "),
1584
- Expression: CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{Functor: props.Functor, Context: props.Context, Config: props.Config, Metadata: v.Definition.(*nativemetadata.MetadataSchema), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)}),
1585
- Conditions: [][]nativehelpers.ICheckEntry_ICondition{},
1586
- },
1587
- Input: v.Container,
1588
- })
1589
- },
1590
- func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1591
- if tuple, ok := v.Definition.(*nativemetadata.MetadataTuple); ok {
1592
- return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Input: v.Input, Tuple: tuple, Explore: featureProgrammer_as_explore(v.Explore)})
1575
+ config := checkerProgrammer_array_like_config(props.Context, props.Config, props.Functor,
1576
+ func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node {
1577
+ if tuple, ok := v.Definition.(*nativemetadata.MetadataTuple); ok {
1578
+ return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Config: props.Config, Context: props.Context, Functor: props.Functor, Input: v.Input, Tuple: tuple, Explore: featureProgrammer_as_explore(v.Explore)})
1579
+ }
1580
+ expected := []string{}
1581
+ for _, elem := range props.Definitions {
1582
+ switch x := elem.(type) {
1583
+ case *nativemetadata.MetadataArray:
1584
+ expected = append(expected, x.GetDisplayName())
1585
+ case *nativemetadata.MetadataTuple:
1586
+ expected = append(expected, x.Type.GetDisplayName())
1593
1587
  }
1594
- return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Input: v.Input, Array: v.Definition.(*nativemetadata.MetadataArray), Explore: featureProgrammer_as_explore(v.Explore)})
1595
- }),
1588
+ }
1589
+ return props.Config.Atomist(CheckerProgrammer_AtomistProps{
1590
+ Explore: featureProgrammer_as_explore(v.Explore),
1591
+ Entry: nativehelpers.ICheckEntry{
1592
+ Expected: strings.Join(expected, " | "),
1593
+ Expression: CheckerProgrammer.Decode(CheckerProgrammer_DecodeProps{Functor: props.Functor, Context: props.Context, Config: props.Config, Metadata: v.Definition.(*nativemetadata.MetadataSchema), Input: v.Input, Explore: featureProgrammer_as_explore(v.Explore)}),
1594
+ Conditions: [][]nativehelpers.ICheckEntry_ICondition{},
1595
+ },
1596
+ Input: v.Container,
1597
+ })
1598
+ },
1599
+ func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node {
1600
+ if tuple, ok := v.Definition.(*nativemetadata.MetadataTuple); ok {
1601
+ return checkerProgrammer_decode_tuple(checkerProgrammer_decodeTupleProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Input: v.Input, Tuple: tuple, Explore: featureProgrammer_as_explore(v.Explore)})
1602
+ }
1603
+ return checkerProgrammer_decode_array(checkerProgrammer_decodeArrayProps{Context: props.Context, Config: props.Config, Functor: props.Functor, Input: v.Input, Array: v.Definition.(*nativemetadata.MetadataArray), Explore: featureProgrammer_as_explore(v.Explore)})
1604
+ })
1605
+ if checkerProgrammer_definitions_have_array_type_tags(next.Definitions) {
1606
+ config.Candidate = checkerProgrammer_array_tag_candidate(props.Context)
1607
+ }
1608
+ return nativehelpers.UnionExplorer.Array_or_tuple(nativehelpers.UnionExplorer_ArrayOrTupleProps{
1609
+ Config: config,
1596
1610
  Parameters: next.Parameters,
1597
1611
  Definitions: next.Definitions,
1598
1612
  Input: next.Input,
@@ -1785,7 +1799,7 @@ func checkerProgrammer_check_object_reference(props checkerProgrammer_decodeObje
1785
1799
  }
1786
1800
  return checkerProgrammer_and(
1787
1801
  decoded,
1788
- checkerProgrammer_object_type_tags_condition(tags, props.Context.Emit),
1802
+ checkerProgrammer_entry_condition(tags, props.Context.Emit),
1789
1803
  props.Context.Emit,
1790
1804
  )
1791
1805
  }
@@ -1819,7 +1833,7 @@ func checkerProgrammer_decode_object_reference(props checkerProgrammer_decodeObj
1819
1833
  )
1820
1834
  }
1821
1835
 
1822
- func checkerProgrammer_object_type_tags_condition(entry nativehelpers.ICheckEntry, emit *shimprinter.EmitContext) *shimast.Node {
1836
+ func checkerProgrammer_entry_condition(entry nativehelpers.ICheckEntry, emit *shimprinter.EmitContext) *shimast.Node {
1823
1837
  f := nativecontext.EmitFactoryOf(checkerProgrammer_factory, emit)
1824
1838
  expressions := []*shimast.Node{}
1825
1839
  if entry.Expression != nil {
@@ -1852,6 +1866,44 @@ func checkerProgrammer_has_object_type_tags(objects []*nativemetadata.MetadataOb
1852
1866
  return false
1853
1867
  }
1854
1868
 
1869
+ func checkerProgrammer_has_array_type_tags(arrays []*nativemetadata.MetadataArray) bool {
1870
+ for _, array := range arrays {
1871
+ for _, row := range array.Tags {
1872
+ for _, tag := range row {
1873
+ if tag.Validate != "" {
1874
+ return true
1875
+ }
1876
+ }
1877
+ }
1878
+ }
1879
+ return false
1880
+ }
1881
+
1882
+ func checkerProgrammer_definitions_have_array_type_tags(definitions []any) bool {
1883
+ arrays := []*nativemetadata.MetadataArray{}
1884
+ for _, definition := range definitions {
1885
+ if array, ok := definition.(*nativemetadata.MetadataArray); ok {
1886
+ arrays = append(arrays, array)
1887
+ }
1888
+ }
1889
+ return checkerProgrammer_has_array_type_tags(arrays)
1890
+ }
1891
+
1892
+ func checkerProgrammer_array_tag_candidate(context nativecontext.ITypiaContext) func(nativehelpers.UnionExplorer_ArrayLikeCandidateProps) *shimast.Node {
1893
+ f := nativecontext.EmitFactoryOf(checkerProgrammer_factory, context.Emit)
1894
+ return func(props nativehelpers.UnionExplorer_ArrayLikeCandidateProps) *shimast.Node {
1895
+ array, ok := props.Definition.(*nativemetadata.MetadataArray)
1896
+ if ok == false {
1897
+ return f.NewKeywordExpression(shimast.KindTrueKeyword)
1898
+ }
1899
+ return checkerProgrammer_entry_condition(nativeiterate.Check_array_length(nativeiterate.Check_array_lengthProps{
1900
+ Context: context,
1901
+ Array: array,
1902
+ Input: props.Input,
1903
+ }), context.Emit)
1904
+ }
1905
+ }
1906
+
1855
1907
  func checkerProgrammer_array_like_config(context nativecontext.ITypiaContext, config CheckerProgrammer_IConfig, functor *nativehelpers.FunctionProgrammer, checker func(v nativehelpers.UnionExplorer_ArrayLikeCheckerProps) *shimast.Node, decoder func(v nativehelpers.UnionExplorer_ArrayLikeDecoderProps) *shimast.Node) nativehelpers.UnionExplorer_ArrayLikeConfig {
1856
1908
  f := nativecontext.EmitFactoryOf(checkerProgrammer_factory, context.Emit)
1857
1909
  return nativehelpers.UnionExplorer_ArrayLikeConfig{