typia 3.8.9 → 3.9.0-dev.20230604

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 (239) hide show
  1. package/lib/IRandomGenerator.d.ts +1 -0
  2. package/lib/factories/IdentifierFactory.js +2 -1
  3. package/lib/factories/IdentifierFactory.js.map +1 -1
  4. package/lib/factories/MetadataCollection.d.ts +22 -4
  5. package/lib/factories/MetadataCollection.js +121 -28
  6. package/lib/factories/MetadataCollection.js.map +1 -1
  7. package/lib/factories/MetadataFactory.d.ts +1 -0
  8. package/lib/factories/MetadataFactory.js +6 -48
  9. package/lib/factories/MetadataFactory.js.map +1 -1
  10. package/lib/factories/MetadataTagFactory.js +5 -3
  11. package/lib/factories/MetadataTagFactory.js.map +1 -1
  12. package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +5 -0
  13. package/lib/factories/internal/metadata/emplace_metadata_array.js +38 -0
  14. package/lib/factories/internal/metadata/emplace_metadata_array.js.map +1 -0
  15. package/lib/factories/internal/metadata/emplace_metadata_definition.d.ts +5 -0
  16. package/lib/factories/internal/metadata/emplace_metadata_definition.js +38 -0
  17. package/lib/factories/internal/metadata/emplace_metadata_definition.js.map +1 -0
  18. package/lib/factories/internal/metadata/emplace_metadata_object.js +4 -4
  19. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  20. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +5 -0
  21. package/lib/factories/internal/metadata/emplace_metadata_tuple.js +58 -0
  22. package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -0
  23. package/lib/factories/internal/metadata/explore_metadata.d.ts +1 -1
  24. package/lib/factories/internal/metadata/explore_metadata.js +11 -34
  25. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  26. package/lib/factories/internal/metadata/iterate_metadata.d.ts +1 -1
  27. package/lib/factories/internal/metadata/iterate_metadata.js +5 -2
  28. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  29. package/lib/factories/internal/metadata/iterate_metadata_array.js +4 -5
  30. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  31. package/lib/factories/internal/metadata/iterate_metadata_collection.d.ts +2 -0
  32. package/lib/factories/internal/metadata/iterate_metadata_collection.js +151 -0
  33. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -0
  34. package/lib/factories/internal/metadata/iterate_metadata_definition.d.ts +5 -0
  35. package/lib/factories/internal/metadata/iterate_metadata_definition.js +24 -0
  36. package/lib/factories/internal/metadata/iterate_metadata_definition.js.map +1 -0
  37. package/lib/factories/internal/metadata/iterate_metadata_object.js +1 -1
  38. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  39. package/lib/factories/internal/metadata/iterate_metadata_sort.d.ts +3 -0
  40. package/lib/factories/internal/metadata/iterate_metadata_sort.js +156 -0
  41. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -0
  42. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +3 -26
  43. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  44. package/lib/factories/internal/metadata/iterate_metadata_union.js +3 -3
  45. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
  46. package/lib/metadata/IMetadata.d.ts +3 -2
  47. package/lib/metadata/IMetadataAlias.d.ts +10 -0
  48. package/lib/metadata/IMetadataAlias.js +3 -0
  49. package/lib/metadata/IMetadataAlias.js.map +1 -0
  50. package/lib/metadata/IMetadataApplication.d.ts +2 -2
  51. package/lib/metadata/IMetadataArray.d.ts +8 -0
  52. package/lib/metadata/IMetadataArray.js +3 -0
  53. package/lib/metadata/IMetadataArray.js.map +1 -0
  54. package/lib/metadata/IMetadataCollection.d.ts +10 -0
  55. package/lib/metadata/IMetadataCollection.js +3 -0
  56. package/lib/metadata/IMetadataCollection.js.map +1 -0
  57. package/lib/metadata/IMetadataDictionary.js +3 -0
  58. package/lib/metadata/IMetadataDictionary.js.map +1 -0
  59. package/lib/metadata/IMetadataObject.d.ts +3 -0
  60. package/lib/metadata/IMetadataProperty.d.ts +1 -1
  61. package/lib/metadata/IMetadataTuple.d.ts +8 -0
  62. package/lib/metadata/IMetadataTuple.js +3 -0
  63. package/lib/metadata/IMetadataTuple.js.map +1 -0
  64. package/lib/metadata/Metadata.d.ts +24 -21
  65. package/lib/metadata/Metadata.js +323 -262
  66. package/lib/metadata/Metadata.js.map +1 -1
  67. package/lib/metadata/MetadataAlias.d.ts +16 -0
  68. package/lib/metadata/MetadataAlias.js +39 -0
  69. package/lib/metadata/MetadataAlias.js.map +1 -0
  70. package/lib/metadata/MetadataArray.d.ts +12 -0
  71. package/lib/metadata/MetadataArray.js +36 -0
  72. package/lib/metadata/MetadataArray.js.map +1 -0
  73. package/lib/metadata/MetadataObject.d.ts +4 -0
  74. package/lib/metadata/MetadataObject.js +3 -5
  75. package/lib/metadata/MetadataObject.js.map +1 -1
  76. package/lib/metadata/MetadataProperty.d.ts +1 -1
  77. package/lib/metadata/MetadataProperty.js +3 -3
  78. package/lib/metadata/MetadataProperty.js.map +1 -1
  79. package/lib/metadata/MetadataTuple.d.ts +12 -0
  80. package/lib/metadata/MetadataTuple.js +36 -0
  81. package/lib/metadata/MetadataTuple.js.map +1 -0
  82. package/lib/programmers/ApplicationProgrammer.js +3 -3
  83. package/lib/programmers/ApplicationProgrammer.js.map +1 -1
  84. package/lib/programmers/AssertProgrammer.js +13 -21
  85. package/lib/programmers/AssertProgrammer.js.map +1 -1
  86. package/lib/programmers/CheckerProgrammer.d.ts +6 -7
  87. package/lib/programmers/CheckerProgrammer.js +276 -185
  88. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  89. package/lib/programmers/CloneProgrammer.js +312 -204
  90. package/lib/programmers/CloneProgrammer.js.map +1 -1
  91. package/lib/programmers/FeatureProgrammer.d.ts +21 -27
  92. package/lib/programmers/FeatureProgrammer.js +60 -63
  93. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  94. package/lib/programmers/IsProgrammer.d.ts +3 -3
  95. package/lib/programmers/IsProgrammer.js +43 -28
  96. package/lib/programmers/IsProgrammer.js.map +1 -1
  97. package/lib/programmers/LiteralsProgrammer.js +1 -0
  98. package/lib/programmers/LiteralsProgrammer.js.map +1 -1
  99. package/lib/programmers/PruneProgrammer.js +270 -176
  100. package/lib/programmers/PruneProgrammer.js.map +1 -1
  101. package/lib/programmers/RandomProgrammer.js +124 -32
  102. package/lib/programmers/RandomProgrammer.js.map +1 -1
  103. package/lib/programmers/StringifyProgrammer.js +462 -356
  104. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  105. package/lib/programmers/ValidateProgrammer.js +9 -9
  106. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  107. package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
  108. package/lib/programmers/helpers/FunctionImporeter.js +17 -2
  109. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  110. package/lib/programmers/helpers/RandomJoiner.d.ts +6 -1
  111. package/lib/programmers/helpers/RandomJoiner.js +11 -14
  112. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  113. package/lib/programmers/helpers/UnionExplorer.d.ts +12 -10
  114. package/lib/programmers/helpers/UnionExplorer.js +47 -12
  115. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  116. package/lib/programmers/helpers/UnionPredicator.js +1 -1
  117. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  118. package/lib/programmers/helpers/disable_function_importer_declare.js +1 -0
  119. package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
  120. package/lib/programmers/internal/JSON_SCHEMA_PREFIX.d.ts +1 -1
  121. package/lib/programmers/internal/JSON_SCHEMA_PREFIX.js +2 -2
  122. package/lib/programmers/internal/JSON_SCHEMA_PREFIX.js.map +1 -1
  123. package/lib/programmers/internal/application_array.js +41 -21
  124. package/lib/programmers/internal/application_array.js.map +1 -1
  125. package/lib/programmers/internal/application_boolean.js +1 -1
  126. package/lib/programmers/internal/application_boolean.js.map +1 -1
  127. package/lib/programmers/internal/application_constant.js +2 -2
  128. package/lib/programmers/internal/application_constant.js.map +1 -1
  129. package/lib/programmers/internal/application_default.js +3 -3
  130. package/lib/programmers/internal/application_default.js.map +1 -1
  131. package/lib/programmers/internal/application_definition.d.ts +5 -0
  132. package/lib/programmers/internal/application_definition.js +45 -0
  133. package/lib/programmers/internal/application_definition.js.map +1 -0
  134. package/lib/programmers/internal/application_native.js +14 -11
  135. package/lib/programmers/internal/application_native.js.map +1 -1
  136. package/lib/programmers/internal/application_object.js +19 -14
  137. package/lib/programmers/internal/application_object.js.map +1 -1
  138. package/lib/programmers/internal/application_schema.js +28 -31
  139. package/lib/programmers/internal/application_schema.js.map +1 -1
  140. package/lib/programmers/internal/application_tuple.js +34 -5
  141. package/lib/programmers/internal/application_tuple.js.map +1 -1
  142. package/lib/programmers/internal/check_union_array_like.js +54 -63
  143. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  144. package/lib/programmers/internal/feature_object_entries.js +2 -2
  145. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  146. package/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts +2 -0
  147. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +18 -0
  148. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -0
  149. package/lib/schemas/IJsonApplication.d.ts +0 -4
  150. package/lib/schemas/IJsonComponents.d.ts +16 -4
  151. package/lib/schemas/IJsonSchema.d.ts +1 -1
  152. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  153. package/lib/transformers/FileTransformer.js +3 -3
  154. package/lib/transformers/FileTransformer.js.map +1 -1
  155. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +1 -0
  156. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
  157. package/lib/transformers/features/miscellaneous/MetadataTransformer.js +2 -1
  158. package/lib/transformers/features/miscellaneous/MetadataTransformer.js.map +1 -1
  159. package/lib/utils/ArrayUtil.d.ts +1 -1
  160. package/lib/utils/ArrayUtil.js +2 -1
  161. package/lib/utils/ArrayUtil.js.map +1 -1
  162. package/lib/utils/RandomGenerator.js +2 -3
  163. package/lib/utils/RandomGenerator.js.map +1 -1
  164. package/package.json +6 -1
  165. package/src/IRandomGenerator.ts +1 -0
  166. package/src/factories/IdentifierFactory.ts +3 -1
  167. package/src/factories/MetadataCollection.ts +170 -34
  168. package/src/factories/MetadataFactory.ts +7 -29
  169. package/src/factories/MetadataTagFactory.ts +6 -3
  170. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -0
  171. package/src/factories/internal/metadata/emplace_metadata_definition.ts +35 -0
  172. package/src/factories/internal/metadata/emplace_metadata_object.ts +4 -4
  173. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -0
  174. package/src/factories/internal/metadata/explore_metadata.ts +18 -44
  175. package/src/factories/internal/metadata/iterate_metadata.ts +13 -3
  176. package/src/factories/internal/metadata/iterate_metadata_array.ts +7 -11
  177. package/src/factories/internal/metadata/iterate_metadata_collection.ts +130 -0
  178. package/src/factories/internal/metadata/iterate_metadata_definition.ts +30 -0
  179. package/src/factories/internal/metadata/iterate_metadata_object.ts +1 -0
  180. package/src/factories/internal/metadata/iterate_metadata_sort.ts +68 -0
  181. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +7 -31
  182. package/src/factories/internal/metadata/iterate_metadata_union.ts +13 -2
  183. package/src/metadata/IMetadata.ts +3 -2
  184. package/src/metadata/IMetadataAlias.ts +12 -0
  185. package/src/metadata/IMetadataApplication.ts +2 -2
  186. package/src/metadata/IMetadataArray.ts +10 -0
  187. package/src/metadata/IMetadataCollection.ts +11 -0
  188. package/src/metadata/IMetadataDictionary.ts +14 -0
  189. package/src/metadata/IMetadataObject.ts +2 -13
  190. package/src/metadata/IMetadataProperty.ts +1 -1
  191. package/src/metadata/IMetadataTuple.ts +10 -0
  192. package/src/metadata/Metadata.ts +180 -134
  193. package/src/metadata/MetadataAlias.ts +61 -0
  194. package/src/metadata/MetadataArray.ts +52 -0
  195. package/src/metadata/MetadataObject.ts +7 -20
  196. package/src/metadata/MetadataProperty.ts +5 -5
  197. package/src/metadata/MetadataTuple.ts +53 -0
  198. package/src/programmers/ApplicationProgrammer.ts +1 -2
  199. package/src/programmers/AssertProgrammer.ts +45 -39
  200. package/src/programmers/CheckerProgrammer.ts +612 -331
  201. package/src/programmers/CloneProgrammer.ts +344 -138
  202. package/src/programmers/FeatureProgrammer.ts +110 -115
  203. package/src/programmers/IsProgrammer.ts +86 -52
  204. package/src/programmers/LiteralsProgrammer.ts +1 -0
  205. package/src/programmers/PruneProgrammer.ts +304 -101
  206. package/src/programmers/RandomProgrammer.ts +227 -61
  207. package/src/programmers/StringifyProgrammer.ts +374 -182
  208. package/src/programmers/ValidateProgrammer.ts +41 -44
  209. package/src/programmers/helpers/FunctionImporeter.ts +35 -11
  210. package/src/programmers/helpers/RandomJoiner.ts +25 -13
  211. package/src/programmers/helpers/UnionExplorer.ts +76 -50
  212. package/src/programmers/helpers/UnionPredicator.ts +1 -1
  213. package/src/programmers/helpers/disable_function_importer_declare.ts +5 -0
  214. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  215. package/src/programmers/internal/application_array.ts +48 -16
  216. package/src/programmers/internal/application_boolean.ts +1 -1
  217. package/src/programmers/internal/application_constant.ts +2 -2
  218. package/src/programmers/internal/application_default.ts +3 -3
  219. package/src/programmers/internal/application_definition.ts +45 -0
  220. package/src/programmers/internal/application_native.ts +15 -12
  221. package/src/programmers/internal/application_object.ts +17 -12
  222. package/src/programmers/internal/application_schema.ts +31 -65
  223. package/src/programmers/internal/application_tuple.ts +63 -13
  224. package/src/programmers/internal/check_union_array_like.ts +249 -191
  225. package/src/programmers/internal/feature_object_entries.ts +2 -2
  226. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -0
  227. package/src/schemas/IJsonApplication.ts +0 -5
  228. package/src/schemas/IJsonComponents.ts +17 -5
  229. package/src/schemas/IJsonSchema.ts +1 -1
  230. package/src/transformers/CallExpressionTransformer.ts +2 -0
  231. package/src/transformers/FileTransformer.ts +8 -8
  232. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +1 -0
  233. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +2 -1
  234. package/src/utils/ArrayUtil.ts +3 -2
  235. package/src/utils/RandomGenerator.ts +3 -3
  236. package/lib/programmers/internal/check_union_tuple.js +0 -15
  237. package/lib/programmers/internal/check_union_tuple.js.map +0 -1
  238. package/src/programmers/internal/check_union_tuple.ts +0 -33
  239. /package/lib/{programmers/internal/check_union_tuple.d.ts → metadata/IMetadataDictionary.d.ts} +0 -0
