typia 7.0.0-dev.20241011-2 → 7.0.0-dev.20241012

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 (164) hide show
  1. package/lib/factories/MetadataCollection.d.ts +4 -4
  2. package/lib/factories/MetadataCollection.js +6 -4
  3. package/lib/factories/MetadataCollection.js.map +1 -1
  4. package/lib/factories/MetadataFactory.d.ts +2 -2
  5. package/lib/factories/MetadataFactory.js +8 -2
  6. package/lib/factories/MetadataFactory.js.map +1 -1
  7. package/lib/factories/MetadataTypeTagFactory.d.ts +2 -2
  8. package/lib/factories/MetadataTypeTagFactory.js +6 -6
  9. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  10. package/lib/factories/MetadataTypeTagSchemaFactory.d.ts +2 -2
  11. package/lib/factories/MetadataTypeTagSchemaFactory.js +1 -1
  12. package/lib/factories/MetadataTypeTagSchemaFactory.js.map +1 -1
  13. package/lib/factories/ProtobufFactory.js +12 -12
  14. package/lib/factories/ProtobufFactory.js.map +1 -1
  15. package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +2 -2
  16. package/lib/factories/internal/metadata/iterate_metadata_collection.js +2 -1
  17. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  18. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -2
  19. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +5 -2
  20. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  21. package/lib/factories/internal/metadata/iterate_metadata_object.js +5 -1
  22. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata_sort.js +6 -2
  24. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  25. package/lib/programmers/CheckerProgrammer.d.ts +2 -2
  26. package/lib/programmers/CheckerProgrammer.js +5 -3
  27. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  28. package/lib/programmers/FeatureProgrammer.d.ts +5 -5
  29. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  30. package/lib/programmers/IsProgrammer.d.ts +2 -2
  31. package/lib/programmers/RandomProgrammer.js +1 -1
  32. package/lib/programmers/RandomProgrammer.js.map +1 -1
  33. package/lib/programmers/helpers/ProtobufUtil.d.ts +2 -2
  34. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  35. package/lib/programmers/helpers/PruneJoiner.d.ts +2 -2
  36. package/lib/programmers/helpers/RandomJoiner.d.ts +2 -2
  37. package/lib/programmers/helpers/UnionExplorer.d.ts +3 -3
  38. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  39. package/lib/programmers/helpers/UnionPredicator.d.ts +3 -3
  40. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  41. package/lib/programmers/http/HttpFormDataProgrammer.js +1 -1
  42. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  43. package/lib/programmers/http/HttpHeadersProgrammer.js +1 -1
  44. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  45. package/lib/programmers/http/HttpQueryProgrammer.js +2 -2
  46. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  47. package/lib/programmers/internal/application_union_discriminator.js +2 -2
  48. package/lib/programmers/internal/application_union_discriminator.js.map +1 -1
  49. package/lib/programmers/internal/application_v30_alias.js +1 -1
  50. package/lib/programmers/internal/application_v30_alias.js.map +1 -1
  51. package/lib/programmers/internal/application_v30_schema.js +1 -1
  52. package/lib/programmers/internal/application_v30_schema.js.map +1 -1
  53. package/lib/programmers/internal/application_v31_alias.js +1 -1
  54. package/lib/programmers/internal/application_v31_alias.js.map +1 -1
  55. package/lib/programmers/internal/application_v31_schema.js +1 -1
  56. package/lib/programmers/internal/application_v31_schema.js.map +1 -1
  57. package/lib/programmers/internal/llm_schema_station.js +2 -2
  58. package/lib/programmers/internal/llm_schema_station.js.map +1 -1
  59. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  60. package/lib/programmers/json/JsonApplicationProgrammer.js +6 -5
  61. package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
  62. package/lib/programmers/json/JsonStringifyProgrammer.js +3 -3
  63. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  64. package/lib/programmers/llm/LlmApplicationProgrammer.js +7 -6
  65. package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
  66. package/lib/programmers/llm/LlmSchemaProgrammer.js +1 -1
  67. package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
  68. package/lib/programmers/misc/MiscCloneProgrammer.js +1 -1
  69. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  70. package/lib/programmers/misc/MiscPruneProgrammer.js +1 -1
  71. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  72. package/lib/programmers/notations/NotationGeneralProgrammer.js +1 -1
  73. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  74. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +6 -6
  75. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  76. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +1 -1
  77. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  78. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +3 -3
  79. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  80. package/lib/schemas/metadata/IMetadata.d.ts +4 -1
  81. package/lib/schemas/metadata/IMetadataArray.d.ts +1 -2
  82. package/lib/schemas/metadata/IMetadataComponents.d.ts +2 -2
  83. package/lib/schemas/metadata/IMetadataDictionary.d.ts +2 -2
  84. package/lib/schemas/metadata/IMetadataObject.d.ts +2 -8
  85. package/lib/schemas/metadata/IMetadataObjectType.d.ts +11 -0
  86. package/lib/schemas/metadata/IMetadataObjectType.js +3 -0
  87. package/lib/schemas/metadata/IMetadataObjectType.js.map +1 -0
  88. package/lib/schemas/metadata/IMetadataTuple.d.ts +1 -2
  89. package/lib/schemas/metadata/Metadata.js +14 -15
  90. package/lib/schemas/metadata/Metadata.js.map +1 -1
  91. package/lib/schemas/metadata/MetadataArray.js +1 -1
  92. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  93. package/lib/schemas/metadata/MetadataComponents.d.ts +2 -2
  94. package/lib/schemas/metadata/MetadataComponents.js +2 -2
  95. package/lib/schemas/metadata/MetadataComponents.js.map +1 -1
  96. package/lib/schemas/metadata/MetadataObject.d.ts +8 -12
  97. package/lib/schemas/metadata/MetadataObject.js +44 -82
  98. package/lib/schemas/metadata/MetadataObject.js.map +1 -1
  99. package/lib/schemas/metadata/MetadataObjectType.d.ts +20 -0
  100. package/lib/schemas/metadata/MetadataObjectType.js +106 -0
  101. package/lib/schemas/metadata/MetadataObjectType.js.map +1 -0
  102. package/lib/schemas/metadata/MetadataTuple.js +1 -1
  103. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  104. package/lib/transformers/TransformerError.js.map +1 -1
  105. package/package.json +1 -1
  106. package/src/factories/MetadataCollection.ts +12 -10
  107. package/src/factories/MetadataFactory.ts +11 -5
  108. package/src/factories/MetadataTypeTagFactory.ts +13 -12
  109. package/src/factories/MetadataTypeTagSchemaFactory.ts +4 -4
  110. package/src/factories/ProtobufFactory.ts +14 -14
  111. package/src/factories/internal/metadata/emplace_metadata_object.ts +2 -2
  112. package/src/factories/internal/metadata/iterate_metadata_collection.ts +4 -3
  113. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +2 -2
  114. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +5 -2
  115. package/src/factories/internal/metadata/iterate_metadata_object.ts +10 -2
  116. package/src/factories/internal/metadata/iterate_metadata_sort.ts +6 -2
  117. package/src/programmers/CheckerProgrammer.ts +7 -5
  118. package/src/programmers/FeatureProgrammer.ts +9 -6
  119. package/src/programmers/IsProgrammer.ts +2 -2
  120. package/src/programmers/RandomProgrammer.ts +3 -3
  121. package/src/programmers/helpers/ProtobufUtil.ts +2 -2
  122. package/src/programmers/helpers/PruneJoiner.ts +2 -2
  123. package/src/programmers/helpers/RandomJoiner.ts +2 -2
  124. package/src/programmers/helpers/UnionExplorer.ts +4 -4
  125. package/src/programmers/helpers/UnionPredicator.ts +5 -3
  126. package/src/programmers/http/HttpFormDataProgrammer.ts +3 -3
  127. package/src/programmers/http/HttpHeadersProgrammer.ts +3 -3
  128. package/src/programmers/http/HttpQueryProgrammer.ts +4 -4
  129. package/src/programmers/internal/application_union_discriminator.ts +2 -2
  130. package/src/programmers/internal/application_v30_alias.ts +1 -1
  131. package/src/programmers/internal/application_v30_object.ts +3 -3
  132. package/src/programmers/internal/application_v30_schema.ts +1 -1
  133. package/src/programmers/internal/application_v31_alias.ts +1 -1
  134. package/src/programmers/internal/application_v31_object.ts +3 -3
  135. package/src/programmers/internal/application_v31_schema.ts +1 -1
  136. package/src/programmers/internal/decode_union_object.ts +4 -4
  137. package/src/programmers/internal/feature_object_entries.ts +2 -2
  138. package/src/programmers/internal/llm_schema_object.ts +2 -2
  139. package/src/programmers/internal/llm_schema_station.ts +2 -2
  140. package/src/programmers/internal/prune_object_properties.ts +2 -2
  141. package/src/programmers/json/JsonApplicationProgrammer.ts +3 -3
  142. package/src/programmers/json/JsonStringifyProgrammer.ts +5 -5
  143. package/src/programmers/llm/LlmApplicationProgrammer.ts +4 -4
  144. package/src/programmers/llm/LlmSchemaProgrammer.ts +1 -1
  145. package/src/programmers/misc/MiscCloneProgrammer.ts +3 -3
  146. package/src/programmers/misc/MiscPruneProgrammer.ts +3 -3
  147. package/src/programmers/notations/NotationGeneralProgrammer.ts +3 -3
  148. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +11 -11
  149. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +8 -8
  150. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +8 -8
  151. package/src/schemas/metadata/IMetadata.ts +4 -1
  152. package/src/schemas/metadata/IMetadataArray.ts +1 -2
  153. package/src/schemas/metadata/IMetadataComponents.ts +2 -2
  154. package/src/schemas/metadata/IMetadataDictionary.ts +2 -2
  155. package/src/schemas/metadata/IMetadataObject.ts +6 -13
  156. package/src/schemas/metadata/IMetadataObjectType.ts +13 -0
  157. package/src/schemas/metadata/IMetadataTuple.ts +1 -2
  158. package/src/schemas/metadata/Metadata.ts +16 -16
  159. package/src/schemas/metadata/MetadataArray.ts +1 -1
  160. package/src/schemas/metadata/MetadataComponents.ts +3 -3
  161. package/src/schemas/metadata/MetadataObject.ts +26 -117
  162. package/src/schemas/metadata/MetadataObjectType.ts +149 -0
  163. package/src/schemas/metadata/MetadataTuple.ts +1 -1
  164. package/src/transformers/TransformerError.ts +8 -7
