typia 13.1.1 → 13.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (581) hide show
  1. package/README.md +3 -0
  2. package/lib/_virtual/_rolldown/runtime.mjs +1 -5
  3. package/lib/executable/FileSystemIdentity.d.ts +44 -0
  4. package/lib/executable/FileSystemIdentity.js +213 -0
  5. package/lib/executable/FileSystemIdentity.js.map +1 -0
  6. package/lib/executable/FileSystemIdentity.mjs +133 -0
  7. package/lib/executable/FileSystemIdentity.mjs.map +1 -0
  8. package/lib/executable/TypiaGenerateWizard.js +272 -106
  9. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  10. package/lib/executable/TypiaGenerateWizard.mjs +239 -95
  11. package/lib/executable/TypiaGenerateWizard.mjs.map +1 -1
  12. package/lib/functional.d.ts +15 -12
  13. package/lib/functional.js.map +1 -1
  14. package/lib/functional.mjs.map +1 -1
  15. package/lib/internal/_ProtobufReader.d.ts +32 -0
  16. package/lib/internal/_ProtobufReader.js +148 -48
  17. package/lib/internal/_ProtobufReader.js.map +1 -1
  18. package/lib/internal/_ProtobufReader.mjs +137 -41
  19. package/lib/internal/_ProtobufReader.mjs.map +1 -1
  20. package/lib/internal/_createStandardSchema.js +18 -1
  21. package/lib/internal/_createStandardSchema.js.map +1 -1
  22. package/lib/internal/_createStandardSchema.mjs +12 -1
  23. package/lib/internal/_createStandardSchema.mjs.map +1 -1
  24. package/lib/internal/_decimal.d.ts +14 -0
  25. package/lib/internal/_decimal.js +61 -0
  26. package/lib/internal/_decimal.js.map +1 -0
  27. package/lib/internal/_decimal.mjs +49 -0
  28. package/lib/internal/_decimal.mjs.map +1 -0
  29. package/lib/internal/_httpQueryParseURLSearchParams.js +23 -2
  30. package/lib/internal/_httpQueryParseURLSearchParams.js.map +1 -1
  31. package/lib/internal/_httpQueryParseURLSearchParams.mjs +20 -2
  32. package/lib/internal/_httpQueryParseURLSearchParams.mjs.map +1 -1
  33. package/lib/internal/_isFormatByte.js +2 -5
  34. package/lib/internal/_isFormatByte.js.map +1 -1
  35. package/lib/internal/_isFormatByte.mjs +2 -5
  36. package/lib/internal/_isFormatByte.mjs.map +1 -1
  37. package/lib/internal/_isFormatDate.js +15 -2
  38. package/lib/internal/_isFormatDate.js.map +1 -1
  39. package/lib/internal/_isFormatDate.mjs +22 -2
  40. package/lib/internal/_isFormatDate.mjs.map +1 -1
  41. package/lib/internal/_isFormatDateTime.js +21 -2
  42. package/lib/internal/_isFormatDateTime.js.map +1 -1
  43. package/lib/internal/_isFormatDateTime.mjs +13 -2
  44. package/lib/internal/_isFormatDateTime.mjs.map +1 -1
  45. package/lib/internal/_isFormatIri.js +3 -2
  46. package/lib/internal/_isFormatIri.js.map +1 -1
  47. package/lib/internal/_isFormatIri.mjs +3 -2
  48. package/lib/internal/_isFormatIri.mjs.map +1 -1
  49. package/lib/internal/_isFormatIriReference.js +10 -2
  50. package/lib/internal/_isFormatIriReference.js.map +1 -1
  51. package/lib/internal/_isFormatIriReference.mjs +9 -2
  52. package/lib/internal/_isFormatIriReference.mjs.map +1 -1
  53. package/lib/internal/_isFormatUriReference.js +1 -1
  54. package/lib/internal/_isFormatUriReference.js.map +1 -1
  55. package/lib/internal/_isFormatUriReference.mjs +1 -1
  56. package/lib/internal/_isFormatUriReference.mjs.map +1 -1
  57. package/lib/internal/_isMultipleOf.d.ts +1 -0
  58. package/lib/internal/_isMultipleOf.js +13 -0
  59. package/lib/internal/_isMultipleOf.js.map +1 -0
  60. package/lib/internal/_isMultipleOf.mjs +12 -0
  61. package/lib/internal/_isMultipleOf.mjs.map +1 -0
  62. package/lib/internal/_isTypeFloat.js +1 -1
  63. package/lib/internal/_isTypeFloat.js.map +1 -1
  64. package/lib/internal/_isTypeFloat.mjs +1 -1
  65. package/lib/internal/_isTypeFloat.mjs.map +1 -1
  66. package/lib/internal/_isTypeInt64.js +1 -0
  67. package/lib/internal/_isTypeInt64.js.map +1 -1
  68. package/lib/internal/_isTypeInt64.mjs.map +1 -1
  69. package/lib/internal/_isTypeInt64Bigint.d.ts +1 -0
  70. package/lib/internal/_isTypeInt64Bigint.js +15 -0
  71. package/lib/internal/_isTypeInt64Bigint.js.map +1 -0
  72. package/lib/internal/_isTypeInt64Bigint.mjs +8 -0
  73. package/lib/internal/_isTypeInt64Bigint.mjs.map +1 -0
  74. package/lib/internal/_isTypeUint64.js +1 -0
  75. package/lib/internal/_isTypeUint64.js.map +1 -1
  76. package/lib/internal/_isTypeUint64.mjs.map +1 -1
  77. package/lib/internal/_isTypeUint64Bigint.d.ts +1 -0
  78. package/lib/internal/_isTypeUint64Bigint.js +10 -0
  79. package/lib/internal/_isTypeUint64Bigint.js.map +1 -0
  80. package/lib/internal/_isTypeUint64Bigint.mjs +8 -0
  81. package/lib/internal/_isTypeUint64Bigint.mjs.map +1 -0
  82. package/lib/internal/_isUniqueItems.js +96 -109
  83. package/lib/internal/_isUniqueItems.js.map +1 -1
  84. package/lib/internal/_isUniqueItems.mjs +62 -50
  85. package/lib/internal/_isUniqueItems.mjs.map +1 -1
  86. package/lib/internal/_jsonStringifyArray.d.ts +1 -0
  87. package/lib/internal/_jsonStringifyArray.js +48 -0
  88. package/lib/internal/_jsonStringifyArray.js.map +1 -0
  89. package/lib/internal/_jsonStringifyArray.mjs +40 -0
  90. package/lib/internal/_jsonStringifyArray.mjs.map +1 -0
  91. package/lib/internal/_jsonStringifyElement.d.ts +1 -0
  92. package/lib/internal/_jsonStringifyElement.js +23 -0
  93. package/lib/internal/_jsonStringifyElement.js.map +1 -0
  94. package/lib/internal/_jsonStringifyElement.mjs +23 -0
  95. package/lib/internal/_jsonStringifyElement.mjs.map +1 -0
  96. package/lib/internal/_jsonStringifyProperty.d.ts +1 -0
  97. package/lib/internal/_jsonStringifyProperty.js +31 -0
  98. package/lib/internal/_jsonStringifyProperty.js.map +1 -0
  99. package/lib/internal/_jsonStringifyProperty.mjs +31 -0
  100. package/lib/internal/_jsonStringifyProperty.mjs.map +1 -0
  101. package/lib/internal/_llmApplicationFinalize.js +1 -1
  102. package/lib/internal/_llmApplicationFinalize.js.map +1 -1
  103. package/lib/internal/_llmApplicationFinalize.mjs +1 -1
  104. package/lib/internal/_llmApplicationFinalize.mjs.map +1 -1
  105. package/lib/internal/_notationAny.js +8 -1
  106. package/lib/internal/_notationAny.js.map +1 -1
  107. package/lib/internal/_notationAny.mjs +7 -1
  108. package/lib/internal/_notationAny.mjs.map +1 -1
  109. package/lib/internal/_notationAssign.d.ts +1 -0
  110. package/lib/internal/_notationAssign.js +18 -0
  111. package/lib/internal/_notationAssign.js.map +1 -0
  112. package/lib/internal/_notationAssign.mjs +17 -0
  113. package/lib/internal/_notationAssign.mjs.map +1 -0
  114. package/lib/internal/_notationCamel.js +30 -9
  115. package/lib/internal/_notationCamel.js.map +1 -1
  116. package/lib/internal/_notationCamel.mjs +13 -5
  117. package/lib/internal/_notationCamel.mjs.map +1 -1
  118. package/lib/internal/_notationKebab.d.ts +1 -0
  119. package/lib/internal/_notationKebab.js +15 -0
  120. package/lib/internal/_notationKebab.js.map +1 -0
  121. package/lib/internal/_notationKebab.mjs +15 -0
  122. package/lib/internal/_notationKebab.mjs.map +1 -0
  123. package/lib/internal/_notationKeyCollision.d.ts +1 -0
  124. package/lib/internal/_notationKeyCollision.js +8 -0
  125. package/lib/internal/_notationKeyCollision.js.map +1 -0
  126. package/lib/internal/_notationKeyCollision.mjs +8 -0
  127. package/lib/internal/_notationKeyCollision.mjs.map +1 -0
  128. package/lib/internal/_notationPascal.js +20 -5
  129. package/lib/internal/_notationPascal.js.map +1 -1
  130. package/lib/internal/_notationPascal.mjs +10 -5
  131. package/lib/internal/_notationPascal.mjs.map +1 -1
  132. package/lib/internal/_notationSnake.js +25 -22
  133. package/lib/internal/_notationSnake.js.map +1 -1
  134. package/lib/internal/_notationSnake.mjs +11 -11
  135. package/lib/internal/_notationSnake.mjs.map +1 -1
  136. package/lib/internal/_plainCloneAny.js +174 -38
  137. package/lib/internal/_plainCloneAny.js.map +1 -1
  138. package/lib/internal/_plainCloneAny.mjs +126 -22
  139. package/lib/internal/_plainCloneAny.mjs.map +1 -1
  140. package/lib/internal/_randomArray.d.ts +1 -1
  141. package/lib/internal/_randomArray.js +11 -4
  142. package/lib/internal/_randomArray.js.map +1 -1
  143. package/lib/internal/_randomArray.mjs +9 -3
  144. package/lib/internal/_randomArray.mjs.map +1 -1
  145. package/lib/internal/_randomFormatByte.d.ts +2 -1
  146. package/lib/internal/_randomFormatByte.js +25 -1
  147. package/lib/internal/_randomFormatByte.js.map +1 -1
  148. package/lib/internal/_randomFormatByte.mjs +20 -1
  149. package/lib/internal/_randomFormatByte.mjs.map +1 -1
  150. package/lib/internal/_randomFormatDate.d.ts +3 -4
  151. package/lib/internal/_randomFormatDate.js +3 -10
  152. package/lib/internal/_randomFormatDate.js.map +1 -1
  153. package/lib/internal/_randomFormatDate.mjs +3 -6
  154. package/lib/internal/_randomFormatDate.mjs.map +1 -1
  155. package/lib/internal/_randomFormatDatetime.d.ts +3 -4
  156. package/lib/internal/_randomFormatDatetime.js +26 -8
  157. package/lib/internal/_randomFormatDatetime.js.map +1 -1
  158. package/lib/internal/_randomFormatDatetime.mjs +17 -6
  159. package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
  160. package/lib/internal/_randomFormatDuration.d.ts +2 -1
  161. package/lib/internal/_randomFormatDuration.js +23 -14
  162. package/lib/internal/_randomFormatDuration.js.map +1 -1
  163. package/lib/internal/_randomFormatDuration.mjs +22 -13
  164. package/lib/internal/_randomFormatDuration.mjs.map +1 -1
  165. package/lib/internal/_randomFormatEmail.d.ts +2 -1
  166. package/lib/internal/_randomFormatEmail.js +8 -1
  167. package/lib/internal/_randomFormatEmail.js.map +1 -1
  168. package/lib/internal/_randomFormatEmail.mjs +5 -1
  169. package/lib/internal/_randomFormatEmail.mjs.map +1 -1
  170. package/lib/internal/_randomFormatHostname.d.ts +8 -1
  171. package/lib/internal/_randomFormatHostname.js +45 -2
  172. package/lib/internal/_randomFormatHostname.js.map +1 -1
  173. package/lib/internal/_randomFormatHostname.mjs +38 -2
  174. package/lib/internal/_randomFormatHostname.mjs.map +1 -1
  175. package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
  176. package/lib/internal/_randomFormatIdnEmail.js +16 -2
  177. package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
  178. package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
  179. package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
  180. package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
  181. package/lib/internal/_randomFormatIdnHostname.js +26 -1
  182. package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
  183. package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
  184. package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
  185. package/lib/internal/_randomFormatIpv4.d.ts +2 -1
  186. package/lib/internal/_randomFormatIpv4.js +32 -1
  187. package/lib/internal/_randomFormatIpv4.js.map +1 -1
  188. package/lib/internal/_randomFormatIpv4.mjs +23 -1
  189. package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
  190. package/lib/internal/_randomFormatIpv6.d.ts +2 -1
  191. package/lib/internal/_randomFormatIpv6.js +58 -1
  192. package/lib/internal/_randomFormatIpv6.js.map +1 -1
  193. package/lib/internal/_randomFormatIpv6.mjs +45 -1
  194. package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
  195. package/lib/internal/_randomFormatIri.d.ts +2 -1
  196. package/lib/internal/_randomFormatIri.js +1 -1
  197. package/lib/internal/_randomFormatIri.js.map +1 -1
  198. package/lib/internal/_randomFormatIri.mjs +1 -1
  199. package/lib/internal/_randomFormatIri.mjs.map +1 -1
  200. package/lib/internal/_randomFormatIriReference.d.ts +2 -1
  201. package/lib/internal/_randomFormatIriReference.js +1 -1
  202. package/lib/internal/_randomFormatIriReference.js.map +1 -1
  203. package/lib/internal/_randomFormatIriReference.mjs +1 -1
  204. package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
  205. package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
  206. package/lib/internal/_randomFormatJsonPointer.js +20 -1
  207. package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
  208. package/lib/internal/_randomFormatJsonPointer.mjs +15 -1
  209. package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
  210. package/lib/internal/_randomFormatPassword.d.ts +2 -1
  211. package/lib/internal/_randomFormatPassword.js +7 -5
  212. package/lib/internal/_randomFormatPassword.js.map +1 -1
  213. package/lib/internal/_randomFormatPassword.mjs +5 -1
  214. package/lib/internal/_randomFormatPassword.mjs.map +1 -1
  215. package/lib/internal/_randomFormatRegex.d.ts +2 -1
  216. package/lib/internal/_randomFormatRegex.js +15 -1
  217. package/lib/internal/_randomFormatRegex.js.map +1 -1
  218. package/lib/internal/_randomFormatRegex.mjs +14 -1
  219. package/lib/internal/_randomFormatRegex.mjs.map +1 -1
  220. package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
  221. package/lib/internal/_randomFormatRelativeJsonPointer.js +20 -5
  222. package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
  223. package/lib/internal/_randomFormatRelativeJsonPointer.mjs +21 -5
  224. package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
  225. package/lib/internal/_randomFormatTime.d.ts +2 -1
  226. package/lib/internal/_randomFormatTime.js +34 -7
  227. package/lib/internal/_randomFormatTime.js.map +1 -1
  228. package/lib/internal/_randomFormatTime.mjs +37 -4
  229. package/lib/internal/_randomFormatTime.mjs.map +1 -1
  230. package/lib/internal/_randomFormatUri.d.ts +2 -1
  231. package/lib/internal/_randomFormatUri.js +1 -1
  232. package/lib/internal/_randomFormatUri.js.map +1 -1
  233. package/lib/internal/_randomFormatUri.mjs +1 -1
  234. package/lib/internal/_randomFormatUri.mjs.map +1 -1
  235. package/lib/internal/_randomFormatUriReference.d.ts +2 -1
  236. package/lib/internal/_randomFormatUriReference.js +1 -1
  237. package/lib/internal/_randomFormatUriReference.js.map +1 -1
  238. package/lib/internal/_randomFormatUriReference.mjs +1 -1
  239. package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
  240. package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
  241. package/lib/internal/_randomFormatUriTemplate.js +1 -1
  242. package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
  243. package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
  244. package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
  245. package/lib/internal/_randomFormatUrl.d.ts +2 -1
  246. package/lib/internal/_randomFormatUrl.js +21 -1
  247. package/lib/internal/_randomFormatUrl.js.map +1 -1
  248. package/lib/internal/_randomFormatUrl.mjs +18 -1
  249. package/lib/internal/_randomFormatUrl.mjs.map +1 -1
  250. package/lib/internal/_randomFormatUuid.d.ts +2 -1
  251. package/lib/internal/_randomFormatUuid.js +3 -2
  252. package/lib/internal/_randomFormatUuid.js.map +1 -1
  253. package/lib/internal/_randomFormatUuid.mjs +3 -2
  254. package/lib/internal/_randomFormatUuid.mjs.map +1 -1
  255. package/lib/internal/_randomInteger.js +59 -28
  256. package/lib/internal/_randomInteger.js.map +1 -1
  257. package/lib/internal/_randomInteger.mjs +56 -16
  258. package/lib/internal/_randomInteger.mjs.map +1 -1
  259. package/lib/internal/_randomMultiple.d.ts +8 -0
  260. package/lib/internal/_randomMultiple.js +168 -0
  261. package/lib/internal/_randomMultiple.js.map +1 -0
  262. package/lib/internal/_randomMultiple.mjs +158 -0
  263. package/lib/internal/_randomMultiple.mjs.map +1 -0
  264. package/lib/internal/_randomNumber.js +42 -42
  265. package/lib/internal/_randomNumber.js.map +1 -1
  266. package/lib/internal/_randomNumber.mjs +41 -27
  267. package/lib/internal/_randomNumber.mjs.map +1 -1
  268. package/lib/internal/_randomPattern.d.ts +2 -1
  269. package/lib/internal/_randomPattern.js +19 -4
  270. package/lib/internal/_randomPattern.js.map +1 -1
  271. package/lib/internal/_randomPattern.mjs +10 -4
  272. package/lib/internal/_randomPattern.mjs.map +1 -1
  273. package/lib/internal/_randomStringLength.d.ts +64 -0
  274. package/lib/internal/_randomStringLength.js +84 -0
  275. package/lib/internal/_randomStringLength.js.map +1 -0
  276. package/lib/internal/_randomStringLength.mjs +79 -0
  277. package/lib/internal/_randomStringLength.mjs.map +1 -0
  278. package/lib/internal/_stringLength.d.ts +1 -0
  279. package/lib/internal/_stringLength.js +11 -0
  280. package/lib/internal/_stringLength.js.map +1 -0
  281. package/lib/internal/_stringLength.mjs +10 -0
  282. package/lib/internal/_stringLength.mjs.map +1 -0
  283. package/lib/internal/_validateReport.js +4 -1
  284. package/lib/internal/_validateReport.js.map +1 -1
  285. package/lib/internal/_validateReport.mjs +2 -1
  286. package/lib/internal/_validateReport.mjs.map +1 -1
  287. package/lib/internal/private/__notationRename.d.ts +14 -0
  288. package/lib/internal/private/__notationRename.js +25 -0
  289. package/lib/internal/private/__notationRename.js.map +1 -0
  290. package/lib/internal/private/__notationRename.mjs +24 -0
  291. package/lib/internal/private/__notationRename.mjs.map +1 -0
  292. package/lib/internal/private/__randomComposition.d.ts +23 -0
  293. package/lib/internal/private/__randomComposition.js +48 -0
  294. package/lib/internal/private/__randomComposition.js.map +1 -0
  295. package/lib/internal/private/__randomComposition.mjs +54 -0
  296. package/lib/internal/private/__randomComposition.mjs.map +1 -0
  297. package/lib/internal/private/__randomEpoch.d.ts +19 -0
  298. package/lib/internal/private/__randomEpoch.js +31 -0
  299. package/lib/internal/private/__randomEpoch.js.map +1 -0
  300. package/lib/internal/private/__randomEpoch.mjs +28 -0
  301. package/lib/internal/private/__randomEpoch.mjs.map +1 -0
  302. package/lib/json.d.ts +2 -2
  303. package/lib/json.mjs.map +1 -1
  304. package/lib/module.d.ts +2 -2
  305. package/lib/module.js.map +1 -1
  306. package/lib/module.mjs.map +1 -1
  307. package/lib/notations.d.ts +20 -4
  308. package/lib/notations.js.map +1 -1
  309. package/lib/notations.mjs.map +1 -1
  310. package/native/adapter/plugin_options.go +117 -0
  311. package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
  312. package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
  313. package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
  314. package/native/cmd/ttsc-typia/build.go +84 -64
  315. package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
  316. package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
  317. package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
  318. package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
  319. package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
  320. package/native/cmd/ttsc-typia/callable_interface_function_semantics_transform_test.go +331 -0
  321. package/native/cmd/ttsc-typia/callable_type_literal_boundaries_transform_test.go +1184 -0
  322. package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
  323. package/native/cmd/ttsc-typia/compare_functional_union_membership_transform_test.go +434 -0
  324. package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
  325. package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
  326. package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
  327. package/native/cmd/ttsc-typia/compare_template_literal_union_transform_test.go +241 -0
  328. package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
  329. package/native/cmd/ttsc-typia/default_library_spoof_native_identity_transform_test.go +216 -0
  330. package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
  331. package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
  332. package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
  333. package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
  334. package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
  335. package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
  336. package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
  337. package/native/cmd/ttsc-typia/json_schema_dynamic_key_determinism_transform_test.go +246 -0
  338. package/native/cmd/ttsc-typia/json_stringify_contextual_undefined_transform_test.go +556 -0
  339. package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
  340. package/native/cmd/ttsc-typia/lib_replacement_native_identity_transform_test.go +277 -0
  341. package/native/cmd/ttsc-typia/main_wasm.go +21 -2
  342. package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
  343. package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
  344. package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
  345. package/native/cmd/ttsc-typia/native_named_intersection_union_transform_test.go +390 -0
  346. package/native/cmd/ttsc-typia/node_buffer_native_exports_is_transform_test.go +526 -0
  347. package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
  348. package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
  349. package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
  350. package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
  351. package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
  352. package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
  353. package/native/cmd/ttsc-typia/package_declaration_native_identity_is_transform_test.go +293 -0
  354. package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
  355. package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
  356. package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
  357. package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
  358. package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
  359. package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
  360. package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
  361. package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
  362. package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
  363. package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
  364. package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
  365. package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
  366. package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
  367. package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
  368. package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
  369. package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
  370. package/native/cmd/ttsc-typia/protobuf_diagnostic_code_transform_test.go +167 -0
  371. package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
  372. package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
  373. package/native/cmd/ttsc-typia/symbol_index_domain_transform_test.go +316 -0
  374. package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
  375. package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
  376. package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
  377. package/native/cmd/ttsc-typia/transform.go +251 -39
  378. package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
  379. package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
  380. package/native/cmd/ttsc-typia/transform_helpers_test.go +236 -3
  381. package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
  382. package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
  383. package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
  384. package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
  385. package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
  386. package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
  387. package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
  388. package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
  389. package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
  390. package/native/cmd/ttsc-typia/user_global_native_identity_transform_test.go +484 -0
  391. package/native/core/factories/FormatCheatSheet.go +40 -7
  392. package/native/core/factories/IdentifierFactory.go +131 -4
  393. package/native/core/factories/MetadataCommentTagFactory.go +83 -40
  394. package/native/core/factories/MetadataTypeTagFactory.go +13 -1
  395. package/native/core/factories/NumericRangeFactory.go +60 -17
  396. package/native/core/factories/ProtobufFactory.go +13 -5
  397. package/native/core/factories/factory_utility_coverage_test.go +8 -2
  398. package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
  399. package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
  400. package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
  401. package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
  402. package/native/core/factories/internal/metadata/MetadataHelper.go +226 -17
  403. package/native/core/factories/internal/metadata/emplace_metadata_object.go +141 -8
  404. package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
  405. package/native/core/factories/internal/metadata/iterate_metadata_function.go +5 -12
  406. package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +111 -29
  407. package/native/core/factories/internal/metadata/iterate_metadata_map.go +5 -0
  408. package/native/core/factories/internal/metadata/iterate_metadata_native.go +45 -2
  409. package/native/core/factories/internal/metadata/iterate_metadata_set.go +5 -0
  410. package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
  411. package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
  412. package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
  413. package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
  414. package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
  415. package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
  416. package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
  417. package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
  418. package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
  419. package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
  420. package/native/core/programmers/IsProgrammer.go +15 -1
  421. package/native/core/programmers/RandomProgrammer.go +51 -14
  422. package/native/core/programmers/compare/CompareEqualProgrammer.go +410 -8
  423. package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
  424. package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
  425. package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
  426. package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
  427. package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
  428. package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
  429. package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
  430. package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
  431. package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
  432. package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
  433. package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
  434. package/native/core/programmers/helpers/CloneJoiner.go +32 -0
  435. package/native/core/programmers/helpers/FunctionProgrammer.go +6 -13
  436. package/native/core/programmers/helpers/NotationJoiner.go +86 -28
  437. package/native/core/programmers/helpers/StringifyJoinder.go +161 -51
  438. package/native/core/programmers/helpers/UnionExplorer.go +203 -61
  439. package/native/core/programmers/helpers/joiner_branch_coverage_test.go +116 -118
  440. package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
  441. package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
  442. package/native/core/programmers/iterate/check_template.go +344 -32
  443. package/native/core/programmers/iterate/iterate_check_coverage_test.go +76 -158
  444. package/native/core/programmers/iterate/iterate_utility_coverage_test.go +231 -270
  445. package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
  446. package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
  447. package/native/core/programmers/iterate/json_schema_object.go +49 -7
  448. package/native/core/programmers/iterate/json_schema_pattern_property_order_test.go +44 -0
  449. package/native/core/programmers/iterate/openapi_v3_downgrader.go +674 -0
  450. package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
  451. package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
  452. package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
  453. package/native/core/programmers/iterate/template_runtime_pattern.go +63 -7
  454. package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
  455. package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
  456. package/native/core/programmers/json/JsonStringifyProgrammer.go +47 -6
  457. package/native/core/programmers/llm/LlmApplicationProgrammer.go +21 -11
  458. package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
  459. package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
  460. package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
  461. package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
  462. package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
  463. package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
  464. package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
  465. package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
  466. package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
  467. package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
  468. package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
  469. package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +41 -22
  470. package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
  471. package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
  472. package/native/core/schemas/metadata/MetadataCollection.go +266 -25
  473. package/native/core/schemas/metadata/MetadataDefaultLibrary.go +81 -0
  474. package/native/core/schemas/metadata/MetadataDependency.go +388 -0
  475. package/native/core/schemas/metadata/MetadataObjectType.go +24 -22
  476. package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
  477. package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
  478. package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
  479. package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
  480. package/native/core/utils/PatternUtil.go +13 -0
  481. package/native/core/utils/PromiseTypeFactory.go +59 -0
  482. package/native/core/utils/ProtobufNameEncoder.go +8 -0
  483. package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
  484. package/native/go.mod +9 -1
  485. package/native/transform/CallExpressionTransformer.go +12 -0
  486. package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
  487. package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
  488. package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
  489. package/native/transform/features/protobuf/ProtobufMessageTransformer.go +1 -1
  490. package/package.json +12 -4
  491. package/src/executable/FileSystemIdentity.ts +222 -0
  492. package/src/executable/TypiaGenerateWizard.ts +386 -113
  493. package/src/functional.ts +30 -60
  494. package/src/internal/_ProtobufReader.ts +161 -46
  495. package/src/internal/_createStandardSchema.ts +15 -1
  496. package/src/internal/_decimal.ts +69 -0
  497. package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
  498. package/src/internal/_isFormatByte.ts +2 -5
  499. package/src/internal/_isFormatDate.ts +15 -2
  500. package/src/internal/_isFormatDateTime.ts +28 -2
  501. package/src/internal/_isFormatIri.ts +5 -2
  502. package/src/internal/_isFormatIriReference.ts +11 -3
  503. package/src/internal/_isFormatUriReference.ts +1 -1
  504. package/src/internal/_isMultipleOf.ts +8 -0
  505. package/src/internal/_isTypeFloat.ts +1 -1
  506. package/src/internal/_isTypeInt64.ts +1 -0
  507. package/src/internal/_isTypeInt64Bigint.ts +12 -0
  508. package/src/internal/_isTypeUint64.ts +1 -0
  509. package/src/internal/_isTypeUint64Bigint.ts +7 -0
  510. package/src/internal/_isUniqueItems.ts +134 -132
  511. package/src/internal/_jsonStringifyArray.ts +50 -0
  512. package/src/internal/_jsonStringifyElement.ts +19 -0
  513. package/src/internal/_jsonStringifyProperty.ts +30 -0
  514. package/src/internal/_llmApplicationFinalize.ts +6 -1
  515. package/src/internal/_notationAny.ts +9 -4
  516. package/src/internal/_notationAssign.ts +20 -0
  517. package/src/internal/_notationCamel.ts +31 -10
  518. package/src/internal/_notationKebab.ts +11 -0
  519. package/src/internal/_notationKeyCollision.ts +9 -0
  520. package/src/internal/_notationPascal.ts +19 -6
  521. package/src/internal/_notationSnake.ts +24 -21
  522. package/src/internal/_plainCloneAny.ts +208 -33
  523. package/src/internal/_randomArray.ts +13 -4
  524. package/src/internal/_randomFormatByte.ts +31 -1
  525. package/src/internal/_randomFormatDate.ts +6 -17
  526. package/src/internal/_randomFormatDatetime.ts +34 -15
  527. package/src/internal/_randomFormatDuration.ts +30 -13
  528. package/src/internal/_randomFormatEmail.ts +8 -2
  529. package/src/internal/_randomFormatHostname.ts +48 -1
  530. package/src/internal/_randomFormatIdnEmail.ts +18 -2
  531. package/src/internal/_randomFormatIdnHostname.ts +34 -2
  532. package/src/internal/_randomFormatIpv4.ts +43 -2
  533. package/src/internal/_randomFormatIpv6.ts +67 -2
  534. package/src/internal/_randomFormatIri.ts +3 -1
  535. package/src/internal/_randomFormatIriReference.ts +3 -1
  536. package/src/internal/_randomFormatJsonPointer.ts +28 -2
  537. package/src/internal/_randomFormatPassword.ts +11 -6
  538. package/src/internal/_randomFormatRegex.ts +22 -1
  539. package/src/internal/_randomFormatRelativeJsonPointer.ts +26 -6
  540. package/src/internal/_randomFormatTime.ts +46 -10
  541. package/src/internal/_randomFormatUri.ts +3 -1
  542. package/src/internal/_randomFormatUriReference.ts +3 -1
  543. package/src/internal/_randomFormatUriTemplate.ts +3 -1
  544. package/src/internal/_randomFormatUrl.ts +25 -2
  545. package/src/internal/_randomFormatUuid.ts +10 -6
  546. package/src/internal/_randomInteger.ts +87 -40
  547. package/src/internal/_randomMultiple.ts +245 -0
  548. package/src/internal/_randomNumber.ts +72 -55
  549. package/src/internal/_randomPattern.ts +29 -4
  550. package/src/internal/_randomStringLength.ts +116 -0
  551. package/src/internal/_stringLength.ts +5 -0
  552. package/src/internal/_validateReport.ts +5 -1
  553. package/src/internal/private/__notationRename.ts +21 -0
  554. package/src/internal/private/__randomComposition.ts +50 -0
  555. package/src/internal/private/__randomEpoch.ts +34 -0
  556. package/src/json.ts +2 -2
  557. package/src/module.ts +4 -6
  558. package/src/notations.ts +20 -4
  559. package/lib/internal/private/__notationCapitalize.d.ts +0 -1
  560. package/lib/internal/private/__notationCapitalize.js +0 -6
  561. package/lib/internal/private/__notationCapitalize.js.map +0 -1
  562. package/lib/internal/private/__notationCapitalize.mjs +0 -6
  563. package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
  564. package/lib/internal/private/__notationUnsnake.d.ts +0 -4
  565. package/lib/internal/private/__notationUnsnake.js +0 -26
  566. package/lib/internal/private/__notationUnsnake.js.map +0 -1
  567. package/lib/internal/private/__notationUnsnake.mjs +0 -15
  568. package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
  569. package/native/adapter/visit.go +0 -173
  570. package/native/adapter/visit_property_chain_edges_test.go +0 -129
  571. package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
  572. package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
  573. package/native/core/programmers/helpers/disable_function_programmer_declare.go +0 -10
  574. package/native/core/programmers/iterate/check_union_array_like.go +0 -422
  575. package/native/core/programmers/iterate/prune_object_properties.go +0 -105
  576. package/native/core/programmers/iterate/stringify_dynamic_properties.go +0 -219
  577. package/native/core/programmers/iterate/stringify_native.go +0 -14
  578. package/native/core/programmers/iterate/stringify_regular_properties.go +0 -112
  579. package/native/core/schemas/metadata/MetadataApplication.go +0 -41
  580. package/src/internal/private/__notationCapitalize.ts +0 -2
  581. package/src/internal/private/__notationUnsnake.ts +0 -24
