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
package/src/functional.ts CHANGED
@@ -3,6 +3,24 @@ import { IValidation } from "@typia/interface";
3
3
  import { TypeGuardError } from "./TypeGuardError";
4
4
  import { NoTransformConfigurationError } from "./transformers/NoTransformConfigurationError";
5
5
 
6
+ type FunctionalIs<T extends (...args: any[]) => any> = T extends (
7
+ this: infer This,
8
+ ...args: infer Arguments
9
+ ) => infer Output
10
+ ? Output extends Promise<infer R>
11
+ ? (this: This, ...args: Arguments) => Promise<R | null>
12
+ : (this: This, ...args: Arguments) => Output | null
13
+ : never;
14
+
15
+ type FunctionalValidate<T extends (...args: any[]) => any> = T extends (
16
+ this: infer This,
17
+ ...args: infer Arguments
18
+ ) => infer Output
19
+ ? Output extends Promise<infer R>
20
+ ? (this: This, ...args: Arguments) => Promise<IValidation<R>>
21
+ : (this: This, ...args: Arguments) => IValidation<Output>
22
+ : never;
23
+
6
24
  /* ===========================================================
7
25
  FUNCTIONAL
8
26
  - ASSERT
@@ -232,11 +250,7 @@ export function assertEqualsReturn(): never {
232
250
  */
233
251
  export function isFunction<T extends (...args: any[]) => any>(
234
252
  func: T,
235
- ): T extends (...args: infer Arguments) => infer Output
236
- ? Output extends Promise<infer R>
237
- ? (...args: Arguments) => Promise<R | null>
238
- : (...args: Arguments) => Output | null
239
- : never;
253
+ ): FunctionalIs<T>;
240
254
 
241
255
  /** @internal */
