typia 3.4.6 → 3.4.7

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 (119) hide show
  1. package/lib/executable/typia.js +0 -0
  2. package/lib/factories/internal/iterate_metadata.js +1 -1
  3. package/lib/factories/internal/iterate_metadata.js.map +1 -1
  4. package/lib/factories/internal/iterate_metadata_tuple.d.ts +1 -1
  5. package/lib/factories/internal/iterate_metadata_tuple.js +5 -13
  6. package/lib/factories/internal/iterate_metadata_tuple.js.map +1 -1
  7. package/package.json +1 -1
  8. package/src/IValidation.ts +21 -21
  9. package/src/Primitive.ts +82 -82
  10. package/src/TypeGuardError.ts +36 -36
  11. package/src/factories/CommentFactory.ts +10 -10
  12. package/src/factories/ExpressionFactory.ts +52 -52
  13. package/src/factories/IdentifierFactory.ts +72 -72
  14. package/src/factories/LiteralFactory.ts +44 -44
  15. package/src/factories/MetadataCollection.ts +122 -122
  16. package/src/factories/MetadataFactory.ts +46 -46
  17. package/src/factories/StatementFactory.ts +60 -60
  18. package/src/factories/TemplateFactory.ts +56 -56
  19. package/src/factories/TypeFactory.ts +101 -101
  20. package/src/factories/ValueFactory.ts +12 -12
  21. package/src/factories/internal/MetadataHelper.ts +12 -12
  22. package/src/factories/internal/emplace_metadata_object.ts +140 -140
  23. package/src/factories/internal/explore_metadata.ts +91 -91
  24. package/src/factories/internal/iterate_metadata.ts +1 -2
  25. package/src/factories/internal/iterate_metadata_array.ts +29 -29
  26. package/src/factories/internal/iterate_metadata_atomic.ts +59 -59
  27. package/src/factories/internal/iterate_metadata_coalesce.ts +33 -33
  28. package/src/factories/internal/iterate_metadata_constant.ts +58 -58
  29. package/src/factories/internal/iterate_metadata_map.ts +41 -41
  30. package/src/factories/internal/iterate_metadata_object.ts +45 -45
  31. package/src/factories/internal/iterate_metadata_resolve.ts +27 -27
  32. package/src/factories/internal/iterate_metadata_set.ts +33 -33
  33. package/src/factories/internal/iterate_metadata_template.ts +38 -38
  34. package/src/factories/internal/iterate_metadata_tuple.ts +45 -51
  35. package/src/factories/internal/iterate_metadata_union.ts +59 -59
  36. package/src/functional/$every.ts +11 -11
  37. package/src/functional/$guard.ts +35 -35
  38. package/src/functional/$is_email.ts +5 -5
  39. package/src/functional/$is_ipv4.ts +5 -5
  40. package/src/functional/$is_ipv6.ts +5 -5
  41. package/src/functional/$is_url.ts +5 -5
  42. package/src/functional/$is_uuid.ts +5 -5
  43. package/src/functional/$join.ts +50 -50
  44. package/src/functional/$report.ts +15 -15
  45. package/src/functional/$rest.ts +3 -3
  46. package/src/functional/$string.ts +37 -37
  47. package/src/functional/$tail.ts +6 -6
  48. package/src/metadata/IJsDocTagInfo.ts +10 -10
  49. package/src/metadata/IMetadata.ts +25 -25
  50. package/src/metadata/IMetadataApplication.ts +7 -7
  51. package/src/metadata/IMetadataConstant.ts +16 -16
  52. package/src/metadata/IMetadataEntry.ts +6 -6
  53. package/src/metadata/IMetadataObject.ts +29 -29
  54. package/src/metadata/IMetadataProperty.ts +11 -11
  55. package/src/metadata/IMetadataTag.ts +122 -122
  56. package/src/metadata/Metadata.ts +477 -477
  57. package/src/metadata/MetadataConstant.ts +3 -3
  58. package/src/metadata/MetadataObject.ts +131 -131
  59. package/src/metadata/MetadataProperty.ts +64 -64
  60. package/src/programmers/AssertParseProgrammer.ts +45 -45
  61. package/src/programmers/AssertProgrammer.ts +444 -444
  62. package/src/programmers/AssertStringifyProgrammer.ts +45 -45
  63. package/src/programmers/CheckerProgrammer.ts +798 -798
  64. package/src/programmers/FeatureProgrammer.ts +327 -327
  65. package/src/programmers/IsParseProgrammer.ts +51 -51
  66. package/src/programmers/IsProgrammer.ts +169 -169
  67. package/src/programmers/IsStringifyProgrammer.ts +49 -49
  68. package/src/programmers/ValidateParseProgrammer.ts +49 -49
  69. package/src/programmers/ValidateProgrammer.ts +236 -236
  70. package/src/programmers/ValidateStringifyProgrammer.ts +60 -60
  71. package/src/programmers/helpers/AtomicPredicator.ts +15 -15
  72. package/src/programmers/helpers/FunctionImporeter.ts +31 -31
  73. package/src/programmers/helpers/IExpressionEntry.ts +10 -10
  74. package/src/programmers/helpers/OptionPredicator.ts +18 -18
  75. package/src/programmers/helpers/StringifyJoinder.ts +111 -111
  76. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  77. package/src/programmers/helpers/UnionExplorer.ts +437 -437
  78. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  79. package/src/programmers/internal/application_boolean.ts +17 -17
  80. package/src/programmers/internal/application_constant.ts +29 -29
  81. package/src/programmers/internal/application_default_string.ts +32 -32
  82. package/src/programmers/internal/application_native.ts +29 -29
  83. package/src/programmers/internal/application_schema.ts +221 -221
  84. package/src/programmers/internal/application_templates.ts +27 -27
  85. package/src/programmers/internal/application_tuple.ts +25 -25
  86. package/src/programmers/internal/check_array.ts +44 -44
  87. package/src/programmers/internal/check_dynamic_properties.ts +146 -146
  88. package/src/programmers/internal/check_everything.ts +25 -25
  89. package/src/programmers/internal/check_length.ts +46 -46
  90. package/src/programmers/internal/check_native.ts +9 -9
  91. package/src/programmers/internal/check_number.ts +181 -181
  92. package/src/programmers/internal/check_object.ts +42 -42
  93. package/src/programmers/internal/check_string.ts +24 -24
  94. package/src/programmers/internal/check_string_tags.ts +63 -63
  95. package/src/programmers/internal/check_template.ts +50 -50
  96. package/src/programmers/internal/decode_union_object.ts +73 -73
  97. package/src/programmers/internal/feature_object_entries.ts +49 -49
  98. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  99. package/src/programmers/internal/stringify_dynamic_properties.ts +164 -164
  100. package/src/programmers/internal/stringify_native.ts +8 -8
  101. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  102. package/src/programmers/internal/template_to_pattern.ts +15 -15
  103. package/src/schemas/IJsonApplication.ts +9 -9
  104. package/src/transform.ts +20 -20
  105. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  106. package/src/transformers/FileTransformer.ts +49 -49
  107. package/src/transformers/IProject.ts +11 -11
  108. package/src/transformers/ITransformOptions.ts +4 -4
  109. package/src/transformers/NodeTransformer.ts +19 -19
  110. package/src/typings/Atomic.ts +17 -17
  111. package/src/typings/ClassProperties.ts +5 -5
  112. package/src/typings/OmitNever.ts +3 -3
  113. package/src/typings/SpecialFields.ts +3 -3
  114. package/src/typings/Writable.ts +11 -11
  115. package/src/utils/ArrayUtil.ts +49 -49
  116. package/src/utils/Escaper.ts +50 -50
  117. package/src/utils/MapUtil.ts +14 -14
  118. package/src/utils/PatternUtil.ts +30 -30
  119. package/src/utils/Singleton.ts +17 -17