@@ -0,0 +1,130 @@
1
+ import { Metadata } from "../../../metadata/Metadata";
2
+ import { MetadataArray } from "../../../metadata/MetadataArray";
3
+ import { MetadataObject } from "../../../metadata/MetadataObject";
4
+ import { MetadataTuple } from "../../../metadata/MetadataTuple";
5
+
6
+ import { MetadataCollection } from "../../MetadataCollection";
7
+
8
+ export const iterate_metadata_collection = (
9
+ collection: MetadataCollection,
10
+ ): void => {
11
+ for (const array of collection.arrays())
12
+ if (array.recursive === null)
13
+ collection.setArrayRecursive(
14
+ array,
15
+ isArrayRecursive(new Set())(array)(array.value),
16
+ );
17
+ for (const tuple of collection.tuples())
18
+ if (tuple.recursive === null) {
19
+ const visited: Set<Metadata> = new Set();
20
+ collection.setTupleRecursive(
21
+ tuple,
22
+ tuple.elements.some(isTupleRecursive(visited)(tuple)),
23
+ );
24
+ }
25
+ for (const obj of collection.objects())
26
+ if (obj.recursive === null) {
27
+ const visited: Set<Metadata> = new Set();
28
+ collection.setObjectRecursive(
29
+ obj,
30
+ obj.properties.some((p) =>
31
+ isObjectRecursive(visited)(obj)(p.value),
32
+ ),
33
+ );
34
+ }
35
+ };
36
+
37
+ const isArrayRecursive =
38
+ (visited: Set<Metadata>) =>
39
+ (array: MetadataArray) =>
40
+ (meta: Metadata): boolean => {
41
+ if (visited.has(meta)) return false;
42
+ visited.add(meta);
43
+
44
+ return (
45
+ meta.arrays.some(
46
+ (a) => a === array || isArrayRecursive(visited)(array)(a.value),
47
+ ) ||
48
+ meta.aliases.some((d) =>
49
+ isArrayRecursive(visited)(array)(d.value),
50
+ ) ||
51
+ meta.tuples.some(
52
+ (t) =>
53
+ !t.recursive &&
54
+ t.elements.some((e) => isArrayRecursive(visited)(array)(e)),
55
+ ) ||
56
+ meta.maps.some((m) => isArrayRecursive(visited)(array)(m.value)) ||
57
+ meta.sets.some((s) => isArrayRecursive(visited)(array)(s)) ||
58
+ (meta.resolved !== null &&
59
+ isArrayRecursive(visited)(array)(meta.resolved)) ||
60
+ (meta.rest !== null && isArrayRecursive(visited)(array)(meta.rest))
61
+ );
62
+ };
63
+
64
+ const isTupleRecursive =
65
+ (visited: Set<Metadata>) =>
66
+ (tuple: MetadataTuple) =>
67
+ (meta: Metadata): boolean => {
68
+ if (visited.has(meta)) return false;
69
+ visited.add(meta);
70
+
71
+ return (
72
+ meta.tuples.some(
73
+ (t) =>
74
+ t === tuple ||
75
+ t.elements.some((e) => isTupleRecursive(visited)(tuple)(e)),
76
+ ) ||
77
+ meta.arrays.some(
78
+ (a) =>
79
+ !a.recursive && isTupleRecursive(visited)(tuple)(a.value),
80
+ ) ||
81
+ meta.maps.some((m) => isTupleRecursive(visited)(tuple)(m.value)) ||
82
+ meta.sets.some((s) => isTupleRecursive(visited)(tuple)(s)) ||
83
+ meta.aliases.some((d) =>
84
+ isTupleRecursive(visited)(tuple)(d.value),
85
+ ) ||
86
+ (meta.resolved !== null &&
87
+ isTupleRecursive(visited)(tuple)(meta.resolved)) ||
88
+ (meta.rest !== null && isTupleRecursive(visited)(tuple)(meta.rest))
89
+ );
90
+ };
91
+
92
+ const isObjectRecursive =
93
+ (visited: Set<Metadata>) =>
94
+ (obj: MetadataObject) =>
95
+ (meta: Metadata): boolean => {
96
+ if (visited.has(meta)) return false;
97
+
98
+ visited.add(meta);
99
+ return (
100
+ meta.objects.some(
101
+ (o) =>
102
+ obj === o ||
103
+ o.properties.some((prop) =>
104
+ isObjectRecursive(visited)(obj)(prop.value),
105
+ ),
106
+ ) ||
107
+ meta.aliases.some((alias) =>
108
+ isObjectRecursive(visited)(obj)(alias.value),
109
+ ) ||
110
+ meta.arrays.some(
111
+ (array) =>
112
+ !array.recursive &&
113
+ isObjectRecursive(visited)(obj)(array.value),
114
+ ) ||
115
+ meta.tuples.some(
116
+ (tuple) =>
117
+ !tuple.recursive &&
118
+ tuple.elements.some((elem) =>
119
+ isObjectRecursive(visited)(obj)(elem),
120
+ ),
121
+ ) ||
122
+ meta.maps.some((map) =>
123
+ isObjectRecursive(visited)(obj)(map.value),
124
+ ) ||
125
+ meta.sets.some((value) => isObjectRecursive(visited)(obj)(value)) ||
126
+ (meta.resolved !== null &&
127
+ isObjectRecursive(visited)(obj)(meta.resolved)) ||
128
+ (meta.rest !== null && isObjectRecursive(visited)(obj)(meta.rest))
129
+ );
130
+ };
@@ -0,0 +1,30 @@
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../metadata/Metadata";
4
+ import { MetadataAlias } from "../../../metadata/MetadataAlias";
5
+
6
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
7
+
8
+ import { MetadataCollection } from "../../MetadataCollection";
9
+ import { MetadataFactory } from "../../MetadataFactory";
10
+ import { emplace_metadata_definition } from "./emplace_metadata_definition";
11
+
12
+ export const iterate_metadata_definition =
13
+ (checker: ts.TypeChecker) =>
14
+ (options: MetadataFactory.IOptions) =>
15
+ (collection: MetadataCollection) =>
16
+ (meta: Metadata, type: ts.Type): boolean => {
17
+ if (options.absorb !== false || type.aliasSymbol === undefined)
18
+ return false;
19
+
20
+ const node: ts.Declaration | undefined =
21
+ type.aliasSymbol.declarations?.[0];
22
+ if (node === undefined) return false;
23
+
24
+ // CONSTRUCT DEFINITION
25
+ const alias: MetadataAlias = emplace_metadata_definition(checker)(
26
+ options,
27
+ )(collection)(type, meta.nullable);
28
+ ArrayUtil.add(meta.aliases, alias, (elem) => elem.name === alias.name);
29
+ return true;
30
+ };
@@ -31,6 +31,7 @@ export const iterate_metadata_object =
31
31
  fakeSchema,
