typia 5.0.0-dev.20230827 → 5.0.0-dev.20230828
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/executable/TypiaGenerateWizard.js +1 -1
- package/lib/executable/TypiaGenerateWizard.js.map +1 -1
- package/lib/executable/TypiaSetupWizard.js +1 -1
- package/lib/executable/TypiaSetupWizard.js.map +1 -1
- package/lib/executable/setup/PackageManager.js +1 -1
- package/lib/executable/setup/PackageManager.js.map +1 -1
- package/lib/executable/setup/PluginConfigurator.js +2 -2
- package/lib/executable/setup/PluginConfigurator.js.map +1 -1
- package/lib/factories/ExpressionFactory.js +2 -2
- package/lib/factories/ExpressionFactory.js.map +1 -1
- package/lib/factories/JsonMetadataFactory.d.ts +7 -0
- package/lib/factories/JsonMetadataFactory.js +38 -0
- package/lib/factories/JsonMetadataFactory.js.map +1 -0
- package/lib/factories/LiteralFactory.js +1 -1
- package/lib/factories/LiteralFactory.js.map +1 -1
- package/lib/factories/MetadataCollection.js +0 -1
- package/lib/factories/MetadataCollection.js.map +1 -1
- package/lib/factories/MetadataCommentTagFactory.js +129 -118
- package/lib/factories/MetadataCommentTagFactory.js.map +1 -1
- package/lib/factories/MetadataFactory.d.ts +22 -2
- package/lib/factories/MetadataFactory.js +221 -17
- package/lib/factories/MetadataFactory.js.map +1 -1
- package/lib/factories/MetadataTypeTagFactory.d.ts +3 -2
- package/lib/factories/MetadataTypeTagFactory.js +246 -173
- package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
- package/lib/factories/ProtobufFactory.js +73 -68
- package/lib/factories/ProtobufFactory.js.map +1 -1
- package/lib/factories/TypeFactory.d.ts +0 -1
- package/lib/factories/TypeFactory.js +0 -5
- package/lib/factories/TypeFactory.js.map +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_alias.d.ts +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_alias.js +20 -7
- package/lib/factories/internal/metadata/emplace_metadata_alias.js.map +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_array_type.js +20 -7
- package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_object.js +100 -84
- package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_tuple.js +34 -21
- package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -1
- package/lib/factories/internal/metadata/explore_metadata.d.ts +1 -1
- package/lib/factories/internal/metadata/explore_metadata.js +12 -12
- 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 +39 -19
- package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_alias.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_alias.js +12 -10
- package/lib/factories/internal/metadata/iterate_metadata_alias.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_array.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_array.js +11 -9
- package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_collection.d.ts +2 -1
- package/lib/factories/internal/metadata/iterate_metadata_collection.js +47 -45
- package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -1
- package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js +16 -20
- package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_intersection.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_intersection.js +145 -135
- package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_map.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_map.js +28 -15
- package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_object.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_object.js +16 -14
- package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_resolve.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_resolve.js +28 -15
- package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_set.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_set.js +24 -11
- package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_template.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_template.js +28 -15
- package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_tuple.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_tuple.js +11 -9
- package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_union.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_union.js +20 -7
- package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
- package/lib/programmers/CheckerProgrammer.js +13 -8
- package/lib/programmers/CheckerProgrammer.js.map +1 -1
- package/lib/programmers/FeatureProgrammer.d.ts +1 -1
- package/lib/programmers/FeatureProgrammer.js +1 -1
- package/lib/programmers/FeatureProgrammer.js.map +1 -1
- package/lib/programmers/IsProgrammer.js +1 -1
- package/lib/programmers/IsProgrammer.js.map +1 -1
- package/lib/programmers/RandomProgrammer.js +9 -4
- package/lib/programmers/RandomProgrammer.js.map +1 -1
- package/lib/programmers/TypiaProgrammer.js +58 -28
- package/lib/programmers/TypiaProgrammer.js.map +1 -1
- package/lib/programmers/internal/application_escaped.d.ts +4 -0
- package/lib/programmers/internal/{application_resolved.js → application_escaped.js} +4 -4
- package/lib/programmers/internal/application_escaped.js.map +1 -0
- package/lib/programmers/internal/application_schema.js +5 -5
- package/lib/programmers/internal/application_schema.js.map +1 -1
- package/lib/programmers/json/JsonApplicationProgrammer.js +5 -1
- package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonAssertParseProgrammer.js +2 -0
- package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonIsParseProgrammer.js +2 -0
- package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonStringifyProgrammer.js +20 -62
- package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonValidateParseProgrammer.js +2 -0
- package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscCloneProgrammer.js +13 -8
- package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscLiteralsProgrammer.js +10 -5
- package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscPruneProgrammer.js +13 -8
- package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
- package/lib/schemas/metadata/Metadata.js +4 -4
- package/lib/schemas/metadata/Metadata.js.map +1 -1
- package/lib/transform.d.ts +2 -1
- package/lib/transform.js +11 -3
- package/lib/transform.js.map +1 -1
- package/lib/transformers/CallExpressionTransformer.d.ts +1 -1
- package/lib/transformers/CallExpressionTransformer.js +2 -1
- package/lib/transformers/CallExpressionTransformer.js.map +1 -1
- package/lib/transformers/FileTransformer.js +18 -8
- package/lib/transformers/FileTransformer.js.map +1 -1
- package/lib/transformers/IProject.d.ts +3 -0
- package/lib/transformers/NodeTransformer.d.ts +1 -1
- package/lib/transformers/TransformerError.d.ts +12 -0
- package/lib/transformers/TransformerError.js +66 -0
- package/lib/transformers/TransformerError.js.map +1 -0
- package/lib/transformers/features/AssertTransformer.d.ts +1 -0
- package/lib/transformers/features/CreateAssertTransformer.d.ts +1 -0
- package/lib/transformers/features/CreateIsTransformer.d.ts +1 -0
- package/lib/transformers/features/CreateRandomTransformer.js +9 -4
- package/lib/transformers/features/CreateRandomTransformer.js.map +1 -1
- package/lib/transformers/features/CreateValidateTransformer.d.ts +1 -0
- package/lib/transformers/features/IsTransformer.d.ts +1 -0
- package/lib/transformers/features/RandomTransformer.js +9 -4
- package/lib/transformers/features/RandomTransformer.js.map +1 -1
- package/lib/transformers/features/ValidateTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonApplicationTransformer.js +79 -19
- package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
- package/lib/transformers/features/json/JsonAssertParseTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonAssertStringifyTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonCreateAssertParseTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonCreateAssertStringifyTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonCreateIsParseTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonCreateIsStringifyTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonCreateStringifyTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonCreateValidateParseTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonCreateValidateStringifyProgrammer.d.ts +1 -0
- package/lib/transformers/features/json/JsonIsParseTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonIsStringifyTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonStringifyTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonValidateParseTransformer.d.ts +1 -0
- package/lib/transformers/features/json/JsonValidateStringifyTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MetadataTransformer.js +13 -5
- package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
- package/lib/transformers/features/misc/MiscAssertCloneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscAssertPruneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscCloneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscCreateAssertCloneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscCreateAssertPruneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscCreateCloneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscCreateIsCloneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscCreateIsPruneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscCreatePruneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscCreateValidateCloneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscCreateValidatePruneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscIsCloneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscIsPruneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscLiteralsTransformer.js +9 -4
- package/lib/transformers/features/misc/MiscLiteralsTransformer.js.map +1 -1
- package/lib/transformers/features/misc/MiscPruneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscValidateCloneTransformer.d.ts +1 -0
- package/lib/transformers/features/misc/MiscValidatePruneTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/CreateProtobufDecodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/CreateProtobufEncodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/ProtobufAssertDecodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/ProtobufAssertEncodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/ProtobufDecodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/ProtobufEncodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/ProtobufIsDecodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/ProtobufIsEncodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js +9 -2
- package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js.map +1 -1
- package/lib/transformers/features/protobuf/ProtobufValidateDecodeTransformer.d.ts +1 -0
- package/lib/transformers/features/protobuf/ProtobufValidateEncodeTransformer.d.ts +1 -0
- package/lib/transformers/internal/GenericTransformer.js +17 -4
- package/lib/transformers/internal/GenericTransformer.js.map +1 -1
- package/lib/typings/ValidationPipe.d.ts +7 -0
- package/lib/typings/ValidationPipe.js +3 -0
- package/lib/typings/ValidationPipe.js.map +1 -0
- package/package.json +3 -1
- package/src/executable/TypiaGenerateWizard.ts +1 -1
- package/src/executable/TypiaSetupWizard.ts +1 -1
- package/src/executable/setup/PackageManager.ts +1 -1
- package/src/executable/setup/PluginConfigurator.ts +2 -2
- package/src/factories/ExpressionFactory.ts +2 -2
- package/src/factories/JsonMetadataFactory.ts +43 -0
- package/src/factories/LiteralFactory.ts +2 -1
- package/src/factories/MetadataCollection.ts +0 -5
- package/src/factories/MetadataCommentTagFactory.ts +130 -84
- package/src/factories/MetadataFactory.ts +169 -7
- package/src/factories/MetadataTypeTagFactory.ts +191 -141
- package/src/factories/ProtobufFactory.ts +86 -93
- package/src/factories/TypeFactory.ts +0 -5
- package/src/factories/internal/metadata/emplace_metadata_alias.ts +12 -5
- package/src/factories/internal/metadata/emplace_metadata_array_type.ts +12 -5
- package/src/factories/internal/metadata/emplace_metadata_object.ts +20 -5
- package/src/factories/internal/metadata/emplace_metadata_tuple.ts +12 -2
- package/src/factories/internal/metadata/explore_metadata.ts +5 -11
- package/src/factories/internal/metadata/iterate_metadata.ts +44 -24
- package/src/factories/internal/metadata/iterate_metadata_alias.ts +7 -2
- package/src/factories/internal/metadata/iterate_metadata_array.ts +7 -2
- package/src/factories/internal/metadata/iterate_metadata_collection.ts +30 -29
- package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +21 -22
- package/src/factories/internal/metadata/iterate_metadata_intersection.ts +33 -17
- package/src/factories/internal/metadata/iterate_metadata_map.ts +20 -4
- package/src/factories/internal/metadata/iterate_metadata_object.ts +2 -1
- package/src/factories/internal/metadata/iterate_metadata_resolve.ts +15 -12
- package/src/factories/internal/metadata/iterate_metadata_set.ts +11 -2
- package/src/factories/internal/metadata/iterate_metadata_template.ts +12 -3
- package/src/factories/internal/metadata/iterate_metadata_tuple.ts +7 -2
- package/src/factories/internal/metadata/iterate_metadata_union.ts +10 -7
- package/src/programmers/CheckerProgrammer.ts +8 -2
- package/src/programmers/FeatureProgrammer.ts +4 -1
- package/src/programmers/IsProgrammer.ts +1 -1
- package/src/programmers/RandomProgrammer.ts +18 -17
- package/src/programmers/TypiaProgrammer.ts +27 -2
- package/src/programmers/internal/{application_resolved.ts → application_escaped.ts} +1 -1
- package/src/programmers/internal/application_schema.ts +5 -5
- package/src/programmers/json/JsonApplicationProgrammer.ts +6 -3
- package/src/programmers/json/JsonAssertParseProgrammer.ts +7 -2
- package/src/programmers/json/JsonIsParseProgrammer.ts +7 -2
- package/src/programmers/json/JsonStringifyProgrammer.ts +7 -37
- package/src/programmers/json/JsonValidateParseProgrammer.ts +7 -2
- package/src/programmers/json/JsonValidateStringifyProgrammer.ts +1 -1
- package/src/programmers/misc/MiscCloneProgrammer.ts +14 -11
- package/src/programmers/misc/MiscLiteralsProgrammer.ts +11 -6
- package/src/programmers/misc/MiscPruneProgrammer.ts +8 -2
- package/src/schemas/metadata/Metadata.ts +4 -4
- package/src/transform.ts +13 -5
- package/src/transformers/CallExpressionTransformer.ts +6 -3
- package/src/transformers/FileTransformer.ts +25 -13
- package/src/transformers/IProject.ts +3 -0
- package/src/transformers/NodeTransformer.ts +1 -1
- package/src/transformers/TransformerError.ts +55 -0
- package/src/transformers/features/CreateRandomTransformer.ts +11 -7
- package/src/transformers/features/RandomTransformer.ts +11 -7
- package/src/transformers/features/json/JsonApplicationTransformer.ts +39 -35
- package/src/transformers/features/misc/MetadataTransformer.ts +18 -10
- package/src/transformers/features/misc/MiscLiteralsTransformer.ts +11 -7
- package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +9 -7
- package/src/transformers/internal/GenericTransformer.ts +17 -10
- package/src/typings/ValidationPipe.ts +9 -0
- package/lib/programmers/internal/application_resolved.d.ts +0 -4
- package/lib/programmers/internal/application_resolved.js.map +0 -1
|
@@ -5,6 +5,10 @@ import { MetadataObject } from "../schemas/metadata/MetadataObject";
|
|
|
5
5
|
|
|
6
6
|
import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
|
|
7
7
|
|
|
8
|
+
import { TransformerError } from "../transformers/TransformerError";
|
|
9
|
+
|
|
10
|
+
import { ValidationPipe } from "../typings/ValidationPipe";
|
|
11
|
+
|
|
8
12
|
import { Escaper } from "../utils/Escaper";
|
|
9
13
|
|
|
10
14
|
import { MetadataCollection } from "./MetadataCollection";
|
|
@@ -15,65 +19,72 @@ export namespace ProtobufFactory {
|
|
|
15
19
|
(method: string) =>
|
|
16
20
|
(checker: ts.TypeChecker) =>
|
|
17
21
|
(collection: MetadataCollection) =>
|
|
18
|
-
(type: ts.Type) => {
|
|
22
|
+
(type: ts.Type): Metadata => {
|
|
19
23
|
// COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const result: ValidationPipe<Metadata, MetadataFactory.IError> =
|
|
25
|
+
MetadataFactory.analyze(checker)({
|
|
26
|
+
escape: false,
|
|
27
|
+
constant: true,
|
|
28
|
+
absorb: true,
|
|
29
|
+
validate,
|
|
30
|
+
})(collection)(type);
|
|
31
|
+
if (result.success === false)
|
|
32
|
+
throw TransformerError.from(`typia.protobuf.${method}`)(
|
|
33
|
+
result.errors,
|
|
34
|
+
);
|
|
35
|
+
return result.data;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const validate = (
|
|
39
|
+
meta: Metadata,
|
|
40
|
+
explore: MetadataFactory.IExplore,
|
|
41
|
+
): string[] => {
|
|
42
|
+
const errors: string[] = [];
|
|
43
|
+
const insert = (msg: string) => errors.push(msg);
|
|
26
44
|
|
|
27
|
-
|
|
45
|
+
if (explore.top === true) {
|
|
28
46
|
const onlyObject: boolean =
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
47
|
+
meta.size() === 1 &&
|
|
48
|
+
meta.objects.length === 1 &&
|
|
49
|
+
meta.objects[0]!.properties.every((p) =>
|
|
32
50
|
p.key.isSoleLiteral(),
|
|
33
51
|
) &&
|
|
34
|
-
|
|
35
|
-
|
|
52
|
+
meta.isRequired() === true &&
|
|
53
|
+
meta.nullable === false;
|
|
36
54
|
if (onlyObject === false)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
)} target type must be a sole and static object.`,
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
return top;
|
|
44
|
-
};
|
|
55
|
+
insert("target type must be a sole and static object type");
|
|
56
|
+
return errors;
|
|
57
|
+
}
|
|
45
58
|
|
|
46
|
-
const validate = (method: string) => (meta: Metadata) => {
|
|
47
59
|
//----
|
|
48
60
|
// NOT SUPPORTED TYPES
|
|
49
61
|
//----
|
|
62
|
+
const noSupport = (msg: string) => insert(`does not support ${msg}`);
|
|
63
|
+
|
|
50
64
|
// PROHIBIT ANY TYPE
|
|
51
|
-
if (meta.any)
|
|
65
|
+
if (meta.any) noSupport("any type");
|
|
52
66
|
// PROHIBIT FUNCTIONAL TYPE
|
|
53
|
-
|
|
54
|
-
throw notSupportedError({ method })("functional type");
|
|
67
|
+
if (meta.functional) noSupport("functional type");
|
|
55
68
|
// PROHIBIT TUPLE TYPE
|
|
56
|
-
|
|
57
|
-
throw notSupportedError({ method })("tuple type");
|
|
69
|
+
if (meta.tuples.length) noSupport("tuple type");
|
|
58
70
|
// PROHIBIT SET TYPE
|
|
59
|
-
|
|
60
|
-
throw notSupportedError({ method })("Set type");
|
|
71
|
+
if (meta.sets.length) noSupport("Set type");
|
|
61
72
|
// NATIVE TYPE, BUT NOT Uint8Array
|
|
62
|
-
|
|
73
|
+
if (meta.natives.length) {
|
|
63
74
|
const banned = meta.natives
|
|
64
75
|
.map((n) => [n, BANNED_NATIVE_TYPES.get(n)] as const)
|
|
65
76
|
.filter(([_n, b]) => b !== undefined)[0];
|
|
66
77
|
if (banned !== undefined)
|
|
67
|
-
|
|
78
|
+
noSupport(
|
|
68
79
|
banned[1] === null
|
|
69
|
-
? banned[0]
|
|
70
|
-
:
|
|
80
|
+
? `${banned[0]} type`
|
|
81
|
+
: `does ${banned[0]} type. Use ${banned[1]} type instead.`,
|
|
71
82
|
);
|
|
72
83
|
}
|
|
73
84
|
//----
|
|
74
85
|
// ATOMIC CASES
|
|
75
86
|
//----
|
|
76
|
-
|
|
87
|
+
if (meta.atomics.length) {
|
|
77
88
|
const numbers = ProtobufUtil.getNumbers(meta);
|
|
78
89
|
const bigints = ProtobufUtil.getBigints(meta);
|
|
79
90
|
|
|
@@ -82,21 +93,21 @@ export namespace ProtobufFactory {
|
|
|
82
93
|
numbers.some((n) => n === type) &&
|
|
83
94
|
bigints.some((b) => b === type)
|
|
84
95
|
)
|
|
85
|
-
|
|
86
|
-
|
|
96
|
+
insert(
|
|
97
|
+
`tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
|
|
87
98
|
);
|
|
88
99
|
}
|
|
89
100
|
//----
|
|
90
101
|
// ARRRAY CASES
|
|
91
102
|
//----
|
|
92
103
|
// DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
|
|
93
|
-
|
|
104
|
+
if (
|
|
94
105
|
meta.arrays.length &&
|
|
95
106
|
meta.arrays.some((array) => !!array.type.value.arrays.length)
|
|
96
107
|
)
|
|
97
|
-
|
|
108
|
+
noSupport("over two dimenstional array type");
|
|
98
109
|
// CHILD OF ARRAY TYPE MUST BE REQUIRED
|
|
99
|
-
|
|
110
|
+
if (
|
|
100
111
|
meta.arrays.length &&
|
|
101
112
|
meta.arrays.some(
|
|
102
113
|
(array) =>
|
|
@@ -104,15 +115,15 @@ export namespace ProtobufFactory {
|
|
|
104
115
|
array.type.value.nullable === true,
|
|
105
116
|
)
|
|
106
117
|
)
|
|
107
|
-
|
|
118
|
+
noSupport("optional type in array");
|
|
108
119
|
// UNION IN ARRAY
|
|
109
|
-
|
|
120
|
+
if (
|
|
110
121
|
meta.arrays.length &&
|
|
111
122
|
meta.arrays.some((a) => a.type.value.size() > 1)
|
|
112
123
|
)
|
|
113
|
-
|
|
124
|
+
noSupport("union type in array");
|
|
114
125
|
// DO DYNAMIC OBJECT IN ARRAY
|
|
115
|
-
|
|
126
|
+
if (
|
|
116
127
|
meta.arrays.length &&
|
|
117
128
|
meta.arrays.some(
|
|
118
129
|
(a) =>
|
|
@@ -123,21 +134,21 @@ export namespace ProtobufFactory {
|
|
|
123
134
|
)),
|
|
124
135
|
)
|
|
125
136
|
)
|
|
126
|
-
|
|
137
|
+
noSupport("dynamic object in array");
|
|
127
138
|
// UNION WITH ARRAY
|
|
128
|
-
|
|
129
|
-
|
|
139
|
+
if (meta.size() > 1 && meta.arrays.length)
|
|
140
|
+
noSupport("union type with array type");
|
|
130
141
|
//----
|
|
131
142
|
// OBJECT CASES
|
|
132
143
|
//----
|
|
133
144
|
// EMPTY PROPERTY
|
|
134
|
-
|
|
145
|
+
if (
|
|
135
146
|
meta.objects.length &&
|
|
136
147
|
meta.objects.some((obj) => obj.properties.length === 0)
|
|
137
148
|
)
|
|
138
|
-
|
|
149
|
+
noSupport("empty object type");
|
|
139
150
|
// MULTIPLE DYNAMIC KEY TYPED PROPERTIES
|
|
140
|
-
|
|
151
|
+
if (
|
|
141
152
|
meta.objects.length &&
|
|
142
153
|
meta.objects.some(
|
|
143
154
|
(obj) =>
|
|
@@ -145,11 +156,11 @@ export namespace ProtobufFactory {
|
|
|
145
156
|
.length > 1,
|
|
146
157
|
)
|
|
147
158
|
)
|
|
148
|
-
|
|
159
|
+
noSupport(
|
|
149
160
|
"object type with multiple dynamic key typed properties. Keep only one.",
|
|
150
161
|
);
|
|
151
162
|
// STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
|
|
152
|
-
|
|
163
|
+
if (
|
|
153
164
|
meta.objects.length &&
|
|
154
165
|
meta.objects.some(
|
|
155
166
|
(obj) =>
|
|
@@ -157,11 +168,11 @@ export namespace ProtobufFactory {
|
|
|
157
168
|
obj.properties.some((p) => !p.key.isSoleLiteral()),
|
|
158
169
|
)
|
|
159
170
|
)
|
|
160
|
-
|
|
171
|
+
noSupport(
|
|
161
172
|
"object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
|
|
162
173
|
);
|
|
163
174
|
// STATIC PROPERTY, BUT INVALID KEY NAME
|
|
164
|
-
|
|
175
|
+
if (
|
|
165
176
|
meta.objects.length &&
|
|
166
177
|
meta.objects.some((obj) =>
|
|
167
178
|
obj.properties.some(
|
|
@@ -171,29 +182,23 @@ export namespace ProtobufFactory {
|
|
|
171
182
|
),
|
|
172
183
|
)
|
|
173
184
|
)
|
|
174
|
-
throw
|
|
175
|
-
`object type with invalid static key name.`,
|
|
176
|
-
);
|
|
185
|
+
throw noSupport(`object type with invalid static key name.`);
|
|
177
186
|
// DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
|
|
178
|
-
|
|
187
|
+
if (
|
|
179
188
|
meta.objects.length &&
|
|
180
189
|
isDynamicObject(meta.objects[0]!) &&
|
|
181
190
|
meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
|
|
182
191
|
)
|
|
183
|
-
|
|
184
|
-
"dynamic object with array value type",
|
|
185
|
-
);
|
|
192
|
+
noSupport("dynamic object with array value type");
|
|
186
193
|
// UNION WITH DYNAMIC OBJECT
|
|
187
|
-
|
|
194
|
+
if (
|
|
188
195
|
meta.size() > 1 &&
|
|
189
196
|
meta.objects.length &&
|
|
190
197
|
isDynamicObject(meta.objects[0]!)
|
|
191
198
|
)
|
|
192
|
-
|
|
193
|
-
"union type with dynamic object type",
|
|
194
|
-
);
|
|
199
|
+
noSupport("union type with dynamic object type");
|
|
195
200
|
// UNION IN DYNAMIC PROPERTY VALUE
|
|
196
|
-
|
|
201
|
+
if (
|
|
197
202
|
meta.objects.length &&
|
|
198
203
|
meta.objects.some(
|
|
199
204
|
(obj) =>
|
|
@@ -201,59 +206,47 @@ export namespace ProtobufFactory {
|
|
|
201
206
|
obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
|
|
202
207
|
)
|
|
203
208
|
)
|
|
204
|
-
|
|
205
|
-
"union type in dynamic property",
|
|
206
|
-
);
|
|
209
|
+
noSupport("union type in dynamic property");
|
|
207
210
|
//----
|
|
208
211
|
// MAP CASES
|
|
209
212
|
//----
|
|
210
|
-
// KEY TYPE
|
|
211
|
-
|
|
213
|
+
// KEY TYPE IS UNION
|
|
214
|
+
if (
|
|
212
215
|
meta.maps.length &&
|
|
213
216
|
meta.maps.some((m) => ProtobufUtil.isUnion(m.key))
|
|
214
217
|
)
|
|
215
|
-
|
|
218
|
+
noSupport("union key typed map");
|
|
216
219
|
// KEY TYPE IS NOT ATOMIC
|
|
217
|
-
|
|
220
|
+
if (
|
|
218
221
|
meta.maps.length &&
|
|
219
222
|
meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
|
|
220
223
|
)
|
|
221
|
-
|
|
224
|
+
noSupport("non-atomic key typed map");
|
|
222
225
|
// MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
|
|
223
|
-
|
|
226
|
+
if (
|
|
224
227
|
meta.maps.length &&
|
|
225
228
|
meta.maps.some(
|
|
226
229
|
(m) => m.key.isRequired() === false || m.key.nullable,
|
|
227
230
|
)
|
|
228
231
|
)
|
|
229
|
-
|
|
232
|
+
noSupport("optional key typed map");
|
|
230
233
|
// MAP TYPE, BUT VALUE TYPE IS ARRAY
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
meta.maps.some((m) => !!m.value.arrays.length)
|
|
234
|
-
)
|
|
235
|
-
throw notSupportedError({ method })(
|
|
236
|
-
"map type with array value type",
|
|
237
|
-
);
|
|
234
|
+
if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
|
|
235
|
+
noSupport("map type with array value type");
|
|
238
236
|
// UNION WITH MAP
|
|
239
|
-
|
|
240
|
-
|
|
237
|
+
if (meta.size() > 1 && meta.maps.length)
|
|
238
|
+
noSupport("union type with map type");
|
|
241
239
|
// UNION IN MAP
|
|
242
|
-
|
|
240
|
+
if (
|
|
243
241
|
meta.maps.length &&
|
|
244
242
|
meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
|
|
245
243
|
)
|
|
246
|
-
|
|
244
|
+
noSupport("union type in map");
|
|
245
|
+
|
|
246
|
+
return errors;
|
|
247
247
|
};
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
const prefix = (method: string) => `Error on ${method}():`;
|
|
251
|
-
|
|
252
|
-
const notSupportedError = (p: { method: string }) => (title: string) =>
|
|
253
|
-
new Error(
|
|
254
|
-
`${prefix(p.method)}: protocol buffer does not support ${title}.`,
|
|
255
|
-
);
|
|
256
|
-
|
|
257
250
|
const isDynamicObject = (obj: MetadataObject): boolean =>
|
|
258
251
|
obj.properties[0]!.key.isSoleLiteral() === false;
|
|
259
252
|
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
|
|
3
3
|
export namespace TypeFactory {
|
|
4
|
-
export const resolve =
|
|
5
|
-
(checker: ts.TypeChecker) =>
|
|
6
|
-
(type: ts.Type): ts.Type | null =>
|
|
7
|
-
getReturnType(checker)(type)("toJSON");
|
|
8
|
-
|
|
9
4
|
export const isFunction = (type: ts.Type): boolean =>
|
|
10
5
|
getFunction(type) !== null;
|
|
11
6
|
|
|
@@ -13,7 +13,12 @@ export const emplace_metadata_alias =
|
|
|
13
13
|
(checker: ts.TypeChecker) =>
|
|
14
14
|
(options: MetadataFactory.IOptions) =>
|
|
15
15
|
(collection: MetadataCollection) =>
|
|
16
|
-
(
|
|
16
|
+
(errors: MetadataFactory.IError[]) =>
|
|
17
|
+
(
|
|
18
|
+
type: ts.Type,
|
|
19
|
+
nullable: boolean,
|
|
20
|
+
explore: MetadataFactory.IExplore,
|
|
21
|
+
): MetadataAlias => {
|
|
17
22
|
// CHECK EXISTENCE
|
|
18
23
|
const [alias, newbie, closure] = collection.emplaceAlias(
|
|
19
24
|
checker,
|
|
@@ -25,10 +30,12 @@ export const emplace_metadata_alias =
|
|
|
25
30
|
|
|
26
31
|
// CONSTRUCT VALUE TYPE
|
|
27
32
|
const value: Metadata = explore_metadata(checker)(options)(collection)(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
errors,
|
|
34
|
+
)(type, {
|
|
35
|
+
...explore,
|
|
36
|
+
escaped: false,
|
|
37
|
+
aliased: true,
|
|
38
|
+
});
|
|
32
39
|
closure(value);
|
|
33
40
|
return alias;
|
|
34
41
|
};
|
|
@@ -13,7 +13,12 @@ export const emplace_metadata_array_type =
|
|
|
13
13
|
(checker: ts.TypeChecker) =>
|
|
14
14
|
(options: MetadataFactory.IOptions) =>
|
|
15
15
|
(collection: MetadataCollection) =>
|
|
16
|
-
(
|
|
16
|
+
(errors: MetadataFactory.IError[]) =>
|
|
17
|
+
(
|
|
18
|
+
type: ts.Type,
|
|
19
|
+
nullable: boolean,
|
|
20
|
+
explore: MetadataFactory.IExplore,
|
|
21
|
+
): MetadataArrayType => {
|
|
17
22
|
// CHECK EXISTENCE
|
|
18
23
|
const [array, newbie, setValue] = collection.emplaceArray(
|
|
19
24
|
checker,
|
|
@@ -24,10 +29,12 @@ export const emplace_metadata_array_type =
|
|
|
24
29
|
|
|
25
30
|
// CONSTRUCT VALUE TYPE
|
|
26
31
|
const value: Metadata = explore_metadata(checker)(options)(collection)(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
errors,
|
|
33
|
+
)(type.getNumberIndexType()!, {
|
|
34
|
+
...explore,
|
|
35
|
+
escaped: false,
|
|
36
|
+
aliased: false,
|
|
37
|
+
});
|
|
31
38
|
setValue(value);
|
|
32
39
|
|
|
33
40
|
return array;
|
|
@@ -18,6 +18,7 @@ export const emplace_metadata_object =
|
|
|
18
18
|
(checker: ts.TypeChecker) =>
|
|
19
19
|
(options: MetadataFactory.IOptions) =>
|
|
20
20
|
(collection: MetadataCollection) =>
|
|
21
|
+
(errors: MetadataFactory.IError[]) =>
|
|
21
22
|
(parent: ts.Type, nullable: boolean): MetadataObject => {
|
|
22
23
|
// EMPLACE OBJECT
|
|
23
24
|
const [obj, newbie] = collection.emplace(checker, parent);
|
|
@@ -99,7 +100,14 @@ export const emplace_metadata_object =
|
|
|
99
100
|
const key: Metadata = MetadataHelper.literal_to_metadata(prop.name);
|
|
100
101
|
const value: Metadata = explore_metadata(checker)(options)(
|
|
101
102
|
collection,
|
|
102
|
-
)(type,
|
|
103
|
+
)(errors)(type, {
|
|
104
|
+
top: false,
|
|
105
|
+
object: obj,
|
|
106
|
+
property: prop.name,
|
|
107
|
+
nested: null,
|
|
108
|
+
escaped: false,
|
|
109
|
+
aliased: false,
|
|
110
|
+
});
|
|
103
111
|
|
|
104
112
|
// OPTIONAL, BUT CAN BE RQUIRED BY `Required<T>` TYPE
|
|
105
113
|
if (node?.questionToken) Writable(value).optional = true;
|
|
@@ -111,10 +119,17 @@ export const emplace_metadata_object =
|
|
|
111
119
|
//----
|
|
112
120
|
for (const index of checker.getIndexInfosOfType(parent)) {
|
|
113
121
|
// GET EXACT TYPE
|
|
114
|
-
const analyzer = (type: ts.Type) =>
|
|
115
|
-
explore_metadata(checker)(options)(collection)(type,
|
|
116
|
-
|
|
117
|
-
|
|
122
|
+
const analyzer = (type: ts.Type) => (property: {} | null) =>
|
|
123
|
+
explore_metadata(checker)(options)(collection)(errors)(type, {
|
|
124
|
+
top: false,
|
|
125
|
+
object: obj,
|
|
126
|
+
property,
|
|
127
|
+
nested: null,
|
|
128
|
+
escaped: false,
|
|
129
|
+
aliased: false,
|
|
130
|
+
});
|
|
131
|
+
const key: Metadata = analyzer(index.keyType)(null);
|
|
132
|
+
const value: Metadata = analyzer(index.type)({});
|
|
118
133
|
|
|
119
134
|
// INSERT WITH REQUIRED CONFIGURATION
|
|
120
135
|
insert(key)(value)(
|
|
@@ -15,7 +15,12 @@ export const emplace_metadata_tuple =
|
|
|
15
15
|
(checker: ts.TypeChecker) =>
|
|
16
16
|
(options: MetadataFactory.IOptions) =>
|
|
17
17
|
(collection: MetadataCollection) =>
|
|
18
|
-
(
|
|
18
|
+
(errors: MetadataFactory.IError[]) =>
|
|
19
|
+
(
|
|
20
|
+
type: ts.TupleType,
|
|
21
|
+
nullable: boolean,
|
|
22
|
+
explore: MetadataFactory.IExplore,
|
|
23
|
+
): MetadataTupleType => {
|
|
19
24
|
// CHECK EXISTENCE
|
|
20
25
|
const [tuple, newbie, closure] = collection.emplaceTuple(checker, type);
|
|
21
26
|
ArrayUtil.add(tuple.nullables, nullable);
|
|
@@ -31,7 +36,12 @@ export const emplace_metadata_tuple =
|
|
|
31
36
|
.map((elem, i) => {
|
|
32
37
|
const child: Metadata = explore_metadata(checker)(options)(
|
|
33
38
|
collection,
|
|
34
|
-
)(elem,
|
|
39
|
+
)(errors)(elem, {
|
|
40
|
+
...explore,
|
|
41
|
+
nested: tuple,
|
|
42
|
+
aliased: false,
|
|
43
|
+
escaped: false,
|
|
44
|
+
});
|
|
35
45
|
|
|
36
46
|
// CHECK OPTIONAL
|
|
37
47
|
const flag: ts.ElementFlags | undefined = flagList[i];
|
|
@@ -11,23 +11,17 @@ export const explore_metadata =
|
|
|
11
11
|
(checker: ts.TypeChecker) =>
|
|
12
12
|
(options: MetadataFactory.IOptions) =>
|
|
13
13
|
(collection: MetadataCollection) =>
|
|
14
|
-
(
|
|
15
|
-
|
|
16
|
-
parentResolved: boolean,
|
|
17
|
-
aliased: boolean = false,
|
|
18
|
-
): Metadata => {
|
|
14
|
+
(errors: MetadataFactory.IError[]) =>
|
|
15
|
+
(type: ts.Type | null, explore: MetadataFactory.IExplore): Metadata => {
|
|
19
16
|
// CONSTRUCT METADATA
|
|
20
|
-
const meta: Metadata = Metadata.initialize(
|
|
21
|
-
collection.entire_.add(meta);
|
|
22
|
-
|
|
17
|
+
const meta: Metadata = Metadata.initialize(explore.escaped);
|
|
23
18
|
if (type === null) return meta;
|
|
24
19
|
|
|
25
20
|
// ITERATE TYPESCRIPT TYPES
|
|
26
|
-
iterate_metadata(checker)(options)(collection)(
|
|
21
|
+
iterate_metadata(checker)(options)(collection)(errors)(
|
|
27
22
|
meta,
|
|
28
23
|
type,
|
|
29
|
-
|
|
30
|
-
aliased,
|
|
24
|
+
explore,
|
|
31
25
|
);
|
|
32
26
|
emend_metadata_atomics(meta);
|
|
33
27
|
if (meta.escaped) {
|
|
@@ -2,9 +2,9 @@ import ts from "typescript";
|
|
|
2
2
|
|
|
3
3
|
import { Metadata } from "../../../schemas/metadata/Metadata";
|
|
4
4
|
|
|
5
|
-
// import { ArrayUtil } from "../../../utils/ArrayUtil";
|
|
6
5
|
import { MetadataCollection } from "../../MetadataCollection";
|
|
7
6
|
import { MetadataFactory } from "../../MetadataFactory";
|
|
7
|
+
import { TypeFactory } from "../../TypeFactory";
|
|
8
8
|
import { iterate_metadata_alias } from "./iterate_metadata_alias";
|
|
9
9
|
import { iterate_metadata_array } from "./iterate_metadata_array";
|
|
10
10
|
import { iterate_metadata_atomic } from "./iterate_metadata_atomic";
|
|
@@ -24,39 +24,42 @@ export const iterate_metadata =
|
|
|
24
24
|
(checker: ts.TypeChecker) =>
|
|
25
25
|
(options: MetadataFactory.IOptions) =>
|
|
26
26
|
(collection: MetadataCollection) =>
|
|
27
|
+
(errors: MetadataFactory.IError[]) =>
|
|
27
28
|
(
|
|
28
29
|
meta: Metadata,
|
|
29
30
|
type: ts.Type,
|
|
30
|
-
|
|
31
|
-
aliased: boolean,
|
|
31
|
+
explore: MetadataFactory.IExplore,
|
|
32
32
|
): void => {
|
|
33
|
-
if (type.isTypeParameter() === true)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
if (type.isTypeParameter() === true) {
|
|
34
|
+
errors.push({
|
|
35
|
+
name: TypeFactory.getFullName(checker)(type),
|
|
36
|
+
explore: { ...explore },
|
|
37
|
+
messages: ["non-specified generic argument found."],
|
|
38
|
+
});
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
37
41
|
// CHECK SPECIAL CASES
|
|
38
|
-
if (
|
|
39
|
-
(aliased !== true &&
|
|
40
|
-
iterate_metadata_alias(checker)(options)(collection)(
|
|
42
|
+
else if (
|
|
43
|
+
(explore.aliased !== true &&
|
|
44
|
+
iterate_metadata_alias(checker)(options)(collection)(errors)(
|
|
41
45
|
meta,
|
|
42
46
|
type,
|
|
47
|
+
explore,
|
|
43
48
|
)) ||
|
|
44
|
-
iterate_metadata_intersection(checker)(options)(collection)(
|
|
49
|
+
iterate_metadata_intersection(checker)(options)(collection)(errors)(
|
|
45
50
|
meta,
|
|
46
51
|
type,
|
|
47
|
-
|
|
48
|
-
aliased,
|
|
52
|
+
explore,
|
|
49
53
|
) ||
|
|
50
|
-
iterate_metadata_union(checker)(options)(collection)(
|
|
54
|
+
iterate_metadata_union(checker)(options)(collection)(errors)(
|
|
51
55
|
meta,
|
|
52
56
|
type,
|
|
53
|
-
|
|
57
|
+
explore,
|
|
54
58
|
) ||
|
|
55
|
-
iterate_metadata_resolve(checker)(options)(collection)(
|
|
59
|
+
iterate_metadata_resolve(checker)(options)(collection)(errors)(
|
|
56
60
|
meta,
|
|
57
61
|
type,
|
|
58
|
-
|
|
59
|
-
aliased,
|
|
62
|
+
explore,
|
|
60
63
|
)
|
|
61
64
|
)
|
|
62
65
|
return;
|
|
@@ -64,18 +67,35 @@ export const iterate_metadata =
|
|
|
64
67
|
// ITERATE CASES
|
|
65
68
|
iterate_metadata_coalesce(meta, type) ||
|
|
66
69
|
iterate_metadata_constant(checker)(options)(meta, type) ||
|
|
67
|
-
iterate_metadata_template(checker)(options)(collection)(
|
|
70
|
+
iterate_metadata_template(checker)(options)(collection)(errors)(
|
|
68
71
|
meta,
|
|
69
72
|
type,
|
|
73
|
+
explore,
|
|
70
74
|
) ||
|
|
71
75
|
iterate_metadata_atomic(meta, type) ||
|
|
72
|
-
iterate_metadata_tuple(checker)(options)(collection)(
|
|
76
|
+
iterate_metadata_tuple(checker)(options)(collection)(errors)(
|
|
73
77
|
meta,
|
|
74
78
|
type as ts.TupleType,
|
|
79
|
+
explore,
|
|
80
|
+
) ||
|
|
81
|
+
iterate_metadata_array(checker)(options)(collection)(errors)(
|
|
82
|
+
meta,
|
|
83
|
+
type,
|
|
84
|
+
explore,
|
|
75
85
|
) ||
|
|
76
|
-
iterate_metadata_array(checker)(options)(collection)(meta, type) ||
|
|
77
86
|
iterate_metadata_native(checker)(meta, type) ||
|
|
78
|
-
iterate_metadata_map(checker)(options)(collection)(
|
|
79
|
-
|
|
80
|
-
|
|
87
|
+
iterate_metadata_map(checker)(options)(collection)(errors)(
|
|
88
|
+
meta,
|
|
89
|
+
type,
|
|
90
|
+
explore,
|
|
91
|
+
) ||
|
|
92
|
+
iterate_metadata_set(checker)(options)(collection)(errors)(
|
|
93
|
+
meta,
|
|
94
|
+
type,
|
|
95
|
+
explore,
|
|
96
|
+
) ||
|
|
97
|
+
iterate_metadata_object(checker)(options)(collection)(errors)(
|
|
98
|
+
meta,
|
|
99
|
+
type,
|
|
100
|
+
);
|
|
81
101
|
};
|
|
@@ -13,7 +13,12 @@ export const iterate_metadata_alias =
|
|
|
13
13
|
(checker: ts.TypeChecker) =>
|
|
14
14
|
(options: MetadataFactory.IOptions) =>
|
|
15
15
|
(collection: MetadataCollection) =>
|
|
16
|
-
(
|
|
16
|
+
(errors: MetadataFactory.IError[]) =>
|
|
17
|
+
(
|
|
18
|
+
meta: Metadata,
|
|
19
|
+
type: ts.Type,
|
|
20
|
+
explore: MetadataFactory.IExplore,
|
|
21
|
+
): boolean => {
|
|
17
22
|
if (options.absorb !== false || type.aliasSymbol === undefined)
|
|
18
23
|
return false;
|
|
19
24
|
|
|
@@ -24,7 +29,7 @@ export const iterate_metadata_alias =
|
|
|
24
29
|
// CONSTRUCT DEFINITION
|
|
25
30
|
const alias: MetadataAlias = emplace_metadata_alias(checker)(options)(
|
|
26
31
|
collection,
|
|
27
|
-
)(type, meta.nullable);
|
|
32
|
+
)(errors)(type, meta.nullable, explore);
|
|
28
33
|
ArrayUtil.add(meta.aliases, alias, (elem) => elem.name === alias.name);
|
|
29
34
|
return true;
|
|
30
35
|
};
|
|
@@ -14,12 +14,17 @@ export const iterate_metadata_array =
|
|
|
14
14
|
(checker: ts.TypeChecker) =>
|
|
15
15
|
(options: MetadataFactory.IOptions) =>
|
|
16
16
|
(collection: MetadataCollection) =>
|
|
17
|
-
(
|
|
17
|
+
(errors: MetadataFactory.IError[]) =>
|
|
18
|
+
(
|
|
19
|
+
meta: Metadata,
|
|
20
|
+
type: ts.Type,
|
|
21
|
+
explore: MetadataFactory.IExplore,
|
|
22
|
+
): boolean => {
|
|
18
23
|
if (!checker.isArrayType(type)) return false;
|
|
19
24
|
|
|
20
25
|
const arrayType: MetadataArrayType = emplace_metadata_array_type(
|
|
21
26
|
checker,
|
|
22
|
-
)(options)(collection)(type, meta.nullable);
|
|
27
|
+
)(options)(collection)(errors)(type, meta.nullable, explore);
|
|
23
28
|
ArrayUtil.add(
|
|
24
29
|
meta.arrays,
|
|
25
30
|
MetadataArray.create({
|