typia 6.7.3-dev.20240808 → 6.8.0-dev.20240811

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 (109) hide show
  1. package/lib/factories/TypeFactory.d.ts +0 -2
  2. package/lib/factories/TypeFactory.js +4 -83
  3. package/lib/factories/TypeFactory.js.map +1 -1
  4. package/lib/factories/internal/metadata/emplace_metadata_array_type.js +1 -5
  5. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -1
  6. package/lib/factories/internal/metadata/emplace_metadata_object.js +3 -4
  7. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  8. package/lib/factories/internal/metadata/iterate_metadata.js +1 -2
  9. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  10. package/lib/factories/internal/metadata/iterate_metadata_array.js +1 -2
  11. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  12. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +1 -1
  13. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  14. package/lib/factories/internal/metadata/iterate_metadata_coalesce.js +1 -1
  15. package/lib/factories/internal/metadata/iterate_metadata_coalesce.js.map +1 -1
  16. package/lib/factories/internal/metadata/iterate_metadata_constant.js +2 -3
  17. package/lib/factories/internal/metadata/iterate_metadata_constant.js.map +1 -1
  18. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +2 -3
  19. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  20. package/lib/factories/internal/metadata/iterate_metadata_map.js +1 -1
  21. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  22. package/lib/factories/internal/metadata/iterate_metadata_native.js +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  24. package/lib/factories/internal/metadata/iterate_metadata_object.js +2 -3
  25. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  26. package/lib/factories/internal/metadata/iterate_metadata_set.js +1 -1
  27. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata_template.js +1 -1
  29. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
  30. package/lib/factories/internal/metadata/iterate_metadata_union.js +1 -2
  31. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
  32. package/lib/programmers/internal/application_bigint.d.ts +1 -0
  33. package/lib/programmers/internal/application_bigint.js +14 -0
  34. package/lib/programmers/internal/application_bigint.js.map +1 -0
  35. package/lib/programmers/internal/application_v30_schema.js +10 -12
  36. package/lib/programmers/internal/application_v30_schema.js.map +1 -1
  37. package/lib/programmers/internal/application_v31_constant.js +3 -1
  38. package/lib/programmers/internal/application_v31_constant.js.map +1 -1
  39. package/lib/programmers/internal/application_v31_schema.js +10 -12
  40. package/lib/programmers/internal/application_v31_schema.js.map +1 -1
  41. package/lib/tags/Constant.d.ts +2 -2
  42. package/lib/tags/Default.d.ts +5 -1
  43. package/lib/tags/ExclusiveMaximum.d.ts +9 -5
  44. package/lib/tags/ExclusiveMinimum.d.ts +9 -5
  45. package/lib/tags/JsonSchemaPlugin.d.ts +1 -1
  46. package/lib/tags/Maximum.d.ts +8 -5
  47. package/lib/tags/Minimum.d.ts +8 -5
  48. package/lib/tags/MultipleOf.d.ts +7 -4
  49. package/lib/transformers/features/CreateRandomTransformer.js +1 -2
  50. package/lib/transformers/features/CreateRandomTransformer.js.map +1 -1
  51. package/lib/transformers/features/RandomTransformer.js +1 -2
  52. package/lib/transformers/features/RandomTransformer.js.map +1 -1
  53. package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -5
  54. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  55. package/lib/transformers/features/misc/MiscLiteralsTransformer.js +1 -2
  56. package/lib/transformers/features/misc/MiscLiteralsTransformer.js.map +1 -1
  57. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js +1 -2
  58. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js.map +1 -1
  59. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js +1 -2
  60. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -1
  61. package/lib/transformers/internal/GenericTransformer.js +2 -3
  62. package/lib/transformers/internal/GenericTransformer.js.map +1 -1
  63. package/package.json +2 -2
  64. package/src/factories/CommentFactory.ts +79 -79
  65. package/src/factories/MetadataCollection.ts +274 -274
  66. package/src/factories/MetadataFactory.ts +272 -272
  67. package/src/factories/TypeFactory.ts +118 -190
  68. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +42 -42
  69. package/src/factories/internal/metadata/emplace_metadata_object.ts +176 -179
  70. package/src/factories/internal/metadata/iterate_metadata.ts +94 -96
  71. package/src/factories/internal/metadata/iterate_metadata_array.ts +63 -64
  72. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  73. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  74. package/src/factories/internal/metadata/iterate_metadata_constant.ts +76 -77
  75. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +213 -214
  76. package/src/factories/internal/metadata/iterate_metadata_map.ts +50 -50
  77. package/src/factories/internal/metadata/iterate_metadata_native.ts +220 -217
  78. package/src/factories/internal/metadata/iterate_metadata_object.ts +33 -34
  79. package/src/factories/internal/metadata/iterate_metadata_set.ts +41 -41
  80. package/src/factories/internal/metadata/iterate_metadata_template.ts +44 -44
  81. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -29
  82. package/src/programmers/internal/application_bigint.ts +25 -0
  83. package/src/programmers/internal/application_v30_alias.ts +52 -52
  84. package/src/programmers/internal/application_v30_object.ts +149 -149
  85. package/src/programmers/internal/application_v30_schema.ts +162 -159
  86. package/src/programmers/internal/application_v30_tuple.ts +33 -33
  87. package/src/programmers/internal/application_v31_constant.ts +4 -1
  88. package/src/programmers/internal/application_v31_schema.ts +159 -157
  89. package/src/programmers/json/JsonApplicationProgrammer.ts +82 -82
  90. package/src/tags/Constant.ts +2 -2
  91. package/src/tags/Default.ts +7 -3
  92. package/src/tags/ExclusiveMaximum.ts +12 -6
  93. package/src/tags/ExclusiveMinimum.ts +12 -6
  94. package/src/tags/JsonSchemaPlugin.ts +1 -1
  95. package/src/tags/Maximum.ts +9 -8
  96. package/src/tags/Minimum.ts +9 -8
  97. package/src/tags/MultipleOf.ts +9 -8
  98. package/src/transformers/FileTransformer.ts +91 -91
  99. package/src/transformers/features/CreateRandomTransformer.ts +40 -42
  100. package/src/transformers/features/RandomTransformer.ts +44 -46
  101. package/src/transformers/features/json/JsonApplicationTransformer.ts +124 -126
  102. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -34
  103. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -35
  104. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +62 -64
  105. package/src/transformers/internal/GenericTransformer.ts +2 -4
  106. package/lib/utils/TypePredicator.d.ts +0 -10
  107. package/lib/utils/TypePredicator.js +0 -36
  108. package/lib/utils/TypePredicator.js.map +0 -1
  109. package/src/utils/TypePredicator.ts +0 -32
