typia 5.2.7-dev.20231109 → 5.3.0-dev.20231117

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 (113) hide show
  1. package/lib/AssertionGuard.d.ts +1 -0
  2. package/lib/{schemas/metadata/IMetadataCollection.js → AssertionGuard.js} +1 -1
  3. package/lib/AssertionGuard.js.map +1 -0
  4. package/lib/factories/MetadataCollection.d.ts +2 -2
  5. package/lib/factories/MetadataFactory.js +3 -2
  6. package/lib/factories/MetadataFactory.js.map +1 -1
  7. package/lib/factories/internal/metadata/MetadataHelper.js +3 -2
  8. package/lib/factories/internal/metadata/MetadataHelper.js.map +1 -1
  9. package/lib/factories/internal/metadata/iterate_metadata_constant.js +13 -8
  10. package/lib/factories/internal/metadata/iterate_metadata_constant.js.map +1 -1
  11. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +8 -5
  12. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  13. package/lib/functional/$from.d.ts +3 -0
  14. package/lib/functional/$from.js +9 -0
  15. package/lib/functional/$from.js.map +1 -0
  16. package/lib/functional/Namespace.js +7 -0
  17. package/lib/functional/Namespace.js.map +1 -1
  18. package/lib/module.d.ts +209 -0
  19. package/lib/module.js +23 -5
  20. package/lib/module.js.map +1 -1
  21. package/lib/programmers/AssertProgrammer.d.ts +4 -1
  22. package/lib/programmers/AssertProgrammer.js +16 -9
  23. package/lib/programmers/AssertProgrammer.js.map +1 -1
  24. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  25. package/lib/programmers/internal/check_string.js +7 -4
  26. package/lib/programmers/internal/check_string.js.map +1 -1
  27. package/lib/programmers/internal/metadata_to_pattern.js +3 -1
  28. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  29. package/lib/reflect.d.ts +3 -0
  30. package/lib/reflect.js +13 -0
  31. package/lib/reflect.js.map +1 -0
  32. package/lib/schemas/metadata/IMetadataApplication.d.ts +2 -2
  33. package/lib/schemas/metadata/{IMetadataCollection.d.ts → IMetadataComponents.d.ts} +1 -1
  34. package/lib/schemas/metadata/IMetadataComponents.js +3 -0
  35. package/lib/schemas/metadata/IMetadataComponents.js.map +1 -0
  36. package/lib/schemas/metadata/IMetadataConstant.d.ts +1 -1
  37. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +2 -2
  38. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  39. package/lib/schemas/metadata/Metadata.js +81 -167
  40. package/lib/schemas/metadata/Metadata.js.map +1 -1
  41. package/lib/schemas/metadata/MetadataAlias.js +1 -1
  42. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  43. package/lib/schemas/metadata/MetadataApplication.d.ts +13 -0
  44. package/lib/schemas/metadata/MetadataApplication.js +30 -0
  45. package/lib/schemas/metadata/MetadataApplication.js.map +1 -0
  46. package/lib/schemas/metadata/MetadataArrayType.js +1 -1
  47. package/lib/schemas/metadata/MetadataArrayType.js.map +1 -1
  48. package/lib/schemas/metadata/MetadataAtomic.d.ts +1 -0
  49. package/lib/schemas/metadata/MetadataAtomic.js +28 -1
  50. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -1
  51. package/lib/schemas/metadata/MetadataComponents.d.ts +16 -0
  52. package/lib/schemas/metadata/MetadataComponents.js +151 -0
  53. package/lib/schemas/metadata/MetadataComponents.js.map +1 -0
  54. package/lib/schemas/metadata/MetadataConstant.d.ts +9 -1
  55. package/lib/schemas/metadata/MetadataConstant.js +29 -0
  56. package/lib/schemas/metadata/MetadataConstant.js.map +1 -1
  57. package/lib/schemas/metadata/MetadataEscaped.js +4 -4
  58. package/lib/schemas/metadata/MetadataEscaped.js.map +1 -1
  59. package/lib/schemas/metadata/MetadataObject.js +2 -2
  60. package/lib/schemas/metadata/MetadataObject.js.map +1 -1
  61. package/lib/schemas/metadata/MetadataProperty.js +4 -4
  62. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  63. package/lib/schemas/metadata/MetadataTupleType.js +1 -1
  64. package/lib/schemas/metadata/MetadataTupleType.js.map +1 -1
  65. package/lib/transformers/CallExpressionTransformer.js +35 -8
  66. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  67. package/lib/transformers/features/AssertTransformer.d.ts +4 -1
  68. package/lib/transformers/features/AssertTransformer.js +9 -3
  69. package/lib/transformers/features/AssertTransformer.js.map +1 -1
  70. package/lib/transformers/features/CreateAssertTransformer.d.ts +4 -1
  71. package/lib/transformers/features/CreateAssertTransformer.js +9 -3
  72. package/lib/transformers/features/CreateAssertTransformer.js.map +1 -1
  73. package/lib/transformers/features/reflect/ReflectMetadataTransformer.d.ts +5 -0
  74. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js +58 -0
  75. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -0
  76. package/package.json +1 -1
  77. package/src/AssertionGuard.ts +1 -0
  78. package/src/factories/MetadataCollection.ts +2 -2
  79. package/src/factories/MetadataFactory.ts +7 -4
  80. package/src/factories/internal/metadata/MetadataHelper.ts +7 -4
  81. package/src/factories/internal/metadata/iterate_metadata_constant.ts +10 -8
  82. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +9 -8
  83. package/src/functional/$from.ts +5 -0
  84. package/src/functional/Namespace.ts +7 -0
  85. package/src/module.ts +253 -19
  86. package/src/programmers/AssertProgrammer.ts +31 -11
  87. package/src/programmers/helpers/ProtobufUtil.ts +3 -2
  88. package/src/programmers/internal/check_string.ts +5 -2
  89. package/src/programmers/internal/metadata_to_pattern.ts +3 -1
  90. package/src/reflect.ts +24 -0
  91. package/src/schemas/metadata/IMetadataApplication.ts +2 -2
  92. package/src/schemas/metadata/{IMetadataCollection.ts → IMetadataComponents.ts} +1 -1
  93. package/src/schemas/metadata/IMetadataConstant.ts +1 -1
  94. package/src/schemas/metadata/IMetadataTypeTag.ts +2 -2
  95. package/src/schemas/metadata/Metadata.ts +17 -85
  96. package/src/schemas/metadata/MetadataAlias.ts +1 -1
  97. package/src/schemas/metadata/MetadataApplication.ts +44 -0
  98. package/src/schemas/metadata/MetadataArrayType.ts +1 -1
  99. package/src/schemas/metadata/MetadataAtomic.ts +28 -1
  100. package/src/schemas/metadata/MetadataComponents.ts +98 -0
  101. package/src/schemas/metadata/MetadataConstant.ts +44 -1
  102. package/src/schemas/metadata/MetadataEscaped.ts +4 -4
  103. package/src/schemas/metadata/MetadataObject.ts +2 -2
  104. package/src/schemas/metadata/MetadataProperty.ts +4 -7
  105. package/src/schemas/metadata/MetadataTupleType.ts +1 -1
  106. package/src/transformers/CallExpressionTransformer.ts +25 -8
  107. package/src/transformers/features/AssertTransformer.ts +11 -3
  108. package/src/transformers/features/CreateAssertTransformer.ts +9 -3
  109. package/src/transformers/features/{misc/MetadataTransformer.ts → reflect/ReflectMetadataTransformer.ts} +19 -5
  110. package/lib/schemas/metadata/IMetadataCollection.js.map +0 -1
  111. package/lib/transformers/features/misc/MetadataTransformer.d.ts +0 -5
  112. package/lib/transformers/features/misc/MetadataTransformer.js +0 -54
  113. package/lib/transformers/features/misc/MetadataTransformer.js.map +0 -1
