typia 5.2.6 → 5.3.0-dev.20231112
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.js +14 -16
- package/lib/factories/ExpressionFactory.js.map +1 -1
- package/lib/factories/JsonMetadataFactory.d.ts +1 -1
- package/lib/factories/JsonMetadataFactory.js +2 -2
- package/lib/factories/JsonMetadataFactory.js.map +1 -1
- package/lib/factories/LiteralFactory.js +2 -0
- package/lib/factories/LiteralFactory.js.map +1 -1
- package/lib/factories/MetadataCollection.d.ts +2 -2
- package/lib/factories/MetadataFactory.d.ts +1 -1
- package/lib/factories/MetadataFactory.js +236 -170
- package/lib/factories/MetadataFactory.js.map +1 -1
- package/lib/factories/NumericRangeFactory.d.ts +2 -2
- package/lib/factories/NumericRangeFactory.js +41 -21
- package/lib/factories/NumericRangeFactory.js.map +1 -1
- package/lib/factories/ProtobufFactory.d.ts +1 -1
- package/lib/factories/ProtobufFactory.js +2 -2
- package/lib/factories/ProtobufFactory.js.map +1 -1
- package/lib/factories/internal/metadata/MetadataHelper.js +3 -2
- package/lib/factories/internal/metadata/MetadataHelper.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_constant.js +13 -8
- package/lib/factories/internal/metadata/iterate_metadata_constant.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_intersection.js +8 -5
- package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
- package/lib/functional/$from.d.ts +3 -0
- package/lib/functional/$from.js +9 -0
- package/lib/functional/$from.js.map +1 -0
- package/lib/functional/Namespace.js +7 -0
- package/lib/functional/Namespace.js.map +1 -1
- package/lib/module.d.ts +1 -0
- package/lib/module.js +2 -5
- package/lib/module.js.map +1 -1
- package/lib/programmers/CheckerProgrammer.js +11 -16
- package/lib/programmers/CheckerProgrammer.js.map +1 -1
- package/lib/programmers/RandomProgrammer.js +1 -1
- package/lib/programmers/RandomProgrammer.js.map +1 -1
- package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
- package/lib/programmers/http/HttpHeadersProgrammer.js +1 -1
- package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
- package/lib/programmers/http/HttpParameterProgrammer.js +1 -1
- package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
- package/lib/programmers/http/HttpQueryProgrammer.js +1 -1
- package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
- package/lib/programmers/internal/application_array.js +8 -0
- package/lib/programmers/internal/application_array.js.map +1 -1
- package/lib/programmers/internal/application_number.js +8 -1
- package/lib/programmers/internal/application_number.js.map +1 -1
- package/lib/programmers/internal/application_string.js +8 -1
- package/lib/programmers/internal/application_string.js.map +1 -1
- package/lib/programmers/internal/check_array_length.js +7 -4
- package/lib/programmers/internal/check_array_length.js.map +1 -1
- package/lib/programmers/internal/check_bigint.js +7 -4
- package/lib/programmers/internal/check_bigint.js.map +1 -1
- package/lib/programmers/internal/check_number.js +7 -4
- package/lib/programmers/internal/check_number.js.map +1 -1
- package/lib/programmers/internal/check_string.js +7 -4
- package/lib/programmers/internal/check_string.js.map +1 -1
- package/lib/programmers/internal/metadata_to_pattern.js +3 -1
- package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
- package/lib/programmers/json/JsonAssertParseProgrammer.js +1 -1
- package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonIsParseProgrammer.js +1 -1
- package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonStringifyProgrammer.js +3 -8
- package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonValidateParseProgrammer.js +1 -1
- package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscCloneProgrammer.js +19 -24
- package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscLiteralsProgrammer.js +1 -1
- package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscPruneProgrammer.js +11 -16
- package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
- package/lib/programmers/notations/NotationGeneralProgrammer.js +11 -16
- package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +1 -1
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +38 -42
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.d.ts +1 -1
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +22 -25
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
- package/lib/reflect.d.ts +3 -0
- package/lib/reflect.js +13 -0
- package/lib/reflect.js.map +1 -0
- package/lib/schemas/json/IJsonSchema.d.ts +1 -0
- package/lib/schemas/metadata/IMetadataApplication.d.ts +2 -2
- package/lib/schemas/metadata/{IMetadataCollection.d.ts → IMetadataComponents.d.ts} +1 -1
- package/lib/schemas/metadata/{IMetadataCollection.js → IMetadataComponents.js} +1 -1
- package/lib/schemas/metadata/IMetadataComponents.js.map +1 -0
- package/lib/schemas/metadata/IMetadataConstant.d.ts +1 -1
- package/lib/schemas/metadata/IMetadataTypeTag.d.ts +2 -2
- package/lib/schemas/metadata/Metadata.d.ts +2 -2
- package/lib/schemas/metadata/Metadata.js +82 -173
- package/lib/schemas/metadata/Metadata.js.map +1 -1
- package/lib/schemas/metadata/MetadataAlias.js +1 -1
- package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
- package/lib/schemas/metadata/MetadataApplication.d.ts +13 -0
- package/lib/schemas/metadata/MetadataApplication.js +30 -0
- package/lib/schemas/metadata/MetadataApplication.js.map +1 -0
- package/lib/schemas/metadata/MetadataArrayType.js +1 -1
- package/lib/schemas/metadata/MetadataArrayType.js.map +1 -1
- package/lib/schemas/metadata/MetadataAtomic.d.ts +3 -0
- package/lib/schemas/metadata/MetadataAtomic.js +42 -0
- package/lib/schemas/metadata/MetadataAtomic.js.map +1 -1
- package/lib/schemas/metadata/MetadataComponents.d.ts +16 -0
- package/lib/schemas/metadata/MetadataComponents.js +151 -0
- package/lib/schemas/metadata/MetadataComponents.js.map +1 -0
- package/lib/schemas/metadata/MetadataConstant.d.ts +9 -1
- package/lib/schemas/metadata/MetadataConstant.js +29 -0
- package/lib/schemas/metadata/MetadataConstant.js.map +1 -1
- package/lib/schemas/metadata/MetadataEscaped.js +4 -4
- package/lib/schemas/metadata/MetadataEscaped.js.map +1 -1
- package/lib/schemas/metadata/MetadataObject.js +2 -2
- package/lib/schemas/metadata/MetadataObject.js.map +1 -1
- package/lib/schemas/metadata/MetadataProperty.js +4 -4
- package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
- package/lib/schemas/metadata/MetadataTupleType.js +1 -1
- package/lib/schemas/metadata/MetadataTupleType.js.map +1 -1
- package/lib/transformers/CallExpressionTransformer.js +5 -2
- package/lib/transformers/CallExpressionTransformer.js.map +1 -1
- package/lib/transformers/features/json/JsonApplicationTransformer.d.ts +1 -1
- package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -5
- package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
- package/lib/transformers/features/reflect/ReflectMetadataTransformer.d.ts +5 -0
- package/lib/transformers/features/reflect/ReflectMetadataTransformer.js +58 -0
- package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -0
- package/package.json +2 -2
- package/src/Primitive.ts +135 -135
- package/src/executable/TypiaSetupWizard.ts +142 -142
- package/src/executable/setup/CommandExecutor.ts +8 -8
- package/src/factories/ExpressionFactory.ts +12 -13
- package/src/factories/JsonMetadataFactory.ts +53 -50
- package/src/factories/LiteralFactory.ts +2 -0
- package/src/factories/MetadataCollection.ts +282 -282
- package/src/factories/MetadataFactory.ts +55 -22
- package/src/factories/NumericRangeFactory.ts +56 -17
- package/src/factories/ProtobufFactory.ts +5 -2
- package/src/factories/internal/metadata/MetadataHelper.ts +7 -4
- package/src/factories/internal/metadata/emplace_metadata_object.ts +178 -178
- package/src/factories/internal/metadata/iterate_metadata_constant.ts +10 -8
- package/src/factories/internal/metadata/iterate_metadata_intersection.ts +9 -8
- package/src/functional/$from.ts +5 -0
- package/src/functional/$stoll.ts +8 -8
- package/src/functional/Namespace.ts +175 -168
- package/src/module.ts +1 -19
- package/src/programmers/AssertProgrammer.ts +322 -322
- package/src/programmers/CheckerProgrammer.ts +16 -17
- package/src/programmers/IsProgrammer.ts +258 -258
- package/src/programmers/RandomProgrammer.ts +4 -1
- package/src/programmers/ValidateProgrammer.ts +350 -350
- package/src/programmers/helpers/AtomicPredicator.ts +31 -31
- package/src/programmers/helpers/ProtobufUtil.ts +3 -2
- package/src/programmers/http/HttpHeadersProgrammer.ts +4 -1
- package/src/programmers/http/HttpParameterProgrammer.ts +4 -1
- package/src/programmers/http/HttpQueryProgrammer.ts +4 -1
- package/src/programmers/internal/application_array.ts +8 -0
- package/src/programmers/internal/application_number.ts +8 -1
- package/src/programmers/internal/application_string.ts +8 -1
- package/src/programmers/internal/check_array_length.ts +5 -2
- package/src/programmers/internal/check_bigint.ts +5 -2
- package/src/programmers/internal/check_dynamic_key.ts +178 -178
- package/src/programmers/internal/check_dynamic_properties.ts +202 -202
- package/src/programmers/internal/check_number.ts +5 -2
- package/src/programmers/internal/check_object.ts +62 -62
- package/src/programmers/internal/check_string.ts +5 -3
- package/src/programmers/internal/metadata_to_pattern.ts +3 -1
- package/src/programmers/json/JsonAssertParseProgrammer.ts +1 -0
- package/src/programmers/json/JsonIsParseProgrammer.ts +1 -0
- package/src/programmers/json/JsonStringifyProgrammer.ts +959 -960
- package/src/programmers/json/JsonValidateParseProgrammer.ts +1 -0
- package/src/programmers/misc/MiscCloneProgrammer.ts +787 -786
- package/src/programmers/misc/MiscLiteralsProgrammer.ts +4 -1
- package/src/programmers/misc/MiscPruneProgrammer.ts +549 -548
- package/src/programmers/notations/NotationGeneralProgrammer.ts +717 -716
- package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +1 -0
- package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +872 -882
- package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +21 -21
- package/src/reflect.ts +24 -0
- package/src/schemas/json/IJsonSchema.ts +1 -0
- package/src/schemas/metadata/IMetadataApplication.ts +2 -2
- package/src/schemas/metadata/{IMetadataCollection.ts → IMetadataComponents.ts} +1 -1
- package/src/schemas/metadata/IMetadataConstant.ts +1 -1
- package/src/schemas/metadata/IMetadataTypeTag.ts +9 -2
- package/src/schemas/metadata/Metadata.ts +18 -91
- package/src/schemas/metadata/MetadataAlias.ts +1 -1
- package/src/schemas/metadata/MetadataApplication.ts +44 -0
- package/src/schemas/metadata/MetadataArrayType.ts +1 -1
- package/src/schemas/metadata/MetadataAtomic.ts +44 -0
- package/src/schemas/metadata/MetadataComponents.ts +98 -0
- package/src/schemas/metadata/MetadataConstant.ts +44 -1
- package/src/schemas/metadata/MetadataEscaped.ts +4 -4
- package/src/schemas/metadata/MetadataObject.ts +2 -2
- package/src/schemas/metadata/MetadataProperty.ts +4 -7
- package/src/schemas/metadata/MetadataTupleType.ts +1 -1
- package/src/transform.ts +35 -35
- package/src/transformers/CallExpressionTransformer.ts +5 -2
- package/src/transformers/features/json/JsonApplicationTransformer.ts +7 -4
- package/src/transformers/features/{misc/MetadataTransformer.ts → reflect/ReflectMetadataTransformer.ts} +25 -8
- package/lib/schemas/metadata/IMetadataCollection.js.map +0 -1
- package/lib/transformers/features/misc/MetadataTransformer.d.ts +0 -5
- package/lib/transformers/features/misc/MetadataTransformer.js +0 -55
- package/lib/transformers/features/misc/MetadataTransformer.js.map +0 -1
|
@@ -3,6 +3,7 @@ import ts from "typescript";
|
|
|
3
3
|
import { Metadata } from "../schemas/metadata/Metadata";
|
|
4
4
|
import { MetadataAlias } from "../schemas/metadata/MetadataAlias";
|
|
5
5
|
import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
|
|
6
|
+
import { MetadataConstant } from "../schemas/metadata/MetadataConstant";
|
|
6
7
|
import { MetadataObject } from "../schemas/metadata/MetadataObject";
|
|
7
8
|
import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
|
|
8
9
|
import { explore_metadata } from "./internal/metadata/explore_metadata";
|
|
@@ -11,6 +12,7 @@ import { iterate_metadata_sort } from "./internal/metadata/iterate_metadata_sort
|
|
|
11
12
|
|
|
12
13
|
import { ValidationPipe } from "../typings/ValidationPipe";
|
|
13
14
|
|
|
15
|
+
import { ExpressionFactory } from "./ExpressionFactory";
|
|
14
16
|
import { MetadataCollection } from "./MetadataCollection";
|
|
15
17
|
|
|
16
18
|
export namespace MetadataFactory {
|
|
@@ -40,7 +42,7 @@ export namespace MetadataFactory {
|
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
export const analyze =
|
|
43
|
-
(checker: ts.TypeChecker) =>
|
|
45
|
+
(checker: ts.TypeChecker, context?: ts.TransformationContext) =>
|
|
44
46
|
(options: IOptions) =>
|
|
45
47
|
(collection: MetadataCollection) =>
|
|
46
48
|
(type: ts.Type | null): ValidationPipe<Metadata, IError> => {
|
|
@@ -59,7 +61,9 @@ export namespace MetadataFactory {
|
|
|
59
61
|
iterate_metadata_sort(collection)(meta);
|
|
60
62
|
|
|
61
63
|
if (options.validate)
|
|
62
|
-
errors.push(
|
|
64
|
+
errors.push(
|
|
65
|
+
...validate(context)(options)(options.validate)(meta),
|
|
66
|
+
);
|
|
63
67
|
return errors.length
|
|
64
68
|
? {
|
|
65
69
|
success: false,
|
|
@@ -76,14 +80,17 @@ export namespace MetadataFactory {
|
|
|
76
80
|
*/
|
|
77
81
|
export const soleLiteral = (value: string): Metadata => {
|
|
78
82
|
const meta: Metadata = Metadata.initialize();
|
|
79
|
-
meta.constants.push(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
meta.constants.push(
|
|
84
|
+
MetadataConstant.from({
|
|
85
|
+
values: [value],
|
|
86
|
+
type: "string",
|
|
87
|
+
}),
|
|
88
|
+
);
|
|
83
89
|
return meta;
|
|
84
90
|
};
|
|
85
91
|
|
|
86
92
|
const validate =
|
|
93
|
+
(context?: ts.TransformationContext) =>
|
|
87
94
|
(options: IOptions) =>
|
|
88
95
|
(functor: Validator) =>
|
|
89
96
|
(meta: Metadata): IError[] => {
|
|
@@ -95,7 +102,7 @@ export namespace MetadataFactory {
|
|
|
95
102
|
tuples: new Set(),
|
|
96
103
|
aliases: new Set(),
|
|
97
104
|
};
|
|
98
|
-
validateMeta(options)(visitor)(meta, {
|
|
105
|
+
validateMeta(context)(options)(visitor)(meta, {
|
|
99
106
|
object: null,
|
|
100
107
|
property: null,
|
|
101
108
|
nested: null,
|
|
@@ -107,47 +114,70 @@ export namespace MetadataFactory {
|
|
|
107
114
|
};
|
|
108
115
|
|
|
109
116
|
const validateMeta =
|
|
117
|
+
(context?: ts.TransformationContext) =>
|
|
110
118
|
(options: IOptions) =>
|
|
111
119
|
(visitor: IValidationVisitor) =>
|
|
112
120
|
(meta: Metadata, explore: IExplore) => {
|
|
113
|
-
const result:
|
|
114
|
-
if (
|
|
121
|
+
const result: string[] = [];
|
|
122
|
+
if (context !== undefined)
|
|
123
|
+
for (const atomic of meta.atomics)
|
|
124
|
+
for (const row of atomic.tags)
|
|
125
|
+
for (const tag of row.filter(
|
|
126
|
+
(t) =>
|
|
127
|
+
t.validate !== undefined &&
|
|
128
|
+
t.predicate === undefined,
|
|
129
|
+
))
|
|
130
|
+
try {
|
|
131
|
+
tag.predicate = ExpressionFactory.transpile(
|
|
132
|
+
context,
|
|
133
|
+
)(tag.validate!);
|
|
134
|
+
} catch {
|
|
135
|
+
result.push(
|
|
136
|
+
`Unable to transpile type tag script: ${JSON.stringify(
|
|
137
|
+
tag.validate,
|
|
138
|
+
)}`,
|
|
139
|
+
);
|
|
140
|
+
tag.predicate = () => ts.factory.createTrue();
|
|
141
|
+
}
|
|
142
|
+
result.push(...visitor.functor(meta, explore));
|
|
143
|
+
if (result.length)
|
|
115
144
|
visitor.errors.push({
|
|
116
145
|
name: meta.getName(),
|
|
117
146
|
explore: { ...explore },
|
|
118
|
-
messages: [...result],
|
|
147
|
+
messages: [...new Set(result)],
|
|
119
148
|
});
|
|
120
149
|
|
|
121
150
|
for (const alias of meta.aliases)
|
|
122
|
-
validateAlias(options)(visitor)(alias, explore);
|
|
151
|
+
validateAlias(context)(options)(visitor)(alias, explore);
|
|
123
152
|
for (const array of meta.arrays)
|
|
124
|
-
validateArray(options)(visitor)(array.type, explore);
|
|
153
|
+
validateArray(context)(options)(visitor)(array.type, explore);
|
|
125
154
|
for (const tuple of meta.tuples)
|
|
126
|
-
validateTuple(options)(visitor)(tuple.type, explore);
|
|
155
|
+
validateTuple(context)(options)(visitor)(tuple.type, explore);
|
|
127
156
|
for (const obj of meta.objects)
|
|
128
|
-
validateObject(options)(visitor)(obj);
|
|
157
|
+
validateObject(context)(options)(visitor)(obj);
|
|
129
158
|
for (const set of meta.sets)
|
|
130
|
-
validateMeta(options)(visitor)(set, explore);
|
|
159
|
+
validateMeta(context)(options)(visitor)(set, explore);
|
|
131
160
|
for (const map of meta.maps) {
|
|
132
|
-
validateMeta(options)(visitor)(map.key, explore);
|
|
133
|
-
validateMeta(options)(visitor)(map.value, explore);
|
|
161
|
+
validateMeta(context)(options)(visitor)(map.key, explore);
|
|
162
|
+
validateMeta(context)(options)(visitor)(map.value, explore);
|
|
134
163
|
}
|
|
135
164
|
|
|
136
165
|
if (options.escape === true && meta.escaped !== null)
|
|
137
|
-
validateMeta(options)(visitor)(meta.escaped.returns, {
|
|
166
|
+
validateMeta(context)(options)(visitor)(meta.escaped.returns, {
|
|
138
167
|
...explore,
|
|
139
168
|
escaped: true,
|
|
140
169
|
});
|
|
141
170
|
};
|
|
142
171
|
|
|
143
172
|
const validateAlias =
|
|
173
|
+
(context?: ts.TransformationContext) =>
|
|
144
174
|
(options: IOptions) =>
|
|
145
175
|
(visitor: IValidationVisitor) =>
|
|
146
176
|
(alias: MetadataAlias, explore: IExplore) => {
|
|
147
177
|
if (visitor.aliases.has(alias)) return;
|
|
148
178
|
visitor.aliases.add(alias);
|
|
149
179
|
|
|
150
|
-
validateMeta(options)(visitor)(alias.value, {
|
|
180
|
+
validateMeta(context)(options)(visitor)(alias.value, {
|
|
151
181
|
...explore,
|
|
152
182
|
nested: alias,
|
|
153
183
|
aliased: true,
|
|
@@ -155,13 +185,14 @@ export namespace MetadataFactory {
|
|
|
155
185
|
};
|
|
156
186
|
|
|
157
187
|
const validateArray =
|
|
188
|
+
(context?: ts.TransformationContext) =>
|
|
158
189
|
(options: IOptions) =>
|
|
159
190
|
(visitor: IValidationVisitor) =>
|
|
160
191
|
(array: MetadataArrayType, explore: IExplore) => {
|
|
161
192
|
if (visitor.arrays.has(array)) return;
|
|
162
193
|
visitor.arrays.add(array);
|
|
163
194
|
|
|
164
|
-
validateMeta(options)(visitor)(array.value, {
|
|
195
|
+
validateMeta(context)(options)(visitor)(array.value, {
|
|
165
196
|
...explore,
|
|
166
197
|
nested: array,
|
|
167
198
|
top: false,
|
|
@@ -169,6 +200,7 @@ export namespace MetadataFactory {
|
|
|
169
200
|
};
|
|
170
201
|
|
|
171
202
|
const validateTuple =
|
|
203
|
+
(context?: ts.TransformationContext) =>
|
|
172
204
|
(options: IOptions) =>
|
|
173
205
|
(visitor: IValidationVisitor) =>
|
|
174
206
|
(tuple: MetadataTupleType, explore: IExplore) => {
|
|
@@ -176,7 +208,7 @@ export namespace MetadataFactory {
|
|
|
176
208
|
visitor.tuples.add(tuple);
|
|
177
209
|
|
|
178
210
|
for (const elem of tuple.elements)
|
|
179
|
-
validateMeta(options)(visitor)(elem, {
|
|
211
|
+
validateMeta(context)(options)(visitor)(elem, {
|
|
180
212
|
...explore,
|
|
181
213
|
nested: tuple,
|
|
182
214
|
top: false,
|
|
@@ -184,6 +216,7 @@ export namespace MetadataFactory {
|
|
|
184
216
|
};
|
|
185
217
|
|
|
186
218
|
const validateObject =
|
|
219
|
+
(context?: ts.TransformationContext) =>
|
|
187
220
|
(options: IOptions) =>
|
|
188
221
|
(visitor: IValidationVisitor) =>
|
|
189
222
|
(object: MetadataObject) => {
|
|
@@ -215,7 +248,7 @@ export namespace MetadataFactory {
|
|
|
215
248
|
}
|
|
216
249
|
|
|
217
250
|
for (const property of object.properties)
|
|
218
|
-
validateMeta(options)(visitor)(property.value, {
|
|
251
|
+
validateMeta(context)(options)(visitor)(property.value, {
|
|
219
252
|
object,
|
|
220
253
|
property: property.key.isSoleLiteral()
|
|
221
254
|
? property.key.getSoleLiteral()!
|
|
@@ -6,28 +6,67 @@ import { ExpressionFactory } from "./ExpressionFactory";
|
|
|
6
6
|
|
|
7
7
|
export namespace NumericRangeFactory {
|
|
8
8
|
export const number =
|
|
9
|
-
(context: ts.TransformationContext) =>
|
|
10
9
|
(type: ProtobufAtomic.Numeric) =>
|
|
11
10
|
(input: ts.Expression): ts.Expression =>
|
|
12
|
-
|
|
11
|
+
NumberPredicator[type](input);
|
|
13
12
|
|
|
14
13
|
export const bigint =
|
|
15
|
-
(context: ts.TransformationContext) =>
|
|
16
14
|
(type: ProtobufAtomic.BigNumeric) =>
|
|
17
15
|
(input: ts.Expression): ts.Expression =>
|
|
18
|
-
|
|
16
|
+
BigIntPredicator[type](input);
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
19
|
+
namespace NumberPredicator {
|
|
20
|
+
export const int32 = (input: ts.Expression) =>
|
|
21
|
+
ts.factory.createLogicalAnd(
|
|
22
|
+
integer(input),
|
|
23
|
+
between("-2147483648", "2147483647")(input),
|
|
24
|
+
);
|
|
25
|
+
export const uint32 = (input: ts.Expression) =>
|
|
26
|
+
ts.factory.createLogicalAnd(
|
|
27
|
+
integer(input),
|
|
28
|
+
between("0", "4294967295")(input),
|
|
29
|
+
);
|
|
30
|
+
export const int64 = (input: ts.Expression) =>
|
|
31
|
+
ts.factory.createLogicalAnd(
|
|
32
|
+
integer(input),
|
|
33
|
+
between("-9223372036854775808", "9223372036854775807")(input),
|
|
34
|
+
);
|
|
35
|
+
export const uint64 = (input: ts.Expression) =>
|
|
36
|
+
ts.factory.createLogicalAnd(
|
|
37
|
+
integer(input),
|
|
38
|
+
between("0", "18446744073709551615")(input),
|
|
39
|
+
);
|
|
40
|
+
export const float = (input: ts.Expression) =>
|
|
41
|
+
between("-1.175494351e38", "3.4028235e38")(input);
|
|
42
|
+
export const double = () => ts.factory.createTrue();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
namespace BigIntPredicator {
|
|
46
|
+
export const int64 = () => ts.factory.createTrue();
|
|
47
|
+
export const uint64 = (input: ts.Expression) =>
|
|
48
|
+
ts.factory.createLessThanEquals(
|
|
49
|
+
ts.factory.createCallExpression(
|
|
50
|
+
ts.factory.createIdentifier("BigInt"),
|
|
51
|
+
undefined,
|
|
52
|
+
[ExpressionFactory.number(0)],
|
|
53
|
+
),
|
|
54
|
+
input,
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const integer = (input: ts.Expression) =>
|
|
59
|
+
ts.factory.createStrictEquality(
|
|
60
|
+
ts.factory.createCallExpression(
|
|
61
|
+
ts.factory.createIdentifier("Math.floor"),
|
|
62
|
+
undefined,
|
|
63
|
+
[input],
|
|
64
|
+
),
|
|
65
|
+
input,
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const between = (x: string, y: string) => (input: ts.Expression) =>
|
|
69
|
+
ts.factory.createLogicalAnd(
|
|
70
|
+
ts.factory.createLessThanEquals(ts.factory.createIdentifier(x), input),
|
|
71
|
+
ts.factory.createLessThanEquals(input, ts.factory.createIdentifier(y)),
|
|
72
|
+
);
|
|
@@ -17,12 +17,15 @@ import { MetadataFactory } from "./MetadataFactory";
|
|
|
17
17
|
export namespace ProtobufFactory {
|
|
18
18
|
export const metadata =
|
|
19
19
|
(method: string) =>
|
|
20
|
-
(checker: ts.TypeChecker) =>
|
|
20
|
+
(checker: ts.TypeChecker, context?: ts.TransformationContext) =>
|
|
21
21
|
(collection: MetadataCollection) =>
|
|
22
22
|
(type: ts.Type): Metadata => {
|
|
23
23
|
// COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
|
|
24
24
|
const result: ValidationPipe<Metadata, MetadataFactory.IError> =
|
|
25
|
-
MetadataFactory.analyze(
|
|
25
|
+
MetadataFactory.analyze(
|
|
26
|
+
checker,
|
|
27
|
+
context,
|
|
28
|
+
)({
|
|
26
29
|
escape: false,
|
|
27
30
|
constant: true,
|
|
28
31
|
absorb: true,
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { Metadata } from "../../../schemas/metadata/Metadata";
|
|
2
|
+
import { MetadataConstant } from "../../../schemas/metadata/MetadataConstant";
|
|
2
3
|
|
|
3
4
|
export namespace MetadataHelper {
|
|
4
5
|
export const literal_to_metadata = (key: string): Metadata => {
|
|
5
6
|
const metadata: Metadata = Metadata.initialize();
|
|
6
|
-
metadata.constants.push(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
metadata.constants.push(
|
|
8
|
+
MetadataConstant.create({
|
|
9
|
+
type: "string",
|
|
10
|
+
values: [key],
|
|
11
|
+
}),
|
|
12
|
+
);
|
|
10
13
|
return metadata;
|
|
11
14
|
};
|
|
12
15
|
}
|