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
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 { MetadataAlias } from "./MetadataAlias";
|
|
11
|
+
import { MetadataArray } from "./MetadataArray";
|
|
8
12
|
import { MetadataConstant } from "./MetadataConstant";
|
|
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 aliases: MetadataAlias[];
|
|
31
|
+
public arrays: MetadataArray[];
|
|
32
|
+
public tuples: MetadataTuple[];
|
|
33
|
+
public objects: MetadataObject[];
|
|
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.aliases = props.aliases;
|
|
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
|
+
aliases: [],
|
|
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
|
+
aliases: this.aliases.map((alias) => alias.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
|
+
aliases: new Map(
|
|
150
|
+
collection.aliases.map((alias) => [
|
|
151
|
+
alias.name,
|
|
152
|
+
MetadataAlias._From_without_value(alias),
|
|
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 alias of collection.aliases)
|
|
178
|
+
Writable(dict.aliases.get(alias.name)!).value = this._From(
|
|
179
|
+
alias.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
|
+
aliases: meta.aliases.map((alias) => {
|
|
238
|
+
const found = dict.aliases.get(alias);
|
|
239
|
+
if (found === undefined)
|
|
240
|
+
throw new Error(
|
|
241
|
+
`Error on Metadata.from(): failed to find alias "${alias}".`,
|
|
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.aliases.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.aliases.length ? 1 : 0)
|
|
245
300
|
);
|
|
246
301
|
}
|
|
247
302
|
public isConstant(): boolean {
|
|
@@ -286,47 +341,21 @@ export class Metadata {
|
|
|
286
341
|
}
|
|
287
342
|
}
|
|
288
343
|
export namespace Metadata {
|
|
289
|
-
export const intersects = (
|
|
290
|
-
x: Metadata,
|
|
291
|
-
y: Metadata,
|
|
292
|
-
deep: boolean,
|
|
293
|
-
): boolean => {
|
|
344
|
+
export const intersects = (x: Metadata, y: Metadata): boolean => {
|
|
294
345
|
// CHECK ANY & OPTIONAL
|
|
295
346
|
if (x.any || y.any) return true;
|
|
296
347
|
if (x.required === false && false === y.required) return true;
|
|
297
348
|
if (x.nullable === true && true === y.nullable) return true;
|
|
349
|
+
if (x.functional === true && y.functional === true) return true;
|
|
298
350
|
|
|
299
351
|
//----
|
|
300
352
|
// INSTANCES
|
|
301
353
|
//----
|
|
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;
|
|
354
|
+
// ARRAYS
|
|
355
|
+
if (x.arrays.length && y.arrays.length) return true;
|
|
356
|
+
if (x.tuples.length && y.tuples.length) return true;
|
|
357
|
+
if (x.objects.length && y.objects.length) return true;
|
|
358
|
+
if (x.aliases.length && y.aliases.length) return true;
|
|
330
359
|
|
|
331
360
|
//----
|
|
332
361
|
// VALUES
|
|
@@ -349,46 +378,63 @@ export namespace Metadata {
|
|
|
349
378
|
if (values.size !== constant.values.length + opposite.values.length)
|
|
350
379
|
return true;
|
|
351
380
|
}
|
|
352
|
-
|
|
353
|
-
// FUNCTIONAL
|
|
354
|
-
if (x.functional === true && y.functional === true) return true;
|
|
355
|
-
|
|
356
381
|
return false;
|
|
357
382
|
};
|
|
358
383
|
|
|
359
|
-
export const covers = (
|
|
384
|
+
export const covers = (
|
|
385
|
+
x: Metadata,
|
|
386
|
+
y: Metadata,
|
|
387
|
+
level: number = 0,
|
|
388
|
+
): boolean => {
|
|
360
389
|
// CHECK ANY
|
|
361
|
-
if (x
|
|
390
|
+
if (x === y) return false;
|
|
391
|
+
else if (x.any) return true;
|
|
362
392
|
else if (y.any) return false;
|
|
363
393
|
|
|
364
394
|
//----
|
|
365
395
|
// INSTANCES
|
|
366
396
|
//----
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
397
|
+
if (level === 0) {
|
|
398
|
+
// ARRAYS
|
|
399
|
+
for (const ya of y.arrays)
|
|
400
|
+
if (
|
|
401
|
+
!x.arrays.some((xa) =>
|
|
402
|
+
covers(xa.value, ya.value, level + 1),
|
|
403
|
+
)
|
|
404
|
+
) {
|
|
405
|
+
return false;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
// TUPLES
|
|
409
|
+
for (const yt of y.tuples)
|
|
410
|
+
if (
|
|
411
|
+
yt.elements.length !== 0 &&
|
|
412
|
+
x.tuples.some(
|
|
413
|
+
(xt) =>
|
|
414
|
+
xt.elements.length >= yt.elements.length &&
|
|
415
|
+
xt.elements
|
|
416
|
+
.slice(yt.elements.length)
|
|
417
|
+
.every((xv, i) =>
|
|
418
|
+
covers(xv, yt.elements[i]!, level + 1),
|
|
419
|
+
),
|
|
420
|
+
) === false
|
|
421
|
+
)
|
|
422
|
+
return false;
|
|
423
|
+
}
|
|
371
424
|
|
|
372
425
|
// OBJECTS
|
|
373
426
|
for (const yo of y.objects)
|
|
374
427
|
if (x.objects.some((xo) => MetadataObject.covers(xo, yo)) === false)
|
|
375
428
|
return false;
|
|
376
429
|
|
|
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
|
-
)
|
|
430
|
+
// ALIASES
|
|
431
|
+
for (const yd of y.aliases)
|
|
432
|
+
if (x.aliases.some((xd) => xd.name === yd.name) === false)
|
|
389
433
|
return false;
|
|
390
434
|
|
|
391
435
|
// NATIVES
|
|
436
|
+
for (const yn of y.natives)
|
|
437
|
+
if (x.natives.some((xn) => xn === yn) === false) return false;
|
|
392
438
|
|
|
393
439
|
// SETS
|
|
394
440
|
for (const ys of y.sets)
|
|
@@ -422,6 +468,9 @@ export namespace Metadata {
|
|
|
422
468
|
return true;
|
|
423
469
|
};
|
|
424
470
|
|
|
471
|
+
/**
|
|
472
|
+
* @internal
|
|
473
|
+
*/
|
|
425
474
|
export const merge = (x: Metadata, y: Metadata): Metadata => {
|
|
426
475
|
const output: Metadata = Metadata.create({
|
|
427
476
|
any: x.any || y.any,
|
|
@@ -445,6 +494,7 @@ export namespace Metadata {
|
|
|
445
494
|
arrays: x.arrays.slice(),
|
|
446
495
|
tuples: x.tuples.slice(),
|
|
447
496
|
objects: x.objects.slice(),
|
|
497
|
+
aliases: x.aliases.slice(),
|
|
448
498
|
|
|
449
499
|
natives: [...new Set([...x.natives, ...y.natives])],
|
|
450
500
|
sets: x.sets.slice(),
|
|
@@ -463,14 +513,13 @@ export namespace Metadata {
|
|
|
463
513
|
ArrayUtil.add(target.values, value);
|
|
464
514
|
}
|
|
465
515
|
for (const array of y.arrays)
|
|
466
|
-
ArrayUtil.set(output.arrays, array, (elem) => elem.
|
|
516
|
+
ArrayUtil.set(output.arrays, array, (elem) => elem.name);
|
|
517
|
+
for (const tuple of y.tuples)
|
|
518
|
+
ArrayUtil.set(output.tuples, tuple, (elem) => elem.name);
|
|
467
519
|
for (const obj of y.objects)
|
|
468
520
|
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());
|
|
521
|
+
for (const alias of y.aliases)
|
|
522
|
+
ArrayUtil.set(output.aliases, alias, (elem) => elem.name);
|
|
474
523
|
|
|
475
524
|
return output;
|
|
476
525
|
};
|
|
@@ -513,15 +562,12 @@ const getName = (metadata: Metadata): string => {
|
|
|
513
562
|
for (const map of metadata.maps)
|
|
514
563
|
elements.push(`Map<${map.key.getName()}, ${map.value.getName()}>`);
|
|
515
564
|
|
|
516
|
-
//
|
|
565
|
+
// INSTANCES
|
|
517
566
|
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
|
|
567
|
+
for (const tuple of metadata.tuples) elements.push(tuple.name);
|
|
568
|
+
for (const array of metadata.arrays) elements.push(array.name);
|
|
524
569
|
for (const object of metadata.objects) elements.push(object.name);
|
|
570
|
+
for (const alias of metadata.aliases) elements.push(alias.name);
|
|
525
571
|
if (metadata.resolved !== null) elements.push(metadata.resolved.getName());
|
|
526
572
|
|
|
527
573
|
// RETURNS
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ClassProperties } from "../typings/ClassProperties";
|
|
2
|
+
|
|
3
|
+
import { IJsDocTagInfo } from "./IJsDocTagInfo";
|
|
4
|
+
import { IMetadataAlias } from "./IMetadataAlias";
|
|
5
|
+
import { Metadata } from "./Metadata";
|
|
6
|
+
|
|
7
|
+
export class MetadataAlias {
|
|
8
|
+
public readonly name: string;
|
|
9
|
+
public readonly value: Metadata;
|
|
10
|
+
public readonly description: string | null;
|
|
11
|
+
public readonly jsDocTags: IJsDocTagInfo[];
|
|
12
|
+
public readonly recursive: boolean;
|
|
13
|
+
public readonly nullables: boolean[];
|
|
14
|
+
|
|
15
|
+
/* -----------------------------------------------------------
|
|
16
|
+
CONSTRUCTORS
|
|
17
|
+
----------------------------------------------------------- */
|
|
18
|
+
/**
|
|
19
|
+
* @hidden
|
|
20
|
+
*/
|
|
21
|
+
private constructor(props: ClassProperties<MetadataAlias>) {
|
|
22
|
+
this.name = props.name;
|
|
23
|
+
this.value = props.value;
|
|
24
|
+
this.description = props.description;
|
|
25
|
+
this.jsDocTags = props.jsDocTags;
|
|
26
|
+
this.recursive = props.recursive;
|
|
27
|
+
this.nullables = props.nullables;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
public static create(props: ClassProperties<MetadataAlias>): MetadataAlias {
|
|
34
|
+
return new MetadataAlias(props);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
public static _From_without_value(props: Omit<IMetadataAlias, "value">) {
|
|
41
|
+
return this.create({
|
|
42
|
+
name: props.name,
|
|
43
|
+
value: null!,
|
|
44
|
+
description: props.description,
|
|
45
|
+
recursive: props.recursive,
|
|
46
|
+
jsDocTags: props.jsDocTags.slice(),
|
|
47
|
+
nullables: props.nullables.slice(),
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public toJSON(): IMetadataAlias {
|
|
52
|
+
return {
|
|
53
|
+
name: this.name,
|
|
54
|
+
value: this.value.toJSON(),
|
|
55
|
+
description: this.description,
|
|
56
|
+
recursive: this.recursive,
|
|
57
|
+
jsDocTags: this.jsDocTags,
|
|
58
|
+
nullables: this.nullables.slice(),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ClassProperties } from "../typings/ClassProperties";
|
|
2
|
+
|
|
3
|
+
import { IMetadataArray } from "./IMetadataArray";
|
|
4
|
+
import { Metadata } from "./Metadata";
|
|
5
|
+
|
|
6
|
+
export class MetadataArray {
|
|
7
|
+
public readonly name: string;
|
|
8
|
+
public readonly value: Metadata;
|
|
9
|
+
public readonly nullables: boolean[];
|
|
10
|
+
public readonly recursive: boolean;
|
|
11
|
+
public readonly index: number | null;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
private constructor(props: ClassProperties<MetadataArray>) {
|
|
17
|
+
this.name = props.name;
|
|
18
|
+
this.value = props.value;
|
|
19
|
+
this.index = props.index;
|
|
20
|
+
this.recursive = props.recursive;
|
|
21
|
+
this.nullables = props.nullables;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
public static _From_without_value(
|
|
28
|
+
props: Omit<IMetadataArray, "value">,
|
|
29
|
+
): MetadataArray {
|
|
30
|
+
return this.create({
|
|
31
|
+
name: props.name,
|
|
32
|
+
value: null!,
|
|
33
|
+
index: props.index,
|
|
34
|
+
recursive: props.recursive,
|
|
35
|
+
nullables: props.nullables,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public static create(props: ClassProperties<MetadataArray>): MetadataArray {
|
|
40
|
+
return new MetadataArray(props);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public toJSON(): IMetadataArray {
|
|
44
|
+
return {
|
|
45
|
+
name: this.name,
|
|
46
|
+
value: this.value.toJSON(),
|
|
47
|
+
nullables: this.nullables,
|
|
48
|
+
recursive: this.recursive,
|
|
49
|
+
index: this.index,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -10,24 +10,9 @@ export class MetadataObject {
|
|
|
10
10
|
public readonly description: string | undefined;
|
|
11
11
|
public readonly jsDocTags: IJsDocTagInfo[];
|
|
12
12
|
|
|
13
|
-
/**
|
|
14
|
-
* @internal
|
|
15
|
-
*/
|
|
16
13
|
public readonly index: number;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* @internal
|
|
20
|
-
*/
|
|
21
14
|
public validated: boolean;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* @internal
|
|
25
|
-
*/
|
|
26
15
|
public recursive: boolean;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @internal
|
|
30
|
-
*/
|
|
31
16
|
public nullables: boolean[] = [];
|
|
32
17
|
|
|
33
18
|
/* -----------------------------------------------------------
|
|
@@ -44,7 +29,7 @@ export class MetadataObject {
|
|
|
44
29
|
|
|
45
30
|
this.index = props.index;
|
|
46
31
|
this.validated = props.validated;
|
|
47
|
-
this.recursive =
|
|
32
|
+
this.recursive = props.recursive;
|
|
48
33
|
this.nullables = [];
|
|
49
34
|
}
|
|
50
35
|
|
|
@@ -113,15 +98,17 @@ export namespace MetadataObject {
|
|
|
113
98
|
export const intersects = (x: MetadataObject, y: MetadataObject): boolean =>
|
|
114
99
|
x.properties.some(
|
|
115
100
|
(prop) =>
|
|
116
|
-
y.properties.find(
|
|
117
|
-
|
|
101
|
+
y.properties.find(
|
|
102
|
+
(oppo) => prop.key.getName() === oppo.key.getName(),
|
|
103
|
+
) !== undefined,
|
|
118
104
|
);
|
|
119
105
|
|
|
120
106
|
export const covers = (x: MetadataObject, y: MetadataObject): boolean =>
|
|
121
107
|
x.properties.length >= y.properties.length &&
|
|
122
108
|
x.properties.every(
|
|
123
109
|
(prop) =>
|
|
124
|
-
y.properties.find(
|
|
125
|
-
|
|
110
|
+
y.properties.find(
|
|
111
|
+
(oppo) => prop.key.getName() === oppo.key.getName(),
|
|
112
|
+
) !== undefined,
|
|
126
113
|
);
|
|
127
114
|
}
|