@@ -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
  };
@@ -3,44 +3,219 @@ import { Resolved } from "@typia/interface";
3
3
  export const _plainCloneAny = <T>(value: T): Resolved<T> =>
4
4
  cloneMain(value) as Resolved<T>;
5
5
 
6
+ const NOT_NATIVE = Symbol("not-native");
7
+ const objectToString = Object.prototype.toString;
8
+ const getter = (prototype: object, key: PropertyKey): (() => unknown) =>
9
+ Object.getOwnPropertyDescriptor(prototype, key)!.get!;
10
+ const read = <T>(accessor: () => unknown, value: object): T =>
11
+ Reflect.apply(accessor, value, []) as T;
12
+ const tryRead = <T>(
13
+ accessor: (() => unknown) | undefined,
14
+ value: object,
15
+ ): { success: true; value: T } | { success: false } => {
16
+ if (accessor === undefined) return { success: false };
17
+ try {
18
+ return { success: true, value: read<T>(accessor, value) };
19
+ } catch {
20
+ return { success: false };
21
+ }
22
+ };
23
+
24
+ const arrayBufferByteLength = getter(ArrayBuffer.prototype, "byteLength");
25
+ const sharedArrayBufferByteLength =
26
+ typeof SharedArrayBuffer === "undefined"
27
+ ? undefined
28
+ : getter(SharedArrayBuffer.prototype, "byteLength");
29
+ const dataViewBuffer = getter(DataView.prototype, "buffer");
30
+ const dataViewByteLength = getter(DataView.prototype, "byteLength");
31
+ const dataViewByteOffset = getter(DataView.prototype, "byteOffset");
32
+ const typedArrayName = getter(
33
+ Object.getPrototypeOf(Uint8Array.prototype),
34
+ Symbol.toStringTag,
35
+ );
36
+ const blobSize =
37
+ typeof Blob === "undefined" ? undefined : getter(Blob.prototype, "size");
38
+ const blobType =
39
+ typeof Blob === "undefined" ? undefined : getter(Blob.prototype, "type");
40
+ const fileName =
41
+ typeof File === "undefined" ? undefined : getter(File.prototype, "name");
42
+ const fileLastModified =
43
+ typeof File === "undefined"
44
+ ? undefined
45
+ : getter(File.prototype, "lastModified");
46
+ const regexpSource = getter(RegExp.prototype, "source");
47
+ const regexpFlags = getter(RegExp.prototype, "flags");
48
+
49
+ const nativeTag = (value: object): string | undefined => {
50
+ let tagged: boolean;
51
+ try {
52
+ tagged = Symbol.toStringTag in value;
53
+ } catch {
54
+ return undefined;
55
+ }
56
+ if (!tagged)
57
+ try {
58
+ return objectToString.call(value);
59
+ } catch {
60
+ return undefined;
61
+ }
62
+
63
+ const date = tryRead<number>(Date.prototype.getTime, value);
64
+ if (date.success) return "[object Date]";
65
+ const typed = tryRead<string>(typedArrayName, value);
66
+ if (typed.success && typed.value !== undefined)
67
+ return `[object ${typed.value}]`;
68
+ if (tryRead<number>(arrayBufferByteLength, value).success)
69
+ return "[object ArrayBuffer]";
70
+ if (tryRead<number>(sharedArrayBufferByteLength, value).success)
71
+ return "[object SharedArrayBuffer]";
72
+ if (tryRead<ArrayBufferLike>(dataViewBuffer, value).success)
73
+ return "[object DataView]";
74
+ if (tryRead<string>(fileName, value).success) return "[object File]";
75
+ if (tryRead<number>(blobSize, value).success) return "[object Blob]";
76
+ if (tryRead<string>(regexpSource, value).success) return "[object RegExp]";
77
+ return undefined;
78
+ };
79
+
6
80
  const cloneMain = (value: any): any => {
7
81
  if (value === undefined) return undefined;
8
82
  else if (typeof value === "object")
9
83
  if (value === null) return null;
10
84
  else if (Array.isArray(value)) return value.map(cloneMain);
11
- else if (value instanceof Date) return new Date(value);
12
- else if (value instanceof Uint8Array) return new Uint8Array(value);
13
- else if (value instanceof Uint8ClampedArray)
14
- return new Uint8ClampedArray(value);
15
- else if (value instanceof Uint16Array) return new Uint16Array(value);
16
- else if (value instanceof Uint32Array) return new Uint32Array(value);
17
- else if (value instanceof BigUint64Array) return new BigUint64Array(value);
18
- else if (value instanceof Int8Array) return new Int8Array(value);
19
- else if (value instanceof Int16Array) return new Int16Array(value);
20
- else if (value instanceof Int32Array) return new Int32Array(value);
21
- else if (value instanceof BigInt64Array) return new BigInt64Array(value);
22
- else if (value instanceof Float32Array) return new Float32Array(value);
23
- else if (value instanceof Float64Array) return new Float64Array(value);
24
- else if (value instanceof ArrayBuffer) return value.slice(0);
25
- else if (value instanceof SharedArrayBuffer) return value.slice(0);
26
- else if (value instanceof DataView)
27
- return new DataView(value.buffer.slice(0));
28
- else if (typeof File !== "undefined" && value instanceof File)
29
- return new File([value], value.name, { type: value.type });
30
- else if (typeof Blob !== "undefined" && value instanceof Blob)
31
- return new Blob([value], { type: value.type });
32
- else if (value instanceof Set) return new Set([...value].map(cloneMain));
33
- else if (value instanceof Map)
34
- return new Map([...value].map(([k, v]) => [cloneMain(k), cloneMain(v)]));
35
- else if (value instanceof WeakSet || value instanceof WeakMap)
36
- throw new Error("WeakSet and WeakMap are not supported");
37
- else if (value.valueOf() !== value) return cloneMain(value.valueOf());
38
- else
39
- return Object.fromEntries(
40
- Object.entries(value)
41
- .map(([k, v]) => [k, cloneMain(v)])
42
- .filter(([, v]) => v !== undefined),
43
- );
85
+ else {
86
+ const native: any | typeof NOT_NATIVE = cloneNative(value);
87
+ if (native !== NOT_NATIVE) return native;
88
+ else if (value instanceof Set) return new Set([...value].map(cloneMain));
89
+ else if (value instanceof Map)
90
+ return new Map(
91
+ [...value].map(([k, v]) => [cloneMain(k), cloneMain(v)]),
92
+ );
93
+ else if (value instanceof WeakSet || value instanceof WeakMap)
94
+ throw new Error("WeakSet and WeakMap are not supported");
95
+ else {
96
+ const primitive: unknown = value.valueOf();
97
+ if (primitive !== value) return cloneMain(primitive);
98
+ return Object.fromEntries(
99
+ Object.entries(value)
100
+ .map(([k, v]) => [k, cloneMain(v)])
101
+ .filter(([, v]) => v !== undefined),
102
+ );
103
+ }
104
+ }
44
105
  else if (typeof value === "function") return undefined;
45
106
  return value;
46
107
  };
