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.
- package/lib/factories/MetadataCollection.js +1 -0
- package/lib/factories/MetadataCollection.js.map +1 -1
- package/lib/factories/MetadataFactory.js +27 -0
- package/lib/factories/MetadataFactory.js.map +1 -1
- package/lib/factories/internal/metadata/explore_metadata.js +3 -7
- package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_intersection.js +1 -0
- package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
- package/lib/programmers/CheckerProgrammer.js +0 -5
- package/lib/programmers/CheckerProgrammer.js.map +1 -1
- package/lib/programmers/StringifyProgrammer.js +3 -0
- package/lib/programmers/StringifyProgrammer.js.map +1 -1
- package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +3 -0
- package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
- package/package.json +1 -1
- package/src/CustomValidatorMap.ts +126 -126
- package/src/IRandomGenerator.ts +34 -34
- package/src/IValidation.ts +21 -21
- package/src/Primitive.ts +131 -131
- package/src/TypeGuardError.ts +36 -36
- package/src/executable/TypiaGenerateWizard.ts +85 -85
- package/src/executable/TypiaSetupWizard.ts +153 -153
- package/src/executable/setup/ArgumentParser.ts +45 -45
- package/src/executable/setup/CommandExecutor.ts +8 -8
- package/src/executable/setup/FileRetriever.ts +22 -22
- package/src/executable/setup/PackageManager.ts +71 -71
- package/src/executable/setup/PluginConfigurator.ts +70 -70
- package/src/executable/typia.ts +52 -52
- package/src/factories/CommentFactory.ts +84 -84
- package/src/factories/ExpressionFactory.ts +70 -70
- package/src/factories/IdentifierFactory.ts +59 -59
- package/src/factories/LiteralFactory.ts +39 -39
- package/src/factories/MetadataCollection.ts +269 -264
- package/src/factories/MetadataFactory.ts +34 -30
- package/src/factories/MetadataTagFactory.ts +355 -355
- package/src/factories/StatementFactory.ts +24 -24
- package/src/factories/TemplateFactory.ts +58 -58
- package/src/factories/TypeFactory.ts +124 -124
- package/src/factories/ValueFactory.ts +12 -12
- package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
- package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
- package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
- package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
- package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
- package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
- package/src/factories/internal/metadata/explore_metadata.ts +38 -40
- package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
- package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
- package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
- package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
- package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
- package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
- package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
- package/src/factories/internal/metadata/iterate_metadata_intersection.ts +84 -83
- package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
- package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
- package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
- package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
- package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
- package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
- package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
- package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
- package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
- package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
- package/src/functional/$any.ts +2 -2
- package/src/functional/$dictionary.ts +25 -25
- package/src/functional/$every.ts +11 -11
- package/src/functional/$guard.ts +35 -35
- package/src/functional/$is_between.ts +2 -2
- package/src/functional/$is_custom.ts +14 -14
- package/src/functional/$is_date.ts +3 -3
- package/src/functional/$is_datetime.ts +2 -2
- package/src/functional/$is_email.ts +4 -4
- package/src/functional/$is_ipv4.ts +4 -4
- package/src/functional/$is_ipv6.ts +4 -4
- package/src/functional/$is_url.ts +4 -4
- package/src/functional/$is_uuid.ts +4 -4
- package/src/functional/$join.ts +46 -46
- package/src/functional/$number.ts +12 -12
- package/src/functional/$report.ts +15 -15
- package/src/functional/$rest.ts +3 -3
- package/src/functional/$string.ts +50 -50
- package/src/functional/$tail.ts +5 -5
- package/src/functional/Namespace.ts +127 -127
- package/src/index.ts +4 -4
- package/src/metadata/ICommentTag.ts +4 -4
- package/src/metadata/IJsDocTagInfo.ts +10 -10
- package/src/metadata/IMetadata.ts +28 -28
- package/src/metadata/IMetadataAlias.ts +14 -14
- package/src/metadata/IMetadataApplication.ts +7 -7
- package/src/metadata/IMetadataArray.ts +10 -10
- package/src/metadata/IMetadataCollection.ts +11 -11
- package/src/metadata/IMetadataConstant.ts +16 -16
- package/src/metadata/IMetadataDictionary.ts +14 -14
- package/src/metadata/IMetadataEntry.ts +6 -6
- package/src/metadata/IMetadataObject.ts +18 -18
- package/src/metadata/IMetadataProperty.ts +11 -11
- package/src/metadata/IMetadataResolved.ts +6 -6
- package/src/metadata/IMetadataTag.ts +105 -105
- package/src/metadata/IMetadataTuple.ts +10 -10
- package/src/metadata/Metadata.ts +607 -607
- package/src/metadata/MetadataAlias.ts +66 -66
- package/src/metadata/MetadataArray.ts +55 -55
- package/src/metadata/MetadataConstant.ts +3 -3
- package/src/metadata/MetadataObject.ts +129 -129
- package/src/metadata/MetadataProperty.ts +64 -64
- package/src/metadata/MetadataResolved.ts +51 -51
- package/src/metadata/MetadataTuple.ts +53 -53
- package/src/module.ts +2038 -2038
- package/src/programmers/ApplicationProgrammer.ts +47 -47
- package/src/programmers/AssertCloneProgrammer.ts +71 -71
- package/src/programmers/AssertParseProgrammer.ts +66 -66
- package/src/programmers/AssertProgrammer.ts +279 -279
- package/src/programmers/AssertPruneProgrammer.ts +68 -68
- package/src/programmers/AssertStringifyProgrammer.ts +66 -66
- package/src/programmers/CheckerProgrammer.ts +1173 -1182
- package/src/programmers/CloneProgrammer.ts +587 -587
- package/src/programmers/FeatureProgrammer.ts +495 -495
- package/src/programmers/IsCloneProgrammer.ts +78 -78
- package/src/programmers/IsParseProgrammer.ts +72 -72
- package/src/programmers/IsProgrammer.ts +239 -239
- package/src/programmers/IsPruneProgrammer.ts +73 -73
- package/src/programmers/IsStringifyProgrammer.ts +76 -76
- package/src/programmers/LiteralsProgrammer.ts +63 -63
- package/src/programmers/PruneProgrammer.ts +542 -542
- package/src/programmers/RandomProgrammer.ts +579 -579
- package/src/programmers/StringifyProgrammer.ts +986 -978
- package/src/programmers/TypiaProgrammer.ts +129 -129
- package/src/programmers/ValidateCloneProgrammer.ts +85 -85
- package/src/programmers/ValidateParseProgrammer.ts +70 -70
- package/src/programmers/ValidateProgrammer.ts +305 -305
- package/src/programmers/ValidatePruneProgrammer.ts +78 -78
- package/src/programmers/ValidateStringifyProgrammer.ts +84 -84
- package/src/programmers/helpers/AtomicPredicator.ts +31 -31
- package/src/programmers/helpers/CloneJoiner.ts +131 -131
- package/src/programmers/helpers/FunctionImporeter.ts +78 -78
- package/src/programmers/helpers/ICheckEntry.ts +12 -12
- package/src/programmers/helpers/IExpressionEntry.ts +12 -12
- package/src/programmers/helpers/OptionPredicator.ts +15 -15
- package/src/programmers/helpers/PruneJoiner.ts +143 -143
- package/src/programmers/helpers/RandomJoiner.ts +173 -173
- package/src/programmers/helpers/RandomRanger.ts +216 -216
- package/src/programmers/helpers/StringifyJoinder.ts +113 -113
- package/src/programmers/helpers/StringifyPredicator.ts +13 -13
- package/src/programmers/helpers/UnionExplorer.ts +301 -301
- package/src/programmers/helpers/UnionPredicator.ts +81 -81
- package/src/programmers/helpers/disable_function_importer_declare.ts +26 -26
- package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
- package/src/programmers/internal/application_alias.ts +66 -66
- package/src/programmers/internal/application_array.ts +30 -30
- package/src/programmers/internal/application_boolean.ts +15 -15
- package/src/programmers/internal/application_constant.ts +26 -26
- package/src/programmers/internal/application_default.ts +17 -17
- package/src/programmers/internal/application_default_string.ts +33 -33
- package/src/programmers/internal/application_native.ts +39 -39
- package/src/programmers/internal/application_number.ts +74 -74
- package/src/programmers/internal/application_object.ts +165 -165
- package/src/programmers/internal/application_resolved.ts +55 -55
- package/src/programmers/internal/application_schema.ts +157 -157
- package/src/programmers/internal/application_string.ts +44 -44
- package/src/programmers/internal/application_templates.ts +25 -25
- package/src/programmers/internal/application_tuple.ts +57 -57
- package/src/programmers/internal/check_array.ts +30 -30
- package/src/programmers/internal/check_array_length.ts +35 -35
- package/src/programmers/internal/check_bigint.ts +82 -82
- package/src/programmers/internal/check_custom.ts +31 -31
- package/src/programmers/internal/check_dynamic_properties.ts +195 -195
- package/src/programmers/internal/check_everything.ts +28 -28
- package/src/programmers/internal/check_native.ts +21 -21
- package/src/programmers/internal/check_number.ts +177 -177
- package/src/programmers/internal/check_object.ts +55 -55
- package/src/programmers/internal/check_string.ts +25 -25
- package/src/programmers/internal/check_string_tags.ts +67 -67
- package/src/programmers/internal/check_template.ts +56 -56
- package/src/programmers/internal/check_union_array_like.ts +329 -329
- package/src/programmers/internal/decode_union_object.ts +73 -73
- package/src/programmers/internal/feature_object_entries.ts +63 -63
- package/src/programmers/internal/get_comment_tags.ts +23 -23
- package/src/programmers/internal/metadata_to_pattern.ts +34 -34
- package/src/programmers/internal/prune_object_properties.ts +60 -60
- package/src/programmers/internal/random_custom.ts +29 -29
- package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
- package/src/programmers/internal/stringify_native.ts +7 -7
- package/src/programmers/internal/stringify_regular_properties.ts +83 -83
- package/src/programmers/internal/template_to_pattern.ts +15 -15
- package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
- package/src/schemas/IJsonApplication.ts +8 -8
- package/src/schemas/IJsonComponents.ts +33 -33
- package/src/schemas/IJsonSchema.ts +133 -133
- package/src/transform.ts +27 -27
- package/src/transformers/CallExpressionTransformer.ts +179 -179
- package/src/transformers/FileTransformer.ts +47 -47
- package/src/transformers/IProject.ts +11 -11
- package/src/transformers/ITransformOptions.ts +62 -62
- package/src/transformers/ImportTransformer.ts +66 -66
- package/src/transformers/NodeTransformer.ts +13 -13
- package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +112 -104
- package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
- package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
- package/src/transformers/features/miscellaneous/MetadataTransformer.ts +53 -53
- package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
- package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
- package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
- package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
- package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
- package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
- package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
- package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
- package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
- package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
- package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
- package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
- package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
- package/src/transformers/features/validators/AssertTransformer.ts +11 -11
- package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
- package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
- package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
- package/src/transformers/features/validators/IsTransformer.ts +11 -11
- package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
- package/src/transformers/internal/GenericTransformer.ts +97 -97
- package/src/typings/Atomic.ts +17 -17
- package/src/typings/ClassProperties.ts +5 -5
- package/src/typings/Customizable.ts +5 -5
- package/src/typings/OmitNever.ts +3 -3
- package/src/typings/SpecialFields.ts +3 -3
- package/src/typings/Writable.ts +11 -11
- package/src/utils/ArrayUtil.ts +45 -45
- package/src/utils/Escaper.ts +46 -46
- package/src/utils/MapUtil.ts +12 -12
- package/src/utils/PatternUtil.ts +33 -33
- package/src/utils/RandomGenerator.ts +81 -81
- 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
|
+
}
|
package/src/IRandomGenerator.ts
CHANGED
|
@@ -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
|
+
}
|
package/src/IValidation.ts
CHANGED
|
@@ -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
|
+
}
|