@@ -1,13 +1,6 @@
1
- import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
- import { IMetadataProperty } from "./IMetadataProperty";
3
-
4
- export interface IMetadataObject {
5
- name: string;
6
- properties: IMetadataProperty[];
7
- description?: undefined | string;
8
- jsDocTags: IJsDocTagInfo[];
9
-
10
- index: number;
11
- recursive: boolean;
12
- nullables: boolean[];
13
- }
1
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
2
+
3
+ export interface IMetadataObject {
4
+ name: string;
5
+ tags: IMetadataTypeTag[][];
6
+ }
@@ -0,0 +1,13 @@
1
+ import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
+ import { IMetadataProperty } from "./IMetadataProperty";
3
+
4
+ export interface IMetadataObjectType {
5
+ name: string;
6
+ properties: IMetadataProperty[];
7
+ description?: undefined | string;
8
+ jsDocTags: IJsDocTagInfo[];
9
+
10
+ index: number;
11
+ recursive: boolean;
12
+ nullables: boolean[];
13
+ }
@@ -1,7 +1,6 @@
1
- import { IMetadataTupleType } from "./IMetadataTupleType";
2
1
  import { IMetadataTypeTag } from "./IMetadataTypeTag";
3
2
 
4
3
  export interface IMetadataTuple {
5
- type: IMetadataTupleType;
4
+ name: string;
6
5
  tags: IMetadataTypeTag[][];
7
6
  }