108
+
109
+ const cloneNative = (value: object): any | typeof NOT_NATIVE => {
110
+ const tag: string | undefined = nativeTag(value);
111
+ switch (tag) {
112
+ case "[object Date]": {
113
+ const time = tryRead<number>(Date.prototype.getTime, value);
114
+ return time.success ? new Date(time.value) : NOT_NATIVE;
115
+ }
116
+ case "[object Uint8Array]":
117
+ return new Uint8Array(value as ArrayLike<number>);
118
+ case "[object Uint8ClampedArray]":
119
+ return new Uint8ClampedArray(value as ArrayLike<number>);
120
+ case "[object Uint16Array]":
121
+ return new Uint16Array(value as ArrayLike<number>);
122
+ case "[object Uint32Array]":
123
+ return new Uint32Array(value as ArrayLike<number>);
124
+ case "[object BigUint64Array]":
125
+ return new BigUint64Array(value as ArrayLike<bigint>);
126
+ case "[object Int8Array]":
127
+ return new Int8Array(value as ArrayLike<number>);
128
+ case "[object Int16Array]":
129
+ return new Int16Array(value as ArrayLike<number>);
130
+ case "[object Int32Array]":
131
+ return new Int32Array(value as ArrayLike<number>);
132
+ case "[object BigInt64Array]":
133
+ return new BigInt64Array(value as ArrayLike<bigint>);
134
+ case "[object Float32Array]":
135
+ return new Float32Array(value as ArrayLike<number>);
136
+ case "[object Float64Array]":
137
+ return new Float64Array(value as ArrayLike<number>);
138
+ case "[object ArrayBuffer]": {
139
+ const byteLength = tryRead<number>(arrayBufferByteLength, value);
140
+ return byteLength.success
141
+ ? cloneBufferRange(value as ArrayBuffer, 0, byteLength.value, false)
142
+ : NOT_NATIVE;
143
+ }
144
+ case "[object SharedArrayBuffer]": {
145
+ const byteLength = tryRead<number>(sharedArrayBufferByteLength, value);
146
+ return byteLength.success
147
+ ? cloneBufferRange(
148
+ value as SharedArrayBuffer,
149
+ 0,
150
+ byteLength.value,
151
+ true,
152
+ )
153
+ : NOT_NATIVE;
154
+ }
155
+ case "[object DataView]": {
156
+ const buffer = tryRead<ArrayBufferLike>(dataViewBuffer, value);
157
+ if (!buffer.success) return NOT_NATIVE;
158
+ const byteOffset: number = read(dataViewByteOffset, value);
159
+ const byteLength: number = read(dataViewByteLength, value);
160
+ return new DataView(
161
+ cloneBufferRange(buffer.value, byteOffset, byteLength),
162
+ );
163
+ }
164
+ case "[object File]": {
165
+ const size = tryRead<number>(blobSize, value);
166
+ if (
167
+ typeof File === "undefined" ||
168
+ !size.success ||
169
+ blobType === undefined ||
170
+ fileName === undefined ||
171
+ fileLastModified === undefined
172
+ )
173
+ return NOT_NATIVE;
174
+ return new File([value as Blob], read<string>(fileName, value), {
175
+ type: read<string>(blobType, value),
176
+ lastModified: read<number>(fileLastModified, value),
177
+ });
178
+ }
179
+ case "[object Blob]": {
180
+ const size = tryRead<number>(blobSize, value);
181
+ if (
182
+ typeof Blob === "undefined" ||
183
+ !size.success ||
184
+ blobType === undefined
185
+ )
186
+ return NOT_NATIVE;
187
+ return new Blob([value as Blob], {
188
+ type: read<string>(blobType, value),
189
+ });
190
+ }
191
+ case "[object RegExp]": {
192
+ const source = tryRead<string>(regexpSource, value);
193
+ return source.success
194
+ ? new RegExp(source.value, read<string>(regexpFlags, value))
195
+ : NOT_NATIVE;
196
+ }
197
+ default:
198
+ return NOT_NATIVE;
199
+ }
200
+ };
201
+
202
+ const cloneBufferRange = (
203
+ input: ArrayBufferLike,
204
+ byteOffset: number,
205
+ byteLength: number,
206
+ shared?: boolean,
207
+ ): ArrayBuffer | SharedArrayBuffer => {
208
+ if (shared === undefined)
209
+ shared = tryRead<number>(sharedArrayBufferByteLength, input).success;
210
+ let output: ArrayBuffer | SharedArrayBuffer;
211
+ if (shared) {
212
+ if (typeof SharedArrayBuffer === "undefined")
213
+ throw new TypeError("SharedArrayBuffer is not available");
214
+ output = new SharedArrayBuffer(byteLength);
215
+ } else {
216
+ read<number>(arrayBufferByteLength, input);
217
+ output = new ArrayBuffer(byteLength);
218
+ }
219
+ new Uint8Array(output).set(new Uint8Array(input, byteOffset, byteLength));
220
+ return output;
221
+ };
@@ -1,5 +1,6 @@
1
1
  import type { OpenApi } from "@typia/interface";
