typia 3.4.13 → 3.4.14

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 (157) hide show
  1. package/README.md +9 -8
  2. package/lib/factories/internal/iterate_metadata_object.js +4 -2
  3. package/lib/factories/internal/iterate_metadata_object.js.map +1 -1
  4. package/package.json +1 -1
  5. package/src/IValidation.ts +21 -21
  6. package/src/Primitive.ts +82 -82
  7. package/src/TypeGuardError.ts +36 -36
  8. package/src/executable/internal/CommandParser.ts +15 -15
  9. package/src/executable/internal/TypiaSetupWizard.ts +175 -175
  10. package/src/executable/typia.ts +46 -46
  11. package/src/factories/CommentFactory.ts +10 -10
  12. package/src/factories/ExpressionFactory.ts +66 -66
  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/MetadataTagFactory.ts +347 -347
  18. package/src/factories/StatementFactory.ts +60 -60
  19. package/src/factories/TemplateFactory.ts +56 -56
  20. package/src/factories/TypeFactory.ts +101 -101
  21. package/src/factories/ValueFactory.ts +12 -12
  22. package/src/factories/internal/MetadataHelper.ts +12 -12
  23. package/src/factories/internal/emplace_metadata_object.ts +140 -140
  24. package/src/factories/internal/explore_metadata.ts +91 -91
  25. package/src/factories/internal/iterate_metadata.ts +80 -80
  26. package/src/factories/internal/iterate_metadata_array.ts +29 -29
  27. package/src/factories/internal/iterate_metadata_atomic.ts +59 -59
  28. package/src/factories/internal/iterate_metadata_coalesce.ts +33 -33
  29. package/src/factories/internal/iterate_metadata_constant.ts +58 -58
  30. package/src/factories/internal/iterate_metadata_map.ts +41 -41
  31. package/src/factories/internal/iterate_metadata_native.ts +227 -227
  32. package/src/factories/internal/iterate_metadata_object.ts +48 -45
  33. package/src/factories/internal/iterate_metadata_resolve.ts +27 -27
  34. package/src/factories/internal/iterate_metadata_set.ts +33 -33
  35. package/src/factories/internal/iterate_metadata_template.ts +38 -38
  36. package/src/factories/internal/iterate_metadata_tuple.ts +45 -45
  37. package/src/factories/internal/iterate_metadata_union.ts +59 -59
  38. package/src/functional/$every.ts +11 -11
  39. package/src/functional/$guard.ts +35 -35
  40. package/src/functional/$is_email.ts +5 -5
  41. package/src/functional/$is_ipv4.ts +5 -5
  42. package/src/functional/$is_ipv6.ts +5 -5
  43. package/src/functional/$is_url.ts +5 -5
  44. package/src/functional/$is_uuid.ts +5 -5
  45. package/src/functional/$join.ts +50 -50
  46. package/src/functional/$number.ts +19 -19
  47. package/src/functional/$report.ts +15 -15
  48. package/src/functional/$rest.ts +3 -3
  49. package/src/functional/$string.ts +37 -37
  50. package/src/functional/$tail.ts +6 -6
  51. package/src/index.ts +4 -4
  52. package/src/metadata/IJsDocTagInfo.ts +10 -10
  53. package/src/metadata/IMetadata.ts +25 -25
  54. package/src/metadata/IMetadataApplication.ts +7 -7
  55. package/src/metadata/IMetadataConstant.ts +16 -16
  56. package/src/metadata/IMetadataEntry.ts +6 -6
  57. package/src/metadata/IMetadataObject.ts +29 -29
  58. package/src/metadata/IMetadataProperty.ts +11 -11
  59. package/src/metadata/IMetadataTag.ts +122 -122
  60. package/src/metadata/Metadata.ts +477 -477
  61. package/src/metadata/MetadataConstant.ts +3 -3
  62. package/src/metadata/MetadataObject.ts +131 -131
  63. package/src/metadata/MetadataProperty.ts +64 -64
  64. package/src/module.ts +1535 -1535
  65. package/src/programmers/ApplicationProgrammer.ts +55 -55
  66. package/src/programmers/AssertParseProgrammer.ts +45 -45
  67. package/src/programmers/AssertProgrammer.ts +444 -444
  68. package/src/programmers/AssertStringifyProgrammer.ts +45 -45
  69. package/src/programmers/CheckerProgrammer.ts +804 -804
  70. package/src/programmers/FeatureProgrammer.ts +327 -327
  71. package/src/programmers/IsParseProgrammer.ts +51 -51
  72. package/src/programmers/IsProgrammer.ts +172 -172
  73. package/src/programmers/IsStringifyProgrammer.ts +49 -49
  74. package/src/programmers/StringifyProgrammer.ts +756 -756
  75. package/src/programmers/ValidateParseProgrammer.ts +49 -49
  76. package/src/programmers/ValidateProgrammer.ts +236 -236
  77. package/src/programmers/ValidateStringifyProgrammer.ts +60 -60
  78. package/src/programmers/helpers/AtomicPredicator.ts +15 -15
  79. package/src/programmers/helpers/FunctionImporeter.ts +31 -31
  80. package/src/programmers/helpers/IExpressionEntry.ts +10 -10
  81. package/src/programmers/helpers/OptionPredicator.ts +11 -11
  82. package/src/programmers/helpers/StringifyJoinder.ts +111 -111
  83. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  84. package/src/programmers/helpers/UnionExplorer.ts +437 -437
  85. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  86. package/src/programmers/internal/application_array.ts +45 -45
  87. package/src/programmers/internal/application_boolean.ts +17 -17
  88. package/src/programmers/internal/application_constant.ts +29 -29
  89. package/src/programmers/internal/application_default.ts +17 -17
  90. package/src/programmers/internal/application_default_string.ts +32 -32
  91. package/src/programmers/internal/application_native.ts +29 -29
  92. package/src/programmers/internal/application_number.ts +76 -76
  93. package/src/programmers/internal/application_object.ts +103 -103
  94. package/src/programmers/internal/application_schema.ts +221 -221
  95. package/src/programmers/internal/application_string.ts +49 -49
  96. package/src/programmers/internal/application_templates.ts +27 -27
  97. package/src/programmers/internal/application_tuple.ts +25 -25
  98. package/src/programmers/internal/check_array.ts +44 -44
  99. package/src/programmers/internal/check_dynamic_properties.ts +146 -146
  100. package/src/programmers/internal/check_everything.ts +25 -25
  101. package/src/programmers/internal/check_length.ts +46 -46
  102. package/src/programmers/internal/check_native.ts +9 -9
  103. package/src/programmers/internal/check_number.ts +178 -178
  104. package/src/programmers/internal/check_object.ts +42 -42
  105. package/src/programmers/internal/check_string.ts +24 -24
  106. package/src/programmers/internal/check_string_tags.ts +63 -63
  107. package/src/programmers/internal/check_template.ts +50 -50
  108. package/src/programmers/internal/decode_union_object.ts +73 -73
  109. package/src/programmers/internal/feature_object_entries.ts +49 -49
  110. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  111. package/src/programmers/internal/stringify_dynamic_properties.ts +164 -164
  112. package/src/programmers/internal/stringify_native.ts +8 -8
  113. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  114. package/src/programmers/internal/template_to_pattern.ts +15 -15
  115. package/src/schemas/IJsonApplication.ts +9 -9
  116. package/src/schemas/IJsonComponents.ts +24 -24
  117. package/src/schemas/IJsonSchema.ts +92 -92
  118. package/src/transform.ts +20 -20
  119. package/src/transformers/CallExpressionTransformer.ts +124 -124
  120. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  121. package/src/transformers/FileTransformer.ts +49 -49
  122. package/src/transformers/IProject.ts +11 -11
  123. package/src/transformers/ITransformOptions.ts +4 -4
  124. package/src/transformers/NodeTransformer.ts +19 -19
  125. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +114 -114
  126. package/src/transformers/features/miscellaneous/CreateInstanceTransformer.ts +41 -41
  127. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
  128. package/src/transformers/features/parsers/AssertParseTransformer.ts +36 -36
  129. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +32 -32
  130. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +32 -32
  131. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +32 -32
  132. package/src/transformers/features/parsers/IsParseTransformer.ts +36 -36
  133. package/src/transformers/features/parsers/ValidateParseTransformer.ts +36 -36
  134. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +38 -38
  135. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +32 -32
  136. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +32 -32
  137. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +31 -31
  138. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +32 -32
  139. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +38 -38
  140. package/src/transformers/features/stringifiers/StringifyTransformer.ts +36 -36
  141. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +38 -38
  142. package/src/transformers/features/validators/AssertTransformer.ts +43 -43
  143. package/src/transformers/features/validators/CreateAssertTransformer.ts +35 -35
  144. package/src/transformers/features/validators/CreateIsTransformer.ts +35 -35
  145. package/src/transformers/features/validators/CreateValidateTransformer.ts +35 -35
  146. package/src/transformers/features/validators/IsTransformer.ts +43 -43
  147. package/src/transformers/features/validators/ValidateTransformer.ts +43 -43
  148. package/src/typings/Atomic.ts +17 -17
  149. package/src/typings/ClassProperties.ts +5 -5
  150. package/src/typings/OmitNever.ts +3 -3
  151. package/src/typings/SpecialFields.ts +3 -3
  152. package/src/typings/Writable.ts +11 -11
  153. package/src/utils/ArrayUtil.ts +49 -49
  154. package/src/utils/Escaper.ts +50 -50
  155. package/src/utils/MapUtil.ts +14 -14
  156. package/src/utils/PatternUtil.ts +30 -30
  157. package/src/utils/Singleton.ts +17 -17