@@ -1,214 +1,213 @@
1
- import ts from "typescript";
2
-
3
- import { IMetadataTypeTag } from "../../../schemas/metadata/IMetadataTypeTag";
4
- import { Metadata } from "../../../schemas/metadata/Metadata";
5
- import { MetadataAtomic } from "../../../schemas/metadata/MetadataAtomic";
6
- import { MetadataConstant } from "../../../schemas/metadata/MetadataConstant";
7
- import { MetadataConstantValue } from "../../../schemas/metadata/MetadataConstantValue";
8
- import { MetadataTemplate } from "../../../schemas/metadata/MetadataTemplate";
9
-
10
- import { ArrayUtil } from "../../../utils/ArrayUtil";
11
- import { TypePredicator } from "../../../utils/TypePredicator";
12
-
13
- import { MetadataCollection } from "../../MetadataCollection";
14
- import { MetadataFactory } from "../../MetadataFactory";
15
- import { MetadataTypeTagFactory } from "../../MetadataTypeTagFactory";
16
- import { explore_metadata } from "./explore_metadata";
17
- import { iterate_metadata } from "./iterate_metadata";
18
- import { iterate_metadata_array } from "./iterate_metadata_array";
19
-
20
- export const iterate_metadata_intersection =
21
- (checker: ts.TypeChecker) =>
22
- (options: MetadataFactory.IOptions) =>
23
- (collection: MetadataCollection) =>
24
- (errors: MetadataFactory.IError[]) =>
25
- (
26
- meta: Metadata,
27
- type: ts.Type,
28
- explore: MetadataFactory.IExplore,
29
- ): boolean => {
30
- if (TypePredicator.isIntersection(type) === false) return false;
31
- if (
32
- // ONLY OBJECT TYPED INTERSECTION
33
- type.types.every(
34
- (child) =>
35
- (child.flags & ts.TypeFlags.Object) !== 0 &&
36
- !checker.isArrayType(child) &&
37
- !checker.isTupleType(child),
38
- )
39
- )
40
- return false;
41
-
42
- // COSTRUCT FAKE METADATA LIST
43
- const fakeCollection: MetadataCollection = collection.clone();
44
- const fakeErrors: MetadataFactory.IError[] = [];
45
- const children: Metadata[] = [
46
- ...new Map(
47
- type.types.map((t) => {
48
- const m: Metadata = explore_metadata(checker)({
49
- ...options,
50
- absorb: true,
51
- })(fakeCollection)(fakeErrors)(t, {
52
- ...explore,
53
- aliased: false,
54
- });
55
- return [m.getName(), m] as const;
56
- }),
57
- ).values(),
58
- ];
59
- if (fakeErrors.length) {
60
- errors.push(...fakeErrors);
61
- return true;
62
- }
63
-
64
- // ONLY ONE CHILD AFTER REMOVING DUPLICATES
65
- if (children.length === 1) {
66
- iterate_metadata(checker)(options)(collection)(errors)(
67
- meta,
68
- type.types[0]!,
69
- explore,
70
- );
71
- return true;
72
- } else if (children.every((c) => c.objects.length === c.size()))
73
- // ONLY OBJECT TYPED INTERSECTION (DETAILED)
74
- return false;
75
-
76
- // VALIDATE EACH TYPES
77
- const nonsensible = () => {
78
- errors.push({
79
- name: children.map((c) => c.getName()).join(" & "),
80
- explore: { ...explore },
81
- messages: ["nonsensible intersection"],
82
- });
83
- return true;
84
- };
85
- const individuals: (readonly [Metadata, number])[] = children
86
- .map((child, i) => [child, i] as const)
87
- .filter(
88
- ([c]) =>
89
- (c.size() === 1 &&
90
- (c.atomics.length === 1 ||
91
- (c.constants.length === 1 &&
92
- c.constants[0]!.values.length === 1) ||
93
- c.arrays.length === 1)) ||
94
- c.templates.length === 1,
95
- );
96
- if (individuals.length !== 1) return nonsensible();
97
-
98
- const objects: Metadata[] = children.filter(
99
- (c) =>
100
- c.nullable === false &&
101
- c.isRequired() === true &&
102
- c.objects.length &&
103
- c.objects.length === c.size() &&
104
- c.objects.every((o) => o.properties.every((p) => p.value.optional)),
105
- );
106
- const arrays: Set<string> = new Set(
107
- individuals.map(([c]) => c.arrays.map((a) => a.type.name)).flat(),
108
- );
109
- const atomics: Set<"boolean" | "bigint" | "number" | "string"> = new Set(
110
- individuals.map(([c]) => [...c.atomics.map((a) => a.type)]).flat(),
111
- );
112
- const constants: Metadata[] = individuals
113
- .filter((i) => i[0].constants.length === 1)
114
- .map(([m]) => m);
115
- const templates: Metadata[] = individuals
116
- .filter((i) => i[0].templates.length === 1)
117
- .map(([m]) => m);
118
-
119
- // ESCAPE WHEN ONLY CONSTANT TYPES EXIST
120
- if (
121
- atomics.size + constants.length + arrays.size + templates.length > 1 ||
122
- individuals.length + objects.length !== children.length
123
- )
124
- return nonsensible();
125
-
126
- // RE-GENERATE TYPE
127
- const target: "boolean" | "bigint" | "number" | "string" | "array" =
128
- arrays.size
129
- ? "array"
130
- : atomics.size
131
- ? atomics.values().next().value
132
- : constants.length
133
- ? constants[0]!.constants[0]!.type
134
- : "string";
135
- if (target === "array") {
136
- const name: string = arrays.values().next().value;
137
- if (!meta.arrays.some((a) => a.type.name === name)) {
138
- iterate_metadata_array(checker)(options)(collection)(errors)(
139
- meta,
140
- type.types[individuals.find((i) => i[0].arrays.length === 1)![1]]!,
141
- {
142
- ...explore,
143
- aliased: false,
144
- escaped: false,
145
- },
146
- );
147
- }
148
- } else if (atomics.size)
149
- ArrayUtil.add(
150
- meta.atomics,
151
- MetadataAtomic.create({
152
- type: atomics.values().next().value as "string",
153
- tags: [],
154
- }),
155
- (a, b) => a.type === b.type,
156
- );
157
- else if (constants.length)
158
- ArrayUtil.take(
159
- ArrayUtil.take(
160
- meta.constants,
161
- (o) => o.type === target,
162
- () =>
163
- MetadataConstant.create({
164
- type: target,
165
- values: [],
166
- }),
167
- ).values,
168
- (o) => o.value === constants[0]!.constants[0]!.values[0]!.value,
169
- () =>
170
- MetadataConstantValue.create({
171
- value: constants[0]!.constants[0]!.values[0]!.value,
172
- tags: [],
173
- }),
174
- );
175
- else if (templates.length)
176
- ArrayUtil.take(
177
- meta.templates,
178
- (o) => o.getBaseName() === templates[0]!.templates[0]!.getBaseName(),
179
- () =>
180
- MetadataTemplate.create({
181
- row: templates[0]!.templates[0]!.row,
182
- tags: [],
183
- }),
184
- );
185
-
186
- // ASSIGN TAGS
187
- if (objects.length) {
188
- const tags: IMetadataTypeTag[] = MetadataTypeTagFactory.analyze(errors)(
189
- target,
190
- )(objects.map((om) => om.objects).flat(), explore);
191
- if (tags.length)
192
- if (target === "array") meta.arrays.at(-1)!.tags.push(tags);
193
- else if (atomics.size)
194
- meta.atomics.find((a) => a.type === target)!.tags.push(tags);
195
- else if (constants.length) {
196
- const constant: MetadataConstant = meta.constants.find(
197
- (c) => c.type === target,
198
- )!;
199
- const value: MetadataConstantValue = constant.values.find(
200
- (v) => v.value === constants[0]!.constants[0]!.values[0]!.value,
201
- )!;
202
- value.tags ??= [];
203
- value.tags.push(tags);
204
- } else if (templates.length) {
205
- const template: MetadataTemplate = meta.templates.find(
206
- (t) =>
207
- t.getBaseName() === templates[0]!.templates[0]!.getBaseName(),
208
- )!;
209
- template.tags ??= [];
210
- template.tags.push(tags);
211
- }
212
- }
213
- return true;
214
- };
1
+ import ts from "typescript";
2
+
3
+ import { IMetadataTypeTag } from "../../../schemas/metadata/IMetadataTypeTag";
4
+ import { Metadata } from "../../../schemas/metadata/Metadata";
5
+ import { MetadataAtomic } from "../../../schemas/metadata/MetadataAtomic";
6
+ import { MetadataConstant } from "../../../schemas/metadata/MetadataConstant";
7
+ import { MetadataConstantValue } from "../../../schemas/metadata/MetadataConstantValue";
8
+ import { MetadataTemplate } from "../../../schemas/metadata/MetadataTemplate";
9
+
10
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
11
+
12
+ import { MetadataCollection } from "../../MetadataCollection";
13
+ import { MetadataFactory } from "../../MetadataFactory";
14
+ import { MetadataTypeTagFactory } from "../../MetadataTypeTagFactory";
15
+ import { explore_metadata } from "./explore_metadata";
16
+ import { iterate_metadata } from "./iterate_metadata";
17
+ import { iterate_metadata_array } from "./iterate_metadata_array";
18
+
19
+ export const iterate_metadata_intersection =
20
+ (checker: ts.TypeChecker) =>
21
+ (options: MetadataFactory.IOptions) =>
22
+ (collection: MetadataCollection) =>
23
+ (errors: MetadataFactory.IError[]) =>
24
+ (
25
+ meta: Metadata,
26
+ type: ts.Type,
27
+ explore: MetadataFactory.IExplore,
28
+ ): boolean => {
29
+ if (!type.isIntersection()) return false;
30
+ if (
31
+ // ONLY OBJECT TYPED INTERSECTION
32
+ type.types.every(
33
+ (child) =>
34
+ (child.getFlags() & ts.TypeFlags.Object) !== 0 &&
35
+ !checker.isArrayType(child) &&
36
+ !checker.isTupleType(child),
37
+ )
38
+ )
39
+ return false;
40
+
41
+ // COSTRUCT FAKE METADATA LIST
42
+ const fakeCollection: MetadataCollection = collection.clone();
43
+ const fakeErrors: MetadataFactory.IError[] = [];
44
+ const children: Metadata[] = [
45
+ ...new Map(
46
+ type.types.map((t) => {
47
+ const m: Metadata = explore_metadata(checker)({
48
+ ...options,
49
+ absorb: true,
50
+ })(fakeCollection)(fakeErrors)(t, {
51
+ ...explore,
52
+ aliased: false,
53
+ });
54
+ return [m.getName(), m] as const;
55
+ }),
56
+ ).values(),
57
+ ];
58
+ if (fakeErrors.length) {
59
+ errors.push(...fakeErrors);
60
+ return true;
61
+ }
62
+
63
+ // ONLY ONE CHILD AFTER REMOVING DUPLICATES
64
+ if (children.length === 1) {
65
+ iterate_metadata(checker)(options)(collection)(errors)(
66
+ meta,
67
+ type.types[0]!,
68
+ explore,
69
+ );
70
+ return true;
71
+ } else if (children.every((c) => c.objects.length === c.size()))
72
+ // ONLY OBJECT TYPED INTERSECTION (DETAILED)
73
+ return false;
74
+
75
+ // VALIDATE EACH TYPES
76
+ const nonsensible = () => {
77
+ errors.push({
78
+ name: children.map((c) => c.getName()).join(" & "),
79
+ explore: { ...explore },
80
+ messages: ["nonsensible intersection"],
81
+ });
82
+ return true;
83
+ };
84
+ const individuals: (readonly [Metadata, number])[] = children
85
+ .map((child, i) => [child, i] as const)
86
+ .filter(
87
+ ([c]) =>
88
+ (c.size() === 1 &&
89
+ (c.atomics.length === 1 ||
90
+ (c.constants.length === 1 &&
91
+ c.constants[0]!.values.length === 1) ||
92
+ c.arrays.length === 1)) ||
93
+ c.templates.length === 1,
94
+ );
95
+ if (individuals.length !== 1) return nonsensible();
96
+
97
+ const objects: Metadata[] = children.filter(
98
+ (c) =>
99
+ c.nullable === false &&
100
+ c.isRequired() === true &&
101
+ c.objects.length &&
102
+ c.objects.length === c.size() &&
103
+ c.objects.every((o) => o.properties.every((p) => p.value.optional)),
104
+ );
105
+ const arrays: Set<string> = new Set(
106
+ individuals.map(([c]) => c.arrays.map((a) => a.type.name)).flat(),
107
+ );
108
+ const atomics: Set<"boolean" | "bigint" | "number" | "string"> = new Set(
109
+ individuals.map(([c]) => [...c.atomics.map((a) => a.type)]).flat(),
110
+ );
111
+ const constants: Metadata[] = individuals
112
+ .filter((i) => i[0].constants.length === 1)
113
+ .map(([m]) => m);
114
+ const templates: Metadata[] = individuals
115
+ .filter((i) => i[0].templates.length === 1)
116
+ .map(([m]) => m);
117
+
118
+ // ESCAPE WHEN ONLY CONSTANT TYPES EXIST
119
+ if (
120
+ atomics.size + constants.length + arrays.size + templates.length > 1 ||
121
+ individuals.length + objects.length !== children.length
122
+ )
123
+ return nonsensible();
124
+
125
+ // RE-GENERATE TYPE
126
+ const target: "boolean" | "bigint" | "number" | "string" | "array" =
127
+ arrays.size
128
+ ? "array"
129
+ : atomics.size
130
+ ? atomics.values().next().value
131
+ : constants.length
132
+ ? constants[0]!.constants[0]!.type
133
+ : "string";
134
+ if (target === "array") {
135
+ const name: string = arrays.values().next().value;
136
+ if (!meta.arrays.some((a) => a.type.name === name)) {
137
+ iterate_metadata_array(checker)(options)(collection)(errors)(
138
+ meta,
139
+ type.types[individuals.find((i) => i[0].arrays.length === 1)![1]]!,
140
+ {
141
+ ...explore,
142
+ aliased: false,
143
+ escaped: false,
144
+ },
145
+ );
146
+ }
147
+ } else if (atomics.size)
148
+ ArrayUtil.add(
149
+ meta.atomics,
150
+ MetadataAtomic.create({
151
+ type: atomics.values().next().value as "string",
152
+ tags: [],
153
+ }),
154
+ (a, b) => a.type === b.type,
155
+ );
156
+ else if (constants.length)
157
+ ArrayUtil.take(
158
+ ArrayUtil.take(
159
+ meta.constants,
160
+ (o) => o.type === target,
161
+ () =>
162
+ MetadataConstant.create({
163
+ type: target,
164
+ values: [],
165
+ }),
166
+ ).values,
167
+ (o) => o.value === constants[0]!.constants[0]!.values[0]!.value,
168
+ () =>
169
+ MetadataConstantValue.create({
170
+ value: constants[0]!.constants[0]!.values[0]!.value,
171
+ tags: [],
172
+ }),
173
+ );
174
+ else if (templates.length)
175
+ ArrayUtil.take(
176
+ meta.templates,
177
+ (o) => o.getBaseName() === templates[0]!.templates[0]!.getBaseName(),
178
+ () =>
179
+ MetadataTemplate.create({
180
+ row: templates[0]!.templates[0]!.row,
181
+ tags: [],
182
+ }),
183
+ );
184
+
185
+ // ASSIGN TAGS
186
+ if (objects.length) {
187
+ const tags: IMetadataTypeTag[] = MetadataTypeTagFactory.analyze(errors)(
188
+ target,
189
+ )(objects.map((om) => om.objects).flat(), explore);
190
+ if (tags.length)
191
+ if (target === "array") meta.arrays.at(-1)!.tags.push(tags);
192
+ else if (atomics.size)
193
+ meta.atomics.find((a) => a.type === target)!.tags.push(tags);
194
+ else if (constants.length) {
195
+ const constant: MetadataConstant = meta.constants.find(
196
+ (c) => c.type === target,
197
+ )!;
198
+ const value: MetadataConstantValue = constant.values.find(
199
+ (v) => v.value === constants[0]!.constants[0]!.values[0]!.value,
200
+ )!;
201
+ value.tags ??= [];
202
+ value.tags.push(tags);
203
+ } else if (templates.length) {
204
+ const template: MetadataTemplate = meta.templates.find(
205
+ (t) =>
206
+ t.getBaseName() === templates[0]!.templates[0]!.getBaseName(),
207
+ )!;
208
+ template.tags ??= [];
209
+ template.tags.push(tags);
210
+ }
211
+ }
212
+ return true;
213
+ };
@@ -1,50 +1,50 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../schemas/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
- (errors: MetadataFactory.IError[]) =>
17
- (
18
- meta: Metadata,
19
- type: ts.Type,
20
- explore: MetadataFactory.IExplore,
21
- ): boolean => {
22
- type = checker.getApparentType(type);
23
-
24
- const name = TypeFactory.getFullName(checker)(type, type.symbol);
25
- const generic = type.aliasSymbol
26
- ? type.aliasTypeArguments
27
- : checker.getTypeArguments(type as ts.TypeReference);
28
- if (name.substring(0, 4) !== "Map<" || generic?.length !== 2) return false;
29
-
30
- const key: ts.Type = generic[0]!;
31
- const value: ts.Type = generic[1]!;
32
-
33
- ArrayUtil.set(
34
- meta.maps,
35
- {
36
- key: explore_metadata(checker)(options)(collection)(errors)(key, {
37
- ...explore,
38
- escaped: false,
39
- aliased: false,
40
- }),
41
- value: explore_metadata(checker)(options)(collection)(errors)(value, {
42
- ...explore,
43
- escaped: false,
44
- aliased: false,
45
- }),
46
- },
47
- (elem) => `Map<${elem.key.getName()}, ${elem.value.getName()}>`,
48
- );
49
- return true;
50
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../schemas/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
+ (errors: MetadataFactory.IError[]) =>
17
+ (
18
+ meta: Metadata,
19
+ type: ts.Type,
20
+ explore: MetadataFactory.IExplore,
21
+ ): boolean => {
22
+ type = checker.getApparentType(type);
23
+
24
+ const name = TypeFactory.getFullName(checker)(type, type.getSymbol());
25
+ const generic = type.aliasSymbol
26
+ ? type.aliasTypeArguments
27
+ : checker.getTypeArguments(type as ts.TypeReference);
28
+ if (name.substring(0, 4) !== "Map<" || generic?.length !== 2) return false;
29
+
30
+ const key: ts.Type = generic[0]!;
31
+ const value: ts.Type = generic[1]!;
32
+
33
+ ArrayUtil.set(
34
+ meta.maps,
35
+ {
36
+ key: explore_metadata(checker)(options)(collection)(errors)(key, {
37
+ ...explore,
38
+ escaped: false,
39
+ aliased: false,
40
+ }),
41
+ value: explore_metadata(checker)(options)(collection)(errors)(value, {
42
+ ...explore,
43
+ escaped: false,
44
+ aliased: false,
45
+ }),
46
+ },
47
+ (elem) => `Map<${elem.key.getName()}, ${elem.value.getName()}>`,
48
+ );
49
+ return true;
50
+ };