242
256
  export function isFunction(): never {
@@ -263,11 +277,7 @@ export function isFunction(): never {
263
277
  */
264
278
  export function isParameters<T extends (...args: any[]) => any>(
265
279
  func: T,
266
- ): T extends (...args: infer Arguments) => infer Output
267
- ? Output extends Promise<infer R>
268
- ? (...args: Arguments) => Promise<R | null>
269
- : (...args: Arguments) => Output | null
270
- : never;
280
+ ): FunctionalIs<T>;
271
281
 
272
282
  /** @internal */
273
283
  export function isParameters(): never {
@@ -294,11 +304,7 @@ export function isParameters(): never {
294
304
  */
295
305
  export function isReturn<T extends (...args: any[]) => any>(
296
306
  func: T,
297
- ): T extends (...args: infer Arguments) => infer Output
298
- ? Output extends Promise<infer R>
299
- ? (...args: Arguments) => Promise<R | null>
300
- : (...args: Arguments) => Output | null
301
- : never;
307
+ ): FunctionalIs<T>;
302
308
 
303
309
  /** @internal */
304
310
  export function isReturn(): never {
@@ -325,11 +331,7 @@ export function isReturn(): never {
325
331
  */
326
332
  export function equalsFunction<T extends (...args: any[]) => any>(
327
333
  func: T,
328
- ): T extends (...args: infer Arguments) => infer Output
329
- ? Output extends Promise<infer R>
330
- ? (...args: Arguments) => Promise<R | null>
331
- : (...args: Arguments) => Output | null
332
- : never;
334
+ ): FunctionalIs<T>;
333
335
 
334
336
  /** @internal */
335
337
  export function equalsFunction(): never {
@@ -356,11 +358,7 @@ export function equalsFunction(): never {
356
358
  */
357
359
  export function equalsParameters<T extends (...args: any[]) => any>(
358
360
  func: T,
359
- ): T extends (...args: infer Arguments) => infer Output
360
- ? Output extends Promise<infer R>
361
- ? (...args: Arguments) => Promise<R | null>
362
- : (...args: Arguments) => Output | null
363
- : never;
361
+ ): FunctionalIs<T>;
364
362
 
365
363
  /** @internal */
366
364
  export function equalsParameters(): never {
@@ -387,11 +385,7 @@ export function equalsParameters(): never {
387
385
  */
388
386
  export function equalsReturn<T extends (...args: any[]) => any>(
389
387
  func: T,
390
- ): T extends (...args: infer Arguments) => infer Output
391
- ? Output extends Promise<infer R>
392
- ? (...args: Arguments) => Promise<R | null>
393
- : (...args: Arguments) => Output | null
394
- : never;
388
+ ): FunctionalIs<T>;
395
389
 
396
390
  /** @internal */
397
391
  export function equalsReturn(): never {
@@ -425,11 +419,7 @@ export function equalsReturn(): never {
425
419
  */
426
420
  export function validateFunction<T extends (...args: any[]) => any>(
427
421
  func: T,
428
- ): T extends (...args: infer Arguments) => infer Output
429
- ? Output extends Promise<infer R>
430
- ? (...args: Arguments) => Promise<IValidation<R>>
431
- : (...args: Arguments) => IValidation<Output>
432
- : never;
422
+ ): FunctionalValidate<T>;
433
423
 
434
424
  /** @internal */
435
425
  export function validateFunction(): never {
@@ -457,11 +447,7 @@ export function validateFunction(): never {
457
447
  */
458
448
  export function validateParameters<T extends (...args: any[]) => any>(
459
449
  func: T,
460
- ): T extends (...args: infer Arguments) => infer Output
461
- ? Output extends Promise<infer R>
462
- ? (...args: Arguments) => Promise<IValidation<R>>
463
- : (...args: Arguments) => IValidation<Output>
464
- : never;
450
+ ): FunctionalValidate<T>;
465
451
 
466
452
  /** @internal */
467
453
  export function validateParameters(): never {
@@ -489,11 +475,7 @@ export function validateParameters(): never {
489
475
  */
490
476
  export function validateReturn<T extends (...args: any[]) => any>(
491
477
  func: T,
492
- ): T extends (...args: infer Arguments) => infer Output
493
- ? Output extends Promise<infer R>
494
- ? (...args: Arguments) => Promise<IValidation<R>>
495
- : (...args: Arguments) => IValidation<Output>
496
- : never;
478
+ ): FunctionalValidate<T>;
497
479
 
498
480
  /** @internal */
499
481
  export function validateReturn(): never {
@@ -524,11 +506,7 @@ export function validateReturn(): never {
524
506
  */
525
507
  export function validateEqualsFunction<T extends (...args: any[]) => any>(
526
508
  func: T,
527
- ): T extends (...args: infer Arguments) => infer Output
528
- ? Output extends Promise<infer R>
529
- ? (...args: Arguments) => Promise<IValidation<R>>
530
- : (...args: Arguments) => IValidation<Output>
531
- : never;
509
+ ): FunctionalValidate<T>;
532
510
 
533
511
  /** @internal */
534
512
  export function validateEqualsFunction(): never {
@@ -556,11 +534,7 @@ export function validateEqualsFunction(): never {
556
534
  */
557
535
  export function validateEqualsParameters<T extends (...args: any[]) => any>(
558
536
  func: T,
559
- ): T extends (...args: infer Arguments) => infer Output
560
- ? Output extends Promise<infer R>
561
- ? (...args: Arguments) => Promise<IValidation<R>>
562
- : (...args: Arguments) => IValidation<Output>
563
- : never;
537
+ ): FunctionalValidate<T>;
564
538
 
565
539
  /** @internal */
566
540
  export function validateEqualsParameters(): never {
@@ -588,11 +562,7 @@ export function validateEqualsParameters(): never {
588
562
  */
589
563
  export function validateEqualsReturn<T extends (...args: any[]) => any>(
590
564
  func: T,
591
- ): T extends (...args: infer Arguments) => infer Output
592
- ? Output extends Promise<infer R>
593
- ? (...args: Arguments) => Promise<IValidation<R>>
594
- : (...args: Arguments) => IValidation<Output>
595
- : never;
565
+ ): FunctionalValidate<T>;
596
566
 
597
567
  /** @internal */
598
568
  export function validateEqualsReturn(): never {
@@ -12,10 +12,14 @@ export class _ProtobufReader {
12
12
  /** DataView for buffer. */
13
13
  private view: DataView;
14
14
 
15
+ /** Current length-delimited boundary. */
16
+ private end: number;
17
+
15
18
  public constructor(buf: Uint8Array) {
16
19
  this.buf = buf;
17
20
  this.ptr = 0;
18
21
  this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
22
+ this.end = buf.length;
19
23
  }
20
24
 
21
25
  public index(): number {
@@ -23,7 +27,7 @@ export class _ProtobufReader {
23
27
  }
24
28
 
25
29
  public size(): number {
26
- return this.buf.length;
30
+ return this.end;
27
31
  }
28
32
 
29
33
  public uint32(): number {
@@ -44,7 +48,7 @@ export class _ProtobufReader {
44
48
  }
45
49
 
46
50
  public int64(): bigint {
47
- return this.varint64();
51
+ return BigInt.asIntN(64, this.varint64());
48
52
  }
49
53
 
50
54
  public sint64(): bigint {
@@ -57,58 +61,90 @@ export class _ProtobufReader {
57
61
  }
58
62
 
59
63
  public float(): number {
60
- const value: number = this.view.getFloat32(this.ptr, true);
61
- this.ptr += 4;
62
- return value;
64
+ return this.view.getFloat32(this.take(4), true);
63
65
  }
64
66
 
65
67
  public double(): number {
66
- const value: number = this.view.getFloat64(this.ptr, true);
67
- this.ptr += 8;
68
- return value;
68
+ return this.view.getFloat64(this.take(8), true);
69
69
  }
70
70
 
71
71
  public bytes(): Uint8Array {
72
- const length: number = this.uint32();
73
- const from: number = this.ptr;
74
- this.ptr += length;
75
- return this.buf.subarray(from, from + length);
72
+ return this.atomic(() => {
73
+ const length: number = this.uint32();
74
+ const from: number = this.take(length);
75
+ return this.buf.subarray(from, from + length);
76
+ });
76
77
  }
77
78
 
78
79
  public string(): string {
79
- return utf8.get().decode(this.bytes());
80
+ const bytes: Uint8Array = this.bytes();
81
+ const decoder: TextDecoder = utf8.get();
82
+ try {
83
+ return decoder.decode(bytes);
84
+ } catch {
85
+ throw error("invalid UTF-8 string.");
86
+ }
87
+ }
88
+
89
+ public fork(): number {
90
+ return this.atomic(() => {
91
+ const previous: number = this.end;
92
+ const length: number = this.uint32();
93
+ this.validate(length);
94
+ this.end = this.ptr + length;
95
+ return previous;
96
+ });
80
97
  }
81
98
 
99
+ public close(previous: number): void {
100
+ if (this.ptr !== this.end) throw error("buffer overflow.");
101
+ this.end = previous;
102
+ }
103
+
104
+ /** Advance by exactly `length` bytes, for every length including zero. */
82
105
  public skip(length: number): void {
83
- if (length === 0) while (this.u8() & 0x80);
84
- else {
85
- if (this.index() + length > this.size())
86
- throw new Error("Error on typia.protobuf.decode(): buffer overflow.");
87
- this.ptr += length;
88
- }
106
+ this.take(length);
107
+ }
108
+
109
+ /**
110
+ * Advance by exactly one varint, which carries no length prefix.
111
+ *
112
+ * A varint terminates at its first byte without the continuation bit, and may
113
+ * occupy no more than {@link VARINT_MAX_BYTES}. Reading past that limit would
114
+ * accept a varint that `varint32` and `varint64` could not, making the limit
115
+ * depend on which method happens to consume the value.
116
+ */
117
+ public skipVarint(): void {
118
+ this.atomic(() => {
119
+ for (let i: number = 0; i < VARINT_MAX_BYTES; ++i)
120
+ if ((this.u8() & 0x80) === 0) return;
121
+ throw error(`varint exceeds ${VARINT_MAX_BYTES} bytes.`);
122
+ });
89
123
  }
90
124
 
91
125
  public skipType(wireType: ProtobufWire): void {
92
- switch (wireType) {
93
- case ProtobufWire.VARIANT:
94
- this.skip(0);
95
- break;
96
- case ProtobufWire.I64:
97
- this.skip(8);
98
- break;
99
- case ProtobufWire.LEN:
100
- this.skip(this.uint32());
101
- break;
102
- case ProtobufWire.START_GROUP:
103
- while ((wireType = this.uint32() & 0x07) !== ProtobufWire.END_GROUP)
104
- this.skipType(wireType);
105
- break;
106
- case ProtobufWire.I32:
107
- this.skip(4);
108
- break;
109
- default:
110
- throw new Error(`Invalid wire type ${wireType} at offset ${this.ptr}.`);
111
- }
126
+ this.atomic(() => {
127
+ switch (wireType) {
128
+ case ProtobufWire.VARIANT:
129
+ this.skipVarint();
130
+ break;
131
+ case ProtobufWire.I64:
132
+ this.skip(8);
133
+ break;
134
+ case ProtobufWire.LEN:
135
+ this.skip(this.uint32());
136
+ break;
137
+ case ProtobufWire.START_GROUP:
138
+ while ((wireType = this.uint32() & 0x07) !== ProtobufWire.END_GROUP)
139
+ this.skipType(wireType);
140
+ break;
141
+ case ProtobufWire.I32:
142
+ this.skip(4);
143
+ break;
144
+ default:
145
+ throw error(`invalid wire type ${wireType} at offset ${this.ptr}.`);
146
+ }
147
+ });
112
148
  }
113
149
 
114
150
  private varint32(): number {
@@ -130,7 +166,8 @@ export class _ProtobufReader {
130
166
  value |= ((loaded = this.u8()) & 0xf) << 28;
131
167
  if (loaded < 0x80) return value;
132
168
 
133
- // increment position until there is no continuation bit or until we read 10 bytes
169
+ // increment position until there is no continuation bit, or until this read
170
+ // reaches VARINT_MAX_BYTES and the value can hold no further bits
134
171
  if (this.u8() < 0x80) return value;
135
172
  if (this.u8() < 0x80) return value;
136
173
  if (this.u8() < 0x80) return value;
@@ -172,16 +209,65 @@ export class _ProtobufReader {
172
209
  if (loaded < BigInt(0x80)) return value;
173
210
 
174
211
  value |= (this.u8n() & BigInt(0x01)) << BigInt(63);
175
- return BigInt.asIntN(64, value);
212
+ return BigInt.asUintN(64, value);
176
213
  }
177
214
 
178
215
  private u8(): number {
179
- return this.view.getUint8(this.ptr++);
216
+ return this.view.getUint8(this.take(1));
180
217
  }
181
218
 
182
219
  private u8n(): bigint {
183
220
  return BigInt(this.u8());
184
221
  }
222
+
223
+ private take(length: number): number {
224
+ this.validate(length);
225
+ const from: number = this.ptr;
226
+ this.ptr += length;
227
+ return from;
228
+ }
229
+
230
+ private atomic<T>(closure: () => T): T {
231
+ const index: number = this.ptr;
232
+ const end: number = this.end;
233
+ try {
234
+ return closure();
235
+ } catch (thrown) {
236
+ this.ptr = index;
237
+ this.end = end;
238
+ throw thrown;
239
+ }
240
+ }
241
+
242
+ private validate(length: number): void {
243
+ if (
244
+ Number.isSafeInteger(length) === false ||
245
+ length < 0 ||
246
+ length > this.size() - this.ptr
247
+ )
248
+ throw error("buffer overflow.");
249
+ }
185
250
  }
186
251
 
187
- const utf8 = new Singleton(() => new TextDecoder("utf-8"));
252
+ /**
253
+ * Builds every fault this reader raises, so each one names typia as its source.
254
+ *
255
+ * Every decode error a caller can see must be attributable, and the prefix is
256
+ * what attributes it. Composing it here rather than at each throw keeps a new
257
+ * fault from silently shipping without it.
258
+ */
259
+ const error = (message: string): Error =>
260
+ new Error(`Error on typia.protobuf.decode(): ${message}`);
261
+
262
+ /**
263
+ * The most bytes a varint may occupy: a 64-bit value in seven-bit groups.
264
+ *
265
+ * `varint32` and `varint64` hold this same limit structurally, by reading no
266
+ * further than their tenth byte. This constant is what a loop-driven consumer
267
+ * holds it by.
268
+ */
269
+ const VARINT_MAX_BYTES = 10;
270
+
271
+ const utf8 = new Singleton(
272
+ () => new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }),
273
+ );
@@ -17,7 +17,7 @@ export const _createStandardSchema = <T>(
17
17
  } else {
18
18
  return {
19
19
  issues: result.errors.map((error) => ({
20
- message: `expected ${error.expected}, got ${error.value}`,
20
+ message: `expected ${error.expected}, got ${formatValue(error.value)}`,
21
21
  path: typiaPathToStandardSchemaPath(error.path),
22
22
  })),
23
23
  } satisfies StandardSchemaV1.FailureResult;
@@ -26,6 +26,20 @@ export const _createStandardSchema = <T>(
26
26
  },
27
27
  } satisfies StandardSchemaV1<T, T>);
28
28
 
29
+ const formatValue = (value: unknown): string => {
30
+ if (typeof value === "object") {
31
+ if (value === null) return "null";
32
+ try {
33
+ if (Array.isArray(value)) return "[object Array]";
34
+ } catch {
35
+ // A revoked proxy can throw even for Array.isArray().
36
+ }
37
+ return "[object Object]";
38
+ }
39
+ if (typeof value === "function") return "[function]";
40
+ return String(value);
41
+ };
42
+
29
43
  enum PathParserState {
30
44
  // Start of a new segment
31
45
  // When the parser is in this state,
@@ -0,0 +1,69 @@
1
+ export interface _IDecimal {
2
+ coefficient: bigint;
3
+ exponent: number;
4
+ }
5
+
6
+ export interface _IDecimalRatio {
7
+ numerator: bigint;
8
+ denominator: bigint;
9
+ }
10
+
11
+ export const _decimalDecompose = (value: number): _IDecimal | null => {
12
+ if (Number.isFinite(value) === false) return null;
13
+ const [mantissa = "0", exponentText = "0"] = value.toString().split("e");
14
+ const negative: boolean = mantissa.startsWith("-");
15
+ const unsigned: string = negative ? mantissa.slice(1) : mantissa;
16
+ const point: number = unsigned.indexOf(".");
17
+ const decimals: number = point === -1 ? 0 : unsigned.length - point - 1;
18
+ const digits: bigint = BigInt(unsigned.replace(".", ""));
19
+ return {
20
+ coefficient: negative ? -digits : digits,
21
+ exponent: Number(exponentText) - decimals,
22
+ };
23
+ };
24
+
25
+ export const _decimalDivide = (
26
+ value: number,
27
+ divisor: _IDecimal,
28
+ ): _IDecimalRatio | null => {
29
+ const dividend: _IDecimal | null = _decimalDecompose(value);
30
+ if (dividend === null || divisor.coefficient === BigInt(0)) return null;
31
+ const exponent: number = dividend.exponent - divisor.exponent;
32
+ return exponent >= 0
33
+ ? {
34
+ numerator: dividend.coefficient * _decimalPower(exponent),
35
+ denominator: divisor.coefficient,
36
+ }
37
+ : {
38
+ numerator: dividend.coefficient,
39
+ denominator: divisor.coefficient * _decimalPower(-exponent),
40
+ };
41
+ };
42
+
43
+ export const _decimalIntegerStep = (value: number): _IDecimal | null => {
44
+ const decimal: _IDecimal | null = _decimalDecompose(value);
45
+ if (decimal === null || decimal.coefficient <= BigInt(0)) return null;
46
+ if (decimal.exponent >= 0)
47
+ return {
48
+ coefficient: decimal.coefficient * _decimalPower(decimal.exponent),
49
+ exponent: 0,
50
+ };
51
+
52
+ const denominator: bigint = _decimalPower(-decimal.exponent);
53
+ return {
54
+ coefficient:
55
+ decimal.coefficient / _decimalGcd(decimal.coefficient, denominator),
56
+ exponent: 0,
57
+ };
58
+ };
59
+
60
+ export const _decimalToNumber = (value: _IDecimal): number =>
61
+ Number(`${value.coefficient}e${value.exponent}`);
62
+
63
+ export const _decimalPower = (exponent: number): bigint =>
64
+ BigInt(10) ** BigInt(exponent);
65
+
66
+ export const _decimalGcd = (x: bigint, y: bigint): bigint => {
67
+ while (y !== BigInt(0)) [x, y] = [y, x % y];
68
+ return x < BigInt(0) ? -x : x;
69
+ };
@@ -4,9 +4,31 @@ export const _httpQueryParseURLSearchParams = (
4
4
  input: string | IReadableURLSearchParams,
5
5
  ): IReadableURLSearchParams => {
6
6
  if (typeof input === "string") {
7
- const index: number = input.indexOf("?");
8
- input = index === -1 ? "" : input.substring(index + 1);
7
+ let url: boolean = false;
8
+ if (input.startsWith("?")) {
9
+ input = input.substring(1);
10
+ url = true;
11
+ } else {
12
+ const index: number = input.indexOf("?");
13
+ if (index !== -1 && isUrlPrefix(input.substring(0, index))) {
14
+ input = input.substring(index + 1);
15
+ url = true;
16
+ } else if (index === -1 && isExplicitUrlPrefix(input)) {
17
+ input = "";
18
+ url = true;
19
+ }
20
+ }
21
+ if (url) {
22
+ const fragment: number = input.indexOf("#");
23
+ if (fragment !== -1) input = input.substring(0, fragment);
24
+ }
9
25
  return new URLSearchParams(input);
10
26
  }
11
27
  return input;
12
28
  };
29
+
30
+ const isUrlPrefix = (prefix: string): boolean =>
31
+ isExplicitUrlPrefix(prefix) || (prefix.length !== 0 && !/[=&]/.test(prefix));
32
+
33
+ const isExplicitUrlPrefix = (prefix: string): boolean =>
34
+ /^[a-z][a-z\d+.-]*:/i.test(prefix) || /^(?:\/\/|\/|\.{1,2}\/)/.test(prefix);
@@ -1,7 +1,4 @@
1
- export const _isFormatByte = (str: string): boolean => {
2
- PATTERN.lastIndex = 0;
3
- return PATTERN.test(str);
4
- };
1
+ export const _isFormatByte = (str: string): boolean => PATTERN.test(str);
5
2
 
6
3
  const PATTERN =
7
- /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm;
4
+ /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
@@ -1,3 +1,16 @@
1
- export const _isFormatDate = (str: string): boolean => FORMAT.test(str);
1
+ export const _isFormatDate = (str: string): boolean => {
2
+ const match: RegExpExecArray | null = PATTERN.exec(str);
3
+ if (match === null) return false;
4
+ const year: number = Number(match[1]);
5
+ const month: number = Number(match[2]);
6
+ const day: number = Number(match[3]);
7
+ const maximum: number =
8
+ DAYS[month - 1]! +
9
+ (month === 2 && (year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0))
10
+ ? 1
11
+ : 0);
12
+ return day <= maximum;
13
+ };
2
14
 
3
- const FORMAT = /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
15
+ const PATTERN = /^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
16
+ const DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] as const;
@@ -1,4 +1,30 @@
1
- export const _isFormatDateTime = (str: string): boolean => PATTERN.test(str);
1
+ import { _isFormatDate } from "./_isFormatDate";
2
+
3
+ export const _isFormatDateTime = (str: string): boolean => {
4
+ const match: RegExpExecArray | null = PATTERN.exec(str);
5
+ if (match === null || _isFormatDate(match[1]!) === false) return false;
6
+ if (match[7] !== "60") return true;
7
+
8
+ const instant: Date = new Date(0);
9
+ instant.setUTCFullYear(
10
+ Number(match[2]),
11
+ Number(match[3]) - 1,
12
+ Number(match[4]),
13
+ );
14
+ instant.setUTCHours(Number(match[5]), Number(match[6]), 0, 0);
15
+ const offset: number =
16
+ match[8] === undefined
17
+ ? 0
18
+ : (match[8] === "+" ? 1 : -1) *
19
+ (Number(match[9]) * 60 + Number(match[10]));
20
+ instant.setUTCMinutes(instant.getUTCMinutes() - offset);
21
+ return (
22
+ instant.getUTCHours() === 23 &&
23
+ instant.getUTCMinutes() === 59 &&
24
+ ((instant.getUTCMonth() === 5 && instant.getUTCDate() === 30) ||
25
+ (instant.getUTCMonth() === 11 && instant.getUTCDate() === 31))
26
+ );
27
+ };
2
28
 
3
29
  const PATTERN =
4
- /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(T|\s)([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\.[0-9]{1,9})?(Z|[+-]([01][0-9]|2[0-3]):[0-5][0-9])$/i;
30
+ /^(([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]))[Tt]((?:[01][0-9]|2[0-3])):([0-5][0-9]):([0-5][0-9]|60)(?:\.[0-9]+)?(?:[Zz]|([+-])((?:[01][0-9]|2[0-3])):([0-5][0-9]))$/;
@@ -1,3 +1,6 @@
1
- export const _isFormatIri = (str: string): boolean => PATTERN.test(str);
1
+ import { _isFormatIriReference } from "./_isFormatIriReference";
2
2
 
3
- const PATTERN = /^[A-Za-z][\d+-.A-Za-z]*:[^\u0000-\u0020"<>\\^`{|}]*$/u;
3
+ export const _isFormatIri = (str: string): boolean =>
4
+ SCHEME.test(str) && _isFormatIriReference(str);
5
+
6
+ const SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*:/u;
@@ -1,4 +1,12 @@
1
- export const _isFormatIriReference = (str: string): boolean =>
2
- PATTERN.test(str);
1
+ export const _isFormatIriReference = (str: string): boolean => {
2
+ if (FORBIDDEN.test(str) || INVALID_PERCENT.test(str)) return false;
3
+ const colon: number = str.indexOf(":");
4
+ const boundary: number = str.search(/[/?#]/u);
5
+ return (
6
+ colon === -1 || (boundary !== -1 && boundary < colon) || SCHEME.test(str)
7
+ );
8
+ };
3
9
 
4
- const PATTERN = /^[A-Za-z][\d+-.A-Za-z]*:[^\u0000-\u0020"<>\\^`{|}]*$/u;
10
+ const FORBIDDEN = /[\u0000-\u0020\u007f-\u009f\ud800-\udfff"<>\\^`{|}]/u;
11
+ const INVALID_PERCENT = /%(?![0-9A-Fa-f]{2})/u;
12
+ const SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*:/u;
@@ -2,4 +2,4 @@ export const _isFormatUriReference = (str: string): boolean =>
2
2
  PATTERN.test(str);
3
3
 
4
4
  const PATTERN =
5
- /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
5
+ /^(?:(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?)?|(?:[a-z][a-z0-9+\-.]*:)(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|(?:[a-z0-9\-._~!$&'()*+,;=@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
@@ -0,0 +1,8 @@
1
+ import { _decimalDecompose, _decimalDivide } from "./_decimal";
2
+
3
+ export const _isMultipleOf = (value: number, multipleOf: number): boolean => {
4
+ const divisor = _decimalDecompose(multipleOf);
5
+ if (divisor === null || divisor.coefficient <= BigInt(0)) return false;
6
+ const ratio = _decimalDivide(value, divisor);
7
+ return ratio !== null && ratio.numerator % ratio.denominator === BigInt(0);
8
+ };
@@ -1,5 +1,5 @@
1
1
  export const _isTypeFloat = (value: number): boolean =>
2
2
  MINIMUM <= value && value <= MAXIMUM;
3
3
 
4
- const MINIMUM = -1.175494351e38;
4
+ const MINIMUM = -3.4028235e38;
5
5
  const MAXIMUM = 3.4028235e38;
@@ -1,5 +1,6 @@
1
1
  export const _isTypeInt64 = (value: number): boolean =>
2
2
  Math.floor(value) === value && MINIMUM <= value && value <= MAXIMUM;
3
3
 
4
+ // The maximum is `2 ** 63 - 1`, the int64 upper bound.
4
5
  const MINIMUM = -(2 ** 63);
5
6
  const MAXIMUM = 2 ** 63 - 1;