typia 3.8.8 → 3.9.0-dev.20230603
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/CommentFactory.js +2 -1
- package/lib/factories/CommentFactory.js.map +1 -1
- 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/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/IMetadataDefinition.d.ts +10 -0
- package/lib/metadata/IMetadataDefinition.js +3 -0
- package/lib/metadata/IMetadataDefinition.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/MetadataArray.d.ts +12 -0
- package/lib/metadata/MetadataArray.js +36 -0
- package/lib/metadata/MetadataArray.js.map +1 -0
- package/lib/metadata/MetadataDefinition.d.ts +16 -0
- package/lib/metadata/MetadataDefinition.js +39 -0
- package/lib/metadata/MetadataDefinition.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_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/CommentFactory.ts +2 -1
- package/src/factories/IdentifierFactory.ts +3 -1
- package/src/factories/MetadataCollection.ts +173 -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 +34 -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/IMetadataApplication.ts +2 -2
- package/src/metadata/IMetadataArray.ts +10 -0
- package/src/metadata/IMetadataCollection.ts +11 -0
- package/src/metadata/IMetadataDefinition.ts +12 -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 +473 -134
- package/src/metadata/MetadataArray.ts +52 -0
- package/src/metadata/MetadataDefinition.ts +65 -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_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
package/src/metadata/Metadata.ts
CHANGED
|
@@ -1,49 +1,44 @@
|
|
|
1
1
|
import { Atomic } from "../typings/Atomic";
|
|
2
2
|
import { ClassProperties } from "../typings/ClassProperties";
|
|
3
|
+
import { Writable } from "../typings/Writable";
|
|
3
4
|
|
|
4
5
|
import { ArrayUtil } from "../utils/ArrayUtil";
|
|
5
6
|
|
|
6
7
|
import { IMetadata } from "./IMetadata";
|
|
7
|
-
import {
|
|
8
|
+
import { IMetadataCollection } from "./IMetadataCollection";
|
|
9
|
+
import { IMetadataDictionary } from "./IMetadataDictionary";
|
|
10
|
+
import { MetadataArray } from "./MetadataArray";
|
|
8
11
|
import { MetadataConstant } from "./MetadataConstant";
|
|
12
|
+
import { MetadataDefinition } from "./MetadataDefinition";
|
|
9
13
|
import { MetadataObject } from "./MetadataObject";
|
|
10
14
|
import { MetadataProperty } from "./MetadataProperty";
|
|
15
|
+
import { MetadataTuple } from "./MetadataTuple";
|
|
11
16
|
|
|
12
17
|
export class Metadata {
|
|
13
|
-
public
|
|
14
|
-
public
|
|
15
|
-
public
|
|
16
|
-
public
|
|
17
|
-
public
|
|
18
|
-
|
|
19
|
-
public
|
|
20
|
-
public
|
|
21
|
-
public
|
|
22
|
-
public
|
|
23
|
-
|
|
24
|
-
public
|
|
25
|
-
public
|
|
26
|
-
public
|
|
27
|
-
public
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
public
|
|
31
|
-
public
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* @internal
|
|
40
|
-
*/
|
|
41
|
-
private parent_resolved_: boolean = false;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* @internal
|
|
45
|
-
*/
|
|
46
|
-
public union_index?: number;
|
|
18
|
+
public any: boolean;
|
|
19
|
+
public required: boolean;
|
|
20
|
+
public optional: boolean;
|
|
21
|
+
public nullable: boolean;
|
|
22
|
+
public functional: boolean;
|
|
23
|
+
|
|
24
|
+
public resolved: Metadata | null;
|
|
25
|
+
public atomics: Atomic.Literal[];
|
|
26
|
+
public constants: MetadataConstant[];
|
|
27
|
+
public templates: Metadata[][];
|
|
28
|
+
|
|
29
|
+
public rest: Metadata | null;
|
|
30
|
+
public arrays: MetadataArray[];
|
|
31
|
+
public tuples: MetadataTuple[];
|
|
32
|
+
public objects: MetadataObject[];
|
|
33
|
+
public definitions: MetadataDefinition[];
|
|
34
|
+
|
|
35
|
+
public natives: string[];
|
|
36
|
+
public sets: Metadata[];
|
|
37
|
+
public maps: Metadata.Entry[];
|
|
38
|
+
|
|
39
|
+
/** @internal */ private name_?: string;
|
|
40
|
+
/** @internal */ private parent_resolved_: boolean = false;
|
|
41
|
+
/** @internal */ public union_index?: number;
|
|
47
42
|
|
|
48
43
|
/* -----------------------------------------------------------
|
|
49
44
|
CONSTRUCTORS
|
|
@@ -67,6 +62,7 @@ export class Metadata {
|
|
|
67
62
|
this.arrays = props.arrays;
|
|
68
63
|
this.tuples = props.tuples;
|
|
69
64
|
this.objects = props.objects;
|
|
65
|
+
this.definitions = props.definitions;
|
|
70
66
|
|
|
71
67
|
this.natives = props.natives;
|
|
72
68
|
this.sets = props.sets;
|
|
@@ -98,6 +94,7 @@ export class Metadata {
|
|
|
98
94
|
arrays: [],
|
|
99
95
|
tuples: [],
|
|
100
96
|
objects: [],
|
|
97
|
+
definitions: [],
|
|
101
98
|
|
|
102
99
|
rest: null,
|
|
103
100
|
natives: [],
|
|
@@ -124,11 +121,10 @@ export class Metadata {
|
|
|
124
121
|
resolved: this.resolved ? this.resolved.toJSON() : null,
|
|
125
122
|
|
|
126
123
|
rest: this.rest ? this.rest.toJSON() : null,
|
|
127
|
-
arrays: this.arrays.map((
|
|
128
|
-
tuples: this.tuples.map((
|
|
129
|
-
meta.map((meta) => meta.toJSON()),
|
|
130
|
-
),
|
|
124
|
+
arrays: this.arrays.map((array) => array.name),
|
|
125
|
+
tuples: this.tuples.map((tuple) => tuple.name),
|
|
131
126
|
objects: this.objects.map((obj) => obj.name),
|
|
127
|
+
definitions: this.definitions.map((def) => def.name),
|
|
132
128
|
|
|
133
129
|
natives: this.natives.slice(),
|
|
134
130
|
sets: this.sets.map((meta) => meta.toJSON()),
|
|
@@ -139,29 +135,66 @@ export class Metadata {
|
|
|
139
135
|
};
|
|
140
136
|
}
|
|
141
137
|
|
|
142
|
-
public static from(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
138
|
+
public static from(
|
|
139
|
+
meta: IMetadata,
|
|
140
|
+
collection: IMetadataCollection,
|
|
141
|
+
): Metadata {
|
|
142
|
+
const dict: IMetadataDictionary = {
|
|
143
|
+
objects: new Map(
|
|
144
|
+
collection.objects.map((obj) => [
|
|
145
|
+
obj.name,
|
|
146
|
+
MetadataObject._From_without_properties(obj),
|
|
147
|
+
]),
|
|
148
|
+
),
|
|
149
|
+
definitions: new Map(
|
|
150
|
+
collection.definitions.map((def) => [
|
|
151
|
+
def.name,
|
|
152
|
+
MetadataDefinition._From_without_value(def),
|
|
153
|
+
]),
|
|
154
|
+
),
|
|
155
|
+
arrays: new Map(
|
|
156
|
+
collection.arrays.map((arr) => [
|
|
157
|
+
arr.name,
|
|
158
|
+
MetadataArray._From_without_value(arr),
|
|
159
|
+
]),
|
|
160
|
+
),
|
|
161
|
+
tuples: new Map(
|
|
162
|
+
collection.tuples.map((tpl) => [
|
|
163
|
+
tpl.name,
|
|
164
|
+
MetadataTuple._From_without_elements(tpl),
|
|
165
|
+
]),
|
|
166
|
+
),
|
|
167
|
+
};
|
|
146
168
|
|
|
147
|
-
for (const obj of objects) {
|
|
148
|
-
const initialized = dict.get(obj.name)!;
|
|
169
|
+
for (const obj of collection.objects) {
|
|
170
|
+
const initialized = dict.objects.get(obj.name)!;
|
|
149
171
|
initialized.properties.push(
|
|
150
172
|
...obj.properties.map((prop) =>
|
|
151
173
|
MetadataProperty._From(prop, dict),
|
|
152
174
|
),
|
|
153
175
|
);
|
|
154
176
|
}
|
|
177
|
+
for (const def of collection.definitions)
|
|
178
|
+
Writable(dict.definitions.get(def.name)!).value = this._From(
|
|
179
|
+
def.value,
|
|
180
|
+
dict,
|
|
181
|
+
);
|
|
182
|
+
for (const array of collection.arrays)
|
|
183
|
+
Writable(dict.arrays.get(array.name)!).value = this._From(
|
|
184
|
+
array.value,
|
|
185
|
+
dict,
|
|
186
|
+
);
|
|
187
|
+
for (const tuple of collection.tuples)
|
|
188
|
+
Writable(dict.tuples.get(tuple.name)!).elements =
|
|
189
|
+
tuple.elements.map((elem) => this._From(elem, dict));
|
|
190
|
+
|
|
155
191
|
return this._From(meta, dict);
|
|
156
192
|
}
|
|
157
193
|
|
|
158
194
|
/**
|
|
159
195
|
* @internal
|
|
160
196
|
*/
|
|
161
|
-
public static _From(
|
|
162
|
-
meta: IMetadata,
|
|
163
|
-
objects: Map<string, MetadataObject>,
|
|
164
|
-
): Metadata {
|
|
197
|
+
public static _From(meta: IMetadata, dict: IMetadataDictionary): Metadata {
|
|
165
198
|
return this.create({
|
|
166
199
|
any: meta.any,
|
|
167
200
|
required: meta.required,
|
|
@@ -172,29 +205,49 @@ export class Metadata {
|
|
|
172
205
|
constants: JSON.parse(JSON.stringify(meta.constants)),
|
|
173
206
|
atomics: meta.atomics.slice(),
|
|
174
207
|
templates: meta.templates.map((tpl) =>
|
|
175
|
-
tpl.map((meta) => this._From(meta,
|
|
208
|
+
tpl.map((meta) => this._From(meta, dict)),
|
|
176
209
|
),
|
|
177
|
-
resolved: meta.resolved ? this._From(meta.resolved,
|
|
210
|
+
resolved: meta.resolved ? this._From(meta.resolved, dict) : null,
|
|
178
211
|
|
|
179
|
-
rest: meta.rest ? this._From(meta.rest,
|
|
180
|
-
arrays: meta.arrays.map((
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
212
|
+
rest: meta.rest ? this._From(meta.rest, dict) : null,
|
|
213
|
+
arrays: meta.arrays.map((id) => {
|
|
214
|
+
const array = dict.arrays.get(id);
|
|
215
|
+
if (array === undefined)
|
|
216
|
+
throw new Error(
|
|
217
|
+
`Error on Metadata.from(): failed to find array "${id}".`,
|
|
218
|
+
);
|
|
219
|
+
return array;
|
|
220
|
+
}),
|
|
221
|
+
tuples: meta.tuples.map((id) => {
|
|
222
|
+
const tuple = dict.tuples.get(id);
|
|
223
|
+
if (tuple === undefined)
|
|
224
|
+
throw new Error(
|
|
225
|
+
`Error on Metadata.from(): failed to find tuple "${id}".`,
|
|
226
|
+
);
|
|
227
|
+
return tuple;
|
|
228
|
+
}),
|
|
184
229
|
objects: meta.objects.map((name) => {
|
|
185
|
-
const found = objects.get(name);
|
|
230
|
+
const found = dict.objects.get(name);
|
|
186
231
|
if (found === undefined)
|
|
187
232
|
throw new Error(
|
|
188
233
|
`Error on Metadata.from(): failed to find object "${name}".`,
|
|
189
234
|
);
|
|
190
235
|
return found;
|
|
191
236
|
}),
|
|
237
|
+
definitions: meta.definitions.map((def) => {
|
|
238
|
+
const found = dict.definitions.get(def);
|
|
239
|
+
if (found === undefined)
|
|
240
|
+
throw new Error(
|
|
241
|
+
`Error on Metadata.from(): failed to find definition "${def}".`,
|
|
242
|
+
);
|
|
243
|
+
return found;
|
|
244
|
+
}),
|
|
192
245
|
|
|
193
246
|
natives: meta.natives.slice(),
|
|
194
|
-
sets: meta.sets.map((meta) => this._From(meta,
|
|
247
|
+
sets: meta.sets.map((meta) => this._From(meta, dict)),
|
|
195
248
|
maps: meta.maps.map((entry) => ({
|
|
196
|
-
key: this._From(entry.key,
|
|
197
|
-
value: this._From(entry.value,
|
|
249
|
+
key: this._From(entry.key, dict),
|
|
250
|
+
value: this._From(entry.value, dict),
|
|
198
251
|
})),
|
|
199
252
|
});
|
|
200
253
|
}
|
|
@@ -203,7 +256,7 @@ export class Metadata {
|
|
|
203
256
|
ACCESSORS
|
|
204
257
|
----------------------------------------------------------- */
|
|
205
258
|
public getName(): string {
|
|
206
|
-
this.name_
|
|
259
|
+
this.name_ ??= getName(this);
|
|
207
260
|
return this.name_;
|
|
208
261
|
}
|
|
209
262
|
|
|
@@ -214,18 +267,19 @@ export class Metadata {
|
|
|
214
267
|
return (
|
|
215
268
|
(this.resolved ? 1 : 0) +
|
|
216
269
|
(this.functional ? 1 : 0) +
|
|
270
|
+
(this.rest ? this.rest.size() : 0) +
|
|
217
271
|
this.templates.length +
|
|
218
272
|
this.atomics.length +
|
|
219
273
|
this.constants
|
|
220
274
|
.map((c) => c.values.length)
|
|
221
275
|
.reduce((x, y) => x + y, 0) +
|
|
222
|
-
(this.rest ? this.rest.size() : 0) +
|
|
223
276
|
this.arrays.length +
|
|
224
277
|
this.tuples.length +
|
|
225
|
-
this.objects.length +
|
|
226
278
|
this.natives.length +
|
|
279
|
+
this.maps.length +
|
|
227
280
|
this.sets.length +
|
|
228
|
-
this.
|
|
281
|
+
this.objects.length +
|
|
282
|
+
this.definitions.length
|
|
229
283
|
);
|
|
230
284
|
}
|
|
231
285
|
public bucket(): number {
|
|
@@ -238,10 +292,11 @@ export class Metadata {
|
|
|
238
292
|
(this.rest ? this.rest.size() : 0) +
|
|
239
293
|
(this.arrays.length ? 1 : 0) +
|
|
240
294
|
(this.tuples.length ? 1 : 0) +
|
|
241
|
-
(this.objects.length ? 1 : 0) +
|
|
242
295
|
(this.natives.length ? 1 : 0) +
|
|
243
296
|
(this.sets.length ? 1 : 0) +
|
|
244
|
-
(this.maps.length ? 1 : 0)
|
|
297
|
+
(this.maps.length ? 1 : 0) +
|
|
298
|
+
(this.objects.length ? 1 : 0) +
|
|
299
|
+
(this.definitions.length ? 1 : 0)
|
|
245
300
|
);
|
|
246
301
|
}
|
|
247
302
|
public isConstant(): boolean {
|
|
@@ -284,49 +339,316 @@ export class Metadata {
|
|
|
284
339
|
public isParentResolved(): boolean {
|
|
285
340
|
return this.parent_resolved_;
|
|
286
341
|
}
|
|
342
|
+
|
|
343
|
+
// /* -----------------------------------------------------------
|
|
344
|
+
// COMBINERS
|
|
345
|
+
// ----------------------------------------------------------- */
|
|
346
|
+
// public computeEmpty(): boolean {
|
|
347
|
+
// return this.computeSize() === 0;
|
|
348
|
+
// }
|
|
349
|
+
|
|
350
|
+
// public computeSize(): number {
|
|
351
|
+
// return (this.computed_size_ ??=
|
|
352
|
+
// (this.computeResolved() ? 1 : 0) +
|
|
353
|
+
// (this.computeFunctional() ? 1 : 0) +
|
|
354
|
+
// (this.computeRest() ? 1 : 0) +
|
|
355
|
+
// this.computeTemplates().length +
|
|
356
|
+
// this.computeAtomics().size +
|
|
357
|
+
// [...this.computeConstants().values()]
|
|
358
|
+
// .map((v) => v.size)
|
|
359
|
+
// .reduce((a, b) => a + b, 0) +
|
|
360
|
+
// this.computeArrays().length +
|
|
361
|
+
// this.computeTuples().length +
|
|
362
|
+
// this.computeObjects().length +
|
|
363
|
+
// this.computeDefinitions().length +
|
|
364
|
+
// this.computeNatives().size +
|
|
365
|
+
// this.computeSets().length +
|
|
366
|
+
// this.computeMaps().length);
|
|
367
|
+
// }
|
|
368
|
+
|
|
369
|
+
// public computeBucket(): number {
|
|
370
|
+
// return (this.computed_bucket_ ??=
|
|
371
|
+
// (this.computeResolved() ? 1 : 0) +
|
|
372
|
+
// (this.computeFunctional() ? 1 : 0) +
|
|
373
|
+
// (this.computeTemplates().length ? 1 : 0) +
|
|
374
|
+
// (this.computeAtomics().size ? 1 : 0) +
|
|
375
|
+
// (this.computeConstants().size ? 1 : 0) +
|
|
376
|
+
// (this.computeRest() ? 1 : 0) +
|
|
377
|
+
// (this.computeArrays().length ? 1 : 0) +
|
|
378
|
+
// (this.computeTuples().length ? 1 : 0) +
|
|
379
|
+
// (this.computeObjects().length ? 1 : 0) +
|
|
380
|
+
// (this.computeNatives().size ? 1 : 0) +
|
|
381
|
+
// (this.computeSets().length ? 1 : 0) +
|
|
382
|
+
// (this.computeMaps().length ? 1 : 0));
|
|
383
|
+
// }
|
|
384
|
+
|
|
385
|
+
// public computeAny(): boolean {
|
|
386
|
+
// return (this.computed_any_ ??= Metadata._Iterate([] as boolean[])(
|
|
387
|
+
// (flags) => (meta) => flags.push(meta.any),
|
|
388
|
+
// )(this).reduce((x, y) => x || y));
|
|
389
|
+
// }
|
|
390
|
+
|
|
391
|
+
// public computeRequired(): boolean {
|
|
392
|
+
// return (this.computed_required_ ??= Metadata._Iterate([] as boolean[])(
|
|
393
|
+
// (flags) => (meta) => flags.push(meta.required),
|
|
394
|
+
// )(this).reduce((x, y) => x && y));
|
|
395
|
+
// }
|
|
396
|
+
|
|
397
|
+
// public computeOptional(): boolean {
|
|
398
|
+
// return (this.computed_optional_ ??= Metadata._Iterate([] as boolean[])(
|
|
399
|
+
// (flags) => (meta) => flags.push(meta.optional),
|
|
400
|
+
// )(this).reduce((x, y) => x || y));
|
|
401
|
+
// }
|
|
402
|
+
|
|
403
|
+
// public computeNullable(): boolean {
|
|
404
|
+
// return (this.computed_nullable_ ??= Metadata._Iterate([] as boolean[])(
|
|
405
|
+
// (flags) => (meta) => flags.push(meta.nullable),
|
|
406
|
+
// )(this).reduce((x, y) => x || y));
|
|
407
|
+
// }
|
|
408
|
+
|
|
409
|
+
// public computeFunctional(): boolean {
|
|
410
|
+
// return (this.computed_functional_ ??= Metadata._Iterate(
|
|
411
|
+
// [] as boolean[],
|
|
412
|
+
// )((flags) => (meta) => flags.push(meta.any))(this).reduce(
|
|
413
|
+
// (x, y) => x || y,
|
|
414
|
+
// ));
|
|
415
|
+
// }
|
|
416
|
+
|
|
417
|
+
// public computeAtomics(): Set<Atomic.Literal> {
|
|
418
|
+
// return (this.computed_atomics_ ??= Metadata._Iterate(
|
|
419
|
+
// new Set<Atomic.Literal>(),
|
|
420
|
+
// )((values) => (meta) => {
|
|
421
|
+
// for (const atomic of meta.atomics) values.add(atomic);
|
|
422
|
+
// })(this));
|
|
423
|
+
// }
|
|
424
|
+
|
|
425
|
+
// public computeConstants(): Map<Atomic.Literal, Set<Atomic.Type>> {
|
|
426
|
+
// return (this.computed_constants_ ??= Metadata._Iterate(
|
|
427
|
+
// new Map<Atomic.Literal, Set<Atomic.Type>>(),
|
|
428
|
+
// )((container) => (meta) => {
|
|
429
|
+
// for (const constant of meta.constants) {
|
|
430
|
+
// const line = MapUtil.take(container)(
|
|
431
|
+
// constant.type,
|
|
432
|
+
// () => new Set(),
|
|
433
|
+
// );
|
|
434
|
+
// for (const v of constant.values) line.add(v);
|
|
435
|
+
// }
|
|
436
|
+
// })(this));
|
|
437
|
+
// }
|
|
438
|
+
|
|
439
|
+
// public computeTemplates(): Metadata[][] {
|
|
440
|
+
// return (this.computed_templates_ ??= (() => {
|
|
441
|
+
// const dict = Metadata._Iterate(new Map<string, Metadata[]>())(
|
|
442
|
+
// (dict) => (meta) =>
|
|
443
|
+
// meta.templates.forEach((tpl) =>
|
|
444
|
+
// dict.set(tpl.map((t) => t.getName).join(","), tpl),
|
|
445
|
+
// ),
|
|
446
|
+
// )(this);
|
|
447
|
+
// return [...dict.values()];
|
|
448
|
+
// })());
|
|
449
|
+
// }
|
|
450
|
+
|
|
451
|
+
// public computeResolved(): Metadata | null {
|
|
452
|
+
// return (this.computed_resolved_ ??= this.resolved);
|
|
453
|
+
// }
|
|
454
|
+
|
|
455
|
+
// public computeRest(): Metadata | null {
|
|
456
|
+
// return (this.computed_rest_ ??= this.rest);
|
|
457
|
+
// }
|
|
458
|
+
|
|
459
|
+
// public computeArrays(): Metadata[] {
|
|
460
|
+
// return (this.computed_arrays_ ??= (() => {
|
|
461
|
+
// const dict = Metadata._Iterate(new Map<string, Metadata>())(
|
|
462
|
+
// (dict) => (meta) =>
|
|
463
|
+
// meta.arrays.forEach((array) =>
|
|
464
|
+
// dict.set(array.getName(), array),
|
|
465
|
+
// ),
|
|
466
|
+
// )(this);
|
|
467
|
+
// return [...dict.values()];
|
|
468
|
+
// })());
|
|
469
|
+
// }
|
|
470
|
+
|
|
471
|
+
// public computeTuples(): Metadata[][] {
|
|
472
|
+
// return (this.computed_tuples_ ??= (() => {
|
|
473
|
+
// const dict = Metadata._Iterate(new Map<string, Metadata[]>())(
|
|
474
|
+
// (dict) => (meta) =>
|
|
475
|
+
// meta.tuples.forEach((tpl) =>
|
|
476
|
+
// dict.set(tpl.map((t) => t.getName).join(","), tpl),
|
|
477
|
+
// ),
|
|
478
|
+
// )(this);
|
|
479
|
+
// return [...dict.values()];
|
|
480
|
+
// })());
|
|
481
|
+
// }
|
|
482
|
+
|
|
483
|
+
// public computeNatives(): Set<string> {
|
|
484
|
+
// return (this.computed_natives_ ??= Metadata._Iterate(new Set<string>())(
|
|
485
|
+
// (values) => (meta) => {
|
|
486
|
+
// for (const native of meta.natives) values.add(native);
|
|
487
|
+
// },
|
|
488
|
+
// )(this));
|
|
489
|
+
// }
|
|
490
|
+
|
|
491
|
+
// public computeSets(): Metadata[] {
|
|
492
|
+
// return (this.computed_sets_ ??= (() => {
|
|
493
|
+
// const dict = Metadata._Iterate(new Map<string, Metadata>())(
|
|
494
|
+
// (dict) => (meta) =>
|
|
495
|
+
// meta.sets.forEach((set) => dict.set(set.getName(), set)),
|
|
496
|
+
// )(this);
|
|
497
|
+
// return [...dict.values()];
|
|
498
|
+
// })());
|
|
499
|
+
// }
|
|
500
|
+
|
|
501
|
+
// public computeMaps(): Metadata.Entry[] {
|
|
502
|
+
// return (this.computed_maps_ ??= (() => {
|
|
503
|
+
// const dict = Metadata._Iterate(new Map<string, Metadata.Entry>())(
|
|
504
|
+
// (dict) => (meta) =>
|
|
505
|
+
// meta.maps.forEach((m) =>
|
|
506
|
+
// dict.set(
|
|
507
|
+
// [m.key.getName(), m.value.getName()].join(","),
|
|
508
|
+
// m,
|
|
509
|
+
// ),
|
|
510
|
+
// ),
|
|
511
|
+
// )(this);
|
|
512
|
+
// return [...dict.values()];
|
|
513
|
+
// })());
|
|
514
|
+
// }
|
|
515
|
+
|
|
516
|
+
// public computeObjects(): MetadataObject[] {
|
|
517
|
+
// return (this.computed_objects_ ??= (() => {
|
|
518
|
+
// const dict = Metadata._Iterate(new Map<string, MetadataObject>())(
|
|
519
|
+
// (dict) => (meta) =>
|
|
520
|
+
// meta.objects.forEach((obj) => dict.set(obj.name, obj)),
|
|
521
|
+
// )(this);
|
|
522
|
+
// return [...dict.values()];
|
|
523
|
+
// })());
|
|
524
|
+
// }
|
|
525
|
+
|
|
526
|
+
// public computeDefinitions(): MetadataDefinition[] {
|
|
527
|
+
// return (this.computed_definitions_ ??= (() => {
|
|
528
|
+
// const dict = Metadata._Iterate(
|
|
529
|
+
// new Map<string, MetadataDefinition>(),
|
|
530
|
+
// )(
|
|
531
|
+
// (dict) => (meta) =>
|
|
532
|
+
// meta.definitions.forEach((def) => dict.set(def.name, def)),
|
|
533
|
+
// )(this);
|
|
534
|
+
// return [...dict.values()];
|
|
535
|
+
// })());
|
|
536
|
+
// }
|
|
537
|
+
|
|
538
|
+
// public absorb(): void {
|
|
539
|
+
// this._Absorb(new Set());
|
|
540
|
+
// }
|
|
541
|
+
|
|
542
|
+
// private _Absorb(visited: Set<Metadata>): void {
|
|
543
|
+
// if (visited.has(this)) return;
|
|
544
|
+
// visited.add(this);
|
|
545
|
+
|
|
546
|
+
// if (this.size() === 1 && this.definitions.length === 1) return;
|
|
547
|
+
|
|
548
|
+
// //----
|
|
549
|
+
// // ITERATIONS
|
|
550
|
+
// //----
|
|
551
|
+
// if (this.resolved) this.resolved._Absorb(visited);
|
|
552
|
+
// if (this.rest) this.rest._Absorb(visited);
|
|
553
|
+
|
|
554
|
+
// for (const array of this.arrays) array._Absorb(visited);
|
|
555
|
+
// for (const tuple of this.tuples)
|
|
556
|
+
// for (const elem of tuple) elem._Absorb(visited);
|
|
557
|
+
|
|
558
|
+
// for (const set of this.sets) set._Absorb(visited);
|
|
559
|
+
// for (const map of this.maps) map.value._Absorb(visited);
|
|
560
|
+
// for (const object of this.objects)
|
|
561
|
+
// for (const property of object.properties)
|
|
562
|
+
// property.value._Absorb(visited);
|
|
563
|
+
// for (const definition of this.definitions)
|
|
564
|
+
// definition.value._Absorb(visited);
|
|
565
|
+
|
|
566
|
+
// //----
|
|
567
|
+
// // MEMBERS
|
|
568
|
+
// //----
|
|
569
|
+
// // FLAGS
|
|
570
|
+
// this.any = this.computeAny();
|
|
571
|
+
// this.required = this.computeRequired();
|
|
572
|
+
// this.optional = this.computeOptional();
|
|
573
|
+
// this.nullable = this.computeNullable();
|
|
574
|
+
// this.functional = this.computeFunctional();
|
|
575
|
+
|
|
576
|
+
// // ATOMICS
|
|
577
|
+
// this.atomics = [...this.computeAtomics()];
|
|
578
|
+
// this.constants = [...this.computeConstants()].map(([type, values]) => ({
|
|
579
|
+
// type,
|
|
580
|
+
// values: [...values],
|
|
581
|
+
// })) as MetadataConstant[];
|
|
582
|
+
// this.templates = this.computeTemplates();
|
|
583
|
+
|
|
584
|
+
// // INSTANCES
|
|
585
|
+
// this.resolved = this.computeResolved();
|
|
586
|
+
// this.rest = this.computeRest();
|
|
587
|
+
// this.arrays = this.computeArrays();
|
|
588
|
+
// this.tuples = this.computeTuples();
|
|
589
|
+
// this.natives = [...this.computeNatives()];
|
|
590
|
+
// this.maps = this.computeMaps();
|
|
591
|
+
// this.sets = this.computeSets();
|
|
592
|
+
// this.objects = this.computeObjects();
|
|
593
|
+
// this.definitions = this.computeDefinitions();
|
|
594
|
+
// }
|
|
595
|
+
|
|
596
|
+
// private static _Iterate =
|
|
597
|
+
// <T>(container: T) =>
|
|
598
|
+
// (closure: (container: T) => (meta: Metadata) => any) => {
|
|
599
|
+
// const visited: Set<string> = new Set();
|
|
600
|
+
// const iterate = (meta: Metadata): T => {
|
|
601
|
+
// closure(container)(meta);
|
|
602
|
+
// for (const def of meta.definitions) {
|
|
603
|
+
// const name: string = def.value.getName();
|
|
604
|
+
// if (visited.has(name)) continue;
|
|
605
|
+
// visited.add(name);
|
|
606
|
+
// iterate(def.value);
|
|
607
|
+
// }
|
|
608
|
+
// return container;
|
|
609
|
+
// };
|
|
610
|
+
// return iterate;
|
|
611
|
+
// };
|
|
612
|
+
|
|
613
|
+
// /** @internal */ private computed_size_?: number;
|
|
614
|
+
// /** @internal */ private computed_bucket_?: number;
|
|
615
|
+
// /** @internal */ private computed_any_?: boolean;
|
|
616
|
+
// /** @internal */ private computed_required_?: boolean;
|
|
617
|
+
// /** @internal */ private computed_optional_?: boolean;
|
|
618
|
+
// /** @internal */ private computed_nullable_?: boolean;
|
|
619
|
+
// /** @internal */ private computed_functional_?: boolean;
|
|
620
|
+
// /** @internal */ private computed_atomics_?: Set<Atomic.Literal>;
|
|
621
|
+
// /** @internal */ private computed_constants_?: Map<
|
|
622
|
+
// Atomic.Literal,
|
|
623
|
+
// Set<Atomic.Type>
|
|
624
|
+
// >;
|
|
625
|
+
// /** @internal */ private computed_templates_?: Metadata[][];
|
|
626
|
+
// /** @internal */ private computed_rest_?: Metadata | null;
|
|
627
|
+
// /** @internal */ private computed_resolved_?: Metadata | null;
|
|
628
|
+
// /** @internal */ private computed_arrays_?: Metadata[];
|
|
629
|
+
// /** @internal */ private computed_tuples_?: Metadata[][];
|
|
630
|
+
// /** @internal */ private computed_natives_?: Set<string>;
|
|
631
|
+
// /** @internal */ private computed_sets_?: Metadata[];
|
|
632
|
+
// /** @internal */ private computed_maps_?: Metadata.Entry[];
|
|
633
|
+
// /** @internal */ private computed_objects_?: MetadataObject[];
|
|
634
|
+
// /** @internal */ private computed_definitions_?: MetadataDefinition[];
|
|
287
635
|
}
|
|
288
636
|
export namespace Metadata {
|
|
289
|
-
export const intersects = (
|
|
290
|
-
x: Metadata,
|
|
291
|
-
y: Metadata,
|
|
292
|
-
deep: boolean,
|
|
293
|
-
): boolean => {
|
|
637
|
+
export const intersects = (x: Metadata, y: Metadata): boolean => {
|
|
294
638
|
// CHECK ANY & OPTIONAL
|
|
295
639
|
if (x.any || y.any) return true;
|
|
296
640
|
if (x.required === false && false === y.required) return true;
|
|
297
641
|
if (x.nullable === true && true === y.nullable) return true;
|
|
642
|
+
if (x.functional === true && y.functional === true) return true;
|
|
298
643
|
|
|
299
644
|
//----
|
|
300
645
|
// INSTANCES
|
|
301
646
|
//----
|
|
302
|
-
// ARRAYS
|
|
303
|
-
if (
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
return true;
|
|
308
|
-
}
|
|
309
|
-
for (const xo of x.objects)
|
|
310
|
-
for (const yo of y.objects)
|
|
311
|
-
if (MetadataObject.intersects(xo, yo)) {
|
|
312
|
-
return true;
|
|
313
|
-
}
|
|
314
|
-
} else {
|
|
315
|
-
if (x.arrays.length && y.arrays.length) return true;
|
|
316
|
-
if (x.objects.length && y.objects.length) return true;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// TUPLES
|
|
320
|
-
for (const xt of x.tuples)
|
|
321
|
-
for (const yt of y.tuples)
|
|
322
|
-
if (xt.length === 0 || yt.length === 0)
|
|
323
|
-
return xt.length === 0 && yt.length === 0;
|
|
324
|
-
else if (
|
|
325
|
-
xt
|
|
326
|
-
.slice(0, Math.min(xt.length, yt.length))
|
|
327
|
-
.some((xv, i) => intersects(xv, yt[i]!, deep))
|
|
328
|
-
)
|
|
329
|
-
return true;
|
|
647
|
+
// ARRAYS
|
|
648
|
+
if (x.arrays.length && y.arrays.length) return true;
|
|
649
|
+
if (x.tuples.length && y.tuples.length) return true;
|
|
650
|
+
if (x.objects.length && y.objects.length) return true;
|
|
651
|
+
if (x.definitions.length && y.definitions.length) return true;
|
|
330
652
|
|
|
331
653
|
//----
|
|
332
654
|
// VALUES
|
|
@@ -349,46 +671,63 @@ export namespace Metadata {
|
|
|
349
671
|
if (values.size !== constant.values.length + opposite.values.length)
|
|
350
672
|
return true;
|
|
351
673
|
}
|
|
352
|
-
|
|
353
|
-
// FUNCTIONAL
|
|
354
|
-
if (x.functional === true && y.functional === true) return true;
|
|
355
|
-
|
|
356
674
|
return false;
|
|
357
675
|
};
|
|
358
676
|
|
|
359
|
-
export const covers = (
|
|
677
|
+
export const covers = (
|
|
678
|
+
x: Metadata,
|
|
679
|
+
y: Metadata,
|
|
680
|
+
level: number = 0,
|
|
681
|
+
): boolean => {
|
|
360
682
|
// CHECK ANY
|
|
361
|
-
if (x
|
|
683
|
+
if (x === y) return false;
|
|
684
|
+
else if (x.any) return true;
|
|
362
685
|
else if (y.any) return false;
|
|
363
686
|
|
|
364
687
|
//----
|
|
365
688
|
// INSTANCES
|
|
366
689
|
//----
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
690
|
+
if (level === 0) {
|
|
691
|
+
// ARRAYS
|
|
692
|
+
for (const ya of y.arrays)
|
|
693
|
+
if (
|
|
694
|
+
!x.arrays.some((xa) =>
|
|
695
|
+
covers(xa.value, ya.value, level + 1),
|
|
696
|
+
)
|
|
697
|
+
) {
|
|
698
|
+
return false;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
// TUPLES
|
|
702
|
+
for (const yt of y.tuples)
|
|
703
|
+
if (
|
|
704
|
+
yt.elements.length !== 0 &&
|
|
705
|
+
x.tuples.some(
|
|
706
|
+
(xt) =>
|
|
707
|
+
xt.elements.length >= yt.elements.length &&
|
|
708
|
+
xt.elements
|
|
709
|
+
.slice(yt.elements.length)
|
|
710
|
+
.every((xv, i) =>
|
|
711
|
+
covers(xv, yt.elements[i]!, level + 1),
|
|
712
|
+
),
|
|
713
|
+
) === false
|
|
714
|
+
)
|
|
715
|
+
return false;
|
|
716
|
+
}
|
|
371
717
|
|
|
372
718
|
// OBJECTS
|
|
373
719
|
for (const yo of y.objects)
|
|
374
720
|
if (x.objects.some((xo) => MetadataObject.covers(xo, yo)) === false)
|
|
375
721
|
return false;
|
|
376
722
|
|
|
377
|
-
//
|
|
378
|
-
for (const
|
|
379
|
-
if (
|
|
380
|
-
yt.length !== 0 &&
|
|
381
|
-
x.tuples.some(
|
|
382
|
-
(xt) =>
|
|
383
|
-
xt.length >= yt.length &&
|
|
384
|
-
xt
|
|
385
|
-
.slice(yt.length)
|
|
386
|
-
.every((xv, i) => covers(xv, yt[i]!)),
|
|
387
|
-
) === false
|
|
388
|
-
)
|
|
723
|
+
// DEFINITIONS
|
|
724
|
+
for (const yd of y.definitions)
|
|
725
|
+
if (x.definitions.some((xd) => xd.name === yd.name) === false)
|
|
389
726
|
return false;
|
|
390
727
|
|
|
391
728
|
// NATIVES
|
|
729
|
+
for (const yn of y.natives)
|
|
730
|
+
if (x.natives.some((xn) => xn === yn) === false) return false;
|
|
392
731
|
|
|
393
732
|
// SETS
|
|
394
733
|
for (const ys of y.sets)
|
|
@@ -422,6 +761,9 @@ export namespace Metadata {
|
|
|
422
761
|
return true;
|
|
423
762
|
};
|
|
424
763
|
|
|
764
|
+
/**
|
|
765
|
+
* @internal
|
|
766
|
+
*/
|
|
425
767
|
export const merge = (x: Metadata, y: Metadata): Metadata => {
|
|
426
768
|
const output: Metadata = Metadata.create({
|
|
427
769
|
any: x.any || y.any,
|
|
@@ -445,6 +787,7 @@ export namespace Metadata {
|
|
|
445
787
|
arrays: x.arrays.slice(),
|
|
446
788
|
tuples: x.tuples.slice(),
|
|
447
789
|
objects: x.objects.slice(),
|
|
790
|
+
definitions: x.definitions.slice(),
|
|
448
791
|
|
|
449
792
|
natives: [...new Set([...x.natives, ...y.natives])],
|
|
450
793
|
sets: x.sets.slice(),
|
|
@@ -463,14 +806,13 @@ export namespace Metadata {
|
|
|
463
806
|
ArrayUtil.add(target.values, value);
|
|
464
807
|
}
|
|
465
808
|
for (const array of y.arrays)
|
|
466
|
-
ArrayUtil.set(output.arrays, array, (elem) => elem.
|
|
809
|
+
ArrayUtil.set(output.arrays, array, (elem) => elem.name);
|
|
810
|
+
for (const tuple of y.tuples)
|
|
811
|
+
ArrayUtil.set(output.tuples, tuple, (elem) => elem.name);
|
|
467
812
|
for (const obj of y.objects)
|
|
468
813
|
ArrayUtil.set(output.objects, obj, (elem) => elem.name);
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
ArrayUtil.set(output.arrays, x.rest, (elem) => elem.getName());
|
|
472
|
-
if (y.rest !== null)
|
|
473
|
-
ArrayUtil.set(output.arrays, y.rest, (elem) => elem.getName());
|
|
814
|
+
for (const def of y.definitions)
|
|
815
|
+
ArrayUtil.set(output.definitions, def, (elem) => elem.name);
|
|
474
816
|
|
|
475
817
|
return output;
|
|
476
818
|
};
|
|
@@ -513,15 +855,12 @@ const getName = (metadata: Metadata): string => {
|
|
|
513
855
|
for (const map of metadata.maps)
|
|
514
856
|
elements.push(`Map<${map.key.getName()}, ${map.value.getName()}>`);
|
|
515
857
|
|
|
516
|
-
//
|
|
858
|
+
// INSTANCES
|
|
517
859
|
if (metadata.rest !== null) elements.push(`...${metadata.rest.getName()}`);
|
|
518
|
-
for (const tuple of metadata.tuples)
|
|
519
|
-
|
|
520
|
-
for (const array of metadata.arrays)
|
|
521
|
-
elements.push(`Array<${array.getName()}>`);
|
|
522
|
-
|
|
523
|
-
// OBJECT
|
|
860
|
+
for (const tuple of metadata.tuples) elements.push(tuple.name);
|
|
861
|
+
for (const array of metadata.arrays) elements.push(array.name);
|
|
524
862
|
for (const object of metadata.objects) elements.push(object.name);
|
|
863
|
+
for (const def of metadata.definitions) elements.push(def.name);
|
|
525
864
|
if (metadata.resolved !== null) elements.push(metadata.resolved.getName());
|
|
526
865
|
|
|
527
866
|
// RETURNS
|