typia 7.0.0-dev.20241005 → 7.0.0-dev.20241007

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 (630) hide show
  1. package/lib/IRandomGenerator.d.ts +17 -21
  2. package/lib/factories/ExpressionFactory.js +2 -2
  3. package/lib/factories/ExpressionFactory.js.map +1 -1
  4. package/lib/factories/LiteralFactory.d.ts +1 -1
  5. package/lib/factories/LiteralFactory.js +20 -17
  6. package/lib/factories/LiteralFactory.js.map +1 -1
  7. package/lib/factories/MetadataCommentTagFactory.js +28 -6
  8. package/lib/factories/MetadataCommentTagFactory.js.map +1 -1
  9. package/lib/index.mjs +184 -1437
  10. package/lib/index.mjs.map +1 -1
  11. package/lib/internal/$randomArray.d.ts +1 -1
  12. package/lib/internal/$randomArray.js +1 -0
  13. package/lib/internal/$randomArray.js.map +1 -1
  14. package/lib/internal/$randomBigint.d.ts +1 -1
  15. package/lib/internal/$randomBigint.js +1 -6
  16. package/lib/internal/$randomBigint.js.map +1 -1
  17. package/lib/internal/$randomFormatByte.d.ts +1 -0
  18. package/lib/internal/$randomFormatByte.js +7 -0
  19. package/lib/internal/$randomFormatByte.js.map +1 -0
  20. package/lib/internal/$randomFormatDate.js +1 -0
  21. package/lib/internal/$randomFormatDate.js.map +1 -1
  22. package/lib/internal/$randomFormatDatetime.js +1 -0
  23. package/lib/internal/$randomFormatDatetime.js.map +1 -1
  24. package/lib/internal/$randomFormatDuration.js +1 -0
  25. package/lib/internal/$randomFormatDuration.js.map +1 -1
  26. package/lib/internal/$randomFormatIpv4.js +1 -0
  27. package/lib/internal/$randomFormatIpv4.js.map +1 -1
  28. package/lib/internal/$randomFormatIpv6.js +1 -0
  29. package/lib/internal/$randomFormatIpv6.js.map +1 -1
  30. package/lib/internal/$randomFormatRelativeJsonPointer.js +5 -5
  31. package/lib/internal/$randomFormatRelativeJsonPointer.js.map +1 -1
  32. package/lib/internal/$randomFormatTime.js +2 -1
  33. package/lib/internal/$randomFormatTime.js.map +1 -1
  34. package/lib/internal/$randomFormatUuid.d.ts +1 -0
  35. package/lib/internal/{$randomUuid.js → $randomFormatUuid.js} +4 -4
  36. package/lib/internal/$randomFormatUuid.js.map +1 -0
  37. package/lib/internal/$randomInteger.d.ts +1 -1
  38. package/lib/internal/$randomInteger.js +7 -4
  39. package/lib/internal/$randomInteger.js.map +1 -1
  40. package/lib/internal/$randomNumber.d.ts +1 -1
  41. package/lib/internal/$randomNumber.js +14 -11
  42. package/lib/internal/$randomNumber.js.map +1 -1
  43. package/lib/internal/$randomPick.js +1 -0
  44. package/lib/internal/$randomPick.js.map +1 -1
  45. package/lib/internal/$randomString.d.ts +1 -1
  46. package/lib/internal/$randomString.js +4 -1
  47. package/lib/internal/$randomString.js.map +1 -1
  48. package/lib/llm.d.ts +2 -4
  49. package/lib/llm.js +1 -28
  50. package/lib/llm.js.map +1 -1
  51. package/lib/module.d.ts +4 -8
  52. package/lib/module.js +3 -7
  53. package/lib/module.js.map +1 -1
  54. package/lib/programmers/FeatureProgrammer.js +1 -1
  55. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  56. package/lib/programmers/RandomProgrammer.js +281 -276
  57. package/lib/programmers/RandomProgrammer.js.map +1 -1
  58. package/lib/programmers/helpers/FunctionProgrammer.d.ts +1 -8
  59. package/lib/programmers/helpers/FunctionProgrammer.js +2 -24
  60. package/lib/programmers/helpers/FunctionProgrammer.js.map +1 -1
  61. package/lib/programmers/helpers/RandomJoiner.d.ts +6 -11
  62. package/lib/programmers/helpers/RandomJoiner.js +68 -41
  63. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  64. package/lib/programmers/helpers/disable_function_programmer_declare.js +1 -4
  65. package/lib/programmers/helpers/disable_function_programmer_declare.js.map +1 -1
  66. package/lib/transformers/features/json/JsonApplicationTransformer.js +1 -1
  67. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  68. package/lib/transformers/features/llm/LlmApplicationTransformer.js +2 -2
  69. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  70. package/lib/transformers/features/llm/LlmSchemaTransformer.js +1 -1
  71. package/lib/transformers/features/llm/LlmSchemaTransformer.js.map +1 -1
  72. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js +1 -1
  73. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -1
  74. package/package.json +1 -1
  75. package/src/CamelCase.ts +75 -75
  76. package/src/IRandomGenerator.ts +11 -27
  77. package/src/PascalCase.ts +71 -71
  78. package/src/Primitive.ts +92 -92
  79. package/src/Resolved.ts +74 -74
  80. package/src/SnakeCase.ts +126 -126
  81. package/src/executable/TypiaGenerateWizard.ts +83 -83
  82. package/src/executable/TypiaPatchWizard.ts +42 -42
  83. package/src/executable/TypiaSetupWizard.ts +174 -174
  84. package/src/executable/setup/ArgumentParser.ts +42 -42
  85. package/src/executable/setup/CommandExecutor.ts +8 -8
  86. package/src/executable/setup/FileRetriever.ts +19 -19
  87. package/src/executable/setup/PackageManager.ts +87 -87
  88. package/src/executable/setup/PluginConfigurator.ts +69 -69
  89. package/src/executable/typia.ts +55 -55
  90. package/src/factories/CommentFactory.ts +79 -79
  91. package/src/factories/ExpressionFactory.ts +164 -164
  92. package/src/factories/IdentifierFactory.ts +89 -89
  93. package/src/factories/JsonMetadataFactory.ts +63 -63
  94. package/src/factories/LiteralFactory.ts +18 -15
  95. package/src/factories/MetadataCollection.ts +278 -278
  96. package/src/factories/MetadataCommentTagFactory.ts +650 -622
  97. package/src/factories/MetadataFactory.ts +400 -400
  98. package/src/factories/MetadataTypeTagFactory.ts +385 -385
  99. package/src/factories/MetadataTypeTagSchemaFactory.ts +82 -82
  100. package/src/factories/NumericRangeFactory.ts +72 -72
  101. package/src/factories/ProtobufFactory.ts +275 -275
  102. package/src/factories/StatementFactory.ts +90 -90
  103. package/src/factories/TemplateFactory.ts +64 -64
  104. package/src/factories/TypeFactory.ts +140 -140
  105. package/src/factories/internal/metadata/IMetadataIteratorProps.ts +16 -16
  106. package/src/factories/internal/metadata/emplace_metadata_alias.ts +32 -32
  107. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +39 -39
  108. package/src/factories/internal/metadata/emplace_metadata_object.ts +206 -206
  109. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +56 -56
  110. package/src/factories/internal/metadata/explore_metadata.ts +30 -30
  111. package/src/factories/internal/metadata/iterate_metadata.ts +54 -54
  112. package/src/factories/internal/metadata/iterate_metadata_alias.ts +28 -28
  113. package/src/factories/internal/metadata/iterate_metadata_array.ts +63 -63
  114. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  115. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +28 -28
  116. package/src/factories/internal/metadata/iterate_metadata_collection.ts +145 -145
  117. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +32 -32
  118. package/src/factories/internal/metadata/iterate_metadata_constant.ts +76 -76
  119. package/src/factories/internal/metadata/iterate_metadata_escape.ts +49 -49
  120. package/src/factories/internal/metadata/iterate_metadata_function.ts +88 -88
  121. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +216 -216
  122. package/src/factories/internal/metadata/iterate_metadata_map.ts +52 -52
  123. package/src/factories/internal/metadata/iterate_metadata_native.ts +236 -236
  124. package/src/factories/internal/metadata/iterate_metadata_object.ts +27 -27
  125. package/src/factories/internal/metadata/iterate_metadata_set.ts +39 -39
  126. package/src/factories/internal/metadata/iterate_metadata_sort.ts +83 -83
  127. package/src/factories/internal/metadata/iterate_metadata_template.ts +42 -42
  128. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +26 -26
  129. package/src/factories/internal/metadata/iterate_metadata_union.ts +19 -19
  130. package/src/internal/$accessExpressionAsString.ts +46 -46
  131. package/src/internal/$assertGuard.ts +13 -13
  132. package/src/internal/$functionalTypeGuardErrorFactory.ts +4 -4
  133. package/src/internal/$httpFormDataReadArray.ts +4 -4
  134. package/src/internal/$httpFormDataReadBigint.ts +18 -18
  135. package/src/internal/$httpFormDataReadBlob.ts +10 -10
  136. package/src/internal/$httpFormDataReadBoolean.ts +16 -16
  137. package/src/internal/$httpFormDataReadFile.ts +10 -10
  138. package/src/internal/$httpFormDataReadNumber.ts +15 -15
  139. package/src/internal/$httpFormDataReadString.ts +10 -10
  140. package/src/internal/$httpHeaderReadBigint.ts +10 -10
  141. package/src/internal/$httpHeaderReadBoolean.ts +8 -8
  142. package/src/internal/$httpHeaderReadNumber.ts +7 -7
  143. package/src/internal/$httpParameterBigint.ts +10 -10
  144. package/src/internal/$httpParameterBoolean.ts +8 -8
  145. package/src/internal/$httpParameterNumber.ts +7 -7
  146. package/src/internal/$httpParameterString.ts +2 -2
  147. package/src/internal/$httpQueryParseURLSearchParams.ts +10 -10
  148. package/src/internal/$httpQueryReadArray.ts +4 -4
  149. package/src/internal/$httpQueryReadBigint.ts +12 -12
  150. package/src/internal/$httpQueryReadBoolean.ts +14 -14
  151. package/src/internal/$httpQueryReadNumber.ts +9 -9
  152. package/src/internal/$httpQueryReadString.ts +4 -4
  153. package/src/internal/$isBetween.ts +2 -2
  154. package/src/internal/$isBigintString.ts +8 -8
  155. package/src/internal/$jsonStringifyNumber.ts +12 -12
  156. package/src/internal/$jsonStringifyRest.ts +3 -3
  157. package/src/internal/$jsonStringifyString.ts +43 -43
  158. package/src/internal/$jsonStringifyTail.ts +2 -2
  159. package/src/internal/$llmApplicationFinalize.ts +18 -18
  160. package/src/internal/$miscCloneAny.ts +48 -48
  161. package/src/internal/$notationAny.ts +37 -37
  162. package/src/internal/$notationCamel.ts +13 -13
  163. package/src/internal/$notationPascal.ts +8 -8
  164. package/src/internal/$notationSnake.ts +43 -43
  165. package/src/internal/$randomArray.ts +21 -20
  166. package/src/internal/$randomBigint.ts +6 -15
  167. package/src/internal/$randomBoolean.ts +1 -1
  168. package/src/internal/{$randomByte.ts → $randomFormatByte.ts} +3 -3
  169. package/src/internal/$randomFormatDate.ts +18 -17
  170. package/src/internal/$randomFormatDatetime.ts +16 -15
  171. package/src/internal/$randomFormatDuration.ts +27 -26
  172. package/src/internal/$randomFormatEmail.ts +11 -11
  173. package/src/internal/$randomFormatHostname.ts +6 -6
  174. package/src/internal/$randomFormatIdnEmail.ts +3 -3
  175. package/src/internal/$randomFormatIdnHostname.ts +3 -3
  176. package/src/internal/$randomFormatIpv4.ts +11 -10
  177. package/src/internal/$randomFormatIpv6.ts +11 -10
  178. package/src/internal/$randomFormatIri.ts +3 -3
  179. package/src/internal/$randomFormatIriReference.ts +3 -3
  180. package/src/internal/$randomFormatJsonPointer.ts +7 -7
  181. package/src/internal/$randomFormatPassword.ts +8 -8
  182. package/src/internal/$randomFormatRegex.ts +4 -4
  183. package/src/internal/$randomFormatRelativeJsonPointer.ts +8 -8
  184. package/src/internal/$randomFormatTime.ts +14 -13
  185. package/src/internal/$randomFormatUri.ts +3 -3
  186. package/src/internal/$randomFormatUriReference.ts +3 -3
  187. package/src/internal/$randomFormatUriTemplate.ts +3 -3
  188. package/src/internal/$randomFormatUrl.ts +11 -11
  189. package/src/internal/{$randomUuid.ts → $randomFormatUuid.ts} +6 -6
  190. package/src/internal/$randomInteger.ts +47 -44
  191. package/src/internal/$randomNumber.ts +74 -71
  192. package/src/internal/$randomPattern.ts +10 -10
  193. package/src/internal/$randomPick.ts +9 -8
  194. package/src/internal/$randomString.ts +24 -24
  195. package/src/internal/$throwTypeGuardError.ts +5 -5
  196. package/src/internal/$validateReport.ts +13 -13
  197. package/src/internal/private/$__notationCapitalize.ts +2 -2
  198. package/src/internal/private/$__notationUnsnake.ts +24 -24
  199. package/src/json.ts +651 -651
  200. package/src/llm.ts +178 -186
  201. package/src/module.ts +933 -945
  202. package/src/programmers/AssertProgrammer.ts +456 -456
  203. package/src/programmers/CheckerProgrammer.ts +1610 -1610
  204. package/src/programmers/FeatureProgrammer.ts +616 -616
  205. package/src/programmers/ImportProgrammer.ts +109 -109
  206. package/src/programmers/IsProgrammer.ts +273 -273
  207. package/src/programmers/RandomProgrammer.ts +393 -381
  208. package/src/programmers/TypiaProgrammer.ts +171 -171
  209. package/src/programmers/ValidateProgrammer.ts +430 -430
  210. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +153 -153
  211. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +125 -125
  212. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +115 -115
  213. package/src/programmers/functional/FunctionalIsFunctionProgrammer.ts +72 -72
  214. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +113 -113
  215. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +116 -116
  216. package/src/programmers/functional/FunctionalValidateFunctionProgrammer.ts +123 -123
  217. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +281 -281
  218. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +134 -134
  219. package/src/programmers/functional/internal/FunctionalGeneralProgrammer.ts +34 -34
  220. package/src/programmers/helpers/AtomicPredicator.ts +35 -35
  221. package/src/programmers/helpers/CloneJoiner.ts +143 -143
  222. package/src/programmers/helpers/FunctionProgrammer.ts +67 -101
  223. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  224. package/src/programmers/helpers/NotationJoiner.ts +144 -144
  225. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  226. package/src/programmers/helpers/PruneJoiner.ts +148 -148
  227. package/src/programmers/helpers/RandomJoiner.ts +168 -162
  228. package/src/programmers/helpers/StringifyJoinder.ts +115 -115
  229. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  230. package/src/programmers/helpers/UnionExplorer.ts +372 -372
  231. package/src/programmers/helpers/UnionPredicator.ts +77 -77
  232. package/src/programmers/helpers/disable_function_programmer_declare.ts +1 -4
  233. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +96 -96
  234. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +96 -96
  235. package/src/programmers/http/HttpAssertQueryProgrammer.ts +102 -102
  236. package/src/programmers/http/HttpFormDataProgrammer.ts +308 -308
  237. package/src/programmers/http/HttpHeadersProgrammer.ts +404 -404
  238. package/src/programmers/http/HttpIsFormDataProgrammer.ts +108 -108
  239. package/src/programmers/http/HttpIsHeadersProgrammer.ts +108 -108
  240. package/src/programmers/http/HttpIsQueryProgrammer.ts +114 -114
  241. package/src/programmers/http/HttpParameterProgrammer.ts +115 -115
  242. package/src/programmers/http/HttpQueryProgrammer.ts +333 -333
  243. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +90 -90
  244. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +90 -90
  245. package/src/programmers/http/HttpValidateQueryProgrammer.ts +96 -96
  246. package/src/programmers/internal/application_array.ts +56 -56
  247. package/src/programmers/internal/application_bigint.ts +25 -25
  248. package/src/programmers/internal/application_boolean.ts +25 -25
  249. package/src/programmers/internal/application_description.ts +12 -12
  250. package/src/programmers/internal/application_escaped.ts +96 -96
  251. package/src/programmers/internal/application_number.ts +25 -25
  252. package/src/programmers/internal/application_plugin.ts +19 -19
  253. package/src/programmers/internal/application_string.ts +25 -25
  254. package/src/programmers/internal/application_templates.ts +64 -64
  255. package/src/programmers/internal/application_title.ts +20 -20
  256. package/src/programmers/internal/application_union_discriminator.ts +35 -35
  257. package/src/programmers/internal/application_v30_alias.ts +59 -59
  258. package/src/programmers/internal/application_v30_native.ts +29 -29
  259. package/src/programmers/internal/application_v30_object.ts +165 -165
  260. package/src/programmers/internal/application_v30_schema.ts +220 -220
  261. package/src/programmers/internal/application_v30_tuple.ts +33 -33
  262. package/src/programmers/internal/application_v31_alias.ts +47 -47
  263. package/src/programmers/internal/application_v31_constant.ts +29 -29
  264. package/src/programmers/internal/application_v31_native.ts +25 -25
  265. package/src/programmers/internal/application_v31_object.ts +147 -147
  266. package/src/programmers/internal/application_v31_schema.ts +215 -215
  267. package/src/programmers/internal/application_v31_tuple.ts +22 -22
  268. package/src/programmers/internal/check_array_length.ts +46 -46
  269. package/src/programmers/internal/check_bigint.ts +49 -49
  270. package/src/programmers/internal/check_dynamic_key.ts +201 -201
  271. package/src/programmers/internal/check_dynamic_properties.ts +208 -208
  272. package/src/programmers/internal/check_everything.ts +23 -23
  273. package/src/programmers/internal/check_native.ts +27 -27
  274. package/src/programmers/internal/check_number.ts +111 -111
  275. package/src/programmers/internal/check_object.ts +75 -75
  276. package/src/programmers/internal/check_string.ts +49 -49
  277. package/src/programmers/internal/check_template.ts +48 -48
  278. package/src/programmers/internal/check_union_array_like.ts +334 -334
  279. package/src/programmers/internal/decode_union_object.ts +116 -116
  280. package/src/programmers/internal/feature_object_entries.ts +61 -61
  281. package/src/programmers/internal/llm_schema_array.ts +22 -22
  282. package/src/programmers/internal/llm_schema_escaped.ts +84 -84
  283. package/src/programmers/internal/llm_schema_native.ts +17 -17
  284. package/src/programmers/internal/llm_schema_object.ts +132 -132
  285. package/src/programmers/internal/llm_schema_station.ts +190 -190
  286. package/src/programmers/internal/llm_schema_tuple.ts +31 -31
  287. package/src/programmers/internal/metadata_to_pattern.ts +42 -42
  288. package/src/programmers/internal/postfix_of_tuple.ts +5 -5
  289. package/src/programmers/internal/prune_object_properties.ts +63 -63
  290. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -162
  291. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  292. package/src/programmers/internal/template_to_pattern.ts +23 -23
  293. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +23 -23
  294. package/src/programmers/json/JsonApplicationProgrammer.ts +92 -92
  295. package/src/programmers/json/JsonAssertParseProgrammer.ts +104 -104
  296. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +112 -112
  297. package/src/programmers/json/JsonIsParseProgrammer.ts +118 -118
  298. package/src/programmers/json/JsonIsStringifyProgrammer.ts +108 -108
  299. package/src/programmers/json/JsonStringifyProgrammer.ts +1124 -1124
  300. package/src/programmers/json/JsonValidateParseProgrammer.ts +95 -95
  301. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +119 -119
  302. package/src/programmers/llm/LlmApplicationProgrammer.ts +235 -235
  303. package/src/programmers/llm/LlmSchemaProgrammer.ts +51 -51
  304. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +92 -92
  305. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +113 -113
  306. package/src/programmers/misc/MiscCloneProgrammer.ts +1029 -1029
  307. package/src/programmers/misc/MiscIsCloneProgrammer.ts +99 -99
  308. package/src/programmers/misc/MiscIsPruneProgrammer.ts +97 -97
  309. package/src/programmers/misc/MiscLiteralsProgrammer.ts +80 -80
  310. package/src/programmers/misc/MiscPruneProgrammer.ts +725 -725
  311. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +109 -109
  312. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +109 -109
  313. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +98 -98
  314. package/src/programmers/notations/NotationGeneralProgrammer.ts +973 -973
  315. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +105 -105
  316. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +117 -117
  317. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +95 -95
  318. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +99 -99
  319. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +711 -711
  320. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +1019 -1019
  321. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +109 -109
  322. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +98 -98
  323. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +201 -201
  324. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +90 -90
  325. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +114 -114
  326. package/src/protobuf.ts +868 -868
  327. package/src/schemas/json/IJsonApplication.ts +22 -22
  328. package/src/schemas/metadata/IMetadata.ts +36 -36
  329. package/src/schemas/metadata/IMetadataConstantValue.ts +11 -11
  330. package/src/schemas/metadata/IMetadataFunction.ts +8 -8
  331. package/src/schemas/metadata/IMetadataParameter.ts +9 -9
  332. package/src/schemas/metadata/IMetadataTemplate.ts +7 -7
  333. package/src/schemas/metadata/Metadata.ts +616 -616
  334. package/src/schemas/metadata/MetadataAtomic.ts +87 -87
  335. package/src/schemas/metadata/MetadataConstantValue.ts +62 -62
  336. package/src/schemas/metadata/MetadataFunction.ts +49 -49
  337. package/src/schemas/metadata/MetadataObject.ts +139 -139
  338. package/src/schemas/metadata/MetadataParameter.ts +50 -50
  339. package/src/tags/Constant.ts +15 -15
  340. package/src/tags/Default.ts +22 -22
  341. package/src/tags/Example.ts +17 -17
  342. package/src/tags/Examples.ts +16 -16
  343. package/src/tags/ExclusiveMaximum.ts +25 -25
  344. package/src/tags/ExclusiveMinimum.ts +25 -25
  345. package/src/tags/JsonSchemaPlugin.ts +8 -8
  346. package/src/tags/Maximum.ts +19 -19
  347. package/src/tags/Minimum.ts +19 -19
  348. package/src/tags/MultipleOf.ts +21 -21
  349. package/src/tags/Pattern.ts +31 -31
  350. package/src/tags/Type.ts +32 -32
  351. package/src/tags/index.ts +20 -20
  352. package/src/transform.ts +35 -35
  353. package/src/transformers/CallExpressionTransformer.ts +540 -540
  354. package/src/transformers/FileTransformer.ts +120 -120
  355. package/src/transformers/IProgrammerProps.ts +11 -11
  356. package/src/transformers/ITransformProps.ts +9 -9
  357. package/src/transformers/ITypiaContext.ts +18 -18
  358. package/src/transformers/NodeTransformer.ts +17 -17
  359. package/src/transformers/TransformerError.ts +59 -59
  360. package/src/transformers/features/AssertTransformer.ts +24 -24
  361. package/src/transformers/features/CreateAssertTransformer.ts +24 -24
  362. package/src/transformers/features/CreateIsTransformer.ts +18 -18
  363. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  364. package/src/transformers/features/CreateValidateTransformer.ts +18 -18
  365. package/src/transformers/features/IsTransformer.ts +18 -18
  366. package/src/transformers/features/RandomTransformer.ts +41 -41
  367. package/src/transformers/features/ValidateTransformer.ts +18 -18
  368. package/src/transformers/features/functional/FunctionalGenericTransformer.ts +57 -57
  369. package/src/transformers/features/http/CreateHttpAssertFormDataTransformer.ts +13 -13
  370. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +13 -13
  371. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +13 -13
  372. package/src/transformers/features/http/CreateHttpFormDataTransformer.ts +13 -13
  373. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +13 -13
  374. package/src/transformers/features/http/CreateHttpIsFormDataTransformer.ts +13 -13
  375. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +13 -13
  376. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +13 -13
  377. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +13 -13
  378. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +13 -13
  379. package/src/transformers/features/http/CreateHttpValidateFormDataTransformer.ts +13 -13
  380. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +13 -13
  381. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +13 -13
  382. package/src/transformers/features/http/HttpAssertFormDataTransformer.ts +13 -13
  383. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +13 -13
  384. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +13 -13
  385. package/src/transformers/features/http/HttpFormDataTransformer.ts +13 -13
  386. package/src/transformers/features/http/HttpHeadersTransformer.ts +13 -13
  387. package/src/transformers/features/http/HttpIsFormDataTransformer.ts +13 -13
  388. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +13 -13
  389. package/src/transformers/features/http/HttpIsQueryTransformer.ts +13 -13
  390. package/src/transformers/features/http/HttpParameterTransformer.ts +13 -13
  391. package/src/transformers/features/http/HttpQueryTransformer.ts +13 -13
  392. package/src/transformers/features/http/HttpValidateFormDataTransformer.ts +13 -13
  393. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +13 -13
  394. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +13 -13
  395. package/src/transformers/features/json/JsonApplicationTransformer.ts +130 -130
  396. package/src/transformers/features/json/JsonAssertParseTransformer.ts +13 -13
  397. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +13 -13
  398. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +13 -13
  399. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +13 -13
  400. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +13 -13
  401. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +13 -13
  402. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +13 -13
  403. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +13 -13
  404. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +13 -13
  405. package/src/transformers/features/json/JsonIsParseTransformer.ts +13 -13
  406. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +13 -13
  407. package/src/transformers/features/json/JsonStringifyTransformer.ts +13 -13
  408. package/src/transformers/features/json/JsonValidateParseTransformer.ts +13 -13
  409. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +13 -13
  410. package/src/transformers/features/llm/LlmApplicationTransformer.ts +86 -86
  411. package/src/transformers/features/llm/LlmSchemaTransformer.ts +59 -59
  412. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +13 -13
  413. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +13 -13
  414. package/src/transformers/features/misc/MiscCloneTransformer.ts +13 -13
  415. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +13 -13
  416. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +13 -13
  417. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +13 -13
  418. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +13 -13
  419. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +13 -13
  420. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +13 -13
  421. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +13 -13
  422. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +13 -13
  423. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +13 -13
  424. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +13 -13
  425. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +35 -35
  426. package/src/transformers/features/misc/MiscPruneTransformer.ts +13 -13
  427. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +13 -13
  428. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +13 -13
  429. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +20 -20
  430. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +20 -20
  431. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +20 -20
  432. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +20 -20
  433. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +20 -20
  434. package/src/transformers/features/notations/NotationGeneralTransformer.ts +18 -18
  435. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +20 -20
  436. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +20 -20
  437. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +13 -13
  438. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +13 -13
  439. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +13 -13
  440. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +13 -13
  441. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +13 -13
  442. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +13 -13
  443. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +13 -13
  444. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +13 -13
  445. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +13 -13
  446. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +13 -13
  447. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +13 -13
  448. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +13 -13
  449. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +13 -13
  450. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +13 -13
  451. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +35 -35
  452. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +13 -13
  453. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +13 -13
  454. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +69 -69
  455. package/src/transformers/features/reflect/ReflectNameTransformer.ts +82 -82
  456. package/src/transformers/internal/GenericTransformer.ts +101 -101
  457. package/src/typings/Equal.ts +18 -18
  458. package/src/typings/IsTuple.ts +9 -9
  459. package/src/typings/NativeClass.ts +23 -23
  460. package/src/typings/ValueOf.ts +20 -20
  461. package/src/utils/Escaper.ts +50 -50
  462. package/src/utils/MapUtil.ts +14 -14
  463. package/src/utils/NameEncoder.ts +32 -32
  464. package/src/utils/NamingConvention.ts +94 -94
  465. package/src/utils/StringUtil.ts +16 -16
  466. package/lib/functional/$FormDataReader/$FormDataReader.d.ts +0 -7
  467. package/lib/functional/$FormDataReader/$FormDataReader.js +0 -86
  468. package/lib/functional/$FormDataReader/$FormDataReader.js.map +0 -1
  469. package/lib/functional/$FormDataReader/index.d.ts +0 -1
  470. package/lib/functional/$FormDataReader/index.js +0 -28
  471. package/lib/functional/$FormDataReader/index.js.map +0 -1
  472. package/lib/functional/$HeadersReader/$HeadersReader.d.ts +0 -4
  473. package/lib/functional/$HeadersReader/$HeadersReader.js +0 -36
  474. package/lib/functional/$HeadersReader/$HeadersReader.js.map +0 -1
  475. package/lib/functional/$HeadersReader/index.d.ts +0 -1
  476. package/lib/functional/$HeadersReader/index.js +0 -28
  477. package/lib/functional/$HeadersReader/index.js.map +0 -1
  478. package/lib/functional/$ParameterReader/$ParameterReader.d.ts +0 -4
  479. package/lib/functional/$ParameterReader/$ParameterReader.js +0 -36
  480. package/lib/functional/$ParameterReader/$ParameterReader.js.map +0 -1
  481. package/lib/functional/$ParameterReader/index.d.ts +0 -1
  482. package/lib/functional/$ParameterReader/index.js +0 -28
  483. package/lib/functional/$ParameterReader/index.js.map +0 -1
  484. package/lib/functional/$ProtobufReader.d.ts +0 -35
  485. package/lib/functional/$ProtobufReader.js +0 -166
  486. package/lib/functional/$ProtobufReader.js.map +0 -1
  487. package/lib/functional/$ProtobufSizer.d.ts +0 -36
  488. package/lib/functional/$ProtobufSizer.js +0 -118
  489. package/lib/functional/$ProtobufSizer.js.map +0 -1
  490. package/lib/functional/$ProtobufWriter.d.ts +0 -45
  491. package/lib/functional/$ProtobufWriter.js +0 -104
  492. package/lib/functional/$ProtobufWriter.js.map +0 -1
  493. package/lib/functional/$QueryReader/$QueryReader.d.ts +0 -6
  494. package/lib/functional/$QueryReader/$QueryReader.js +0 -55
  495. package/lib/functional/$QueryReader/$QueryReader.js.map +0 -1
  496. package/lib/functional/$QueryReader/index.d.ts +0 -1
  497. package/lib/functional/$QueryReader/index.js +0 -28
  498. package/lib/functional/$QueryReader/index.js.map +0 -1
  499. package/lib/functional/$any.d.ts +0 -1
  500. package/lib/functional/$any.js +0 -7
  501. package/lib/functional/$any.js.map +0 -1
  502. package/lib/functional/$clone.d.ts +0 -2
  503. package/lib/functional/$clone.js +0 -100
  504. package/lib/functional/$clone.js.map +0 -1
  505. package/lib/functional/$convention.d.ts +0 -1
  506. package/lib/functional/$convention.js +0 -60
  507. package/lib/functional/$convention.js.map +0 -1
  508. package/lib/functional/$dictionary.d.ts +0 -2
  509. package/lib/functional/$dictionary.js +0 -18
  510. package/lib/functional/$dictionary.js.map +0 -1
  511. package/lib/functional/$guard.d.ts +0 -1
  512. package/lib/functional/$guard.js +0 -21
  513. package/lib/functional/$guard.js.map +0 -1
  514. package/lib/functional/$is_between.d.ts +0 -1
  515. package/lib/functional/$is_between.js +0 -8
  516. package/lib/functional/$is_between.js.map +0 -1
  517. package/lib/functional/$join.d.ts +0 -1
  518. package/lib/functional/$join.js +0 -50
  519. package/lib/functional/$join.js.map +0 -1
  520. package/lib/functional/$number.d.ts +0 -1
  521. package/lib/functional/$number.js +0 -16
  522. package/lib/functional/$number.js.map +0 -1
  523. package/lib/functional/$report.d.ts +0 -2
  524. package/lib/functional/$report.js +0 -18
  525. package/lib/functional/$report.js.map +0 -1
  526. package/lib/functional/$rest.d.ts +0 -1
  527. package/lib/functional/$rest.js +0 -8
  528. package/lib/functional/$rest.js.map +0 -1
  529. package/lib/functional/$stoll.d.ts +0 -1
  530. package/lib/functional/$stoll.js +0 -14
  531. package/lib/functional/$stoll.js.map +0 -1
  532. package/lib/functional/$string.d.ts +0 -1
  533. package/lib/functional/$string.js +0 -43
  534. package/lib/functional/$string.js.map +0 -1
  535. package/lib/functional/$strlen.d.ts +0 -1
  536. package/lib/functional/$strlen.js +0 -13
  537. package/lib/functional/$strlen.js.map +0 -1
  538. package/lib/functional/$tail.d.ts +0 -1
  539. package/lib/functional/$tail.js +0 -11
  540. package/lib/functional/$tail.js.map +0 -1
  541. package/lib/functional/$throws.d.ts +0 -2
  542. package/lib/functional/$throws.js +0 -22
  543. package/lib/functional/$throws.js.map +0 -1
  544. package/lib/functional/IProtobufWriter.d.ts +0 -15
  545. package/lib/functional/IProtobufWriter.js +0 -3
  546. package/lib/functional/IProtobufWriter.js.map +0 -1
  547. package/lib/functional/Namespace/functional.d.ts +0 -4
  548. package/lib/functional/Namespace/functional.js +0 -9
  549. package/lib/functional/Namespace/functional.js.map +0 -1
  550. package/lib/functional/Namespace/http.d.ts +0 -8
  551. package/lib/functional/Namespace/http.js +0 -16
  552. package/lib/functional/Namespace/http.js.map +0 -1
  553. package/lib/functional/Namespace/index.d.ts +0 -30
  554. package/lib/functional/Namespace/index.js +0 -85
  555. package/lib/functional/Namespace/index.js.map +0 -1
  556. package/lib/functional/Namespace/json.d.ts +0 -9
  557. package/lib/functional/Namespace/json.js +0 -23
  558. package/lib/functional/Namespace/json.js.map +0 -1
  559. package/lib/functional/Namespace/llm.d.ts +0 -4
  560. package/lib/functional/Namespace/llm.js +0 -44
  561. package/lib/functional/Namespace/llm.js.map +0 -1
  562. package/lib/functional/Namespace/misc.d.ts +0 -11
  563. package/lib/functional/Namespace/misc.js +0 -22
  564. package/lib/functional/Namespace/misc.js.map +0 -1
  565. package/lib/functional/Namespace/notations.d.ts +0 -18
  566. package/lib/functional/Namespace/notations.js +0 -26
  567. package/lib/functional/Namespace/notations.js.map +0 -1
  568. package/lib/functional/Namespace/protobuf.d.ts +0 -17
  569. package/lib/functional/Namespace/protobuf.js +0 -25
  570. package/lib/functional/Namespace/protobuf.js.map +0 -1
  571. package/lib/functional/is.d.ts +0 -1
  572. package/lib/functional/is.js +0 -14
  573. package/lib/functional/is.js.map +0 -1
  574. package/lib/internal/$randomByte.d.ts +0 -1
  575. package/lib/internal/$randomByte.js +0 -7
  576. package/lib/internal/$randomByte.js.map +0 -1
  577. package/lib/internal/$randomUuid.d.ts +0 -1
  578. package/lib/internal/$randomUuid.js.map +0 -1
  579. package/lib/programmers/helpers/RandomRanger.d.ts +0 -33
  580. package/lib/programmers/helpers/RandomRanger.js +0 -158
  581. package/lib/programmers/helpers/RandomRanger.js.map +0 -1
  582. package/lib/programmers/internal/random_custom.d.ts +0 -1
  583. package/lib/programmers/internal/random_custom.js +0 -23
  584. package/lib/programmers/internal/random_custom.js.map +0 -1
  585. package/lib/utils/RandomGenerator/RandomGenerator.d.ts +0 -31
  586. package/lib/utils/RandomGenerator/RandomGenerator.js +0 -176
  587. package/lib/utils/RandomGenerator/RandomGenerator.js.map +0 -1
  588. package/lib/utils/RandomGenerator/index.d.ts +0 -1
  589. package/lib/utils/RandomGenerator/index.js +0 -28
  590. package/lib/utils/RandomGenerator/index.js.map +0 -1
  591. package/src/functional/$FormDataReader/$FormDataReader.ts +0 -83
  592. package/src/functional/$FormDataReader/index.ts +0 -1
  593. package/src/functional/$HeadersReader/$HeadersReader.ts +0 -26
  594. package/src/functional/$HeadersReader/index.ts +0 -1
  595. package/src/functional/$ParameterReader/$ParameterReader.ts +0 -29
  596. package/src/functional/$ParameterReader/index.ts +0 -1
  597. package/src/functional/$ProtobufReader.ts +0 -194
  598. package/src/functional/$ProtobufSizer.ts +0 -144
  599. package/src/functional/$ProtobufWriter.ts +0 -145
  600. package/src/functional/$QueryReader/$QueryReader.ts +0 -46
  601. package/src/functional/$QueryReader/index.ts +0 -1
  602. package/src/functional/$any.ts +0 -3
  603. package/src/functional/$clone.ts +0 -48
  604. package/src/functional/$convention.ts +0 -37
  605. package/src/functional/$dictionary.ts +0 -22
  606. package/src/functional/$guard.ts +0 -21
  607. package/src/functional/$is_between.ts +0 -2
  608. package/src/functional/$join.ts +0 -46
  609. package/src/functional/$number.ts +0 -12
  610. package/src/functional/$report.ts +0 -13
  611. package/src/functional/$rest.ts +0 -3
  612. package/src/functional/$stoll.ts +0 -8
  613. package/src/functional/$string.ts +0 -43
  614. package/src/functional/$strlen.ts +0 -7
  615. package/src/functional/$tail.ts +0 -5
  616. package/src/functional/$throws.ts +0 -10
  617. package/src/functional/IProtobufWriter.ts +0 -18
  618. package/src/functional/Namespace/functional.ts +0 -5
  619. package/src/functional/Namespace/http.ts +0 -9
  620. package/src/functional/Namespace/index.ts +0 -75
  621. package/src/functional/Namespace/json.ts +0 -15
  622. package/src/functional/Namespace/llm.ts +0 -20
  623. package/src/functional/Namespace/misc.ts +0 -14
  624. package/src/functional/Namespace/notations.ts +0 -23
  625. package/src/functional/Namespace/protobuf.ts +0 -20
  626. package/src/functional/is.ts +0 -10
  627. package/src/programmers/helpers/RandomRanger.ts +0 -225
  628. package/src/programmers/internal/random_custom.ts +0 -39
  629. package/src/utils/RandomGenerator/RandomGenerator.ts +0 -119
  630. package/src/utils/RandomGenerator/index.ts +0 -1