@@ -1,22 +1,17 @@
1
1
  import { ClassProperties } from "../../typings/ClassProperties";
2
- import { Writable } from "../../typings/Writable";
3
2
 
4
3
  import { ArrayUtil } from "../../utils/ArrayUtil";
5
4
 
6
5
  import { IMetadata } from "./IMetadata";
7
- import { IMetadataCollection } from "./IMetadataCollection";
8
6
  import { IMetadataDictionary } from "./IMetadataDictionary";
9
7
  import { IMetadataTypeTag } from "./IMetadataTypeTag";
10
8
  import { MetadataAlias } from "./MetadataAlias";
11
9
  import { MetadataArray } from "./MetadataArray";
12
- import { MetadataArrayType } from "./MetadataArrayType";
13
10
  import { MetadataAtomic } from "./MetadataAtomic";
14
11
  import { MetadataConstant } from "./MetadataConstant";
15
12
  import { MetadataEscaped } from "./MetadataEscaped";
16
13
  import { MetadataObject } from "./MetadataObject";
17
- import { MetadataProperty } from "./MetadataProperty";
18
14
  import { MetadataTuple } from "./MetadataTuple";
19
- import { MetadataTupleType } from "./MetadataTupleType";
20
15
 
21
16
  export class Metadata {
22
17
  public any: boolean;
@@ -86,7 +81,7 @@ export class Metadata {
86
81
  * @internal
87
82
  */
88
83
  public static initialize(parentResolved: boolean = false): Metadata {
89
- const meta: Metadata = this.create({
84
+ const meta: Metadata = Metadata.create({
90
85
  any: false,
91
86
  nullable: false,
92
87
  required: true,
@@ -120,10 +115,7 @@ export class Metadata {
120
115
  functional: this.functional,
121
116
 
122
117
  atomics: this.atomics.map((a) => a.toJSON()),
123
- constants: this.constants.map((c) => ({
124
- type: c.type,
125
- values: c.values.slice() as any,
126
- })),
118
+ constants: this.constants.map((c) => c.toJSON()),
127
119
  templates: this.templates.map((tpl) =>
128
120
  tpl.map((meta) => meta.toJSON()),
129
121
  ),
@@ -150,85 +142,24 @@ export class Metadata {
150
142
  };
151
143
  }
152
144
 
153
- public static from(
154
- meta: IMetadata,
155
- collection: IMetadataCollection,
156
- ): Metadata {
157
- const dict: IMetadataDictionary = {
158
- objects: new Map(
159
- collection.objects.map((obj) => [
160
- obj.name,
161
- MetadataObject._From_without_properties(obj),
162
- ]),
163
- ),
164
- aliases: new Map(
165
- collection.aliases.map((alias) => [
166
- alias.name,
167
- MetadataAlias._From_without_value(alias),
168
- ]),
169
- ),
170
- arrays: new Map(
171
- collection.arrays.map((arr) => [
172
- arr.name,
173
- MetadataArrayType._From_without_value(arr),
174
- ]),
175
- ),
176
- tuples: new Map(
177
- collection.tuples.map((tpl) => [
178
- tpl.name,
179
- MetadataTupleType._From_without_elements(tpl),
180
- ]),
181
- ),
182
- };
183
-
184
- for (const obj of collection.objects) {
185
- const initialized = dict.objects.get(obj.name)!;
186
- initialized.properties.push(
187
- ...obj.properties.map((prop) =>
188
- MetadataProperty._From(prop, dict),
189
- ),
190
- );
191
- }
192
- for (const alias of collection.aliases)
193
- Writable(dict.aliases.get(alias.name)!).value = this._From(
194
- alias.value,
195
- dict,
196
- );
197
- for (const array of collection.arrays)
198
- Writable(dict.arrays.get(array.name)!).value = this._From(
199
- array.value,
200
- dict,
201
- );
202
- for (const tuple of collection.tuples)
203
- Writable(dict.tuples.get(tuple.name)!).elements =
204
- tuple.elements.map((elem) => this._From(elem, dict));
205
-
206
- return this._From(meta, dict);
207
- }
208
-
209
- /**
210
- * @internal
211
- */
212
- public static _From(meta: IMetadata, dict: IMetadataDictionary): Metadata {
213
- return this.create({
145
+ public static from(meta: IMetadata, dict: IMetadataDictionary): Metadata {
146
+ return Metadata.create({
214
147
  any: meta.any,
215
148
  required: meta.required,
216
149
  optional: meta.optional,
217
150
  nullable: meta.nullable,
218
151
  functional: meta.functional,
219
152
 
220
- constants: meta.constants.slice(),
221
- atomics: meta.atomics.map((a) =>
222
- MetadataAtomic.create({ type: a.type, tags: a.tags }),
223
- ),
153
+ constants: meta.constants.map(MetadataConstant.from),
154
+ atomics: meta.atomics.map(MetadataAtomic.from),
224
155
  templates: meta.templates.map((tpl) =>
225
- tpl.map((meta) => this._From(meta, dict)),
156
+ tpl.map((meta) => this.from(meta, dict)),
226
157
  ),
227
158
  escaped: meta.escaped
228
- ? MetadataEscaped._From(meta.escaped, dict)
159
+ ? MetadataEscaped.from(meta.escaped, dict)
229
160
  : null,
230
161
 
231
- rest: meta.rest ? this._From(meta.rest, dict) : null,
162
+ rest: meta.rest ? this.from(meta.rest, dict) : null,
232
163
  arrays: meta.arrays.map((ref) => {
233
164
  const type = dict.arrays.get(ref.name);
234
165
  if (type === undefined)
@@ -269,10 +200,10 @@ export class Metadata {
269
200
  }),
270
201
 
271
202
  natives: meta.natives.slice(),
272
- sets: meta.sets.map((meta) => this._From(meta, dict)),
203
+ sets: meta.sets.map((meta) => this.from(meta, dict)),
273
204
  maps: meta.maps.map((entry) => ({
274
- key: this._From(entry.key, dict),
275
- value: this._From(entry.value, dict),
205
+ key: this.from(entry.key, dict),
206
+ value: this.from(entry.value, dict),
276
207
  })),
277
208
  });
278
209
  }
@@ -565,10 +496,11 @@ export namespace Metadata {
565
496
  const target: MetadataConstant = ArrayUtil.take(
566
497
  output.constants,
567
498
  (elem) => elem.type === constant.type,
568
- () => ({
569
- type: constant.type,
570
- values: [],
571
- }),
499
+ () =>
500
+ MetadataConstant.create({
501
+ type: constant.type,
502
+ values: [],
503
+ }),
572
504
  );
573
505
  for (const value of constant.values)
574
506
  ArrayUtil.add(target.values, value);
@@ -38,7 +38,7 @@ export class MetadataAlias {
38
38
  * @internal
39
39
  */
40
40
  public static _From_without_value(props: Omit<IMetadataAlias, "value">) {
41
- return this.create({
41
+ return MetadataAlias.create({
42
42
  name: props.name,
43
43
  value: null!,
44
44
  description: props.description,
@@ -0,0 +1,44 @@
1
+ import { ClassProperties } from "../../typings/ClassProperties";
2
+
3
+ import { IMetadataApplication } from "./IMetadataApplication";
4
+ import { Metadata } from "./Metadata";
5
+ import { MetadataComponents } from "./MetadataComponents";
6
+
7
+ export class MetadataApplication {
8
+ public readonly metadatas: Metadata[];
9
+ public readonly components: MetadataComponents;
10
+
11
+ /**
12
+ * @hidden
13
+ */
14
+ private constructor(props: ClassProperties<MetadataApplication>) {
15
+ this.metadatas = props.metadatas;
16
+ this.components = props.components;
17
+ }
18
+
19
+ /**
20
+ * @internal
21
+ */
22
+ public static create(
23
+ props: ClassProperties<MetadataApplication>,
24
+ ): MetadataApplication {
25
+ return new MetadataApplication(props);
26
+ }
27
+
28
+ public static from(app: IMetadataApplication): MetadataApplication {
29
+ const components: MetadataComponents = MetadataComponents.from(
30
+ app.components,
31
+ );
32
+ const metadatas: Metadata[] = app.metadatas.map((metadata) =>
33
+ Metadata.from(metadata, components.dictionary),
34
+ );
35
+ return MetadataApplication.create({ metadatas, components });
36
+ }
37
+
38
+ public toJSON(): IMetadataApplication {
39
+ return {
40
+ metadatas: this.metadatas.map((metadata) => metadata.toJSON()),
41
+ components: this.components.toJSON(),
42
+ };
43
+ }
44
+ }
@@ -27,7 +27,7 @@ export class MetadataArrayType {
27
27
  public static _From_without_value(
28
28
  props: Omit<IMetadataArrayType, "value">,
29
29
  ): MetadataArrayType {
30
- return this.create({
30
+ return MetadataArrayType.create({
31
31
  name: props.name,
32
32
  value: null!,
33
33
  index: props.index,
@@ -23,6 +23,27 @@ export class MetadataAtomic {
23
23
  return new MetadataAtomic(props);
24
24
  }
25
25
 
26
+ public static from(json: IMetadataAtomic): MetadataAtomic {
27
+ return MetadataAtomic.create({
28
+ type: json.type,
29
+ tags: json.tags.map((row) =>
30
+ row.map((tag) => ({
31
+ target: tag.target,
32
+ name: tag.name,
33
+ kind: tag.kind,
34
+ value:
35
+ typeof tag.value === "object" &&
36
+ tag.value?.type === "bigint" &&
37
+ typeof tag.value.value === "string"
38
+ ? BigInt(tag.value.value)
39
+ : tag.value,
40
+ validate: tag.validate,
41
+ exclusive: tag.exclusive,
42
+ })),
43
+ ),
44
+ });
45
+ }
46
+
26
47
  public getName(): string {
27
48
  return (this.name_ ??= (() => {
28
49
  if (this.tags.length === 0) return this.type;
@@ -49,7 +70,13 @@ export class MetadataAtomic {
49
70
  target: tag.target,
50
71
  name: tag.name,
51
72
  kind: tag.kind,
52
- value: tag.value,
73
+ value:
74
+ typeof tag.value === "bigint"
75
+ ? {
76
+ type: "bigint",
77
+ value: tag.value.toString(),
78
+ }
79
+ : tag.value,
53
80
  validate: tag.validate,
54
81
  exclusive: tag.exclusive,
55
82
  })),
@@ -0,0 +1,98 @@
1
+ import { ClassProperties } from "../../typings/ClassProperties";
2
+ import { Writable } from "../../typings/Writable";
3
+
4
+ import { IMetadataComponents } from "./IMetadataComponents";
5
+ import { IMetadataDictionary } from "./IMetadataDictionary";
6
+ import { Metadata } from "./Metadata";
7
+ import { MetadataAlias } from "./MetadataAlias";
8
+ import { MetadataArrayType } from "./MetadataArrayType";
9
+ import { MetadataObject } from "./MetadataObject";
10
+ import { MetadataProperty } from "./MetadataProperty";
11
+ import { MetadataTupleType } from "./MetadataTupleType";
12
+
13
+ export class MetadataComponents {
14
+ public readonly aliases: MetadataAlias[];
15
+ public readonly objects: MetadataObject[];
16
+ public readonly arrays: MetadataArrayType[];
17
+ public readonly tuples: MetadataTupleType[];
18
+ public readonly dictionary: IMetadataDictionary;
19
+
20
+ private constructor(props: ClassProperties<MetadataComponents>) {
21
+ this.aliases = props.aliases;
22
+ this.objects = props.objects;
23
+ this.arrays = props.arrays;
24
+ this.tuples = props.tuples;
25
+ this.dictionary = props.dictionary;
26
+ }
27
+
28
+ public static from(json: IMetadataComponents): MetadataComponents {
29
+ // INITIALIZE COMPONENTS
30
+ const dictionary: IMetadataDictionary = {
31
+ objects: new Map(
32
+ json.objects.map((obj) => [
33
+ obj.name,
34
+ MetadataObject._From_without_properties(obj),
35
+ ]),
36
+ ),
37
+ aliases: new Map(
38
+ json.aliases.map((alias) => [
39
+ alias.name,
40
+ MetadataAlias._From_without_value(alias),
41
+ ]),
42
+ ),
43
+ arrays: new Map(
44
+ json.arrays.map((arr) => [
45
+ arr.name,
46
+ MetadataArrayType._From_without_value(arr),
47
+ ]),
48
+ ),
49
+ tuples: new Map(
50
+ json.tuples.map((tpl) => [
51
+ tpl.name,
52
+ MetadataTupleType._From_without_elements(tpl),
53
+ ]),
54
+ ),
55
+ };
56
+
57
+ // CONSTRUCT METADATA OF THEM
58
+ for (const obj of json.objects)
59
+ dictionary.objects
60
+ .get(obj.name)!
61
+ .properties.push(
62
+ ...obj.properties.map((prop) =>
63
+ MetadataProperty.from(prop, dictionary),
64
+ ),
65
+ );
66
+ for (const alias of json.aliases)
67
+ Writable(dictionary.aliases.get(alias.name)!).value = Metadata.from(
68
+ alias.value,
69
+ dictionary,
70
+ );
71
+ for (const array of json.arrays)
72
+ Writable(dictionary.arrays.get(array.name)!).value = Metadata.from(
73
+ array.value,
74
+ dictionary,
75
+ );
76
+ for (const tuple of json.tuples)
77
+ Writable(dictionary.tuples.get(tuple.name)!).elements =
78
+ tuple.elements.map((elem) => Metadata.from(elem, dictionary));
79
+
80
+ // FINALIZE
81
+ return new MetadataComponents({
82
+ aliases: [...dictionary.aliases.values()],
83
+ objects: [...dictionary.objects.values()],
84
+ arrays: [...dictionary.arrays.values()],
85
+ tuples: [...dictionary.tuples.values()],
86
+ dictionary,
87
+ });
88
+ }
89
+
90
+ public toJSON(): IMetadataComponents {
91
+ return {
92
+ aliases: this.aliases.map((alias) => alias.toJSON()),
93
+ objects: this.objects.map((object) => object.toJSON()),
94
+ arrays: this.arrays.map((array) => array.toJSON()),
95
+ tuples: this.tuples.map((tuple) => tuple.toJSON()),
96
+ };
97
+ }
98
+ }
@@ -1,3 +1,46 @@
1
+ import { ClassProperties } from "../../typings/ClassProperties";
2
+
1
3
  import { IMetadataConstant } from "./IMetadataConstant";
4
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
5
+
6
+ export class MetadataConstant {
7
+ public readonly type: "boolean" | "bigint" | "number" | "string";
8
+ public readonly values: boolean[] | bigint[] | number[] | string[];
9
+
10
+ /**
11
+ * @internal
12
+ */
13
+ public tags?: IMetadataTypeTag[][] | undefined;
14
+
15
+ private constructor(props: ClassProperties<MetadataConstant>) {
16
+ this.type = props.type;
17
+ this.values = props.values;
18
+ this.tags = props.tags;
19
+ }
20
+
21
+ public static create(
22
+ props: ClassProperties<MetadataConstant>,
23
+ ): MetadataConstant {
24
+ return new MetadataConstant(props);
25
+ }
26
+
27
+ public static from(json: IMetadataConstant): MetadataConstant {
28
+ return MetadataConstant.create({
29
+ type: json.type,
30
+ values:
31
+ json.type === "bigint"
32
+ ? json.values.map((v) => BigInt(v))
33
+ : (json.values as any[]),
34
+ });
35
+ }
2
36
 
3
- export type MetadataConstant = IMetadataConstant;
37
+ public toJSON(): IMetadataConstant {
38
+ return {
39
+ type: this.type,
40
+ values:
41
+ this.type === "bigint"
42
+ ? this.values.map((v) => v.toString())
43
+ : (this.values as any[]),
44
+ };
45
+ }
46
+ }
@@ -19,13 +19,13 @@ export class MetadataEscaped {
19
19
  /**
20
20
  * @internal
21
21
  */
22
- public static _From(
22
+ public static from(
23
23
  props: IMetadataEscaped,
24
24
  dict: IMetadataDictionary,
25
25
  ): MetadataEscaped {
26
- return this.create({
27
- original: Metadata._From(props.original, dict),
28
- returns: Metadata._From(props.returns, dict),
26
+ return MetadataEscaped.create({
27
+ original: Metadata.from(props.original, dict),
28
+ returns: Metadata.from(props.returns, dict),
29
29
  });
30
30
  }
31
31
 
@@ -37,7 +37,7 @@ export class MetadataObject {
37
37
  this.index = props.index;
38
38
  this.validated = props.validated;
39
39
  this.recursive = props.recursive;
40
- this.nullables = [];
40
+ this.nullables = props.nullables.slice();
41
41
 
42
42
  this.tagged_ = false;
43
43
  }
@@ -57,7 +57,7 @@ export class MetadataObject {
57
57
  public static _From_without_properties(
58
58
  obj: IMetadataObject,
59
59
  ): MetadataObject {
60
- return this.create({
60
+ return MetadataObject.create({
61
61
  name: obj.name,
62
62
  properties: [],
63
63
  description: obj.description,
@@ -36,13 +36,10 @@ export class MetadataProperty {
36
36
  /**
37
37
  * @internal
38
38
  */
39
- public static _From(
40
- property: IMetadataProperty,
41
- dict: IMetadataDictionary,
42
- ) {
43
- return this.create({
44
- key: Metadata._From(property.key, dict),
45
- value: Metadata._From(property.value, dict),
39
+ public static from(property: IMetadataProperty, dict: IMetadataDictionary) {
40
+ return MetadataProperty.create({
41
+ key: Metadata.from(property.key, dict),
42
+ value: Metadata.from(property.value, dict),
46
43
  description: property.description,
47
44
  jsDocTags: property.jsDocTags.slice(),
48
45
  });
@@ -33,7 +33,7 @@ export class MetadataTupleType {
33
33
  public static _From_without_elements(
34
34
  props: Omit<IMetadataTupleType, "elements">,
35
35
  ): MetadataTupleType {
36
- return this.create({
36
+ return MetadataTupleType.create({
37
37
  name: props.name,
38
38
  index: props.index,
39
39
  elements: null!,
@@ -45,7 +45,6 @@ import { JsonIsStringifyTransformer } from "./features/json/JsonIsStringifyTrans
45
45
  import { JsonStringifyTransformer } from "./features/json/JsonStringifyTransformer";
46
46
  import { JsonValidateParseTransformer } from "./features/json/JsonValidateParseTransformer";
47
47
  import { JsonValidateStringifyTransformer } from "./features/json/JsonValidateStringifyTransformer";
48
- import { MetadataTransformer } from "./features/misc/MetadataTransformer";
49
48
  import { MiscAssertCloneTransformer } from "./features/misc/MiscAssertCloneTransformer";
50
49
  import { MiscAssertPruneTransformer } from "./features/misc/MiscAssertPruneTransformer";
51
50
  import { MiscCloneTransformer } from "./features/misc/MiscCloneTransformer";
@@ -88,6 +87,7 @@ import { ProtobufIsEncodeTransformer } from "./features/protobuf/ProtobufIsEncod
88
87
  import { ProtobufMessageTransformer } from "./features/protobuf/ProtobufMessageTransformer";
89
88
  import { ProtobufValidateDecodeTransformer } from "./features/protobuf/ProtobufValidateDecodeTransformer";
90
89
  import { ProtobufValidateEncodeTransformer } from "./features/protobuf/ProtobufValidateEncodeTransformer";
90
+ import { ReflectMetadataTransformer } from "./features/reflect/ReflectMetadataTransformer";
91
91
 
92
92
  export namespace CallExpressionTransformer {
93
93
  export const transform =
@@ -162,26 +162,40 @@ type Task = (
162
162
  const FUNCTORS: Record<string, Record<string, () => Task>> = {
163
163
  module: {
164
164
  // BASIC
165
- assert: () => AssertTransformer.transform(false),
166
- assertType: () => AssertTransformer.transform(false),
165
+ assert: () =>
166
+ AssertTransformer.transform({ equals: false, guard: false }),
167
+ assertGuard: () =>
168
+ AssertTransformer.transform({ equals: false, guard: true }),
169
+ assertType: () =>
170
+ AssertTransformer.transform({ equals: false, guard: false }),
167
171
  is: () => IsTransformer.transform(false),
168
172
  validate: () => ValidateTransformer.transform(false),
169
173
 
170
174
  // STRICT
171
- assertEquals: () => AssertTransformer.transform(true),
175
+ assertEquals: () =>
176
+ AssertTransformer.transform({ equals: true, guard: false }),
177
+ assertGuardEquals: () =>
178
+ AssertTransformer.transform({ equals: true, guard: true }),
172
179
  equals: () => IsTransformer.transform(true),
173
180
  validateEquals: () => ValidateTransformer.transform(true),
174
181
 
175
182
  // RANDOM + INTERNAL
176
183
  random: () => RandomTransformer.transform,
177
- metadata: () => (P) => () => MetadataTransformer.transform(P),
184
+ metadata: () => ReflectMetadataTransformer.transform,
178
185
 
179
186
  // FACTORIES
180
- createAssert: () => CreateAssertTransformer.transform(false),
181
- createAssertType: () => CreateAssertTransformer.transform(false),
187
+ createAssert: () =>
188
+ CreateAssertTransformer.transform({ equals: false, guard: false }),
189
+ createAssertGuard: () =>
190
+ CreateAssertTransformer.transform({ equals: false, guard: true }),
191
+ createAssertType: () =>
192
+ CreateAssertTransformer.transform({ equals: false, guard: false }),
182
193
  createIs: () => CreateIsTransformer.transform(false),
183
194
  createValidate: () => CreateValidateTransformer.transform(false),
184
- createAssertEquals: () => CreateAssertTransformer.transform(true),
195
+ createAssertEquals: () =>
196
+ CreateAssertTransformer.transform({ equals: true, guard: false }),
197
+ createAssertGuardEquals: () =>
198
+ CreateAssertTransformer.transform({ equals: true, guard: true }),
185
199
  createEquals: () => CreateIsTransformer.transform(true),
186
200
  createValidateEquals: () => CreateValidateTransformer.transform(true),
187
201
  createRandom: () => CreateRandomTransformer.transform,
@@ -270,6 +284,9 @@ const FUNCTORS: Record<string, Record<string, () => Task>> = {
270
284
  createValidateDecode: () =>
271
285
  ProtobufCreateValidateDecodeTransformer.transform,
272
286
  },
287
+ reflect: {
288
+ metadata: () => ReflectMetadataTransformer.transform,
289
+ },
273
290
  misc: {
274
291
  literals: () => (project) => () =>
275
292
  MiscLiteralsTransformer.transform(project),
@@ -3,9 +3,17 @@ import { AssertProgrammer } from "../../programmers/AssertProgrammer";
3
3
  import { GenericTransformer } from "../internal/GenericTransformer";
4
4
 
5
5
  export namespace AssertTransformer {
6
- export const transform = (equals: boolean) =>
7
- GenericTransformer.scalar(equals ? "assertEquals" : "assert")(
6
+ export const transform = (props: { equals: boolean; guard: boolean }) =>
7
+ GenericTransformer.scalar(
8
+ props.equals
9
+ ? props.guard
10
+ ? "assertGuardEquals"
11
+ : "assertEquals"
12
+ : props.guard
13
+ ? "assertGuard"
14
+ : "assert",
15
+ )(
8
16
  (project) => (modulo) =>
9
- AssertProgrammer.write(project)(modulo)(equals),
17
+ AssertProgrammer.write(project)(modulo)(props),
10
18
  );
11
19
  }
@@ -3,11 +3,17 @@ import { AssertProgrammer } from "../../programmers/AssertProgrammer";
3
3
  import { GenericTransformer } from "../internal/GenericTransformer";
4
4
 
5
5
  export namespace CreateAssertTransformer {
6
- export const transform = (equals: boolean) =>
6
+ export const transform = (props: { equals: boolean; guard: boolean }) =>
7
7
  GenericTransformer.factory(
8
- equals ? "createAssertEquals" : "createAssert",
8
+ props.equals
9
+ ? props.guard
10
+ ? "createAssertGuardEquals"
11
+ : "createAssertEquals"
12
+ : props.guard
13
+ ? "createAssertGuard"
14
+ : "createAssert",
9
15
  )(
10
16
  (project) => (modulo) =>
11
- AssertProgrammer.write(project)(modulo)(equals),
17
+ AssertProgrammer.write(project)(modulo)(props),
12
18
  );
13
19
  }
@@ -1,8 +1,10 @@
1
1
  import ts from "typescript";
2
2
 
3
+ import { IdentifierFactory } from "../../../factories/IdentifierFactory";
3
4
  import { LiteralFactory } from "../../../factories/LiteralFactory";
4
5
  import { MetadataCollection } from "../../../factories/MetadataCollection";
5
6
  import { MetadataFactory } from "../../../factories/MetadataFactory";
7
+ import { TypeFactory } from "../../../factories/TypeFactory";
6
8
 
7
9
  import { IMetadataApplication } from "../../../schemas/metadata/IMetadataApplication";
8
10
  import { Metadata } from "../../../schemas/metadata/Metadata";
@@ -10,9 +12,10 @@ import { Metadata } from "../../../schemas/metadata/Metadata";
10
12
  import { IProject } from "../../IProject";
11
13
  import { TransformerError } from "../../TransformerError";
12
14
 
13
- export namespace MetadataTransformer {
15
+ export namespace ReflectMetadataTransformer {
14
16
  export const transform =
15
17
  (project: IProject) =>
18
+ (modulo: ts.LeftHandSideExpression) =>
16
19
  (expression: ts.CallExpression): ts.Expression => {
17
20
  if (!expression.typeArguments?.length)
18
21
  throw new TransformerError({
@@ -32,7 +35,7 @@ export namespace MetadataTransformer {
32
35
  );
33
36
  if (types.some((t) => t.isTypeParameter()))
34
37
  throw new TransformerError({
35
- code: "typia.metadata",
38
+ code: "typia.reflect.metadata",
36
39
  message: "non-specified generic argument(s).",
37
40
  });
38
41
 
@@ -48,7 +51,7 @@ export namespace MetadataTransformer {
48
51
  absorb: true,
49
52
  })(collection)(type);
50
53
  if (result.success === false)
51
- throw TransformerError.from("typia.metadata")(
54
+ throw TransformerError.from("typia.reflect.metadata")(
52
55
  result.errors,
53
56
  );
54
57
  return result.data;
@@ -57,8 +60,19 @@ export namespace MetadataTransformer {
57
60
  // CONVERT TO PRIMITIVE TYPE
58
61
  const app: IMetadataApplication = {
59
62
  metadatas: metadatas.map((metadata) => metadata.toJSON()),
60
- collection: collection.toJSON(),
63
+ components: collection.toJSON(),
61
64
  };
62
- return LiteralFactory.generate(app);
65
+ return ts.factory.createCallExpression(
66
+ IdentifierFactory.access(
67
+ ts.factory.createParenthesizedExpression(
68
+ ts.factory.createAsExpression(
69
+ modulo,
70
+ TypeFactory.keyword("any"),
71
+ ),
72
+ ),
73
+ )("from"),
74
+ undefined,
75
+ [LiteralFactory.generate(app)],
76
+ );
63
77
  };
64
78
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"IMetadataCollection.js","sourceRoot":"","sources":["../../../src/schemas/metadata/IMetadataCollection.ts"],"names":[],"mappings":""}