2
2
 
3
+ import { _isUniqueItems } from "./_isUniqueItems";
3
4
  import { _randomInteger } from "./_randomInteger";
4
5
 
5
6
  const DEFAULT_MIN_ITEMS = 1;
@@ -27,8 +28,16 @@ export const _randomArray = <T>(
27
28
  });
28
29
  if (props.uniqueItems !== true)
29
30
  return new Array(count).fill(null).map((_, i) => props.element(i, count));
30
- const elements: Set<any> = new Set();
31
- while (elements.size !== count)
32
- elements.add(props.element(elements.size, count));
33
- return Array.from(elements);
31
+ const elements: T[] = [];
32
+ const maximumAttempts: number = count * 100 + 1000;
33
+ for (let attempts = 0; elements.length !== count; attempts++) {
34
+ if (attempts === maximumAttempts)
35
+ throw new Error(
36
+ "Unable to generate enough unique items; the element domain may be too small.",
37
+ );
38
+ const candidate: T = props.element(elements.length, count);
39
+ if (elements.every((element) => _isUniqueItems([element, candidate])))
40
+ elements.push(candidate);
41
+ }
42
+ return elements;
34
43
  };
@@ -1,3 +1,33 @@
1
- export const _randomFormatByte = (): string => FIXED;
1
+ import { _randomString } from "./_randomString";
2
+ import {
3
+ _ILengthProps,
4
+ _RANDOM_LENGTH_ERROR,
5
+ _randomLengthPick,
6
+ _randomLengthWindow,
7
+ } from "./_randomStringLength";
8
+
9
+ export const _randomFormatByte = (props?: _ILengthProps): string => {
10
+ if (props?.minLength === undefined && props?.maxLength === undefined)
11
+ return FIXED;
12
+ // Base64 encodes three bytes as four characters, so a valid length is always
13
+ // a multiple of four; the window is raised to the first multiple it contains
14
+ // and the draw steps by four from there. Every character `_randomString`
15
+ // emits is in the base64 alphabet, so the result needs no padding.
16
+ const window = _randomLengthWindow(props, { minimum: 0, spread: 16 });
17
+ const low: number = Math.ceil(window.low / 4) * 4;
18
+ if (low > window.high) throw new Error(_RANDOM_LENGTH_ERROR);
19
+ const length: number =
20
+ low +
21
+ 4 *
22
+ _randomLengthPick({
23
+ low: 0,
24
+ high: Math.floor((window.high - low) / 4),
25
+ });
26
+ return _randomString({
27
+ type: "string",
28
+ minLength: length,
29
+ maxLength: length,
30
+ });
31
+ };
2
32
 
