typia 5.0.4 → 5.0.5-dev.20230921
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/README.md +1 -1
- package/package.json +1 -1
- package/src/IRandomGenerator.ts +35 -35
- package/src/IValidation.ts +21 -21
- package/src/Primitive.ts +135 -135
- package/src/Resolved.ts +116 -116
- package/src/TypeGuardError.ts +36 -36
- package/src/executable/TypiaGenerateWizard.ts +85 -85
- package/src/executable/TypiaSetupWizard.ts +153 -153
- package/src/executable/setup/ArgumentParser.ts +45 -45
- package/src/executable/setup/CommandExecutor.ts +8 -8
- package/src/executable/setup/FileRetriever.ts +22 -22
- package/src/executable/setup/PackageManager.ts +71 -71
- package/src/executable/setup/PluginConfigurator.ts +70 -70
- package/src/executable/typia.ts +52 -52
- package/src/factories/CommentFactory.ts +84 -84
- package/src/factories/ExpressionFactory.ts +159 -159
- package/src/factories/IdentifierFactory.ts +74 -74
- package/src/factories/JsonMetadataFactory.ts +43 -43
- package/src/factories/LiteralFactory.ts +47 -47
- package/src/factories/MetadataCollection.ts +269 -269
- package/src/factories/MetadataCommentTagFactory.ts +629 -629
- package/src/factories/MetadataFactory.ts +214 -214
- package/src/factories/MetadataTypeTagFactory.ts +313 -313
- package/src/factories/NumericRangeFactory.ts +33 -33
- package/src/factories/ProtobufFactory.ts +272 -272
- package/src/factories/StatementFactory.ts +72 -72
- package/src/factories/TemplateFactory.ts +58 -58
- package/src/factories/TypeFactory.ts +119 -119
- package/src/factories/ValueFactory.ts +12 -12
- package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
- package/src/factories/internal/metadata/emend_metadata_atomics.ts +40 -40
- package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
- package/src/factories/internal/metadata/emplace_metadata_array_type.ts +41 -41
- package/src/factories/internal/metadata/emplace_metadata_object.ts +150 -150
- package/src/factories/internal/metadata/emplace_metadata_tuple.ts +60 -60
- package/src/factories/internal/metadata/explore_metadata.ts +32 -32
- package/src/factories/internal/metadata/iterate_metadata.ts +101 -101
- package/src/factories/internal/metadata/iterate_metadata_alias.ts +35 -35
- package/src/factories/internal/metadata/iterate_metadata_array.ts +37 -37
- package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
- package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
- package/src/factories/internal/metadata/iterate_metadata_collection.ts +141 -141
- package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +26 -26
- package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
- package/src/factories/internal/metadata/iterate_metadata_intersection.ts +197 -197
- package/src/factories/internal/metadata/iterate_metadata_map.ts +57 -57
- package/src/factories/internal/metadata/iterate_metadata_native.ts +210 -210
- package/src/factories/internal/metadata/iterate_metadata_object.ts +44 -44
- package/src/factories/internal/metadata/iterate_metadata_resolve.ts +52 -52
- package/src/factories/internal/metadata/iterate_metadata_set.ts +42 -42
- package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
- package/src/factories/internal/metadata/iterate_metadata_template.ts +47 -47
- package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
- package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
- package/src/functional/$ProtobufReader.ts +201 -201
- package/src/functional/$ProtobufSizer.ts +147 -147
- package/src/functional/$ProtobufWriter.ts +151 -151
- package/src/functional/$any.ts +4 -4
- package/src/functional/$clone.ts +4 -4
- package/src/functional/$dictionary.ts +25 -25
- package/src/functional/$every.ts +11 -11
- package/src/functional/$guard.ts +35 -35
- package/src/functional/$is_between.ts +2 -2
- package/src/functional/$join.ts +46 -46
- package/src/functional/$number.ts +13 -13
- package/src/functional/$report.ts +15 -15
- package/src/functional/$rest.ts +3 -3
- package/src/functional/$string.ts +50 -50
- package/src/functional/$strlen.ts +7 -7
- package/src/functional/$tail.ts +5 -5
- package/src/functional/$varint.ts +130 -130
- package/src/functional/$zigzag.ts +39 -39
- package/src/functional/IProtobufWriter.ts +18 -18
- package/src/functional/Namespace.ts +133 -133
- package/src/index.ts +4 -4
- package/src/json.ts +648 -648
- package/src/misc.ts +651 -651
- package/src/module.ts +656 -656
- package/src/programmers/AssertProgrammer.ts +317 -317
- package/src/programmers/CheckerProgrammer.ts +1137 -1137
- package/src/programmers/FeatureProgrammer.ts +478 -478
- package/src/programmers/IsProgrammer.ts +252 -252
- package/src/programmers/RandomProgrammer.ts +878 -878
- package/src/programmers/TypiaProgrammer.ts +163 -163
- package/src/programmers/ValidateProgrammer.ts +346 -346
- package/src/programmers/helpers/AtomicPredicator.ts +31 -31
- package/src/programmers/helpers/CloneJoiner.ts +144 -144
- package/src/programmers/helpers/FunctionImporeter.ts +91 -91
- package/src/programmers/helpers/ICheckEntry.ts +13 -13
- package/src/programmers/helpers/IExpressionEntry.ts +12 -12
- package/src/programmers/helpers/OptionPredicator.ts +15 -15
- package/src/programmers/helpers/ProtobufUtil.ts +125 -125
- package/src/programmers/helpers/ProtobufWire.ts +34 -34
- package/src/programmers/helpers/PruneJoiner.ts +143 -143
- package/src/programmers/helpers/RandomJoiner.ts +151 -151
- package/src/programmers/helpers/RandomRanger.ts +173 -173
- package/src/programmers/helpers/StringifyJoinder.ts +113 -113
- package/src/programmers/helpers/StringifyPredicator.ts +12 -12
- package/src/programmers/helpers/UnionExplorer.ts +305 -305
- package/src/programmers/helpers/UnionPredicator.ts +81 -81
- package/src/programmers/helpers/disable_function_importer_declare.ts +32 -32
- package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
- package/src/programmers/internal/application_alias.ts +65 -65
- package/src/programmers/internal/application_array.ts +53 -53
- package/src/programmers/internal/application_boolean.ts +15 -15
- package/src/programmers/internal/application_constant.ts +26 -26
- package/src/programmers/internal/application_default.ts +17 -17
- package/src/programmers/internal/application_default_string.ts +37 -37
- package/src/programmers/internal/application_escaped.ts +55 -55
- package/src/programmers/internal/application_native.ts +39 -39
- package/src/programmers/internal/application_number.ts +88 -88
- package/src/programmers/internal/application_object.ts +162 -162
- package/src/programmers/internal/application_schema.ts +175 -175
- package/src/programmers/internal/application_string.ts +51 -51
- package/src/programmers/internal/application_templates.ts +25 -25
- package/src/programmers/internal/application_tuple.ts +58 -58
- package/src/programmers/internal/check_array_length.ts +41 -41
- package/src/programmers/internal/check_bigint.ts +45 -45
- package/src/programmers/internal/check_dynamic_properties.ts +194 -194
- package/src/programmers/internal/check_everything.ts +28 -28
- package/src/programmers/internal/check_native.ts +21 -21
- package/src/programmers/internal/check_number.ts +105 -105
- package/src/programmers/internal/check_object.ts +55 -55
- package/src/programmers/internal/check_string.ts +45 -45
- package/src/programmers/internal/check_template.ts +61 -61
- package/src/programmers/internal/check_union_array_like.ts +323 -323
- package/src/programmers/internal/decode_union_object.ts +84 -84
- package/src/programmers/internal/feature_object_entries.ts +58 -58
- package/src/programmers/internal/metadata_to_pattern.ts +34 -34
- package/src/programmers/internal/prune_object_properties.ts +60 -60
- package/src/programmers/internal/random_custom.ts +37 -37
- package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
- package/src/programmers/internal/stringify_native.ts +7 -7
- package/src/programmers/internal/stringify_regular_properties.ts +83 -83
- package/src/programmers/internal/template_to_pattern.ts +15 -15
- package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
- package/src/programmers/json/JsonApplicationProgrammer.ts +50 -50
- package/src/programmers/json/JsonAssertParseProgrammer.ts +71 -71
- package/src/programmers/json/JsonAssertStringifyProgrammer.ts +66 -66
- package/src/programmers/json/JsonIsParseProgrammer.ts +77 -77
- package/src/programmers/json/JsonIsStringifyProgrammer.ts +76 -76
- package/src/programmers/json/JsonStringifyProgrammer.ts +964 -964
- package/src/programmers/json/JsonValidateParseProgrammer.ts +68 -68
- package/src/programmers/json/JsonValidateStringifyProgrammer.ts +84 -84
- package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
- package/src/programmers/misc/MiscAssertPruneProgrammer.ts +68 -68
- package/src/programmers/misc/MiscCloneProgrammer.ts +774 -774
- package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
- package/src/programmers/misc/MiscIsPruneProgrammer.ts +73 -73
- package/src/programmers/misc/MiscLiteralsProgrammer.ts +69 -69
- package/src/programmers/misc/MiscPruneProgrammer.ts +550 -550
- package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
- package/src/programmers/misc/MiscValidatePruneProgrammer.ts +78 -78
- package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -75
- package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +66 -66
- package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +655 -655
- package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +883 -883
- package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +85 -85
- package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +76 -76
- package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +165 -165
- package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
- package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +86 -86
- package/src/protobuf.ts +881 -881
- package/src/schemas/json/IJsonApplication.ts +8 -8
- package/src/schemas/json/IJsonComponents.ts +33 -33
- package/src/schemas/json/IJsonSchema.ts +110 -110
- package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
- package/src/schemas/metadata/IMetadata.ts +34 -34
- package/src/schemas/metadata/IMetadataAlias.ts +12 -12
- package/src/schemas/metadata/IMetadataApplication.ts +7 -7
- package/src/schemas/metadata/IMetadataArray.ts +7 -7
- package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
- package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
- package/src/schemas/metadata/IMetadataCollection.ts +11 -11
- package/src/schemas/metadata/IMetadataConstant.ts +16 -16
- package/src/schemas/metadata/IMetadataDictionary.ts +14 -14
- package/src/schemas/metadata/IMetadataEntry.ts +6 -6
- package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
- package/src/schemas/metadata/IMetadataObject.ts +18 -18
- package/src/schemas/metadata/IMetadataProperty.ts +9 -9
- package/src/schemas/metadata/IMetadataTuple.ts +7 -7
- package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
- package/src/schemas/metadata/IMetadataTypeTag.ts +8 -8
- package/src/schemas/metadata/Metadata.ts +685 -685
- package/src/schemas/metadata/MetadataAlias.ts +61 -61
- package/src/schemas/metadata/MetadataArray.ts +49 -49
- package/src/schemas/metadata/MetadataArrayType.ts +57 -57
- package/src/schemas/metadata/MetadataAtomic.ts +42 -42
- package/src/schemas/metadata/MetadataConstant.ts +3 -3
- package/src/schemas/metadata/MetadataEscaped.ts +51 -51
- package/src/schemas/metadata/MetadataObject.ts +139 -139
- package/src/schemas/metadata/MetadataProperty.ts +59 -59
- package/src/schemas/metadata/MetadataTuple.ts +32 -32
- package/src/schemas/metadata/MetadataTupleType.ts +67 -67
- package/src/tags/ExclusiveMaximum.ts +13 -13
- package/src/tags/ExclusiveMinimum.ts +13 -13
- package/src/tags/Format.ts +30 -30
- package/src/tags/MaxItems.ts +9 -9
- package/src/tags/MaxLength.ts +9 -9
- package/src/tags/Maximum.ts +13 -13
- package/src/tags/MinItems.ts +9 -9
- package/src/tags/MinLength.ts +9 -9
- package/src/tags/Minimum.ts +13 -13
- package/src/tags/MultipleOf.ts +15 -15
- package/src/tags/Pattern.ts +8 -8
- package/src/tags/TagBase.ts +68 -68
- package/src/tags/Type.ts +27 -27
- package/src/tags/index.ts +13 -13
- package/src/transform.ts +35 -35
- package/src/transformers/CallExpressionTransformer.ts +243 -243
- package/src/transformers/FileTransformer.ts +57 -57
- package/src/transformers/IProject.ts +15 -15
- package/src/transformers/ITransformOptions.ts +62 -62
- package/src/transformers/ImportTransformer.ts +66 -66
- package/src/transformers/NodeTransformer.ts +13 -13
- package/src/transformers/TransformerError.ts +55 -55
- package/src/transformers/features/AssertTransformer.ts +11 -11
- package/src/transformers/features/CreateAssertTransformer.ts +13 -13
- package/src/transformers/features/CreateIsTransformer.ts +11 -11
- package/src/transformers/features/CreateRandomTransformer.ts +43 -43
- package/src/transformers/features/CreateValidateTransformer.ts +13 -13
- package/src/transformers/features/IsTransformer.ts +11 -11
- package/src/transformers/features/RandomTransformer.ts +46 -46
- package/src/transformers/features/ValidateTransformer.ts +11 -11
- package/src/transformers/features/json/JsonApplicationTransformer.ts +118 -118
- package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
- package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
- package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +10 -10
- package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
- package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
- package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +10 -10
- package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
- package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +10 -10
- package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
- package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
- package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
- package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
- package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
- package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
- package/src/transformers/features/misc/MetadataTransformer.ts +61 -61
- package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
- package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
- package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
- package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +10 -10
- package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +10 -10
- package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
- package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
- package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
- package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
- package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +10 -10
- package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +10 -10
- package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
- package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
- package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
- package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
- package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
- package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
- package/src/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.ts +12 -12
- package/src/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.ts +12 -12
- package/src/transformers/features/protobuf/CreateProtobufDecodeTransformer.ts +9 -9
- package/src/transformers/features/protobuf/CreateProtobufEncodeTransformer.ts +9 -9
- package/src/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.ts +12 -12
- package/src/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.ts +12 -12
- package/src/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.ts +12 -12
- package/src/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.ts +12 -12
- package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
- package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
- package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +10 -10
- package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +10 -10
- package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +10 -10
- package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +10 -10
- package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
- package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +12 -12
- package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +12 -12
- package/src/transformers/internal/GenericTransformer.ts +104 -104
- package/src/typings/Atomic.ts +18 -18
- package/src/typings/ClassProperties.ts +5 -5
- package/src/typings/Customizable.ts +5 -5
- package/src/typings/OmitNever.ts +3 -3
- package/src/typings/ProtobufAtomic.ts +19 -19
- package/src/typings/SpecialFields.ts +3 -3
- package/src/typings/ValidationPipe.ts +9 -9
- package/src/typings/Writable.ts +11 -11
- package/src/utils/ArrayUtil.ts +45 -45
- package/src/utils/Escaper.ts +46 -46
- package/src/utils/MapUtil.ts +12 -12
- package/src/utils/NameEncoder.ts +32 -32
- package/src/utils/PatternUtil.ts +33 -33
- package/src/utils/RandomGenerator.ts +83 -83
- package/src/utils/Singleton.ts +17 -17
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { ProtobufAtomic } from "../typings/ProtobufAtomic";
|
|
4
|
-
|
|
5
|
-
import { ExpressionFactory } from "./ExpressionFactory";
|
|
6
|
-
|
|
7
|
-
export namespace NumericRangeFactory {
|
|
8
|
-
export const number =
|
|
9
|
-
(context: ts.TransformationContext) =>
|
|
10
|
-
(type: ProtobufAtomic.Numeric) =>
|
|
11
|
-
(input: ts.Expression): ts.Expression =>
|
|
12
|
-
ExpressionFactory.transpile(context)(NUMBER_TEXT[type])(input);
|
|
13
|
-
|
|
14
|
-
export const bigint =
|
|
15
|
-
(context: ts.TransformationContext) =>
|
|
16
|
-
(type: ProtobufAtomic.BigNumeric) =>
|
|
17
|
-
(input: ts.Expression): ts.Expression =>
|
|
18
|
-
ExpressionFactory.transpile(context)(BIGINT_TEXT[type])(input);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const NUMBER_TEXT = {
|
|
22
|
-
int32: `Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647`,
|
|
23
|
-
uint32: `Math.floor($input) === $input && 0 <= $input && $input <= 4294967295`,
|
|
24
|
-
int64: `Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807`,
|
|
25
|
-
uint64: `Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615`,
|
|
26
|
-
float: `-1.175494351e38 <= $input && $input <= 3.4028235e38`,
|
|
27
|
-
double: `true`,
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
const BIGINT_TEXT = {
|
|
31
|
-
int64: `true`,
|
|
32
|
-
uint64: `BigInt(0) <= $input`,
|
|
33
|
-
};
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
|
|
3
|
+
import { ProtobufAtomic } from "../typings/ProtobufAtomic";
|
|
4
|
+
|
|
5
|
+
import { ExpressionFactory } from "./ExpressionFactory";
|
|
6
|
+
|
|
7
|
+
export namespace NumericRangeFactory {
|
|
8
|
+
export const number =
|
|
9
|
+
(context: ts.TransformationContext) =>
|
|
10
|
+
(type: ProtobufAtomic.Numeric) =>
|
|
11
|
+
(input: ts.Expression): ts.Expression =>
|
|
12
|
+
ExpressionFactory.transpile(context)(NUMBER_TEXT[type])(input);
|
|
13
|
+
|
|
14
|
+
export const bigint =
|
|
15
|
+
(context: ts.TransformationContext) =>
|
|
16
|
+
(type: ProtobufAtomic.BigNumeric) =>
|
|
17
|
+
(input: ts.Expression): ts.Expression =>
|
|
18
|
+
ExpressionFactory.transpile(context)(BIGINT_TEXT[type])(input);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const NUMBER_TEXT = {
|
|
22
|
+
int32: `Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647`,
|
|
23
|
+
uint32: `Math.floor($input) === $input && 0 <= $input && $input <= 4294967295`,
|
|
24
|
+
int64: `Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807`,
|
|
25
|
+
uint64: `Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615`,
|
|
26
|
+
float: `-1.175494351e38 <= $input && $input <= 3.4028235e38`,
|
|
27
|
+
double: `true`,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const BIGINT_TEXT = {
|
|
31
|
+
int64: `true`,
|
|
32
|
+
uint64: `BigInt(0) <= $input`,
|
|
33
|
+
};
|
|
@@ -1,272 +1,272 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { Metadata } from "../schemas/metadata/Metadata";
|
|
4
|
-
import { MetadataObject } from "../schemas/metadata/MetadataObject";
|
|
5
|
-
|
|
6
|
-
import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
|
|
7
|
-
|
|
8
|
-
import { TransformerError } from "../transformers/TransformerError";
|
|
9
|
-
|
|
10
|
-
import { ValidationPipe } from "../typings/ValidationPipe";
|
|
11
|
-
|
|
12
|
-
import { Escaper } from "../utils/Escaper";
|
|
13
|
-
|
|
14
|
-
import { MetadataCollection } from "./MetadataCollection";
|
|
15
|
-
import { MetadataFactory } from "./MetadataFactory";
|
|
16
|
-
|
|
17
|
-
export namespace ProtobufFactory {
|
|
18
|
-
export const metadata =
|
|
19
|
-
(method: string) =>
|
|
20
|
-
(checker: ts.TypeChecker) =>
|
|
21
|
-
(collection: MetadataCollection) =>
|
|
22
|
-
(type: ts.Type): Metadata => {
|
|
23
|
-
// COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
|
|
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);
|
|
44
|
-
|
|
45
|
-
if (explore.top === true) {
|
|
46
|
-
const onlyObject: boolean =
|
|
47
|
-
meta.size() === 1 &&
|
|
48
|
-
meta.objects.length === 1 &&
|
|
49
|
-
meta.objects[0]!.properties.every((p) =>
|
|
50
|
-
p.key.isSoleLiteral(),
|
|
51
|
-
) &&
|
|
52
|
-
meta.isRequired() === true &&
|
|
53
|
-
meta.nullable === false;
|
|
54
|
-
if (onlyObject === false)
|
|
55
|
-
insert("target type must be a sole and static object type");
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
//----
|
|
59
|
-
// NOT SUPPORTED TYPES
|
|
60
|
-
//----
|
|
61
|
-
const noSupport = (msg: string) => insert(`does not support ${msg}`);
|
|
62
|
-
|
|
63
|
-
// PROHIBIT ANY TYPE
|
|
64
|
-
if (meta.any) noSupport("any type");
|
|
65
|
-
// PROHIBIT FUNCTIONAL TYPE
|
|
66
|
-
if (meta.functional) noSupport("functional type");
|
|
67
|
-
// PROHIBIT TUPLE TYPE
|
|
68
|
-
if (meta.tuples.length) noSupport("tuple type");
|
|
69
|
-
// PROHIBIT SET TYPE
|
|
70
|
-
if (meta.sets.length) noSupport("Set type");
|
|
71
|
-
// NATIVE TYPE, BUT NOT Uint8Array
|
|
72
|
-
if (meta.natives.length)
|
|
73
|
-
for (const native of meta.natives) {
|
|
74
|
-
if (native === "Uint8Array") continue;
|
|
75
|
-
|
|
76
|
-
const instead = BANNED_NATIVE_TYPES.get(native);
|
|
77
|
-
if (instead === undefined) noSupport(`${native} type`);
|
|
78
|
-
else noSupport(`${native} type. Use ${instead} type instead.`);
|
|
79
|
-
}
|
|
80
|
-
//----
|
|
81
|
-
// ATOMIC CASES
|
|
82
|
-
//----
|
|
83
|
-
if (meta.atomics.length) {
|
|
84
|
-
const numbers = ProtobufUtil.getNumbers(meta);
|
|
85
|
-
const bigints = ProtobufUtil.getBigints(meta);
|
|
86
|
-
|
|
87
|
-
for (const type of ["int64", "uint64"])
|
|
88
|
-
if (
|
|
89
|
-
numbers.some((n) => n === type) &&
|
|
90
|
-
bigints.some((b) => b === type)
|
|
91
|
-
)
|
|
92
|
-
insert(
|
|
93
|
-
`tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
//----
|
|
97
|
-
// ARRRAY CASES
|
|
98
|
-
//----
|
|
99
|
-
// DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
|
|
100
|
-
if (
|
|
101
|
-
meta.arrays.length &&
|
|
102
|
-
meta.arrays.some((array) => !!array.type.value.arrays.length)
|
|
103
|
-
)
|
|
104
|
-
noSupport("over two dimenstional array type");
|
|
105
|
-
// CHILD OF ARRAY TYPE MUST BE REQUIRED
|
|
106
|
-
if (
|
|
107
|
-
meta.arrays.length &&
|
|
108
|
-
meta.arrays.some(
|
|
109
|
-
(array) =>
|
|
110
|
-
array.type.value.isRequired() === false ||
|
|
111
|
-
array.type.value.nullable === true,
|
|
112
|
-
)
|
|
113
|
-
)
|
|
114
|
-
noSupport("optional type in array");
|
|
115
|
-
// UNION IN ARRAY
|
|
116
|
-
if (
|
|
117
|
-
meta.arrays.length &&
|
|
118
|
-
meta.arrays.some((a) => a.type.value.size() > 1)
|
|
119
|
-
)
|
|
120
|
-
noSupport("union type in array");
|
|
121
|
-
// DO DYNAMIC OBJECT IN ARRAY
|
|
122
|
-
if (
|
|
123
|
-
meta.arrays.length &&
|
|
124
|
-
meta.arrays.some(
|
|
125
|
-
(a) =>
|
|
126
|
-
a.type.value.maps.length ||
|
|
127
|
-
(a.type.value.objects.length &&
|
|
128
|
-
a.type.value.objects.some(
|
|
129
|
-
(o) => ProtobufUtil.isStaticObject(o) === false,
|
|
130
|
-
)),
|
|
131
|
-
)
|
|
132
|
-
)
|
|
133
|
-
noSupport("dynamic object in array");
|
|
134
|
-
// UNION WITH ARRAY
|
|
135
|
-
if (meta.size() > 1 && meta.arrays.length)
|
|
136
|
-
noSupport("union type with array type");
|
|
137
|
-
//----
|
|
138
|
-
// OBJECT CASES
|
|
139
|
-
//----
|
|
140
|
-
// EMPTY PROPERTY
|
|
141
|
-
if (
|
|
142
|
-
meta.objects.length &&
|
|
143
|
-
meta.objects.some((obj) => obj.properties.length === 0)
|
|
144
|
-
)
|
|
145
|
-
noSupport("empty object type");
|
|
146
|
-
// MULTIPLE DYNAMIC KEY TYPED PROPERTIES
|
|
147
|
-
if (
|
|
148
|
-
meta.objects.length &&
|
|
149
|
-
meta.objects.some(
|
|
150
|
-
(obj) =>
|
|
151
|
-
obj.properties.filter((p) => !p.key.isSoleLiteral())
|
|
152
|
-
.length > 1,
|
|
153
|
-
)
|
|
154
|
-
)
|
|
155
|
-
noSupport(
|
|
156
|
-
"object type with multiple dynamic key typed properties. Keep only one.",
|
|
157
|
-
);
|
|
158
|
-
// STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
|
|
159
|
-
if (
|
|
160
|
-
meta.objects.length &&
|
|
161
|
-
meta.objects.some(
|
|
162
|
-
(obj) =>
|
|
163
|
-
obj.properties.some((p) => p.key.isSoleLiteral()) &&
|
|
164
|
-
obj.properties.some((p) => !p.key.isSoleLiteral()),
|
|
165
|
-
)
|
|
166
|
-
)
|
|
167
|
-
noSupport(
|
|
168
|
-
"object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
|
|
169
|
-
);
|
|
170
|
-
// STATIC PROPERTY, BUT INVALID KEY NAME
|
|
171
|
-
if (
|
|
172
|
-
meta.objects.length &&
|
|
173
|
-
meta.objects.some((obj) =>
|
|
174
|
-
obj.properties.some(
|
|
175
|
-
(p) =>
|
|
176
|
-
p.key.isSoleLiteral() === true &&
|
|
177
|
-
Escaper.variable(p.key.getSoleLiteral()!) === false,
|
|
178
|
-
),
|
|
179
|
-
)
|
|
180
|
-
)
|
|
181
|
-
noSupport(`object type with invalid static key name.`);
|
|
182
|
-
// DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
|
|
183
|
-
if (
|
|
184
|
-
meta.objects.length &&
|
|
185
|
-
isDynamicObject(meta.objects[0]!) &&
|
|
186
|
-
meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
|
|
187
|
-
)
|
|
188
|
-
noSupport("dynamic object with array value type");
|
|
189
|
-
// UNION WITH DYNAMIC OBJECT
|
|
190
|
-
if (
|
|
191
|
-
meta.size() > 1 &&
|
|
192
|
-
meta.objects.length &&
|
|
193
|
-
isDynamicObject(meta.objects[0]!)
|
|
194
|
-
)
|
|
195
|
-
noSupport("union type with dynamic object type");
|
|
196
|
-
// UNION IN DYNAMIC PROPERTY VALUE
|
|
197
|
-
if (
|
|
198
|
-
meta.objects.length &&
|
|
199
|
-
meta.objects.some(
|
|
200
|
-
(obj) =>
|
|
201
|
-
isDynamicObject(obj) &&
|
|
202
|
-
obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
|
|
203
|
-
)
|
|
204
|
-
)
|
|
205
|
-
noSupport("union type in dynamic property");
|
|
206
|
-
//----
|
|
207
|
-
// MAP CASES
|
|
208
|
-
//----
|
|
209
|
-
// KEY TYPE IS UNION
|
|
210
|
-
if (
|
|
211
|
-
meta.maps.length &&
|
|
212
|
-
meta.maps.some((m) => ProtobufUtil.isUnion(m.key))
|
|
213
|
-
)
|
|
214
|
-
noSupport("union key typed map");
|
|
215
|
-
// KEY TYPE IS NOT ATOMIC
|
|
216
|
-
if (
|
|
217
|
-
meta.maps.length &&
|
|
218
|
-
meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
|
|
219
|
-
)
|
|
220
|
-
noSupport("non-atomic key typed map");
|
|
221
|
-
// MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
|
|
222
|
-
if (
|
|
223
|
-
meta.maps.length &&
|
|
224
|
-
meta.maps.some(
|
|
225
|
-
(m) => m.key.isRequired() === false || m.key.nullable,
|
|
226
|
-
)
|
|
227
|
-
)
|
|
228
|
-
noSupport("optional key typed map");
|
|
229
|
-
// MAP TYPE, BUT VALUE TYPE IS ARRAY
|
|
230
|
-
if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
|
|
231
|
-
noSupport("map type with array value type");
|
|
232
|
-
// UNION WITH MAP
|
|
233
|
-
if (meta.size() > 1 && meta.maps.length)
|
|
234
|
-
noSupport("union type with map type");
|
|
235
|
-
// UNION IN MAP
|
|
236
|
-
if (
|
|
237
|
-
meta.maps.length &&
|
|
238
|
-
meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
|
|
239
|
-
)
|
|
240
|
-
noSupport("union type in map value type");
|
|
241
|
-
return errors;
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
const isDynamicObject = (obj: MetadataObject): boolean =>
|
|
246
|
-
obj.properties[0]!.key.isSoleLiteral() === false;
|
|
247
|
-
|
|
248
|
-
const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
|
|
249
|
-
["Date", "string"],
|
|
250
|
-
["Boolean", "boolean"],
|
|
251
|
-
["BigInt", "bigint"],
|
|
252
|
-
["Number", "number"],
|
|
253
|
-
["String", "string"],
|
|
254
|
-
...[
|
|
255
|
-
"Buffer",
|
|
256
|
-
"Uint8ClampedArray",
|
|
257
|
-
"Uint16Array",
|
|
258
|
-
"Uint32Array",
|
|
259
|
-
"BigUint64Array",
|
|
260
|
-
"Int8Array",
|
|
261
|
-
"Int16Array",
|
|
262
|
-
"Int32Array",
|
|
263
|
-
"BigInt64Array",
|
|
264
|
-
"Float32Array",
|
|
265
|
-
"Float64Array",
|
|
266
|
-
"DataView",
|
|
267
|
-
"ArrayBuffer",
|
|
268
|
-
"SharedArrayBuffer",
|
|
269
|
-
].map((name) => [name, "Uint8Array"] as const),
|
|
270
|
-
["WeakSet", "Array"],
|
|
271
|
-
["WeakMap", "Map"],
|
|
272
|
-
]);
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
|
|
3
|
+
import { Metadata } from "../schemas/metadata/Metadata";
|
|
4
|
+
import { MetadataObject } from "../schemas/metadata/MetadataObject";
|
|
5
|
+
|
|
6
|
+
import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
|
|
7
|
+
|
|
8
|
+
import { TransformerError } from "../transformers/TransformerError";
|
|
9
|
+
|
|
10
|
+
import { ValidationPipe } from "../typings/ValidationPipe";
|
|
11
|
+
|
|
12
|
+
import { Escaper } from "../utils/Escaper";
|
|
13
|
+
|
|
14
|
+
import { MetadataCollection } from "./MetadataCollection";
|
|
15
|
+
import { MetadataFactory } from "./MetadataFactory";
|
|
16
|
+
|
|
17
|
+
export namespace ProtobufFactory {
|
|
18
|
+
export const metadata =
|
|
19
|
+
(method: string) =>
|
|
20
|
+
(checker: ts.TypeChecker) =>
|
|
21
|
+
(collection: MetadataCollection) =>
|
|
22
|
+
(type: ts.Type): Metadata => {
|
|
23
|
+
// COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
|
|
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);
|
|
44
|
+
|
|
45
|
+
if (explore.top === true) {
|
|
46
|
+
const onlyObject: boolean =
|
|
47
|
+
meta.size() === 1 &&
|
|
48
|
+
meta.objects.length === 1 &&
|
|
49
|
+
meta.objects[0]!.properties.every((p) =>
|
|
50
|
+
p.key.isSoleLiteral(),
|
|
51
|
+
) &&
|
|
52
|
+
meta.isRequired() === true &&
|
|
53
|
+
meta.nullable === false;
|
|
54
|
+
if (onlyObject === false)
|
|
55
|
+
insert("target type must be a sole and static object type");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
//----
|
|
59
|
+
// NOT SUPPORTED TYPES
|
|
60
|
+
//----
|
|
61
|
+
const noSupport = (msg: string) => insert(`does not support ${msg}`);
|
|
62
|
+
|
|
63
|
+
// PROHIBIT ANY TYPE
|
|
64
|
+
if (meta.any) noSupport("any type");
|
|
65
|
+
// PROHIBIT FUNCTIONAL TYPE
|
|
66
|
+
if (meta.functional) noSupport("functional type");
|
|
67
|
+
// PROHIBIT TUPLE TYPE
|
|
68
|
+
if (meta.tuples.length) noSupport("tuple type");
|
|
69
|
+
// PROHIBIT SET TYPE
|
|
70
|
+
if (meta.sets.length) noSupport("Set type");
|
|
71
|
+
// NATIVE TYPE, BUT NOT Uint8Array
|
|
72
|
+
if (meta.natives.length)
|
|
73
|
+
for (const native of meta.natives) {
|
|
74
|
+
if (native === "Uint8Array") continue;
|
|
75
|
+
|
|
76
|
+
const instead = BANNED_NATIVE_TYPES.get(native);
|
|
77
|
+
if (instead === undefined) noSupport(`${native} type`);
|
|
78
|
+
else noSupport(`${native} type. Use ${instead} type instead.`);
|
|
79
|
+
}
|
|
80
|
+
//----
|
|
81
|
+
// ATOMIC CASES
|
|
82
|
+
//----
|
|
83
|
+
if (meta.atomics.length) {
|
|
84
|
+
const numbers = ProtobufUtil.getNumbers(meta);
|
|
85
|
+
const bigints = ProtobufUtil.getBigints(meta);
|
|
86
|
+
|
|
87
|
+
for (const type of ["int64", "uint64"])
|
|
88
|
+
if (
|
|
89
|
+
numbers.some((n) => n === type) &&
|
|
90
|
+
bigints.some((b) => b === type)
|
|
91
|
+
)
|
|
92
|
+
insert(
|
|
93
|
+
`tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
//----
|
|
97
|
+
// ARRRAY CASES
|
|
98
|
+
//----
|
|
99
|
+
// DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
|
|
100
|
+
if (
|
|
101
|
+
meta.arrays.length &&
|
|
102
|
+
meta.arrays.some((array) => !!array.type.value.arrays.length)
|
|
103
|
+
)
|
|
104
|
+
noSupport("over two dimenstional array type");
|
|
105
|
+
// CHILD OF ARRAY TYPE MUST BE REQUIRED
|
|
106
|
+
if (
|
|
107
|
+
meta.arrays.length &&
|
|
108
|
+
meta.arrays.some(
|
|
109
|
+
(array) =>
|
|
110
|
+
array.type.value.isRequired() === false ||
|
|
111
|
+
array.type.value.nullable === true,
|
|
112
|
+
)
|
|
113
|
+
)
|
|
114
|
+
noSupport("optional type in array");
|
|
115
|
+
// UNION IN ARRAY
|
|
116
|
+
if (
|
|
117
|
+
meta.arrays.length &&
|
|
118
|
+
meta.arrays.some((a) => a.type.value.size() > 1)
|
|
119
|
+
)
|
|
120
|
+
noSupport("union type in array");
|
|
121
|
+
// DO DYNAMIC OBJECT IN ARRAY
|
|
122
|
+
if (
|
|
123
|
+
meta.arrays.length &&
|
|
124
|
+
meta.arrays.some(
|
|
125
|
+
(a) =>
|
|
126
|
+
a.type.value.maps.length ||
|
|
127
|
+
(a.type.value.objects.length &&
|
|
128
|
+
a.type.value.objects.some(
|
|
129
|
+
(o) => ProtobufUtil.isStaticObject(o) === false,
|
|
130
|
+
)),
|
|
131
|
+
)
|
|
132
|
+
)
|
|
133
|
+
noSupport("dynamic object in array");
|
|
134
|
+
// UNION WITH ARRAY
|
|
135
|
+
if (meta.size() > 1 && meta.arrays.length)
|
|
136
|
+
noSupport("union type with array type");
|
|
137
|
+
//----
|
|
138
|
+
// OBJECT CASES
|
|
139
|
+
//----
|
|
140
|
+
// EMPTY PROPERTY
|
|
141
|
+
if (
|
|
142
|
+
meta.objects.length &&
|
|
143
|
+
meta.objects.some((obj) => obj.properties.length === 0)
|
|
144
|
+
)
|
|
145
|
+
noSupport("empty object type");
|
|
146
|
+
// MULTIPLE DYNAMIC KEY TYPED PROPERTIES
|
|
147
|
+
if (
|
|
148
|
+
meta.objects.length &&
|
|
149
|
+
meta.objects.some(
|
|
150
|
+
(obj) =>
|
|
151
|
+
obj.properties.filter((p) => !p.key.isSoleLiteral())
|
|
152
|
+
.length > 1,
|
|
153
|
+
)
|
|
154
|
+
)
|
|
155
|
+
noSupport(
|
|
156
|
+
"object type with multiple dynamic key typed properties. Keep only one.",
|
|
157
|
+
);
|
|
158
|
+
// STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
|
|
159
|
+
if (
|
|
160
|
+
meta.objects.length &&
|
|
161
|
+
meta.objects.some(
|
|
162
|
+
(obj) =>
|
|
163
|
+
obj.properties.some((p) => p.key.isSoleLiteral()) &&
|
|
164
|
+
obj.properties.some((p) => !p.key.isSoleLiteral()),
|
|
165
|
+
)
|
|
166
|
+
)
|
|
167
|
+
noSupport(
|
|
168
|
+
"object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
|
|
169
|
+
);
|
|
170
|
+
// STATIC PROPERTY, BUT INVALID KEY NAME
|
|
171
|
+
if (
|
|
172
|
+
meta.objects.length &&
|
|
173
|
+
meta.objects.some((obj) =>
|
|
174
|
+
obj.properties.some(
|
|
175
|
+
(p) =>
|
|
176
|
+
p.key.isSoleLiteral() === true &&
|
|
177
|
+
Escaper.variable(p.key.getSoleLiteral()!) === false,
|
|
178
|
+
),
|
|
179
|
+
)
|
|
180
|
+
)
|
|
181
|
+
noSupport(`object type with invalid static key name.`);
|
|
182
|
+
// DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
|
|
183
|
+
if (
|
|
184
|
+
meta.objects.length &&
|
|
185
|
+
isDynamicObject(meta.objects[0]!) &&
|
|
186
|
+
meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
|
|
187
|
+
)
|
|
188
|
+
noSupport("dynamic object with array value type");
|
|
189
|
+
// UNION WITH DYNAMIC OBJECT
|
|
190
|
+
if (
|
|
191
|
+
meta.size() > 1 &&
|
|
192
|
+
meta.objects.length &&
|
|
193
|
+
isDynamicObject(meta.objects[0]!)
|
|
194
|
+
)
|
|
195
|
+
noSupport("union type with dynamic object type");
|
|
196
|
+
// UNION IN DYNAMIC PROPERTY VALUE
|
|
197
|
+
if (
|
|
198
|
+
meta.objects.length &&
|
|
199
|
+
meta.objects.some(
|
|
200
|
+
(obj) =>
|
|
201
|
+
isDynamicObject(obj) &&
|
|
202
|
+
obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
|
|
203
|
+
)
|
|
204
|
+
)
|
|
205
|
+
noSupport("union type in dynamic property");
|
|
206
|
+
//----
|
|
207
|
+
// MAP CASES
|
|
208
|
+
//----
|
|
209
|
+
// KEY TYPE IS UNION
|
|
210
|
+
if (
|
|
211
|
+
meta.maps.length &&
|
|
212
|
+
meta.maps.some((m) => ProtobufUtil.isUnion(m.key))
|
|
213
|
+
)
|
|
214
|
+
noSupport("union key typed map");
|
|
215
|
+
// KEY TYPE IS NOT ATOMIC
|
|
216
|
+
if (
|
|
217
|
+
meta.maps.length &&
|
|
218
|
+
meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
|
|
219
|
+
)
|
|
220
|
+
noSupport("non-atomic key typed map");
|
|
221
|
+
// MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
|
|
222
|
+
if (
|
|
223
|
+
meta.maps.length &&
|
|
224
|
+
meta.maps.some(
|
|
225
|
+
(m) => m.key.isRequired() === false || m.key.nullable,
|
|
226
|
+
)
|
|
227
|
+
)
|
|
228
|
+
noSupport("optional key typed map");
|
|
229
|
+
// MAP TYPE, BUT VALUE TYPE IS ARRAY
|
|
230
|
+
if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
|
|
231
|
+
noSupport("map type with array value type");
|
|
232
|
+
// UNION WITH MAP
|
|
233
|
+
if (meta.size() > 1 && meta.maps.length)
|
|
234
|
+
noSupport("union type with map type");
|
|
235
|
+
// UNION IN MAP
|
|
236
|
+
if (
|
|
237
|
+
meta.maps.length &&
|
|
238
|
+
meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
|
|
239
|
+
)
|
|
240
|
+
noSupport("union type in map value type");
|
|
241
|
+
return errors;
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const isDynamicObject = (obj: MetadataObject): boolean =>
|
|
246
|
+
obj.properties[0]!.key.isSoleLiteral() === false;
|
|
247
|
+
|
|
248
|
+
const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
|
|
249
|
+
["Date", "string"],
|
|
250
|
+
["Boolean", "boolean"],
|
|
251
|
+
["BigInt", "bigint"],
|
|
252
|
+
["Number", "number"],
|
|
253
|
+
["String", "string"],
|
|
254
|
+
...[
|
|
255
|
+
"Buffer",
|
|
256
|
+
"Uint8ClampedArray",
|
|
257
|
+
"Uint16Array",
|
|
258
|
+
"Uint32Array",
|
|
259
|
+
"BigUint64Array",
|
|
260
|
+
"Int8Array",
|
|
261
|
+
"Int16Array",
|
|
262
|
+
"Int32Array",
|
|
263
|
+
"BigInt64Array",
|
|
264
|
+
"Float32Array",
|
|
265
|
+
"Float64Array",
|
|
266
|
+
"DataView",
|
|
267
|
+
"ArrayBuffer",
|
|
268
|
+
"SharedArrayBuffer",
|
|
269
|
+
].map((name) => [name, "Uint8Array"] as const),
|
|
270
|
+
["WeakSet", "Array"],
|
|
271
|
+
["WeakMap", "Map"],
|
|
272
|
+
]);
|