@@ -1,91 +1,91 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
- import { MetadataObject } from "../../metadata/MetadataObject";
5
-
6
- import { ArrayUtil } from "../../utils/ArrayUtil";
7
-
8
- import { MetadataCollection } from "../MetadataCollection";
9
- import { MetadataFactory } from "../MetadataFactory";
10
- import { iterate_metadata } from "./iterate_metadata";
11
-
12
- export const explore_metadata =
13
- (checker: ts.TypeChecker) =>
14
- (options: MetadataFactory.IOptions) =>
15
- (collection: MetadataCollection) =>
16
- (type: ts.Type | null, parentResolved: boolean): Metadata => {
17
- // CONSTRUCT METADATA
18
- const meta: Metadata = Metadata.initialize(parentResolved);
19
- if (type !== null)
20
- iterate_metadata(checker)(options)(collection)(
21
- meta,
22
- type,
23
- parentResolved,
24
- );
25
-
26
- // SORT OBJECTS
27
- if (meta.objects.length > 1) {
28
- meta.objects.sort((x, y) =>
29
- MetadataObject.covers(x, y)
30
- ? -1
31
- : MetadataObject.covers(y, x)
32
- ? 1
33
- : 0,
34
- );
35
- if (parentResolved === false)
36
- meta.union_index = collection.getUnionIndex(meta);
37
- }
38
-
39
- // SORT ARRAYS AND TUPLES
40
- if (meta.arrays.length > 1)
41
- meta.arrays.sort((x, y) =>
42
- Metadata.covers(x, y) ? -1 : Metadata.covers(y, x) ? 1 : 0,
43
- );
44
- if (meta.tuples.length > 1)
45
- meta.tuples.sort((x, y) => {
46
- const xt = Metadata.initialize();
47
- const yt = Metadata.initialize();
48
-
49
- xt.tuples.push(x);
50
- yt.tuples.push(y);
51
-
52
- return Metadata.covers(xt, yt)
53
- ? -1
54
- : Metadata.covers(yt, xt)
55
- ? 1
56
- : 0;
57
- });
58
-
59
- // EMEND ATOMICS
60
- for (const type of meta.atomics) {
61
- const index: number = meta.constants.findIndex(
62
- (c) => c.type === type,
63
- );
64
- if (index !== -1) meta.constants.splice(index, 1);
65
- }
66
-
67
- // EMEND BOOLEAN
68
- {
69
- const index: number = meta.constants.findIndex(
70
- (c) => c.type === "boolean",
71
- );
72
- if (index !== -1 && meta.constants[index]!.values.length === 2) {
73
- meta.constants.splice(index, 1);
74
- ArrayUtil.take(
75
- meta.atomics,
76
- (type) => type === "boolean",
77
- () => "boolean",
78
- );
79
- }
80
- }
81
-
82
- // EMEND TEMPLATE
83
- if (
84
- meta.templates.length &&
85
- meta.atomics.find((type) => type === "string") !== undefined
86
- )
87
- meta.templates.splice(0, meta.templates.length);
88
-
89
- // RETURNS
90
- return meta;
91
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../metadata/Metadata";
4
+ import { MetadataObject } from "../../metadata/MetadataObject";
5
+
6
+ import { ArrayUtil } from "../../utils/ArrayUtil";
7
+
8
+ import { MetadataCollection } from "../MetadataCollection";
9
+ import { MetadataFactory } from "../MetadataFactory";
10
+ import { iterate_metadata } from "./iterate_metadata";
11
+
12
+ export const explore_metadata =
13
+ (checker: ts.TypeChecker) =>
14
+ (options: MetadataFactory.IOptions) =>
15
+ (collection: MetadataCollection) =>
16
+ (type: ts.Type | null, parentResolved: boolean): Metadata => {
17
+ // CONSTRUCT METADATA
18
+ const meta: Metadata = Metadata.initialize(parentResolved);
19
+ if (type !== null)
20
+ iterate_metadata(checker)(options)(collection)(
21
+ meta,
22
+ type,
23
+ parentResolved,
24
+ );
25
+
26
+ // SORT OBJECTS
27
+ if (meta.objects.length > 1) {
28
+ meta.objects.sort((x, y) =>
29
+ MetadataObject.covers(x, y)
30
+ ? -1
31
+ : MetadataObject.covers(y, x)
32
+ ? 1
33
+ : 0,
34
+ );
35
+ if (parentResolved === false)
36
+ meta.union_index = collection.getUnionIndex(meta);
37
+ }
38
+
39
+ // SORT ARRAYS AND TUPLES
40
+ if (meta.arrays.length > 1)
41
+ meta.arrays.sort((x, y) =>
42
+ Metadata.covers(x, y) ? -1 : Metadata.covers(y, x) ? 1 : 0,
43
+ );
44
+ if (meta.tuples.length > 1)
45
+ meta.tuples.sort((x, y) => {
46
+ const xt = Metadata.initialize();
47
+ const yt = Metadata.initialize();
48
+
49
+ xt.tuples.push(x);
50
+ yt.tuples.push(y);
51
+
52
+ return Metadata.covers(xt, yt)
53
+ ? -1
54
+ : Metadata.covers(yt, xt)
55
+ ? 1
56
+ : 0;
57
+ });
58
+
59
+ // EMEND ATOMICS
60
+ for (const type of meta.atomics) {
61
+ const index: number = meta.constants.findIndex(
62
+ (c) => c.type === type,
63
+ );
64
+ if (index !== -1) meta.constants.splice(index, 1);
65
+ }
66
+
67
+ // EMEND BOOLEAN
68
+ {
69
+ const index: number = meta.constants.findIndex(
70
+ (c) => c.type === "boolean",
71
+ );
72
+ if (index !== -1 && meta.constants[index]!.values.length === 2) {
73
+ meta.constants.splice(index, 1);
74
+ ArrayUtil.take(
75
+ meta.atomics,
76
+ (type) => type === "boolean",
77
+ () => "boolean",
78
+ );
79
+ }
80
+ }
81
+
82
+ // EMEND TEMPLATE
83
+ if (
84
+ meta.templates.length &&
85
+ meta.atomics.find((type) => type === "string") !== undefined
86
+ )
87
+ meta.templates.splice(0, meta.templates.length);
88
+
89
+ // RETURNS
90
+ return meta;
91
+ };
@@ -66,8 +66,7 @@ export const iterate_metadata =
66
66
  iterate_metadata_atomic(meta, type) ||
67
67
  iterate_metadata_tuple(checker)(options)(collection)(
68
68
  meta,
69
- type,
70
- node,
69
+ type as ts.TupleType,
71
70
  ) ||
72
71
  iterate_metadata_array(checker)(options)(collection)(meta, type) ||
73
72
  iterate_metadata_native(checker)(meta, type) ||
@@ -1,29 +1,29 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
-
5
- import { ArrayUtil } from "../../utils/ArrayUtil";
6
-
7
- import { MetadataCollection } from "../MetadataCollection";
8
- import { MetadataFactory } from "../MetadataFactory";
9
- import { explore_metadata } from "./explore_metadata";
10
-
11
- export const iterate_metadata_array =
12
- (checker: ts.TypeChecker) =>
13
- (options: MetadataFactory.IOptions) =>
14
- (collection: MetadataCollection) =>
15
- (meta: Metadata, type: ts.Type): boolean => {
16
- if (
17
- !(checker as any).isArrayType(type) &&
18
- !(checker as any).isArrayLikeType(type)
19
- )
20
- return false;
21
-
22
- const value: ts.Type | null = type.getNumberIndexType() || null;
23
- ArrayUtil.set(
24
- meta.arrays,
25
- explore_metadata(checker)(options)(collection)(value, false),
26
- (elem) => elem.getName(),
27
- );
28
- return true;
29
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../metadata/Metadata";
4
+
5
+ import { ArrayUtil } from "../../utils/ArrayUtil";
6
+
7
+ import { MetadataCollection } from "../MetadataCollection";
8
+ import { MetadataFactory } from "../MetadataFactory";
9
+ import { explore_metadata } from "./explore_metadata";
10
+
11
+ export const iterate_metadata_array =
12
+ (checker: ts.TypeChecker) =>
13
+ (options: MetadataFactory.IOptions) =>
14
+ (collection: MetadataCollection) =>
15
+ (meta: Metadata, type: ts.Type): boolean => {
16
+ if (
17
+ !(checker as any).isArrayType(type) &&
18
+ !(checker as any).isArrayLikeType(type)
19
+ )
20
+ return false;
21
+
22
+ const value: ts.Type | null = type.getNumberIndexType() || null;
23
+ ArrayUtil.set(
24
+ meta.arrays,
25
+ explore_metadata(checker)(options)(collection)(value, false),
26
+ (elem) => elem.getName(),
27
+ );
28
+ return true;
29
+ };
@@ -1,59 +1,59 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
-
5
- import { Atomic } from "../../typings/Atomic";
6
-
7
- import { ArrayUtil } from "../../utils/ArrayUtil";
8
-
9
- const same = (type: ts.Type | null) => {
10
- if (type === null) return () => false;
11
- return (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
12
- };
13
-
14
- export const iterate_metadata_atomic = (
15
- meta: Metadata,
16
- type: ts.Type,
17
- ): boolean => {
18
- // PREPARE INTERNAL FUNCTIONS
19
- const filter = same(type);
20
- const check = (info: IAtomicInfo) => {
21
- if (filter(info.atomic) || filter(info.literal)) {
22
- ArrayUtil.add(meta.atomics, info.name);
23
- return true;
24
- }
25
- return false;
26
- };
27
-
28
- // CHECK EACH TYPES
29
- return ATOMICS.some((info) => check(info));
30
- };
31
-
32
- const ATOMICS: IAtomicInfo[] = [
33
- {
34
- name: "boolean",
35
- atomic: ts.TypeFlags.BooleanLike,
36
- literal: ts.TypeFlags.BooleanLiteral,
37
- },
38
- {
39
- name: "number",
40
- atomic: ts.TypeFlags.NumberLike,
41
- literal: ts.TypeFlags.NumberLiteral,
42
- },
43
- {
44
- name: "bigint",
45
- atomic: ts.TypeFlags.BigInt,
46
- literal: ts.TypeFlags.BigIntLiteral,
47
- },
48
- {
49
- name: "string",
50
- atomic: ts.TypeFlags.StringLike,
51
- literal: ts.TypeFlags.StringLiteral,
52
- },
53
- ];
54
-
55
- interface IAtomicInfo {
56
- name: Atomic.Literal;
57
- atomic: ts.TypeFlags;
58
- literal: ts.TypeFlags;
59
- }
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../metadata/Metadata";
4
+
5
+ import { Atomic } from "../../typings/Atomic";
6
+
7
+ import { ArrayUtil } from "../../utils/ArrayUtil";
8
+
9
+ const same = (type: ts.Type | null) => {
10
+ if (type === null) return () => false;
11
+ return (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
12
+ };
13
+
14
+ export const iterate_metadata_atomic = (
15
+ meta: Metadata,
16
+ type: ts.Type,
17
+ ): boolean => {
18
+ // PREPARE INTERNAL FUNCTIONS
19
+ const filter = same(type);
20
+ const check = (info: IAtomicInfo) => {
21
+ if (filter(info.atomic) || filter(info.literal)) {
22
+ ArrayUtil.add(meta.atomics, info.name);
23
+ return true;
24
+ }
25
+ return false;
26
+ };
27
+
28
+ // CHECK EACH TYPES
29
+ return ATOMICS.some((info) => check(info));
30
+ };
31
+
32
+ const ATOMICS: IAtomicInfo[] = [
33
+ {
34
+ name: "boolean",
35
+ atomic: ts.TypeFlags.BooleanLike,
36
+ literal: ts.TypeFlags.BooleanLiteral,
37
+ },
38
+ {
39
+ name: "number",
40
+ atomic: ts.TypeFlags.NumberLike,
41
+ literal: ts.TypeFlags.NumberLiteral,
42
+ },
43
+ {
44
+ name: "bigint",
45
+ atomic: ts.TypeFlags.BigInt,
46
+ literal: ts.TypeFlags.BigIntLiteral,
47
+ },
48
+ {
49
+ name: "string",
50
+ atomic: ts.TypeFlags.StringLike,
51
+ literal: ts.TypeFlags.StringLiteral,
52
+ },
53
+ ];
54
+
55
+ interface IAtomicInfo {
56
+ name: Atomic.Literal;
57
+ atomic: ts.TypeFlags;
58
+ literal: ts.TypeFlags;
59
+ }
@@ -1,33 +1,33 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
-
5
- import { Writable } from "../../typings/Writable";
6
-
7
- import { TypeFactory } from "../TypeFactory";
8
-
9
- export const iterate_metadata_coalesce = (
10
- meta: Metadata,
11
- type: ts.Type,
12
- ): boolean => {
13
- const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
14
- if (filter(ts.TypeFlags.Unknown) || filter(ts.TypeFlags.Any)) {
15
- Writable(meta).any = true;
16
- return true;
17
- } else if (filter(ts.TypeFlags.Null)) {
18
- Writable(meta).nullable = true;
19
- return true;
20
- } else if (
21
- filter(ts.TypeFlags.Undefined) ||
22
- filter(ts.TypeFlags.Never) ||
23
- filter(ts.TypeFlags.Void) ||
24
- filter(ts.TypeFlags.VoidLike)
25
- ) {
26
- Writable(meta).required = false;
27
- return true;
28
- } else if (TypeFactory.isFunction(type) === true) {
29
- Writable(meta).functional = true;
30
- return true;
31
- }
32
- return false;
33
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../metadata/Metadata";
4
+
5
+ import { Writable } from "../../typings/Writable";
6
+
7
+ import { TypeFactory } from "../TypeFactory";
8
+
9
+ export const iterate_metadata_coalesce = (
10
+ meta: Metadata,
11
+ type: ts.Type,
12
+ ): boolean => {
13
+ const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
14
+ if (filter(ts.TypeFlags.Unknown) || filter(ts.TypeFlags.Any)) {
15
+ Writable(meta).any = true;
16
+ return true;
17
+ } else if (filter(ts.TypeFlags.Null)) {
18
+ Writable(meta).nullable = true;
19
+ return true;
20
+ } else if (
21
+ filter(ts.TypeFlags.Undefined) ||
22
+ filter(ts.TypeFlags.Never) ||
23
+ filter(ts.TypeFlags.Void) ||
24
+ filter(ts.TypeFlags.VoidLike)
25
+ ) {
26
+ Writable(meta).required = false;
27
+ return true;
28
+ } else if (TypeFactory.isFunction(type) === true) {
29
+ Writable(meta).functional = true;
30
+ return true;
31
+ }
32
+ return false;
33
+ };
@@ -1,58 +1,58 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
- import { MetadataConstant } from "../../metadata/MetadataConstant";
5
-
6
- import { ArrayUtil } from "../../utils/ArrayUtil";
7
-
8
- import { MetadataFactory } from "../MetadataFactory";
9
-
10
- export const iterate_metadata_constant =
11
- (checker: ts.TypeChecker) =>
12
- (options: MetadataFactory.IOptions) =>
13
- (meta: Metadata, type: ts.Type): boolean => {
14
- if (!options.constant) return false;
15
-
16
- const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
17
- if (type.isLiteral()) {
18
- const value: string | number | bigint =
19
- typeof type.value === "object"
20
- ? BigInt(
21
- `${type.value.negative ? "-" : ""}${
22
- type.value.base10Value
23
- }`,
24
- )
25
- : type.value;
26
- const constant: MetadataConstant = ArrayUtil.take(
27
- meta.constants,
28
- (elem) => elem.type === typeof value,
29
- () => ({
30
- type: typeof value as "number",
31
- values: [],
32
- }),
33
- );
34
- ArrayUtil.add(
35
- constant.values as Array<any>,
36
- value,
37
- (a, b) => a === b,
38
- );
39
- return true;
40
- } else if (filter(ts.TypeFlags.BooleanLiteral)) {
41
- const value: boolean = checker.typeToString(type) === "true";
42
- const constant: MetadataConstant = ArrayUtil.take(
43
- meta.constants,
44
- (elem) => elem.type === "boolean",
45
- () => ({
46
- type: "boolean",
47
- values: [],
48
- }),
49
- );
50
- ArrayUtil.add(
51
- constant.values as boolean[],
52
- value,
53
- (a, b) => a === b,
54
- );
55
- return true;
56
- }
57
- return false;
58
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../metadata/Metadata";
4
+ import { MetadataConstant } from "../../metadata/MetadataConstant";
5
+
6
+ import { ArrayUtil } from "../../utils/ArrayUtil";
7
+
8
+ import { MetadataFactory } from "../MetadataFactory";
9
+
10
+ export const iterate_metadata_constant =
11
+ (checker: ts.TypeChecker) =>
12
+ (options: MetadataFactory.IOptions) =>
13
+ (meta: Metadata, type: ts.Type): boolean => {
14
+ if (!options.constant) return false;
15
+
16
+ const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
17
+ if (type.isLiteral()) {
18
+ const value: string | number | bigint =
19
+ typeof type.value === "object"
20
+ ? BigInt(
21
+ `${type.value.negative ? "-" : ""}${
22
+ type.value.base10Value
23
+ }`,
24
+ )
25
+ : type.value;
26
+ const constant: MetadataConstant = ArrayUtil.take(
27
+ meta.constants,
28
+ (elem) => elem.type === typeof value,
29
+ () => ({
30
+ type: typeof value as "number",
31
+ values: [],
32
+ }),
33
+ );
34
+ ArrayUtil.add(
35
+ constant.values as Array<any>,
36
+ value,
37
+ (a, b) => a === b,
38
+ );
39
+ return true;
40
+ } else if (filter(ts.TypeFlags.BooleanLiteral)) {
41
+ const value: boolean = checker.typeToString(type) === "true";
42
+ const constant: MetadataConstant = ArrayUtil.take(
43
+ meta.constants,
44
+ (elem) => elem.type === "boolean",
45
+ () => ({
46
+ type: "boolean",
47
+ values: [],
48
+ }),
49
+ );
50
+ ArrayUtil.add(
51
+ constant.values as boolean[],
52
+ value,
53
+ (a, b) => a === b,
54
+ );
55
+ return true;
56
+ }
57
+ return false;
58
+ };
@@ -1,41 +1,41 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
-
5
- import { ArrayUtil } from "../../utils/ArrayUtil";
6
-
7
- import { MetadataCollection } from "../MetadataCollection";
8
- import { MetadataFactory } from "../MetadataFactory";
9
- import { TypeFactory } from "../TypeFactory";
10
- import { explore_metadata } from "./explore_metadata";
11
-
12
- export const iterate_metadata_map =
13
- (checker: ts.TypeChecker) =>
14
- (options: MetadataFactory.IOptions) =>
15
- (collection: MetadataCollection) =>
16
- (meta: Metadata, type: ts.Type): boolean => {
17
- type = checker.getApparentType(type);
18
-
19
- const name = TypeFactory.getFullName(checker, type, type.getSymbol());
20
- const generic = type.aliasSymbol
21
- ? type.aliasTypeArguments
22
- : checker.getTypeArguments(type as ts.TypeReference);
23
- if (name.substring(0, 4) !== "Map<" || generic?.length !== 2)
24
- return false;
25
-
26
- const key: ts.Type = generic[0]!;
27
- const value: ts.Type = generic[1]!;
28
-
29
- ArrayUtil.set(
30
- meta.maps,
31
- {
32
- key: explore_metadata(checker)(options)(collection)(key, false),
33
- value: explore_metadata(checker)(options)(collection)(
34
- value,
35
- false,
36
- ),
37
- },
38
- (elem) => `Map<${elem.key.getName()}, ${elem.value.getName()}>`,
39
- );
40
- return true;
41
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../metadata/Metadata";
4
+
5
+ import { ArrayUtil } from "../../utils/ArrayUtil";
6
+
7
+ import { MetadataCollection } from "../MetadataCollection";
8
+ import { MetadataFactory } from "../MetadataFactory";
9
+ import { TypeFactory } from "../TypeFactory";
10
+ import { explore_metadata } from "./explore_metadata";
11
+
12
+ export const iterate_metadata_map =
13
+ (checker: ts.TypeChecker) =>
14
+ (options: MetadataFactory.IOptions) =>
15
+ (collection: MetadataCollection) =>
16
+ (meta: Metadata, type: ts.Type): boolean => {
17
+ type = checker.getApparentType(type);
18
+
19
+ const name = TypeFactory.getFullName(checker, type, type.getSymbol());
20
+ const generic = type.aliasSymbol
21
+ ? type.aliasTypeArguments
22
+ : checker.getTypeArguments(type as ts.TypeReference);
23
+ if (name.substring(0, 4) !== "Map<" || generic?.length !== 2)
24
+ return false;
25
+
26
+ const key: ts.Type = generic[0]!;
27
+ const value: ts.Type = generic[1]!;
28
+
29
+ ArrayUtil.set(
30
+ meta.maps,
31
+ {
32
+ key: explore_metadata(checker)(options)(collection)(key, false),
33
+ value: explore_metadata(checker)(options)(collection)(
34
+ value,
35
+ false,
36
+ ),
37
+ },
38
+ (elem) => `Map<${elem.key.getName()}, ${elem.value.getName()}>`,
39
+ );
40
+ return true;
41
+ };