3
33
  const FIXED = "vt7ekz4lIoNTTS9sDQYdWKharxIFAR54+z/umIxSgUM=";
@@ -1,18 +1,7 @@
1
- import { _randomInteger } from "./_randomInteger";
1
+ import { _ILengthProps, _randomFormatLength } from "./_randomStringLength";
2
+ import { __IEpochProps, __randomEpoch } from "./private/__randomEpoch";
2
3
 
3
- export const _randomFormatDate = (props?: {
4
- minimum?: number;
5
- maximum?: number;
6
- }) =>
7
- new Date(
8
- _randomInteger({
9
- type: "integer",
10
- minimum: props?.minimum ?? 0,
11
- maximum:
12
- (props?.maximum ?? props?.minimum === undefined)
13
- ? Date.now()
14
- : props.minimum + 365 * 24 * 60 * 60 * 1_000,
15
- }),
16
- )
17
- .toISOString()
18
- .substring(0, 10);
4
+ export const _randomFormatDate = (props?: __IEpochProps & _ILengthProps) =>
5
+ _randomFormatLength(props, () =>
6
+ new Date(__randomEpoch(props)).toISOString().substring(0, 10),
7
+ );
@@ -1,16 +1,35 @@
1
- import { _randomInteger } from "./_randomInteger";
1
+ import {
2
+ _ILengthProps,
3
+ _RANDOM_LENGTH_ERROR,
4
+ _randomLengthPick,
5
+ _randomLengthWindow,
6
+ } from "./_randomStringLength";
7
+ import { __randomDigits } from "./private/__randomComposition";
8
+ import { __IEpochProps, __randomEpoch } from "./private/__randomEpoch";
2
9
 