32
32
  t,
33
33
  parentResolved,
34
+ false,
34
35
  ),
35
36
  );
36
37
  if (
@@ -0,0 +1,68 @@
1
+ import { Metadata } from "../../../metadata/Metadata";
2
+ import { MetadataObject } from "../../../metadata/MetadataObject";
3
+
4
+ import { MetadataCollection } from "../../MetadataCollection";
5
+
6
+ export const iterate_metadata_sort =
7
+ (collection: MetadataCollection) => (meta: Metadata) => {
8
+ const visited: Set<Metadata> = new Set();
9
+ for (const array of collection.arrays())
10
+ iterate(visited)(collection)(array.value);
11
+ for (const tuple of collection.tuples())
12
+ for (const element of tuple.elements)
13
+ iterate(visited)(collection)(element);
14
+ for (const object of collection.objects())
15
+ for (const property of object.properties)
16
+ iterate(visited)(collection)(property.value);
17
+ iterate(visited)(collection)(meta);
18
+ };
19
+
20
+ const iterate =
21
+ (visited: Set<Metadata>) =>
22
+ (collection: MetadataCollection) =>
23
+ (meta: Metadata) => {
24
+ if (visited.has(meta)) return;
25
+ visited.add(meta);
26
+
27
+ // ITERATE CHILDREN
28
+ for (const map of meta.maps) iterate(visited)(collection)(map.value);
29
+ for (const set of meta.sets) iterate(visited)(collection)(set);
30
+ if (meta.resolved !== null) iterate(visited)(collection)(meta.resolved);
31
+ if (meta.rest !== null) iterate(visited)(collection)(meta.rest);
32
+
33
+ // SORT OBJECTS
34
+ if (meta.objects.length > 1) {
35
+ meta.objects.sort((x, y) =>
36
+ MetadataObject.covers(x, y)
37
+ ? -1
38
+ : MetadataObject.covers(y, x)
39
+ ? 1
40
+ : 0,
41
+ );
42
+ meta.union_index = collection.getUnionIndex(meta);
43
+ }
44
+
45
+ // SORT ARRAYS AND TUPLES
46
+ if (meta.arrays.length > 1)
47
+ meta.arrays.sort((x, y) =>
48
+ Metadata.covers(x.value, y.value)
49
+ ? -1
50
+ : Metadata.covers(y.value, x.value)
51
+ ? 1
52
+ : 0,
53
+ );
54
+ if (meta.tuples.length > 1)
55
+ meta.tuples.sort((x, y) => {
56
+ const xt = Metadata.initialize();
57
+ const yt = Metadata.initialize();
58
+
59
+ xt.tuples.push(x);
60
+ yt.tuples.push(y);
61
+
62
+ return Metadata.covers(xt, yt)
63
+ ? -1
64
+ : Metadata.covers(yt, xt)
65
+ ? 1
66
+ : 0;
67
+ });
68
+ };
@@ -1,48 +1,24 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  import { Metadata } from "../../../metadata/Metadata";
4
-
5
- import { Writable } from "../../../typings/Writable";
4
+ import { MetadataTuple } from "../../../metadata/MetadataTuple";
6
5
 
7
6
  import { ArrayUtil } from "../../../utils/ArrayUtil";
8
7
 
9
8
  import { MetadataCollection } from "../../MetadataCollection";
10
9
  import { MetadataFactory } from "../../MetadataFactory";
11
- import { explore_metadata } from "./explore_metadata";
10
+ import { emplace_metadata_tuple } from "./emplace_metadata_tuple";
12
11
 
13
12
  export const iterate_metadata_tuple =
14
13
  (checker: ts.TypeChecker) =>
15
14
  (options: MetadataFactory.IOptions) =>
16
15
  (collection: MetadataCollection) =>
17
16
  (meta: Metadata, type: ts.TupleType): boolean => {
18
- if (!(checker as any).isTupleType(type)) return false;
19
-
20
- const elementFlags: readonly ts.ElementFlags[] =
21
- type.elementFlags ??
22
- (type.target as ts.TupleType)?.elementFlags ??
23
- [];
24
-
25
- const children: Metadata[] = checker
26
- .getTypeArguments(type as ts.TypeReference)
27
- .map((elem, i) => {
28
- const child: Metadata = explore_metadata(checker)(options)(
29
- collection,
30
- )(elem, false);
17
+ if (!checker.isTupleType(type)) return false;
31
18
 
32
- // CHECK OPTIONAL
33
- const flag: ts.ElementFlags | undefined = elementFlags[i];
34
- if (flag === ts.ElementFlags.Optional)
35
- Writable(child).optional = true;
36
-
37
- // REST TYPE
38
- if (flag !== ts.ElementFlags.Rest) return child;
39
- const wrapper: Metadata = Metadata.initialize();
40
- Writable(wrapper).rest = child;
41
- return wrapper;
42
- });
43
- ArrayUtil.set(meta.tuples, children, join_tuple_names);
19
+ const tuple: MetadataTuple = emplace_metadata_tuple(checker)(options)(
20
+ collection,
21
+ )(type, meta.nullable);
22
+ ArrayUtil.add(meta.tuples, tuple, (elem) => elem.name === tuple.name);
44
23
  return true;
45
24
  };
46
-
47
- const join_tuple_names = (metas: Metadata[]): string =>
48
- `[${metas.map((m) => m.getName).join(", ")}]`;
@@ -17,7 +17,12 @@ export const iterate_metadata_union =
17
17
  if (!type.isUnion()) return false;
18
18
  else if (options.resolve === false || parentResolved === true) {
19
19
  type.types.forEach((t) =>
20
- iterate_metadata(checker)(options)(collection)(meta, t, false),
20
+ iterate_metadata(checker)(options)(collection)(
21
+ meta,
22
+ t,
23
+ false,
24
+ false,
25
+ ),
21
26
  );
22
27
  return true;
23
28
  }
@@ -43,6 +48,7 @@ export const iterate_metadata_union =
43
48
  meta,
44
49
  t,
45
50
  true,
51
+ false,
46
52
  ),
