typia 13.1.0 → 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 (516) 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 +134 -7
  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/js_doc_link_text_test.go +69 -0
  368. package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
  369. package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
  370. package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
  371. package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
  372. package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
  373. package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
  374. package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
  375. package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
  376. package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
  377. package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
  378. package/native/core/programmers/IsProgrammer.go +15 -1
  379. package/native/core/programmers/RandomProgrammer.go +51 -14
  380. package/native/core/programmers/compare/CompareEqualProgrammer.go +393 -5
  381. package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
  382. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
  383. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
  384. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
  385. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
  386. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
  387. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
  388. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
  389. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
  390. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
  391. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
  392. package/native/core/programmers/helpers/CloneJoiner.go +32 -0
  393. package/native/core/programmers/helpers/NotationJoiner.go +86 -28
  394. package/native/core/programmers/helpers/StringifyJoinder.go +32 -1
  395. package/native/core/programmers/helpers/UnionExplorer.go +203 -61
  396. package/native/core/programmers/helpers/joiner_branch_coverage_test.go +5 -3
  397. package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
  398. package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
  399. package/native/core/programmers/iterate/check_template.go +344 -32
  400. package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
  401. package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
  402. package/native/core/programmers/iterate/openapi_v3_downgrader.go +641 -0
  403. package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
  404. package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
  405. package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
  406. package/native/core/programmers/iterate/template_runtime_pattern.go +52 -7
  407. package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
  408. package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
  409. package/native/core/programmers/llm/LlmApplicationProgrammer.go +12 -10
  410. package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
  411. package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
  412. package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
  413. package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
  414. package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
  415. package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
  416. package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
  417. package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
  418. package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
  419. package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
  420. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
  421. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +40 -21
  422. package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
  423. package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
  424. package/native/core/schemas/metadata/MetadataCollection.go +270 -20
  425. package/native/core/schemas/metadata/MetadataDependency.go +388 -0
  426. package/native/core/schemas/metadata/MetadataObjectType.go +17 -4
  427. package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
  428. package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
  429. package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
  430. package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
  431. package/native/core/utils/PatternUtil.go +13 -0
  432. package/native/core/utils/PromiseTypeFactory.go +59 -0
  433. package/native/core/utils/ProtobufNameEncoder.go +8 -0
  434. package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
  435. package/native/go.mod +9 -1
  436. package/native/transform/CallExpressionTransformer.go +12 -0
  437. package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
  438. package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
  439. package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
  440. package/package.json +16 -4
  441. package/src/executable/FileSystemIdentity.ts +189 -0
  442. package/src/executable/TypiaGenerateWizard.ts +377 -110
  443. package/src/functional.ts +30 -60
  444. package/src/internal/_ProtobufReader.ts +129 -43
  445. package/src/internal/_createStandardSchema.ts +15 -1
  446. package/src/internal/_decimal.ts +69 -0
  447. package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
  448. package/src/internal/_isFormatByte.ts +2 -5
  449. package/src/internal/_isFormatDate.ts +15 -2
  450. package/src/internal/_isFormatDateTime.ts +28 -2
  451. package/src/internal/_isFormatIri.ts +5 -2
  452. package/src/internal/_isFormatIriReference.ts +11 -3
  453. package/src/internal/_isFormatUriReference.ts +1 -1
  454. package/src/internal/_isMultipleOf.ts +8 -0
  455. package/src/internal/_isTypeFloat.ts +1 -1
  456. package/src/internal/_isTypeInt64.ts +1 -0
  457. package/src/internal/_isTypeInt64Bigint.ts +12 -0
  458. package/src/internal/_isTypeUint64.ts +1 -0
  459. package/src/internal/_isTypeUint64Bigint.ts +7 -0
  460. package/src/internal/_isUniqueItems.ts +134 -132
  461. package/src/internal/_notationAny.ts +9 -4
  462. package/src/internal/_notationAssign.ts +20 -0
  463. package/src/internal/_notationCamel.ts +31 -10
  464. package/src/internal/_notationKebab.ts +11 -0
  465. package/src/internal/_notationKeyCollision.ts +9 -0
  466. package/src/internal/_notationPascal.ts +19 -6
  467. package/src/internal/_notationSnake.ts +24 -21
  468. package/src/internal/_plainCloneAny.ts +208 -33
  469. package/src/internal/_randomArray.ts +13 -4
  470. package/src/internal/_randomFormatByte.ts +4 -1
  471. package/src/internal/_randomFormatDate.ts +17 -12
  472. package/src/internal/_randomFormatDatetime.ts +15 -10
  473. package/src/internal/_randomFormatDuration.ts +16 -14
  474. package/src/internal/_randomFormatEmail.ts +8 -2
  475. package/src/internal/_randomFormatHostname.ts +48 -1
  476. package/src/internal/_randomFormatIdnEmail.ts +18 -2
  477. package/src/internal/_randomFormatIdnHostname.ts +34 -2
  478. package/src/internal/_randomFormatIpv4.ts +3 -2
  479. package/src/internal/_randomFormatIpv6.ts +3 -2
  480. package/src/internal/_randomFormatIri.ts +3 -1
  481. package/src/internal/_randomFormatIriReference.ts +3 -1
  482. package/src/internal/_randomFormatJsonPointer.ts +8 -2
  483. package/src/internal/_randomFormatPassword.ts +11 -6
  484. package/src/internal/_randomFormatRegex.ts +4 -1
  485. package/src/internal/_randomFormatRelativeJsonPointer.ts +13 -6
  486. package/src/internal/_randomFormatTime.ts +13 -10
  487. package/src/internal/_randomFormatUri.ts +3 -1
  488. package/src/internal/_randomFormatUriReference.ts +3 -1
  489. package/src/internal/_randomFormatUriTemplate.ts +3 -1
  490. package/src/internal/_randomFormatUrl.ts +25 -2
  491. package/src/internal/_randomFormatUuid.ts +10 -6
  492. package/src/internal/_randomInteger.ts +87 -40
  493. package/src/internal/_randomMultiple.ts +245 -0
  494. package/src/internal/_randomNumber.ts +72 -55
  495. package/src/internal/_randomPattern.ts +26 -4
  496. package/src/internal/_randomStringLength.ts +72 -0
  497. package/src/internal/_stringLength.ts +5 -0
  498. package/src/internal/_validateReport.ts +5 -1
  499. package/src/internal/private/__notationRename.ts +24 -0
  500. package/src/json.ts +2 -2
  501. package/src/module.ts +4 -6
  502. package/src/notations.ts +20 -4
  503. package/lib/internal/private/__notationCapitalize.d.ts +0 -1
  504. package/lib/internal/private/__notationCapitalize.js +0 -6
  505. package/lib/internal/private/__notationCapitalize.js.map +0 -1
  506. package/lib/internal/private/__notationCapitalize.mjs +0 -6
  507. package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
  508. package/lib/internal/private/__notationUnsnake.d.ts +0 -4
  509. package/lib/internal/private/__notationUnsnake.js +0 -26
  510. package/lib/internal/private/__notationUnsnake.js.map +0 -1
  511. package/lib/internal/private/__notationUnsnake.mjs +0 -15
  512. package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
  513. package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
  514. package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
  515. package/src/internal/private/__notationCapitalize.ts +0 -2
  516. package/src/internal/private/__notationUnsnake.ts +0 -24