package/src/module.ts CHANGED
@@ -1,945 +1,933 @@
1
- import * as Namespace from "./functional/Namespace";
2
-
3
- import { AssertionGuard } from "./AssertionGuard";
4
- import { IRandomGenerator } from "./IRandomGenerator";
5
- import { IValidation } from "./IValidation";
6
- import { Resolved } from "./Resolved";
7
- import { TypeGuardError } from "./TypeGuardError";
8
-
9
- export * as functional from "./functional";
10
- export * as http from "./http";
11
- export * as llm from "./llm";
12
- export * as json from "./json";
13
- export * as misc from "./misc";
14
- export * as notations from "./notations";
15
- export * as protobuf from "./protobuf";
16
- export * as reflect from "./reflect";
17
- export * as tags from "./tags";
18
-
19
- export * from "./schemas/metadata/IJsDocTagInfo";
20
- export * from "./schemas/json/IJsonApplication";
21
- export * from "./AssertionGuard";
22
- export * from "./IRandomGenerator";
23
- export * from "./IValidation";
24
- export * from "./TypeGuardError";
25
-
26
- export * from "./Primitive";
27
- export * from "./Resolved";
28
- export * from "./CamelCase";
29
- export * from "./PascalCase";
30
- export * from "./SnakeCase";
31
-
32
- /* -----------------------------------------------------------
33
- BASIC VALIDATORS
34
- ----------------------------------------------------------- */
35
- /**
36
- * Asserts a value type.
37
- *
38
- * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
39
- * reason, if the parametric value is not following the type `T`. Otherwise, the
40
- * value is following the type `T`, just input parameter would be returned.
41
- *
42
- * If what you want is not asserting but just knowing whether the parametric value is
43
- * following the type `T` or not, you can choose the {@link is} function instead.
44
- * Otherwise you want to know all the errors, {@link validate} is the way to go.
45
- * Also, if you want to automatically cast the parametric value to the type `T`
46
- * when no problem (perform the assertion guard of type).
47
- *
48
- * On the other and, if you don't want to allow any superfluous property that is not
49
- * enrolled to the type `T`, you can use {@link assertEquals} function instead.
50
- *
51
- * @template T Type of the input value
52
- * @param input A value to be asserted
53
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
54
- * @returns Parametric input value
55
- * @throws A {@link TypeGuardError} instance with detailed reason
56
- *
57
- * @author Jeongho Nam - https://github.com/samchon
58
- */
59
- export function assert<T>(
60
- input: T,
61
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
62
- ): T;
63
-
64
- /**
65
- * Asserts a value type.
66
- *
67
- * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
68
- * reason, if the parametric value is not following the type `T`. Otherwise, the
69
- * value is following the type `T`, just input parameter would be returned.
70
- *
71
- * If what you want is not asserting but just knowing whether the parametric value is
72
- * following the type `T` or not, you can choose the {@link is} function instead.
73
- * Otherwise, you want to know all the errors, {@link validate} is the way to go.
74
- *
75
- * On the other and, if you don't want to allow any superfluous property that is not
76
- * enrolled to the type `T`, you can use {@link assertEquals} function instead.
77
- *
78
- * @template T Type of the input value
79
- * @param input A value to be asserted
80
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
81
- * @returns Parametric input value casted as `T`
82
- * @throws A {@link TypeGuardError} instance with detailed reason
83
- *
84
- * @author Jeongho Nam - https://github.com/samchon
85
- */
86
- export function assert<T>(
87
- input: unknown,
88
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
89
- ): T;
90
-
91
- /**
92
- * @internal
93
- */
94
- export function assert(): never {
95
- halt("assert");
96
- }
97
-
98
- /**
99
- * Assertion guard of a value type.
100
- *
101
- * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
102
- * reason, if the parametric value is not following the type `T`. Otherwise, the
103
- * value is following the type `T`, nothing would be returned, but the input value
104
- * would be automatically casted to the type `T`. This is the concept of
105
- * "Assertion Guard" of a value type.
106
- *
107
- * If what you want is not asserting but just knowing whether the parametric value is
108
- * following the type `T` or not, you can choose the {@link is} function instead.
109
- * Otherwise you want to know all the errors, {@link validate} is the way to go.
110
- * Also, if you want to returns the parametric value when no problem, you can use
111
- * {@link assert} function instead.
112
- *
113
- * On the other and, if you don't want to allow any superfluous property that is not
114
- * enrolled to the type `T`, you can use {@link assertGuardEquals} function instead.
115
- *
116
- * @template T Type of the input value
117
- * @param input A value to be asserted
118
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
119
- * @throws A {@link TypeGuardError} instance with detailed reason
120
- *
121
- * @author Jeongho Nam - https://github.com/samchon
122
- */
123
- export function assertGuard<T>(
124
- input: T,
125
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
126
- ): asserts input is T;
127
-
128
- /**
129
- * Assertion guard of a value type.
130
- *
131
- * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
132
- * reason, if the parametric value is not following the type `T`. Otherwise, the
133
- * value is following the type `T`, nothing would be returned, but the input value
134
- * would be automatically casted to the type `T`. This is the concept of
135
- * "Assertion Guard" of a value type.
136
- *
137
- * If what you want is not asserting but just knowing whether the parametric value is
138
- * following the type `T` or not, you can choose the {@link is} function instead.
139
- * Otherwise you want to know all the errors, {@link validate} is the way to go.
140
- * Also, if you want to returns the parametric value when no problem, you can use
141
- * {@link assert} function instead.
142
- *
143
- * On the other and, if you don't want to allow any superfluous property that is not
144
- * enrolled to the type `T`, you can use {@link assertGuardEquals} function instead.
145
- *
146
- * @template T Type of the input value
147
- * @param input A value to be asserted
148
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
149
- * @throws A {@link TypeGuardError} instance with detailed reason
150
- *
151
- * @author Jeongho Nam - https://github.com/samchon
152
- */
153
- export function assertGuard<T>(
154
- input: unknown,
155
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
156
- ): asserts input is T;
157
-
158
- /**
159
- * @internal
160
- */
161
- export function assertGuard(): never {
162
- halt("assertGuard");
163
- }
164
-
165
- /**
166
- * Tests a value type.
167
- *
168
- * Tests a parametric value type and returns whether it's following the type `T` or not.
169
- * If the parametric value is matched with the type `T`, `true` value would be returned.
170
- * Otherwise, the parametric value is not following the type `T`, `false` value would be
171
- * returned.
172
- *
173
- * If what you want is not just knowing whether the parametric value is following the
174
- * type `T` or not, but throwing an exception with detailed reason, you can choose
175
- * {@link assert} function instead. Also, if you want to know all the errors with
176
- * detailed reasons, {@link validate} function would be useful.
177
- *
178
- * On the other and, if you don't want to allow any superfluous property that is not
179
- * enrolled to the type `T`, you can use {@link equals} function instead.
180
- *
181
- * @template T Type of the input value
182
- * @param input A value to be tested
183
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
184
- * @returns Whether the parametric value is following the type `T` or not
185
- *
186
- * @author Jeongho Nam - https://github.com/samchon
187
- */
188
- export function is<T>(input: T): input is T;
189
-
190
- /**
191
- * Tests a value type.
192
- *
193
- * Tests a parametric value type and returns whether it's following the type `T` or not.
194
- * If the parametric value is matched with the type `T`, `true` value would be returned.
195
- * Otherwise, the parametric value is not following the type `T`, `false` value would be
196
- * returned.
197
- *
198
- * If what you want is not just knowing whether the parametric value is following the
199
- * type `T` or not, but throwing an exception with detailed reason, you can choose
200
- * {@link assert} function instead. Also, if you want to know all the errors with
201
- * detailed reasons, {@link validate} function would be useful.
202
- *
203
- * On the other and, if you don't want to allow any superfluous property that is not
204
- * enrolled to the type `T`, you can use {@link equals} function instead.
205
- *
206
- * @template T Type of the input value
207
- * @param input A value to be tested
208
- * @returns Whether the parametric value is following the type `T` or not
209
- *
210
- * @author Jeongho Nam - https://github.com/samchon
211
- */
212
- export function is<T>(input: unknown): input is T;
213
-
214
- /**
215
- * @internal
216
- */
217
- export function is(): never {
218
- halt("is");
219
- }
220
-
221
- /**
222
- * Validates a value type.
223
- *
224
- * Validates a parametric value type and archives all the type errors into an
225
- * {@link IValidation.errors} array, if the parametric value is not following the
226
- * type `T`. Of course, if the parametric value is following the type `T`, the
227
- * {@link IValidation.errors} array would be empty and {@link IValidation.success}
228
- * would have the `true` value.
229
- *
230
- * If what you want is not finding all the error, but asserting the parametric value
231
- * type with exception throwing, you can choose {@link assert} function instead.
232
- * Otherwise, you just want to know whether the parametric value is matched with the
233
- * type `T`, {@link is} function is the way to go.
234
- *
235
- * On the other and, if you don't want to allow any superfluous property that is not
236
- * enrolled to the type `T`, you can use {@link validateEquals} function instead.
237
- *
238
- * @template Type of the input value
239
- * @param input A value to be validated
240
- * @returns Validation result
241
- *
242
- * @author Jeongho Nam - https://github.com/samchon
243
- */
244
- export function validate<T>(input: T): IValidation<T>;
245
-
246
- /**
247
- * Validates a value type.
248
- *
249
- * Validates a parametric value type and archives all the type errors into an
250
- * {@link IValidation.errors} array, if the parametric value is not following the
251
- * type `T`. Of course, if the parametric value is following the type `T`, the
252
- * {@link IValidation.errors} array would be empty and {@link IValidation.success}
253
- * would have the `true` value.
254
- *
255
- * If what you want is not finding all the error, but asserting the parametric value
256
- * type with exception throwing, you can choose {@link assert} function instead.
257
- * Otherwise, you just want to know whether the parametric value is matched with the
258
- * type `T`, {@link is} function is the way to go.
259
- *
260
- * On the other and, if you don't want to allow any superfluous property that is not
261
- * enrolled to the type `T`, you can use {@link validateEquals} function instead.
262
- *
263
- * @template Type of the input value
264
- * @param input A value to be validated
265
- * @returns Validation result
266
- *
267
- * @author Jeongho Nam - https://github.com/samchon
268
- */
269
- export function validate<T>(input: unknown): IValidation<T>;
270
-
271
- /**
272
- * @internal
273
- */
274
- export function validate(): never {
275
- halt("validate");
276
- }
277
-
278
- /* -----------------------------------------------------------
279
- STRICT VALIDATORS
280
- ----------------------------------------------------------- */
281
- /**
282
- * Asserts equality between a value and its type.
283
- *
284
- * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
285
- * reason, if the parametric value is not following the type `T` or some superfluous
286
- * property that is not listed on the type `T` has been found. Otherwise, the value is
287
- * following the type `T` without any superfluous property, just input parameter would
288
- * be returned.
289
- *
290
- * If what you want is not asserting but just knowing whether the parametric value is
291
- * following the type `T` or not, you can choose the {@link equals} function instead.
292
- * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.
293
- *
294
- * On the other hand, if you want to allow superfluous property that is not enrolled
295
- * to the type `T`, you can use {@link assert} function instead.
296
- *
297
- * @template T Type of the input value
298
- * @param input A value to be asserted
299
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
300
- * @returns Parametric input value
301
- * @throws A {@link TypeGuardError} instance with detailed reason
302
- *
303
- * @author Jeongho Nam - https://github.com/samchon
304
- */
305
- export function assertEquals<T>(
306
- input: T,
307
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
308
- ): T;
309
-
310
- /**
311
- * Asserts equality between a value and its type.
312
- *
313
- * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
314
- * reason, if the parametric value is not following the type `T` or some superfluous
315
- * property that is not listed on the type `T` has been found. Otherwise, the value is
316
- * following the type `T` without any superfluous property, just input parameter would
317
- * be returned.
318
- *
319
- * If what you want is not asserting but just knowing whether the parametric value is
320
- * following the type `T` or not, you can choose the {@link equals} function instead.
321
- * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.
322
- *
323
- * On the other hand, if you want to allow superfluous property that is not enrolled
324
- * to the type `T`, you can use {@link assert} function instead.
325
- *
326
- * @template T Type of the input value
327
- * @param input A value to be asserted
328
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
329
- * @returns Parametric input value casted as `T`
330
- * @throws A {@link TypeGuardError} instance with detailed reason
331
- *
332
- * @author Jeongho Nam - https://github.com/samchon
333
- */
334
- export function assertEquals<T>(
335
- input: unknown,
336
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
337
- ): T;
338
-
339
- /**
340
- * @internal
341
- */
342
- export function assertEquals(): never {
343
- halt("assertEquals");
344
- }
345
-
346
- /**
347
- * Assertion guard of a type with equality.
348
- *
349
- * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
350
- * reason, if the parametric value is not following the type `T` or some superfluous
351
- * property that is not listed on the type `T` has been found.
352
- *
353
- * Otherwise, the value is following the type `T` without any superfluous property,
354
- * nothing would be returned, but the input value would be automatically casted to
355
- * the type `T`. This is the concept of "Assertion Guard" of a value type.
356
- *
357
- * If what you want is not asserting but just knowing whether the parametric value is
358
- * following the type `T` or not, you can choose the {@link equals} function instead.
359
- * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.
360
- * Also, if you want to returns the parametric value when no problem, you can use
361
- * {@link assert} function instead.
362
- *
363
- * On the other hand, if you want to allow superfluous property that is not enrolled
364
- * to the type `T`, you can use {@link assertEquals} function instead.
365
- *
366
- * @template T Type of the input value
367
- * @param input A value to be asserted
368
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
369
- * @returns Parametric input value casted as `T`
370
- * @throws A {@link TypeGuardError} instance with detailed reason
371
- *
372
- * @author Jeongho Nam - https://github.com/samchon
373
- */
374
- export function assertGuardEquals<T>(
375
- input: T,
376
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
377
- ): asserts input is T;
378
-
379
- /**
380
- * Assertion guard of a type with equality.
381
- *
382
- * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
383
- * reason, if the parametric value is not following the type `T` or some superfluous
384
- * property that is not listed on the type `T` has been found.
385
- *
386
- * Otherwise, the value is following the type `T` without any superfluous property,
387
- * nothing would be returned, but the input value would be automatically casted to
388
- * the type `T`. This is the concept of "Assertion Guard" of a value type.
389
- *
390
- * If what you want is not asserting but just knowing whether the parametric value is
391
- * following the type `T` or not, you can choose the {@link equals} function instead.
392
- * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.
393
- * Also, if you want to returns the parametric value when no problem, you can use
394
- * {@link assertEquals} function instead.
395
- *
396
- * On the other hand, if you want to allow superfluous property that is not enrolled
397
- * to the type `T`, you can use {@link assertGuard} function instead.
398
- *
399
- * @template T Type of the input value
400
- * @param input A value to be asserted
401
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
402
- * @returns Parametric input value casted as `T`
403
- * @throws A {@link TypeGuardError} instance with detailed reason
404
- *
405
- * @author Jeongho Nam - https://github.com/samchon
406
- */
407
- export function assertGuardEquals<T>(
408
- input: unknown,
409
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
410
- ): asserts input is T;
411
-
412
- /**
413
- * @internal
414
- */
415
- export function assertGuardEquals(): never {
416
- halt("assertGuardEquals");
417
- }
418
-
419
- /**
420
- * Tests equality between a value and its type.
421
- *
422
- * Tests a parametric value type and returns whether it's equivalent to the type `T`
423
- * or not. If the parametric value is matched with the type `T` and there's not any
424
- * superfluous property that is not listed on the type `T`, `true` value would be
425
- * returned. Otherwise, the parametric value is not following the type `T` or some
426
- * superfluous property exists, `false` value would be returned.
427
- *
428
- * If what you want is not just knowing whether the parametric value is following the
429
- * type `T` or not, but throwing an exception with detailed reason, you can choose
430
- * {@link assertEquals} function instead. Also, if you want to know all the errors with
431
- * detailed reasons, {@link validateEquals} function would be useful.
432
- *
433
- * On the other hand, if you want to allow superfluous property that is not enrolled
434
- * to the type `T`, you can use {@link is} function instead.
435
- *
436
- * @template T Type of the input value
437
- * @param input A value to be tested
438
- * @returns Whether the parametric value is equivalent to the type `T` or not
439
- *
440
- * @author Jeongho Nam - https://github.com/samchon
441
- */
442
- export function equals<T>(input: T): input is T;
443
-
444
- /**
445
- * Tests equality between a value and its type.
446
- *
447
- * Tests a parametric value type and returns whether it's equivalent to the type `T`
448
- * or not. If the parametric value is matched with the type `T` and there's not any
449
- * superfluous property that is not listed on the type `T`, `true` value would be
450
- * returned. Otherwise, the parametric value is not following the type `T` or some
451
- * superfluous property exists, `false` value would be returned.
452
- *
453
- * If what you want is not just knowing whether the parametric value is following the
454
- * type `T` or not, but throwing an exception with detailed reason, you can choose
455
- * {@link assertEquals} function instead. Also, if you want to know all the errors with
456
- * detailed reasons, {@link validateEquals} function would be useful.
457
- *
458
- * On the other hand, if you want to allow superfluous property that is not enrolled
459
- * to the type `T`, you can use {@link is} function instead.
460
- *
461
- * @template T Type of the input value
462
- * @param input A value to be tested
463
- * @returns Whether the parametric value is equivalent to the type `T` or not
464
- *
465
- * @author Jeongho Nam - https://github.com/samchon
466
- */
467
- export function equals<T>(input: unknown): input is T;
468
-
469
- /**
470
- * @internal
471
- */
472
- export function equals(): never {
473
- halt("equals");
474
- }
475
-
476
- /**
477
- * Validates equality between a value and its type.
478
- *
479
- * Validates a parametric value type and archives all the type errors into an
480
- * {@link IValidation.errors} array, if the parametric value is not following the
481
- * type `T` or some superfluous property that is not listed on the type `T` has been
482
- * found. Of course, if the parametric value is following the type `T` and no
483
- * superfluous property exists, the {@link IValidation.errors} array would be empty
484
- * and {@link IValidation.success} would have the `true` value.
485
- *
486
- * If what you want is not finding all the error, but asserting the parametric value
487
- * type with exception throwing, you can choose {@link assert} function instead.
488
- * Otherwise, you just want to know whether the parametric value is matched with the
489
- * type `T`, {@link is} function is the way to go.
490
- *
491
- * On the other and, if you don't want to allow any superfluous property that is not
492
- * enrolled to the type `T`, you can use {@link validateEquals} function instead.
493
- *
494
- * @template Type of the input value
495
- * @param input A value to be validated
496
- * @returns Validation result
497
- *
498
- * @author Jeongho Nam - https://github.com/samchon
499
- */
500
- export function validateEquals<T>(input: T): IValidation<T>;
501
-
502
- /**
503
- * Validates equality between a value and its type.
504
- *
505
- * Validates a parametric value type and archives all the type errors into an
506
- * {@link IValidation.errors} array, if the parametric value is not following the
507
- * type `T` or some superfluous property that is not listed on the type `T` has been
508
- * found. Of course, if the parametric value is following the type `T` and no
509
- * superfluous property exists, the {@link IValidation.errors} array would be empty
510
- * and {@link IValidation.success} would have the `true` value.
511
- *
512
- * If what you want is not finding all the error, but asserting the parametric value
513
- * type with exception throwing, you can choose {@link assert} function instead.
514
- * Otherwise, you just want to know whether the parametric value is matched with the
515
- * type `T`, {@link is} function is the way to go.
516
- *
517
- * On the other and, if you don't want to allow any superfluous property that is not
518
- * enrolled to the type `T`, you can use {@link validateEquals} function instead.
519
- *
520
- * @template Type of the input value
521
- * @param input A value to be validated
522
- * @returns Validation result
523
- *
524
- * @author Jeongho Nam - https://github.com/samchon
525
- */
526
- export function validateEquals<T>(input: unknown): IValidation<T>;
527
-
528
- /**
529
- * @internal
530
- */
531
- export function validateEquals(): never {
532
- halt("validateEquals");
533
- }
534
-
535
- /* -----------------------------------------------------------
536
- RANDOM
537
- ----------------------------------------------------------- */
538
- /**
539
- * > You must configure the generic argument `T`.
540
- *
541
- * Generate random data.
542
- *
543
- * Generates a random data following type the `T`.
544
- *
545
- * For reference, this `typia.random()` function generates only primitive type.
546
- * If there're some methods in the type `T` or its nested instances, those would
547
- * be ignored. Also, when the type `T` has a `toJSON()` method, its return type
548
- * would be generated instead.
549
- *
550
- * @template T Type of data to generate
551
- * @param generator Random data generator
552
- * @return Randomly generated data
553
- *
554
- * @author Jeongho Nam - https://github.com/samchon
555
- */
556
- function random(generator?: Partial<IRandomGenerator>): never;
557
-
558
- /**
559
- * Generate random data.
560
- *
561
- * Generates a random data following type the `T`.
562
- *
563
- * For reference, this `typia.random()` function generates only primitive type.
564
- * If there're some methods in the type `T` or its nested instances, those would
565
- * be ignored. Also, when the type `T` has a `toJSON()` method, its return type
566
- * would be generated instead.
567
- *
568
- * @template T Type of data to generate
569
- * @param generator Random data generator
570
- * @return Randomly generated data
571
- *
572
- * @author Jeongho Nam - https://github.com/samchon
573
- */
574
- function random<T>(generator?: Partial<IRandomGenerator>): Resolved<T>;
575
-
576
- /**
577
- * @internal
578
- */
579
- function random(): never {
580
- halt("random");
581
- }
582
- const randomPure = /** @__PURE__ */ Object.assign<typeof random, {}>(
583
- random,
584
- /** @__PURE__ */ Namespace.random(),
585
- );
586
- export { randomPure as random };
587
-
588
- /* -----------------------------------------------------------
589
- FACTORY FUNCTIONS
590
- ----------------------------------------------------------- */
591
- /**
592
- * Creates a reusable {@link assert} function.
593
- *
594
- * @danger You must configure the generic argument `T`
595
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
596
- * @returns Nothing until you configure the generic argument `T`
597
- * @throws compile error
598
- *
599
- * @author Jeongho Nam - https://github.com/samchon
600
- */
601
- export function createAssert(
602
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
603
- ): never;
604
-
605
- /**
606
- * Creates a reusable {@link assert} function.
607
- *
608
- * @template T Type of the input value
609
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
610
- * @returns A reusable `assert` function
611
- *
612
- * @author Jeongho Nam - https://github.com/samchon
613
- */
614
- export function createAssert<T>(
615
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
616
- ): (input: unknown) => T;
617
-
618
- /**
619
- * @internal
620
- */
621
- export function createAssert<T>(): (input: unknown) => T {
622
- halt("createAssert");
623
- }
624
-
625
- /**
626
- * Creates a reusable {@link assertGuard} function.
627
- *
628
- * Note that, you've to declare the variable type of the factory function caller
629
- * like below. If you don't declare the variable type, compilation error be thrown.
630
- * This is the special rule of the TypeScript compiler.
631
- *
632
- * ```typescript
633
- * // MUST DECLARE THE VARIABLE TYPE
634
- * const func: typia.AssertionGuard<number> = typia.createAssertGuard<number>();
635
- *
636
- * // IF NOT, COMPILATION ERROR BE OCCURED
637
- * const func = typia.createAssertGuard<number>();
638
- * ```
639
- *
640
- * > *Assertions require every name in the call target to be declared with an*
641
- * > *explicit type annotation.*
642
- *
643
- * @danger You must configure the generic argument `T`
644
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
645
- * @returns Nothing until you configure the generic argument `T`
646
- * @throws compile error
647
- *
648
- * @author Jeongho Nam - https://github.com/samchon
649
- */
650
- export function createAssertGuard(
651
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
652
- ): never;
653
-
654
- /**
655
- * Creates a reusable {@link assertGuard} function.
656
- *
657
- * Note that, you've to declare the variable type of the factory function caller
658
- * like below. If you don't declare the variable type, compilation error be thrown.
659
- * This is the special rule of the TypeScript compiler.
660
- *
661
- * ```typescript
662
- * // MUST DECLARE THE VARIABLE TYPE
663
- * const func: typia.AssertionGuard<number> = typia.createAssertGuard<number>();
664
- *
665
- * // IF NOT, COMPILATION ERROR BE OCCURED
666
- * const func = typia.createAssertGuard<number>();
667
- * ```
668
- *
669
- * > *Assertions require every name in the call target to be declared with an*
670
- * > *explicit type annotation.*
671
- *
672
- * @returns Nothing until you configure the generic argument `T`
673
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
674
- * @throws compile error
675
- *
676
- * @author Jeongho Nam - https://github.com/samchon
677
- */
678
- export function createAssertGuard<T>(
679
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
680
- ): (input: unknown) => AssertionGuard<T>;
681
-
682
- /**
683
- * @internal
684
- */
685
- export function createAssertGuard<T>(): (input: unknown) => AssertionGuard<T> {
686
- halt("createAssertGuard");
687
- }
688
-
689
- /**
690
- * Creates a reusable {@link is} function.
691
- *
692
- * @danger You must configure the generic argument `T`
693
- * @returns Nothing until you configure the generic argument `T`
694
- * @throws compile error
695
- *
696
- * @author Jeongho Nam - https://github.com/samchon
697
- */
698
- export function createIs(): never;
699
-
700
- /**
701
- * Creates a reusable {@link is} function.
702
- *
703
- * @template T Type of the input value
704
- * @returns A reusable `is` function
705
- *
706
- * @author Jeongho Nam - https://github.com/samchon
707
- */
708
- export function createIs<T>(): (input: unknown) => input is T;
709
-
710
- /**
711
- * @internal
712
- */
713
- export function createIs<T>(): (input: unknown) => input is T {
714
- halt("createIs");
715
- }
716
-
717
- /**
718
- * Creates a reusable {@link validate} function.
719
- *
720
- * @danger You must configure the generic argument `T`
721
- * @returns Nothing until you configure the generic argument `T`
722
- * @throws compile error
723
- *
724
- * @author Jeongho Nam - https://github.com/samchon
725
- */
726
- export function createValidate(): never;
727
-
728
- /**
729
- * Creates a reusable {@link validate} function.
730
- *
731
- * @template T Type of the input value
732
- * @returns A reusable `validate` function
733
- *
734
- * @author Jeongho Nam - https://github.com/samchon
735
- */
736
- export function createValidate<T>(): (input: unknown) => IValidation<T>;
737
-
738
- /**
739
- * @internal
740
- */
741
- export function createValidate(): (input: unknown) => IValidation {
742
- halt("createValidate");
743
- }
744
-
745
- /**
746
- * Creates a reusable {@link assertEquals} function.
747
- *
748
- * @danger You must configure the generic argument `T`
749
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
750
- * @returns Nothing until you configure the generic argument `T`
751
- * @throws compile error
752
- *
753
- * @author Jeongho Nam - https://github.com/samchon
754
- */
755
- export function createAssertEquals(
756
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
757
- ): never;
758
-
759
- /**
760
- * Creates a reusable {@link assertEquals} function.
761
- *
762
- * @template T Type of the input value
763
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
764
- * @returns A reusable `assertEquals` function
765
- *
766
- * @author Jeongho Nam - https://github.com/samchon
767
- */
768
- export function createAssertEquals<T>(
769
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
770
- ): (input: unknown) => T;
771
-
772
- /**
773
- * @internal
774
- */
775
- export function createAssertEquals<T>(): (input: unknown) => T {
776
- halt("createAssertEquals");
777
- }
778
-
779
- /**
780
- * Creates a reusable {@link assertGuardEquals} function.
781
- *
782
- * Note that, you've to declare the variable type of the factory function caller
783
- * like below. If you don't declare the variable type, compilation error be thrown.
784
- * This is the special rule of the TypeScript compiler.
785
- *
786
- * ```typescript
787
- * // MUST DECLARE THE VARIABLE TYPE
788
- * const func: typia.AssertionGuard<number> = typia.createAssertGuardEquals<number>();
789
- *
790
- * // IF NOT, COMPILATION ERROR BE OCCURED
791
- * const func = typia.createAssertGuardEquals<number>();
792
- * ```
793
- *
794
- * > *Assertions require every name in the call target to be declared with an*
795
- * > *explicit type annotation.*
796
- *
797
- * @danger You must configure the generic argument `T`
798
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
799
- * @returns Nothing until you configure the generic argument `T`
800
- * @throws compile error
801
- *
802
- * @author Jeongho Nam - https://github.com/samchon
803
- */
804
- export function createAssertGuardEquals(
805
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
806
- ): never;
807
-
808
- /**
809
- * Creates a reusable {@link assertGuardEquals} function.
810
- *
811
- * Note that, you've to declare the variable type of the factory function caller
812
- * like below. If you don't declare the variable type, compilation error be thrown.
813
- * This is the special rule of the TypeScript compiler.
814
- *
815
- * ```typescript
816
- * // MUST DECLARE THE VARIABLE TYPE
817
- * const func: typia.AssertionGuard<number> = typia.createAssertGuardEquals<number>();
818
- *
819
- * // IF NOT, COMPILATION ERROR BE OCCURED
820
- * const func = typia.createAssertGuardEquals<number>();
821
- * ```
822
- *
823
- * > *Assertions require every name in the call target to be declared with an*
824
- * > *explicit type annotation.*
825
- *
826
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
827
- * @returns Nothing until you configure the generic argument `T`
828
- * @throws compile error
829
- *
830
- * @author Jeongho Nam - https://github.com/samchon
831
- */
832
- export function createAssertGuardEquals<T>(
833
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
834
- ): (input: unknown) => AssertionGuard<T>;
835
-
836
- /**
837
- * @internal
838
- */
839
- export function createAssertGuardEquals<T>(): (
840
- input: unknown,
841
- ) => AssertionGuard<T> {
842
- halt("createAssertGuardEquals");
843
- }
844
-
845
- /**
846
- * Creates a reusable {@link equals} function.
847
- *
848
- * @danger You must configure the generic argument `T`
849
- * @returns Nothing until you configure the generic argument `T`
850
- * @throws compile error
851
- *
852
- * @author Jeongho Nam - https://github.com/samchon
853
- */
854
- export function createEquals(): never;
855
-
856
- /**
857
- * Creates a reusable {@link equals} function.
858
- *
859
- * @template T Type of the input value
860
- * @returns A reusable `equals` function
861
- *
862
- * @author Jeongho Nam - https://github.com/samchon
863
- */
864
- export function createEquals<T>(): (input: unknown) => input is T;
865
-
866
- /**
867
- * @internal
868
- */
869
- export function createEquals<T>(): (input: unknown) => input is T {
870
- halt("createEquals");
871
- }
872
-
873
- /**
874
- * Creates a reusable {@link validateEquals} function.
875
- *
876
- * @danger You must configure the generic argument `T`
877
- * @returns Nothing until you configure the generic argument `T`
878
- * @throws compile error
879
- *
880
- * @author Jeongho Nam - https://github.com/samchon
881
- */
882
- export function createValidateEquals(): never;
883
-
884
- /**
885
- * Creates a reusable {@link validateEquals} function.
886
- *
887
- * @template T Type of the input value
888
- * @returns A reusable `validateEquals` function
889
- *
890
- * @author Jeongho Nam - https://github.com/samchon
891
- */
892
- export function createValidateEquals<T>(): (input: unknown) => IValidation<T>;
893
-
894
- /**
895
- * @internal
896
- */
897
- export function createValidateEquals(): (input: unknown) => IValidation {
898
- halt("createValidateEquals");
899
- }
900
-
901
- /**
902
- * Creates a reusable {@link random} function.
903
- *
904
- * @danger You must configure the generic argument `T`
905
- * @param generator Random data generator
906
- * @returns Nothing until you configure the generic argument `T`
907
- * @throws compile error
908
- *
909
- * @author Jeongho Nam - https://github.com/samchon
910
- */
911
- function createRandom(generator?: Partial<IRandomGenerator>): never;
912
-
913
- /**
914
- * Creates a resuable {@link random} function.
915
- *
916
- * @template T Type of the input value
917
- * @param generator Random data generator
918
- * @returns A reusable `random` function
919
- *
920
- * @author Jeongho Nam - https://github.com/samchon
921
- */
922
- function createRandom<T>(
923
- generator?: Partial<IRandomGenerator>,
924
- ): () => Resolved<T>;
925
-
926
- /**
927
- * @internal
928
- */
929
- function createRandom(): never {
930
- halt("createRandom");
931
- }
932
- const createRandomPure = /** @__PURE__ */ Object.assign<
933
- typeof createRandom,
934
- {}
935
- >(createRandom, randomPure);
936
- export { createRandomPure as createRandom };
937
-
938
- /**
939
- * @internal
940
- */
941
- function halt(name: string): never {
942
- throw new Error(
943
- `Error on typia.${name}(): no transform has been configured. Read and follow https://typia.io/docs/setup please.`,
944
- );
945
- }
1
+ import { AssertionGuard } from "./AssertionGuard";
2
+ import { IRandomGenerator } from "./IRandomGenerator";
3
+ import { IValidation } from "./IValidation";
4
+ import { Resolved } from "./Resolved";
5
+ import { TypeGuardError } from "./TypeGuardError";
6
+
7
+ export * as functional from "./functional";
8
+ export * as http from "./http";
9
+ export * as llm from "./llm";
10
+ export * as json from "./json";
11
+ export * as misc from "./misc";
12
+ export * as notations from "./notations";
13
+ export * as protobuf from "./protobuf";
14
+ export * as reflect from "./reflect";
15
+ export * as tags from "./tags";
16
+
17
+ export * from "./schemas/metadata/IJsDocTagInfo";
18
+ export * from "./schemas/json/IJsonApplication";
19
+ export * from "./AssertionGuard";
20
+ export * from "./IRandomGenerator";
21
+ export * from "./IValidation";
22
+ export * from "./TypeGuardError";
23
+
24
+ export * from "./Primitive";
25
+ export * from "./Resolved";
26
+ export * from "./CamelCase";
27
+ export * from "./PascalCase";
28
+ export * from "./SnakeCase";
29
+
30
+ /* -----------------------------------------------------------
31
+ BASIC VALIDATORS
32
+ ----------------------------------------------------------- */
33
+ /**
34
+ * Asserts a value type.
35
+ *
36
+ * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
37
+ * reason, if the parametric value is not following the type `T`. Otherwise, the
38
+ * value is following the type `T`, just input parameter would be returned.
39
+ *
40
+ * If what you want is not asserting but just knowing whether the parametric value is
41
+ * following the type `T` or not, you can choose the {@link is} function instead.
42
+ * Otherwise you want to know all the errors, {@link validate} is the way to go.
43
+ * Also, if you want to automatically cast the parametric value to the type `T`
44
+ * when no problem (perform the assertion guard of type).
45
+ *
46
+ * On the other and, if you don't want to allow any superfluous property that is not
47
+ * enrolled to the type `T`, you can use {@link assertEquals} function instead.
48
+ *
49
+ * @template T Type of the input value
50
+ * @param input A value to be asserted
51
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
52
+ * @returns Parametric input value
53
+ * @throws A {@link TypeGuardError} instance with detailed reason
54
+ *
55
+ * @author Jeongho Nam - https://github.com/samchon
56
+ */
57
+ export function assert<T>(
58
+ input: T,
59
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
60
+ ): T;
61
+
62
+ /**
63
+ * Asserts a value type.
64
+ *
65
+ * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
66
+ * reason, if the parametric value is not following the type `T`. Otherwise, the
67
+ * value is following the type `T`, just input parameter would be returned.
68
+ *
69
+ * If what you want is not asserting but just knowing whether the parametric value is
70
+ * following the type `T` or not, you can choose the {@link is} function instead.
71
+ * Otherwise, you want to know all the errors, {@link validate} is the way to go.
72
+ *
73
+ * On the other and, if you don't want to allow any superfluous property that is not
74
+ * enrolled to the type `T`, you can use {@link assertEquals} function instead.
75
+ *
76
+ * @template T Type of the input value
77
+ * @param input A value to be asserted
78
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
79
+ * @returns Parametric input value casted as `T`
80
+ * @throws A {@link TypeGuardError} instance with detailed reason
81
+ *
82
+ * @author Jeongho Nam - https://github.com/samchon
83
+ */
84
+ export function assert<T>(
85
+ input: unknown,
86
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
87
+ ): T;
88
+
89
+ /**
90
+ * @internal
91
+ */
92
+ export function assert(): never {
93
+ halt("assert");
94
+ }
95
+
96
+ /**
97
+ * Assertion guard of a value type.
98
+ *
99
+ * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
100
+ * reason, if the parametric value is not following the type `T`. Otherwise, the
101
+ * value is following the type `T`, nothing would be returned, but the input value
102
+ * would be automatically casted to the type `T`. This is the concept of
103
+ * "Assertion Guard" of a value type.
104
+ *
105
+ * If what you want is not asserting but just knowing whether the parametric value is
106
+ * following the type `T` or not, you can choose the {@link is} function instead.
107
+ * Otherwise you want to know all the errors, {@link validate} is the way to go.
108
+ * Also, if you want to returns the parametric value when no problem, you can use
109
+ * {@link assert} function instead.
110
+ *
111
+ * On the other and, if you don't want to allow any superfluous property that is not
112
+ * enrolled to the type `T`, you can use {@link assertGuardEquals} function instead.
113
+ *
114
+ * @template T Type of the input value
115
+ * @param input A value to be asserted
116
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
117
+ * @throws A {@link TypeGuardError} instance with detailed reason
118
+ *
119
+ * @author Jeongho Nam - https://github.com/samchon
120
+ */
121
+ export function assertGuard<T>(
122
+ input: T,
123
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
124
+ ): asserts input is T;
125
+
126
+ /**
127
+ * Assertion guard of a value type.
128
+ *
129
+ * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
130
+ * reason, if the parametric value is not following the type `T`. Otherwise, the
131
+ * value is following the type `T`, nothing would be returned, but the input value
132
+ * would be automatically casted to the type `T`. This is the concept of
133
+ * "Assertion Guard" of a value type.
134
+ *
135
+ * If what you want is not asserting but just knowing whether the parametric value is
136
+ * following the type `T` or not, you can choose the {@link is} function instead.
137
+ * Otherwise you want to know all the errors, {@link validate} is the way to go.
138
+ * Also, if you want to returns the parametric value when no problem, you can use
139
+ * {@link assert} function instead.
140
+ *
141
+ * On the other and, if you don't want to allow any superfluous property that is not
142
+ * enrolled to the type `T`, you can use {@link assertGuardEquals} function instead.
143
+ *
144
+ * @template T Type of the input value
145
+ * @param input A value to be asserted
146
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
147
+ * @throws A {@link TypeGuardError} instance with detailed reason
148
+ *
149
+ * @author Jeongho Nam - https://github.com/samchon
150
+ */
151
+ export function assertGuard<T>(
152
+ input: unknown,
153
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
154
+ ): asserts input is T;
155
+
156
+ /**
157
+ * @internal
158
+ */
159
+ export function assertGuard(): never {
160
+ halt("assertGuard");
161
+ }
162
+
163
+ /**
164
+ * Tests a value type.
165
+ *
166
+ * Tests a parametric value type and returns whether it's following the type `T` or not.
167
+ * If the parametric value is matched with the type `T`, `true` value would be returned.
168
+ * Otherwise, the parametric value is not following the type `T`, `false` value would be
169
+ * returned.
170
+ *
171
+ * If what you want is not just knowing whether the parametric value is following the
172
+ * type `T` or not, but throwing an exception with detailed reason, you can choose
173
+ * {@link assert} function instead. Also, if you want to know all the errors with
174
+ * detailed reasons, {@link validate} function would be useful.
175
+ *
176
+ * On the other and, if you don't want to allow any superfluous property that is not
177
+ * enrolled to the type `T`, you can use {@link equals} function instead.
178
+ *
179
+ * @template T Type of the input value
180
+ * @param input A value to be tested
181
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
182
+ * @returns Whether the parametric value is following the type `T` or not
183
+ *
184
+ * @author Jeongho Nam - https://github.com/samchon
185
+ */
186
+ export function is<T>(input: T): input is T;
187
+
188
+ /**
189
+ * Tests a value type.
190
+ *
191
+ * Tests a parametric value type and returns whether it's following the type `T` or not.
192
+ * If the parametric value is matched with the type `T`, `true` value would be returned.
193
+ * Otherwise, the parametric value is not following the type `T`, `false` value would be
194
+ * returned.
195
+ *
196
+ * If what you want is not just knowing whether the parametric value is following the
197
+ * type `T` or not, but throwing an exception with detailed reason, you can choose
198
+ * {@link assert} function instead. Also, if you want to know all the errors with
199
+ * detailed reasons, {@link validate} function would be useful.
200
+ *
201
+ * On the other and, if you don't want to allow any superfluous property that is not
202
+ * enrolled to the type `T`, you can use {@link equals} function instead.
203
+ *
204
+ * @template T Type of the input value
205
+ * @param input A value to be tested
206
+ * @returns Whether the parametric value is following the type `T` or not
207
+ *
208
+ * @author Jeongho Nam - https://github.com/samchon
209
+ */
210
+ export function is<T>(input: unknown): input is T;
211
+
212
+ /**
213
+ * @internal
214
+ */
215
+ export function is(): never {
216
+ halt("is");
217
+ }
218
+
219
+ /**
220
+ * Validates a value type.
221
+ *
222
+ * Validates a parametric value type and archives all the type errors into an
223
+ * {@link IValidation.errors} array, if the parametric value is not following the
224
+ * type `T`. Of course, if the parametric value is following the type `T`, the
225
+ * {@link IValidation.errors} array would be empty and {@link IValidation.success}
226
+ * would have the `true` value.
227
+ *
228
+ * If what you want is not finding all the error, but asserting the parametric value
229
+ * type with exception throwing, you can choose {@link assert} function instead.
230
+ * Otherwise, you just want to know whether the parametric value is matched with the
231
+ * type `T`, {@link is} function is the way to go.
232
+ *
233
+ * On the other and, if you don't want to allow any superfluous property that is not
234
+ * enrolled to the type `T`, you can use {@link validateEquals} function instead.
235
+ *
236
+ * @template Type of the input value
237
+ * @param input A value to be validated
238
+ * @returns Validation result
239
+ *
240
+ * @author Jeongho Nam - https://github.com/samchon
241
+ */
242
+ export function validate<T>(input: T): IValidation<T>;
243
+
244
+ /**
245
+ * Validates a value type.
246
+ *
247
+ * Validates a parametric value type and archives all the type errors into an
248
+ * {@link IValidation.errors} array, if the parametric value is not following the
249
+ * type `T`. Of course, if the parametric value is following the type `T`, the
250
+ * {@link IValidation.errors} array would be empty and {@link IValidation.success}
251
+ * would have the `true` value.
252
+ *
253
+ * If what you want is not finding all the error, but asserting the parametric value
254
+ * type with exception throwing, you can choose {@link assert} function instead.
255
+ * Otherwise, you just want to know whether the parametric value is matched with the
256
+ * type `T`, {@link is} function is the way to go.
257
+ *
258
+ * On the other and, if you don't want to allow any superfluous property that is not
259
+ * enrolled to the type `T`, you can use {@link validateEquals} function instead.
260
+ *
261
+ * @template Type of the input value
262
+ * @param input A value to be validated
263
+ * @returns Validation result
264
+ *
265
+ * @author Jeongho Nam - https://github.com/samchon
266
+ */
267
+ export function validate<T>(input: unknown): IValidation<T>;
268
+
269
+ /**
270
+ * @internal
271
+ */
272
+ export function validate(): never {
273
+ halt("validate");
274
+ }
275
+
276
+ /* -----------------------------------------------------------
277
+ STRICT VALIDATORS
278
+ ----------------------------------------------------------- */
279
+ /**
280
+ * Asserts equality between a value and its type.
281
+ *
282
+ * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
283
+ * reason, if the parametric value is not following the type `T` or some superfluous
284
+ * property that is not listed on the type `T` has been found. Otherwise, the value is
285
+ * following the type `T` without any superfluous property, just input parameter would
286
+ * be returned.
287
+ *
288
+ * If what you want is not asserting but just knowing whether the parametric value is
289
+ * following the type `T` or not, you can choose the {@link equals} function instead.
290
+ * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.
291
+ *
292
+ * On the other hand, if you want to allow superfluous property that is not enrolled
293
+ * to the type `T`, you can use {@link assert} function instead.
294
+ *
295
+ * @template T Type of the input value
296
+ * @param input A value to be asserted
297
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
298
+ * @returns Parametric input value
299
+ * @throws A {@link TypeGuardError} instance with detailed reason
300
+ *
301
+ * @author Jeongho Nam - https://github.com/samchon
302
+ */
303
+ export function assertEquals<T>(
304
+ input: T,
305
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
306
+ ): T;
307
+
308
+ /**
309
+ * Asserts equality between a value and its type.
310
+ *
311
+ * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
312
+ * reason, if the parametric value is not following the type `T` or some superfluous
313
+ * property that is not listed on the type `T` has been found. Otherwise, the value is
314
+ * following the type `T` without any superfluous property, just input parameter would
315
+ * be returned.
316
+ *
317
+ * If what you want is not asserting but just knowing whether the parametric value is
318
+ * following the type `T` or not, you can choose the {@link equals} function instead.
319
+ * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.
320
+ *
321
+ * On the other hand, if you want to allow superfluous property that is not enrolled
322
+ * to the type `T`, you can use {@link assert} function instead.
323
+ *
324
+ * @template T Type of the input value
325
+ * @param input A value to be asserted
326
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
327
+ * @returns Parametric input value casted as `T`
328
+ * @throws A {@link TypeGuardError} instance with detailed reason
329
+ *
330
+ * @author Jeongho Nam - https://github.com/samchon
331
+ */
332
+ export function assertEquals<T>(
333
+ input: unknown,
334
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
335
+ ): T;
336
+
337
+ /**
338
+ * @internal
339
+ */
340
+ export function assertEquals(): never {
341
+ halt("assertEquals");
342
+ }
343
+
344
+ /**
345
+ * Assertion guard of a type with equality.
346
+ *
347
+ * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
348
+ * reason, if the parametric value is not following the type `T` or some superfluous
349
+ * property that is not listed on the type `T` has been found.
350
+ *
351
+ * Otherwise, the value is following the type `T` without any superfluous property,
352
+ * nothing would be returned, but the input value would be automatically casted to
353
+ * the type `T`. This is the concept of "Assertion Guard" of a value type.
354
+ *
355
+ * If what you want is not asserting but just knowing whether the parametric value is
356
+ * following the type `T` or not, you can choose the {@link equals} function instead.
357
+ * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.
358
+ * Also, if you want to returns the parametric value when no problem, you can use
359
+ * {@link assert} function instead.
360
+ *
361
+ * On the other hand, if you want to allow superfluous property that is not enrolled
362
+ * to the type `T`, you can use {@link assertEquals} function instead.
363
+ *
364
+ * @template T Type of the input value
365
+ * @param input A value to be asserted
366
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
367
+ * @returns Parametric input value casted as `T`
368
+ * @throws A {@link TypeGuardError} instance with detailed reason
369
+ *
370
+ * @author Jeongho Nam - https://github.com/samchon
371
+ */
372
+ export function assertGuardEquals<T>(
373
+ input: T,
374
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
375
+ ): asserts input is T;
376
+
377
+ /**
378
+ * Assertion guard of a type with equality.
379
+ *
380
+ * Asserts a parametric value type and throws a {@link TypeGuardError} with detailed
381
+ * reason, if the parametric value is not following the type `T` or some superfluous
382
+ * property that is not listed on the type `T` has been found.
383
+ *
384
+ * Otherwise, the value is following the type `T` without any superfluous property,
385
+ * nothing would be returned, but the input value would be automatically casted to
386
+ * the type `T`. This is the concept of "Assertion Guard" of a value type.
387
+ *
388
+ * If what you want is not asserting but just knowing whether the parametric value is
389
+ * following the type `T` or not, you can choose the {@link equals} function instead.
390
+ * Otherwise, you want to know all the errors, {@link validateEquals} is the way to go.
391
+ * Also, if you want to returns the parametric value when no problem, you can use
392
+ * {@link assertEquals} function instead.
393
+ *
394
+ * On the other hand, if you want to allow superfluous property that is not enrolled
395
+ * to the type `T`, you can use {@link assertGuard} function instead.
396
+ *
397
+ * @template T Type of the input value
398
+ * @param input A value to be asserted
399
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
400
+ * @returns Parametric input value casted as `T`
401
+ * @throws A {@link TypeGuardError} instance with detailed reason
402
+ *
403
+ * @author Jeongho Nam - https://github.com/samchon
404
+ */
405
+ export function assertGuardEquals<T>(
406
+ input: unknown,
407
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
408
+ ): asserts input is T;
409
+
410
+ /**
411
+ * @internal
412
+ */
413
+ export function assertGuardEquals(): never {
414
+ halt("assertGuardEquals");
415
+ }
416
+
417
+ /**
418
+ * Tests equality between a value and its type.
419
+ *
420
+ * Tests a parametric value type and returns whether it's equivalent to the type `T`
421
+ * or not. If the parametric value is matched with the type `T` and there's not any
422
+ * superfluous property that is not listed on the type `T`, `true` value would be
423
+ * returned. Otherwise, the parametric value is not following the type `T` or some
424
+ * superfluous property exists, `false` value would be returned.
425
+ *
426
+ * If what you want is not just knowing whether the parametric value is following the
427
+ * type `T` or not, but throwing an exception with detailed reason, you can choose
428
+ * {@link assertEquals} function instead. Also, if you want to know all the errors with
429
+ * detailed reasons, {@link validateEquals} function would be useful.
430
+ *
431
+ * On the other hand, if you want to allow superfluous property that is not enrolled
432
+ * to the type `T`, you can use {@link is} function instead.
433
+ *
434
+ * @template T Type of the input value
435
+ * @param input A value to be tested
436
+ * @returns Whether the parametric value is equivalent to the type `T` or not
437
+ *
438
+ * @author Jeongho Nam - https://github.com/samchon
439
+ */
440
+ export function equals<T>(input: T): input is T;
441
+
442
+ /**
443
+ * Tests equality between a value and its type.
444
+ *
445
+ * Tests a parametric value type and returns whether it's equivalent to the type `T`
446
+ * or not. If the parametric value is matched with the type `T` and there's not any
447
+ * superfluous property that is not listed on the type `T`, `true` value would be
448
+ * returned. Otherwise, the parametric value is not following the type `T` or some
449
+ * superfluous property exists, `false` value would be returned.
450
+ *
451
+ * If what you want is not just knowing whether the parametric value is following the
452
+ * type `T` or not, but throwing an exception with detailed reason, you can choose
453
+ * {@link assertEquals} function instead. Also, if you want to know all the errors with
454
+ * detailed reasons, {@link validateEquals} function would be useful.
455
+ *
456
+ * On the other hand, if you want to allow superfluous property that is not enrolled
457
+ * to the type `T`, you can use {@link is} function instead.
458
+ *
459
+ * @template T Type of the input value
460
+ * @param input A value to be tested
461
+ * @returns Whether the parametric value is equivalent to the type `T` or not
462
+ *
463
+ * @author Jeongho Nam - https://github.com/samchon
464
+ */
465
+ export function equals<T>(input: unknown): input is T;
466
+
467
+ /**
468
+ * @internal
469
+ */
470
+ export function equals(): never {
471
+ halt("equals");
472
+ }
473
+
474
+ /**
475
+ * Validates equality between a value and its type.
476
+ *
477
+ * Validates a parametric value type and archives all the type errors into an
478
+ * {@link IValidation.errors} array, if the parametric value is not following the
479
+ * type `T` or some superfluous property that is not listed on the type `T` has been
480
+ * found. Of course, if the parametric value is following the type `T` and no
481
+ * superfluous property exists, the {@link IValidation.errors} array would be empty
482
+ * and {@link IValidation.success} would have the `true` value.
483
+ *
484
+ * If what you want is not finding all the error, but asserting the parametric value
485
+ * type with exception throwing, you can choose {@link assert} function instead.
486
+ * Otherwise, you just want to know whether the parametric value is matched with the
487
+ * type `T`, {@link is} function is the way to go.
488
+ *
489
+ * On the other and, if you don't want to allow any superfluous property that is not
490
+ * enrolled to the type `T`, you can use {@link validateEquals} function instead.
491
+ *
492
+ * @template Type of the input value
493
+ * @param input A value to be validated
494
+ * @returns Validation result
495
+ *
496
+ * @author Jeongho Nam - https://github.com/samchon
497
+ */
498
+ export function validateEquals<T>(input: T): IValidation<T>;
499
+
500
+ /**
501
+ * Validates equality between a value and its type.
502
+ *
503
+ * Validates a parametric value type and archives all the type errors into an
504
+ * {@link IValidation.errors} array, if the parametric value is not following the
505
+ * type `T` or some superfluous property that is not listed on the type `T` has been
506
+ * found. Of course, if the parametric value is following the type `T` and no
507
+ * superfluous property exists, the {@link IValidation.errors} array would be empty
508
+ * and {@link IValidation.success} would have the `true` value.
509
+ *
510
+ * If what you want is not finding all the error, but asserting the parametric value
511
+ * type with exception throwing, you can choose {@link assert} function instead.
512
+ * Otherwise, you just want to know whether the parametric value is matched with the
513
+ * type `T`, {@link is} function is the way to go.
514
+ *
515
+ * On the other and, if you don't want to allow any superfluous property that is not
516
+ * enrolled to the type `T`, you can use {@link validateEquals} function instead.
517
+ *
518
+ * @template Type of the input value
519
+ * @param input A value to be validated
520
+ * @returns Validation result
521
+ *
522
+ * @author Jeongho Nam - https://github.com/samchon
523
+ */
524
+ export function validateEquals<T>(input: unknown): IValidation<T>;
525
+
526
+ /**
527
+ * @internal
528
+ */
529
+ export function validateEquals(): never {
530
+ halt("validateEquals");
531
+ }
532
+
533
+ /* -----------------------------------------------------------
534
+ RANDOM
535
+ ----------------------------------------------------------- */
536
+ /**
537
+ * > You must configure the generic argument `T`.
538
+ *
539
+ * Generate random data.
540
+ *
541
+ * Generates a random data following type the `T`.
542
+ *
543
+ * For reference, this `typia.random()` function generates only primitive type.
544
+ * If there're some methods in the type `T` or its nested instances, those would
545
+ * be ignored. Also, when the type `T` has a `toJSON()` method, its return type
546
+ * would be generated instead.
547
+ *
548
+ * @template T Type of data to generate
549
+ * @param generator Random data generator
550
+ * @return Randomly generated data
551
+ *
552
+ * @author Jeongho Nam - https://github.com/samchon
553
+ */
554
+ export function random(generator?: Partial<IRandomGenerator>): never;
555
+
556
+ /**
557
+ * Generate random data.
558
+ *
559
+ * Generates a random data following type the `T`.
560
+ *
561
+ * For reference, this `typia.random()` function generates only primitive type.
562
+ * If there're some methods in the type `T` or its nested instances, those would
563
+ * be ignored. Also, when the type `T` has a `toJSON()` method, its return type
564
+ * would be generated instead.
565
+ *
566
+ * @template T Type of data to generate
567
+ * @param generator Random data generator
568
+ * @return Randomly generated data
569
+ *
570
+ * @author Jeongho Nam - https://github.com/samchon
571
+ */
572
+ export function random<T>(generator?: Partial<IRandomGenerator>): Resolved<T>;
573
+
574
+ /**
575
+ * @internal
576
+ */
577
+ export function random(): never {
578
+ halt("random");
579
+ }
580
+
581
+ /* -----------------------------------------------------------
582
+ FACTORY FUNCTIONS
583
+ ----------------------------------------------------------- */
584
+ /**
585
+ * Creates a reusable {@link assert} function.
586
+ *
587
+ * @danger You must configure the generic argument `T`
588
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
589
+ * @returns Nothing until you configure the generic argument `T`
590
+ * @throws compile error
591
+ *
592
+ * @author Jeongho Nam - https://github.com/samchon
593
+ */
594
+ export function createAssert(
595
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
596
+ ): never;
597
+
598
+ /**
599
+ * Creates a reusable {@link assert} function.
600
+ *
601
+ * @template T Type of the input value
602
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
603
+ * @returns A reusable `assert` function
604
+ *
605
+ * @author Jeongho Nam - https://github.com/samchon
606
+ */
607
+ export function createAssert<T>(
608
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
609
+ ): (input: unknown) => T;
610
+
611
+ /**
612
+ * @internal
613
+ */
614
+ export function createAssert<T>(): (input: unknown) => T {
615
+ halt("createAssert");
616
+ }
617
+
618
+ /**
619
+ * Creates a reusable {@link assertGuard} function.
620
+ *
621
+ * Note that, you've to declare the variable type of the factory function caller
622
+ * like below. If you don't declare the variable type, compilation error be thrown.
623
+ * This is the special rule of the TypeScript compiler.
624
+ *
625
+ * ```typescript
626
+ * // MUST DECLARE THE VARIABLE TYPE
627
+ * const func: typia.AssertionGuard<number> = typia.createAssertGuard<number>();
628
+ *
629
+ * // IF NOT, COMPILATION ERROR BE OCCURED
630
+ * const func = typia.createAssertGuard<number>();
631
+ * ```
632
+ *
633
+ * > *Assertions require every name in the call target to be declared with an*
634
+ * > *explicit type annotation.*
635
+ *
636
+ * @danger You must configure the generic argument `T`
637
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
638
+ * @returns Nothing until you configure the generic argument `T`
639
+ * @throws compile error
640
+ *
641
+ * @author Jeongho Nam - https://github.com/samchon
642
+ */
643
+ export function createAssertGuard(
644
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
645
+ ): never;
646
+
647
+ /**
648
+ * Creates a reusable {@link assertGuard} function.
649
+ *
650
+ * Note that, you've to declare the variable type of the factory function caller
651
+ * like below. If you don't declare the variable type, compilation error be thrown.
652
+ * This is the special rule of the TypeScript compiler.
653
+ *
654
+ * ```typescript
655
+ * // MUST DECLARE THE VARIABLE TYPE
656
+ * const func: typia.AssertionGuard<number> = typia.createAssertGuard<number>();
657
+ *
658
+ * // IF NOT, COMPILATION ERROR BE OCCURED
659
+ * const func = typia.createAssertGuard<number>();
660
+ * ```
661
+ *
662
+ * > *Assertions require every name in the call target to be declared with an*
663
+ * > *explicit type annotation.*
664
+ *
665
+ * @returns Nothing until you configure the generic argument `T`
666
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
667
+ * @throws compile error
668
+ *
669
+ * @author Jeongho Nam - https://github.com/samchon
670
+ */
671
+ export function createAssertGuard<T>(
672
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
673
+ ): (input: unknown) => AssertionGuard<T>;
674
+
675
+ /**
676
+ * @internal
677
+ */
678
+ export function createAssertGuard<T>(): (input: unknown) => AssertionGuard<T> {
679
+ halt("createAssertGuard");
680
+ }
681
+
682
+ /**
683
+ * Creates a reusable {@link is} function.
684
+ *
685
+ * @danger You must configure the generic argument `T`
686
+ * @returns Nothing until you configure the generic argument `T`
687
+ * @throws compile error
688
+ *
689
+ * @author Jeongho Nam - https://github.com/samchon
690
+ */
691
+ export function createIs(): never;
692
+
693
+ /**
694
+ * Creates a reusable {@link is} function.
695
+ *
696
+ * @template T Type of the input value
697
+ * @returns A reusable `is` function
698
+ *
699
+ * @author Jeongho Nam - https://github.com/samchon
700
+ */
701
+ export function createIs<T>(): (input: unknown) => input is T;
702
+
703
+ /**
704
+ * @internal
705
+ */
706
+ export function createIs<T>(): (input: unknown) => input is T {
707
+ halt("createIs");
708
+ }
709
+
710
+ /**
711
+ * Creates a reusable {@link validate} function.
712
+ *
713
+ * @danger You must configure the generic argument `T`
714
+ * @returns Nothing until you configure the generic argument `T`
715
+ * @throws compile error
716
+ *
717
+ * @author Jeongho Nam - https://github.com/samchon
718
+ */
719
+ export function createValidate(): never;
720
+
721
+ /**
722
+ * Creates a reusable {@link validate} function.
723
+ *
724
+ * @template T Type of the input value
725
+ * @returns A reusable `validate` function
726
+ *
727
+ * @author Jeongho Nam - https://github.com/samchon
728
+ */
729
+ export function createValidate<T>(): (input: unknown) => IValidation<T>;
730
+
731
+ /**
732
+ * @internal
733
+ */
734
+ export function createValidate(): (input: unknown) => IValidation {
735
+ halt("createValidate");
736
+ }
737
+
738
+ /**
739
+ * Creates a reusable {@link assertEquals} function.
740
+ *
741
+ * @danger You must configure the generic argument `T`
742
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
743
+ * @returns Nothing until you configure the generic argument `T`
744
+ * @throws compile error
745
+ *
746
+ * @author Jeongho Nam - https://github.com/samchon
747
+ */
748
+ export function createAssertEquals(
749
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
750
+ ): never;
751
+
752
+ /**
753
+ * Creates a reusable {@link assertEquals} function.
754
+ *
755
+ * @template T Type of the input value
756
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
757
+ * @returns A reusable `assertEquals` function
758
+ *
759
+ * @author Jeongho Nam - https://github.com/samchon
760
+ */
761
+ export function createAssertEquals<T>(
762
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
763
+ ): (input: unknown) => T;
764
+
765
+ /**
766
+ * @internal
767
+ */
768
+ export function createAssertEquals<T>(): (input: unknown) => T {
769
+ halt("createAssertEquals");
770
+ }
771
+
772
+ /**
773
+ * Creates a reusable {@link assertGuardEquals} function.
774
+ *
775
+ * Note that, you've to declare the variable type of the factory function caller
776
+ * like below. If you don't declare the variable type, compilation error be thrown.
777
+ * This is the special rule of the TypeScript compiler.
778
+ *
779
+ * ```typescript
780
+ * // MUST DECLARE THE VARIABLE TYPE
781
+ * const func: typia.AssertionGuard<number> = typia.createAssertGuardEquals<number>();
782
+ *
783
+ * // IF NOT, COMPILATION ERROR BE OCCURED
784
+ * const func = typia.createAssertGuardEquals<number>();
785
+ * ```
786
+ *
787
+ * > *Assertions require every name in the call target to be declared with an*
788
+ * > *explicit type annotation.*
789
+ *
790
+ * @danger You must configure the generic argument `T`
791
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
792
+ * @returns Nothing until you configure the generic argument `T`
793
+ * @throws compile error
794
+ *
795
+ * @author Jeongho Nam - https://github.com/samchon
796
+ */
797
+ export function createAssertGuardEquals(
798
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
799
+ ): never;
800
+
801
+ /**
802
+ * Creates a reusable {@link assertGuardEquals} function.
803
+ *
804
+ * Note that, you've to declare the variable type of the factory function caller
805
+ * like below. If you don't declare the variable type, compilation error be thrown.
806
+ * This is the special rule of the TypeScript compiler.
807
+ *
808
+ * ```typescript
809
+ * // MUST DECLARE THE VARIABLE TYPE
810
+ * const func: typia.AssertionGuard<number> = typia.createAssertGuardEquals<number>();
811
+ *
812
+ * // IF NOT, COMPILATION ERROR BE OCCURED
813
+ * const func = typia.createAssertGuardEquals<number>();
814
+ * ```
815
+ *
816
+ * > *Assertions require every name in the call target to be declared with an*
817
+ * > *explicit type annotation.*
818
+ *
819
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
820
+ * @returns Nothing until you configure the generic argument `T`
821
+ * @throws compile error
822
+ *
823
+ * @author Jeongho Nam - https://github.com/samchon
824
+ */
825
+ export function createAssertGuardEquals<T>(
826
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
827
+ ): (input: unknown) => AssertionGuard<T>;
828
+
829
+ /**
830
+ * @internal
831
+ */
832
+ export function createAssertGuardEquals<T>(): (
833
+ input: unknown,
834
+ ) => AssertionGuard<T> {
835
+ halt("createAssertGuardEquals");
836
+ }
837
+
838
+ /**
839
+ * Creates a reusable {@link equals} function.
840
+ *
841
+ * @danger You must configure the generic argument `T`
842
+ * @returns Nothing until you configure the generic argument `T`
843
+ * @throws compile error
844
+ *
845
+ * @author Jeongho Nam - https://github.com/samchon
846
+ */
847
+ export function createEquals(): never;
848
+
849
+ /**
850
+ * Creates a reusable {@link equals} function.
851
+ *
852
+ * @template T Type of the input value
853
+ * @returns A reusable `equals` function
854
+ *
855
+ * @author Jeongho Nam - https://github.com/samchon
856
+ */
857
+ export function createEquals<T>(): (input: unknown) => input is T;
858
+
859
+ /**
860
+ * @internal
861
+ */
862
+ export function createEquals<T>(): (input: unknown) => input is T {
863
+ halt("createEquals");
864
+ }
865
+
866
+ /**
867
+ * Creates a reusable {@link validateEquals} function.
868
+ *
869
+ * @danger You must configure the generic argument `T`
870
+ * @returns Nothing until you configure the generic argument `T`
871
+ * @throws compile error
872
+ *
873
+ * @author Jeongho Nam - https://github.com/samchon
874
+ */
875
+ export function createValidateEquals(): never;
876
+
877
+ /**
878
+ * Creates a reusable {@link validateEquals} function.
879
+ *
880
+ * @template T Type of the input value
881
+ * @returns A reusable `validateEquals` function
882
+ *
883
+ * @author Jeongho Nam - https://github.com/samchon
884
+ */
885
+ export function createValidateEquals<T>(): (input: unknown) => IValidation<T>;
886
+
887
+ /**
888
+ * @internal
889
+ */
890
+ export function createValidateEquals(): (input: unknown) => IValidation {
891
+ halt("createValidateEquals");
892
+ }
893
+
894
+ /**
895
+ * Creates a reusable {@link random} function.
896
+ *
897
+ * @danger You must configure the generic argument `T`
898
+ * @param generator Random data generator
899
+ * @returns Nothing until you configure the generic argument `T`
900
+ * @throws compile error
901
+ *
902
+ * @author Jeongho Nam - https://github.com/samchon
903
+ */
904
+ export function createRandom(generator?: Partial<IRandomGenerator>): never;
905
+
906
+ /**
907
+ * Creates a resuable {@link random} function.
908
+ *
909
+ * @template T Type of the input value
910
+ * @param generator Random data generator
911
+ * @returns A reusable `random` function
912
+ *
913
+ * @author Jeongho Nam - https://github.com/samchon
914
+ */
915
+ export function createRandom<T>(
916
+ generator?: Partial<IRandomGenerator>,
917
+ ): () => Resolved<T>;
918
+
919
+ /**
920
+ * @internal
921
+ */
922
+ export function createRandom(): never {
923
+ halt("createRandom");
924
+ }
925
+
926
+ /**
927
+ * @internal
928
+ */
929
+ function halt(name: string): never {
930
+ throw new Error(
931
+ `Error on typia.${name}(): no transform has been configured. Read and follow https://typia.io/docs/setup please.`,
932
+ );
933
+ }