47
53
  );
48
54
  if (union.objects.length > 1)
@@ -51,7 +57,12 @@ export const iterate_metadata_union =
51
57
  })();
52
58
  }
53
59
  normals.forEach((t) =>
54
- iterate_metadata(checker)(options)(collection)(meta, t, false),
60
+ iterate_metadata(checker)(options)(collection)(
61
+ meta,
62
+ t,
63
+ false,
64
+ false,
65
+ ),
55
66
  );
56
67
  return true;
57
68
  };
@@ -16,9 +16,10 @@ export interface IMetadata {
16
16
  resolved: IMetadata | null;
17
17
 
18
18
  rest: IMetadata | null;
19
- arrays: IMetadata[];
20
- tuples: IMetadata[][];
19
+ arrays: string[];
20
+ tuples: string[];
21
21
  objects: string[];
22
+ aliases: string[];
22
23
 
23
24
  natives: string[];
24
25
  sets: IMetadata[];
@@ -0,0 +1,12 @@
1
+ import { IJsDocTagInfo } from "./IJsDocTagInfo";
2
+ import { IMetadata } from "./IMetadata";
3
+
4
+ export interface IMetadataAlias {
5
+ name: string;
6
+ value: IMetadata;
7
+
8
+ description: string | null;
9
+ jsDocTags: IJsDocTagInfo[];
10
+ recursive: boolean;
11
+ nullables: boolean[];
12
+ }
@@ -1,7 +1,7 @@
1
1
  import { IMetadata } from "./IMetadata";
2
- import { IMetadataObject } from "./IMetadataObject";
2
+ import { IMetadataCollection } from "./IMetadataCollection";
3
3
 
4
4
  export interface IMetadataApplication {
5
5
  metadatas: IMetadata[];
6
- collection: IMetadataObject[];
6
+ collection: IMetadataCollection;
7
7
  }
@@ -0,0 +1,10 @@
1
+ import { IMetadata } from "./IMetadata";
2
+
3
+ export interface IMetadataArray {
4
+ name: string;
5
+ value: IMetadata;
6
+
7
+ nullables: boolean[];
8
+ recursive: boolean;
9
+ index: number | null;
10
+ }
@@ -0,0 +1,11 @@
1
+ import { IMetadataAlias } from "./IMetadataAlias";
2
+ import { IMetadataArray } from "./IMetadataArray";
3
+ import { IMetadataObject } from "./IMetadataObject";
4
+ import { IMetadataTuple } from "./IMetadataTuple";
5
+
6
+ export interface IMetadataCollection {
7
+ objects: IMetadataObject[];
8
+ aliases: IMetadataAlias[];
9
+ arrays: IMetadataArray[];
10
+ tuples: IMetadataTuple[];
11
+ }
@@ -0,0 +1,14 @@
1
+ import { MetadataAlias } from "./MetadataAlias";
2
+ import { MetadataArray } from "./MetadataArray";
3
+ import { MetadataObject } from "./MetadataObject";
4
+ import { MetadataTuple } from "./MetadataTuple";
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ export interface IMetadataDictionary {
10
+ objects: Map<string, MetadataObject>;
11
+ aliases: Map<string, MetadataAlias>;
12
+ arrays: Map<string, MetadataArray>;
13
+ tuples: Map<string, MetadataTuple>;
14
+ }
@@ -7,23 +7,12 @@ export interface IMetadataObject {
7
7
  description?: string;
8
8
  jsDocTags: IJsDocTagInfo[];
9
9
 
10
- /**
11
- * @internal
12
- */
13
10
  index: number;
14
-
15
- /**
16
- * @internal
17
- */
18
- validated: boolean;
19
-
20
- /**
21
- * @internal
22
- */
23
11
  recursive: boolean;
12
+ nullables: boolean[];
24
13
 
25
14
  /**
26
15
  * @internal
27
16
  */
28
- nullables: boolean[];
17
+ validated: boolean;
29
18
  }
@@ -5,7 +5,7 @@ import { IMetadataTag } from "./IMetadataTag";
5
5
  export interface IMetadataProperty {
6
6
  key: IMetadata;
7
7
  value: IMetadata;
8
- description?: string;
8
+ description: string | null;
9
9
  tags: IMetadataTag[];
10
10
  jsDocTags: IJsDocTagInfo[];
11
11
  }
@@ -0,0 +1,10 @@
1
+ import { IMetadata } from "./IMetadata";
2
+
3
+ export interface IMetadataTuple {
4
+ name: string;
5
+ elements: IMetadata[];
6
+
7
+ index: number | null;
8
+ recursive: boolean;
9
+ nullables: boolean[];
10
+ }