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.
- package/lib/IRandomGenerator.d.ts +1 -0
- package/lib/factories/IdentifierFactory.js +2 -1
- package/lib/factories/IdentifierFactory.js.map +1 -1
- package/lib/factories/MetadataCollection.d.ts +22 -4
- package/lib/factories/MetadataCollection.js +121 -28
- package/lib/factories/MetadataCollection.js.map +1 -1
- package/lib/factories/MetadataFactory.d.ts +1 -0
- package/lib/factories/MetadataFactory.js +6 -48
- package/lib/factories/MetadataFactory.js.map +1 -1
- package/lib/factories/MetadataTagFactory.js +5 -3
- package/lib/factories/MetadataTagFactory.js.map +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +5 -0
- package/lib/factories/internal/metadata/emplace_metadata_array.js +38 -0
- package/lib/factories/internal/metadata/emplace_metadata_array.js.map +1 -0
- package/lib/factories/internal/metadata/emplace_metadata_definition.d.ts +5 -0
- package/lib/factories/internal/metadata/emplace_metadata_definition.js +38 -0
- package/lib/factories/internal/metadata/emplace_metadata_definition.js.map +1 -0
- package/lib/factories/internal/metadata/emplace_metadata_object.js +4 -4
- package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +5 -0
- package/lib/factories/internal/metadata/emplace_metadata_tuple.js +58 -0
- package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -0
- package/lib/factories/internal/metadata/explore_metadata.d.ts +1 -1
- package/lib/factories/internal/metadata/explore_metadata.js +11 -34
- package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata.js +5 -2
- package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_array.js +4 -5
- package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_collection.d.ts +2 -0
- package/lib/factories/internal/metadata/iterate_metadata_collection.js +151 -0
- package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -0
- package/lib/factories/internal/metadata/iterate_metadata_definition.d.ts +5 -0
- package/lib/factories/internal/metadata/iterate_metadata_definition.js +24 -0
- package/lib/factories/internal/metadata/iterate_metadata_definition.js.map +1 -0
- package/lib/factories/internal/metadata/iterate_metadata_object.js +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_sort.d.ts +3 -0
- package/lib/factories/internal/metadata/iterate_metadata_sort.js +156 -0
- package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -0
- package/lib/factories/internal/metadata/iterate_metadata_tuple.js +3 -26
- package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_union.js +3 -3
- package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
- package/lib/metadata/IMetadata.d.ts +3 -2
- package/lib/metadata/IMetadataAlias.d.ts +10 -0
- package/lib/metadata/IMetadataAlias.js +3 -0
- package/lib/metadata/IMetadataAlias.js.map +1 -0
- package/lib/metadata/IMetadataApplication.d.ts +2 -2
- package/lib/metadata/IMetadataArray.d.ts +8 -0
- package/lib/metadata/IMetadataArray.js +3 -0
- package/lib/metadata/IMetadataArray.js.map +1 -0
- package/lib/metadata/IMetadataCollection.d.ts +10 -0
- package/lib/metadata/IMetadataCollection.js +3 -0
- package/lib/metadata/IMetadataCollection.js.map +1 -0
- package/lib/metadata/IMetadataDictionary.js +3 -0
- package/lib/metadata/IMetadataDictionary.js.map +1 -0
- package/lib/metadata/IMetadataObject.d.ts +3 -0
- package/lib/metadata/IMetadataProperty.d.ts +1 -1
- package/lib/metadata/IMetadataTuple.d.ts +8 -0
- package/lib/metadata/IMetadataTuple.js +3 -0
- package/lib/metadata/IMetadataTuple.js.map +1 -0
- package/lib/metadata/Metadata.d.ts +24 -21
- package/lib/metadata/Metadata.js +323 -262
- package/lib/metadata/Metadata.js.map +1 -1
- package/lib/metadata/MetadataAlias.d.ts +16 -0
- package/lib/metadata/MetadataAlias.js +39 -0
- package/lib/metadata/MetadataAlias.js.map +1 -0
- package/lib/metadata/MetadataArray.d.ts +12 -0
- package/lib/metadata/MetadataArray.js +36 -0
- package/lib/metadata/MetadataArray.js.map +1 -0
- package/lib/metadata/MetadataObject.d.ts +4 -0
- package/lib/metadata/MetadataObject.js +3 -5
- package/lib/metadata/MetadataObject.js.map +1 -1
- package/lib/metadata/MetadataProperty.d.ts +1 -1
- package/lib/metadata/MetadataProperty.js +3 -3
- package/lib/metadata/MetadataProperty.js.map +1 -1
- package/lib/metadata/MetadataTuple.d.ts +12 -0
- package/lib/metadata/MetadataTuple.js +36 -0
- package/lib/metadata/MetadataTuple.js.map +1 -0
- package/lib/programmers/ApplicationProgrammer.js +3 -3
- package/lib/programmers/ApplicationProgrammer.js.map +1 -1
- package/lib/programmers/AssertProgrammer.js +13 -21
- package/lib/programmers/AssertProgrammer.js.map +1 -1
- package/lib/programmers/CheckerProgrammer.d.ts +6 -7
- package/lib/programmers/CheckerProgrammer.js +276 -185
- package/lib/programmers/CheckerProgrammer.js.map +1 -1
- package/lib/programmers/CloneProgrammer.js +312 -204
- package/lib/programmers/CloneProgrammer.js.map +1 -1
- package/lib/programmers/FeatureProgrammer.d.ts +21 -27
- package/lib/programmers/FeatureProgrammer.js +60 -63
- package/lib/programmers/FeatureProgrammer.js.map +1 -1
- package/lib/programmers/IsProgrammer.d.ts +3 -3
- package/lib/programmers/IsProgrammer.js +43 -28
- package/lib/programmers/IsProgrammer.js.map +1 -1
- package/lib/programmers/LiteralsProgrammer.js +1 -0
- package/lib/programmers/LiteralsProgrammer.js.map +1 -1
- package/lib/programmers/PruneProgrammer.js +270 -176
- package/lib/programmers/PruneProgrammer.js.map +1 -1
- package/lib/programmers/RandomProgrammer.js +124 -32
- package/lib/programmers/RandomProgrammer.js.map +1 -1
- package/lib/programmers/StringifyProgrammer.js +462 -356
- package/lib/programmers/StringifyProgrammer.js.map +1 -1
- package/lib/programmers/ValidateProgrammer.js +9 -9
- package/lib/programmers/ValidateProgrammer.js.map +1 -1
- package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
- package/lib/programmers/helpers/FunctionImporeter.js +17 -2
- package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
- package/lib/programmers/helpers/RandomJoiner.d.ts +6 -1
- package/lib/programmers/helpers/RandomJoiner.js +11 -14
- package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
- package/lib/programmers/helpers/UnionExplorer.d.ts +12 -10
- package/lib/programmers/helpers/UnionExplorer.js +47 -12
- package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
- package/lib/programmers/helpers/UnionPredicator.js +1 -1
- package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
- package/lib/programmers/helpers/disable_function_importer_declare.js +1 -0
- package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
- package/lib/programmers/internal/JSON_SCHEMA_PREFIX.d.ts +1 -1
- package/lib/programmers/internal/JSON_SCHEMA_PREFIX.js +2 -2
- package/lib/programmers/internal/JSON_SCHEMA_PREFIX.js.map +1 -1
- package/lib/programmers/internal/application_array.js +41 -21
- package/lib/programmers/internal/application_array.js.map +1 -1
- package/lib/programmers/internal/application_boolean.js +1 -1
- package/lib/programmers/internal/application_boolean.js.map +1 -1
- package/lib/programmers/internal/application_constant.js +2 -2
- package/lib/programmers/internal/application_constant.js.map +1 -1
- package/lib/programmers/internal/application_default.js +3 -3
- package/lib/programmers/internal/application_default.js.map +1 -1
- package/lib/programmers/internal/application_definition.d.ts +5 -0
- package/lib/programmers/internal/application_definition.js +45 -0
- package/lib/programmers/internal/application_definition.js.map +1 -0
- package/lib/programmers/internal/application_native.js +14 -11
- package/lib/programmers/internal/application_native.js.map +1 -1
- package/lib/programmers/internal/application_object.js +19 -14
- package/lib/programmers/internal/application_object.js.map +1 -1
- package/lib/programmers/internal/application_schema.js +28 -31
- package/lib/programmers/internal/application_schema.js.map +1 -1
- package/lib/programmers/internal/application_tuple.js +34 -5
- package/lib/programmers/internal/application_tuple.js.map +1 -1
- package/lib/programmers/internal/check_union_array_like.js +54 -63
- package/lib/programmers/internal/check_union_array_like.js.map +1 -1
- package/lib/programmers/internal/feature_object_entries.js +2 -2
- package/lib/programmers/internal/feature_object_entries.js.map +1 -1
- package/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts +2 -0
- package/lib/programmers/internal/wrap_metadata_rest_tuple.js +18 -0
- package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -0
- package/lib/schemas/IJsonApplication.d.ts +0 -4
- package/lib/schemas/IJsonComponents.d.ts +16 -4
- package/lib/schemas/IJsonSchema.d.ts +1 -1
- package/lib/transformers/CallExpressionTransformer.js.map +1 -1
- package/lib/transformers/FileTransformer.js +3 -3
- package/lib/transformers/FileTransformer.js.map +1 -1
- package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +1 -0
- package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
- package/lib/transformers/features/miscellaneous/MetadataTransformer.js +2 -1
- package/lib/transformers/features/miscellaneous/MetadataTransformer.js.map +1 -1
- package/lib/utils/ArrayUtil.d.ts +1 -1
- package/lib/utils/ArrayUtil.js +2 -1
- package/lib/utils/ArrayUtil.js.map +1 -1
- package/lib/utils/RandomGenerator.js +2 -3
- package/lib/utils/RandomGenerator.js.map +1 -1
- package/package.json +6 -1
- package/src/IRandomGenerator.ts +1 -0
- package/src/factories/IdentifierFactory.ts +3 -1
- package/src/factories/MetadataCollection.ts +170 -34
- package/src/factories/MetadataFactory.ts +7 -29
- package/src/factories/MetadataTagFactory.ts +6 -3
- package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -0
- package/src/factories/internal/metadata/emplace_metadata_definition.ts +35 -0
- package/src/factories/internal/metadata/emplace_metadata_object.ts +4 -4
- package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -0
- package/src/factories/internal/metadata/explore_metadata.ts +18 -44
- package/src/factories/internal/metadata/iterate_metadata.ts +13 -3
- package/src/factories/internal/metadata/iterate_metadata_array.ts +7 -11
- package/src/factories/internal/metadata/iterate_metadata_collection.ts +130 -0
- package/src/factories/internal/metadata/iterate_metadata_definition.ts +30 -0
- package/src/factories/internal/metadata/iterate_metadata_object.ts +1 -0
- package/src/factories/internal/metadata/iterate_metadata_sort.ts +68 -0
- package/src/factories/internal/metadata/iterate_metadata_tuple.ts +7 -31
- package/src/factories/internal/metadata/iterate_metadata_union.ts +13 -2
- package/src/metadata/IMetadata.ts +3 -2
- package/src/metadata/IMetadataAlias.ts +12 -0
- package/src/metadata/IMetadataApplication.ts +2 -2
- package/src/metadata/IMetadataArray.ts +10 -0
- package/src/metadata/IMetadataCollection.ts +11 -0
- package/src/metadata/IMetadataDictionary.ts +14 -0
- package/src/metadata/IMetadataObject.ts +2 -13
- package/src/metadata/IMetadataProperty.ts +1 -1
- package/src/metadata/IMetadataTuple.ts +10 -0
- package/src/metadata/Metadata.ts +180 -134
- package/src/metadata/MetadataAlias.ts +61 -0
- package/src/metadata/MetadataArray.ts +52 -0
- package/src/metadata/MetadataObject.ts +7 -20
- package/src/metadata/MetadataProperty.ts +5 -5
- package/src/metadata/MetadataTuple.ts +53 -0
- package/src/programmers/ApplicationProgrammer.ts +1 -2
- package/src/programmers/AssertProgrammer.ts +45 -39
- package/src/programmers/CheckerProgrammer.ts +612 -331
- package/src/programmers/CloneProgrammer.ts +344 -138
- package/src/programmers/FeatureProgrammer.ts +110 -115
- package/src/programmers/IsProgrammer.ts +86 -52
- package/src/programmers/LiteralsProgrammer.ts +1 -0
- package/src/programmers/PruneProgrammer.ts +304 -101
- package/src/programmers/RandomProgrammer.ts +227 -61
- package/src/programmers/StringifyProgrammer.ts +374 -182
- package/src/programmers/ValidateProgrammer.ts +41 -44
- package/src/programmers/helpers/FunctionImporeter.ts +35 -11
- package/src/programmers/helpers/RandomJoiner.ts +25 -13
- package/src/programmers/helpers/UnionExplorer.ts +76 -50
- package/src/programmers/helpers/UnionPredicator.ts +1 -1
- package/src/programmers/helpers/disable_function_importer_declare.ts +5 -0
- package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
- package/src/programmers/internal/application_array.ts +48 -16
- package/src/programmers/internal/application_boolean.ts +1 -1
- package/src/programmers/internal/application_constant.ts +2 -2
- package/src/programmers/internal/application_default.ts +3 -3
- package/src/programmers/internal/application_definition.ts +45 -0
- package/src/programmers/internal/application_native.ts +15 -12
- package/src/programmers/internal/application_object.ts +17 -12
- package/src/programmers/internal/application_schema.ts +31 -65
- package/src/programmers/internal/application_tuple.ts +63 -13
- package/src/programmers/internal/check_union_array_like.ts +249 -191
- package/src/programmers/internal/feature_object_entries.ts +2 -2
- package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -0
- package/src/schemas/IJsonApplication.ts +0 -5
- package/src/schemas/IJsonComponents.ts +17 -5
- package/src/schemas/IJsonSchema.ts +1 -1
- package/src/transformers/CallExpressionTransformer.ts +2 -0
- package/src/transformers/FileTransformer.ts +8 -8
- package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +1 -0
- package/src/transformers/features/miscellaneous/MetadataTransformer.ts +2 -1
- package/src/utils/ArrayUtil.ts +3 -2
- package/src/utils/RandomGenerator.ts +3 -3
- package/lib/programmers/internal/check_union_tuple.js +0 -15
- package/lib/programmers/internal/check_union_tuple.js.map +0 -1
- package/src/programmers/internal/check_union_tuple.ts +0 -33
- /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
|
+
};
|
|
@@ -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 {
|
|
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 (!
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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)(
|
|
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)(
|
|
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:
|
|
20
|
-
tuples:
|
|
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 {
|
|
2
|
+
import { IMetadataCollection } from "./IMetadataCollection";
|
|
3
3
|
|
|
4
4
|
export interface IMetadataApplication {
|
|
5
5
|
metadatas: IMetadata[];
|
|
6
|
-
collection:
|
|
6
|
+
collection: IMetadataCollection;
|
|
7
7
|
}
|
|
@@ -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
|
-
|
|
17
|
+
validated: boolean;
|
|
29
18
|
}
|