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
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,94 @@ 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
+ }
80
87
  }
81
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
+ });
97
+ }
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}. Its tenth byte is bounded
114
+ * twice over, by {@link lastVarintByte}: it may neither continue into an
115
+ * eleventh byte nor carry payload above bit 63. Skipping is where that is
116
+ * easiest to get wrong, because this path discards the bytes it reads and so
117
+ * never notices a value it could not have represented. Relaxing either bound
118
+ * here would accept a varint that `varint32` and `varint64` reject, making
119
+ * the limit depend on which method happens to consume the value.
120
+ */
121
+ public skipVarint(): void {
122
+ this.atomic(() => {
123
+ for (let i: number = 1; i < VARINT_MAX_BYTES; ++i)
124
+ if ((this.u8() & 0x80) === 0) return;
125
+ this.lastVarintByte();
126
+ });
89
127
  }
90
128
 
91
129
  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
- }
130
+ this.atomic(() => {
131
+ switch (wireType) {
132
+ case ProtobufWire.VARIANT:
133
+ this.skipVarint();
134
+ break;
135
+ case ProtobufWire.I64:
136
+ this.skip(8);
137
+ break;
138
+ case ProtobufWire.LEN:
139
+ this.skip(this.uint32());
140
+ break;
141
+ case ProtobufWire.START_GROUP:
142
+ while ((wireType = this.uint32() & 0x07) !== ProtobufWire.END_GROUP)
143
+ this.skipType(wireType);
144
+ break;
145
+ case ProtobufWire.I32:
146
+ this.skip(4);
147
+ break;
148
+ default:
149
+ throw error(`invalid wire type ${wireType} at offset ${this.ptr}.`);
150
+ }
151
+ });
112
152
  }
113
153
 
114
154
  private varint32(): number {
@@ -130,13 +170,13 @@ export class _ProtobufReader {
130
170
  value |= ((loaded = this.u8()) & 0xf) << 28;
131
171
  if (loaded < 0x80) return value;
132
172
 
133
- // increment position until there is no continuation bit or until we read 10 bytes
134
- if (this.u8() < 0x80) return value;
173
+ // increment position until there is no continuation bit, or until this read
174
+ // reaches VARINT_MAX_BYTES and the value can hold no further bits
135
175
  if (this.u8() < 0x80) return value;
136
176
  if (this.u8() < 0x80) return value;
137
177
  if (this.u8() < 0x80) return value;
138
178
  if (this.u8() < 0x80) return value;
139
-
179
+ this.lastVarintByte();
140
180
  return value;
141
181
  }
142
182
 
@@ -171,17 +211,92 @@ export class _ProtobufReader {
171
211
  value |= ((loaded = this.u8n()) & BigInt(0x7f)) << BigInt(56);
172
212
  if (loaded < BigInt(0x80)) return value;
173
213
 
174
- value |= (this.u8n() & BigInt(0x01)) << BigInt(63);
175
- return BigInt.asIntN(64, value);
214
+ value |= BigInt(this.lastVarintByte()) << BigInt(63);
215
+ return BigInt.asUintN(64, value);
216
+ }
217
+
218
+ /**
219
+ * Read the only byte whose varint payload is limited to bit 63.
220
+ *
221
+ * Two distinct faults meet on this byte, and each is named for what it is. A
222
+ * continuation bit means the varint would occupy an eleventh byte, which no
223
+ * 64-bit value can reach. Any other payload bit means the varint terminates
224
+ * within its ten bytes but carries a value bit above 63. Reporting the second
225
+ * as a length fault would tell the caller something untrue about a payload
226
+ * that is exactly ten bytes long.
227
+ */
228
+ private lastVarintByte(): number {
229
+ const loaded: number = this.u8();
230
+ if ((loaded & 0x80) !== 0)
231
+ throw error(`varint exceeds ${VARINT_MAX_BYTES} bytes.`);
232
+ if (loaded > 0x01) throw error(`varint exceeds ${VARINT_MAX_BITS} bits.`);
233
+ return loaded;
176
234
  }
177
235
 
178
236
  private u8(): number {
179
- return this.view.getUint8(this.ptr++);
237
+ return this.view.getUint8(this.take(1));
180
238
  }
181
239
 
182
240
  private u8n(): bigint {
183
241
  return BigInt(this.u8());
184
242
  }
243
+
244
+ private take(length: number): number {
245
+ this.validate(length);
246
+ const from: number = this.ptr;
247
+ this.ptr += length;
248
+ return from;
249
+ }
250
+
251
+ private atomic<T>(closure: () => T): T {
252
+ const index: number = this.ptr;
253
+ const end: number = this.end;
254
+ try {
255
+ return closure();
256
+ } catch (thrown) {
257
+ this.ptr = index;
258
+ this.end = end;
259
+ throw thrown;
260
+ }
261
+ }
262
+
263
+ private validate(length: number): void {
264
+ if (
265
+ Number.isSafeInteger(length) === false ||
266
+ length < 0 ||
267
+ length > this.size() - this.ptr
268
+ )
269
+ throw error("buffer overflow.");
270
+ }
185
271
  }
186
272
 
187
- const utf8 = new Singleton(() => new TextDecoder("utf-8"));
273
+ /**
274
+ * Builds every fault this reader raises, so each one names typia as its source.
275
+ *
276
+ * Every decode error a caller can see must be attributable, and the prefix is
277
+ * what attributes it. Composing it here rather than at each throw keeps a new
278
+ * fault from silently shipping without it.
279
+ */
280
+ const error = (message: string): Error =>
281
+ new Error(`Error on typia.protobuf.decode(): ${message}`);
282
+
283
+ /**
284
+ * The most bytes a varint may occupy: a 64-bit value in seven-bit groups.
285
+ *
286
+ * Every path reads no further than its tenth byte and accepts only bit 63 from
287
+ * that byte. This constant keeps the loop-driven skip path on the same limit.
288
+ */
289
+ const VARINT_MAX_BYTES = 10;
290
+
291
+ /**
292
+ * The widest value a varint may carry: the 64-bit Protocol Buffer wire domain.
293
+ *
294
+ * The tenth byte reaches only bit 63, so a payload bit above it belongs to no
295
+ * representable value. This names the overflow fault apart from the length
296
+ * one.
297
+ */
298
+ const VARINT_MAX_BITS = 64;
299
+
300
+ const utf8 = new Singleton(
301
+ () => new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }),
302
+ );
@@ -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;