typia 9.1.1 → 9.3.0-dev.20250511

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 (553) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +149 -149
  3. package/lib/executable/setup/PluginConfigurator.js +3 -3
  4. package/lib/executable/setup/PluginConfigurator.mjs +3 -3
  5. package/lib/executable/typia.js +15 -15
  6. package/lib/executable/typia.mjs +15 -15
  7. package/lib/factories/ExpressionFactory.d.mts +1 -1
  8. package/lib/factories/ExpressionFactory.d.ts +1 -1
  9. package/lib/factories/ExpressionFactory.js +2 -2
  10. package/lib/factories/ExpressionFactory.js.map +1 -1
  11. package/lib/factories/ExpressionFactory.mjs +2 -2
  12. package/lib/internal/_createStandardSchema.d.mts +3 -0
  13. package/lib/internal/_createStandardSchema.d.ts +3 -0
  14. package/lib/internal/_createStandardSchema.js +135 -0
  15. package/lib/internal/_createStandardSchema.js.map +1 -0
  16. package/lib/internal/_createStandardSchema.mjs +133 -0
  17. package/lib/internal/_createStandardSchema.mjs.map +1 -0
  18. package/lib/llm.d.mts +6 -4
  19. package/lib/llm.d.ts +6 -4
  20. package/lib/llm.js +7 -0
  21. package/lib/llm.js.map +1 -1
  22. package/lib/llm.mjs +7 -1
  23. package/lib/module.d.mts +3 -2
  24. package/lib/module.d.ts +3 -2
  25. package/lib/module.js.map +1 -1
  26. package/lib/programmers/FeatureProgrammer.d.mts +1 -0
  27. package/lib/programmers/FeatureProgrammer.d.ts +1 -0
  28. package/lib/programmers/FeatureProgrammer.js +3 -1
  29. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  30. package/lib/programmers/FeatureProgrammer.mjs +3 -1
  31. package/lib/programmers/ValidateProgrammer.d.mts +1 -0
  32. package/lib/programmers/ValidateProgrammer.d.ts +1 -0
  33. package/lib/programmers/ValidateProgrammer.js +3 -0
  34. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  35. package/lib/programmers/ValidateProgrammer.mjs +3 -0
  36. package/lib/transformers/CallExpressionTransformer.js +10 -2
  37. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  38. package/lib/transformers/CallExpressionTransformer.mjs +10 -2
  39. package/lib/transformers/features/llm/LlmApplicationTransformer.js +46 -35
  40. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  41. package/lib/transformers/features/llm/LlmApplicationTransformer.mjs +44 -34
  42. package/lib/transformers/features/llm/LlmControllerTransformer.d.mts +5 -0
  43. package/lib/transformers/features/llm/LlmControllerTransformer.d.ts +5 -0
  44. package/lib/transformers/features/llm/LlmControllerTransformer.js +67 -0
  45. package/lib/transformers/features/llm/LlmControllerTransformer.js.map +1 -0
  46. package/lib/transformers/features/llm/LlmControllerTransformer.mjs +63 -0
  47. package/lib/transformers/features/llm/LlmControllerTransformer.mjs.map +1 -0
  48. package/package.json +6 -4
  49. package/src/AssertionGuard.ts +1 -1
  50. package/src/CamelCase.ts +75 -75
  51. package/src/IRandomGenerator.ts +49 -49
  52. package/src/IReadableURLSearchParams.ts +9 -9
  53. package/src/IValidation.ts +1 -1
  54. package/src/PascalCase.ts +71 -71
  55. package/src/Primitive.ts +92 -92
  56. package/src/Resolved.ts +74 -74
  57. package/src/SnakeCase.ts +126 -126
  58. package/src/TypeGuardError.ts +37 -37
  59. package/src/executable/TypiaGenerateWizard.ts +83 -83
  60. package/src/executable/TypiaPatchWizard.ts +45 -45
  61. package/src/executable/TypiaSetupWizard.ts +171 -171
  62. package/src/executable/setup/ArgumentParser.ts +42 -42
  63. package/src/executable/setup/CommandExecutor.ts +8 -8
  64. package/src/executable/setup/FileRetriever.ts +19 -19
  65. package/src/executable/setup/PackageManager.ts +87 -87
  66. package/src/executable/setup/PluginConfigurator.ts +69 -69
  67. package/src/executable/typia.ts +55 -55
  68. package/src/factories/CommentFactory.ts +79 -79
  69. package/src/factories/ExpressionFactory.ts +219 -216
  70. package/src/factories/IdentifierFactory.ts +89 -89
  71. package/src/factories/JsonMetadataFactory.ts +83 -83
  72. package/src/factories/LiteralFactory.ts +52 -52
  73. package/src/factories/MetadataCollection.ts +278 -278
  74. package/src/factories/MetadataCommentTagFactory.ts +648 -648
  75. package/src/factories/MetadataFactory.ts +404 -404
  76. package/src/factories/MetadataTypeTagFactory.ts +413 -413
  77. package/src/factories/MetadataTypeTagSchemaFactory.ts +82 -82
  78. package/src/factories/NumericRangeFactory.ts +72 -72
  79. package/src/factories/ProtobufFactory.ts +875 -875
  80. package/src/factories/StatementFactory.ts +90 -90
  81. package/src/factories/TemplateFactory.ts +64 -64
  82. package/src/factories/TypeFactory.ts +140 -140
  83. package/src/factories/ValueFactory.ts +12 -12
  84. package/src/factories/internal/metadata/IMetadataIteratorProps.ts +17 -17
  85. package/src/factories/internal/metadata/MetadataHelper.ts +21 -21
  86. package/src/factories/internal/metadata/emend_metadata_atomics.ts +45 -45
  87. package/src/factories/internal/metadata/emplace_metadata_alias.ts +33 -33
  88. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +39 -39
  89. package/src/factories/internal/metadata/emplace_metadata_object.ts +212 -212
  90. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +57 -57
  91. package/src/factories/internal/metadata/explore_metadata.ts +31 -31
  92. package/src/factories/internal/metadata/iterate_metadata.ts +54 -54
  93. package/src/factories/internal/metadata/iterate_metadata_alias.ts +33 -33
  94. package/src/factories/internal/metadata/iterate_metadata_array.ts +63 -63
  95. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  96. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +28 -28
  97. package/src/factories/internal/metadata/iterate_metadata_collection.ts +146 -146
  98. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +32 -32
  99. package/src/factories/internal/metadata/iterate_metadata_constant.ts +76 -76
  100. package/src/factories/internal/metadata/iterate_metadata_escape.ts +49 -49
  101. package/src/factories/internal/metadata/iterate_metadata_function.ts +91 -91
  102. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +212 -212
  103. package/src/factories/internal/metadata/iterate_metadata_map.ts +57 -57
  104. package/src/factories/internal/metadata/iterate_metadata_native.ts +264 -264
  105. package/src/factories/internal/metadata/iterate_metadata_object.ts +35 -35
  106. package/src/factories/internal/metadata/iterate_metadata_set.ts +57 -57
  107. package/src/factories/internal/metadata/iterate_metadata_sort.ts +87 -87
  108. package/src/factories/internal/metadata/iterate_metadata_template.ts +41 -41
  109. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +26 -26
  110. package/src/factories/internal/metadata/iterate_metadata_union.ts +19 -19
  111. package/src/functional.ts +740 -740
  112. package/src/http.ts +1040 -1040
  113. package/src/index.ts +4 -4
  114. package/src/internal/_IProtobufWriter.ts +18 -18
  115. package/src/internal/_ProtobufReader.ts +194 -194
  116. package/src/internal/_ProtobufSizer.ts +145 -145
  117. package/src/internal/_ProtobufWriter.ts +145 -145
  118. package/src/internal/_accessExpressionAsString.ts +46 -46
  119. package/src/internal/_assertGuard.ts +13 -13
  120. package/src/internal/_createStandardSchema.ts +134 -0
  121. package/src/internal/_functionalTypeGuardErrorFactory.ts +4 -4
  122. package/src/internal/_httpFormDataReadArray.ts +4 -4
  123. package/src/internal/_httpFormDataReadBigint.ts +18 -18
  124. package/src/internal/_httpFormDataReadBlob.ts +10 -10
  125. package/src/internal/_httpFormDataReadBoolean.ts +16 -16
  126. package/src/internal/_httpFormDataReadFile.ts +10 -10
  127. package/src/internal/_httpFormDataReadNumber.ts +15 -15
  128. package/src/internal/_httpFormDataReadString.ts +10 -10
  129. package/src/internal/_httpHeaderReadBigint.ts +10 -10
  130. package/src/internal/_httpHeaderReadBoolean.ts +8 -8
  131. package/src/internal/_httpHeaderReadNumber.ts +7 -7
  132. package/src/internal/_httpParameterReadBigint.ts +10 -10
  133. package/src/internal/_httpParameterReadBoolean.ts +8 -8
  134. package/src/internal/_httpParameterReadNumber.ts +7 -7
  135. package/src/internal/_httpParameterReadString.ts +2 -2
  136. package/src/internal/_httpQueryParseURLSearchParams.ts +12 -12
  137. package/src/internal/_httpQueryReadArray.ts +4 -4
  138. package/src/internal/_httpQueryReadBigint.ts +12 -12
  139. package/src/internal/_httpQueryReadBoolean.ts +14 -14
  140. package/src/internal/_httpQueryReadNumber.ts +9 -9
  141. package/src/internal/_httpQueryReadString.ts +4 -4
  142. package/src/internal/_isBetween.ts +2 -2
  143. package/src/internal/_isBigintString.ts +8 -8
  144. package/src/internal/_isFormatByte.ts +7 -7
  145. package/src/internal/_isFormatDate.ts +3 -3
  146. package/src/internal/_isFormatDateTime.ts +4 -4
  147. package/src/internal/_isFormatDuration.ts +4 -4
  148. package/src/internal/_isFormatEmail.ts +4 -4
  149. package/src/internal/_isFormatHostname.ts +4 -4
  150. package/src/internal/_isFormatIdnEmail.ts +4 -4
  151. package/src/internal/_isFormatIdnHostname.ts +4 -4
  152. package/src/internal/_isFormatIpv4.ts +4 -4
  153. package/src/internal/_isFormatIpv6.ts +4 -4
  154. package/src/internal/_isFormatIri.ts +3 -3
  155. package/src/internal/_isFormatIriReference.ts +4 -4
  156. package/src/internal/_isFormatJsonPointer.ts +3 -3
  157. package/src/internal/_isFormatPassword.ts +1 -1
  158. package/src/internal/_isFormatRegex.ts +8 -8
  159. package/src/internal/_isFormatRelativeJsonPointer.ts +4 -4
  160. package/src/internal/_isFormatTime.ts +4 -4
  161. package/src/internal/_isFormatUri.ts +6 -6
  162. package/src/internal/_isFormatUriReference.ts +5 -5
  163. package/src/internal/_isFormatUriTemplate.ts +4 -4
  164. package/src/internal/_isFormatUrl.ts +4 -4
  165. package/src/internal/_isFormatUuid.ts +3 -3
  166. package/src/internal/_isTypeFloat.ts +5 -5
  167. package/src/internal/_isTypeInt32.ts +5 -5
  168. package/src/internal/_isTypeInt64.ts +5 -5
  169. package/src/internal/_isTypeUint32.ts +5 -5
  170. package/src/internal/_isTypeUint64.ts +5 -5
  171. package/src/internal/_isUniqueItems.ts +159 -159
  172. package/src/internal/_jsonStringifyNumber.ts +12 -12
  173. package/src/internal/_jsonStringifyRest.ts +3 -3
  174. package/src/internal/_jsonStringifyString.ts +42 -42
  175. package/src/internal/_jsonStringifyTail.ts +2 -2
  176. package/src/internal/_llmApplicationFinalize.ts +20 -20
  177. package/src/internal/_miscCloneAny.ts +46 -46
  178. package/src/internal/_notationAny.ts +37 -37
  179. package/src/internal/_notationCamel.ts +13 -13
  180. package/src/internal/_notationPascal.ts +8 -8
  181. package/src/internal/_notationSnake.ts +43 -43
  182. package/src/internal/_randomArray.ts +21 -21
  183. package/src/internal/_randomBigint.ts +6 -6
  184. package/src/internal/_randomBoolean.ts +1 -1
  185. package/src/internal/_randomFormatByte.ts +3 -3
  186. package/src/internal/_randomFormatDate.ts +18 -18
  187. package/src/internal/_randomFormatDatetime.ts +16 -16
  188. package/src/internal/_randomFormatDuration.ts +27 -27
  189. package/src/internal/_randomFormatEmail.ts +11 -11
  190. package/src/internal/_randomFormatHostname.ts +6 -6
  191. package/src/internal/_randomFormatIdnEmail.ts +3 -3
  192. package/src/internal/_randomFormatIdnHostname.ts +3 -3
  193. package/src/internal/_randomFormatIpv4.ts +11 -11
  194. package/src/internal/_randomFormatIpv6.ts +11 -11
  195. package/src/internal/_randomFormatIri.ts +3 -3
  196. package/src/internal/_randomFormatIriReference.ts +3 -3
  197. package/src/internal/_randomFormatJsonPointer.ts +7 -7
  198. package/src/internal/_randomFormatPassword.ts +8 -8
  199. package/src/internal/_randomFormatRegex.ts +4 -4
  200. package/src/internal/_randomFormatRelativeJsonPointer.ts +8 -8
  201. package/src/internal/_randomFormatTime.ts +14 -14
  202. package/src/internal/_randomFormatUri.ts +3 -3
  203. package/src/internal/_randomFormatUriReference.ts +3 -3
  204. package/src/internal/_randomFormatUriTemplate.ts +3 -3
  205. package/src/internal/_randomFormatUrl.ts +11 -11
  206. package/src/internal/_randomFormatUuid.ts +6 -6
  207. package/src/internal/_randomInteger.ts +53 -53
  208. package/src/internal/_randomNumber.ts +80 -80
  209. package/src/internal/_randomPattern.ts +10 -10
  210. package/src/internal/_randomPick.ts +9 -9
  211. package/src/internal/_randomString.ts +24 -24
  212. package/src/internal/_throwTypeGuardError.ts +5 -5
  213. package/src/internal/_validateReport.ts +13 -13
  214. package/src/internal/private/__notationCapitalize.ts +2 -2
  215. package/src/internal/private/__notationUnsnake.ts +24 -24
  216. package/src/json.ts +696 -696
  217. package/src/llm.ts +358 -335
  218. package/src/misc.ts +651 -651
  219. package/src/module.ts +936 -929
  220. package/src/notations.ts +820 -820
  221. package/src/programmers/AssertProgrammer.ts +454 -454
  222. package/src/programmers/CheckerProgrammer.ts +1617 -1617
  223. package/src/programmers/FeatureProgrammer.ts +627 -622
  224. package/src/programmers/ImportProgrammer.ts +185 -185
  225. package/src/programmers/IsProgrammer.ts +273 -273
  226. package/src/programmers/RandomProgrammer.ts +1190 -1190
  227. package/src/programmers/TypiaProgrammer.ts +175 -175
  228. package/src/programmers/ValidateProgrammer.ts +448 -439
  229. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +153 -153
  230. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +125 -125
  231. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +115 -115
  232. package/src/programmers/functional/FunctionalIsFunctionProgrammer.ts +72 -72
  233. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +113 -113
  234. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +116 -116
  235. package/src/programmers/functional/FunctionalValidateFunctionProgrammer.ts +119 -119
  236. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +274 -274
  237. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +135 -135
  238. package/src/programmers/functional/internal/FunctionalGeneralProgrammer.ts +34 -34
  239. package/src/programmers/helpers/AtomicPredicator.ts +35 -35
  240. package/src/programmers/helpers/CloneJoiner.ts +143 -143
  241. package/src/programmers/helpers/FunctionProgrammer.ts +67 -67
  242. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  243. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  244. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  245. package/src/programmers/helpers/NotationJoiner.ts +144 -144
  246. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  247. package/src/programmers/helpers/ProtobufUtil.ts +228 -228
  248. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  249. package/src/programmers/helpers/PruneJoiner.ts +148 -148
  250. package/src/programmers/helpers/RandomJoiner.ts +168 -168
  251. package/src/programmers/helpers/StringifyJoinder.ts +115 -115
  252. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  253. package/src/programmers/helpers/UnionExplorer.ts +372 -372
  254. package/src/programmers/helpers/UnionPredicator.ts +79 -79
  255. package/src/programmers/helpers/disable_function_programmer_declare.ts +32 -32
  256. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +99 -99
  257. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +99 -99
  258. package/src/programmers/http/HttpAssertQueryProgrammer.ts +105 -105
  259. package/src/programmers/http/HttpFormDataProgrammer.ts +308 -308
  260. package/src/programmers/http/HttpHeadersProgrammer.ts +400 -400
  261. package/src/programmers/http/HttpIsFormDataProgrammer.ts +108 -108
  262. package/src/programmers/http/HttpIsHeadersProgrammer.ts +108 -108
  263. package/src/programmers/http/HttpIsQueryProgrammer.ts +114 -114
  264. package/src/programmers/http/HttpParameterProgrammer.ts +115 -115
  265. package/src/programmers/http/HttpQueryProgrammer.ts +336 -336
  266. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +92 -92
  267. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +92 -92
  268. package/src/programmers/http/HttpValidateQueryProgrammer.ts +98 -98
  269. package/src/programmers/internal/check_array_length.ts +47 -47
  270. package/src/programmers/internal/check_bigint.ts +50 -50
  271. package/src/programmers/internal/check_dynamic_key.ts +201 -201
  272. package/src/programmers/internal/check_dynamic_properties.ts +208 -208
  273. package/src/programmers/internal/check_everything.ts +23 -23
  274. package/src/programmers/internal/check_native.ts +27 -27
  275. package/src/programmers/internal/check_number.ts +112 -112
  276. package/src/programmers/internal/check_object.ts +75 -75
  277. package/src/programmers/internal/check_string.ts +50 -50
  278. package/src/programmers/internal/check_template.ts +48 -48
  279. package/src/programmers/internal/check_union_array_like.ts +335 -335
  280. package/src/programmers/internal/decode_union_object.ts +116 -116
  281. package/src/programmers/internal/feature_object_entries.ts +61 -61
  282. package/src/programmers/internal/json_schema_alias.ts +47 -47
  283. package/src/programmers/internal/json_schema_array.ts +45 -45
  284. package/src/programmers/internal/json_schema_bigint.ts +15 -15
  285. package/src/programmers/internal/json_schema_boolean.ts +15 -15
  286. package/src/programmers/internal/json_schema_constant.ts +26 -26
  287. package/src/programmers/internal/json_schema_description.ts +12 -12
  288. package/src/programmers/internal/json_schema_discriminator.ts +35 -35
  289. package/src/programmers/internal/json_schema_escaped.ts +82 -82
  290. package/src/programmers/internal/json_schema_native.ts +33 -33
  291. package/src/programmers/internal/json_schema_number.ts +15 -15
  292. package/src/programmers/internal/json_schema_object.ts +158 -158
  293. package/src/programmers/internal/json_schema_plugin.ts +18 -18
  294. package/src/programmers/internal/json_schema_station.ts +185 -185
  295. package/src/programmers/internal/json_schema_string.ts +15 -15
  296. package/src/programmers/internal/json_schema_template.ts +55 -55
  297. package/src/programmers/internal/json_schema_title.ts +20 -20
  298. package/src/programmers/internal/json_schema_tuple.ts +35 -35
  299. package/src/programmers/internal/metadata_to_pattern.ts +42 -42
  300. package/src/programmers/internal/postfix_of_tuple.ts +5 -5
  301. package/src/programmers/internal/prune_object_properties.ts +71 -71
  302. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -162
  303. package/src/programmers/internal/stringify_native.ts +7 -7
  304. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  305. package/src/programmers/internal/template_to_pattern.ts +23 -23
  306. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +23 -23
  307. package/src/programmers/json/JsonApplicationProgrammer.ts +266 -266
  308. package/src/programmers/json/JsonAssertParseProgrammer.ts +113 -113
  309. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +115 -115
  310. package/src/programmers/json/JsonIsParseProgrammer.ts +114 -114
  311. package/src/programmers/json/JsonIsStringifyProgrammer.ts +108 -108
  312. package/src/programmers/json/JsonSchemaProgrammer.ts +26 -26
  313. package/src/programmers/json/JsonSchemasProgrammer.ts +91 -91
  314. package/src/programmers/json/JsonStringifyProgrammer.ts +1124 -1124
  315. package/src/programmers/json/JsonValidateParseProgrammer.ts +105 -105
  316. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +124 -124
  317. package/src/programmers/llm/LlmApplicationProgrammer.ts +401 -401
  318. package/src/programmers/llm/LlmModelPredicator.ts +127 -127
  319. package/src/programmers/llm/LlmParametersProgrammer.ts +93 -93
  320. package/src/programmers/llm/LlmSchemaProgrammer.ts +192 -192
  321. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +95 -95
  322. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +116 -116
  323. package/src/programmers/misc/MiscCloneProgrammer.ts +1032 -1032
  324. package/src/programmers/misc/MiscIsCloneProgrammer.ts +99 -99
  325. package/src/programmers/misc/MiscIsPruneProgrammer.ts +97 -97
  326. package/src/programmers/misc/MiscLiteralsProgrammer.ts +80 -80
  327. package/src/programmers/misc/MiscPruneProgrammer.ts +728 -728
  328. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +111 -111
  329. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +113 -113
  330. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +101 -101
  331. package/src/programmers/notations/NotationGeneralProgrammer.ts +984 -984
  332. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +105 -105
  333. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +119 -119
  334. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +98 -98
  335. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +102 -102
  336. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +654 -654
  337. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +945 -945
  338. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +109 -109
  339. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +98 -98
  340. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +179 -179
  341. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +92 -92
  342. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +119 -119
  343. package/src/protobuf.ts +861 -861
  344. package/src/reflect.ts +50 -50
  345. package/src/schemas/json/IJsonApplication.ts +73 -73
  346. package/src/schemas/json/IJsonSchemaCollection.ts +29 -29
  347. package/src/schemas/json/IJsonSchemaUnit.ts +32 -32
  348. package/src/schemas/json/__IJsonApplication.ts +63 -63
  349. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  350. package/src/schemas/metadata/IMetadata.ts +35 -35
  351. package/src/schemas/metadata/IMetadataAlias.ts +6 -6
  352. package/src/schemas/metadata/IMetadataAliasType.ts +12 -12
  353. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  354. package/src/schemas/metadata/IMetadataArray.ts +6 -6
  355. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  356. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  357. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  358. package/src/schemas/metadata/IMetadataConstant.ts +18 -18
  359. package/src/schemas/metadata/IMetadataConstantValue.ts +11 -11
  360. package/src/schemas/metadata/IMetadataDictionary.ts +11 -11
  361. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  362. package/src/schemas/metadata/IMetadataFunction.ts +8 -8
  363. package/src/schemas/metadata/IMetadataMap.ts +8 -8
  364. package/src/schemas/metadata/IMetadataNative.ts +6 -6
  365. package/src/schemas/metadata/IMetadataObject.ts +6 -6
  366. package/src/schemas/metadata/IMetadataObjectType.ts +13 -13
  367. package/src/schemas/metadata/IMetadataParameter.ts +9 -9
  368. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  369. package/src/schemas/metadata/IMetadataSet.ts +7 -7
  370. package/src/schemas/metadata/IMetadataTemplate.ts +7 -7
  371. package/src/schemas/metadata/IMetadataTuple.ts +6 -6
  372. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  373. package/src/schemas/metadata/IMetadataTypeTag.ts +16 -16
  374. package/src/schemas/metadata/Metadata.ts +687 -687
  375. package/src/schemas/metadata/MetadataAlias.ts +46 -46
  376. package/src/schemas/metadata/MetadataAliasType.ts +63 -63
  377. package/src/schemas/metadata/MetadataApplication.ts +44 -44
  378. package/src/schemas/metadata/MetadataArray.ts +49 -49
  379. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  380. package/src/schemas/metadata/MetadataAtomic.ts +87 -87
  381. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  382. package/src/schemas/metadata/MetadataConstant.ts +34 -34
  383. package/src/schemas/metadata/MetadataConstantValue.ts +62 -62
  384. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  385. package/src/schemas/metadata/MetadataFunction.ts +49 -49
  386. package/src/schemas/metadata/MetadataMap.ts +48 -48
  387. package/src/schemas/metadata/MetadataNative.ts +44 -44
  388. package/src/schemas/metadata/MetadataObject.ts +48 -48
  389. package/src/schemas/metadata/MetadataObjectType.ts +149 -149
  390. package/src/schemas/metadata/MetadataParameter.ts +54 -54
  391. package/src/schemas/metadata/MetadataProperty.ts +59 -59
  392. package/src/schemas/metadata/MetadataSet.ts +45 -45
  393. package/src/schemas/metadata/MetadataTemplate.ts +80 -80
  394. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  395. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  396. package/src/schemas/protobuf/IProtobufProperty.ts +6 -6
  397. package/src/schemas/protobuf/IProtobufPropertyType.ts +37 -37
  398. package/src/schemas/protobuf/IProtobufSchema.ts +50 -50
  399. package/src/tags/Constant.ts +15 -15
  400. package/src/tags/ContentMediaType.ts +10 -10
  401. package/src/tags/Default.ts +22 -22
  402. package/src/tags/Example.ts +24 -24
  403. package/src/tags/Examples.ts +16 -16
  404. package/src/tags/ExclusiveMaximum.ts +23 -23
  405. package/src/tags/ExclusiveMinimum.ts +23 -23
  406. package/src/tags/Format.ts +50 -50
  407. package/src/tags/JsonSchemaPlugin.ts +8 -8
  408. package/src/tags/MaxItems.ts +12 -12
  409. package/src/tags/MaxLength.ts +12 -12
  410. package/src/tags/Maximum.ts +19 -19
  411. package/src/tags/MinItems.ts +12 -12
  412. package/src/tags/MinLength.ts +12 -12
  413. package/src/tags/Minimum.ts +19 -19
  414. package/src/tags/MultipleOf.ts +21 -21
  415. package/src/tags/Pattern.ts +31 -31
  416. package/src/tags/Sequence.ts +10 -10
  417. package/src/tags/TagBase.ts +82 -82
  418. package/src/tags/Type.ts +37 -37
  419. package/src/tags/UniqueItems.ts +14 -14
  420. package/src/tags/index.ts +21 -21
  421. package/src/tags/internal/FormatCheatSheet.ts +73 -73
  422. package/src/transform.ts +35 -35
  423. package/src/transformers/CallExpressionTransformer.ts +554 -546
  424. package/src/transformers/FileTransformer.ts +136 -136
  425. package/src/transformers/IProgrammerProps.ts +11 -11
  426. package/src/transformers/ITransformOptions.ts +62 -62
  427. package/src/transformers/ITransformProps.ts +9 -9
  428. package/src/transformers/ITypiaContext.ts +18 -18
  429. package/src/transformers/ImportTransformer.ts +81 -81
  430. package/src/transformers/NoTransformConfigurationError.ts +18 -18
  431. package/src/transformers/NodeTransformer.ts +17 -17
  432. package/src/transformers/TransformerError.ts +60 -60
  433. package/src/transformers/features/AssertTransformer.ts +24 -24
  434. package/src/transformers/features/CreateAssertTransformer.ts +24 -24
  435. package/src/transformers/features/CreateIsTransformer.ts +18 -18
  436. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  437. package/src/transformers/features/CreateValidateTransformer.ts +18 -18
  438. package/src/transformers/features/IsTransformer.ts +18 -18
  439. package/src/transformers/features/RandomTransformer.ts +41 -41
  440. package/src/transformers/features/ValidateTransformer.ts +18 -18
  441. package/src/transformers/features/functional/FunctionalGenericTransformer.ts +57 -57
  442. package/src/transformers/features/http/CreateHttpAssertFormDataTransformer.ts +13 -13
  443. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +13 -13
  444. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +13 -13
  445. package/src/transformers/features/http/CreateHttpFormDataTransformer.ts +13 -13
  446. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +13 -13
  447. package/src/transformers/features/http/CreateHttpIsFormDataTransformer.ts +13 -13
  448. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +13 -13
  449. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +13 -13
  450. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +13 -13
  451. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +13 -13
  452. package/src/transformers/features/http/CreateHttpValidateFormDataTransformer.ts +13 -13
  453. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +13 -13
  454. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +13 -13
  455. package/src/transformers/features/http/HttpAssertFormDataTransformer.ts +13 -13
  456. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +13 -13
  457. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +13 -13
  458. package/src/transformers/features/http/HttpFormDataTransformer.ts +13 -13
  459. package/src/transformers/features/http/HttpHeadersTransformer.ts +13 -13
  460. package/src/transformers/features/http/HttpIsFormDataTransformer.ts +13 -13
  461. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +13 -13
  462. package/src/transformers/features/http/HttpIsQueryTransformer.ts +13 -13
  463. package/src/transformers/features/http/HttpParameterTransformer.ts +13 -13
  464. package/src/transformers/features/http/HttpQueryTransformer.ts +13 -13
  465. package/src/transformers/features/http/HttpValidateFormDataTransformer.ts +13 -13
  466. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +13 -13
  467. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +13 -13
  468. package/src/transformers/features/json/JsonApplicationTransformer.ts +105 -105
  469. package/src/transformers/features/json/JsonAssertParseTransformer.ts +13 -13
  470. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +13 -13
  471. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +13 -13
  472. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +13 -13
  473. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +13 -13
  474. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +13 -13
  475. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +13 -13
  476. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +13 -13
  477. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +13 -13
  478. package/src/transformers/features/json/JsonIsParseTransformer.ts +13 -13
  479. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +13 -13
  480. package/src/transformers/features/json/JsonSchemaTransformer.ts +135 -135
  481. package/src/transformers/features/json/JsonSchemasTransformer.ts +145 -145
  482. package/src/transformers/features/json/JsonStringifyTransformer.ts +13 -13
  483. package/src/transformers/features/json/JsonValidateParseTransformer.ts +13 -13
  484. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +13 -13
  485. package/src/transformers/features/llm/LlmApplicationTransformer.ts +145 -128
  486. package/src/transformers/features/llm/LlmControllerTransformer.ts +93 -0
  487. package/src/transformers/features/llm/LlmParametersTransformer.ts +102 -102
  488. package/src/transformers/features/llm/LlmSchemaTransformer.ts +170 -170
  489. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +13 -13
  490. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +13 -13
  491. package/src/transformers/features/misc/MiscCloneTransformer.ts +13 -13
  492. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +13 -13
  493. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +13 -13
  494. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +13 -13
  495. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +13 -13
  496. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +13 -13
  497. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +13 -13
  498. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +13 -13
  499. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +13 -13
  500. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +13 -13
  501. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +13 -13
  502. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +35 -35
  503. package/src/transformers/features/misc/MiscPruneTransformer.ts +13 -13
  504. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +13 -13
  505. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +13 -13
  506. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +20 -20
  507. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +20 -20
  508. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +20 -20
  509. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +20 -20
  510. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +20 -20
  511. package/src/transformers/features/notations/NotationGeneralTransformer.ts +18 -18
  512. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +20 -20
  513. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +20 -20
  514. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +13 -13
  515. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +13 -13
  516. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +13 -13
  517. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +13 -13
  518. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +13 -13
  519. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +13 -13
  520. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +13 -13
  521. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +13 -13
  522. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +13 -13
  523. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +13 -13
  524. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +13 -13
  525. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +13 -13
  526. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +13 -13
  527. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +13 -13
  528. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +35 -35
  529. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +13 -13
  530. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +13 -13
  531. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +69 -69
  532. package/src/transformers/features/reflect/ReflectNameTransformer.ts +82 -82
  533. package/src/transformers/internal/GenericTransformer.ts +101 -101
  534. package/src/typings/Atomic.ts +13 -13
  535. package/src/typings/ClassProperties.ts +5 -5
  536. package/src/typings/Customizable.ts +5 -5
  537. package/src/typings/Equal.ts +18 -18
  538. package/src/typings/IsTuple.ts +9 -9
  539. package/src/typings/NativeClass.ts +23 -23
  540. package/src/typings/OmitNever.ts +3 -3
  541. package/src/typings/ProtobufAtomic.ts +19 -19
  542. package/src/typings/SpecialFields.ts +3 -3
  543. package/src/typings/ValidationPipe.ts +9 -9
  544. package/src/typings/ValueOf.ts +20 -20
  545. package/src/typings/Writable.ts +11 -11
  546. package/src/utils/ArrayUtil.ts +41 -41
  547. package/src/utils/Escaper.ts +50 -50
  548. package/src/utils/MapUtil.ts +14 -14
  549. package/src/utils/NamingConvention.ts +94 -94
  550. package/src/utils/PatternUtil.ts +29 -29
  551. package/src/utils/ProtobufNameEncoder.ts +32 -32
  552. package/src/utils/Singleton.ts +16 -16
  553. package/src/utils/StringUtil.ts +16 -16
