typia 5.0.0-dev.20230823-2 → 5.0.0-dev.20230824
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/factories/ExpressionFactory.d.ts +2 -0
- package/lib/factories/ExpressionFactory.js +24 -0
- package/lib/factories/ExpressionFactory.js.map +1 -1
- package/lib/factories/IdentifierFactory.d.ts +2 -1
- package/lib/factories/IdentifierFactory.js +11 -0
- package/lib/factories/IdentifierFactory.js.map +1 -1
- package/lib/factories/MetadataCollection.d.ts +7 -7
- package/lib/factories/MetadataCollection.js +4 -4
- package/lib/factories/MetadataCollection.js.map +1 -1
- package/lib/factories/MetadataTagFactory.d.ts +2 -2
- package/lib/factories/MetadataTagFactory.js +9 -7
- package/lib/factories/MetadataTagFactory.js.map +1 -1
- package/lib/factories/ProtobufFactory.js +9 -8
- package/lib/factories/ProtobufFactory.js.map +1 -1
- package/lib/factories/internal/metadata/emend_metadata_atomics.js +6 -6
- package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +5 -0
- package/lib/factories/internal/metadata/{emplace_metadata_array.js → emplace_metadata_array_type.js} +4 -4
- package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -0
- package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +2 -2
- package/lib/factories/internal/metadata/iterate_metadata_array.js +7 -3
- package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_atomic.js +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_collection.js +20 -12
- package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -0
- package/lib/factories/internal/metadata/{iterate_metadata_tag.js → iterate_metadata_comment_tags.js} +4 -4
- package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -0
- package/lib/factories/internal/metadata/iterate_metadata_intersection.js +138 -16
- package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_object.js +0 -7
- package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_sort.js +2 -2
- package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_tuple.js +6 -2
- package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_type_tags.d.ts +3 -0
- package/lib/factories/internal/metadata/iterate_metadata_type_tags.js +157 -0
- package/lib/factories/internal/metadata/iterate_metadata_type_tags.js.map +1 -0
- package/lib/functional/$any.js +2 -1
- package/lib/functional/$any.js.map +1 -1
- package/lib/functional/$clone.d.ts +2 -0
- package/lib/functional/$clone.js +8 -0
- package/lib/functional/$clone.js.map +1 -0
- package/lib/module.d.ts +2 -39
- package/lib/module.js +3 -17
- package/lib/module.js.map +1 -1
- package/lib/programmers/AssertProgrammer.js +1 -3
- package/lib/programmers/AssertProgrammer.js.map +1 -1
- package/lib/programmers/CheckerProgrammer.js +38 -29
- package/lib/programmers/CheckerProgrammer.js.map +1 -1
- package/lib/programmers/FeatureProgrammer.d.ts +4 -4
- package/lib/programmers/FeatureProgrammer.js.map +1 -1
- package/lib/programmers/IsProgrammer.d.ts +1 -1
- package/lib/programmers/IsProgrammer.js +1 -3
- package/lib/programmers/IsProgrammer.js.map +1 -1
- package/lib/programmers/RandomProgrammer.js +44 -33
- package/lib/programmers/RandomProgrammer.js.map +1 -1
- package/lib/programmers/ValidateProgrammer.js +1 -3
- package/lib/programmers/ValidateProgrammer.js.map +1 -1
- package/lib/programmers/helpers/AtomicPredicator.js +2 -2
- package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
- package/lib/programmers/helpers/ICheckEntry.d.ts +1 -1
- package/lib/programmers/helpers/ProtobufUtil.js +2 -2
- package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
- package/lib/programmers/helpers/RandomJoiner.d.ts +4 -4
- package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
- package/lib/programmers/helpers/RandomRanger.d.ts +6 -6
- package/lib/programmers/helpers/RandomRanger.js.map +1 -1
- package/lib/programmers/helpers/UnionExplorer.d.ts +8 -8
- package/lib/programmers/helpers/UnionExplorer.js +40 -29
- package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
- package/lib/programmers/internal/application_array.js +1 -1
- package/lib/programmers/internal/application_array.js.map +1 -1
- package/lib/programmers/internal/application_default_string.js +2 -2
- package/lib/programmers/internal/application_default_string.js.map +1 -1
- package/lib/programmers/internal/application_resolved.js +2 -2
- package/lib/programmers/internal/application_resolved.js.map +1 -1
- package/lib/programmers/internal/application_schema.js +5 -5
- package/lib/programmers/internal/application_schema.js.map +1 -1
- package/lib/programmers/internal/application_string.js.map +1 -1
- package/lib/programmers/internal/application_tuple.js +10 -9
- package/lib/programmers/internal/application_tuple.js.map +1 -1
- package/lib/programmers/internal/check_array_length.js.map +1 -1
- package/lib/programmers/internal/check_array_tags.js +39 -0
- package/lib/programmers/internal/check_array_tags.js.map +1 -0
- package/lib/programmers/internal/check_bigint.js +88 -74
- package/lib/programmers/internal/check_bigint.js.map +1 -1
- package/lib/programmers/internal/check_number.js +142 -131
- package/lib/programmers/internal/check_number.js.map +1 -1
- package/lib/programmers/internal/check_string.js +30 -6
- package/lib/programmers/internal/check_string.js.map +1 -1
- package/lib/programmers/internal/check_string_tags.js.map +1 -1
- package/lib/programmers/internal/check_template.js +16 -49
- package/lib/programmers/internal/check_template.js.map +1 -1
- package/lib/programmers/internal/check_union_array_like.js +3 -2
- package/lib/programmers/internal/check_union_array_like.js.map +1 -1
- package/lib/programmers/internal/metadata_to_pattern.js +4 -4
- package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
- package/lib/programmers/internal/stringify_dynamic_properties.js +2 -1
- package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
- package/lib/programmers/internal/wrap_metadata_rest_tuple.js +9 -5
- package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
- package/lib/programmers/json/JsonStringifyProgrammer.js +29 -23
- package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscCloneProgrammer.js +10 -10
- package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscLiteralsProgrammer.js +2 -2
- package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscPruneProgrammer.js +13 -13
- package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +6 -6
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +2 -2
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -1
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
- package/lib/schemas/json/IJsonSchema.d.ts +2 -2
- package/lib/schemas/metadata/IMetadata.d.ts +11 -4
- package/lib/schemas/metadata/IMetadataAlias.d.ts +2 -2
- package/lib/schemas/metadata/IMetadataArray.d.ts +4 -6
- package/lib/schemas/metadata/IMetadataArrayType.d.ts +8 -0
- package/lib/{CustomValidatorMap.js → schemas/metadata/IMetadataArrayType.js} +1 -1
- package/lib/schemas/metadata/IMetadataArrayType.js.map +1 -0
- package/lib/schemas/metadata/IMetadataAtomic.d.ts +5 -0
- package/lib/schemas/metadata/IMetadataAtomic.js +3 -0
- package/lib/schemas/metadata/IMetadataAtomic.js.map +1 -0
- package/lib/schemas/metadata/IMetadataCollection.d.ts +4 -4
- package/lib/schemas/metadata/{IMetadataTag.d.ts → IMetadataCommentTag.d.ts} +2 -2
- package/lib/schemas/metadata/IMetadataCommentTag.js +3 -0
- package/lib/schemas/metadata/IMetadataCommentTag.js.map +1 -0
- package/lib/schemas/metadata/IMetadataProperty.d.ts +2 -2
- package/lib/schemas/metadata/IMetadataTuple.d.ts +4 -6
- package/lib/schemas/metadata/IMetadataTupleType.d.ts +8 -0
- package/lib/schemas/metadata/IMetadataTupleType.js +3 -0
- package/lib/schemas/metadata/IMetadataTupleType.js.map +1 -0
- package/lib/schemas/metadata/IMetadataTypeTag.d.ts +6 -0
- package/lib/schemas/metadata/IMetadataTypeTag.js +3 -0
- package/lib/schemas/metadata/IMetadataTypeTag.js.map +1 -0
- package/lib/schemas/metadata/Metadata.d.ts +2 -2
- package/lib/schemas/metadata/Metadata.js +206 -146
- package/lib/schemas/metadata/Metadata.js.map +1 -1
- package/lib/schemas/metadata/MetadataAlias.d.ts +2 -2
- package/lib/schemas/metadata/MetadataArray.d.ts +6 -6
- package/lib/schemas/metadata/MetadataArray.js +5 -19
- package/lib/schemas/metadata/MetadataArray.js.map +1 -1
- package/lib/schemas/metadata/MetadataArrayType.d.ts +14 -0
- package/lib/schemas/metadata/MetadataArrayType.js +36 -0
- package/lib/schemas/metadata/MetadataArrayType.js.map +1 -0
- package/lib/schemas/metadata/MetadataProperty.d.ts +2 -2
- package/lib/schemas/metadata/MetadataTuple.d.ts +4 -6
- package/lib/schemas/metadata/MetadataTuple.js +5 -19
- package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
- package/lib/schemas/metadata/MetadataTupleType.d.ts +13 -0
- package/lib/schemas/metadata/MetadataTupleType.js +40 -0
- package/lib/schemas/metadata/MetadataTupleType.js.map +1 -0
- package/lib/tags/ExclusiveMaximum.d.ts +8 -0
- package/lib/tags/ExclusiveMaximum.js +3 -0
- package/lib/tags/ExclusiveMaximum.js.map +1 -0
- package/lib/tags/ExclusiveMinimum.d.ts +8 -0
- package/lib/tags/ExclusiveMinimum.js +3 -0
- package/lib/tags/ExclusiveMinimum.js.map +1 -0
- package/lib/tags/Format.d.ts +8 -0
- package/lib/{schemas/metadata/IMetadataTag.js → tags/Format.js} +1 -1
- package/lib/tags/Format.js.map +1 -0
- package/lib/tags/MaxItems.d.ts +8 -0
- package/lib/tags/MaxItems.js +3 -0
- package/lib/tags/MaxItems.js.map +1 -0
- package/lib/tags/MaxLength.d.ts +8 -0
- package/lib/tags/MaxLength.js +3 -0
- package/lib/tags/MaxLength.js.map +1 -0
- package/lib/tags/Maximum.d.ts +8 -0
- package/lib/tags/Maximum.js +3 -0
- package/lib/tags/Maximum.js.map +1 -0
- package/lib/tags/MinItems.d.ts +8 -0
- package/lib/tags/MinItems.js +3 -0
- package/lib/tags/MinItems.js.map +1 -0
- package/lib/tags/MinLength.d.ts +8 -0
- package/lib/tags/MinLength.js +3 -0
- package/lib/tags/MinLength.js.map +1 -0
- package/lib/tags/Minimum.d.ts +8 -0
- package/lib/tags/Minimum.js +3 -0
- package/lib/tags/Minimum.js.map +1 -0
- package/lib/tags/MultipleOf.d.ts +8 -0
- package/lib/tags/MultipleOf.js +3 -0
- package/lib/tags/MultipleOf.js.map +1 -0
- package/lib/tags/Pattern.d.ts +8 -0
- package/lib/tags/Pattern.js +3 -0
- package/lib/tags/Pattern.js.map +1 -0
- package/lib/tags/TagBase.d.ts +10 -0
- package/lib/tags/TagBase.js +3 -0
- package/lib/tags/TagBase.js.map +1 -0
- package/lib/tags/Type.d.ts +13 -0
- package/lib/tags/Type.js +3 -0
- package/lib/tags/Type.js.map +1 -0
- package/lib/tags/index.d.ts +12 -0
- package/lib/tags/index.js +29 -0
- package/lib/tags/index.js.map +1 -0
- package/lib/transformers/FileTransformer.d.ts +1 -1
- package/lib/transformers/FileTransformer.js +12 -1
- package/lib/transformers/FileTransformer.js.map +1 -1
- package/lib/transformers/IProject.d.ts +1 -0
- package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -2
- package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
- package/package.json +1 -1
- package/src/factories/ExpressionFactory.ts +44 -0
- package/src/factories/IdentifierFactory.ts +15 -0
- package/src/factories/MetadataCollection.ts +18 -12
- package/src/factories/MetadataTagFactory.ts +22 -21
- package/src/factories/ProtobufFactory.ts +10 -8
- package/src/factories/internal/metadata/emend_metadata_atomics.ts +7 -5
- package/src/factories/internal/metadata/{emplace_metadata_array.ts → emplace_metadata_array_type.ts} +3 -3
- package/src/factories/internal/metadata/emplace_metadata_tuple.ts +2 -2
- package/src/factories/internal/metadata/iterate_metadata_array.ts +13 -5
- package/src/factories/internal/metadata/iterate_metadata_atomic.ts +6 -4
- package/src/factories/internal/metadata/iterate_metadata_collection.ts +23 -16
- package/src/factories/internal/metadata/{iterate_metadata_tag.ts → iterate_metadata_comment_tags.ts} +1 -1
- package/src/factories/internal/metadata/iterate_metadata_intersection.ts +109 -15
- package/src/factories/internal/metadata/iterate_metadata_object.ts +10 -10
- package/src/factories/internal/metadata/iterate_metadata_sort.ts +2 -2
- package/src/factories/internal/metadata/iterate_metadata_tuple.ts +12 -4
- package/src/factories/internal/metadata/iterate_metadata_type_tags.ts +183 -0
- package/src/functional/$any.ts +3 -1
- package/src/functional/$clone.ts +4 -0
- package/src/module.ts +2 -55
- package/src/programmers/AssertProgrammer.ts +1 -1
- package/src/programmers/CheckerProgrammer.ts +80 -47
- package/src/programmers/FeatureProgrammer.ts +6 -6
- package/src/programmers/IsProgrammer.ts +1 -1
- package/src/programmers/RandomProgrammer.ts +68 -45
- package/src/programmers/ValidateProgrammer.ts +1 -1
- package/src/programmers/helpers/AtomicPredicator.ts +2 -2
- package/src/programmers/helpers/ICheckEntry.ts +1 -1
- package/src/programmers/helpers/ProtobufUtil.ts +1 -1
- package/src/programmers/helpers/RandomJoiner.ts +8 -4
- package/src/programmers/helpers/RandomRanger.ts +8 -8
- package/src/programmers/helpers/UnionExplorer.ts +48 -34
- package/src/programmers/internal/application_array.ts +5 -4
- package/src/programmers/internal/application_default_string.ts +6 -2
- package/src/programmers/internal/application_resolved.ts +2 -2
- package/src/programmers/internal/application_schema.ts +5 -5
- package/src/programmers/internal/application_string.ts +2 -2
- package/src/programmers/internal/application_tuple.ts +12 -11
- package/src/programmers/internal/check_array_length.ts +2 -2
- package/src/programmers/internal/check_array_tags.ts +45 -0
- package/src/programmers/internal/check_bigint.ts +45 -17
- package/src/programmers/internal/check_number.ts +97 -70
- package/src/programmers/internal/check_string.ts +43 -12
- package/src/programmers/internal/check_string_tags.ts +3 -3
- package/src/programmers/internal/check_template.ts +1 -12
- package/src/programmers/internal/check_union_array_like.ts +6 -5
- package/src/programmers/internal/metadata_to_pattern.ts +4 -4
- package/src/programmers/internal/stringify_dynamic_properties.ts +1 -1
- package/src/programmers/internal/wrap_metadata_rest_tuple.ts +9 -5
- package/src/programmers/json/JsonStringifyProgrammer.ts +41 -25
- package/src/programmers/misc/MiscCloneProgrammer.ts +24 -14
- package/src/programmers/misc/MiscLiteralsProgrammer.ts +2 -2
- package/src/programmers/misc/MiscPruneProgrammer.ts +27 -17
- package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +12 -12
- package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +14 -14
- package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +6 -6
- package/src/schemas/json/IJsonSchema.ts +2 -2
- package/src/schemas/metadata/IMetadata.ts +11 -5
- package/src/schemas/metadata/IMetadataAlias.ts +2 -2
- package/src/schemas/metadata/IMetadataArray.ts +4 -7
- package/src/schemas/metadata/IMetadataArrayType.ts +10 -0
- package/src/schemas/metadata/IMetadataAtomic.ts +6 -0
- package/src/schemas/metadata/IMetadataCollection.ts +4 -4
- package/src/schemas/metadata/{IMetadataTag.ts → IMetadataCommentTag.ts} +17 -17
- package/src/schemas/metadata/IMetadataDictionary.ts +4 -4
- package/src/schemas/metadata/IMetadataProperty.ts +2 -2
- package/src/schemas/metadata/IMetadataTuple.ts +4 -7
- package/src/schemas/metadata/IMetadataTupleType.ts +10 -0
- package/src/schemas/metadata/IMetadataTypeTag.ts +6 -0
- package/src/schemas/metadata/Metadata.ts +109 -44
- package/src/schemas/metadata/MetadataAlias.ts +2 -2
- package/src/schemas/metadata/MetadataArray.ts +10 -34
- package/src/schemas/metadata/MetadataArrayType.ts +57 -0
- package/src/schemas/metadata/MetadataProperty.ts +2 -2
- package/src/schemas/metadata/MetadataTuple.ts +10 -37
- package/src/schemas/metadata/MetadataTupleType.ts +67 -0
- package/src/tags/ExclusiveMaximum.ts +8 -0
- package/src/tags/ExclusiveMinimum.ts +8 -0
- package/src/tags/Format.ts +29 -0
- package/src/tags/MaxItems.ts +8 -0
- package/src/tags/MaxLength.ts +8 -0
- package/src/tags/Maximum.ts +8 -0
- package/src/tags/MinItems.ts +8 -0
- package/src/tags/MinLength.ts +8 -0
- package/src/tags/Minimum.ts +8 -0
- package/src/tags/MultipleOf.ts +10 -0
- package/src/tags/Pattern.ts +8 -0
- package/src/tags/TagBase.ts +17 -0
- package/src/tags/Type.ts +30 -0
- package/src/tags/index.ts +12 -0
- package/src/transformers/FileTransformer.ts +2 -2
- package/src/transformers/IProject.ts +1 -0
- package/src/transformers/features/json/JsonApplicationTransformer.ts +3 -2
- package/src/typings/Atomic.ts +1 -0
- package/lib/CustomValidatorMap.d.ts +0 -110
- package/lib/CustomValidatorMap.js.map +0 -1
- package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +0 -5
- package/lib/factories/internal/metadata/emplace_metadata_array.js.map +0 -1
- package/lib/factories/internal/metadata/iterate_metadata_tag.d.ts +0 -2
- package/lib/factories/internal/metadata/iterate_metadata_tag.js.map +0 -1
- package/lib/programmers/internal/check_array.js +0 -44
- package/lib/programmers/internal/check_array.js.map +0 -1
- package/lib/programmers/internal/check_custom.d.ts +0 -1
- package/lib/programmers/internal/check_custom.js +0 -30
- package/lib/programmers/internal/check_custom.js.map +0 -1
- package/lib/schemas/metadata/IMetadataTag.js.map +0 -1
- package/src/CustomValidatorMap.ts +0 -126
- package/src/programmers/internal/check_array.ts +0 -30
- package/src/programmers/internal/check_custom.ts +0 -31
- /package/lib/programmers/internal/{check_array.d.ts → check_array_tags.d.ts} +0 -0
|
@@ -1,19 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { $clone } from "../../functional/$clone";
|
|
2
|
+
|
|
2
3
|
import { ClassProperties } from "../../typings/ClassProperties";
|
|
3
4
|
import { Writable } from "../../typings/Writable";
|
|
4
5
|
|
|
5
6
|
import { ArrayUtil } from "../../utils/ArrayUtil";
|
|
6
7
|
|
|
7
8
|
import { IMetadata } from "./IMetadata";
|
|
9
|
+
import { IMetadataAtomic } from "./IMetadataAtomic";
|
|
8
10
|
import { IMetadataCollection } from "./IMetadataCollection";
|
|
9
11
|
import { IMetadataDictionary } from "./IMetadataDictionary";
|
|
12
|
+
import { IMetadataTypeTag } from "./IMetadataTypeTag";
|
|
10
13
|
import { MetadataAlias } from "./MetadataAlias";
|
|
11
14
|
import { MetadataArray } from "./MetadataArray";
|
|
15
|
+
import { MetadataArrayType } from "./MetadataArrayType";
|
|
12
16
|
import { MetadataConstant } from "./MetadataConstant";
|
|
13
17
|
import { MetadataEscaped } from "./MetadataEscaped";
|
|
14
18
|
import { MetadataObject } from "./MetadataObject";
|
|
15
19
|
import { MetadataProperty } from "./MetadataProperty";
|
|
16
20
|
import { MetadataTuple } from "./MetadataTuple";
|
|
21
|
+
import { MetadataTupleType } from "./MetadataTupleType";
|
|
17
22
|
|
|
18
23
|
export class Metadata {
|
|
19
24
|
public any: boolean;
|
|
@@ -23,7 +28,7 @@ export class Metadata {
|
|
|
23
28
|
public functional: boolean;
|
|
24
29
|
|
|
25
30
|
public escaped: MetadataEscaped | null;
|
|
26
|
-
public atomics:
|
|
31
|
+
public atomics: IMetadataAtomic[];
|
|
27
32
|
public constants: MetadataConstant[];
|
|
28
33
|
public templates: Metadata[][];
|
|
29
34
|
|
|
@@ -115,16 +120,22 @@ export class Metadata {
|
|
|
115
120
|
nullable: this.nullable,
|
|
116
121
|
functional: this.functional,
|
|
117
122
|
|
|
118
|
-
atomics: this.atomics
|
|
119
|
-
constants:
|
|
123
|
+
atomics: $clone(this.atomics),
|
|
124
|
+
constants: $clone(this.constants),
|
|
120
125
|
templates: this.templates.map((tpl) =>
|
|
121
126
|
tpl.map((meta) => meta.toJSON()),
|
|
122
127
|
),
|
|
123
128
|
escaped: this.escaped ? this.escaped.toJSON() : null,
|
|
124
129
|
|
|
125
130
|
rest: this.rest ? this.rest.toJSON() : null,
|
|
126
|
-
arrays: this.arrays.map((array) =>
|
|
127
|
-
|
|
131
|
+
arrays: this.arrays.map((array) => ({
|
|
132
|
+
name: array.type.name,
|
|
133
|
+
tags: $clone(array.tags),
|
|
134
|
+
})),
|
|
135
|
+
tuples: this.tuples.map((tuple) => ({
|
|
136
|
+
name: tuple.type.name,
|
|
137
|
+
tags: $clone(tuple.tags),
|
|
138
|
+
})),
|
|
128
139
|
objects: this.objects.map((obj) => obj.name),
|
|
129
140
|
aliases: this.aliases.map((alias) => alias.name),
|
|
130
141
|
|
|
@@ -157,13 +168,13 @@ export class Metadata {
|
|
|
157
168
|
arrays: new Map(
|
|
158
169
|
collection.arrays.map((arr) => [
|
|
159
170
|
arr.name,
|
|
160
|
-
|
|
171
|
+
MetadataArrayType._From_without_value(arr),
|
|
161
172
|
]),
|
|
162
173
|
),
|
|
163
174
|
tuples: new Map(
|
|
164
175
|
collection.tuples.map((tpl) => [
|
|
165
176
|
tpl.name,
|
|
166
|
-
|
|
177
|
+
MetadataTupleType._From_without_elements(tpl),
|
|
167
178
|
]),
|
|
168
179
|
),
|
|
169
180
|
};
|
|
@@ -204,8 +215,8 @@ export class Metadata {
|
|
|
204
215
|
nullable: meta.nullable,
|
|
205
216
|
functional: meta.functional,
|
|
206
217
|
|
|
207
|
-
constants:
|
|
208
|
-
atomics: meta.atomics
|
|
218
|
+
constants: $clone(meta.constants),
|
|
219
|
+
atomics: $clone(meta.atomics),
|
|
209
220
|
templates: meta.templates.map((tpl) =>
|
|
210
221
|
tpl.map((meta) => this._From(meta, dict)),
|
|
211
222
|
),
|
|
@@ -214,21 +225,27 @@ export class Metadata {
|
|
|
214
225
|
: null,
|
|
215
226
|
|
|
216
227
|
rest: meta.rest ? this._From(meta.rest, dict) : null,
|
|
217
|
-
arrays: meta.arrays.map((
|
|
218
|
-
const
|
|
219
|
-
if (
|
|
228
|
+
arrays: meta.arrays.map((ref) => {
|
|
229
|
+
const type = dict.arrays.get(ref.name);
|
|
230
|
+
if (type === undefined)
|
|
220
231
|
throw new Error(
|
|
221
|
-
`Error on Metadata.from(): failed to find array "${
|
|
232
|
+
`Error on Metadata.from(): failed to find array "${ref.name}".`,
|
|
222
233
|
);
|
|
223
|
-
return
|
|
234
|
+
return MetadataArray.create({
|
|
235
|
+
type,
|
|
236
|
+
tags: $clone(ref.tags),
|
|
237
|
+
});
|
|
224
238
|
}),
|
|
225
|
-
tuples: meta.tuples.map((
|
|
226
|
-
const
|
|
227
|
-
if (
|
|
239
|
+
tuples: meta.tuples.map((t) => {
|
|
240
|
+
const type = dict.tuples.get(t.name);
|
|
241
|
+
if (type === undefined)
|
|
228
242
|
throw new Error(
|
|
229
|
-
`Error on Metadata.from(): failed to find tuple "${
|
|
243
|
+
`Error on Metadata.from(): failed to find tuple "${t.name}".`,
|
|
230
244
|
);
|
|
231
|
-
return
|
|
245
|
+
return MetadataTuple.create({
|
|
246
|
+
type,
|
|
247
|
+
tags: $clone(t.tags),
|
|
248
|
+
});
|
|
232
249
|
}),
|
|
233
250
|
objects: meta.objects.map((name) => {
|
|
234
251
|
const found = dict.objects.get(name);
|
|
@@ -294,8 +311,8 @@ export class Metadata {
|
|
|
294
311
|
*/
|
|
295
312
|
public binarySize(): number {
|
|
296
313
|
return (
|
|
297
|
-
new Set([
|
|
298
|
-
...this.atomics,
|
|
314
|
+
new Set<string>([
|
|
315
|
+
...this.atomics.map((a) => a.type),
|
|
299
316
|
...this.constants.map((c) => c.type),
|
|
300
317
|
...(this.templates.length ? ["string"] : []),
|
|
301
318
|
]).size +
|
|
@@ -403,7 +420,7 @@ export namespace Metadata {
|
|
|
403
420
|
//----
|
|
404
421
|
// ATOMICS
|
|
405
422
|
for (const atomic of x.atomics)
|
|
406
|
-
if (y.atomics.
|
|
423
|
+
if (y.atomics.some((ya) => atomic.type === ya.type)) return true;
|
|
407
424
|
|
|
408
425
|
// CONSTANTS
|
|
409
426
|
for (const constant of x.constants) {
|
|
@@ -440,7 +457,7 @@ export namespace Metadata {
|
|
|
440
457
|
for (const ya of y.arrays)
|
|
441
458
|
if (
|
|
442
459
|
!x.arrays.some((xa) =>
|
|
443
|
-
covers(xa.value, ya.value, level + 1),
|
|
460
|
+
covers(xa.type.value, ya.type.value, level + 1),
|
|
444
461
|
)
|
|
445
462
|
) {
|
|
446
463
|
return false;
|
|
@@ -449,14 +466,15 @@ export namespace Metadata {
|
|
|
449
466
|
// TUPLES
|
|
450
467
|
for (const yt of y.tuples)
|
|
451
468
|
if (
|
|
452
|
-
yt.elements.length !== 0 &&
|
|
469
|
+
yt.type.elements.length !== 0 &&
|
|
453
470
|
x.tuples.some(
|
|
454
471
|
(xt) =>
|
|
455
|
-
xt.elements.length >=
|
|
456
|
-
|
|
457
|
-
|
|
472
|
+
xt.type.elements.length >=
|
|
473
|
+
yt.type.elements.length &&
|
|
474
|
+
xt.type.elements
|
|
475
|
+
.slice(yt.type.elements.length)
|
|
458
476
|
.every((xv, i) =>
|
|
459
|
-
covers(xv, yt.elements[i]!, level + 1),
|
|
477
|
+
covers(xv, yt.type.elements[i]!, level + 1),
|
|
460
478
|
),
|
|
461
479
|
) === false
|
|
462
480
|
)
|
|
@@ -485,12 +503,16 @@ export namespace Metadata {
|
|
|
485
503
|
// VALUES
|
|
486
504
|
//----
|
|
487
505
|
// ATOMICS
|
|
488
|
-
if (
|
|
506
|
+
if (
|
|
507
|
+
y.atomics.some(
|
|
508
|
+
(ya) => x.atomics.some((xa) => xa.type === ya.type) === false,
|
|
509
|
+
)
|
|
510
|
+
)
|
|
489
511
|
return false;
|
|
490
512
|
|
|
491
513
|
// CONSTANTS
|
|
492
514
|
for (const yc of y.constants) {
|
|
493
|
-
if (x.atomics.some((
|
|
515
|
+
if (x.atomics.some((atom) => yc.type === atom.type)) continue;
|
|
494
516
|
const xc: MetadataConstant | undefined = x.constants.find(
|
|
495
517
|
(elem) => elem.type === yc.type,
|
|
496
518
|
);
|
|
@@ -523,8 +545,7 @@ export namespace Metadata {
|
|
|
523
545
|
|
|
524
546
|
escaped:
|
|
525
547
|
x.escaped !== null && y.escaped !== null
|
|
526
|
-
?
|
|
527
|
-
MetadataEscaped.create({
|
|
548
|
+
? MetadataEscaped.create({
|
|
528
549
|
original: merge(
|
|
529
550
|
x.escaped.original,
|
|
530
551
|
y.escaped.original,
|
|
@@ -532,7 +553,11 @@ export namespace Metadata {
|
|
|
532
553
|
returns: merge(x.escaped.returns, y.escaped.returns),
|
|
533
554
|
})
|
|
534
555
|
: x.escaped ?? y.escaped,
|
|
535
|
-
atomics:
|
|
556
|
+
atomics: mergeTaggedTypes({
|
|
557
|
+
container: x.atomics,
|
|
558
|
+
equals: (x, y) => x.type === y.type,
|
|
559
|
+
getter: (x) => x.tags,
|
|
560
|
+
})(y.atomics),
|
|
536
561
|
constants: [...x.constants],
|
|
537
562
|
templates: x.templates.slice(),
|
|
538
563
|
|
|
@@ -540,8 +565,17 @@ export namespace Metadata {
|
|
|
540
565
|
x.rest !== null && y.rest !== null
|
|
541
566
|
? merge(x.rest, y.rest)
|
|
542
567
|
: x.rest ?? y.rest,
|
|
543
|
-
arrays: x.arrays.slice(),
|
|
544
|
-
|
|
568
|
+
// arrays: x.arrays.slice(),
|
|
569
|
+
arrays: mergeTaggedTypes({
|
|
570
|
+
container: x.arrays,
|
|
571
|
+
equals: (x, y) => x.type.name === y.type.name,
|
|
572
|
+
getter: (x) => x.tags,
|
|
573
|
+
})(y.arrays),
|
|
574
|
+
tuples: mergeTaggedTypes({
|
|
575
|
+
container: x.tuples,
|
|
576
|
+
equals: (x, y) => x.type.name === y.type.name,
|
|
577
|
+
getter: (x) => x.tags,
|
|
578
|
+
})(y.tuples),
|
|
545
579
|
objects: x.objects.slice(),
|
|
546
580
|
aliases: x.aliases.slice(),
|
|
547
581
|
|
|
@@ -561,10 +595,6 @@ export namespace Metadata {
|
|
|
561
595
|
for (const value of constant.values)
|
|
562
596
|
ArrayUtil.add(target.values, value);
|
|
563
597
|
}
|
|
564
|
-
for (const array of y.arrays)
|
|
565
|
-
ArrayUtil.set(output.arrays, array, (elem) => elem.name);
|
|
566
|
-
for (const tuple of y.tuples)
|
|
567
|
-
ArrayUtil.set(output.tuples, tuple, (elem) => elem.name);
|
|
568
598
|
for (const obj of y.objects)
|
|
569
599
|
ArrayUtil.set(output.objects, obj, (elem) => elem.name);
|
|
570
600
|
for (const alias of y.aliases)
|
|
@@ -584,8 +614,8 @@ const getName = (metadata: Metadata): string => {
|
|
|
584
614
|
if (metadata.isRequired() === false) elements.push("undefined");
|
|
585
615
|
|
|
586
616
|
// ATOMIC
|
|
587
|
-
for (const
|
|
588
|
-
elements.push(type);
|
|
617
|
+
for (const atom of metadata.atomics) {
|
|
618
|
+
elements.push(atom.type);
|
|
589
619
|
}
|
|
590
620
|
for (const constant of metadata.constants)
|
|
591
621
|
for (const value of constant.values)
|
|
@@ -613,8 +643,8 @@ const getName = (metadata: Metadata): string => {
|
|
|
613
643
|
|
|
614
644
|
// INSTANCES
|
|
615
645
|
if (metadata.rest !== null) elements.push(`...${metadata.rest.getName()}`);
|
|
616
|
-
for (const tuple of metadata.tuples) elements.push(tuple.name);
|
|
617
|
-
for (const array of metadata.arrays) elements.push(array.name);
|
|
646
|
+
for (const tuple of metadata.tuples) elements.push(tuple.type.name);
|
|
647
|
+
for (const array of metadata.arrays) elements.push(array.type.name);
|
|
618
648
|
for (const object of metadata.objects) elements.push(object.name);
|
|
619
649
|
for (const alias of metadata.aliases) elements.push(alias.name);
|
|
620
650
|
if (metadata.escaped !== null) elements.push(metadata.escaped.getName());
|
|
@@ -632,3 +662,38 @@ export namespace Metadata {
|
|
|
632
662
|
value: Metadata;
|
|
633
663
|
}
|
|
634
664
|
}
|
|
665
|
+
|
|
666
|
+
const mergeTaggedTypes =
|
|
667
|
+
<T>(props: {
|
|
668
|
+
container: T[];
|
|
669
|
+
equals: (x: T, y: T) => boolean;
|
|
670
|
+
getter: (x: T) => IMetadataTypeTag[][];
|
|
671
|
+
}) =>
|
|
672
|
+
(opposite: T[]) => {
|
|
673
|
+
const output: T[] = [...props.container];
|
|
674
|
+
for (const elem of opposite) {
|
|
675
|
+
const equal = props.container.find((x) => props.equals(x, elem));
|
|
676
|
+
if (equal === undefined) {
|
|
677
|
+
output.push(elem);
|
|
678
|
+
continue;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
const matrix: string[][] = props
|
|
682
|
+
.getter(equal)
|
|
683
|
+
.map((tags) => tags.map((t) => t.name))
|
|
684
|
+
.sort();
|
|
685
|
+
for (const tags of props.getter(elem)) {
|
|
686
|
+
const names: string[] = tags.map((t) => t.name).sort();
|
|
687
|
+
if (
|
|
688
|
+
matrix.some(
|
|
689
|
+
(m) =>
|
|
690
|
+
m.length === names.length &&
|
|
691
|
+
m.every((s, i) => s === names[i]),
|
|
692
|
+
)
|
|
693
|
+
)
|
|
694
|
+
continue;
|
|
695
|
+
props.getter(equal).push(tags);
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
return output;
|
|
699
|
+
};
|
|
@@ -2,14 +2,14 @@ import { ClassProperties } from "../../typings/ClassProperties";
|
|
|
2
2
|
|
|
3
3
|
import { IJsDocTagInfo } from "./IJsDocTagInfo";
|
|
4
4
|
import { IMetadataAlias } from "./IMetadataAlias";
|
|
5
|
-
import {
|
|
5
|
+
import { IMetadataCommentTag } from "./IMetadataCommentTag";
|
|
6
6
|
import { Metadata } from "./Metadata";
|
|
7
7
|
|
|
8
8
|
export class MetadataAlias {
|
|
9
9
|
public readonly name: string;
|
|
10
10
|
public readonly value: Metadata;
|
|
11
11
|
public readonly description: string | null;
|
|
12
|
-
public readonly tags:
|
|
12
|
+
public readonly tags: IMetadataCommentTag[];
|
|
13
13
|
public readonly jsDocTags: IJsDocTagInfo[];
|
|
14
14
|
public readonly recursive: boolean;
|
|
15
15
|
public readonly nullables: boolean[];
|
|
@@ -1,55 +1,31 @@
|
|
|
1
|
+
import { $clone } from "../../functional/$clone";
|
|
2
|
+
|
|
1
3
|
import { ClassProperties } from "../../typings/ClassProperties";
|
|
2
4
|
|
|
3
5
|
import { IMetadataArray } from "./IMetadataArray";
|
|
4
|
-
import {
|
|
6
|
+
import { IMetadataTypeTag } from "./IMetadataTypeTag";
|
|
7
|
+
import { MetadataArrayType } from "./MetadataArrayType";
|
|
5
8
|
|
|
6
9
|
export class MetadataArray {
|
|
7
|
-
public readonly
|
|
8
|
-
public readonly
|
|
9
|
-
public readonly nullables: boolean[];
|
|
10
|
-
public readonly recursive: boolean;
|
|
11
|
-
public readonly index: number | null;
|
|
10
|
+
public readonly type: MetadataArrayType;
|
|
11
|
+
public readonly tags: IMetadataTypeTag[][];
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* @hidden
|
|
15
15
|
*/
|
|
16
16
|
private constructor(props: ClassProperties<MetadataArray>) {
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this.index = props.index;
|
|
20
|
-
this.recursive = props.recursive;
|
|
21
|
-
this.nullables = props.nullables;
|
|
17
|
+
this.type = props.type;
|
|
18
|
+
this.tags = props.tags;
|
|
22
19
|
}
|
|
23
20
|
|
|
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
|
-
/**
|
|
40
|
-
* @internal
|
|
41
|
-
*/
|
|
42
21
|
public static create(props: ClassProperties<MetadataArray>): MetadataArray {
|
|
43
22
|
return new MetadataArray(props);
|
|
44
23
|
}
|
|
45
24
|
|
|
46
25
|
public toJSON(): IMetadataArray {
|
|
47
26
|
return {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
nullables: this.nullables,
|
|
51
|
-
recursive: this.recursive,
|
|
52
|
-
index: this.index,
|
|
27
|
+
type: this.type.toJSON(),
|
|
28
|
+
tags: $clone(this.tags),
|
|
53
29
|
};
|
|
54
30
|
}
|
|
55
31
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ClassProperties } from "../../typings/ClassProperties";
|
|
2
|
+
|
|
3
|
+
import { IMetadataArrayType } from "./IMetadataArrayType";
|
|
4
|
+
import { Metadata } from "./Metadata";
|
|
5
|
+
|
|
6
|
+
export class MetadataArrayType {
|
|
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
|
+
* @hidden
|
|
15
|
+
*/
|
|
16
|
+
private constructor(props: ClassProperties<MetadataArrayType>) {
|
|
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<IMetadataArrayType, "value">,
|
|
29
|
+
): MetadataArrayType {
|
|
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
|
+
/**
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
public static create(
|
|
43
|
+
props: ClassProperties<MetadataArrayType>,
|
|
44
|
+
): MetadataArrayType {
|
|
45
|
+
return new MetadataArrayType(props);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public toJSON(): IMetadataArrayType {
|
|
49
|
+
return {
|
|
50
|
+
name: this.name,
|
|
51
|
+
value: this.value.toJSON(),
|
|
52
|
+
nullables: this.nullables,
|
|
53
|
+
recursive: this.recursive,
|
|
54
|
+
index: this.index,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { ClassProperties } from "../../typings/ClassProperties";
|
|
2
2
|
|
|
3
3
|
import { IJsDocTagInfo } from "./IJsDocTagInfo";
|
|
4
|
+
import { IMetadataCommentTag } from "./IMetadataCommentTag";
|
|
4
5
|
import { IMetadataDictionary } from "./IMetadataDictionary";
|
|
5
6
|
import { IMetadataProperty } from "./IMetadataProperty";
|
|
6
|
-
import { IMetadataTag } from "./IMetadataTag";
|
|
7
7
|
import { Metadata } from "./Metadata";
|
|
8
8
|
|
|
9
9
|
export class MetadataProperty {
|
|
10
10
|
public readonly key: Metadata;
|
|
11
11
|
public readonly value: Metadata;
|
|
12
12
|
public readonly description: string | null;
|
|
13
|
-
public readonly tags:
|
|
13
|
+
public readonly tags: IMetadataCommentTag[];
|
|
14
14
|
public readonly jsDocTags: IJsDocTagInfo[];
|
|
15
15
|
|
|
16
16
|
/* -----------------------------------------------------------
|
|
@@ -1,45 +1,21 @@
|
|
|
1
|
+
import { $clone } from "../../functional/$clone";
|
|
2
|
+
|
|
1
3
|
import { ClassProperties } from "../../typings/ClassProperties";
|
|
2
4
|
|
|
3
5
|
import { IMetadataTuple } from "./IMetadataTuple";
|
|
4
|
-
import {
|
|
6
|
+
import { IMetadataTypeTag } from "./IMetadataTypeTag";
|
|
7
|
+
import { MetadataTupleType } from "./MetadataTupleType";
|
|
5
8
|
|
|
6
9
|
export class MetadataTuple {
|
|
7
|
-
public readonly
|
|
8
|
-
public readonly
|
|
9
|
-
|
|
10
|
-
public readonly index: number | null;
|
|
11
|
-
public readonly recursive: boolean;
|
|
12
|
-
public readonly nullables: boolean[];
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @internal
|
|
16
|
-
*/
|
|
17
|
-
public of_map?: boolean;
|
|
10
|
+
public readonly type: MetadataTupleType;
|
|
11
|
+
public readonly tags: IMetadataTypeTag[][];
|
|
18
12
|
|
|
19
13
|
/**
|
|
20
14
|
* @internal
|
|
21
15
|
*/
|
|
22
16
|
private constructor(props: ClassProperties<MetadataTuple>) {
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
this.index = props.index;
|
|
26
|
-
this.recursive = props.recursive;
|
|
27
|
-
this.nullables = props.nullables;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* @internal
|
|
32
|
-
*/
|
|
33
|
-
public static _From_without_elements(
|
|
34
|
-
props: Omit<IMetadataTuple, "elements">,
|
|
35
|
-
): MetadataTuple {
|
|
36
|
-
return this.create({
|
|
37
|
-
name: props.name,
|
|
38
|
-
index: props.index,
|
|
39
|
-
elements: null!,
|
|
40
|
-
recursive: props.recursive,
|
|
41
|
-
nullables: props.nullables.slice(),
|
|
42
|
-
});
|
|
17
|
+
this.type = props.type;
|
|
18
|
+
this.tags = props.tags;
|
|
43
19
|
}
|
|
44
20
|
|
|
45
21
|
public static create(props: ClassProperties<MetadataTuple>): MetadataTuple {
|
|
@@ -48,11 +24,8 @@ export class MetadataTuple {
|
|
|
48
24
|
|
|
49
25
|
public toJSON(): IMetadataTuple {
|
|
50
26
|
return {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
elements: this.elements.map((elem) => elem.toJSON()),
|
|
54
|
-
recursive: this.recursive,
|
|
55
|
-
nullables: this.nullables.slice(),
|
|
27
|
+
type: this.type.toJSON(),
|
|
28
|
+
tags: $clone(this.tags),
|
|
56
29
|
};
|
|
57
30
|
}
|
|
58
31
|
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ClassProperties } from "../../typings/ClassProperties";
|
|
2
|
+
|
|
3
|
+
import { IMetadataTupleType } from "./IMetadataTupleType";
|
|
4
|
+
import { Metadata } from "./Metadata";
|
|
5
|
+
|
|
6
|
+
export class MetadataTupleType {
|
|
7
|
+
public readonly name: string;
|
|
8
|
+
public readonly elements: Metadata[];
|
|
9
|
+
|
|
10
|
+
public readonly index: number | null;
|
|
11
|
+
public readonly recursive: boolean;
|
|
12
|
+
public readonly nullables: boolean[];
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
public of_map?: boolean;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
private constructor(props: ClassProperties<MetadataTupleType>) {
|
|
23
|
+
this.name = props.name;
|
|
24
|
+
this.elements = props.elements;
|
|
25
|
+
this.index = props.index;
|
|
26
|
+
this.recursive = props.recursive;
|
|
27
|
+
this.nullables = props.nullables;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
public static _From_without_elements(
|
|
34
|
+
props: Omit<IMetadataTupleType, "elements">,
|
|
35
|
+
): MetadataTupleType {
|
|
36
|
+
return this.create({
|
|
37
|
+
name: props.name,
|
|
38
|
+
index: props.index,
|
|
39
|
+
elements: null!,
|
|
40
|
+
recursive: props.recursive,
|
|
41
|
+
nullables: props.nullables.slice(),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public static create(
|
|
46
|
+
props: ClassProperties<MetadataTupleType>,
|
|
47
|
+
): MetadataTupleType {
|
|
48
|
+
return new MetadataTupleType(props);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public isRest(): boolean {
|
|
52
|
+
return (
|
|
53
|
+
this.elements.length > 0 &&
|
|
54
|
+
this.elements[this.elements.length - 1]!.rest !== null
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public toJSON(): IMetadataTupleType {
|
|
59
|
+
return {
|
|
60
|
+
name: this.name,
|
|
61
|
+
index: this.index,
|
|
62
|
+
elements: this.elements.map((elem) => elem.toJSON()),
|
|
63
|
+
recursive: this.recursive,
|
|
64
|
+
nullables: this.nullables.slice(),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type Format<
|
|
2
|
+
Value extends
|
|
3
|
+
| "email"
|
|
4
|
+
| "uuid"
|
|
5
|
+
| "ipv4"
|
|
6
|
+
| "ipv6"
|
|
7
|
+
| "url"
|
|
8
|
+
| "date"
|
|
9
|
+
| "date-time",
|
|
10
|
+
> = {
|
|
11
|
+
"typia.tag"?: {
|
|
12
|
+
target: "string";
|
|
13
|
+
kind: "format";
|
|
14
|
+
value: Value;
|
|
15
|
+
validate: Value extends "email"
|
|
16
|
+
? `/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test($input)`
|
|
17
|
+
: Value extends "uuid"
|
|
18
|
+
? `/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i.test($input)`
|
|
19
|
+
: Value extends "ipv4"
|
|
20
|
+
? `/^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test($input)`
|
|
21
|
+
: Value extends "ipv6"
|
|
22
|
+
? `/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/.test($input)`
|
|
23
|
+
: Value extends "url"
|
|
24
|
+
? `/^[a-zA-Z0-9]+:\/\/(?:www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/.test($input)`
|
|
25
|
+
: Value extends "date"
|
|
26
|
+
? `/^(\d{4})-(\d{2})-(\d{2})$/.test($input)`
|
|
27
|
+
: `!isNaN(new Date($input).getTime())`;
|
|
28
|
+
};
|
|
29
|
+
};
|