typia 4.2.2 → 4.2.3-dev.20230814

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 (250) hide show
  1. package/lib/factories/MetadataCollection.js +1 -0
  2. package/lib/factories/MetadataCollection.js.map +1 -1
  3. package/lib/factories/MetadataFactory.js +27 -0
  4. package/lib/factories/MetadataFactory.js.map +1 -1
  5. package/lib/factories/internal/metadata/explore_metadata.js +3 -7
  6. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  7. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +1 -0
  8. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  9. package/lib/programmers/CheckerProgrammer.js +0 -5
  10. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  11. package/lib/programmers/StringifyProgrammer.js +3 -0
  12. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  13. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +3 -0
  14. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
  15. package/package.json +1 -1
  16. package/src/CustomValidatorMap.ts +126 -126
  17. package/src/IRandomGenerator.ts +34 -34
  18. package/src/IValidation.ts +21 -21
  19. package/src/Primitive.ts +131 -131
  20. package/src/TypeGuardError.ts +36 -36
  21. package/src/executable/TypiaGenerateWizard.ts +85 -85
  22. package/src/executable/TypiaSetupWizard.ts +153 -153
  23. package/src/executable/setup/ArgumentParser.ts +45 -45
  24. package/src/executable/setup/CommandExecutor.ts +8 -8
  25. package/src/executable/setup/FileRetriever.ts +22 -22
  26. package/src/executable/setup/PackageManager.ts +71 -71
  27. package/src/executable/setup/PluginConfigurator.ts +70 -70
  28. package/src/executable/typia.ts +52 -52
  29. package/src/factories/CommentFactory.ts +84 -84
  30. package/src/factories/ExpressionFactory.ts +70 -70
  31. package/src/factories/IdentifierFactory.ts +59 -59
  32. package/src/factories/LiteralFactory.ts +39 -39
  33. package/src/factories/MetadataCollection.ts +269 -264
  34. package/src/factories/MetadataFactory.ts +34 -30
  35. package/src/factories/MetadataTagFactory.ts +355 -355
  36. package/src/factories/StatementFactory.ts +24 -24
  37. package/src/factories/TemplateFactory.ts +58 -58
  38. package/src/factories/TypeFactory.ts +124 -124
  39. package/src/factories/ValueFactory.ts +12 -12
  40. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  41. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  42. package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
  43. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  44. package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
  45. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
  46. package/src/factories/internal/metadata/explore_metadata.ts +38 -40
  47. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  48. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  49. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  50. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  51. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  52. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  53. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  54. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +84 -83
  55. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  56. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  57. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  58. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  59. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  60. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  61. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
  62. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  63. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  64. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  65. package/src/functional/$any.ts +2 -2
  66. package/src/functional/$dictionary.ts +25 -25
  67. package/src/functional/$every.ts +11 -11
  68. package/src/functional/$guard.ts +35 -35
  69. package/src/functional/$is_between.ts +2 -2
  70. package/src/functional/$is_custom.ts +14 -14
  71. package/src/functional/$is_date.ts +3 -3
  72. package/src/functional/$is_datetime.ts +2 -2
  73. package/src/functional/$is_email.ts +4 -4
  74. package/src/functional/$is_ipv4.ts +4 -4
  75. package/src/functional/$is_ipv6.ts +4 -4
  76. package/src/functional/$is_url.ts +4 -4
  77. package/src/functional/$is_uuid.ts +4 -4
  78. package/src/functional/$join.ts +46 -46
  79. package/src/functional/$number.ts +12 -12
  80. package/src/functional/$report.ts +15 -15
  81. package/src/functional/$rest.ts +3 -3
  82. package/src/functional/$string.ts +50 -50
  83. package/src/functional/$tail.ts +5 -5
  84. package/src/functional/Namespace.ts +127 -127
  85. package/src/index.ts +4 -4
  86. package/src/metadata/ICommentTag.ts +4 -4
  87. package/src/metadata/IJsDocTagInfo.ts +10 -10
  88. package/src/metadata/IMetadata.ts +28 -28
  89. package/src/metadata/IMetadataAlias.ts +14 -14
  90. package/src/metadata/IMetadataApplication.ts +7 -7
  91. package/src/metadata/IMetadataArray.ts +10 -10
  92. package/src/metadata/IMetadataCollection.ts +11 -11
  93. package/src/metadata/IMetadataConstant.ts +16 -16
  94. package/src/metadata/IMetadataDictionary.ts +14 -14
  95. package/src/metadata/IMetadataEntry.ts +6 -6
  96. package/src/metadata/IMetadataObject.ts +18 -18
  97. package/src/metadata/IMetadataProperty.ts +11 -11
  98. package/src/metadata/IMetadataResolved.ts +6 -6
  99. package/src/metadata/IMetadataTag.ts +105 -105
  100. package/src/metadata/IMetadataTuple.ts +10 -10
  101. package/src/metadata/Metadata.ts +607 -607
  102. package/src/metadata/MetadataAlias.ts +66 -66
  103. package/src/metadata/MetadataArray.ts +55 -55
  104. package/src/metadata/MetadataConstant.ts +3 -3
  105. package/src/metadata/MetadataObject.ts +129 -129
  106. package/src/metadata/MetadataProperty.ts +64 -64
  107. package/src/metadata/MetadataResolved.ts +51 -51
  108. package/src/metadata/MetadataTuple.ts +53 -53
  109. package/src/module.ts +2038 -2038
  110. package/src/programmers/ApplicationProgrammer.ts +47 -47
  111. package/src/programmers/AssertCloneProgrammer.ts +71 -71
  112. package/src/programmers/AssertParseProgrammer.ts +66 -66
  113. package/src/programmers/AssertProgrammer.ts +279 -279
  114. package/src/programmers/AssertPruneProgrammer.ts +68 -68
  115. package/src/programmers/AssertStringifyProgrammer.ts +66 -66
  116. package/src/programmers/CheckerProgrammer.ts +1173 -1182
  117. package/src/programmers/CloneProgrammer.ts +587 -587
  118. package/src/programmers/FeatureProgrammer.ts +495 -495
  119. package/src/programmers/IsCloneProgrammer.ts +78 -78
  120. package/src/programmers/IsParseProgrammer.ts +72 -72
  121. package/src/programmers/IsProgrammer.ts +239 -239
  122. package/src/programmers/IsPruneProgrammer.ts +73 -73
  123. package/src/programmers/IsStringifyProgrammer.ts +76 -76
  124. package/src/programmers/LiteralsProgrammer.ts +63 -63
  125. package/src/programmers/PruneProgrammer.ts +542 -542
  126. package/src/programmers/RandomProgrammer.ts +579 -579
  127. package/src/programmers/StringifyProgrammer.ts +986 -978
  128. package/src/programmers/TypiaProgrammer.ts +129 -129
  129. package/src/programmers/ValidateCloneProgrammer.ts +85 -85
  130. package/src/programmers/ValidateParseProgrammer.ts +70 -70
  131. package/src/programmers/ValidateProgrammer.ts +305 -305
  132. package/src/programmers/ValidatePruneProgrammer.ts +78 -78
  133. package/src/programmers/ValidateStringifyProgrammer.ts +84 -84
  134. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  135. package/src/programmers/helpers/CloneJoiner.ts +131 -131
  136. package/src/programmers/helpers/FunctionImporeter.ts +78 -78
  137. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  138. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  139. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  140. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  141. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  142. package/src/programmers/helpers/RandomRanger.ts +216 -216
  143. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  144. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  145. package/src/programmers/helpers/UnionExplorer.ts +301 -301
  146. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  147. package/src/programmers/helpers/disable_function_importer_declare.ts +26 -26
  148. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  149. package/src/programmers/internal/application_alias.ts +66 -66
  150. package/src/programmers/internal/application_array.ts +30 -30
  151. package/src/programmers/internal/application_boolean.ts +15 -15
  152. package/src/programmers/internal/application_constant.ts +26 -26
  153. package/src/programmers/internal/application_default.ts +17 -17
  154. package/src/programmers/internal/application_default_string.ts +33 -33
  155. package/src/programmers/internal/application_native.ts +39 -39
  156. package/src/programmers/internal/application_number.ts +74 -74
  157. package/src/programmers/internal/application_object.ts +165 -165
  158. package/src/programmers/internal/application_resolved.ts +55 -55
  159. package/src/programmers/internal/application_schema.ts +157 -157
  160. package/src/programmers/internal/application_string.ts +44 -44
  161. package/src/programmers/internal/application_templates.ts +25 -25
  162. package/src/programmers/internal/application_tuple.ts +57 -57
  163. package/src/programmers/internal/check_array.ts +30 -30
  164. package/src/programmers/internal/check_array_length.ts +35 -35
  165. package/src/programmers/internal/check_bigint.ts +82 -82
  166. package/src/programmers/internal/check_custom.ts +31 -31
  167. package/src/programmers/internal/check_dynamic_properties.ts +195 -195
  168. package/src/programmers/internal/check_everything.ts +28 -28
  169. package/src/programmers/internal/check_native.ts +21 -21
  170. package/src/programmers/internal/check_number.ts +177 -177
  171. package/src/programmers/internal/check_object.ts +55 -55
  172. package/src/programmers/internal/check_string.ts +25 -25
  173. package/src/programmers/internal/check_string_tags.ts +67 -67
  174. package/src/programmers/internal/check_template.ts +56 -56
  175. package/src/programmers/internal/check_union_array_like.ts +329 -329
  176. package/src/programmers/internal/decode_union_object.ts +73 -73
  177. package/src/programmers/internal/feature_object_entries.ts +63 -63
  178. package/src/programmers/internal/get_comment_tags.ts +23 -23
  179. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  180. package/src/programmers/internal/prune_object_properties.ts +60 -60
  181. package/src/programmers/internal/random_custom.ts +29 -29
  182. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  183. package/src/programmers/internal/stringify_native.ts +7 -7
  184. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  185. package/src/programmers/internal/template_to_pattern.ts +15 -15
  186. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  187. package/src/schemas/IJsonApplication.ts +8 -8
  188. package/src/schemas/IJsonComponents.ts +33 -33
  189. package/src/schemas/IJsonSchema.ts +133 -133
  190. package/src/transform.ts +27 -27
  191. package/src/transformers/CallExpressionTransformer.ts +179 -179
  192. package/src/transformers/FileTransformer.ts +47 -47
  193. package/src/transformers/IProject.ts +11 -11
  194. package/src/transformers/ITransformOptions.ts +62 -62
  195. package/src/transformers/ImportTransformer.ts +66 -66
  196. package/src/transformers/NodeTransformer.ts +13 -13
  197. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +112 -104
  198. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  199. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  200. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  201. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  202. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  203. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  204. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  205. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  206. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  207. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
  208. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  209. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  210. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  211. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  212. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
  213. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +53 -53
  214. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  215. package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
  216. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  217. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  218. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  219. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  220. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  221. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  222. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  223. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  224. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  225. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  226. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  227. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  228. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  229. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  230. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  231. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  232. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  233. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  234. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  235. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  236. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  237. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  238. package/src/transformers/internal/GenericTransformer.ts +97 -97
  239. package/src/typings/Atomic.ts +17 -17
  240. package/src/typings/ClassProperties.ts +5 -5
  241. package/src/typings/Customizable.ts +5 -5
  242. package/src/typings/OmitNever.ts +3 -3
  243. package/src/typings/SpecialFields.ts +3 -3
  244. package/src/typings/Writable.ts +11 -11
  245. package/src/utils/ArrayUtil.ts +45 -45
  246. package/src/utils/Escaper.ts +46 -46
  247. package/src/utils/MapUtil.ts +12 -12
  248. package/src/utils/PatternUtil.ts +33 -33
  249. package/src/utils/RandomGenerator.ts +81 -81
  250. package/src/utils/Singleton.ts +17 -17