@@ -12,6 +12,7 @@ import { MetadataConstant } from "./MetadataConstant";
12
12
  import { MetadataEscaped } from "./MetadataEscaped";
13
13
  import { MetadataFunction } from "./MetadataFunction";
14
14
  import { MetadataObject } from "./MetadataObject";
15
+ import { MetadataObjectType } from "./MetadataObjectType";
15
16
  import { MetadataTemplate } from "./MetadataTemplate";
16
17
  import { MetadataTuple } from "./MetadataTuple";
17
18
 
@@ -122,15 +123,9 @@ export class Metadata {
122
123
  escaped: this.escaped ? this.escaped.toJSON() : null,
123
124
 
124
125
  rest: this.rest ? this.rest.toJSON() : null,
125
- arrays: this.arrays.map((array) => ({
126
- name: array.type.name,
127
- tags: array.tags.map((r) => r.slice()),
128
- })),
129
- tuples: this.tuples.map((tuple) => ({
130
- name: tuple.type.name,
131
- tags: tuple.tags.map((r) => r.slice()),
132
- })),
133
- objects: this.objects.map((obj) => obj.name),
126
+ arrays: this.arrays.map((array) => array.toJSON()),
127
+ tuples: this.tuples.map((tuple) => tuple.toJSON()),
128
+ objects: this.objects.map((obj) => obj.toJSON()),
134
129
  aliases: this.aliases.map((alias) => alias.name),
135
130
 
136
131
  natives: this.natives.slice(),
@@ -178,13 +173,16 @@ export class Metadata {
178
173
  tags: t.tags.map((r) => r.slice()),
179
174
  });
