typia 7.0.0-dev.20241012 → 7.0.0-dev.20241018

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 (236) hide show
  1. package/lib/factories/JsonMetadataFactory.js +3 -2
  2. package/lib/factories/JsonMetadataFactory.js.map +1 -1
  3. package/lib/factories/MetadataCollection.d.ts +3 -3
  4. package/lib/factories/MetadataCollection.js +2 -2
  5. package/lib/factories/MetadataCollection.js.map +1 -1
  6. package/lib/factories/MetadataFactory.d.ts +2 -2
  7. package/lib/factories/MetadataFactory.js +3 -3
  8. package/lib/factories/MetadataFactory.js.map +1 -1
  9. package/lib/factories/MetadataTypeTagFactory.d.ts +3 -2
  10. package/lib/factories/MetadataTypeTagFactory.js +26 -3
  11. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  12. package/lib/factories/ProtobufFactory.js +829 -156
  13. package/lib/factories/ProtobufFactory.js.map +1 -1
  14. package/lib/factories/internal/metadata/IMetadataIteratorProps.d.ts +1 -0
  15. package/lib/factories/internal/metadata/MetadataHelper.js +1 -1
  16. package/lib/factories/internal/metadata/MetadataHelper.js.map +1 -1
  17. package/lib/factories/internal/metadata/emplace_metadata_alias.d.ts +2 -2
  18. package/lib/factories/internal/metadata/emplace_metadata_object.js +5 -5
  19. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  20. package/lib/factories/internal/metadata/explore_metadata.js +2 -0
  21. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  22. package/lib/factories/internal/metadata/iterate_metadata.js +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  24. package/lib/factories/internal/metadata/iterate_metadata_alias.js +8 -2
  25. package/lib/factories/internal/metadata/iterate_metadata_alias.js.map +1 -1
  26. package/lib/factories/internal/metadata/iterate_metadata_collection.js +6 -6
  27. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +262 -137
  29. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  30. package/lib/factories/internal/metadata/iterate_metadata_map.js +4 -2
  31. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  32. package/lib/factories/internal/metadata/iterate_metadata_native.js +27 -11
  33. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  34. package/lib/factories/internal/metadata/iterate_metadata_set.js +8 -1
  35. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  36. package/lib/factories/internal/metadata/iterate_metadata_sort.js +1 -1
  37. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  38. package/lib/factories/internal/metadata/iterate_metadata_template.js +1 -1
  39. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
  40. package/lib/programmers/CheckerProgrammer.js +5 -5
  41. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  42. package/lib/programmers/RandomProgrammer.js +12 -12
  43. package/lib/programmers/RandomProgrammer.js.map +1 -1
  44. package/lib/programmers/helpers/AtomicPredicator.js +3 -3
  45. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  46. package/lib/programmers/helpers/ProtobufUtil.d.ts +5 -4
  47. package/lib/programmers/helpers/ProtobufUtil.js +215 -92
  48. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  49. package/lib/programmers/helpers/UnionExplorer.d.ts +4 -2
  50. package/lib/programmers/helpers/UnionExplorer.js +1 -1
  51. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  52. package/lib/programmers/http/HttpFormDataProgrammer.js +6 -6
  53. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  54. package/lib/programmers/internal/application_escaped.js +2 -2
  55. package/lib/programmers/internal/application_escaped.js.map +1 -1
  56. package/lib/programmers/internal/application_v30_alias.js +13 -8
  57. package/lib/programmers/internal/application_v30_alias.js.map +1 -1
  58. package/lib/programmers/internal/application_v30_native.js +17 -10
  59. package/lib/programmers/internal/application_v30_native.js.map +1 -1
  60. package/lib/programmers/internal/application_v30_object.js +16 -6
  61. package/lib/programmers/internal/application_v30_object.js.map +1 -1
  62. package/lib/programmers/internal/application_v30_schema.js +24 -17
  63. package/lib/programmers/internal/application_v30_schema.js.map +1 -1
  64. package/lib/programmers/internal/application_v31_alias.js +12 -11
  65. package/lib/programmers/internal/application_v31_alias.js.map +1 -1
  66. package/lib/programmers/internal/application_v31_native.js +17 -10
  67. package/lib/programmers/internal/application_v31_native.js.map +1 -1
  68. package/lib/programmers/internal/application_v31_object.js +13 -6
  69. package/lib/programmers/internal/application_v31_object.js.map +1 -1
  70. package/lib/programmers/internal/application_v31_schema.js +23 -16
  71. package/lib/programmers/internal/application_v31_schema.js.map +1 -1
  72. package/lib/programmers/internal/check_dynamic_key.js +4 -4
  73. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  74. package/lib/programmers/internal/check_native.js +3 -3
  75. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  76. package/lib/programmers/internal/llm_schema_escaped.js +2 -2
  77. package/lib/programmers/internal/llm_schema_escaped.js.map +1 -1
  78. package/lib/programmers/internal/llm_schema_object.js +18 -14
  79. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  80. package/lib/programmers/internal/llm_schema_station.js +8 -8
  81. package/lib/programmers/internal/llm_schema_station.js.map +1 -1
  82. package/lib/programmers/json/JsonSchemasProgrammer.js +5 -5
  83. package/lib/programmers/json/JsonSchemasProgrammer.js.map +1 -1
  84. package/lib/programmers/json/JsonStringifyProgrammer.js +18 -17
  85. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  86. package/lib/programmers/llm/LlmSchemaProgrammer.js +6 -6
  87. package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
  88. package/lib/programmers/misc/MiscCloneProgrammer.js +7 -5
  89. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  90. package/lib/programmers/misc/MiscPruneProgrammer.js +1 -1
  91. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  92. package/lib/programmers/notations/NotationGeneralProgrammer.js +6 -4
  93. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  94. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +15 -12
  95. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  96. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +6 -4
  97. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  98. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +51 -34
  99. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  100. package/lib/schemas/metadata/IMetadata.d.ts +14 -18
  101. package/lib/schemas/metadata/IMetadataAlias.d.ts +2 -7
  102. package/lib/schemas/metadata/IMetadataAliasType.d.ts +10 -0
  103. package/lib/schemas/metadata/IMetadataAliasType.js +3 -0
  104. package/lib/schemas/metadata/IMetadataAliasType.js.map +1 -0
  105. package/lib/schemas/metadata/IMetadataComponents.d.ts +2 -2
  106. package/lib/schemas/metadata/IMetadataConstantValue.d.ts +1 -1
  107. package/lib/schemas/metadata/IMetadataDictionary.d.ts +2 -2
  108. package/lib/schemas/metadata/IMetadataMap.d.ts +7 -0
  109. package/lib/schemas/metadata/{IMetadataEntry.js → IMetadataMap.js} +1 -1
  110. package/lib/schemas/metadata/IMetadataMap.js.map +1 -0
  111. package/lib/schemas/metadata/IMetadataNative.d.ts +5 -0
  112. package/lib/schemas/metadata/IMetadataNative.js +3 -0
  113. package/lib/schemas/metadata/IMetadataNative.js.map +1 -0
  114. package/lib/schemas/metadata/IMetadataSet.d.ts +6 -0
  115. package/lib/schemas/metadata/IMetadataSet.js +3 -0
  116. package/lib/schemas/metadata/IMetadataSet.js.map +1 -0
  117. package/lib/schemas/metadata/IMetadataTemplate.d.ts +1 -1
  118. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +1 -1
  119. package/lib/schemas/metadata/Metadata.d.ts +6 -9
  120. package/lib/schemas/metadata/Metadata.js +136 -98
  121. package/lib/schemas/metadata/Metadata.js.map +1 -1
  122. package/lib/schemas/metadata/MetadataAlias.d.ts +8 -11
  123. package/lib/schemas/metadata/MetadataAlias.js +48 -33
  124. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  125. package/lib/schemas/metadata/MetadataAliasType.d.ts +16 -0
  126. package/lib/schemas/metadata/MetadataAliasType.js +51 -0
  127. package/lib/schemas/metadata/MetadataAliasType.js.map +1 -0
  128. package/lib/schemas/metadata/MetadataComponents.d.ts +2 -2
  129. package/lib/schemas/metadata/MetadataComponents.js +2 -2
  130. package/lib/schemas/metadata/MetadataComponents.js.map +1 -1
  131. package/lib/schemas/metadata/MetadataConstantValue.d.ts +1 -1
  132. package/lib/schemas/metadata/MetadataMap.d.ts +14 -0
  133. package/lib/schemas/metadata/MetadataMap.js +66 -0
  134. package/lib/schemas/metadata/MetadataMap.js.map +1 -0
  135. package/lib/schemas/metadata/MetadataNative.d.ts +12 -0
  136. package/lib/schemas/metadata/MetadataNative.js +65 -0
  137. package/lib/schemas/metadata/MetadataNative.js.map +1 -0
  138. package/lib/schemas/metadata/MetadataSet.d.ts +13 -0
  139. package/lib/schemas/metadata/MetadataSet.js +64 -0
  140. package/lib/schemas/metadata/MetadataSet.js.map +1 -0
  141. package/lib/schemas/metadata/MetadataTemplate.d.ts +1 -1
  142. package/lib/tags/Example.d.ts +2 -2
  143. package/lib/tags/Examples.d.ts +2 -2
  144. package/lib/tags/JsonSchemaPlugin.d.ts +1 -1
  145. package/lib/tags/Sequence.d.ts +9 -0
  146. package/lib/tags/Sequence.js +3 -0
  147. package/lib/tags/Sequence.js.map +1 -0
  148. package/lib/tags/TagBase.d.ts +1 -1
  149. package/lib/tags/index.d.ts +1 -0
  150. package/lib/tags/index.js +1 -0
  151. package/lib/tags/index.js.map +1 -1
  152. package/package.json +1 -1
  153. package/src/factories/JsonMetadataFactory.ts +5 -2
  154. package/src/factories/MetadataCollection.ts +6 -6
  155. package/src/factories/MetadataFactory.ts +7 -7
  156. package/src/factories/MetadataTypeTagFactory.ts +31 -6
  157. package/src/factories/ProtobufFactory.ts +494 -176
  158. package/src/factories/internal/metadata/IMetadataIteratorProps.ts +1 -0
  159. package/src/factories/internal/metadata/MetadataHelper.ts +1 -1
  160. package/src/factories/internal/metadata/emplace_metadata_alias.ts +2 -2
  161. package/src/factories/internal/metadata/emplace_metadata_object.ts +5 -5
  162. package/src/factories/internal/metadata/explore_metadata.ts +1 -0
  163. package/src/factories/internal/metadata/iterate_metadata.ts +1 -1
  164. package/src/factories/internal/metadata/iterate_metadata_alias.ts +9 -4
  165. package/src/factories/internal/metadata/iterate_metadata_collection.ts +6 -6
  166. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +163 -181
  167. package/src/factories/internal/metadata/iterate_metadata_map.ts +5 -2
  168. package/src/factories/internal/metadata/iterate_metadata_native.ts +20 -2
  169. package/src/factories/internal/metadata/iterate_metadata_set.ts +27 -11
  170. package/src/factories/internal/metadata/iterate_metadata_sort.ts +1 -1
  171. package/src/factories/internal/metadata/iterate_metadata_template.ts +1 -3
  172. package/src/programmers/CheckerProgrammer.ts +9 -7
  173. package/src/programmers/RandomProgrammer.ts +16 -14
  174. package/src/programmers/helpers/AtomicPredicator.ts +3 -3
  175. package/src/programmers/helpers/ProtobufUtil.ts +146 -43
  176. package/src/programmers/helpers/UnionExplorer.ts +62 -62
  177. package/src/programmers/http/HttpFormDataProgrammer.ts +10 -6
  178. package/src/programmers/internal/application_escaped.ts +2 -2
  179. package/src/programmers/internal/application_v30_alias.ts +18 -12
  180. package/src/programmers/internal/application_v30_native.ts +22 -12
  181. package/src/programmers/internal/application_v30_object.ts +23 -8
  182. package/src/programmers/internal/application_v30_schema.ts +31 -34
  183. package/src/programmers/internal/application_v31_alias.ts +16 -13
  184. package/src/programmers/internal/application_v31_native.ts +22 -12
  185. package/src/programmers/internal/application_v31_object.ts +19 -8
  186. package/src/programmers/internal/application_v31_schema.ts +26 -29
  187. package/src/programmers/internal/check_dynamic_key.ts +4 -4
  188. package/src/programmers/internal/check_native.ts +4 -4
  189. package/src/programmers/internal/check_union_array_like.ts +2 -1
  190. package/src/programmers/internal/llm_schema_escaped.ts +2 -2
  191. package/src/programmers/internal/llm_schema_object.ts +21 -18
  192. package/src/programmers/internal/llm_schema_station.ts +9 -11
  193. package/src/programmers/json/JsonSchemasProgrammer.ts +5 -5
  194. package/src/programmers/json/JsonStringifyProgrammer.ts +5 -5
  195. package/src/programmers/llm/LlmSchemaProgrammer.ts +6 -6
  196. package/src/programmers/misc/MiscCloneProgrammer.ts +11 -7
  197. package/src/programmers/misc/MiscPruneProgrammer.ts +1 -1
  198. package/src/programmers/notations/NotationGeneralProgrammer.ts +10 -6
  199. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +14 -7
  200. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +11 -8
  201. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +45 -20
  202. package/src/schemas/metadata/IMetadata.ts +35 -39
  203. package/src/schemas/metadata/IMetadataAlias.ts +6 -12
  204. package/src/schemas/metadata/IMetadataAliasType.ts +12 -0
  205. package/src/schemas/metadata/IMetadataArray.ts +6 -6
  206. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  207. package/src/schemas/metadata/IMetadataConstantValue.ts +1 -1
  208. package/src/schemas/metadata/IMetadataDictionary.ts +2 -2
  209. package/src/schemas/metadata/IMetadataMap.ts +8 -0
  210. package/src/schemas/metadata/IMetadataNative.ts +6 -0
  211. package/src/schemas/metadata/IMetadataObjectType.ts +13 -13
  212. package/src/schemas/metadata/IMetadataSet.ts +7 -0
  213. package/src/schemas/metadata/IMetadataTemplate.ts +7 -7
  214. package/src/schemas/metadata/IMetadataTuple.ts +6 -6
  215. package/src/schemas/metadata/IMetadataTypeTag.ts +16 -16
  216. package/src/schemas/metadata/Metadata.ts +100 -47
  217. package/src/schemas/metadata/MetadataAlias.ts +46 -61
  218. package/src/schemas/metadata/MetadataAliasType.ts +63 -0
  219. package/src/schemas/metadata/MetadataArray.ts +49 -49
  220. package/src/schemas/metadata/MetadataComponents.ts +3 -3
  221. package/src/schemas/metadata/MetadataConstantValue.ts +1 -1
  222. package/src/schemas/metadata/MetadataMap.ts +48 -0
  223. package/src/schemas/metadata/MetadataNative.ts +44 -0
  224. package/src/schemas/metadata/MetadataProperty.ts +5 -0
  225. package/src/schemas/metadata/MetadataSet.ts +45 -0
  226. package/src/schemas/metadata/MetadataTemplate.ts +80 -80
  227. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  228. package/src/tags/Example.ts +24 -17
  229. package/src/tags/Examples.ts +16 -16
  230. package/src/tags/JsonSchemaPlugin.ts +8 -8
  231. package/src/tags/Sequence.ts +10 -0
  232. package/src/tags/TagBase.ts +82 -76
  233. package/src/tags/index.ts +1 -0
  234. package/lib/schemas/metadata/IMetadataEntry.d.ts +0 -5
  235. package/lib/schemas/metadata/IMetadataEntry.js.map +0 -1
  236. package/src/schemas/metadata/IMetadataEntry.ts +0 -6