@@ -1,126 +1,126 @@
1
- import { Customizable } from "./typings/Customizable";
2
-
3
- /**
4
- * Map of custom validators.
5
- *
6
- * Map of custom validator functions, storing tag name and type of target value
7
- * as key, and custom validator function as value.
8
- *
9
- * When you want to add a custom validation logic utilizing comment tags, you
10
- * can insert a custom validator function with specific tag name and type of
11
- * the target value like below.
12
- *
13
- * ```ts
14
- * typia.customValidators.insert("powerOf")("number")(
15
- * (text: string) => {
16
- * const denominator: number = Math.log(Number(text));
17
- * return (value: number) => {
18
- * value = Math.log(value) / denominator;
19
- * return value === Math.floor(value);
20
- * };
21
- * }
22
- * );
23
- * typia.customValidators.insert("dollar")("string")(
24
- * () => (value: string) => value.startsWith("$"),
25
- * );
26
- *
27
- * interface TagCustom {
28
- * /**
29
- * * @powerOf 10
30
- * *\/
31
- * powerOf: number;
32
- *
33
- * /**
34
- * * @dollar
35
- * *\/
36
- * dollar: string;
37
- * }
38
- * ```
39
- *
40
- * @author Jeongho Nam - https://github.com/samchon
41
- */
42
- export interface CustomValidatorMap {
43
- /**
44
- * Get number of stored tags.
45
- *
46
- * @return Number of stored tags
47
- */
48
- size(): number;
49
-
50
- /**
51
- * Get number of stored types of the specified tag name.
52
- *
53
- * In other words, number of stored custom validator functions of
54
- * the specified tag name.
55
- *
56
- * @param name Tag name
57
- * @return Number of stored types function
58
- */
59
- size(name: string): number;
60
-
61
- /**
62
- * Test whether custom validator function exists or not.
63
- *
64
- * @param name Tag name
65
- * @param type Type of the target value
66
- * @returns Whether exists or not
67
- */
68
- has: (name: string) => (type: keyof Customizable) => boolean;
69
-
70
- /**
71
- * Get custom validator function.
72
- *
73
- * @param name Tag name
74
- * @param type Type of the target value
75
- * @returns Custom validator function or undefined value
76
- */
77
- get(
78
- name: string,
79
- ): <Type extends keyof Customizable>(
80
- type: Type,
81
- ) => CustomValidatorMap.Closure<Type> | undefined;
82
-
83
- /**
84
- * Insert a new custom validator function.
85
- *
86
- * You can add a custom validation logic utilizing comment tags,
87
- * by inserting a function which returns a boolean value, with specific
88
- * tag name and type of the target value.
89
- *
90
- * However, if you try to insert a duplicated tag name and type, the
91
- * closure function would not be enrolled and `false` value would be
92
- * returned.
93
- *
94
- * @param name Tag name
95
- * @param type Type of the target value
96
- * @param closure Custom validator function
97
- * @returns Whether succeeded to insert or not
98
- */
99
- insert(
100
- name: string,
101
- ): <Type extends keyof Customizable>(
102
- type: Type,
103
- ) => (closure: CustomValidatorMap.Closure<Type>) => boolean;
104
-
105
- /**
106
- * Erase custom validator function.
107
- *
108
- * @param name Tag name
109
- * @param type Type of the target value
110
- * @returns Whether succeeded to erase or not
111
- */
112
- erase(name: string): (type: keyof Customizable) => boolean;
113
- }
114
- export namespace CustomValidatorMap {
115
- /**
116
- * Type of closure function of custom validation.
117
- *
118
- * @template Type Type of the target value
119
- * @param text Text of the tag. For example, if the tag is `@powerOf 10`, `text` is 10.
120
- * @param value Value to validate
121
- * @returns Whether the value is valid or not
122
- */
123
- export type Closure<Type extends keyof Customizable> = (
124
- text: string,
125
- ) => (value: Customizable[Type]) => boolean;
126
- }
1
+ import { Customizable } from "./typings/Customizable";
2
+
3
+ /**
4
+ * Map of custom validators.
5
+ *
6
+ * Map of custom validator functions, storing tag name and type of target value
7
+ * as key, and custom validator function as value.
8
+ *
9
+ * When you want to add a custom validation logic utilizing comment tags, you
10
+ * can insert a custom validator function with specific tag name and type of
11
+ * the target value like below.
12
+ *
13
+ * ```ts
14
+ * typia.customValidators.insert("powerOf")("number")(
15
+ * (text: string) => {
16
+ * const denominator: number = Math.log(Number(text));
17
+ * return (value: number) => {
18
+ * value = Math.log(value) / denominator;
19
+ * return value === Math.floor(value);
20
+ * };
21
+ * }
22
+ * );
23
+ * typia.customValidators.insert("dollar")("string")(
24
+ * () => (value: string) => value.startsWith("$"),
25
+ * );
26
+ *
27
+ * interface TagCustom {
28
+ * /**
29
+ * * @powerOf 10
30
+ * *\/
31
+ * powerOf: number;
32
+ *
33
+ * /**
34
+ * * @dollar
35
+ * *\/
36
+ * dollar: string;
37
+ * }
38
+ * ```
39
+ *
40
+ * @author Jeongho Nam - https://github.com/samchon
41
+ */
42
+ export interface CustomValidatorMap {
43
+ /**
44
+ * Get number of stored tags.
45
+ *
46
+ * @return Number of stored tags
47
+ */
48
+ size(): number;
49
+
50
+ /**
51
+ * Get number of stored types of the specified tag name.
52
+ *
53
+ * In other words, number of stored custom validator functions of
54
+ * the specified tag name.
55
+ *
56
+ * @param name Tag name
57
+ * @return Number of stored types function
58
+ */
59
+ size(name: string): number;
60
+
61
+ /**
62
+ * Test whether custom validator function exists or not.
63
+ *
64
+ * @param name Tag name
65
+ * @param type Type of the target value
66
+ * @returns Whether exists or not
67
+ */
68
+ has: (name: string) => (type: keyof Customizable) => boolean;
69
+
70
+ /**
71
+ * Get custom validator function.
72
+ *
73
+ * @param name Tag name
74
+ * @param type Type of the target value
75
+ * @returns Custom validator function or undefined value
76
+ */
77
+ get(
78
+ name: string,
79
+ ): <Type extends keyof Customizable>(
80
+ type: Type,
81
+ ) => CustomValidatorMap.Closure<Type> | undefined;
82
+
83
+ /**
84
+ * Insert a new custom validator function.
85
+ *
86
+ * You can add a custom validation logic utilizing comment tags,
87
+ * by inserting a function which returns a boolean value, with specific
88
+ * tag name and type of the target value.
89
+ *
90
+ * However, if you try to insert a duplicated tag name and type, the
91
+ * closure function would not be enrolled and `false` value would be
92
+ * returned.
93
+ *
94
+ * @param name Tag name
95
+ * @param type Type of the target value
96
+ * @param closure Custom validator function
97
+ * @returns Whether succeeded to insert or not
98
+ */
99
+ insert(
100
+ name: string,
101
+ ): <Type extends keyof Customizable>(
102
+ type: Type,
103
+ ) => (closure: CustomValidatorMap.Closure<Type>) => boolean;
104
+
105
+ /**
106
+ * Erase custom validator function.
107
+ *
108
+ * @param name Tag name
109
+ * @param type Type of the target value
110
+ * @returns Whether succeeded to erase or not
111
+ */
112
+ erase(name: string): (type: keyof Customizable) => boolean;
113
+ }
114
+ export namespace CustomValidatorMap {
115
+ /**
116
+ * Type of closure function of custom validation.
117
+ *
118
+ * @template Type Type of the target value
119
+ * @param text Text of the tag. For example, if the tag is `@powerOf 10`, `text` is 10.
120
+ * @param value Value to validate
121
+ * @returns Whether the value is valid or not
122
+ */
123
+ export type Closure<Type extends keyof Customizable> = (
124
+ text: string,
125
+ ) => (value: Customizable[Type]) => boolean;
126
+ }
@@ -1,34 +1,34 @@
1
- import { Customizable } from "./typings/Customizable";
2
-
3
- export interface IRandomGenerator {
4
- boolean(): boolean;
5
- integer(minimum?: number, maximum?: number): number;
6
- number(minimum?: number, maximum?: number): number;
7
- bigint(minimum?: bigint, maximum?: bigint): bigint;
8
- string(length?: number): string;
9
- array<T>(closure: (index: number) => T, count?: number): T[];
10
- length(): number;
11
-
12
- uuid(): string;
13
- email(): string;
14
- url(): string;
15
- ipv4(): string;
16
- ipv6(): string;
17
- pattern(regex: RegExp): string;
18
- date(minimum?: number, maximum?: number): string;
19
- datetime(minimum?: number, maximum?: number): string;
20
-
21
- customs?: IRandomGenerator.CustomMap;
22
- }
23
- export namespace IRandomGenerator {
24
- export type CustomMap = {
25
- [Type in keyof Customizable]?: (
26
- tags: ICommentTag[],
27
- ) => Customizable[Type] | undefined;
28
- };
29
-
30
- export interface ICommentTag {
31
- name: string;
32
- value?: string;
33
- }
34
- }
1
+ import { Customizable } from "./typings/Customizable";
2
+
3
+ export interface IRandomGenerator {
4
+ boolean(): boolean;
5
+ integer(minimum?: number, maximum?: number): number;
6
+ number(minimum?: number, maximum?: number): number;
7
+ bigint(minimum?: bigint, maximum?: bigint): bigint;
8
+ string(length?: number): string;
9
+ array<T>(closure: (index: number) => T, count?: number): T[];
10
+ length(): number;
11
+
12
+ uuid(): string;
13
+ email(): string;
14
+ url(): string;
15
+ ipv4(): string;
16
+ ipv6(): string;
17
+ pattern(regex: RegExp): string;
18
+ date(minimum?: number, maximum?: number): string;
19
+ datetime(minimum?: number, maximum?: number): string;
20
+
21
+ customs?: IRandomGenerator.CustomMap;
22
+ }
23
+ export namespace IRandomGenerator {
24
+ export type CustomMap = {
25
+ [Type in keyof Customizable]?: (
26
+ tags: ICommentTag[],
27
+ ) => Customizable[Type] | undefined;
28
+ };
29
+
30
+ export interface ICommentTag {
31
+ name: string;
32
+ value?: string;
33
+ }
34
+ }
@@ -1,21 +1,21 @@
1
- export type IValidation<T = unknown> =
2
- | IValidation.ISuccess<T>
3
- | IValidation.IFailure;
4
- export namespace IValidation {
5
- export interface ISuccess<T = unknown> {
6
- success: true;
7
- data: T;
8
- errors: [];
9
- }
10
-
11
- export interface IFailure {
12
- success: false;
13
- errors: IError[];
14
- }
15
-
16
- export interface IError {
17
- path: string;
18
- expected: string;
19
- value: any;
20
- }
21
- }
1
+ export type IValidation<T = unknown> =
2
+ | IValidation.ISuccess<T>
3
+ | IValidation.IFailure;
4
+ export namespace IValidation {
5
+ export interface ISuccess<T = unknown> {
6
+ success: true;
7
+ data: T;
8
+ errors: [];
9
+ }
10
+
11
+ export interface IFailure {
12
+ success: false;
13
+ errors: IError[];
14
+ }
15
+
16
+ export interface IError {
17
+ path: string;
18
+ expected: string;
19
+ value: any;
20
+ }
21
+ }
package/src/Primitive.ts CHANGED
@@ -1,131 +1,131 @@
1
- /**
2
- * Primitive type.
3
- *
4
- * `Primitive` is a type of TMP (Type Meta Programming) type who converts its argument as a
5
- * primitive type.
6
- *
7
- * If the target argument is a built-in class who returns its origin primitive type through
8
- * the `valueOf()` method like the `String` or `Number`, its return type would be the
9
- * `string` or `number`.
10
- *
11
- * Otherwise, the target argument is a type of custom class, all of its custom method would
12
- * be erased and its prototype would be changed to the primitive `object`. Therefore, return
13
- * type of the TMP type finally be the primitive object.
14
- *
15
- * In addition, if the target argument is a type of custom class and it has a special
16
- * method `toJSON()`, return type of this `Primitive` would be not `Primitive<Instance>`
17
- * but `Primitive<ReturnType<Instance.toJSON>>`.
18
- *
19
- * Before | After
20
- * ------------------------|----------------------------------------
21
- * `Boolean` | `boolean`
22
- * `Number` | `number`
23
- * `String` | `string`
24
- * `Class` | `object`
25
- * `Class` with `toJSON()` | `Primitive<ReturnType<Class.toJSON>>`
26
- * Others | No change
27
- *
28
- * @template Instance Target argument type.
29
- * @author Jenogho Nam - https://github.com/samchon
30
- * @author Kyungsu Kang - https://github.com/kakasoo
31
- * @author Michael - https://github.com/8471919
32
- */
33
- export type Primitive<T> = Equal<T, PrimitiveMain<T>> extends true
34
- ? T
35
- : PrimitiveMain<T>;
36
-
37
- type Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
38
-
39
- type PrimitiveMain<Instance> = Instance extends [never]
40
- ? never // (special trick for jsonable | null) type
41
- : ValueOf<Instance> extends boolean | number | bigint | string
42
- ? ValueOf<Instance>
43
- : ValueOf<Instance> extends object
44
- ? Instance extends object
45
- ? Instance extends NativeClass
46
- ? {}
47
- : Instance extends IJsonable<infer Raw>
48
- ? ValueOf<Raw> extends object
49
- ? Raw extends object
50
- ? PrimitiveObject<Raw> // object would be primitified
51
- : never // cannot be
52
- : ValueOf<Raw> // atomic value
53
- : PrimitiveObject<Instance> // object would be primitified
54
- : never // cannot be
55
- : ValueOf<Instance>;
56
-
57
- type PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
58
- ? IsTuple<Instance> extends true
59
- ? PrimitiveTuple<Instance>
60
- : PrimitiveMain<T>[]
61
- : {
62
- [P in keyof Instance]: Instance[P] extends Function
63
- ? never
64
- : PrimitiveMain<Instance[P]>;
65
- };
66
-
67
- type PrimitiveTuple<T extends readonly any[]> = T extends []
68
- ? []
69
- : T extends [infer F]
70
- ? [PrimitiveMain<F>]
71
- : T extends [infer F, ...infer Rest extends readonly any[]]
72
- ? [PrimitiveMain<F>, ...PrimitiveTuple<Rest>]
73
- : T extends [(infer F)?]
74
- ? [PrimitiveMain<F>?]
75
- : T extends [(infer F)?, ...infer Rest extends readonly any[]]
76
- ? [PrimitiveMain<F>?, ...PrimitiveTuple<Rest>]
77
- : [];
78
-
79
- type ValueOf<Instance> = IsValueOf<Instance, Boolean> extends true
80
- ? boolean
81
- : IsValueOf<Instance, Number> extends true
82
- ? number
83
- : IsValueOf<Instance, String> extends true
84
- ? string
85
- : Instance;
86
-
87
- type NativeClass =
88
- | Set<any>
89
- | Map<any, any>
90
- | WeakSet<any>
91
- | WeakMap<any, any>
92
- | Uint8Array
93
- | Uint8ClampedArray
94
- | Uint16Array
95
- | Uint32Array
96
- | BigUint64Array
97
- | Int8Array
98
- | Int16Array
99
- | Int32Array
100
- | BigInt64Array
101
- | Float32Array
102
- | Float64Array
103
- | ArrayBuffer
104
- | SharedArrayBuffer
105
- | DataView;
106
-
107
- type IsTuple<T extends readonly any[] | { length: number }> = [T] extends [
108
- never,
109
- ]
110
- ? false
111
- : T extends readonly any[]
112
- ? number extends T["length"]
113
- ? false
114
- : true
115
- : false;
116
-
117
- type IsValueOf<Instance, Object extends IValueOf<any>> = Instance extends Object
118
- ? Object extends IValueOf<infer Primitive>
119
- ? Instance extends Primitive
120
- ? false
121
- : true // not Primitive, but Object
122
- : false // cannot be
123
- : false;
124
-
125
- interface IValueOf<T> {
126
- valueOf(): T;
127
- }
128
-
129
- interface IJsonable<T> {
130
- toJSON(): T;
131
- }
1
+ /**
2
+ * Primitive type.
3
+ *
4
+ * `Primitive` is a type of TMP (Type Meta Programming) type who converts its argument as a
5
+ * primitive type.
6
+ *
7
+ * If the target argument is a built-in class who returns its origin primitive type through
8
+ * the `valueOf()` method like the `String` or `Number`, its return type would be the
9
+ * `string` or `number`.
10
+ *
11
+ * Otherwise, the target argument is a type of custom class, all of its custom method would
12
+ * be erased and its prototype would be changed to the primitive `object`. Therefore, return
13
+ * type of the TMP type finally be the primitive object.
14
+ *
15
+ * In addition, if the target argument is a type of custom class and it has a special
16
+ * method `toJSON()`, return type of this `Primitive` would be not `Primitive<Instance>`
17
+ * but `Primitive<ReturnType<Instance.toJSON>>`.
18
+ *
19
+ * Before | After
20
+ * ------------------------|----------------------------------------
21
+ * `Boolean` | `boolean`
22
+ * `Number` | `number`
23
+ * `String` | `string`
24
+ * `Class` | `object`
25
+ * `Class` with `toJSON()` | `Primitive<ReturnType<Class.toJSON>>`
26
+ * Others | No change
27
+ *
28
+ * @template Instance Target argument type.
29
+ * @author Jenogho Nam - https://github.com/samchon
30
+ * @author Kyungsu Kang - https://github.com/kakasoo
31
+ * @author Michael - https://github.com/8471919
32
+ */
33
+ export type Primitive<T> = Equal<T, PrimitiveMain<T>> extends true
34
+ ? T
35
+ : PrimitiveMain<T>;
36
+
37
+ type Equal<X, Y> = X extends Y ? (Y extends X ? true : false) : false;
38
+
39
+ type PrimitiveMain<Instance> = Instance extends [never]
40
+ ? never // (special trick for jsonable | null) type
41
+ : ValueOf<Instance> extends boolean | number | bigint | string
42
+ ? ValueOf<Instance>
43
+ : ValueOf<Instance> extends object
44
+ ? Instance extends object
45
+ ? Instance extends NativeClass
46
+ ? {}
47
+ : Instance extends IJsonable<infer Raw>
48
+ ? ValueOf<Raw> extends object
49
+ ? Raw extends object
50
+ ? PrimitiveObject<Raw> // object would be primitified
51
+ : never // cannot be
52
+ : ValueOf<Raw> // atomic value
53
+ : PrimitiveObject<Instance> // object would be primitified
54
+ : never // cannot be
55
+ : ValueOf<Instance>;
56
+
57
+ type PrimitiveObject<Instance extends object> = Instance extends Array<infer T>
58
+ ? IsTuple<Instance> extends true
59
+ ? PrimitiveTuple<Instance>
60
+ : PrimitiveMain<T>[]
61
+ : {
62
+ [P in keyof Instance]: Instance[P] extends Function
63
+ ? never
64
+ : PrimitiveMain<Instance[P]>;
65
+ };
66
+
67
+ type PrimitiveTuple<T extends readonly any[]> = T extends []
68
+ ? []
69
+ : T extends [infer F]
70
+ ? [PrimitiveMain<F>]
71
+ : T extends [infer F, ...infer Rest extends readonly any[]]
72
+ ? [PrimitiveMain<F>, ...PrimitiveTuple<Rest>]
73
+ : T extends [(infer F)?]
74
+ ? [PrimitiveMain<F>?]
75
+ : T extends [(infer F)?, ...infer Rest extends readonly any[]]
76
+ ? [PrimitiveMain<F>?, ...PrimitiveTuple<Rest>]
77
+ : [];
78
+
79
+ type ValueOf<Instance> = IsValueOf<Instance, Boolean> extends true
80
+ ? boolean
81
+ : IsValueOf<Instance, Number> extends true
82
+ ? number
83
+ : IsValueOf<Instance, String> extends true
84
+ ? string
85
+ : Instance;
86
+
87
+ type NativeClass =
88
+ | Set<any>
89
+ | Map<any, any>
90
+ | WeakSet<any>
91
+ | WeakMap<any, any>
92
+ | Uint8Array
93
+ | Uint8ClampedArray
94
+ | Uint16Array
95
+ | Uint32Array
96
+ | BigUint64Array
97
+ | Int8Array
98
+ | Int16Array
99
+ | Int32Array
100
+ | BigInt64Array
101
+ | Float32Array
102
+ | Float64Array
103
+ | ArrayBuffer
104
+ | SharedArrayBuffer
105
+ | DataView;
106
+
107
+ type IsTuple<T extends readonly any[] | { length: number }> = [T] extends [
108
+ never,
109
+ ]
110
+ ? false
111
+ : T extends readonly any[]
112
+ ? number extends T["length"]
113
+ ? false
114
+ : true
115
+ : false;
116
+
117
+ type IsValueOf<Instance, Object extends IValueOf<any>> = Instance extends Object
118
+ ? Object extends IValueOf<infer Primitive>
119
+ ? Instance extends Primitive
120
+ ? false
121
+ : true // not Primitive, but Object
122
+ : false // cannot be
123
+ : false;
124
+
125
+ interface IValueOf<T> {
126
+ valueOf(): T;
127
+ }
128
+
129
+ interface IJsonable<T> {
130
+ toJSON(): T;
131
+ }