3
- export const _randomFormatDatetime = (props?: {
4
- minimum?: number;
5
- maximum?: number;
6
- }) =>
7
- new Date(
8
- _randomInteger({
9
- type: "integer",
10
- minimum: props?.minimum ?? 0,
11
- maximum:
12
- (props?.maximum ?? props?.minimum === undefined)
13
- ? Date.now()
14
- : props.minimum + 365 * 24 * 60 * 60 * 1_000,
15
- }),
16
- ).toISOString();
10
+ export const _randomFormatDatetime = (
11
+ props?: __IEpochProps & _ILengthProps,
12
+ ) => {
13
+ const instant = (): string => new Date(__randomEpoch(props)).toISOString();
14
+ if (props?.minLength === undefined && props?.maxLength === undefined)
15
+ return instant();
16
+ // `YYYY-MM-DDTHH:MM:SS` plus `Z` is the shortest instant, and a fractional
17
+ // second grows it one digit at a time. Because that fraction needs both a dot
18
+ // and at least one digit, 21 is the single length between the two forms that
19
+ // no instant can have.
20
+ const window = _randomLengthWindow(props, {
21
+ minimum: SECONDS + 1,
22
+ spread: 8,
23
+ });
24
+ let length: number = _randomLengthPick(window);
25
+ if (length === SECONDS + 2)
26
+ length = window.high >= SECONDS + 3 ? SECONDS + 3 : SECONDS + 1;
27
+ if (length < window.low || length > window.high)
28
+ throw new Error(_RANDOM_LENGTH_ERROR);
29
+ const base: string = instant().substring(0, SECONDS);
30
+ return length === SECONDS + 1
31
+ ? `${base}Z`
32
+ : `${base}.${__randomDigits(length - SECONDS - 2)}Z`;
33
+ };
34
+
35
+ const SECONDS = "0000-00-00T00:00:00".length;
@@ -1,19 +1,36 @@
1
1
  import { _randomInteger } from "./_randomInteger";