@@ -0,0 +1,12 @@
1
+ export const _isTypeInt64Bigint = (value: bigint): boolean =>
2
+ MINIMUM <= value && value <= MAXIMUM;
3
+
4
+ // Unlike the `number` path, a `bigint` represents both bounds exactly, so this
5
+ // is the true inclusive int64 range rather than an exclusive approximation.
6
+ //
7
+ // The arguments must stay strings. `BigInt(9223372036854775807)` rounds its
8
+ // `number` literal to `2 ** 63` before `BigInt` ever sees it, which is the
9
+ // defect this helper exists to close; `BigInt("9223372036854775807")` parses
10
+ // the digits directly and is exact.
11
+ const MINIMUM = -BigInt("9223372036854775808");
12
+ const MAXIMUM = BigInt("9223372036854775807");
@@ -1,5 +1,6 @@
1
1
  export const _isTypeUint64 = (value: number): boolean =>
2
2
  Math.floor(value) === value && MINIMUM <= value && value <= MAXIMUM;
3
3
 
4
+ // The maximum is `2 ** 64 - 1`, the uint64 upper bound.
4
5
  const MINIMUM = 0;
5
6
  const MAXIMUM = 2 ** 64 - 1;
@@ -0,0 +1,7 @@
1
+ export const _isTypeUint64Bigint = (value: bigint): boolean =>
2
+ MINIMUM <= value && value <= MAXIMUM;
3
+
4
+ // See `_isTypeInt64Bigint`: the bound is exact only because the argument is a
5
+ // string, and `bigint` can represent the true inclusive maximum.
6
+ const MINIMUM = BigInt(0);
7
+ const MAXIMUM = BigInt("18446744073709551615");
@@ -1,12 +1,4 @@
1
1
  export const _isUniqueItems = (elements: any[]): boolean => {
2
- // EMPTY OR ONLY ONE
3
- if (elements.length < 2) return true;
4
-
5
- // SHALLOW COMPARISON
6
- if (["boolean", "bigint", "number", "string"].includes(typeof elements[0]))
7
- return new Set(elements).size === elements.length;
8
-
9
- // DEEP COMPARISON
10
2
  for (let i = 0; i < elements.length; i++)
11
3
  for (let j = i + 1; j < elements.length; j++)
12
4
  if (equals(new WeakMap())(elements[i], elements[j])) return false;
@@ -15,145 +7,155 @@ export const _isUniqueItems = (elements: any[]): boolean => {
15
7
 
16
8
  const equals = (visited: WeakMap<object, WeakMap<object, boolean>>) => {
17
9
  const next = (a: any, b: any): boolean => {
18
- // SHALLOW EQUAL
19
10
  if (a === b) return true;
20
- else if (typeof a !== typeof b || typeof a !== "object") return false;
21
- // COMPARE CONTAINERS
22
- else if (Array.isArray(a))
23
- return Array.isArray(b) && a.map((x, i) => next(x, b[i])).every((x) => x);
24
- else if (a instanceof Set)
11
+ if (
12
+ a === null ||
13
+ b === null ||
14
+ typeof a !== "object" ||
15
+ typeof b !== "object"
16
+ )
17
+ return false;
18
+
19
+ const previous: boolean | undefined = visited.get(a)?.get(b);
20
+ if (previous !== undefined) return previous;
21
+ const pairs: WeakMap<object, boolean> =
22
+ visited.get(a) ?? new WeakMap<object, boolean>();
23
+ visited.set(a, pairs);
24
+ pairs.set(b, true);
25
+
26
+ const result: boolean = compare(a, b);
27
+ pairs.set(b, result);
28
+ return result;
29
+ };
30
+
31
+ const compare = (a: object, b: object): boolean => {
32
+ if (Array.isArray(a)) {
33
+ if (!Array.isArray(b) || a.length !== b.length) return false;
34
+ for (let i = 0; i < a.length; i++) {
35
+ const aHas: boolean = Object.hasOwn(a, i);
36
+ if (aHas !== Object.hasOwn(b, i) || (aHas && !next(a[i], b[i])))
37
+ return false;
38
+ }
39
+ return true;
40
+ }
41
+ if (Array.isArray(b)) return false;
42
+
43
+ if (a instanceof Set) {
44
+ if (!(b instanceof Set) || a.size !== b.size) return false;
45
+ const unmatched: any[] = [...b];
46
+ for (const value of a) {
47
+ const index: number = unmatched.findIndex((candidate) =>
48
+ next(value, candidate),
49
+ );
50
+ if (index === -1) return false;
51
+ unmatched.splice(index, 1);
52
+ }
53
+ return true;
54
+ }
55
+ if (a instanceof Map) {
56
+ if (!(b instanceof Map) || a.size !== b.size) return false;
57
+ const unmatched: [any, any][] = [...b];
58
+ for (const [key, value] of a) {
59
+ const index: number = unmatched.findIndex(
60
+ ([candidateKey, candidateValue]) =>
61
+ next(key, candidateKey) && next(value, candidateValue),
62
+ );
63
+ if (index === -1) return false;
64
+ unmatched.splice(index, 1);
65
+ }
66
+ return true;
67
+ }
68
+
69
+ if (a instanceof Boolean)
70
+ return b instanceof Boolean && a.valueOf() === b.valueOf();
71
+ if (Object.prototype.toString.call(a) === "[object BigInt]")
25
72
  return (
26
- b instanceof Set && a.size === b.size && [...a].every((x) => b.has(x))
73
+ Object.prototype.toString.call(b) === "[object BigInt]" &&
74
+ a.valueOf() === b.valueOf()
27
75
  );
28
- else if (a instanceof Map)
76
+ if (Object.prototype.toString.call(a) === "[object Symbol]")
29
77
  return (
30
- b instanceof Map &&
31
- a.size === b.size &&
32
- [...a].every(([k, v]) => b.has(k) && next(v, b.get(k)))
78
+ Object.prototype.toString.call(b) === "[object Symbol]" &&
79
+ a.valueOf() === b.valueOf()
33
80
  );
34
- // ATOMIC CLASSES
35
- else if (a instanceof Boolean)
36
- return b instanceof Boolean
37
- ? a.valueOf() === b.valueOf()
38
- : a.valueOf() === b;
39
- else if (a instanceof BigInt)
40
- return b instanceof BigInt ? a === b : a === BigInt(b);
41
- else if (a instanceof Number)
42
- return b instanceof Number
43
- ? a.valueOf() === b.valueOf()
44
- : a.valueOf() === b;
45
- else if (a instanceof String)
46
- return b instanceof String
47
- ? a.valueOf() === b.valueOf()
48
- : a.valueOf() === b;
49
- else if (a instanceof Date)
81
+ if (a instanceof Number)
82
+ return b instanceof Number && a.valueOf() === b.valueOf();
83
+ if (a instanceof String)
84
+ return b instanceof String && a.valueOf() === b.valueOf();
85
+ if (a instanceof Date)
50
86
  return b instanceof Date && a.getTime() === b.getTime();
51
- // BINARY DATA
52
- else if (a instanceof Uint8Array)
87
+ if (a instanceof RegExp)
53
88
  return (
54
- b instanceof Uint8Array &&
55
- a.length === b.length &&
56
- a.every((x, i) => x === b[i])
89
+ b instanceof RegExp && a.source === b.source && a.flags === b.flags
57
90
  );
58
- else if (a instanceof Uint8ClampedArray)
59
- return (
60
- b instanceof Uint8ClampedArray &&
61
- a.length === b.length &&
62
- a.every((x, i) => x === b[i])
63
- );
64
- else if (a instanceof Uint16Array)
65
- return (
66
- b instanceof Uint16Array &&
67
- a.length === b.length &&
68
- a.every((x, i) => x === b[i])
69
- );
70
- else if (a instanceof Uint32Array)
71
- return (
72
- b instanceof Uint32Array &&
73
- a.length === b.length &&
74
- a.every((x, i) => x === b[i])
75
- );
76
- else if (a instanceof BigUint64Array)
77
- return (
78
- b instanceof BigUint64Array &&
79
- a.length === b.length &&
80
- a.every((x, i) => x === b[i])
81
- );
82
- else if (a instanceof Int8Array)
83
- return (
84
- b instanceof Int8Array &&
85
- a.length === b.length &&
86
- a.every((x, i) => x === b[i])
87
- );
88
- else if (a instanceof Int16Array)
89
- return (
90
- b instanceof Int16Array &&
91
- a.length === b.length &&
92
- a.every((x, i) => x === b[i])
93
- );
94
- else if (a instanceof Int32Array)
95
- return (
96
- b instanceof Int32Array &&
97
- a.length === b.length &&
98
- a.every((x, i) => x === b[i])
99
- );
100
- else if (a instanceof BigInt64Array)
101
- return (
102
- b instanceof BigInt64Array &&
103
- a.length === b.length &&
104
- a.every((x, i) => x === b[i])
105
- );
106
- else if (a instanceof Float32Array)
107
- return (
108
- b instanceof Float32Array &&
109
- a.length === b.length &&
110
- a.every((x, i) => x === b[i])
111
- );
112
- else if (a instanceof Float64Array)
113
- return (
114
- b instanceof Float64Array &&
115
- a.length === b.length &&
116
- a.every((x, i) => x === b[i])
117
- );
118
- else if (a instanceof ArrayBuffer) {
119
- if (!(b instanceof ArrayBuffer) || a.byteLength !== b.byteLength)
120
- return false;
121
- const x: Uint8Array = new Uint8Array(a);
122
- const y: Uint8Array = new Uint8Array(b);
123
- return x.every((v, i) => v === y[i]);
124
- } else if (a instanceof SharedArrayBuffer) {
125
- if (!(b instanceof SharedArrayBuffer) || a.byteLength !== b.byteLength)
126
- return false;
127
- const x: Uint8Array = new Uint8Array(a);
128
- const y: Uint8Array = new Uint8Array(b);
129
- return x.every((v, i) => v === y[i]);
130
- } else if (a instanceof DataView) {
131
- if (!(b instanceof DataView) || a.byteLength !== b.byteLength)
132
- return false;
133
- const x: Uint8Array = new Uint8Array(a.buffer);
134
- const y: Uint8Array = new Uint8Array(b.buffer);
135
- return x.every((v, i) => v === y[i]);
136
- } else if (a instanceof File)
91
+
92
+ if (typeof File !== "undefined" && a instanceof File)
137
93
  return (
138
94
  b instanceof File &&
139
95
  a.name === b.name &&
140
96
  a.size === b.size &&
141
97
  a.type === b.type &&
142
- next(a.slice(), b.slice())
98
+ a.lastModified === b.lastModified
143
99
  );
144
- // JUST PLAIN OBJECTS
145
- else if (a !== null && b !== null) {
146
- if (visited.has(a) && visited.get(a)!.has(b))
147
- return visited.get(a)!.get(b)!;
148
- if (!visited.has(a)) visited.set(a, new WeakMap());
149
- visited.get(a)!.set(b, true);
150
- const res: boolean =
151
- Object.keys(a).length === Object.keys(b).length &&
152
- Object.keys(a).every((x) => next(a[x], b[x]));
153
- visited.get(a)!.set(b, res);
154
- return res;
100
+ if (typeof Blob !== "undefined" && a instanceof Blob)
101
+ return b instanceof Blob && a.size === b.size && a.type === b.type;
102
+
103
+ if (a instanceof DataView) {
104
+ if (!(b instanceof DataView) || a.byteLength !== b.byteLength)
105
+ return false;
106
+ return bytes(a.buffer, a.byteOffset, a.byteLength).every(
107
+ (value, index) =>
108
+ value === bytes(b.buffer, b.byteOffset, b.byteLength)[index],
109
+ );
110
+ }
111
+ if (ArrayBuffer.isView(a)) {
112
+ if (
113
+ !ArrayBuffer.isView(b) ||
114
+ b instanceof DataView ||
115
+ Object.getPrototypeOf(a) !== Object.getPrototypeOf(b) ||
116
+ a.byteLength !== b.byteLength
117
+ )
118
+ return false;
119
+ const x: Uint8Array = bytes(a.buffer, a.byteOffset, a.byteLength);
120
+ const y: Uint8Array = bytes(b.buffer, b.byteOffset, b.byteLength);
121
+ return x.every((value, index) => value === y[index]);
155
122
  }
156
- return false;
123
+ if (a instanceof ArrayBuffer)
124
+ return (
125
+ b instanceof ArrayBuffer &&
126
+ a.byteLength === b.byteLength &&
127
+ bytes(a).every((value, index) => value === bytes(b)[index])
128
+ );
129
+ if (
130
+ typeof SharedArrayBuffer !== "undefined" &&
131
+ a instanceof SharedArrayBuffer
132
+ )
133
+ return (
134
+ b instanceof SharedArrayBuffer &&
135
+ a.byteLength === b.byteLength &&
136
+ bytes(a).every((value, index) => value === bytes(b)[index])
137
+ );
138
+
139
+ const keys: PropertyKey[] = Reflect.ownKeys(a).filter((key) =>
140
+ Object.prototype.propertyIsEnumerable.call(a, key),
141
+ );
142
+ return (
143
+ keys.length ===
144
+ Reflect.ownKeys(b).filter((key) =>
145
+ Object.prototype.propertyIsEnumerable.call(b, key),
146
+ ).length &&
147
+ keys.every(
148
+ (key) =>
149
+ Object.prototype.propertyIsEnumerable.call(b, key) &&
150
+ next((a as any)[key], (b as any)[key]),
151
+ )
152
+ );
157
153
  };
158
154
  return next;
159
155
  };
156
+
157
+ const bytes = (
158
+ buffer: ArrayBufferLike,
159
+ byteOffset: number = 0,
160
+ byteLength: number = buffer.byteLength,
161
+ ): Uint8Array => new Uint8Array(buffer, byteOffset, byteLength);
@@ -1,3 +1,5 @@
1
+ import { _notationAssign } from "./_notationAssign";
2
+
1
3
  export const _notationAny = (rename: (str: string) => string) => {
2
4
  const main = (input: any): any => {
3
5
  if (typeof input === "object")
@@ -29,9 +31,12 @@ export const _notationAny = (rename: (str: string) => string) => {
29
31
  else return object(input);
30
32
  return input;
31
33
  };
32
- const object = (input: Record<string, any>) =>
33
- Object.fromEntries(
34
- Object.entries(input).map(([key, value]) => [rename(key), main(value)]),
35
- );
34
+ const object = (input: Record<string, any>) => {
35
+ const output: Record<string, any> = {};
36
+ const sources: Record<string, string> = Object.create(null);
37
+ for (const [key, value] of Object.entries(input))
38
+ _notationAssign(output, sources, key, main(value), rename);
39
+ return output;
40
+ };
36
41
  return main;
37
42
  };
@@ -0,0 +1,20 @@
1
+ import { _notationKeyCollision } from "./_notationKeyCollision";
2
+
3
+ export const _notationAssign = (
4
+ output: Record<string, any>,
5
+ sources: Record<string, string>,
6
+ source: string,
7
+ value: any,
8
+ rename: (str: string) => string,
9
+ ): void => {
10
+ const destination: string = rename(source);
11
+ if (Object.hasOwn(output, destination))
12
+ _notationKeyCollision(sources[destination]!, source, destination);
13
+ Object.defineProperty(output, destination, {
14
+ configurable: true,
15
+ enumerable: true,
16
+ value,
17
+ writable: true,
18
+ });
19
+ sources[destination] = source;
20
+ };
@@ -1,13 +1,34 @@
1
- import { __notationCapitalize } from "./private/__notationCapitalize";
2
- import { __notationUnsnake } from "./private/__notationUnsnake";
1
+ import { __notationRename } from "./private/__notationRename";
3
2
 
4
- export const _notationCamel = __notationUnsnake({
3
+ const _notationCamelSnake = (str: string): string => {
4
+ while (str.startsWith("_")) str = str.substring(1);
5
+ if (str.length === 0) return "";
6
+ const index: number = str.indexOf("_");
7
+ if (index < 0) return str.toLowerCase();
8
+ const middle: string | undefined = str[index + 1];
9
+ // A trailing underscore has no character to uppercase, so `CamelizeSnakeString`
10
+ // falls through to lowercasing the whole key (`foo_` -> `foo_`).
11
+ if (middle === undefined) return str.toLowerCase();
12
+ // A doubled underscore collapses to a single one before continuing.
13
+ return middle === "_"
14
+ ? _notationCamelSnake(
15
+ `${str.substring(0, index)}_${str.substring(index + 2)}`,
16
+ )
17
+ : `${str
18
+ .substring(0, index)
19
+ .toLowerCase()}${middle.toUpperCase()}${_notationCamelSnake(
20
+ str.substring(index + 2),
21
+ )}`;
22
+ };
23
+
24
+ export const _notationCamel = __notationRename({
25
+ // `CamelCase<T>` lowercases an all-caps key and otherwise lowercases only the
26
+ // first character of an underscore-free key (`HTTP` -> `http`, `userID` stays).
5
27
  plain: (str) =>
6
- str.length
7
- ? str === str.toUpperCase()
8
- ? str.toLocaleLowerCase()
9
- : `${str[0]!.toLowerCase()}${str.substring(1)}`
10
- : str,
11
- snake: (str, i) =>
12
- i === 0 ? str.toLowerCase() : __notationCapitalize(str.toLowerCase()),
28
+ str === str.toUpperCase()
29
+ ? str.toLowerCase()
30
+ : `${str[0]!.toLowerCase()}${str.substring(1)}`,
31
+ // With an underscore present, the character after each underscore is
32
+ // uppercased and the rest lowercased, matching `CamelizeSnakeString`.
33
+ snake: _notationCamelSnake,
13
34
  });
@@ -0,0 +1,11 @@
1
+ import { _notationSnake } from "./_notationSnake";
2
+
3
+ export const _notationKebab = (str: string): string => {
4
+ let snaked: string = _notationSnake(str);
5
+ let prefix: string = "";
6
+ while (snaked.startsWith("_")) {
7
+ prefix += "_";
8
+ snaked = snaked.substring(1);
9
+ }
10
+ return `${prefix}${snaked.replaceAll("_", "-")}`;
11
+ };
@@ -0,0 +1,9 @@
1
+ export const _notationKeyCollision = (
2
+ first: string,
3
+ second: string,
4
+ destination: string,
5
+ ): never => {
6
+ throw new Error(
7
+ `typia.notations cannot rename both ${JSON.stringify(first)} and ${JSON.stringify(second)} to ${JSON.stringify(destination)}.`,
8
+ );
9
+ };
@@ -1,8 +1,21 @@
1
- import { __notationCapitalize } from "./private/__notationCapitalize";
2
- import { __notationUnsnake } from "./private/__notationUnsnake";
1
+ import { __notationRename } from "./private/__notationRename";
3
2
 
4
- export const _notationPascal = __notationUnsnake({
5
- plain: (str) =>
6
- str.length ? `${str[0]!.toUpperCase()}${str.substring(1)}` : str,
7
- snake: __notationCapitalize,
3
+ const _notationPascalSnake = (str: string): string => {
4
+ while (str.startsWith("_")) str = str.substring(1);
5
+ if (str.length === 0) return "";
6
+ const index: number = str.indexOf("_");
7
+ return index < 0
8
+ ? `${str[0]!.toUpperCase()}${str.substring(1).toLowerCase()}`
9
+ : `${str[0]!.toUpperCase()}${str
10
+ .substring(1, index)
11
+ .toLowerCase()}${_notationPascalSnake(str.substring(index + 1))}`;
12
+ };
13
+
14
+ export const _notationPascal = __notationRename({
15
+ // `PascalCase<T>` capitalizes the first character of an underscore-free key
16
+ // and keeps the rest verbatim (`userID` -> `UserID`).
17
+ plain: (str) => `${str[0]!.toUpperCase()}${str.substring(1)}`,
18
+ // With an underscore present, each segment is capitalized and its tail is
19
+ // lowercased (`MAX_COUNT` -> `MaxCount`), matching `PascalizeSnakeString`.
20
+ snake: _notationPascalSnake,
8
21
  });
@@ -1,22 +1,4 @@
1
- export const _notationSnake = (str: string): string => {
2
- if (str.length === 0) return str;
3
-
4
- // PREFIX
5
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
6
- let prefix: string = "";
7
- for (let i: number = 0; i < str.length; i++) {
8
- if (str[i] === "_") prefix += "_";
9
- else break;
10
- }
11
- if (prefix.length !== 0) str = str.substring(prefix.length);
12
-
13
- const out = (s: string) => `${prefix}${s}`;
14
-
15
- // SNAKE CASE
16
- const items: string[] = str.split("_");
17
- if (items.length > 1) return out(items.map((s) => s.toLowerCase()).join("_"));
18
-
19
- // CAMEL OR PASCAL CASE
1
+ const _notationSnakeWord = (str: string): string => {
20
2
  const indexes: number[] = [];
21
3
  for (let i: number = 0; i < str.length; i++) {
22
4
  const code: number = str.charCodeAt(i);
@@ -28,7 +10,7 @@ export const _notationSnake = (str: string): string => {
28
10
  if (now - prev === 1) indexes.splice(i, 1);
29
11
  }
30
12
  if (indexes.length !== 0 && indexes[0] === 0) indexes.splice(0, 1);
31
- if (indexes.length === 0) return out(str.toLowerCase());
13
+ if (indexes.length === 0) return str.toLowerCase();
32
14
 
33
15
  let ret: string = "";
34
16
  for (let i: number = 0; i < indexes.length; i++) {
@@ -39,5 +21,26 @@ export const _notationSnake = (str: string): string => {
39
21
  ret += "_";
40
22
  }
41
23
  ret += str.substring(indexes[indexes.length - 1]!).toLowerCase();
42
- return out(ret);
24
+ return ret;
25
+ };
26
+
27
+ export const _notationSnake = (str: string): string => {
28
+ if (str.length === 0) return str;
29
+
30
+ // PREFIX
31
+ let prefix: string = "";
32
+ for (let i: number = 0; i < str.length; i++) {
33
+ if (str[i] === "_") prefix += "_";
34
+ else break;
35
+ }
36
+ if (prefix.length !== 0) str = str.substring(prefix.length);
37
+
38
+ // SNAKE CASE
39
+ //
40
+ // Run the case-boundary walk within each underscore-delimited segment, not
41
+ // over the whole segment at once. Lowercasing a segment atomically would drop
42
+ // the camelCase boundary inside it (`["fooBar", "baz"]` -> `["foobar", "baz"]`
43
+ // -> `foobar_baz`), diverging from `SnakeCase<T>`; the per-segment walk keeps
44
+ // it (`["foo_bar", "baz"]` -> `foo_bar_baz`).
45
+ return `${prefix}${str.split("_").map(_notationSnakeWord).join("_")}`;
43
46
  };