180
175
  }),
181
- objects: meta.objects.map((name) => {
182
- const found = dict.objects.get(name);
176
+ objects: meta.objects.map((obj) => {
177
+ const found = dict.objects.get(obj.name);
183
178
  if (found === undefined)
184
179
  throw new RangeError(
185
180
  `Error on Metadata.from(): failed to find object "${name}".`,
186
181
  );
187
- return found;
182
+ return MetadataObject.create({
183
+ type: found,
184
+ tags: obj.tags.map((r) => r.slice()),
185
+ });
188
186
  }),
189
187
  aliases: meta.aliases.map((alias) => {
190
188
  const found = dict.aliases.get(alias);
@@ -194,7 +192,6 @@ export class Metadata {
194
192
  );
195
193
  return found;
196
194
  }),
197
-
198
195
  natives: meta.natives.slice(),
199
196
  sets: meta.sets.map((meta) => this.from(meta, dict)),
200
197
  maps: meta.maps.map((entry) => ({
@@ -418,7 +415,10 @@ export namespace Metadata {
418
415
 
419
416
  // OBJECTS
420
417
  for (const yo of y.objects)
421
- if (x.objects.some((xo) => MetadataObject.covers(xo, yo)) === false)
418
+ if (
419
+ x.objects.some((xo) => MetadataObjectType.covers(xo.type, yo.type)) ===
420
+ false
421
+ )
422
422
  return false;
423
423
 
424
424
  // ALIASES
@@ -528,7 +528,7 @@ export namespace Metadata {
528
528
  ArrayUtil.add(target.values, value, (a, b) => a.value === b.value);
529
529
  }
530
530
  for (const obj of y.objects)
531
- ArrayUtil.set(output.objects, obj, (elem) => elem.name);
531
+ ArrayUtil.set(output.objects, obj, (elem) => elem.type.name);
532
532
  for (const alias of y.aliases)
533
533
  ArrayUtil.set(output.aliases, alias, (elem) => elem.name);
534
534
 
@@ -563,7 +563,7 @@ const getName = (metadata: Metadata): string => {
563
563
  if (metadata.rest !== null) elements.push(`...${metadata.rest.getName()}`);
564
564
  for (const tuple of metadata.tuples) elements.push(tuple.type.name);
565
565
  for (const array of metadata.arrays) elements.push(array.getName());
566
- for (const object of metadata.objects) elements.push(object.name);
566
+ for (const object of metadata.objects) elements.push(object.getName());
567
567
  for (const alias of metadata.aliases) elements.push(alias.name);
568
568
  if (metadata.escaped !== null) elements.push(metadata.escaped.getName());
569
569
 
@@ -42,7 +42,7 @@ export class MetadataArray {
42
42
 
43
43
  public toJSON(): IMetadataArray {
44
44
  return {
45
- type: this.type.toJSON(),
45
+ name: this.type.name,
46
46
  tags: this.tags.map((row) => row.slice()),
47
47
  };
48
48
  }
@@ -6,13 +6,13 @@ import { IMetadataDictionary } from "./IMetadataDictionary";
6
6
  import { Metadata } from "./Metadata";
7
7
  import { MetadataAlias } from "./MetadataAlias";
8
8
  import { MetadataArrayType } from "./MetadataArrayType";
9
- import { MetadataObject } from "./MetadataObject";
9
+ import { MetadataObjectType } from "./MetadataObjectType";
10
10
  import { MetadataProperty } from "./MetadataProperty";
11
11
  import { MetadataTupleType } from "./MetadataTupleType";
12
12
 
13
13
  export class MetadataComponents {
14
14
  public readonly aliases: MetadataAlias[];
15
- public readonly objects: MetadataObject[];
15
+ public readonly objects: MetadataObjectType[];
16
16
  public readonly arrays: MetadataArrayType[];
17
17
  public readonly tuples: MetadataTupleType[];
18
18
  public readonly dictionary: IMetadataDictionary;
@@ -31,7 +31,7 @@ export class MetadataComponents {
31
31
  objects: new Map(
32
32
  json.objects.map((obj) => [
33
33
  obj.name,
34
- MetadataObject._From_without_properties(obj),
34
+ MetadataObjectType._From_without_properties(obj),
35
35
  ]),
36
36
  ),
37
37
  aliases: new Map(
@@ -1,139 +1,48 @@
1
1
  import { ClassProperties } from "../../typings/ClassProperties";
2
2
 
3
- import { IJsDocTagInfo } from "./IJsDocTagInfo";
4
3
  import { IMetadataObject } from "./IMetadataObject";
5
- import { MetadataProperty } from "./MetadataProperty";
4
+ import { IMetadataTypeTag } from "./IMetadataTypeTag";
5
+ import { MetadataObjectType } from "./MetadataObjectType";
6
6
 
7
7
  export class MetadataObject {
8
- public readonly name: string;
9
- public readonly properties: Array<MetadataProperty>;
10
- public readonly description: string | undefined;
11
- public readonly jsDocTags: IJsDocTagInfo[];
12
-
13
- public readonly index: number;
14
- public validated: boolean;
15
- public recursive: boolean;
16
- public nullables: boolean[] = [];
17
-
18
- /**
19
- * @internal
20
- */
21
- public tagged_: boolean = false;
8
+ public readonly type: MetadataObjectType;
9
+ public readonly tags: IMetadataTypeTag[][];
10
+ private name_?: string;
22
11
 
23
- /**
24
- * @internal
25
- */
26
- private literal_?: boolean;
27
-
28
- /* -----------------------------------------------------------
29
- CONSTRUCTORS
30
- ----------------------------------------------------------- */
31
12
  /**
32
13
  * @hidden
33
14
  */
34
- private constructor(props: Omit<ClassProperties<MetadataObject>, "tagged_">) {
35
- this.name = props.name;
36
- this.properties = props.properties;
37
- this.description = props.description;
38
- this.jsDocTags = props.jsDocTags;
39
-
40
- this.index = props.index;
41
- this.validated = props.validated;
42
- this.recursive = props.recursive;
43
- this.nullables = props.nullables.slice();
44
-
45
- this.tagged_ = false;
15
+ private constructor(props: ClassProperties<MetadataObject>) {
16
+ this.type = props.type;
17
+ this.tags = props.tags;
46
18
  }
47
19
 
48
- /**
49
- * @internal
50
- */
51
- public static create(
52
- props: Omit<ClassProperties<MetadataObject>, "tagged_">,
53
- ) {
20
+ public static create(props: ClassProperties<MetadataObject>): MetadataObject {
54
21
  return new MetadataObject(props);
55
22
  }
56
23
 
57
- /**
58
- * @internal
59
- */
60
- public static _From_without_properties(obj: IMetadataObject): MetadataObject {
61
- return MetadataObject.create({
62
- name: obj.name,
63
- properties: [],
64
- description: obj.description,
65
- jsDocTags: obj.jsDocTags,
66
-
67
- index: obj.index,
68
- validated: false,
69
- recursive: obj.recursive,
70
- nullables: obj.nullables.slice(),
71
- });
72
- }
73
-
74
- public isPlain(level: number = 0): boolean {
75
- return (
76
- this.recursive === false &&
77
- this.properties.length < 10 &&
78
- this.properties.every(
79
- (property) =>
80
- property.key.isSoleLiteral() &&
81
- property.value.size() === 1 &&
82
- property.value.isRequired() === true &&
83
- property.value.nullable === false &&
84
- (property.value.atomics.length === 1 ||
85
- (level < 1 &&
86
- property.value.objects.length === 1 &&
87
- property.value.objects[0]!.isPlain(level + 1))),
88
- )
89
- );
90
- }
91
-
92
- public isLiteral(): boolean {
93
- return (this.literal_ ??= (() => {
94
- if (this.recursive === true) return false;
95
- return (
96
- this.name === "__type" ||
97
- this.name === "__object" ||
98
- this.name.startsWith("__type.") ||
99
- this.name.startsWith("__object.") ||
100
- this.name.includes("readonly [")
101
- );
24
+ public getName(): string {
25
+ return (this.name_ ??= (() => {
26
+ if (this.tags.length === 0) return this.type.name;
27
+ else if (this.tags.length === 1) {
28
+ const str: string = [
29
+ this.type.name,
30
+ ...this.tags[0]!.map((t) => t.name),
31
+ ].join(" & ");
32
+ return `(${str})`;
33
+ }
34
+ const rows: string[] = this.tags.map((row) => {
35
+ const str: string = row.map((t) => t.name).join(" & ");
36
+ return row.length === 1 ? str : `(${str})`;
37
+ });
38
+ return `(${this.type.name} & (${rows.join(" | ")}))`;
102
39
  })());
103
40
  }
104
41
 
105
42
  public toJSON(): IMetadataObject {
106
43
  return {
107
- name: this.name,
108
- properties: this.properties.map((property) => property.toJSON()),
109
- description: this.description,
110
- jsDocTags: this.jsDocTags,
111
-
112
- index: this.index,
113
- recursive: this.recursive,
114
- nullables: this.nullables.slice(),
44
+ name: this.type.name,
45
+ tags: this.tags.map((row) => row.slice()),
115
46
  };
116
47
  }
117
48
  }
118
-
119
- /**
120
- * @internal
121
- */
122
- export namespace MetadataObject {
123
- export const intersects = (x: MetadataObject, y: MetadataObject): boolean =>
124
- x.properties.some(
125
- (prop) =>
126
- y.properties.find(
127
- (oppo) => prop.key.getName() === oppo.key.getName(),
128
- ) !== undefined,
129
- );
130
-
131
- export const covers = (x: MetadataObject, y: MetadataObject): boolean =>
132
- x.properties.length >= y.properties.length &&
133
- x.properties.every(
134
- (prop) =>
135
- y.properties.find(
136
- (oppo) => prop.key.getName() === oppo.key.getName(),
137
- ) !== undefined,
138
- );
139
- }
@@ -0,0 +1,149 @@
1
+ import { ClassProperties } from "../../typings/ClassProperties";
2
+
3
+ import { IJsDocTagInfo } from "./IJsDocTagInfo";
4
+ import { IMetadataObjectType } from "./IMetadataObjectType";
5
+ import { MetadataProperty } from "./MetadataProperty";
6
+
7
+ export class MetadataObjectType {
8
+ public readonly name: string;
9
+ public readonly properties: Array<MetadataProperty>;
10
+ public readonly description: string | undefined;
11
+ public readonly jsDocTags: IJsDocTagInfo[];
12
+
13
+ public readonly index: number;
14
+ public validated: boolean;
15
+ public recursive: boolean;
16
+ public nullables: boolean[] = [];
17
+
18
+ /**
19
+ * @internal
20
+ */
21
+ public tagged_: boolean = false;
22
+
23
+ /**
24
+ * @internal
25
+ */
26
+ private literal_?: boolean;
27
+
28
+ /* -----------------------------------------------------------
29
+ CONSTRUCTORS
30
+ ----------------------------------------------------------- */
31
+ /**
32
+ * @hidden
33
+ */
34
+ private constructor(
35
+ props: Omit<ClassProperties<MetadataObjectType>, "tagged_">,
36
+ ) {
37
+ this.name = props.name;
38
+ this.properties = props.properties;
39
+ this.description = props.description;
40
+ this.jsDocTags = props.jsDocTags;
41
+
42
+ this.index = props.index;
43
+ this.validated = props.validated;
44
+ this.recursive = props.recursive;
45
+ this.nullables = props.nullables.slice();
46
+
47
+ this.tagged_ = false;
48
+ }
49
+
50
+ /**
51
+ * @internal
52
+ */
53
+ public static create(
54
+ props: Omit<ClassProperties<MetadataObjectType>, "tagged_">,
55
+ ) {
56
+ return new MetadataObjectType(props);
57
+ }
58
+
59
+ /**
60
+ * @internal
61
+ */
62
+ public static _From_without_properties(
63
+ obj: IMetadataObjectType,
64
+ ): MetadataObjectType {
65
+ return MetadataObjectType.create({
66
+ name: obj.name,
67
+ properties: [],
68
+ description: obj.description,
69
+ jsDocTags: obj.jsDocTags,
70
+
71
+ index: obj.index,
72
+ validated: false,
73
+ recursive: obj.recursive,
74
+ nullables: obj.nullables.slice(),
75
+ });
76
+ }
77
+
78
+ public isPlain(level: number = 0): boolean {
79
+ return (
80
+ this.recursive === false &&
81
+ this.properties.length < 10 &&
82
+ this.properties.every(
83
+ (property) =>
84
+ property.key.isSoleLiteral() &&
85
+ property.value.size() === 1 &&
86
+ property.value.isRequired() === true &&
87
+ property.value.nullable === false &&
88
+ (property.value.atomics.length === 1 ||
89
+ (level < 1 &&
90
+ property.value.objects.length === 1 &&
91
+ property.value.objects[0]!.type.isPlain(level + 1))),
92
+ )
93
+ );
94
+ }
95
+
96
+ public isLiteral(): boolean {
97
+ return (this.literal_ ??= (() => {
98
+ if (this.recursive === true) return false;
99
+ return (
100
+ this.name === "__type" ||
101
+ this.name === "__object" ||
102
+ this.name.startsWith("__type.") ||
103
+ this.name.startsWith("__object.") ||
104
+ this.name.includes("readonly [")
105
+ );
106
+ })());
107
+ }
108
+
109
+ public toJSON(): IMetadataObjectType {
110
+ return {
111
+ name: this.name,
112
+ properties: this.properties.map((property) => property.toJSON()),
113
+ description: this.description,
114
+ jsDocTags: this.jsDocTags,
115
+
116
+ index: this.index,
117
+ recursive: this.recursive,
118
+ nullables: this.nullables.slice(),
119
+ };
120
+ }
121
+ }
122
+
123
+ /**
124
+ * @internal
125
+ */
126
+ export namespace MetadataObjectType {
127
+ export const intersects = (
128
+ x: MetadataObjectType,
129
+ y: MetadataObjectType,
130
+ ): boolean =>
131
+ x.properties.some(
132
+ (prop) =>
133
+ y.properties.find(
134
+ (oppo) => prop.key.getName() === oppo.key.getName(),
135
+ ) !== undefined,
136
+ );
137
+
138
+ export const covers = (
139
+ x: MetadataObjectType,
140
+ y: MetadataObjectType,
141
+ ): boolean =>
142
+ x.properties.length >= y.properties.length &&
143
+ x.properties.every(
144
+ (prop) =>
145
+ y.properties.find(
146
+ (oppo) => prop.key.getName() === oppo.key.getName(),
147
+ ) !== undefined,
148
+ );
149
+ }
@@ -25,7 +25,7 @@ export class MetadataTuple {
25
25
 
26
26
  public toJSON(): IMetadataTuple {
27
27
  return {
28
- type: this.type.toJSON(),
28
+ name: this.type.name,
29
29
  tags: this.tags.map((row) => row.slice()),
30
30
  };
31
31
  }
@@ -1,6 +1,6 @@
1
1
  import { MetadataFactory } from "../factories/MetadataFactory";
2
2
 
3
- import { MetadataObject } from "../schemas/metadata/MetadataObject";
3
+ import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
4
4
 
5
5
  import { Escaper } from "../utils/Escaper";
6
6
 
@@ -50,10 +50,11 @@ export namespace TransformerError {
50
50
  });
51
51
  };
52
52
 
53
- const join = (object: MetadataObject) => (key: string | object | null) => {
54
- if (key === null) return object.name;
55
- else if (typeof key === "object") return `${object.name}[key]`;
56
- else if (Escaper.variable(key)) return `${object.name}.${key}`;
57
- return `${object.name}[${JSON.stringify(key)}]`;
58
- };
53
+ const join =
54
+ (object: MetadataObjectType) => (key: string | object | null) => {
55
+ if (key === null) return object.name;
56
+ else if (typeof key === "object") return `${object.name}[key]`;
57
+ else if (Escaper.variable(key)) return `${object.name}.${key}`;
58
+ return `${object.name}[${JSON.stringify(key)}]`;
59
+ };
59
60
  }