package/src/functional.ts CHANGED
@@ -1,740 +1,740 @@
1
- import { NoTransformConfigurationError } from "./transformers/NoTransformConfigurationError";
2
-
3
- import { IValidation } from "./IValidation";
4
- import { TypeGuardError } from "./TypeGuardError";
5
-
6
- /* ===========================================================
7
- FUNCTIONAL
8
- - ASSERT
9
- - IS
10
- - VALIDATE
11
- ==============================================================
12
- ASSERT
13
- ----------------------------------------------------------- */
14
- /**
15
- * Asserts a function.
16
- *
17
- * Asserts a function, by wrapping the function and checking its parameters and
18
- * return value through {@link assert} function. If some parameter or return value
19
- * does not match the expected type, it throws an {@link TypeGuardError} or a custom
20
- * error generated by the *errorFactory* parameter.
21
- *
22
- * For reference, {@link TypeGuardError.path} would be a little bit different with
23
- * individual {@link assert} function. If the {@link TypeGuardError} occurs from
24
- * some parameter, the path would start from `$input.parameters[number]`. Otherwise
25
- * the path would start from `$input.return`.
26
- *
27
- * - `$input.parameters[0].~`
28
- * - `$input.return.~`
29
- *
30
- * By the way, if what you want is not just finding the 1st type error through
31
- * assertion, but also finding every type errors, then use {@link validateFunction}
32
- * instead. Otherwise, what you want is just asserting parameters or return value
33
- * only, you can use {@link assertParameters} or {@link assertReturn} instead.
34
- *
35
- * On the other hand, if don't want to allow any superfluous properties, utilize
36
- * {@link assertEqualsFunction} or {@link validateEqualsFunction} instead.
37
- *
38
- * @template T Target function type
39
- * @param func Target function to assert
40
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
41
- * @returns The wrapper function with type assertions
42
- * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
43
- *
44
- * @author Jeongho Nam - https://github.com/samchon
45
- */
46
- export function assertFunction<T extends (...args: any[]) => any>(
47
- func: T,
48
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
49
- ): T;
50
-
51
- /**
52
- * @internal
53
- */
54
- export function assertFunction(): never {
55
- NoTransformConfigurationError("functional.assertFunction");
56
- }
57
-
58
- /**
59
- * Asserts parameters.
60
- *
61
- * Asserts a function, by wrapping the function and checking its parameters through
62
- * {@link assert} function. If some parameter does not match the expected type, it
63
- * throws an {@link TypeGuardError} or a custom error generated by the *errorFactory*
64
- * parameter.
65
- *
66
- * For reference, {@link TypeGuardError.path} would be a little bit different with
67
- * individual {@link assert} function. If the {@link TypeGuardError} occurs from
68
- * some parameter, the path would start from `$input.parameters[number]`.
69
- *
70
- * By the way, if what you want is not just finding the 1st type error through
71
- * assertion, but also finding every type errors, then use {@link validateParameters}
72
- * instead. Otherwise, what you want is not only asserting parameters, but also
73
- * asserting return value, you can use {@link assertFunction} instead.
74
- *
75
- * On the other hand, if don't want to allow any superfluous properties, utilize
76
- * {@link assertEqualsParameters} or {@link validateEqualsParameters} instead.
77
- *
78
- * @template T Target function type
79
- * @param func Target function to assert
80
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
81
- * @returns The wrapper function with type assertions
82
- * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
83
- *
84
- * @author Jeongho Nam - https://github.com/samchon
85
- */
86
- export function assertParameters<T extends (...args: any[]) => any>(
87
- func: T,
88
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
89
- ): T;
90
-
91
- /**
92
- * @internal
93
- */
94
- export function assertParameters(): never {
95
- NoTransformConfigurationError("functional.assertParameters");
96
- }
97
-
98
- /**
99
- * Asserts return value.
100
- *
101
- * Asserts a function, by wrapping the function and checking its return value through
102
- * {@link assert} function. If the return value does not match the expected type, it
103
- * throws an {@link TypeGuardError} or a custom error generated by the *errorFactory*
104
- * parameter.
105
- *
106
- * For reference, {@link TypeGuardError.path} would be a little bit different with
107
- * individual {@link assert} function. If the {@link TypeGuardError} occurs from
108
- * the return value, the path would start from `$input.return`.
109
- *
110
- * By the way, if what you want is not just finding the 1st type error through
111
- * assertion, but also finding every type errors, then use {@link validateReturn}
112
- * instead. Otherwise, what you want is not only asserting return value, but also
113
- * asserting parameters, you can use {@link assertFunction} instead.
114
- *
115
- * On the other hand, if don't want to allow any superfluous properties, utilize
116
- * {@link assertEqualsReturn} or {@link validateEqualsReturn} instead.
117
- *
118
- * @template T Target function type
119
- * @param func Target function to assert
120
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
121
- * @returns The wrapper function with type assertions
122
- * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
123
- *
124
- * @author Jeongho Nam - https://github.com/samchon
125
- */
126
- export function assertReturn<T extends (...args: any[]) => any>(
127
- func: T,
128
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
129
- ): T;
130
-
131
- /**
132
- * @internal
133
- */
134
- export function assertReturn(): never {
135
- NoTransformConfigurationError("functional.assertReturn");
136
- }
137
-
138
- /**
139
- * Asserts a function with strict equality.
140
- *
141
- * Asserts a function with strict equality, by wrapping the function and checking
142
- * its parameters and return value through {@link assertEquals} function. If some
143
- * parameter or return value does not match the expected type, it throws an
144
- * {@link TypeGuardError} or a custom error generated by the *errorFactory* parameter.
145
- *
146
- * For reference, {@link TypeGuardError.path} would be a little bit different with
147
- * individual {@link assertEquals} function. If the {@link TypeGuardError} occurs from
148
- * some parameter, the path would start from `$input.parameters[number]`. Otherwise
149
- * the path would start from `$input.return`.
150
- *
151
- * - `$input.parameters[0].~`
152
- * - `$input.return.~`
153
- *
154
- * By the way, if what you want is not just finding the 1st type error through
155
- * assertion, but also finding every type errors, then use
156
- * {@link validateEqualsFunction} instead. Otherwise, what you want is just asserting
157
- * parameters or return value only, you can use {@link assertEqualsParameters} or
158
- * {@link assertEqualsReturn} instead.
159
- *
160
- * On the other hand, if you want to allow any superfluous properties, utilize
161
- * {@link assertFunction} or {@link validateFunction} instead.
162
- *
163
- * @template T Target function type
164
- * @param func Target function to assert
165
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
166
- * @returns The wrapper function with type assertions
167
- * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
168
- *
169
- * @author Jeongho Nam - https://github.com/samchon
170
- */
171
- export function assertEqualsFunction<T extends (...args: any[]) => any>(
172
- func: T,
173
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
174
- ): T;
175
-
176
- /**
177
- * @internal
178
- */
179
- export function assertEqualsFunction(): never {
180
- NoTransformConfigurationError("functional.assertEqualsFunction");
181
- }
182
-
183
- /**
184
- * Asserts parameters with strict equality.
185
- *
186
- * Asserts a function, by wrapping the function and checking its parameters through
187
- * {@link assertEquals} function. If some parameter does not match the expected type,
188
- * it throws an {@link TypeGuardError} or a custom error generated by the *errorFactory*
189
- * parameter.
190
- *
191
- * For reference, {@link TypeGuardError.path} would be a little bit different with
192
- * individual {@link assertEquals} function. If the {@link TypeGuardError} occurs from
193
- * some parameter, the path would start from `$input.parameters[number]`.
194
- *
195
- * By the way, if what you want is not just finding the 1st type error through
196
- * assertion, but also finding every type errors, then use
197
- * {@link validateEqualsParameters} instead. Otherwise, what you want is not only
198
- * asserting parameters, but also asserting return value, you can use
199
- * {@link assertEqualsFunction} instead.
200
- *
201
- * On the other hand, if you want to allow any superfluous properties, utilize
202
- * {@link assertParameters} or {@link validateParameters} instead.
203
- *
204
- * @template T Target function type
205
- * @param func Target function to assert
206
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
207
- * @returns The wrapper function with type assertions
208
- * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
209
- *
210
- * @author Jeongho Nam - https://github.com/samchon
211
- */
212
- export function assertEqualsParameters<T extends (...args: any[]) => any>(
213
- func: T,
214
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
215
- ): T;
216
-
217
- /**
218
- * @internal
219
- */
220
- export function assertEqualsParameters(): never {
221
- NoTransformConfigurationError("functional.assertEqualsParameters");
222
- }
223
-
224
- /**
225
- * Asserts return value with strict equality.
226
- *
227
- * Asserts a function, by wrapping the function and checking its return value through
228
- * {@link assertEquals} function. If the return value does not match the expected type,
229
- * it throws an {@link TypeGuardError} or a custom error generated by the *errorFactory*
230
- * parameter.
231
- *
232
- * For reference, {@link TypeGuardError.path} would be a little bit different with
233
- * individual {@link assertEquals} function. If the {@link TypeGuardError} occurs from
234
- * the return value, the path would start from `$input.return`.
235
- *
236
- * By the way, if what you want is not just finding the 1st type error through
237
- * assertion, but also finding every type errors, then use {@link validateEqualsReturn}
238
- * instead. Otherwise, what you want is not only asserting return value, but also
239
- * asserting parameters, you can use {@link assertEqualsFunction} instead.
240
- *
241
- * On the other hand, if you want to allow any superfluous properties, utilize
242
- * {@link assertReturn} or {@link validateReturn} instead.
243
- *
244
- * @template T Target function type
245
- * @param func Target function to assert
246
- * @param errorFactory Custom error factory. Default is `TypeGuardError`
247
- * @returns The wrapper function with type assertions
248
- * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
249
- *
250
- * @author Jeongho Nam - https://github.com/samchon
251
- */
252
- export function assertEqualsReturn<T extends (...args: any[]) => any>(
253
- func: T,
254
- errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
255
- ): T;
256
-
257
- /**
258
- * @internal
259
- */
260
- export function assertEqualsReturn(): never {
261
- NoTransformConfigurationError("functional.assertEqualsReturn");
262
- }
263
-
264
- /* -----------------------------------------------------------
265
- IS
266
- ----------------------------------------------------------- */
267
- /**
268
- * Tests a function.
269
- *
270
- * Tests a function, by wrapping the function and checking its parameters and
271
- * return value through {@link is} function. If some parameter or return value
272
- * does not match the expected type, it returns `null`. Otherwise there's no
273
- * type error, it returns the result of the function.
274
- *
275
- * By the way, if you want is not just testing type checking, but also finding
276
- * detailed type error reason(s), then use {@link assertFunction} or
277
- * {@link validateFunction} instead.
278
- *
279
- * On the other hand, if you don't want to allow any superfluous properties,
280
- * utilize {@link equalsFunction}, {@link assertEqualsFunction} or
281
- * {@link validateEqualsFunction} instead.
282
- *
283
- * @template T Target function type
284
- * @param func Target function to test
285
- * @returns The wrapper function with type tests
286
- *
287
- * @author Jeongho Nam - https://github.com/samchon
288
- */
289
- export function isFunction<T extends (...args: any[]) => any>(
290
- func: T,
291
- ): T extends (...args: infer Arguments) => infer Output
292
- ? Output extends Promise<infer R>
293
- ? (...args: Arguments) => Promise<R | null>
294
- : (...args: Arguments) => Output | null
295
- : never;
296
-
297
- /**
298
- * @internal
299
- */
300
- export function isFunction(): never {
301
- NoTransformConfigurationError("functional.isFunction");
302
- }
303
-
304
- /**
305
- * Tests parameters.
306
- *
307
- * Tests a function, by wrapping the function and checking its parameters through
308
- * {@link is} function. If some parameter does not match the expected type, it
309
- * returns `null`. Otherwise there's no type error, it returns the result of the
310
- * function.
311
- *
312
- * By the way, if you want is not just testing type checking, but also finding
313
- * detailed type error reason(s), then use {@link assertParameters} or
314
- * {@link validateParameters} instead.
315
- *
316
- * On the other hand, if you don't want to allow any superfluous properties,
317
- * utilize {@link equalsParameters}, {@link assertEqualsParameters} or
318
- * {@link validateEqualsParameters} instead.
319
- *
320
- * @template T Target function type
321
- * @param func Target function to test
322
- * @returns The wrapper function with type tests
323
- *
324
- * @author Jeongho Nam - https://github.com/samchon
325
- */
326
- export function isParameters<T extends (...args: any[]) => any>(
327
- func: T,
328
- ): T extends (...args: infer Arguments) => infer Output
329
- ? Output extends Promise<infer R>
330
- ? (...args: Arguments) => Promise<R | null>
331
- : (...args: Arguments) => Output | null
332
- : never;
333
-
334
- /**
335
- * @internal
336
- */
337
- export function isParameters(): never {
338
- NoTransformConfigurationError("functional.isParameters");
339
- }
340
-
341
- /**
342
- * Tests return value.
343
- *
344
- * Tests a function, by wrapping the function and checking its return value through
345
- * {@link is} function. If the return value does not match the expected type, it
346
- * returns `null`. Otherwise there's no type error, it returns the result of the
347
- * function.
348
- *
349
- * By the way, if you want is not just testing type checking, but also finding
350
- * detailed type error reason(s), then use {@link assertReturn} or
351
- * {@link validateReturn} instead.
352
- *
353
- * On the other hand, if you don't want to allow any superfluous properties,
354
- * utilize {@link equalsReturn}, {@link assertEqualsReturn} or
355
- * {@link validateEqualsReturn} instead.
356
- *
357
- * @template T Target function type
358
- * @param func Target function to test
359
- * @returns The wrapper function with type tests
360
- *
361
- * @author Jeongho Nam - https://github.com/samchon
362
- */
363
- export function isReturn<T extends (...args: any[]) => any>(
364
- func: T,
365
- ): T extends (...args: infer Arguments) => infer Output
366
- ? Output extends Promise<infer R>
367
- ? (...args: Arguments) => Promise<R | null>
368
- : (...args: Arguments) => Output | null
369
- : never;
370
-
371
- /**
372
- * @internal
373
- */
374
- export function isReturn(): never {
375
- NoTransformConfigurationError("functional.isReturn");
376
- }
377
-
378
- /**
379
- * Tests a function with strict equality.
380
- *
381
- * Tests a function with strict equality, by wrapping the function and checking its
382
- * parameters and return value through {@link isEquals} function. If some parameter
383
- * or return value does not match the expected type, it returns `null`. Otherwise
384
- * there's no type error, it returns the result of the function.
385
- *
386
- * By the way, if you want is not just testing type checking, but also finding
387
- * detailed type error reason(s), then use {@link assertEqualsFunction} or
388
- * {@link validateEqualsFunction} instead.
389
- *
390
- * On the other hand, if you want to allow any superfluous properties, utilize
391
- * {@link isFunction}, {@link assertFunction} or {@link validateFunction} instead.
392
- *
393
- * @template T Target function type
394
- * @param func Target function to test
395
- * @returns The wrapper function with type tests
396
- *
397
- * @author Jeongho Nam - https://github.com/samchon
398
- */
399
- export function equalsFunction<T extends (...args: any[]) => any>(
400
- func: T,
401
- ): T extends (...args: infer Arguments) => infer Output
402
- ? Output extends Promise<infer R>
403
- ? (...args: Arguments) => Promise<R | null>
404
- : (...args: Arguments) => Output | null
405
- : never;
406
-
407
- /**
408
- * @internal
409
- */
410
- export function equalsFunction(): never {
411
- NoTransformConfigurationError("functional.equalsFunction");
412
- }
413
-
414
- /**
415
- * Tests parameters with strict equality.
416
- *
417
- * Tests a function, by wrapping the function and checking its parameters through
418
- * {@link isEquals} function. If some parameter does not match the expected type,
419
- * it returns `null`. Otherwise there's no type error, it returns the result of the
420
- * function.
421
- *
422
- * By the way, if you want is not just testing type checking, but also finding
423
- * detailed type error reason(s), then use {@link assertEqualsParameters} or
424
- * {@link validateEqualsParameters} instead.
425
- *
426
- * @template T Target function type
427
- * @param func Target function to test
428
- * @returns The wrapper function with type tests
429
- *
430
- * @author Jeongho Nam - https://github.com/samchon
431
- */
432
- export function equalsParameters<T extends (...args: any[]) => any>(
433
- func: T,
434
- ): T extends (...args: infer Arguments) => infer Output
435
- ? Output extends Promise<infer R>
436
- ? (...args: Arguments) => Promise<R | null>
437
- : (...args: Arguments) => Output | null
438
- : never;
439
-
440
- /**
441
- * @internal
442
- */
443
- export function equalsParameters(): never {
444
- NoTransformConfigurationError("functional.equalsParameters");
445
- }
446
-
447
- /**
448
- * Tests return value with strict equality.
449
- *
450
- * Tests a function, by wrapping the function and checking its return value through
451
- * {@link isEquals} function. If the return value does not match the expected type,
452
- * it returns `null`. Otherwise there's no type error, it returns the result of the
453
- * function.
454
- *
455
- * By the way, if you want is not just testing type checking, but also finding
456
- * detailed type error reason(s), then use {@link assertEqualsReturn} or
457
- * {@link validateEqualsReturn} instead.
458
- *
459
- * On the other hand, if you want to allow any superfluous properties, utilize
460
- * {@link isReturn}, {@link assertReturn} or {@link validateReturn} instead.
461
- *
462
- * @template T Target function type
463
- * @param func Target function to test
464
- * @returns The wrapper function with type tests
465
- *
466
- * @author Jeongho Nam - https://github.com/samchon
467
- */
468
- export function equalsReturn<T extends (...args: any[]) => any>(
469
- func: T,
470
- ): T extends (...args: infer Arguments) => infer Output
471
- ? Output extends Promise<infer R>
472
- ? (...args: Arguments) => Promise<R | null>
473
- : (...args: Arguments) => Output | null
474
- : never;
475
-
476
- /**
477
- * @internal
478
- */
479
- export function equalsReturn(): never {
480
- NoTransformConfigurationError("functional.equalsReturn");
481
- }
482
-
483
- /* -----------------------------------------------------------
484
- VALIDATE
485
- ----------------------------------------------------------- */
486
- /**
487
- * Validates a function.
488
- *
489
- * Validates a function, by wrapping the function and checking its parameters and
490
- * return value through {@link validate} function. If some parameter or return value
491
- * does not match the expected type, it returns {@link IValidation.IError} typed
492
- * object. Otherwise there's no type error, it returns {@link IValidation.ISuccess}
493
- * typed object instead.
494
- *
495
- * For reference, {@link IValidation.IError.path} would be a little bit different with
496
- * individual {@link validate} function. If the {@link IValidation.IError} occurs from
497
- * some parameter, the path would start from `$input.parameters[number]`. Otherwise
498
- * the path would start from `$input.return`.
499
- *
500
- * - `$input.parameters[0].~`
501
- * - `$input.return.~`
502
- *
503
- * By the way, if what you want is not finding every type errors, but just finding
504
- * the 1st type error, then use {@link assertFunction} instead. Otherwise, what you
505
- * want is just validating parameters or return value only, you can use
506
- * {@link validateParameters} or {@link validateReturn} instead.
507
- *
508
- * On the other hand, if you don't want to allow any superfluous properties, utilize
509
- * {@link validateEqualsFunction} or {@link assertEqualsFunction} instead.
510
- *
511
- * @template T Target function type
512
- * @param func Target function to validate
513
- * @returns The wrapper function with type validations
514
- *
515
- * @author Jeongho Nam - https://github.com/samchon
516
- */
517
- export function validateFunction<T extends (...args: any[]) => any>(
518
- func: T,
519
- ): T extends (...args: infer Arguments) => infer Output
520
- ? Output extends Promise<infer R>
521
- ? (...args: Arguments) => Promise<IValidation<R>>
522
- : (...args: Arguments) => IValidation<Output>
523
- : never;
524
-
525
- /**
526
- * @internal
527
- */
528
- export function validateFunction(): never {
529
- NoTransformConfigurationError("functional.validateFunction");
530
- }
531
-
532
- /**
533
- * Validates parameters.
534
- *
535
- * Validates a function, by wrapping the function and checking its parameters through
536
- * {@link validate} function. If some parameter does not match the expected type, it
537
- * returns {@link IValidation.IError} typed object. Otherwise there's no type error,
538
- * it returns {@link IValidation.ISuccess} typed object instead.
539
- *
540
- * For reference, {@link IValidation.IError.path} would be a little bit different with
541
- * individual {@link validate} function. If the {@link IValidation.IError} occurs from
542
- * some parameter, the path would start from `$input.parameters[number]`.
543
- *
544
- * By the way, if what you want is not finding every type errors, but just finding
545
- * the 1st type error, then use {@link assertParameters} instead. Otherwise, what you
546
- * want is not only validating parameters, but also validating return value, you can
547
- * use {@link validateFunction} instead.
548
- *
549
- * On the other hand, if you don't want to allow any superfluous properties, utilize
550
- * {@link validateEqualsParameters} or {@link assertEqualsParameters} instead.
551
- *
552
- * @template T Target function type
553
- * @param func Target function to validate
554
- * @returns The wrapper function with type validations
555
- *
556
- * @author Jeongho Nam - https://github.com/samchon
557
- */
558
- export function validateParameters<T extends (...args: any[]) => any>(
559
- func: T,
560
- ): T extends (...args: infer Arguments) => infer Output
561
- ? Output extends Promise<infer R>
562
- ? (...args: Arguments) => Promise<IValidation<R>>
563
- : (...args: Arguments) => IValidation<Output>
564
- : never;
565
-
566
- /**
567
- * @internal
568
- */
569
- export function validateParameters(): never {
570
- NoTransformConfigurationError("functional.validateReturn");
571
- }
572
-
573
- /**
574
- * Validates return value.
575
- *
576
- * Validates a function, by wrapping the function and checking its return value through
577
- * {@link validate} function. If the return value does not match the expected type, it
578
- * returns {@link IValidation.IError} typed object. Otherwise there's no type error,
579
- * it returns {@link IValidation.ISuccess} typed object instead.
580
- *
581
- * For reference, {@link IValidation.IError.path} would be a little bit different with
582
- * individual {@link validate} function. If the {@link IValidation.IError} occurs from
583
- * the return value, the path would start from `$input.return`.
584
- *
585
- * By the way, if what you want is not finding every type errors, but just finding
586
- * the 1st type error, then use {@link assertReturn} instead. Otherwise, what you want
587
- * is not only validating return value, but also validating parameters, you can use
588
- * {@link validateFunction} instead.
589
- *
590
- * On the other hand, if you don't want to allow any superfluous properties, utilize
591
- * {@link validateEqualsReturn} or {@link assertEqualsReturn} instead.
592
- *
593
- * @template T Target function type
594
- * @param func Target function to validate
595
- * @returns The wrapper function with type validations
596
- *
597
- * @author Jeongho Nam - https://github.com/samchon
598
- */
599
- export function validateReturn<T extends (...args: any[]) => any>(
600
- func: T,
601
- ): T extends (...args: infer Arguments) => infer Output
602
- ? Output extends Promise<infer R>
603
- ? (...args: Arguments) => Promise<IValidation<R>>
604
- : (...args: Arguments) => IValidation<Output>
605
- : never;
606
-
607
- /**
608
- * @internal
609
- */
610
- export function validateReturn(): never {
611
- NoTransformConfigurationError("functional.validateReturn");
612
- }
613
-
614
- /**
615
- * Validates a function with strict equality.
616
- *
617
- * Validates a function with strict equality, by wrapping the function and checking
618
- * its parameters and return value through {@link validateEquals} function. If some
619
- * parameter or return value does not match the expected type, it returns
620
- * {@link IValidation.IError} typed object. Otherwise there's no type error, it
621
- * returns {@link IValidation.ISuccess} typed object instead.
622
- *
623
- * For reference, {@link IValidation.IError.path} would be a little bit different with
624
- * individual {@link validateEquals} function. If the {@link IValidation.IError} occurs
625
- * from some parameter, the path would start from `$input.parameters[number]`. Otherwise
626
- * the path would start from `$input.return`.
627
- *
628
- * - `$input.parameters[0].~`
629
- * - `$input.return.~`
630
- *
631
- * By the way, if what you want is not finding every type errors, but just finding
632
- * the 1st type error, then use {@link assertEqualsFunction} instead. Otherwise, what
633
- * you want is just validating parameters or return value only, you can use
634
- * {@link validateEqualsParameters} or {@link validateEqualsReturn} instead.
635
- *
636
- * On the other hand, if you want to allow any superfluous properties, utilize
637
- * {@link validateFunction} or {@link assertFunction} instead.
638
- *
639
- * @template T Target function type
640
- * @param func Target function to validate
641
- * @returns The wrapper function with type validations
642
- *
643
- * @author Jeongho Nam - https://github.com/samchon
644
- */
645
- export function validateEqualsFunction<T extends (...args: any[]) => any>(
646
- func: T,
647
- ): T extends (...args: infer Arguments) => infer Output
648
- ? Output extends Promise<infer R>
649
- ? (...args: Arguments) => Promise<IValidation<R>>
650
- : (...args: Arguments) => IValidation<Output>
651
- : never;
652
-
653
- /**
654
- * @internal
655
- */
656
- export function validateEqualsFunction(): never {
657
- NoTransformConfigurationError("functional.validateEqualsFunction");
658
- }
659
-
660
- /**
661
- * Validates parameters with strict equality.
662
- *
663
- * Validates a function, by wrapping the function and checking its parameters through
664
- * {@link validateEquals} function. If some parameter does not match the expected type,
665
- * it returns {@link IValidation.IError} typed object. Otherwise there's no type error,
666
- * it returns {@link IValidation.ISuccess} typed object instead.
667
- *
668
- * For reference, {@link IValidation.IError.path} would be a little bit different with
669
- * individual {@link validateEquals} function. If the {@link IValidation.IError} occurs
670
- * from some parameter, the path would start from `$input.parameters[number]`.
671
- *
672
- * By the way, if what you want is not finding every type errors, but just finding
673
- * the 1st type error, then use {@link assertEqualsParameters} instead. Otherwise,
674
- * what you want is not only validating parameters, but also validating return value,
675
- * you can use {@link validateEqualsFunction} instead.
676
- *
677
- * On the other hand, if you want to allow any superfluous properties, utilize
678
- * {@link validateParameters} or {@link assertParameters} instead.
679
- *
680
- * @template T Target function type
681
- * @param func Target function to validate
682
- * @returns The wrapper function with type validations
683
- *
684
- * @author Jeongho Nam - https://github.com/samchon
685
- */
686
- export function validateEqualsParameters<T extends (...args: any[]) => any>(
687
- func: T,
688
- ): T extends (...args: infer Arguments) => infer Output
689
- ? Output extends Promise<infer R>
690
- ? (...args: Arguments) => Promise<IValidation<R>>
691
- : (...args: Arguments) => IValidation<Output>
692
- : never;
693
-
694
- /**
695
- * @internal
696
- */
697
- export function validateEqualsParameters(): never {
698
- NoTransformConfigurationError("functional.validateEqualsParameters");
699
- }
700
-
701
- /**
702
- * Validates return value with strict equality.
703
- *
704
- * Validates a function, by wrapping the function and checking its return value through
705
- * {@link validateEquals} function. If the return value does not match the expected type,
706
- * it returns {@link IValidation.IError} typed object. Otherwise there's no type error,
707
- * it returns {@link IValidation.ISuccess} typed object instead.
708
- *
709
- * For reference, {@link IValidation.IError.path} would be a little bit different with
710
- * individual {@link validateEquals} function. If the {@link IValidation.IError} occurs
711
- * from the return value, the path would start from `$input.return`.
712
- *
713
- * By the way, if what you want is not finding every type errors, but just finding
714
- * the 1st type error, then use {@link assertEqualsReturn} instead. Otherwise, what you
715
- * want is not only validating return value, but also validating parameters, you can use
716
- * {@link validateEqualsFunction} instead.
717
- *
718
- * On the other hand, if you want to allow any superfluous properties, utilize
719
- * {@link validateReturn} or {@link assertReturn} instead.
720
- *
721
- * @template T Target function type
722
- * @param func Target function to validate
723
- * @returns The wrapper function with type validations
724
- *
725
- * @author Jeongho Nam - https://github.com/samchon
726
- */
727
- export function validateEqualsReturn<T extends (...args: any[]) => any>(
728
- func: T,
729
- ): T extends (...args: infer Arguments) => infer Output
730
- ? Output extends Promise<infer R>
731
- ? (...args: Arguments) => Promise<IValidation<R>>
732
- : (...args: Arguments) => IValidation<Output>
733
- : never;
734
-
735
- /**
736
- * @internal
737
- */
738
- export function validateEqualsReturn(): never {
739
- NoTransformConfigurationError("functional.validateEqualsReturn");
740
- }
1
+ import { NoTransformConfigurationError } from "./transformers/NoTransformConfigurationError";
2
+
3
+ import { IValidation } from "./IValidation";
4
+ import { TypeGuardError } from "./TypeGuardError";
5
+
6
+ /* ===========================================================
7
+ FUNCTIONAL
8
+ - ASSERT
9
+ - IS
10
+ - VALIDATE
11
+ ==============================================================
12
+ ASSERT
13
+ ----------------------------------------------------------- */
14
+ /**
15
+ * Asserts a function.
16
+ *
17
+ * Asserts a function, by wrapping the function and checking its parameters and
18
+ * return value through {@link assert} function. If some parameter or return value
19
+ * does not match the expected type, it throws an {@link TypeGuardError} or a custom
20
+ * error generated by the *errorFactory* parameter.
21
+ *
22
+ * For reference, {@link TypeGuardError.path} would be a little bit different with
23
+ * individual {@link assert} function. If the {@link TypeGuardError} occurs from
24
+ * some parameter, the path would start from `$input.parameters[number]`. Otherwise
25
+ * the path would start from `$input.return`.
26
+ *
27
+ * - `$input.parameters[0].~`
28
+ * - `$input.return.~`
29
+ *
30
+ * By the way, if what you want is not just finding the 1st type error through
31
+ * assertion, but also finding every type errors, then use {@link validateFunction}
32
+ * instead. Otherwise, what you want is just asserting parameters or return value
33
+ * only, you can use {@link assertParameters} or {@link assertReturn} instead.
34
+ *
35
+ * On the other hand, if don't want to allow any superfluous properties, utilize
36
+ * {@link assertEqualsFunction} or {@link validateEqualsFunction} instead.
37
+ *
38
+ * @template T Target function type
39
+ * @param func Target function to assert
40
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
41
+ * @returns The wrapper function with type assertions
42
+ * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
43
+ *
44
+ * @author Jeongho Nam - https://github.com/samchon
45
+ */
46
+ export function assertFunction<T extends (...args: any[]) => any>(
47
+ func: T,
48
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
49
+ ): T;
50
+
51
+ /**
52
+ * @internal
53
+ */
54
+ export function assertFunction(): never {
55
+ NoTransformConfigurationError("functional.assertFunction");
56
+ }
57
+
58
+ /**
59
+ * Asserts parameters.
60
+ *
61
+ * Asserts a function, by wrapping the function and checking its parameters through
62
+ * {@link assert} function. If some parameter does not match the expected type, it
63
+ * throws an {@link TypeGuardError} or a custom error generated by the *errorFactory*
64
+ * parameter.
65
+ *
66
+ * For reference, {@link TypeGuardError.path} would be a little bit different with
67
+ * individual {@link assert} function. If the {@link TypeGuardError} occurs from
68
+ * some parameter, the path would start from `$input.parameters[number]`.
69
+ *
70
+ * By the way, if what you want is not just finding the 1st type error through
71
+ * assertion, but also finding every type errors, then use {@link validateParameters}
72
+ * instead. Otherwise, what you want is not only asserting parameters, but also
73
+ * asserting return value, you can use {@link assertFunction} instead.
74
+ *
75
+ * On the other hand, if don't want to allow any superfluous properties, utilize
76
+ * {@link assertEqualsParameters} or {@link validateEqualsParameters} instead.
77
+ *
78
+ * @template T Target function type
79
+ * @param func Target function to assert
80
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
81
+ * @returns The wrapper function with type assertions
82
+ * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
83
+ *
84
+ * @author Jeongho Nam - https://github.com/samchon
85
+ */
86
+ export function assertParameters<T extends (...args: any[]) => any>(
87
+ func: T,
88
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
89
+ ): T;
90
+
91
+ /**
92
+ * @internal
93
+ */
94
+ export function assertParameters(): never {
95
+ NoTransformConfigurationError("functional.assertParameters");
96
+ }
97
+
98
+ /**
99
+ * Asserts return value.
100
+ *
101
+ * Asserts a function, by wrapping the function and checking its return value through
102
+ * {@link assert} function. If the return value does not match the expected type, it
103
+ * throws an {@link TypeGuardError} or a custom error generated by the *errorFactory*
104
+ * parameter.
105
+ *
106
+ * For reference, {@link TypeGuardError.path} would be a little bit different with
107
+ * individual {@link assert} function. If the {@link TypeGuardError} occurs from
108
+ * the return value, the path would start from `$input.return`.
109
+ *
110
+ * By the way, if what you want is not just finding the 1st type error through
111
+ * assertion, but also finding every type errors, then use {@link validateReturn}
112
+ * instead. Otherwise, what you want is not only asserting return value, but also
113
+ * asserting parameters, you can use {@link assertFunction} instead.
114
+ *
115
+ * On the other hand, if don't want to allow any superfluous properties, utilize
116
+ * {@link assertEqualsReturn} or {@link validateEqualsReturn} instead.
117
+ *
118
+ * @template T Target function type
119
+ * @param func Target function to assert
120
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
121
+ * @returns The wrapper function with type assertions
122
+ * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
123
+ *
124
+ * @author Jeongho Nam - https://github.com/samchon
125
+ */
126
+ export function assertReturn<T extends (...args: any[]) => any>(
127
+ func: T,
128
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
129
+ ): T;
130
+
131
+ /**
132
+ * @internal
133
+ */
134
+ export function assertReturn(): never {
135
+ NoTransformConfigurationError("functional.assertReturn");
136
+ }
137
+
138
+ /**
139
+ * Asserts a function with strict equality.
140
+ *
141
+ * Asserts a function with strict equality, by wrapping the function and checking
142
+ * its parameters and return value through {@link assertEquals} function. If some
143
+ * parameter or return value does not match the expected type, it throws an
144
+ * {@link TypeGuardError} or a custom error generated by the *errorFactory* parameter.
145
+ *
146
+ * For reference, {@link TypeGuardError.path} would be a little bit different with
147
+ * individual {@link assertEquals} function. If the {@link TypeGuardError} occurs from
148
+ * some parameter, the path would start from `$input.parameters[number]`. Otherwise
149
+ * the path would start from `$input.return`.
150
+ *
151
+ * - `$input.parameters[0].~`
152
+ * - `$input.return.~`
153
+ *
154
+ * By the way, if what you want is not just finding the 1st type error through
155
+ * assertion, but also finding every type errors, then use
156
+ * {@link validateEqualsFunction} instead. Otherwise, what you want is just asserting
157
+ * parameters or return value only, you can use {@link assertEqualsParameters} or
158
+ * {@link assertEqualsReturn} instead.
159
+ *
160
+ * On the other hand, if you want to allow any superfluous properties, utilize
161
+ * {@link assertFunction} or {@link validateFunction} instead.
162
+ *
163
+ * @template T Target function type
164
+ * @param func Target function to assert
165
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
166
+ * @returns The wrapper function with type assertions
167
+ * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
168
+ *
169
+ * @author Jeongho Nam - https://github.com/samchon
170
+ */
171
+ export function assertEqualsFunction<T extends (...args: any[]) => any>(
172
+ func: T,
173
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
174
+ ): T;
175
+
176
+ /**
177
+ * @internal
178
+ */
179
+ export function assertEqualsFunction(): never {
180
+ NoTransformConfigurationError("functional.assertEqualsFunction");
181
+ }
182
+
183
+ /**
184
+ * Asserts parameters with strict equality.
185
+ *
186
+ * Asserts a function, by wrapping the function and checking its parameters through
187
+ * {@link assertEquals} function. If some parameter does not match the expected type,
188
+ * it throws an {@link TypeGuardError} or a custom error generated by the *errorFactory*
189
+ * parameter.
190
+ *
191
+ * For reference, {@link TypeGuardError.path} would be a little bit different with
192
+ * individual {@link assertEquals} function. If the {@link TypeGuardError} occurs from
193
+ * some parameter, the path would start from `$input.parameters[number]`.
194
+ *
195
+ * By the way, if what you want is not just finding the 1st type error through
196
+ * assertion, but also finding every type errors, then use
197
+ * {@link validateEqualsParameters} instead. Otherwise, what you want is not only
198
+ * asserting parameters, but also asserting return value, you can use
199
+ * {@link assertEqualsFunction} instead.
200
+ *
201
+ * On the other hand, if you want to allow any superfluous properties, utilize
202
+ * {@link assertParameters} or {@link validateParameters} instead.
203
+ *
204
+ * @template T Target function type
205
+ * @param func Target function to assert
206
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
207
+ * @returns The wrapper function with type assertions
208
+ * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
209
+ *
210
+ * @author Jeongho Nam - https://github.com/samchon
211
+ */
212
+ export function assertEqualsParameters<T extends (...args: any[]) => any>(
213
+ func: T,
214
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
215
+ ): T;
216
+
217
+ /**
218
+ * @internal
219
+ */
220
+ export function assertEqualsParameters(): never {
221
+ NoTransformConfigurationError("functional.assertEqualsParameters");
222
+ }
223
+
224
+ /**
225
+ * Asserts return value with strict equality.
226
+ *
227
+ * Asserts a function, by wrapping the function and checking its return value through
228
+ * {@link assertEquals} function. If the return value does not match the expected type,
229
+ * it throws an {@link TypeGuardError} or a custom error generated by the *errorFactory*
230
+ * parameter.
231
+ *
232
+ * For reference, {@link TypeGuardError.path} would be a little bit different with
233
+ * individual {@link assertEquals} function. If the {@link TypeGuardError} occurs from
234
+ * the return value, the path would start from `$input.return`.
235
+ *
236
+ * By the way, if what you want is not just finding the 1st type error through
237
+ * assertion, but also finding every type errors, then use {@link validateEqualsReturn}
238
+ * instead. Otherwise, what you want is not only asserting return value, but also
239
+ * asserting parameters, you can use {@link assertEqualsFunction} instead.
240
+ *
241
+ * On the other hand, if you want to allow any superfluous properties, utilize
242
+ * {@link assertReturn} or {@link validateReturn} instead.
243
+ *
244
+ * @template T Target function type
245
+ * @param func Target function to assert
246
+ * @param errorFactory Custom error factory. Default is `TypeGuardError`
247
+ * @returns The wrapper function with type assertions
248
+ * @throws A {@link TypeGuardError} or a custom error generated by *errorFactory*
249
+ *
250
+ * @author Jeongho Nam - https://github.com/samchon
251
+ */
252
+ export function assertEqualsReturn<T extends (...args: any[]) => any>(
253
+ func: T,
254
+ errorFactory?: undefined | ((props: TypeGuardError.IProps) => Error),
255
+ ): T;
256
+
257
+ /**
258
+ * @internal
259
+ */
260
+ export function assertEqualsReturn(): never {
261
+ NoTransformConfigurationError("functional.assertEqualsReturn");
262
+ }
263
+
264
+ /* -----------------------------------------------------------
265
+ IS
266
+ ----------------------------------------------------------- */
267
+ /**
268
+ * Tests a function.
269
+ *
270
+ * Tests a function, by wrapping the function and checking its parameters and
271
+ * return value through {@link is} function. If some parameter or return value
272
+ * does not match the expected type, it returns `null`. Otherwise there's no
273
+ * type error, it returns the result of the function.
274
+ *
275
+ * By the way, if you want is not just testing type checking, but also finding
276
+ * detailed type error reason(s), then use {@link assertFunction} or
277
+ * {@link validateFunction} instead.
278
+ *
279
+ * On the other hand, if you don't want to allow any superfluous properties,
280
+ * utilize {@link equalsFunction}, {@link assertEqualsFunction} or
281
+ * {@link validateEqualsFunction} instead.
282
+ *
283
+ * @template T Target function type
284
+ * @param func Target function to test
285
+ * @returns The wrapper function with type tests
286
+ *
287
+ * @author Jeongho Nam - https://github.com/samchon
288
+ */
289
+ export function isFunction<T extends (...args: any[]) => any>(
290
+ func: T,
291
+ ): T extends (...args: infer Arguments) => infer Output
292
+ ? Output extends Promise<infer R>
293
+ ? (...args: Arguments) => Promise<R | null>
294
+ : (...args: Arguments) => Output | null
295
+ : never;
296
+
297
+ /**
298
+ * @internal
299
+ */
300
+ export function isFunction(): never {
301
+ NoTransformConfigurationError("functional.isFunction");
302
+ }
303
+
304
+ /**
305
+ * Tests parameters.
306
+ *
307
+ * Tests a function, by wrapping the function and checking its parameters through
308
+ * {@link is} function. If some parameter does not match the expected type, it
309
+ * returns `null`. Otherwise there's no type error, it returns the result of the
310
+ * function.
311
+ *
312
+ * By the way, if you want is not just testing type checking, but also finding
313
+ * detailed type error reason(s), then use {@link assertParameters} or
314
+ * {@link validateParameters} instead.
315
+ *
316
+ * On the other hand, if you don't want to allow any superfluous properties,
317
+ * utilize {@link equalsParameters}, {@link assertEqualsParameters} or
318
+ * {@link validateEqualsParameters} instead.
319
+ *
320
+ * @template T Target function type
321
+ * @param func Target function to test
322
+ * @returns The wrapper function with type tests
323
+ *
324
+ * @author Jeongho Nam - https://github.com/samchon
325
+ */
326
+ export function isParameters<T extends (...args: any[]) => any>(
327
+ func: T,
328
+ ): T extends (...args: infer Arguments) => infer Output
329
+ ? Output extends Promise<infer R>
330
+ ? (...args: Arguments) => Promise<R | null>
331
+ : (...args: Arguments) => Output | null
332
+ : never;
333
+
334
+ /**
335
+ * @internal
336
+ */
337
+ export function isParameters(): never {
338
+ NoTransformConfigurationError("functional.isParameters");
339
+ }
340
+
341
+ /**
342
+ * Tests return value.
343
+ *
344
+ * Tests a function, by wrapping the function and checking its return value through
345
+ * {@link is} function. If the return value does not match the expected type, it
346
+ * returns `null`. Otherwise there's no type error, it returns the result of the
347
+ * function.
348
+ *
349
+ * By the way, if you want is not just testing type checking, but also finding
350
+ * detailed type error reason(s), then use {@link assertReturn} or
351
+ * {@link validateReturn} instead.
352
+ *
353
+ * On the other hand, if you don't want to allow any superfluous properties,
354
+ * utilize {@link equalsReturn}, {@link assertEqualsReturn} or
355
+ * {@link validateEqualsReturn} instead.
356
+ *
357
+ * @template T Target function type
358
+ * @param func Target function to test
359
+ * @returns The wrapper function with type tests
360
+ *
361
+ * @author Jeongho Nam - https://github.com/samchon
362
+ */
363
+ export function isReturn<T extends (...args: any[]) => any>(
364
+ func: T,
365
+ ): T extends (...args: infer Arguments) => infer Output
366
+ ? Output extends Promise<infer R>
367
+ ? (...args: Arguments) => Promise<R | null>
368
+ : (...args: Arguments) => Output | null
369
+ : never;
370
+
371
+ /**
372
+ * @internal
373
+ */
374
+ export function isReturn(): never {
375
+ NoTransformConfigurationError("functional.isReturn");
376
+ }
377
+
378
+ /**
379
+ * Tests a function with strict equality.
380
+ *
381
+ * Tests a function with strict equality, by wrapping the function and checking its
382
+ * parameters and return value through {@link isEquals} function. If some parameter
383
+ * or return value does not match the expected type, it returns `null`. Otherwise
384
+ * there's no type error, it returns the result of the function.
385
+ *
386
+ * By the way, if you want is not just testing type checking, but also finding
387
+ * detailed type error reason(s), then use {@link assertEqualsFunction} or
388
+ * {@link validateEqualsFunction} instead.
389
+ *
390
+ * On the other hand, if you want to allow any superfluous properties, utilize
391
+ * {@link isFunction}, {@link assertFunction} or {@link validateFunction} instead.
392
+ *
393
+ * @template T Target function type
394
+ * @param func Target function to test
395
+ * @returns The wrapper function with type tests
396
+ *
397
+ * @author Jeongho Nam - https://github.com/samchon
398
+ */
399
+ export function equalsFunction<T extends (...args: any[]) => any>(
400
+ func: T,
401
+ ): T extends (...args: infer Arguments) => infer Output
402
+ ? Output extends Promise<infer R>
403
+ ? (...args: Arguments) => Promise<R | null>
404
+ : (...args: Arguments) => Output | null
405
+ : never;
406
+
407
+ /**
408
+ * @internal
409
+ */
410
+ export function equalsFunction(): never {
411
+ NoTransformConfigurationError("functional.equalsFunction");
412
+ }
413
+
414
+ /**
415
+ * Tests parameters with strict equality.
416
+ *
417
+ * Tests a function, by wrapping the function and checking its parameters through
418
+ * {@link isEquals} function. If some parameter does not match the expected type,
419
+ * it returns `null`. Otherwise there's no type error, it returns the result of the
420
+ * function.
421
+ *
422
+ * By the way, if you want is not just testing type checking, but also finding
423
+ * detailed type error reason(s), then use {@link assertEqualsParameters} or
424
+ * {@link validateEqualsParameters} instead.
425
+ *
426
+ * @template T Target function type
427
+ * @param func Target function to test
428
+ * @returns The wrapper function with type tests
429
+ *
430
+ * @author Jeongho Nam - https://github.com/samchon
431
+ */
432
+ export function equalsParameters<T extends (...args: any[]) => any>(
433
+ func: T,
434
+ ): T extends (...args: infer Arguments) => infer Output
435
+ ? Output extends Promise<infer R>
436
+ ? (...args: Arguments) => Promise<R | null>
437
+ : (...args: Arguments) => Output | null
438
+ : never;
439
+
440
+ /**
441
+ * @internal
442
+ */
443
+ export function equalsParameters(): never {
444
+ NoTransformConfigurationError("functional.equalsParameters");
445
+ }
446
+
447
+ /**
448
+ * Tests return value with strict equality.
449
+ *
450
+ * Tests a function, by wrapping the function and checking its return value through
451
+ * {@link isEquals} function. If the return value does not match the expected type,
452
+ * it returns `null`. Otherwise there's no type error, it returns the result of the
453
+ * function.
454
+ *
455
+ * By the way, if you want is not just testing type checking, but also finding
456
+ * detailed type error reason(s), then use {@link assertEqualsReturn} or
457
+ * {@link validateEqualsReturn} instead.
458
+ *
459
+ * On the other hand, if you want to allow any superfluous properties, utilize
460
+ * {@link isReturn}, {@link assertReturn} or {@link validateReturn} instead.
461
+ *
462
+ * @template T Target function type
463
+ * @param func Target function to test
464
+ * @returns The wrapper function with type tests
465
+ *
466
+ * @author Jeongho Nam - https://github.com/samchon
467
+ */
468
+ export function equalsReturn<T extends (...args: any[]) => any>(
469
+ func: T,
470
+ ): T extends (...args: infer Arguments) => infer Output
471
+ ? Output extends Promise<infer R>
472
+ ? (...args: Arguments) => Promise<R | null>
473
+ : (...args: Arguments) => Output | null
474
+ : never;
475
+
476
+ /**
477
+ * @internal
478
+ */
479
+ export function equalsReturn(): never {
480
+ NoTransformConfigurationError("functional.equalsReturn");
481
+ }
482
+
483
+ /* -----------------------------------------------------------
484
+ VALIDATE
485
+ ----------------------------------------------------------- */
486
+ /**
487
+ * Validates a function.
488
+ *
489
+ * Validates a function, by wrapping the function and checking its parameters and
490
+ * return value through {@link validate} function. If some parameter or return value
491
+ * does not match the expected type, it returns {@link IValidation.IError} typed
492
+ * object. Otherwise there's no type error, it returns {@link IValidation.ISuccess}
493
+ * typed object instead.
494
+ *
495
+ * For reference, {@link IValidation.IError.path} would be a little bit different with
496
+ * individual {@link validate} function. If the {@link IValidation.IError} occurs from
497
+ * some parameter, the path would start from `$input.parameters[number]`. Otherwise
498
+ * the path would start from `$input.return`.
499
+ *
500
+ * - `$input.parameters[0].~`
501
+ * - `$input.return.~`
502
+ *
503
+ * By the way, if what you want is not finding every type errors, but just finding
504
+ * the 1st type error, then use {@link assertFunction} instead. Otherwise, what you
505
+ * want is just validating parameters or return value only, you can use
506
+ * {@link validateParameters} or {@link validateReturn} instead.
507
+ *
508
+ * On the other hand, if you don't want to allow any superfluous properties, utilize
509
+ * {@link validateEqualsFunction} or {@link assertEqualsFunction} instead.
510
+ *
511
+ * @template T Target function type
512
+ * @param func Target function to validate
513
+ * @returns The wrapper function with type validations
514
+ *
515
+ * @author Jeongho Nam - https://github.com/samchon
516
+ */
517
+ export function validateFunction<T extends (...args: any[]) => any>(
518
+ func: T,
519
+ ): T extends (...args: infer Arguments) => infer Output
520
+ ? Output extends Promise<infer R>
521
+ ? (...args: Arguments) => Promise<IValidation<R>>
522
+ : (...args: Arguments) => IValidation<Output>
523
+ : never;
524
+
525
+ /**
526
+ * @internal
527
+ */
528
+ export function validateFunction(): never {
529
+ NoTransformConfigurationError("functional.validateFunction");
530
+ }
531
+
532
+ /**
533
+ * Validates parameters.
534
+ *
535
+ * Validates a function, by wrapping the function and checking its parameters through
536
+ * {@link validate} function. If some parameter does not match the expected type, it
537
+ * returns {@link IValidation.IError} typed object. Otherwise there's no type error,
538
+ * it returns {@link IValidation.ISuccess} typed object instead.
539
+ *
540
+ * For reference, {@link IValidation.IError.path} would be a little bit different with
541
+ * individual {@link validate} function. If the {@link IValidation.IError} occurs from
542
+ * some parameter, the path would start from `$input.parameters[number]`.
543
+ *
544
+ * By the way, if what you want is not finding every type errors, but just finding
545
+ * the 1st type error, then use {@link assertParameters} instead. Otherwise, what you
546
+ * want is not only validating parameters, but also validating return value, you can
547
+ * use {@link validateFunction} instead.
548
+ *
549
+ * On the other hand, if you don't want to allow any superfluous properties, utilize
550
+ * {@link validateEqualsParameters} or {@link assertEqualsParameters} instead.
551
+ *
552
+ * @template T Target function type
553
+ * @param func Target function to validate
554
+ * @returns The wrapper function with type validations
555
+ *
556
+ * @author Jeongho Nam - https://github.com/samchon
557
+ */
558
+ export function validateParameters<T extends (...args: any[]) => any>(
559
+ func: T,
560
+ ): T extends (...args: infer Arguments) => infer Output
561
+ ? Output extends Promise<infer R>
562
+ ? (...args: Arguments) => Promise<IValidation<R>>
563
+ : (...args: Arguments) => IValidation<Output>
564
+ : never;
565
+
566
+ /**
567
+ * @internal
568
+ */
569
+ export function validateParameters(): never {
570
+ NoTransformConfigurationError("functional.validateReturn");
571
+ }
572
+
573
+ /**
574
+ * Validates return value.
575
+ *
576
+ * Validates a function, by wrapping the function and checking its return value through
577
+ * {@link validate} function. If the return value does not match the expected type, it
578
+ * returns {@link IValidation.IError} typed object. Otherwise there's no type error,
579
+ * it returns {@link IValidation.ISuccess} typed object instead.
580
+ *
581
+ * For reference, {@link IValidation.IError.path} would be a little bit different with
582
+ * individual {@link validate} function. If the {@link IValidation.IError} occurs from
583
+ * the return value, the path would start from `$input.return`.
584
+ *
585
+ * By the way, if what you want is not finding every type errors, but just finding
586
+ * the 1st type error, then use {@link assertReturn} instead. Otherwise, what you want
587
+ * is not only validating return value, but also validating parameters, you can use
588
+ * {@link validateFunction} instead.
589
+ *
590
+ * On the other hand, if you don't want to allow any superfluous properties, utilize
591
+ * {@link validateEqualsReturn} or {@link assertEqualsReturn} instead.
592
+ *
593
+ * @template T Target function type
594
+ * @param func Target function to validate
595
+ * @returns The wrapper function with type validations
596
+ *
597
+ * @author Jeongho Nam - https://github.com/samchon
598
+ */
599
+ export function validateReturn<T extends (...args: any[]) => any>(
600
+ func: T,
601
+ ): T extends (...args: infer Arguments) => infer Output
602
+ ? Output extends Promise<infer R>
603
+ ? (...args: Arguments) => Promise<IValidation<R>>
604
+ : (...args: Arguments) => IValidation<Output>
605
+ : never;
606
+
607
+ /**
608
+ * @internal
609
+ */
610
+ export function validateReturn(): never {
611
+ NoTransformConfigurationError("functional.validateReturn");
612
+ }
613
+
614
+ /**
615
+ * Validates a function with strict equality.
616
+ *
617
+ * Validates a function with strict equality, by wrapping the function and checking
618
+ * its parameters and return value through {@link validateEquals} function. If some
619
+ * parameter or return value does not match the expected type, it returns
620
+ * {@link IValidation.IError} typed object. Otherwise there's no type error, it
621
+ * returns {@link IValidation.ISuccess} typed object instead.
622
+ *
623
+ * For reference, {@link IValidation.IError.path} would be a little bit different with
624
+ * individual {@link validateEquals} function. If the {@link IValidation.IError} occurs
625
+ * from some parameter, the path would start from `$input.parameters[number]`. Otherwise
626
+ * the path would start from `$input.return`.
627
+ *
628
+ * - `$input.parameters[0].~`
629
+ * - `$input.return.~`
630
+ *
631
+ * By the way, if what you want is not finding every type errors, but just finding
632
+ * the 1st type error, then use {@link assertEqualsFunction} instead. Otherwise, what
633
+ * you want is just validating parameters or return value only, you can use
634
+ * {@link validateEqualsParameters} or {@link validateEqualsReturn} instead.
635
+ *
636
+ * On the other hand, if you want to allow any superfluous properties, utilize
637
+ * {@link validateFunction} or {@link assertFunction} instead.
638
+ *
639
+ * @template T Target function type
640
+ * @param func Target function to validate
641
+ * @returns The wrapper function with type validations
642
+ *
643
+ * @author Jeongho Nam - https://github.com/samchon
644
+ */
645
+ export function validateEqualsFunction<T extends (...args: any[]) => any>(
646
+ func: T,
647
+ ): T extends (...args: infer Arguments) => infer Output
648
+ ? Output extends Promise<infer R>
649
+ ? (...args: Arguments) => Promise<IValidation<R>>
650
+ : (...args: Arguments) => IValidation<Output>
651
+ : never;
652
+
653
+ /**
654
+ * @internal
655
+ */
656
+ export function validateEqualsFunction(): never {
657
+ NoTransformConfigurationError("functional.validateEqualsFunction");
658
+ }
659
+
660
+ /**
661
+ * Validates parameters with strict equality.
662
+ *
663
+ * Validates a function, by wrapping the function and checking its parameters through
664
+ * {@link validateEquals} function. If some parameter does not match the expected type,
665
+ * it returns {@link IValidation.IError} typed object. Otherwise there's no type error,
666
+ * it returns {@link IValidation.ISuccess} typed object instead.
667
+ *
668
+ * For reference, {@link IValidation.IError.path} would be a little bit different with
669
+ * individual {@link validateEquals} function. If the {@link IValidation.IError} occurs
670
+ * from some parameter, the path would start from `$input.parameters[number]`.
671
+ *
672
+ * By the way, if what you want is not finding every type errors, but just finding
673
+ * the 1st type error, then use {@link assertEqualsParameters} instead. Otherwise,
674
+ * what you want is not only validating parameters, but also validating return value,
675
+ * you can use {@link validateEqualsFunction} instead.
676
+ *
677
+ * On the other hand, if you want to allow any superfluous properties, utilize
678
+ * {@link validateParameters} or {@link assertParameters} instead.
679
+ *
680
+ * @template T Target function type
681
+ * @param func Target function to validate
682
+ * @returns The wrapper function with type validations
683
+ *
684
+ * @author Jeongho Nam - https://github.com/samchon
685
+ */
686
+ export function validateEqualsParameters<T extends (...args: any[]) => any>(
687
+ func: T,
688
+ ): T extends (...args: infer Arguments) => infer Output
689
+ ? Output extends Promise<infer R>
690
+ ? (...args: Arguments) => Promise<IValidation<R>>
691
+ : (...args: Arguments) => IValidation<Output>
692
+ : never;
693
+
694
+ /**
695
+ * @internal
696
+ */
697
+ export function validateEqualsParameters(): never {
698
+ NoTransformConfigurationError("functional.validateEqualsParameters");
699
+ }
700
+
701
+ /**
702
+ * Validates return value with strict equality.
703
+ *
704
+ * Validates a function, by wrapping the function and checking its return value through
705
+ * {@link validateEquals} function. If the return value does not match the expected type,
706
+ * it returns {@link IValidation.IError} typed object. Otherwise there's no type error,
707
+ * it returns {@link IValidation.ISuccess} typed object instead.
708
+ *
709
+ * For reference, {@link IValidation.IError.path} would be a little bit different with
710
+ * individual {@link validateEquals} function. If the {@link IValidation.IError} occurs
711
+ * from the return value, the path would start from `$input.return`.
712
+ *
713
+ * By the way, if what you want is not finding every type errors, but just finding
714
+ * the 1st type error, then use {@link assertEqualsReturn} instead. Otherwise, what you
715
+ * want is not only validating return value, but also validating parameters, you can use
716
+ * {@link validateEqualsFunction} instead.
717
+ *
718
+ * On the other hand, if you want to allow any superfluous properties, utilize
719
+ * {@link validateReturn} or {@link assertReturn} instead.
720
+ *
721
+ * @template T Target function type
722
+ * @param func Target function to validate
723
+ * @returns The wrapper function with type validations
724
+ *
725
+ * @author Jeongho Nam - https://github.com/samchon
726
+ */
727
+ export function validateEqualsReturn<T extends (...args: any[]) => any>(
728
+ func: T,
729
+ ): T extends (...args: infer Arguments) => infer Output
730
+ ? Output extends Promise<infer R>
731
+ ? (...args: Arguments) => Promise<IValidation<R>>
732
+ : (...args: Arguments) => IValidation<Output>
733
+ : never;
734
+
735
+ /**
736
+ * @internal
737
+ */
738
+ export function validateEqualsReturn(): never {
739
+ NoTransformConfigurationError("functional.validateEqualsReturn");
740
+ }