typia 3.7.5 → 3.7.6

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 (221) hide show
  1. package/README.md +35 -260
  2. package/lib/factories/TypiaFileFactory.js +9 -4
  3. package/lib/factories/TypiaFileFactory.js.map +1 -1
  4. package/lib/module.js +1 -1
  5. package/lib/module.js.map +1 -1
  6. package/lib/programmers/internal/check_string_tags.js +2 -2
  7. package/lib/programmers/internal/check_string_tags.js.map +1 -1
  8. package/lib/programmers/internal/check_template.js +1 -1
  9. package/lib/programmers/internal/check_template.js.map +1 -1
  10. package/package.json +1 -1
  11. package/src/CustomValidatorMap.ts +126 -126
  12. package/src/IRandomGenerator.ts +33 -33
  13. package/src/IValidation.ts +21 -21
  14. package/src/Primitive.ts +104 -104
  15. package/src/TypeGuardError.ts +36 -36
  16. package/src/executable/TypiaGenerateWizard.ts +85 -85
  17. package/src/executable/setup/ArgumentParser.ts +45 -45
  18. package/src/executable/setup/CommandExecutor.ts +8 -8
  19. package/src/executable/setup/FileRetriever.ts +22 -22
  20. package/src/executable/setup/PluginConfigurator.ts +59 -59
  21. package/src/executable/typia.ts +54 -54
  22. package/src/factories/CommentFactory.ts +10 -10
  23. package/src/factories/ExpressionFactory.ts +77 -77
  24. package/src/factories/IdentifierFactory.ts +81 -81
  25. package/src/factories/LiteralFactory.ts +44 -44
  26. package/src/factories/MetadataCollection.ts +122 -122
  27. package/src/factories/MetadataFactory.ts +51 -51
  28. package/src/factories/MetadataTagFactory.ts +302 -302
  29. package/src/factories/StatementFactory.ts +60 -60
  30. package/src/factories/TemplateFactory.ts +56 -56
  31. package/src/factories/TypeFactory.ts +129 -129
  32. package/src/factories/TypiaFileFactory.ts +12 -3
  33. package/src/factories/ValueFactory.ts +12 -12
  34. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  35. package/src/factories/internal/metadata/emplace_metadata_object.ts +142 -142
  36. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  37. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  38. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  39. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  40. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  41. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  42. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  43. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  44. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  45. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  46. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  47. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  48. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  49. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  50. package/src/functional/$any.ts +3 -3
  51. package/src/functional/$dictionary.ts +20 -20
  52. package/src/functional/$every.ts +11 -11
  53. package/src/functional/$guard.ts +35 -35
  54. package/src/functional/$is_between.ts +7 -7
  55. package/src/functional/$is_custom.ts +14 -14
  56. package/src/functional/$is_date.ts +4 -4
  57. package/src/functional/$is_datetime.ts +3 -3
  58. package/src/functional/$is_email.ts +5 -5
  59. package/src/functional/$is_ipv4.ts +5 -5
  60. package/src/functional/$is_ipv6.ts +5 -5
  61. package/src/functional/$is_url.ts +5 -5
  62. package/src/functional/$is_uuid.ts +5 -5
  63. package/src/functional/$join.ts +50 -50
  64. package/src/functional/$number.ts +12 -12
  65. package/src/functional/$report.ts +15 -15
  66. package/src/functional/$rest.ts +3 -3
  67. package/src/functional/$string.ts +37 -37
  68. package/src/functional/$tail.ts +6 -6
  69. package/src/functional/Namespace.ts +127 -127
  70. package/src/index.ts +4 -4
  71. package/src/metadata/ICommentTag.ts +4 -4
  72. package/src/metadata/IJsDocTagInfo.ts +10 -10
  73. package/src/metadata/IMetadata.ts +25 -25
  74. package/src/metadata/IMetadataApplication.ts +7 -7
  75. package/src/metadata/IMetadataConstant.ts +16 -16
  76. package/src/metadata/IMetadataEntry.ts +6 -6
  77. package/src/metadata/IMetadataObject.ts +29 -29
  78. package/src/metadata/IMetadataProperty.ts +11 -11
  79. package/src/metadata/IMetadataTag.ts +105 -105
  80. package/src/metadata/Metadata.ts +534 -534
  81. package/src/metadata/MetadataConstant.ts +3 -3
  82. package/src/metadata/MetadataObject.ts +131 -131
  83. package/src/metadata/MetadataProperty.ts +64 -64
  84. package/src/module.ts +2043 -2043
  85. package/src/programmers/ApplicationProgrammer.ts +55 -55
  86. package/src/programmers/AssertCloneProgrammer.ts +70 -70
  87. package/src/programmers/AssertParseProgrammer.ts +65 -65
  88. package/src/programmers/AssertProgrammer.ts +284 -284
  89. package/src/programmers/AssertPruneProgrammer.ts +67 -67
  90. package/src/programmers/AssertStringifyProgrammer.ts +71 -71
  91. package/src/programmers/CheckerProgrammer.ts +922 -922
  92. package/src/programmers/CloneProgrammer.ts +388 -388
  93. package/src/programmers/FeatureProgrammer.ts +512 -512
  94. package/src/programmers/IsCloneProgrammer.ts +80 -80
  95. package/src/programmers/IsParseProgrammer.ts +74 -74
  96. package/src/programmers/IsProgrammer.ts +206 -206
  97. package/src/programmers/IsPruneProgrammer.ts +75 -75
  98. package/src/programmers/IsStringifyProgrammer.ts +81 -81
  99. package/src/programmers/LiteralsProgrammer.ts +65 -65
  100. package/src/programmers/PruneProgrammer.ts +343 -343
  101. package/src/programmers/RandomProgrammer.ts +413 -413
  102. package/src/programmers/StringifyProgrammer.ts +801 -801
  103. package/src/programmers/ValidateCloneProgrammer.ts +90 -90
  104. package/src/programmers/ValidateParseProgrammer.ts +69 -69
  105. package/src/programmers/ValidateProgrammer.ts +317 -317
  106. package/src/programmers/ValidatePruneProgrammer.ts +83 -83
  107. package/src/programmers/ValidateStringifyProgrammer.ts +89 -89
  108. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  109. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  110. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  111. package/src/programmers/helpers/ICheckEntry.ts +12 -12
  112. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  113. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  114. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  115. package/src/programmers/helpers/RandomJoiner.ts +161 -161
  116. package/src/programmers/helpers/RandomRanger.ts +216 -216
  117. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  118. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  119. package/src/programmers/helpers/UnionExplorer.ts +281 -281
  120. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  121. package/src/programmers/internal/application_array.ts +37 -37
  122. package/src/programmers/internal/application_boolean.ts +17 -17
  123. package/src/programmers/internal/application_constant.ts +29 -29
  124. package/src/programmers/internal/application_default.ts +17 -17
  125. package/src/programmers/internal/application_default_string.ts +32 -32
  126. package/src/programmers/internal/application_native.ts +32 -32
  127. package/src/programmers/internal/application_number.ts +73 -73
  128. package/src/programmers/internal/application_object.ts +153 -153
  129. package/src/programmers/internal/application_schema.ts +184 -184
  130. package/src/programmers/internal/application_string.ts +45 -45
  131. package/src/programmers/internal/application_templates.ts +27 -27
  132. package/src/programmers/internal/application_tuple.ts +29 -29
  133. package/src/programmers/internal/check_array.ts +30 -30
  134. package/src/programmers/internal/check_array_length.ts +35 -35
  135. package/src/programmers/internal/check_bigint.ts +82 -82
  136. package/src/programmers/internal/check_custom.ts +33 -33
  137. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  138. package/src/programmers/internal/check_everything.ts +28 -28
  139. package/src/programmers/internal/check_native.ts +21 -21
  140. package/src/programmers/internal/check_number.ts +177 -177
  141. package/src/programmers/internal/check_object.ts +55 -55
  142. package/src/programmers/internal/check_string.ts +25 -25
  143. package/src/programmers/internal/check_string_tags.ts +9 -15
  144. package/src/programmers/internal/check_template.ts +6 -9
  145. package/src/programmers/internal/check_union_array_like.ts +272 -272
  146. package/src/programmers/internal/check_union_tuple.ts +35 -35
  147. package/src/programmers/internal/decode_union_object.ts +73 -73
  148. package/src/programmers/internal/feature_object_entries.ts +63 -63
  149. package/src/programmers/internal/get_comment_tags.ts +23 -23
  150. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  151. package/src/programmers/internal/prune_object_properties.ts +60 -60
  152. package/src/programmers/internal/random_custom.ts +30 -30
  153. package/src/programmers/internal/stringify_dynamic_properties.ts +168 -168
  154. package/src/programmers/internal/stringify_native.ts +8 -8
  155. package/src/programmers/internal/stringify_regular_properties.ts +84 -84
  156. package/src/programmers/internal/template_to_pattern.ts +15 -15
  157. package/src/schemas/IJsonApplication.ts +9 -9
  158. package/src/schemas/IJsonComponents.ts +26 -26
  159. package/src/schemas/IJsonSchema.ts +121 -121
  160. package/src/transform.ts +21 -21
  161. package/src/transformers/CallExpressionTransformer.ts +174 -174
  162. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  163. package/src/transformers/FileTransformer.ts +49 -49
  164. package/src/transformers/IProject.ts +11 -11
  165. package/src/transformers/ITransformOptions.ts +62 -62
  166. package/src/transformers/ImportTransformer.ts +66 -66
  167. package/src/transformers/NodeTransformer.ts +19 -19
  168. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +119 -119
  169. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  170. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  171. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  172. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  173. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  174. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  175. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  176. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  177. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  178. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +41 -41
  179. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  180. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  181. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  182. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  183. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +30 -30
  184. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +54 -54
  185. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  186. package/src/transformers/features/miscellaneous/RandomTransformer.ts +46 -46
  187. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  188. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  189. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  190. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  191. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  192. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  193. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  194. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  195. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  196. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +9 -9
  197. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  198. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  199. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +11 -11
  200. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  201. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  202. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  203. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  204. package/src/transformers/features/validators/CreateAssertTransformer.ts +12 -12
  205. package/src/transformers/features/validators/CreateIsTransformer.ts +10 -10
  206. package/src/transformers/features/validators/CreateValidateTransformer.ts +12 -12
  207. package/src/transformers/features/validators/IsTransformer.ts +10 -10
  208. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  209. package/src/transformers/internal/GenericTransformer.ts +99 -99
  210. package/src/typings/Atomic.ts +17 -17
  211. package/src/typings/ClassProperties.ts +5 -5
  212. package/src/typings/Customizable.ts +5 -5
  213. package/src/typings/OmitNever.ts +3 -3
  214. package/src/typings/SpecialFields.ts +3 -3
  215. package/src/typings/Writable.ts +11 -11
  216. package/src/utils/ArrayUtil.ts +49 -49
  217. package/src/utils/Escaper.ts +50 -50
  218. package/src/utils/MapUtil.ts +14 -14
  219. package/src/utils/PatternUtil.ts +30 -30
  220. package/src/utils/RandomGenerator.ts +96 -96
  221. package/src/utils/Singleton.ts +17 -17