2
+ import {
3
+ _ILengthProps,
4
+ _randomLengthPick,
5
+ _randomLengthWindow,
6
+ } from "./_randomStringLength";
7
+ import { __randomNumeric } from "./private/__randomComposition";
2
8
 
3
- export const _randomFormatDuration = (): string => {
4
- const period: string = durate([
5
- ["Y", random(0, 100)],
6
- ["M", random(0, 12)],
7
- ["D", random(0, 31)],
8
- ]);
9
- const time: string = durate([
10
- ["H", random(0, 24)],
11
- ["M", random(0, 60)],
12
- ["S", random(0, 60)],
13
- ]);
14
- if (period.length + time.length === 0) return "PT0S";
15
- return `P${period}${time.length ? "T" : ""}${time}`;
9
+ export const _randomFormatDuration = (props?: _ILengthProps): string => {
10
+ if (props?.minLength === undefined && props?.maxLength === undefined) {
11
+ const period: string = durate([
12
+ ["Y", random(0, 100)],
13
+ ["M", random(0, 12)],
14
+ ["D", random(0, 31)],
15
+ ]);
16
+ const time: string = durate([
17
+ ["H", random(0, 24)],
18
+ ["M", random(0, 60)],
19
+ ["S", random(0, 60)],
20
+ ]);
21
+ if (period.length + time.length === 0) return "PT0S";
22
+ return `P${period}${time.length ? "T" : ""}${time}`;
23
+ }
24
+ // A single designator carries an unbounded digit count, so `P<n>Y` expresses
25
+ // every length from three upward and `P1Y` is the shortest duration there is.
26
+ const length: number = _randomLengthPick(
27
+ _randomLengthWindow(props, { minimum: MINIMUM, spread: 6 }),
28
+ );
29
+ return `P${__randomNumeric(length - MINIMUM + 1)}Y`;
16
30
  };
31
+
32
+ const MINIMUM = "P1Y".length;
33
+
17
34
  const durate = (elements: [string, number][]) =>
18
35
  elements
19
36
  .filter(([_unit, value]) => value !== 0)
@@ -1,7 +1,13 @@
1
1
  import { _randomString } from "./_randomString";
2
+ import { _ILengthProps, _randomSegmentLength } from "./_randomStringLength";
2
3
 
3
- export const _randomFormatEmail = (): string =>
4
- `${random(10)}@${random(10)}.${random(3)}`;
4
+ export const _randomFormatEmail = (props?: _ILengthProps): string => {
5
+ if (props?.minLength === undefined && props?.maxLength === undefined)
6
+ return `${random(10)}@${random(10)}.${random(3)}`;
7
+ // `<local>@<domain>.<tld>`: the local part absorbs the requested length while
8
+ // a one-character domain and tld keep the fixed overhead (`@`, `.`) minimal.
9
+ return `${_randomSegmentLength(props, 4, 10, 1)}@${random(1)}.${random(1)}`;
10
+ };
5
11
 
6
12
  const random = (length: number) =>
7
13
  _randomString({
@@ -1,6 +1,53 @@
1
+ import { _randomInteger } from "./_randomInteger";
1
2
  import { _randomString } from "./_randomString";
3
+ import { _ILengthProps } from "./_randomStringLength";
2
4
 
3
- export const _randomFormatHostname = (): string => `${random(10)}.${random(3)}`;
5
+ export const _randomFormatHostname = (props?: _ILengthProps): string => {
6
+ if (props?.minLength === undefined && props?.maxLength === undefined)
7
+ return `${random(10)}.${random(3)}`;
8
+ // A hostname is dot-joined labels of 1..63 chars whose total is capped at 253,
9
+ // so the requested length is realized by splitting it across enough labels.
10
+ return _randomHostnameLabels(pickLength(props));
11
+ };
12
+
13
+ const MAX_TOTAL = 253;
14
+ const MAX_LABEL = 63;
15
+
16
+ const pickLength = (props: _ILengthProps): number => {
17
+ let low: number = props.minLength === undefined ? 1 : props.minLength;
18
+ if (low < 1) low = 1;
19
+ const high: number =
20
+ props.maxLength === undefined
21
+ ? Math.min(MAX_TOTAL, low + 14)
22
+ : Math.min(MAX_TOTAL, props.maxLength);
23
+ if (high < low)
24
+ throw new Error(
25
+ "unable to generate a random hostname satisfying both the format and the length constraints.",
26
+ );
27
+ return _randomInteger({ type: "integer", minimum: low, maximum: high });
28
+ };
29
+
30
+ /**
31
+ * Builds dot-joined hostname labels totaling exactly `length` characters, each
32
+ * label within 63 chars. Shared with the idn-hostname generator, which reserves
33
+ * a fixed `.<tld>` suffix and realizes the rest as these leading labels.
34
+ */
35
+ export const _randomHostnameLabels = (length: number): string => {
36
+ const parts: string[] = [];
37
+ let remaining: number = length;
38
+ while (remaining > MAX_LABEL + 1) {
39
+ // one full label plus its joining dot
40
+ parts.push(random(MAX_LABEL));
41
+ remaining -= MAX_LABEL + 1;
42
+ }
43
+ if (remaining <= MAX_LABEL) parts.push(random(remaining));
44
+ else {
45
+ // remaining === MAX_LABEL + 1: two labels keep every label within 63 chars
46
+ parts.push(random(MAX_LABEL - 1));
47
+ parts.push(random(1));
48
+ }
49
+ return parts.join(".");
50
+ };
4
51
 
5
52
  const random = (length: number) =>
6
53
  _randomString({ type: "string", minLength: length, maxLength: length });
@@ -1,3 +1,19 @@
1
- import { _randomFormatEmail } from "./_randomFormatEmail";
1
+ import { _randomString } from "./_randomString";
2
+ import { _ILengthProps, _randomSegmentLength } from "./_randomStringLength";
2
3
 
3
- export const _randomFormatIdnEmail = (): string => _randomFormatEmail();
4
+ export const _randomFormatIdnEmail = (props?: _ILengthProps): string => {
5
+ if (props?.minLength === undefined && props?.maxLength === undefined)
6
+ return `${random(10)}@${random(10)}.${random(3)}`;
7
+ // `_isFormatIdnEmail` requires a >=2-char TLD (`(…\.)+[^…]{2,}`), so the fixed
8
+ // overhead is `@` + domain(1) + `.` + tld(2) = 5 and the local part absorbs the
9
+ // requested length; a one-character TLD (the non-idn generator's length path)
10
+ // would be rejected by the idn checker on every draw.
11
+ return `${_randomSegmentLength(props, 5, 10, 1)}@${random(1)}.${random(2)}`;
12
+ };
13
+
14
+ const random = (length: number) =>
15
+ _randomString({
16
+ type: "string",
17
+ minLength: length,
18
+ maxLength: length,
19
+ });
@@ -1,3 +1,35 @@
1
- import { _randomFormatHostname } from "./_randomFormatHostname";
1
+ import { _randomHostnameLabels } from "./_randomFormatHostname";
2
+ import { _randomInteger } from "./_randomInteger";
3
+ import { _randomString } from "./_randomString";
4
+ import { _ILengthProps } from "./_randomStringLength";
2
5
 
3
- export const _randomFormatIdnHostname = (): string => _randomFormatHostname();
6
+ export const _randomFormatIdnHostname = (props?: _ILengthProps): string => {
7
+ if (props?.minLength === undefined && props?.maxLength === undefined)
8
+ return `${random(10)}.${random(3)}`;
9
+ // `_isFormatIdnHostname` requires at least one label, a dot, and a >=2-char
10
+ // TLD (`(…\.)+[a-z¡-￿]{2,}`), none of which the non-idn hostname generator
11
+ // guarantees on its length path (it can emit a single dotless label). Reserve
12
+ // a fixed `.<2-char TLD>` and realize the rest as dot-joined leading labels.
13
+ const length: number = pickLength(props);
14
+ return `${_randomHostnameLabels(length - 3)}.${random(2)}`;
15
+ };
16
+
17
+ const MAX_TOTAL = 253;
18
+ const MIN_TOTAL = 4; // the shortest idn hostname, `x.yy`: label(1) + `.` + tld(2)
19
+
20
+ const pickLength = (props: _ILengthProps): number => {
21
+ let low: number = props.minLength === undefined ? MIN_TOTAL : props.minLength;
22
+ if (low < MIN_TOTAL) low = MIN_TOTAL;
23
+ const high: number =
24
+ props.maxLength === undefined
25
+ ? Math.min(MAX_TOTAL, low + 14)
26
+ : Math.min(MAX_TOTAL, props.maxLength);
27
+ if (high < low)
28
+ throw new Error(
29
+ "unable to generate a random idn hostname satisfying both the format and the length constraints.",
30
+ );
31
+ return _randomInteger({ type: "integer", minimum: low, maximum: high });
32
+ };
33
+
34
+ const random = (length: number) =>
35
+ _randomString({ type: "string", minLength: length, maxLength: length });