@@ -1,227 +1,227 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
-
5
- import { ArrayUtil } from "../../utils/ArrayUtil";
6
-
7
- import { TypeFactory } from "../TypeFactory";
8
-
9
- export const iterate_metadata_native =
10
- (checker: ts.TypeChecker) =>
11
- (meta: Metadata, type: ts.Type): boolean => {
12
- const validator = validate(checker)(type);
13
- const name: string = TypeFactory.getFullName(
14
- checker,
15
- type,
16
- type.getSymbol(),
17
- );
18
-
19
- const simple = SIMPLES.get(name);
20
- if (simple && validator(simple)) {
21
- if (FORBIDDEN.has(name))
22
- throw new Error(
23
- `Error on typia.metadata(): typia does not allow "${name}" class type. Use "${name.toLowerCase()}" type instead.`,
24
- );
25
- ArrayUtil.set(meta.natives, name, (str) => str);
26
- return true;
27
- }
28
-
29
- const complicate = COMPLICATES.get(name);
30
- if (complicate && validator(complicate)) {
31
- ArrayUtil.set(meta.natives, complicate.name ?? name, (str) => str);
32
- return true;
33
- }
34
-
35
- for (const generic of GENERICS)
36
- if (
37
- name.substring(0, generic.name.length) === generic.name &&
38
- validator(generic)
39
- ) {
40
- ArrayUtil.set(meta.natives, generic.name ?? name, (str) => str);
41
- return true;
42
- }
43
- return false;
44
- };
45
-
46
- const validate =
47
- (checker: ts.TypeChecker) => (type: ts.Type) => (info: IClassInfo) =>
48
- (info.methods ?? []).every((method) => {
49
- const returnType = TypeFactory.getReturnType(
50
- checker,
51
- type,
52
- method.name,
53
- );
54
- return (
55
- returnType !== null &&
56
- checker.typeToString(returnType) === method.return
57
- );
58
- }) &&
59
- (info.properties ?? []).every((property) => {
60
- const prop = checker.getPropertyOfType(type, property.name);
61
- const propType = prop?.valueDeclaration
62
- ? checker.getTypeAtLocation(prop?.valueDeclaration)
63
- : undefined;
64
- return (
65
- propType !== undefined &&
66
- checker.typeToString(propType) === property.type
67
- );
68
- });
69
-
70
- const getBinaryProps = (className: string): IClassInfo => ({
71
- name: className,
72
- methods: [
73
- ...["indexOf", "lastIndexOf"].map((name) => ({
74
- name,
75
- return: "number",
76
- })),
77
- ...["some", "every"].map((name) => ({
78
- name,
79
- return: "boolean",
80
- })),
81
- ...["join", "toLocaleString"].map((name) => ({
82
- name,
83
- return: "string",
84
- })),
85
- ...["reverse", "slice", "subarray"].map((name) => ({
86
- name,
87
- return: className,
88
- })),
89
- ],
90
- properties: ["BYTES_PER_ELEMENT", "length", "byteLength", "byteOffset"].map(
91
- (name) => ({
92
- name,
93
- type: "number",
94
- }),
95
- ),
96
- });
97
- const SIMPLES: Map<string, IClassInfo> = new Map([
98
- [
99
- "Date",
100
- {
101
- methods: ["getTime", "getFullYear", "getMonth", "getMinutes"].map(
102
- (name) => ({
103
- name,
104
- return: "number",
105
- }),
106
- ),
107
- },
108
- ],
109
- [
110
- "Boolean",
111
- {
112
- methods: [
113
- {
114
- name: "valueOf",
115
- return: "boolean",
116
- },
117
- ],
118
- },
119
- ],
120
- [
121
- "Number",
122
- {
123
- methods: [
124
- ...["toFixed", "toExponential", "toPrecision"].map((name) => ({
125
- name,
126
- return: "string",
127
- })),
128
- {
129
- name: "valueOf",
130
- return: "number",
131
- },
132
- ],
133
- },
134
- ],
135
- [
136
- "String",
137
- {
138
- methods: [
139
- "charAt",
140
- "concat",
141
- "valueOf",
142
- "trim",
143
- "replace",
144
- "substring",
145
- ].map((name) => ({
146
- name,
147
- return: "string",
148
- })),
149
- },
150
- ],
151
- ...[
152
- "Uint8Array",
153
- "Uint8ClampedArray",
154
- "Uint16Array",
155
- "Uint32Array",
156
- "BigUint64Array",
157
- "Int8Array",
158
- "Int16Array",
159
- "Int32Array",
160
- "BigInt64Array",
161
- "Float32Array",
162
- "Float64Array",
163
- ].map((name) => [name, getBinaryProps(name)] as const),
164
- ...["ArrayBuffer", "SharedArrayBuffer"].map((className) => {
165
- const info: IClassInfo = {
166
- methods: [
167
- {
168
- name: "slice",
169
- return: className,
170
- },
171
- ],
172
- properties: [
173
- {
174
- name: "byteLength",
175
- type: "number",
176
- },
177
- ],
178
- };
179
- return [className, info] as const;
180
- }),
181
- [
182
- "DataView",
183
- {
184
- methods: [
185
- "getFloat32",
186
- "getFloat64",
187
- "getInt8",
188
- "getInt16",
189
- "getInt32",
190
- "getUint8",
191
- "getUint16",
192
- "getUint32",
193
- ].map((name) => ({
194
- name,
195
- return: "number",
196
- })),
197
- },
198
- ],
199
- ]);
200
- const COMPLICATES: Map<string, IClassInfo> = new Map([
201
- [`'buffer'.global.Buffer`, getBinaryProps("Buffer")],
202
- ]);
203
- const GENERICS: Array<IClassInfo & { name: string }> = [
204
- "WeakMap",
205
- "WeakSet",
206
- ].map((name) => ({
207
- name,
208
- methods: ["has", "delete"].map((name) => ({
209
- name,
210
- return: "boolean",
211
- })),
212
- }));
213
- const FORBIDDEN: Set<string> = new Set(["Bolean", "Number", "String"]);
214
-
215
- interface IClassInfo {
216
- name?: string;
217
- methods?: IMethod[];
218
- properties?: IProperty[];
219
- }
220
- interface IProperty {
221
- name: string;
222
- type: string;
223
- }
224
- interface IMethod {
225
- name: string;
226
- return: string;
227
- }
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../metadata/Metadata";
4
+
5
+ import { ArrayUtil } from "../../utils/ArrayUtil";
6
+
7
+ import { TypeFactory } from "../TypeFactory";
8
+
9
+ export const iterate_metadata_native =
10
+ (checker: ts.TypeChecker) =>
11
+ (meta: Metadata, type: ts.Type): boolean => {
12
+ const validator = validate(checker)(type);
13
+ const name: string = TypeFactory.getFullName(
14
+ checker,
15
+ type,
16
+ type.getSymbol(),
17
+ );
18
+
19
+ const simple = SIMPLES.get(name);
20
+ if (simple && validator(simple)) {
21
+ if (FORBIDDEN.has(name))
22
+ throw new Error(
23
+ `Error on typia.metadata(): typia does not allow "${name}" class type. Use "${name.toLowerCase()}" type instead.`,
24
+ );
25
+ ArrayUtil.set(meta.natives, name, (str) => str);
26
+ return true;
27
+ }
28
+
29
+ const complicate = COMPLICATES.get(name);
30
+ if (complicate && validator(complicate)) {
31
+ ArrayUtil.set(meta.natives, complicate.name ?? name, (str) => str);
32
+ return true;
33
+ }
34
+
35
+ for (const generic of GENERICS)
36
+ if (
37
+ name.substring(0, generic.name.length) === generic.name &&
38
+ validator(generic)
39
+ ) {
40
+ ArrayUtil.set(meta.natives, generic.name ?? name, (str) => str);
41
+ return true;
42
+ }
43
+ return false;
44
+ };
45
+
46
+ const validate =
47
+ (checker: ts.TypeChecker) => (type: ts.Type) => (info: IClassInfo) =>
48
+ (info.methods ?? []).every((method) => {
49
+ const returnType = TypeFactory.getReturnType(
50
+ checker,
51
+ type,
52
+ method.name,
53
+ );
54
+ return (
55
+ returnType !== null &&
56
+ checker.typeToString(returnType) === method.return
57
+ );
58
+ }) &&
59
+ (info.properties ?? []).every((property) => {
60
+ const prop = checker.getPropertyOfType(type, property.name);
61
+ const propType = prop?.valueDeclaration
62
+ ? checker.getTypeAtLocation(prop?.valueDeclaration)
63
+ : undefined;
64
+ return (
65
+ propType !== undefined &&
66
+ checker.typeToString(propType) === property.type
67
+ );
68
+ });
69
+
70
+ const getBinaryProps = (className: string): IClassInfo => ({
71
+ name: className,
72
+ methods: [
73
+ ...["indexOf", "lastIndexOf"].map((name) => ({
74
+ name,
75
+ return: "number",
76
+ })),
77
+ ...["some", "every"].map((name) => ({
78
+ name,
79
+ return: "boolean",
80
+ })),
81
+ ...["join", "toLocaleString"].map((name) => ({
82
+ name,
83
+ return: "string",
84
+ })),
85
+ ...["reverse", "slice", "subarray"].map((name) => ({
86
+ name,
87
+ return: className,
88
+ })),
89
+ ],
90
+ properties: ["BYTES_PER_ELEMENT", "length", "byteLength", "byteOffset"].map(
91
+ (name) => ({
92
+ name,
93
+ type: "number",
94
+ }),
95
+ ),
96
+ });
97
+ const SIMPLES: Map<string, IClassInfo> = new Map([
98
+ [
99
+ "Date",
100
+ {
101
+ methods: ["getTime", "getFullYear", "getMonth", "getMinutes"].map(
102
+ (name) => ({
103
+ name,
104
+ return: "number",
105
+ }),
106
+ ),
107
+ },
108
+ ],
109
+ [
110
+ "Boolean",
111
+ {
112
+ methods: [
113
+ {
114
+ name: "valueOf",
115
+ return: "boolean",
116
+ },
117
+ ],
118
+ },
119
+ ],
120
+ [
121
+ "Number",
122
+ {
123
+ methods: [
124
+ ...["toFixed", "toExponential", "toPrecision"].map((name) => ({
125
+ name,
126
+ return: "string",
127
+ })),
128
+ {
129
+ name: "valueOf",
130
+ return: "number",
131
+ },
132
+ ],
133
+ },
134
+ ],
135
+ [
136
+ "String",
137
+ {
138
+ methods: [
139
+ "charAt",
140
+ "concat",
141
+ "valueOf",
142
+ "trim",
143
+ "replace",
144
+ "substring",
145
+ ].map((name) => ({
146
+ name,
147
+ return: "string",
148
+ })),
149
+ },
150
+ ],
151
+ ...[
152
+ "Uint8Array",
153
+ "Uint8ClampedArray",
154
+ "Uint16Array",
155
+ "Uint32Array",
156
+ "BigUint64Array",
157
+ "Int8Array",
158
+ "Int16Array",
159
+ "Int32Array",
160
+ "BigInt64Array",
161
+ "Float32Array",
162
+ "Float64Array",
163
+ ].map((name) => [name, getBinaryProps(name)] as const),
164
+ ...["ArrayBuffer", "SharedArrayBuffer"].map((className) => {
165
+ const info: IClassInfo = {
166
+ methods: [
167
+ {
168
+ name: "slice",
169
+ return: className,
170
+ },
171
+ ],
172
+ properties: [
173
+ {
174
+ name: "byteLength",
175
+ type: "number",
176
+ },
177
+ ],
178
+ };
179
+ return [className, info] as const;
180
+ }),
181
+ [
182
+ "DataView",
183
+ {
184
+ methods: [
185
+ "getFloat32",
186
+ "getFloat64",
187
+ "getInt8",
188
+ "getInt16",
189
+ "getInt32",
190
+ "getUint8",
191
+ "getUint16",
192
+ "getUint32",
193
+ ].map((name) => ({
194
+ name,
195
+ return: "number",
196
+ })),
197
+ },
198
+ ],
199
+ ]);
200
+ const COMPLICATES: Map<string, IClassInfo> = new Map([
201
+ [`'buffer'.global.Buffer`, getBinaryProps("Buffer")],
202
+ ]);
203
+ const GENERICS: Array<IClassInfo & { name: string }> = [
204
+ "WeakMap",
205
+ "WeakSet",
206
+ ].map((name) => ({
207
+ name,
208
+ methods: ["has", "delete"].map((name) => ({
209
+ name,
210
+ return: "boolean",
211
+ })),
212
+ }));
213
+ const FORBIDDEN: Set<string> = new Set(["Bolean", "Number", "String"]);
214
+
215
+ interface IClassInfo {
216
+ name?: string;
217
+ methods?: IMethod[];
218
+ properties?: IProperty[];
219
+ }
220
+ interface IProperty {
221
+ name: string;
222
+ type: string;
223
+ }
224
+ interface IMethod {
225
+ name: string;
226
+ return: string;
227
+ }
@@ -1,45 +1,48 @@
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 { emplace_metadata_object } from "./emplace_metadata_object";
11
- import { iterate_metadata } from "./iterate_metadata";
12
-
13
- export const iterate_metadata_object =
14
- (checker: ts.TypeChecker) =>
15
- (options: MetadataFactory.IOptions) =>
16
- (collection: MetadataCollection) =>
17
- (meta: Metadata, type: ts.Type, parentResolved: boolean): boolean => {
18
- const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
19
- if (!filter(ts.TypeFlags.Object) && !type.isIntersection())
20
- return false;
21
-
22
- if (type.isIntersection()) {
23
- const fakeCollection = new MetadataCollection();
24
- const fakeSchema: Metadata = Metadata.initialize();
25
-
26
- type.types.forEach((t) =>
27
- iterate_metadata(checker)(options)(fakeCollection)(
28
- fakeSchema,
29
- t,
30
- parentResolved,
31
- ),
32
- );
33
- if (
34
- fakeSchema.objects.length === 0 ||
35
- fakeSchema.objects.length !== fakeSchema.size()
36
- )
37
- return true;
38
- }
39
-
40
- const obj: MetadataObject = emplace_metadata_object(checker)(options)(
41
- collection,
42
- )(type, meta.nullable);
43
- ArrayUtil.add(meta.objects, obj, (elem) => elem.name === obj.name);
44
- return true;
45
- };
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 { emplace_metadata_object } from "./emplace_metadata_object";
11
+ import { iterate_metadata } from "./iterate_metadata";
12
+
13
+ export const iterate_metadata_object =
14
+ (checker: ts.TypeChecker) =>
15
+ (options: MetadataFactory.IOptions) =>
16
+ (collection: MetadataCollection) =>
17
+ (meta: Metadata, type: ts.Type, parentResolved: boolean): boolean => {
18
+ const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
19
+ if (
20
+ !filter(ts.TypeFlags.Object) &&
21
+ !type.isIntersection() &&
22
+ (type as any).intrinsicName !== "object"
23
+ )
24
+ return false;
25
+ else if (type.isIntersection()) {
26
+ const fakeCollection = new MetadataCollection();
27
+ const fakeSchema: Metadata = Metadata.initialize();
28
+
29
+ type.types.forEach((t) =>
30
+ iterate_metadata(checker)(options)(fakeCollection)(
31
+ fakeSchema,
32
+ t,
33
+ parentResolved,
34
+ ),
35
+ );
36
+ if (
37
+ fakeSchema.objects.length === 0 ||
38
+ fakeSchema.objects.length !== fakeSchema.size()
39
+ )
40
+ return true;
41
+ }
42
+
43
+ const obj: MetadataObject = emplace_metadata_object(checker)(options)(
44
+ collection,
45
+ )(type, meta.nullable);
46
+ ArrayUtil.add(meta.objects, obj, (elem) => elem.name === obj.name);
47
+ return true;
48
+ };
@@ -1,27 +1,27 @@
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 { explore_metadata } from "./explore_metadata";
11
-
12
- export const iterate_metadata_resolve =
13
- (checker: ts.TypeChecker) =>
14
- (options: MetadataFactory.IOptions) =>
15
- (collection: MetadataCollection) =>
16
- (meta: Metadata, type: ts.Type, parentResolved: boolean): boolean => {
17
- if (options.resolve === true && parentResolved === false) {
18
- const resolved: ts.Type | null = TypeFactory.resolve(checker, type);
19
- if (resolved !== null) {
20
- Writable(meta).resolved = explore_metadata(checker)(options)(
21
- collection,
22
- )(resolved, true);
23
- return true;
24
- }
25
- }
26
- return false;
27
- };
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 { explore_metadata } from "./explore_metadata";
11
+
12
+ export const iterate_metadata_resolve =
13
+ (checker: ts.TypeChecker) =>
14
+ (options: MetadataFactory.IOptions) =>
15
+ (collection: MetadataCollection) =>
16
+ (meta: Metadata, type: ts.Type, parentResolved: boolean): boolean => {
17
+ if (options.resolve === true && parentResolved === false) {
18
+ const resolved: ts.Type | null = TypeFactory.resolve(checker, type);
19
+ if (resolved !== null) {
20
+ Writable(meta).resolved = explore_metadata(checker)(options)(
21
+ collection,
22
+ )(resolved, true);
23
+ return true;
24
+ }
25
+ }
26
+ return false;
27
+ };
@@ -1,33 +1,33 @@
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_set =
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) !== "Set<" || generic?.length !== 1)
24
- return false;
25
-
26
- const key: ts.Type = generic[0]!;
27
- ArrayUtil.set(
28
- meta.sets,
29
- explore_metadata(checker)(options)(collection)(key, false),
30
- (elem) => elem.getName(),
31
- );
32
- return true;
33
- };
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_set =
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) !== "Set<" || generic?.length !== 1)
24
+ return false;
25
+
26
+ const key: ts.Type = generic[0]!;
27
+ ArrayUtil.set(
28
+ meta.sets,
29
+ explore_metadata(checker)(options)(collection)(key, false),
30
+ (elem) => elem.getName(),
31
+ );
32
+ return true;
33
+ };