@@ -13,4 +13,5 @@ export interface IMetadataIteratorProps<Type extends ts.Type = ts.Type> {
13
13
  metadata: Metadata;
14
14
  type: Type;
15
15
  explore: MetadataFactory.IExplore;
16
+ intersected?: boolean;
16
17
  }
@@ -11,7 +11,7 @@ export namespace MetadataHelper {
11
11
  values: [
12
12
  MetadataConstantValue.create({
13
13
  value: key,
14
- tags: undefined,
14
+ tags: [],
15
15
  }),
16
16
  ],
17
17
  }),
@@ -1,5 +1,5 @@
1
1
  import { Metadata } from "../../../schemas/metadata/Metadata";
2
- import { MetadataAlias } from "../../../schemas/metadata/MetadataAlias";
2
+ import { MetadataAliasType } from "../../../schemas/metadata/MetadataAliasType";
3
3
 
4
4
  import { ArrayUtil } from "../../../utils/ArrayUtil";
5
5
 
@@ -8,7 +8,7 @@ import { explore_metadata } from "./explore_metadata";
8
8
 
9
9
  export const emplace_metadata_alias = (
10
10
  props: IMetadataIteratorProps,
11
- ): MetadataAlias => {
11
+ ): MetadataAliasType => {
12
12
  // CHECK EXISTENCE
13
13
  const [alias, newbie, closure] = props.collection.emplaceAlias(
14
14
  props.checker,
@@ -144,11 +144,11 @@ export const emplace_metadata_object = (
144
144
  key.constants.map((c) => c.values.length).reduce((a, b) => a + b, 0) +
145
145
  key.templates.length +
146
146
  key.natives.filter(
147
- (type) =>
148
- type === "Boolean" ||
149
- type === "BigInt" ||
150
- type === "Number" ||
151
- type === "String",
147
+ (native) =>
148
+ native.name === "Boolean" ||
149
+ native.name === "BigInt" ||
150
+ native.name === "Number" ||
151
+ native.name === "String",
152
152
  ).length !==
153
153
  key.size()
154
154
  )
@@ -12,6 +12,7 @@ export const explore_metadata = (props: IProps): Metadata => {
12
12
  if (props.type === null) return metadata;
13
13
 
14
14
  // ITERATE TYPESCRIPT TYPES
15
+ props.intersected ??= false;
15
16
  iterate_metadata({
16
17
  ...props,
17
18
  metadata,
@@ -31,7 +31,7 @@ export const iterate_metadata = (props: IMetadataIteratorProps): void => {
31
31
  return;
32
32
  }
33
33
  // CHECK SPECIAL CASES
34
- else if (
34
+ if (
35
35
  (props.explore.aliased !== true && iterate_metadata_alias(props)) ||
36
36
  iterate_metadata_intersection(props) ||
37
37
  iterate_metadata_union(props) ||
@@ -1,6 +1,7 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  import { MetadataAlias } from "../../../schemas/metadata/MetadataAlias";
4
+ import { MetadataAliasType } from "../../../schemas/metadata/MetadataAliasType";
4
5
 
5
6
  import { ArrayUtil } from "../../../utils/ArrayUtil";
6
7
 
@@ -18,11 +19,15 @@ export const iterate_metadata_alias = (
18
19
  if (node === undefined) return false;
19
20
 
20
21
  // CONSTRUCT DEFINITION
21
- const alias: MetadataAlias = emplace_metadata_alias(props);
22
- ArrayUtil.add(
22
+ const type: MetadataAliasType = emplace_metadata_alias(props);
23
+ ArrayUtil.take(
23
24
  props.metadata.aliases,
24
- alias,
25
- (elem) => elem.name === alias.name,
25
+ (elem) => elem.type.name === type.name,
26
+ () =>
27
+ MetadataAlias.create({
28
+ type,
29
+ tags: [],
30
+ }),
26
31
  );
27
32
  return true;
28
33
  };
@@ -73,12 +73,12 @@ const isArrayRecursive = (props: {
73
73
  props.metadata.arrays.some(
74
74
  (a) => a.type === props.array || next(a.type.value),
75
75
  ) ||
76
- props.metadata.aliases.some((alias) => next(alias.value)) ||
76
+ props.metadata.aliases.some((alias) => next(alias.type.value)) ||
77
77
  props.metadata.tuples.some(
78
78
  (t) => !t.type.recursive && t.type.elements.some(next),
79
79
  ) ||
80
80
  props.metadata.maps.some((m) => next(m.value)) ||
81
- props.metadata.sets.some(next) ||
81
+ props.metadata.sets.some((s) => next(s.value)) ||
82
82
  (props.metadata.escaped !== null && next(props.metadata.escaped.returns)) ||
83
83
  (props.metadata.rest !== null && next(props.metadata.rest))
84
84
  );
@@ -105,8 +105,8 @@ const isTupleRecursive = (props: {
105
105
  (a) => !a.type.recursive && next(a.type.value),
106
106
  ) ||
107
107
  props.metadata.maps.some((m) => next(m.value)) ||
108
- props.metadata.sets.some((s) => next(s)) ||
109
- props.metadata.aliases.some((alias) => next(alias.value)) ||
108
+ props.metadata.sets.some((s) => next(s.value)) ||
109
+ props.metadata.aliases.some((alias) => next(alias.type.value)) ||
110
110
  (props.metadata.escaped !== null && next(props.metadata.escaped.returns)) ||
111
111
  (props.metadata.rest !== null && next(props.metadata.rest))
112
112
  );
@@ -131,7 +131,7 @@ const isObjectRecursive = (props: {
131
131
  props.object === o.type ||
132
132
  o.type.properties.some((prop) => next(prop.value)),
133
133
  ) ||
134
- props.metadata.aliases.some((alias) => next(alias.value)) ||
134
+ props.metadata.aliases.some((alias) => next(alias.type.value)) ||
135
135
  props.metadata.arrays.some(
136
136
  (array) => !array.type.recursive && next(array.type.value),
137
137
  ) ||
@@ -139,7 +139,7 @@ const isObjectRecursive = (props: {
139
139
  (tuple) => !tuple.type.recursive && tuple.type.elements.some(next),
140
140
  ) ||
141
141
  props.metadata.maps.some((map) => next(map.value)) ||
142
- props.metadata.sets.some(next) ||
142
+ props.metadata.sets.some((set) => next(set.value)) ||
143
143
  (props.metadata.escaped !== null && next(props.metadata.escaped.returns)) ||
144
144
  (props.metadata.rest !== null && next(props.metadata.rest))
145
145
  );
@@ -1,13 +1,6 @@
1
- import ts from "typescript";
2
-
3
1
  import { IMetadataTypeTag } from "../../../schemas/metadata/IMetadataTypeTag";
4
2
  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";
3
+ import { MetadataObjectType } from "../../../schemas/metadata/MetadataObjectType";
11
4
 
12
5
  import { MetadataCollection } from "../../MetadataCollection";
13
6
  import { MetadataFactory } from "../../MetadataFactory";
@@ -15,64 +8,57 @@ import { MetadataTypeTagFactory } from "../../MetadataTypeTagFactory";
15
8
  import { IMetadataIteratorProps } from "./IMetadataIteratorProps";
16
9
  import { explore_metadata } from "./explore_metadata";
17
10
  import { iterate_metadata } from "./iterate_metadata";
18
- import { iterate_metadata_array } from "./iterate_metadata_array";
19
11
 
20
12
  export const iterate_metadata_intersection = (
21
13
  props: IMetadataIteratorProps,
22
14
  ): boolean => {
23
- if (!props.type.isIntersection()) return false;
24
- if (
25
- // ONLY OBJECT TYPED INTERSECTION
26
- props.type.types.every(
27
- (child) =>
28
- (child.getFlags() & ts.TypeFlags.Object) !== 0 &&
29
- !props.checker.isArrayType(child) &&
30
- !props.checker.isTupleType(child),
31
- )
32
- )
33
- return false;
15
+ if (props.intersected === true) return false;
16
+ else if (props.type.isIntersection() === false) return false;
34
17
 
35
18
  // COSTRUCT FAKE METADATA LIST
36
- const fakeCollection: MetadataCollection = props.collection.clone();
19
+ const fakeCollection: MetadataCollection = new MetadataCollection();
37
20
  const fakeErrors: MetadataFactory.IError[] = [];
38
- const children: Metadata[] = [
39
- ...new Map(
40
- props.type.types.map((t) => {
41
- const m: Metadata = explore_metadata({
42
- ...props,
43
- options: {
44
- ...props.options,
45
- absorb: true,
46
- },
47
- collection: fakeCollection,
48
- errors: fakeErrors,
49
- type: t,
50
- explore: {
51
- ...props.explore,
52
- aliased: false,
53
- },
54
- });
55
- return [m.getName(), m] as const;
56
- }),
57
- ).values(),
58
- ];
21
+ const children: Metadata[] = props.type.types.map((t) =>
22
+ explore_metadata({
23
+ ...props,
24
+ options: {
25
+ ...props.options,
26
+ absorb: true,
27
+ functional: false,
28
+ },
29
+ collection: fakeCollection,
30
+ errors: fakeErrors,
31
+ type: t,
32
+ explore: {
33
+ ...props.explore,
34
+ aliased: false,
35
+ },
36
+ intersected: true,
37
+ }),
38
+ );
59
39
  if (fakeErrors.length) {
60
40
  props.errors.push(...fakeErrors);
61
41
  return true;
62
- }
42
+ } else if (children.length === 0) return false;
43
+ else if (children.some((m) => m.any || m.size() === 0)) return false;
63
44
 
64
- // ONLY ONE CHILD AFTER REMOVING DUPLICATES
65
- if (children.length === 1) {
66
- iterate_metadata({
67
- ...props,
68
- type: props.type.types[0]!,
69
- });
70
- return true;
71
- } else if (children.every((c) => c.objects.length === c.size()))
72
- // ONLY OBJECT TYPED INTERSECTION (DETAILED)
73
- return false;
45
+ // PREPARE MEATDATAS AND TAGS
46
+ const indexes: number[] = [];
47
+ const metadatas: Metadata[] = [];
48
+ const tagObjects: MetadataObjectType[] = [];
49
+ children.forEach((child, i) => {
50
+ if (
51
+ child.size() === 1 &&
52
+ child.objects.length === 1 &&
53
+ MetadataTypeTagFactory.is(child.objects[0]!.type)
54
+ )
55
+ tagObjects.push(child.objects[0]!.type);
56
+ else {
57
+ indexes.push(i);
58
+ metadatas.push(child);
59
+ }
60
+ });
74
61
 
75
- // VALIDATE EACH TYPES
76
62
  const nonsensible = () => {
77
63
  props.errors.push({
78
64
  name: children.map((c) => c.getName()).join(" & "),
@@ -81,139 +67,135 @@ export const iterate_metadata_intersection = (
81
67
  });
82
68
  return true;
83
69
  };
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 && c.constants[0]!.values.length === 1) ||
91
- c.arrays.length === 1)) ||
92
- c.templates.length === 1,
93
- );
94
- if (individuals.length !== 1) return nonsensible();
95
70
 
96
- const objects: Metadata[] = children.filter(
97
- (c) =>
98
- c.nullable === false &&
99
- c.isRequired() === true &&
100
- c.objects.length &&
101
- c.objects.length === c.size() &&
102
- c.objects.every((o) => o.type.properties.every((p) => p.value.optional)),
103
- );
104
- const arrays: Set<string> = new Set(
105
- individuals.map(([c]) => c.arrays.map((a) => a.type.name)).flat(),
106
- );
107
- const atomics: Set<"boolean" | "bigint" | "number" | "string"> = new Set(
108
- individuals.map(([c]) => [...c.atomics.map((a) => a.type)]).flat(),
109
- );
110
- const constants: Metadata[] = individuals
111
- .filter((i) => i[0].constants.length === 1)
112
- .map(([m]) => m);
113
- const templates: Metadata[] = individuals
114
- .filter((i) => i[0].templates.length === 1)
115
- .map(([m]) => m);
71
+ // NO METADATA CASE
72
+ if (metadatas.length === 0)
73
+ if (tagObjects.length !== 0) {
74
+ props.errors.push({
75
+ name: children.map((c) => c.getName()).join(" & "),
76
+ explore: { ...props.explore },
77
+ messages: ["type tag cannot be standalone"],
78
+ });
79
+ return true;
80
+ } else return false;
81
+ // ONLY OBJECTS CASE
82
+ else if (
83
+ metadatas.every((m) => m.objects.length === 1) &&
84
+ tagObjects.length === 0
85
+ )
86
+ return false;
87
+ else if (metadatas.length !== 1) {
88
+ const indexes: number[] = metadatas
89
+ .map((m, i) =>
90
+ m.size() === 1 &&
91
+ m.objects.length === 1 &&
92
+ (m.objects[0]!.type.properties.length === 0 ||
93
+ m.objects[0]!.type.properties.every((p) => p.value.optional === true))
94
+ ? i
95
+ : null,
96
+ )
97
+ .filter((i) => i !== null);
98
+ if (indexes.length && metadatas.length !== indexes.length)
99
+ for (const i of indexes.reverse()) metadatas.splice(i, 1);
100
+ else return nonsensible();
101
+ } else if (metadatas.some((m) => m.size() !== 1)) return nonsensible();
116
102
 
117
- // ESCAPE WHEN ONLY CONSTANT TYPES EXIST
103
+ const candidates: Map<string, string> = new Map();
104
+ const assigners: Array<(tags: IMetadataTypeTag[]) => void> = [];
105
+ for (const meta of metadatas) {
106
+ for (const a of meta.atomics) {
107
+ candidates.set(a.type, a.type);
108
+ assigners.push((tags) =>
109
+ props.metadata.atomics
110
+ .find((atom) => atom.type === a.type)
111
+ ?.tags.push(tags),
112
+ );
113
+ }
114
+ for (const c of meta.constants)
115
+ for (const v of c.values) {
116
+ candidates.set(c.type, c.type);
117
+ assigners.push((tags) =>
118
+ props.metadata.constants
119
+ .find((constant) => constant.type === c.type)
120
+ ?.values.find((value) => value === v)
121
+ ?.tags?.push(tags),
122
+ );
123
+ }
124
+ for (const t of meta.templates) {
125
+ candidates.set("string", "string");
126
+ assigners.push((tags) =>
127
+ props.metadata.templates
128
+ .find((tpl) => tpl.getBaseName() === t.getBaseName())
129
+ ?.tags.push(tags),
130
+ );
131
+ }
132
+ if (meta.objects.length) {
133
+ candidates.set("object", "object");
134
+ assigners.push((tags) => props.metadata.objects.at(-1)?.tags.push(tags));
135
+ }
136
+ if (meta.arrays.length) {
137
+ candidates.set("array", "array");
138
+ assigners.push((tags) => props.metadata.arrays.at(-1)?.tags.push(tags));
139
+ }
140
+ if (meta.tuples.length) candidates.set("invalid", "tuple");
141
+ for (const n of meta.natives) {
142
+ candidates.set(`native::${n.name}`, "object");
143
+ assigners.push((tags) =>
144
+ props.metadata.natives
145
+ .find((native) => native.name === n.name)
146
+ ?.tags.push(tags),
147
+ );
148
+ }
149
+ for (const s of meta.sets) {
150
+ candidates.set(`set::${s.value.getName()}`, "object");
151
+ assigners.push((tags) =>
152
+ props.metadata.sets
153
+ .find((set) => set.value.getName() === s.value.getName())
154
+ ?.tags.push(tags),
155
+ );
156
+ }
157
+ for (const e of meta.maps) {
158
+ candidates.set(`map::${e.key.getName()}::${e.value.getName()}`, "object");
159
+ assigners.push((tags) =>
160
+ props.metadata.maps
161
+ .find(
162
+ (map) =>
163
+ map.key.getName() === e.key.getName() &&
164
+ map.value.getName() === e.value.getName(),
165
+ )
166
+ ?.tags.push(tags),
167
+ );
168
+ }
169
+ }
118
170
  if (
119
- atomics.size + constants.length + arrays.size + templates.length > 1 ||
120
- individuals.length + objects.length !== children.length
171
+ candidates.size !== 1 ||
172
+ candidates.has("nonsensible")
173
+ // ||
174
+ // (candidates.size !== 1 &&
175
+ // Array.from(candidates.keys()).some((v) => v !== "object"))
121
176
  )
122
177
  return nonsensible();
123
178
 
124
- // RE-GENERATE TYPE
125
- const target: "boolean" | "bigint" | "number" | "string" | "array" =
126
- arrays.size
127
- ? "array"
128
- : atomics.size
129
- ? atomics.values().next().value!
130
- : constants.length
131
- ? constants[0]!.constants[0]!.type
132
- : "string";
133
- if (target === "array") {
134
- const name: string = arrays.values().next().value!;
135
- if (!props.metadata.arrays.some((a) => a.type.name === name)) {
136
- iterate_metadata_array({
137
- ...props,
138
- type: props.type.types[
139
- individuals.find((i) => i[0].arrays.length === 1)![1]
140
- ]!,
141
- explore: {
142
- ...props.explore,
143
- aliased: false,
144
- escaped: false,
145
- },
146
- });
147
- }
148
- } else if (atomics.size)
149
- ArrayUtil.add(
150
- props.metadata.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
- props.metadata.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
- props.metadata.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
- );
179
+ const tags: IMetadataTypeTag[] = MetadataTypeTagFactory.analyze({
180
+ errors: props.errors,
181
+ type: candidates.values().next().value as "string",
182
+ objects: tagObjects,
183
+ explore: props.explore,
184
+ });
185
185
 
186
- // ASSIGN TAGS
187
- if (objects.length) {
188
- const tags: IMetadataTypeTag[] = MetadataTypeTagFactory.analyze({
189
- errors: props.errors,
190
- type: target,
191
- objects: objects
192
- .map((om) => om.objects)
193
- .flat()
194
- .map((om) => om.type),
195
- explore: props.explore,
196
- });
197
- if (tags.length)
198
- if (target === "array") props.metadata.arrays.at(-1)!.tags.push(tags);
199
- else if (atomics.size)
200
- props.metadata.atomics.find((a) => a.type === target)!.tags.push(tags);
201
- else if (constants.length) {
202
- const constant: MetadataConstant = props.metadata.constants.find(
203
- (c) => c.type === target,
204
- )!;
205
- const value: MetadataConstantValue = constant.values.find(
206
- (v) => v.value === constants[0]!.constants[0]!.values[0]!.value,
207
- )!;
208
- value.tags ??= [];
209
- value.tags.push(tags);
210
- } else if (templates.length) {
211
- const template: MetadataTemplate = props.metadata.templates.find(
212
- (t) => t.getBaseName() === templates[0]!.templates[0]!.getBaseName(),
213
- )!;
214
- template.tags ??= [];
215
- template.tags.push(tags);
216
- }
217
- }
186
+ iterate_metadata({
187
+ ...props,
188
+ type: props.type.types[indexes[0]!]!,
189
+ options: {
190
+ ...props.options,
191
+ functional: false,
192
+ },
193
+ explore: {
194
+ ...props.explore,
195
+ aliased: false,
196
+ escaped: false,
197
+ },
198
+ });
199
+ if (tags.length) assigners.forEach((fn) => fn(tags));
218
200
  return true;
219
201
  };
@@ -1,5 +1,7 @@
1
1
  import ts from "typescript";
2
2
 
3
+ import { MetadataMap } from "../../../schemas/metadata/MetadataMap";
4
+
3
5
  import { ArrayUtil } from "../../../utils/ArrayUtil";
4
6
 
5
7
  import { TypeFactory } from "../../TypeFactory";
@@ -26,7 +28,7 @@ export const iterate_metadata_map = (
26
28
 
27
29
  ArrayUtil.set(
28
30
  props.metadata.maps,
29
- {
31
+ MetadataMap.create({
30
32
  key: explore_metadata({
31
33
  ...props,
32
34
  type: key,
@@ -45,7 +47,8 @@ export const iterate_metadata_map = (
45
47
  aliased: false,
46
48
  },
47
49
  }),
48
- },
50
+ tags: [],
51
+ }),
49
52
  (elem) => `Map<${elem.key.getName()}, ${elem.value.getName()}>`,
50
53
  );
51
54
  return true;
@@ -1,5 +1,7 @@
1
1
  import ts from "typescript";
2
2
 
3
+ import { MetadataNative } from "../../../schemas/metadata/MetadataNative";
4
+
3
5
  import { ArrayUtil } from "../../../utils/ArrayUtil";
4
6
 
5
7
  import { TypeFactory } from "../../TypeFactory";
@@ -22,7 +24,15 @@ export const iterate_metadata_native = (
22
24
  info: simple,
23
25
  })
24
26
  ) {
25
- ArrayUtil.set(props.metadata.natives, name, (str) => str);
27
+ ArrayUtil.take(
28
+ props.metadata.natives,
29
+ (native) => native.name === name,
30
+ () =>
31
+ MetadataNative.create({
32
+ name,
33
+ tags: [],
34
+ }),
35
+ );
26
36
  return true;
27
37
  }
28
38
 
@@ -35,7 +45,15 @@ export const iterate_metadata_native = (
35
45
  info: generic,
36
46
  })
37
47
  ) {
38
- ArrayUtil.set(props.metadata.natives, generic.name ?? name, (str) => str);
48
+ ArrayUtil.take(
49
+ props.metadata.natives,
50
+ (native) => native.name === name,
51
+ () =>
52
+ MetadataNative.create({
53
+ name: generic.name ?? name,
54
+ tags: [],
55
+ }),
56
+ );
39
57
  return true;
40
58
  }
41
59
  return false;
@@ -1,5 +1,8 @@
1
1
  import ts from "typescript";
2
2
 
3
+ import { Metadata } from "../../../schemas/metadata/Metadata";
4
+ import { MetadataSet } from "../../../schemas/metadata/MetadataSet";
5
+
3
6
  import { ArrayUtil } from "../../../utils/ArrayUtil";
4
7
 
5
8
  import { TypeFactory } from "../../TypeFactory";
@@ -22,18 +25,31 @@ export const iterate_metadata_set = (
22
25
  if (name.substring(0, 4) !== "Set<" || generic?.length !== 1) return false;
23
26
 
24
27
  const key: ts.Type = generic[0]!;
25
- ArrayUtil.set(
28
+ const value: Metadata = explore_metadata({
29
+ ...props,
30
+ type: key,
31
+ explore: {
32
+ ...props.explore,
33
+ escaped: false,
34
+ aliased: false,
35
+ },
36
+ });
37
+ ArrayUtil.take(
26
38
  props.metadata.sets,
27
- explore_metadata({
28
- ...props,
29
- type: key,
30
- explore: {
31
- ...props.explore,
32
- escaped: false,
33
- aliased: false,
34
- },
35
- }),
36
- (elem) => elem.getName(),
39
+ (elem) => elem.value.getName() === value.getName(),
40
+ () =>
41
+ MetadataSet.create({
42
+ value: explore_metadata({
43
+ ...props,
44
+ type: key,
45
+ explore: {
46
+ ...props.explore,
47
+ escaped: false,
48
+ aliased: false,
49
+ },
50
+ }),
51
+ tags: [],
52
+ }),
37
53
  );
38
54
  return true;
39
55
  };
@@ -38,7 +38,7 @@ const iterate = (props: {
38
38
 
39
39
  // ITERATE CHILDREN
40
40
  for (const map of props.metadata.maps) next(map.value);
41
- for (const set of props.metadata.sets) next(set);
41
+ for (const set of props.metadata.sets) next(set.value);
42
42
  if (props.metadata.escaped !== null) next(props.metadata.escaped.returns);
43
43
  if (props.metadata.rest !== null) next(props.metadata.rest);
44
44
 
@@ -35,8 +35,6 @@ export const iterate_metadata_template = (
35
35
  }),
36
36
  );
37
37
  });
38
- props.metadata.templates.push(
39
- MetadataTemplate.create({ row, tags: undefined }),
40
- );
38
+ props.metadata.templates.push(MetadataTemplate.create({ row, tags: [] }));
41
39
  return true;
42
40
  };