@@ -1,38 +1,38 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../metadata/Metadata";
4
-
5
- import { MetadataCollection } from "../../MetadataCollection";
6
- import { MetadataFactory } from "../../MetadataFactory";
7
- import { MetadataHelper } from "./MetadataHelper";
8
- import { explore_metadata } from "./explore_metadata";
9
-
10
- export const iterate_metadata_template =
11
- (checker: ts.TypeChecker) =>
12
- (options: MetadataFactory.IOptions) =>
13
- (collection: MetadataCollection) =>
14
- (meta: Metadata, type: ts.Type): boolean => {
15
- const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
16
- if (!filter(ts.TypeFlags.TemplateLiteral)) return false;
17
-
18
- const template: ts.TemplateLiteralType = type as ts.TemplateLiteralType;
19
- const row: Metadata[] = [];
20
-
21
- template.texts.forEach((text, i) => {
22
- // TEXT LITERAL TYPE
23
- if (text !== "") row.push(MetadataHelper.literal_to_metadata(text));
24
-
25
- // BINDED TEMPLATE TYPE
26
- const binded: ts.Type | undefined = template.types[i];
27
- if (binded)
28
- row.push(
29
- explore_metadata(checker)(options)(collection)(
30
- binded,
31
- false,
32
- ),
33
- );
34
- });
35
- meta.templates.push(row);
36
-
37
- return true;
38
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../metadata/Metadata";
4
+
5
+ import { MetadataCollection } from "../../MetadataCollection";
6
+ import { MetadataFactory } from "../../MetadataFactory";
7
+ import { MetadataHelper } from "./MetadataHelper";
8
+ import { explore_metadata } from "./explore_metadata";
9
+
10
+ export const iterate_metadata_template =
11
+ (checker: ts.TypeChecker) =>
12
+ (options: MetadataFactory.IOptions) =>
13
+ (collection: MetadataCollection) =>
14
+ (meta: Metadata, type: ts.Type): boolean => {
15
+ const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
16
+ if (!filter(ts.TypeFlags.TemplateLiteral)) return false;
17
+
18
+ const template: ts.TemplateLiteralType = type as ts.TemplateLiteralType;
19
+ const row: Metadata[] = [];
20
+
21
+ template.texts.forEach((text, i) => {
22
+ // TEXT LITERAL TYPE
23
+ if (text !== "") row.push(MetadataHelper.literal_to_metadata(text));
24
+
25
+ // BINDED TEMPLATE TYPE
26
+ const binded: ts.Type | undefined = template.types[i];
27
+ if (binded)
28
+ row.push(
29
+ explore_metadata(checker)(options)(collection)(
30
+ binded,
31
+ false,
32
+ ),
33
+ );
34
+ });
35
+ meta.templates.push(row);
36
+
37
+ return true;
38
+ };
@@ -1,45 +1,45 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../metadata/Metadata";
4
-
5
- import { Writable } from "../../../typings/Writable";
6
-
7
- import { ArrayUtil } from "../../../utils/ArrayUtil";
8
-
9
- import { MetadataCollection } from "../../MetadataCollection";
10
- import { MetadataFactory } from "../../MetadataFactory";
11
- import { explore_metadata } from "./explore_metadata";
12
-
13
- export const iterate_metadata_tuple =
14
- (checker: ts.TypeChecker) =>
15
- (options: MetadataFactory.IOptions) =>
16
- (collection: MetadataCollection) =>
17
- (meta: Metadata, type: ts.TupleType): boolean => {
18
- if (!(checker as any).isTupleType(type)) return false;
19
-
20
- const elementFlags: readonly ts.ElementFlags[] =
21
- type.elementFlags ??
22
- (type.target as ts.TupleType)?.elementFlags ??
23
- [];
24
-
25
- const children: Metadata[] = checker
26
- .getTypeArguments(type as ts.TypeReference)
27
- .map((elem, i) => {
28
- const child: Metadata = explore_metadata(checker)(options)(
29
- collection,
30
- )(elem, false);
31
-
32
- const flag: ts.ElementFlags | undefined = elementFlags[i];
33
- if (flag !== ts.ElementFlags.Rest) return child;
34
-
35
- const wrapper: Metadata = Metadata.initialize();
36
- Writable(wrapper).rest = child;
37
- return wrapper;
38
- });
39
- ArrayUtil.set(meta.tuples, children, join_tuple_names);
40
- return true;
41
- };
42
-
43
- function join_tuple_names(metas: Metadata[]): string {
44
- return `[${metas.map((m) => m.getName).join(", ")}]`;
45
- }
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../metadata/Metadata";
4
+
5
+ import { Writable } from "../../../typings/Writable";
6
+
7
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
8
+
9
+ import { MetadataCollection } from "../../MetadataCollection";
10
+ import { MetadataFactory } from "../../MetadataFactory";
11
+ import { explore_metadata } from "./explore_metadata";
12
+
13
+ export const iterate_metadata_tuple =
14
+ (checker: ts.TypeChecker) =>
15
+ (options: MetadataFactory.IOptions) =>
16
+ (collection: MetadataCollection) =>
17
+ (meta: Metadata, type: ts.TupleType): boolean => {
18
+ if (!(checker as any).isTupleType(type)) return false;
19
+
20
+ const elementFlags: readonly ts.ElementFlags[] =
21
+ type.elementFlags ??
22
+ (type.target as ts.TupleType)?.elementFlags ??
23
+ [];
24
+
25
+ const children: Metadata[] = checker
26
+ .getTypeArguments(type as ts.TypeReference)
27
+ .map((elem, i) => {
28
+ const child: Metadata = explore_metadata(checker)(options)(
29
+ collection,
30
+ )(elem, false);
31
+
32
+ const flag: ts.ElementFlags | undefined = elementFlags[i];
33
+ if (flag !== ts.ElementFlags.Rest) return child;
34
+
35
+ const wrapper: Metadata = Metadata.initialize();
36
+ Writable(wrapper).rest = child;
37
+ return wrapper;
38
+ });
39
+ ArrayUtil.set(meta.tuples, children, join_tuple_names);
40
+ return true;
41
+ };
42
+
43
+ function join_tuple_names(metas: Metadata[]): string {
44
+ return `[${metas.map((m) => m.getName).join(", ")}]`;
45
+ }
@@ -1,59 +1,59 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../metadata/Metadata";
4
-
5
- import { Writable } from "../../../typings/Writable";
6
-
7
- import { MetadataCollection } from "../../MetadataCollection";
8
- import { MetadataFactory } from "../../MetadataFactory";
9
- import { TypeFactory } from "../../TypeFactory";
10
- import { iterate_metadata } from "./iterate_metadata";
11
-
12
- export const iterate_metadata_union =
13
- (checker: ts.TypeChecker) =>
14
- (options: MetadataFactory.IOptions) =>
15
- (collection: MetadataCollection) =>
16
- (meta: Metadata, type: ts.Type, parentResolved: boolean): boolean => {
17
- if (!type.isUnion()) return false;
18
- else if (options.resolve === false || parentResolved === true) {
19
- type.types.forEach((t) =>
20
- iterate_metadata(checker)(options)(collection)(meta, t, false),
21
- );
22
- return true;
23
- }
24
-
25
- const filter = (flag: ts.TypeFlags, t: ts.Type) =>
26
- (t.getFlags() & flag) !== 0;
27
- const normals: ts.Type[] = [];
28
- const toJsons: ts.Type[] = [];
29
-
30
- for (const individual of type.types) {
31
- if (filter(ts.TypeFlags.Object, individual)) {
32
- const resolved: ts.Type | null = TypeFactory.resolve(
33
- checker,
34
- individual,
35
- );
36
- if (resolved !== null) toJsons.push(resolved);
37
- else normals.push(individual);
38
- } else normals.push(individual);
39
- }
40
- if (toJsons.length !== 0) {
41
- Writable(meta).resolved = (() => {
42
- const union: Metadata = Metadata.initialize();
43
- toJsons.forEach((t) =>
44
- iterate_metadata(checker)(options)(collection)(
45
- meta,
46
- t,
47
- true,
48
- ),
49
- );
50
- if (union.objects.length > 1)
51
- union.union_index = collection.getUnionIndex(union);
52
- return union;
53
- })();
54
- }
55
- normals.forEach((t) =>
56
- iterate_metadata(checker)(options)(collection)(meta, t, false),
57
- );
58
- return true;
59
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../metadata/Metadata";
4
+
5
+ import { Writable } from "../../../typings/Writable";
6
+
7
+ import { MetadataCollection } from "../../MetadataCollection";
8
+ import { MetadataFactory } from "../../MetadataFactory";
9
+ import { TypeFactory } from "../../TypeFactory";
10
+ import { iterate_metadata } from "./iterate_metadata";
11
+
12
+ export const iterate_metadata_union =
13
+ (checker: ts.TypeChecker) =>
14
+ (options: MetadataFactory.IOptions) =>
15
+ (collection: MetadataCollection) =>
16
+ (meta: Metadata, type: ts.Type, parentResolved: boolean): boolean => {
17
+ if (!type.isUnion()) return false;
18
+ else if (options.resolve === false || parentResolved === true) {
19
+ type.types.forEach((t) =>
20
+ iterate_metadata(checker)(options)(collection)(meta, t, false),
21
+ );
22
+ return true;
23
+ }
24
+
25
+ const filter = (flag: ts.TypeFlags, t: ts.Type) =>
26
+ (t.getFlags() & flag) !== 0;
27
+ const normals: ts.Type[] = [];
28
+ const toJsons: ts.Type[] = [];
29
+
30
+ for (const individual of type.types) {
31
+ if (filter(ts.TypeFlags.Object, individual)) {
32
+ const resolved: ts.Type | null = TypeFactory.resolve(
33
+ checker,
34
+ individual,
35
+ );
36
+ if (resolved !== null) toJsons.push(resolved);
37
+ else normals.push(individual);
38
+ } else normals.push(individual);
39
+ }
40
+ if (toJsons.length !== 0) {
41
+ Writable(meta).resolved = (() => {
42
+ const union: Metadata = Metadata.initialize();
43
+ toJsons.forEach((t) =>
44
+ iterate_metadata(checker)(options)(collection)(
45
+ meta,
46
+ t,
47
+ true,
48
+ ),
49
+ );
50
+ if (union.objects.length > 1)
51
+ union.union_index = collection.getUnionIndex(union);
52
+ return union;
53
+ })();
54
+ }
55
+ normals.forEach((t) =>
56
+ iterate_metadata(checker)(options)(collection)(meta, t, false),
57
+ );
58
+ return true;
59
+ };
@@ -1,3 +1,3 @@
1
- export function $any(val: any): any {
2
- return val !== undefined ? JSON.parse(JSON.stringify(val)) : undefined;
3
- }
1
+ export function $any(val: any): any {
2
+ return val !== undefined ? JSON.parse(JSON.stringify(val)) : undefined;
3
+ }
@@ -1,20 +1,20 @@
1
- import { Customizable } from "../typings/Customizable";
2
-
3
- export const $dictionary = (() => {
4
- const glob: {
5
- __typia_custom_validator: Map<
6
- `${string}`,
7
- Map<
8
- keyof Customizable,
9
- (tagText: string) => (value: any) => boolean
10
- >
11
- >;
12
- } =
13
- typeof global === "object" &&
14
- typeof global.process === "object" &&
15
- typeof global.process.versions === "object" &&
16
- typeof global.process.versions.node !== "undefined"
17
- ? (global as any)
18
- : (window as any);
19
- return (glob.__typia_custom_validator ??= new Map());
20
- })();
1
+ import { Customizable } from "../typings/Customizable";
2
+
3
+ export const $dictionary = (() => {
4
+ const glob: {
5
+ __typia_custom_validator: Map<
6
+ `${string}`,
7
+ Map<
8
+ keyof Customizable,
9
+ (tagText: string) => (value: any) => boolean
10
+ >
11
+ >;
12
+ } =
13
+ typeof global === "object" &&
14
+ typeof global.process === "object" &&
15
+ typeof global.process.versions === "object" &&
16
+ typeof global.process.versions.node !== "undefined"
17
+ ? (global as any)
18
+ : (window as any);
19
+ return (glob.__typia_custom_validator ??= new Map());
20
+ })();
@@ -1,11 +1,11 @@
1
- import { TypeGuardError } from "../TypeGuardError";
2
-
3
- export const $every = <T>(
4
- array: T[],
5
- pred: (value: T, i: number) => null | Omit<TypeGuardError.IProps, "method">,
6
- ): null | Omit<TypeGuardError.IProps, "method"> => {
7
- let error: null | Omit<TypeGuardError.IProps, "method"> = null;
8
- for (let i: number = 0; i < array.length; ++i)
9
- if (null !== (error = pred(array[i]!, i))) return error;
10
- return null;
11
- };
1
+ import { TypeGuardError } from "../TypeGuardError";
2
+
3
+ export const $every = <T>(
4
+ array: T[],
5
+ pred: (value: T, i: number) => null | Omit<TypeGuardError.IProps, "method">,
6
+ ): null | Omit<TypeGuardError.IProps, "method"> => {
7
+ let error: null | Omit<TypeGuardError.IProps, "method"> = null;
8
+ for (let i: number = 0; i < array.length; ++i)
9
+ if (null !== (error = pred(array[i]!, i))) return error;
10
+ return null;
11
+ };
@@ -1,35 +1,35 @@
1
- import { TypeGuardError } from "../TypeGuardError";
2
-
3
- /* -----------------------------------------------------------
4
- ASSERT V2 -> USE (NULL OR ERROR) CONDITION
5
- ----------------------------------------------------------- */
6
- // /**
7
- // * @internal
8
- // */
9
- // export const $guardV2 =
10
- // (method: string) => (props: Omit<TypeGuardError.IProps, "method">) =>
11
- // new TypeGuardError({
12
- // method,
13
- // path: props.path,
14
- // expected: props.expected,
15
- // value: props.value,
16
- // });
17
-
18
- /* -----------------------------------------------------------
19
- ASSERT V3 -> (CONDITION OR THROW(exceptable): FALSE)
20
- ----------------------------------------------------------- */
21
- /**
22
- * @internal
23
- */
24
- export const $guard =
25
- (method: string) =>
26
- (exceptionable: boolean, props: Omit<TypeGuardError.IProps, "method">) => {
27
- if (exceptionable === true)
28
- throw new TypeGuardError({
29
- method,
30
- path: props.path,
31
- expected: props.expected,
32
- value: props.value,
33
- });
34
- return false;
35
- };
1
+ import { TypeGuardError } from "../TypeGuardError";
2
+
3
+ /* -----------------------------------------------------------
4
+ ASSERT V2 -> USE (NULL OR ERROR) CONDITION
5
+ ----------------------------------------------------------- */
6
+ // /**
7
+ // * @internal
8
+ // */
9
+ // export const $guardV2 =
10
+ // (method: string) => (props: Omit<TypeGuardError.IProps, "method">) =>
11
+ // new TypeGuardError({
12
+ // method,
13
+ // path: props.path,
14
+ // expected: props.expected,
15
+ // value: props.value,
16
+ // });
17
+
18
+ /* -----------------------------------------------------------
19
+ ASSERT V3 -> (CONDITION OR THROW(exceptable): FALSE)
20
+ ----------------------------------------------------------- */
21
+ /**
22
+ * @internal
23
+ */
24
+ export const $guard =
25
+ (method: string) =>
26
+ (exceptionable: boolean, props: Omit<TypeGuardError.IProps, "method">) => {
27
+ if (exceptionable === true)
28
+ throw new TypeGuardError({
29
+ method,
30
+ path: props.path,
31
+ expected: props.expected,
32
+ value: props.value,
33
+ });
34
+ return false;
35
+ };
@@ -1,7 +1,7 @@
1
- export function $is_between(
2
- value: number,
3
- minimum: number,
4
- maximum: number,
5
- ): boolean {
6
- return minimum <= value && value <= maximum;
7
- }
1
+ export function $is_between(
2
+ value: number,
3
+ minimum: number,
4
+ maximum: number,
5
+ ): boolean {
6
+ return minimum <= value && value <= maximum;
7
+ }
@@ -1,14 +1,14 @@
1
- import { Customizable } from "../typings/Customizable";
2
-
3
- import { $dictionary } from "./$dictionary";
4
-
5
- export function $is_custom<Type extends keyof Customizable>(
6
- name: string,
7
- type: Type,
8
- text: string,
9
- value: Customizable[Type],
10
- ): boolean {
11
- const validator = $dictionary.get(name)?.get(type);
12
- if (validator === undefined) return true;
13
- return validator(text)(value);
14
- }
1
+ import { Customizable } from "../typings/Customizable";
2
+
3
+ import { $dictionary } from "./$dictionary";
4
+
5
+ export function $is_custom<Type extends keyof Customizable>(
6
+ name: string,
7
+ type: Type,
8
+ text: string,
9
+ value: Customizable[Type],
10
+ ): boolean {
11
+ const validator = $dictionary.get(name)?.get(type);
12
+ if (validator === undefined) return true;
13
+ return validator(text)(value);
14
+ }
@@ -1,4 +1,4 @@
1
- export function $is_date(value: string): boolean {
2
- return REGEX.test(value);
3
- }
4
- const REGEX = /^(\d{4})-(\d{2})-(\d{2})$/;
1
+ export function $is_date(value: string): boolean {
2
+ return REGEX.test(value);
3
+ }
4
+ const REGEX = /^(\d{4})-(\d{2})-(\d{2})$/;
@@ -1,3 +1,3 @@
1
- export function $is_datetime(value: string): boolean {
2
- return !isNaN(new Date(value).getTime());
3
- }
1
+ export function $is_datetime(value: string): boolean {
2
+ return !isNaN(new Date(value).getTime());
3
+ }
@@ -1,5 +1,5 @@
1
- export function $is_email(str: string): boolean {
2
- return REGEX.test(str);
3
- }
4
- const REGEX =
5
- /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
1
+ export function $is_email(str: string): boolean {
2
+ return REGEX.test(str);
3
+ }
4
+ const REGEX =
5
+ /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
@@ -1,5 +1,5 @@
1
- export function $is_ipv4(str: string): boolean {
2
- return REGEX.test(str);
3
- }
4
- const REGEX =
5
- /^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
1
+ export function $is_ipv4(str: string): boolean {
2
+ return REGEX.test(str);
3
+ }
4
+ const REGEX =
5
+ /^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
@@ -1,5 +1,5 @@
1
- export function $is_ipv6(str: string): boolean {
2
- return REGEX.test(str);
3
- }
4
- const REGEX =
5
- /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;
1
+ export function $is_ipv6(str: string): boolean {
2
+ return REGEX.test(str);
3
+ }
4
+ const REGEX =
5
+ /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;
@@ -1,5 +1,5 @@
1
- export function $is_url(str: string): boolean {
2
- return REGEX.test(str);
3
- }
4
- const REGEX =
5
- /^[a-zA-Z0-9]+:\/\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/;
1
+ export function $is_url(str: string): boolean {
2
+ return REGEX.test(str);
3
+ }
4
+ const REGEX =
5
+ /^[a-zA-Z0-9]+:\/\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/;
@@ -1,5 +1,5 @@
1
- export function $is_uuid(str: string): boolean {
2
- return REGEX.test(str);
3
- }
4
- const REGEX =
5
- /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
1
+ export function $is_uuid(str: string): boolean {
2
+ return REGEX.test(str);
3
+ }
4
+ const REGEX =
5
+ /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;