typia 5.0.0-dev.20230820-2 → 5.0.0-dev.20230822
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/lib/factories/MetadataFactory.js +9 -0
- package/lib/factories/MetadataFactory.js.map +1 -1
- package/lib/factories/MetadataTagFactory.js.map +1 -1
- package/lib/factories/ProtobufFactory.js +8 -0
- package/lib/factories/ProtobufFactory.js.map +1 -1
- package/lib/functional/$ProtobufReader.d.ts +2 -0
- package/lib/functional/$ProtobufReader.js +14 -3
- package/lib/functional/$ProtobufReader.js.map +1 -1
- package/lib/functional/$ProtobufSizer.js +1 -1
- package/lib/functional/$ProtobufSizer.js.map +1 -1
- package/lib/functional/$ProtobufWriter.js +0 -1
- package/lib/functional/$ProtobufWriter.js.map +1 -1
- package/lib/programmers/RandomProgrammer.js +15 -12
- package/lib/programmers/RandomProgrammer.js.map +1 -1
- package/lib/programmers/helpers/ProtobufUtil.d.ts +3 -1
- package/lib/programmers/helpers/ProtobufUtil.js +5 -1
- package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
- package/lib/programmers/helpers/RandomRanger.js +2 -2
- package/lib/programmers/helpers/RandomRanger.js.map +1 -1
- package/lib/programmers/internal/application_number.js +6 -1
- package/lib/programmers/internal/application_number.js.map +1 -1
- package/lib/programmers/internal/check_bigint.js +8 -11
- package/lib/programmers/internal/check_bigint.js.map +1 -1
- package/lib/programmers/internal/check_number.js +12 -2
- package/lib/programmers/internal/check_number.js.map +1 -1
- package/lib/programmers/json/JsonValidateParseProgrammer.js +2 -3
- package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +2 -3
- package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +357 -6
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +15 -60
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +1 -1
- package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -1
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +3 -4
- package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
- package/lib/protobuf.d.ts +8 -9
- package/lib/protobuf.js +7 -0
- package/lib/protobuf.js.map +1 -1
- package/package.json +1 -1
- package/src/factories/MetadataFactory.ts +12 -0
- package/src/factories/MetadataTagFactory.ts +1 -1
- package/src/factories/ProtobufFactory.ts +15 -0
- package/src/functional/$ProtobufReader.ts +21 -8
- package/src/functional/$ProtobufSizer.ts +4 -1
- package/src/functional/$ProtobufWriter.ts +1 -1
- package/src/programmers/RandomProgrammer.ts +14 -20
- package/src/programmers/helpers/ProtobufUtil.ts +6 -1
- package/src/programmers/helpers/RandomRanger.ts +2 -10
- package/src/programmers/internal/application_number.ts +5 -1
- package/src/programmers/internal/check_bigint.ts +30 -12
- package/src/programmers/internal/check_number.ts +30 -2
- package/src/programmers/json/JsonValidateParseProgrammer.ts +6 -13
- package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +10 -13
- package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +625 -10
- package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +39 -147
- package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +9 -9
- package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +1 -1
- package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +12 -20
- package/src/protobuf.ts +25 -15
|
@@ -335,13 +335,18 @@ export namespace RandomProgrammer {
|
|
|
335
335
|
(t) =>
|
|
336
336
|
t.kind === "type" &&
|
|
337
337
|
(t.value === "int" ||
|
|
338
|
-
t.value === "uint" ||
|
|
339
338
|
t.value === "int32" ||
|
|
340
|
-
t.value === "
|
|
341
|
-
t.value === "int64" ||
|
|
342
|
-
t.value === "uint64"),
|
|
339
|
+
t.value === "int64"),
|
|
343
340
|
)
|
|
344
341
|
? "int"
|
|
342
|
+
: tags.find(
|
|
343
|
+
(t) =>
|
|
344
|
+
t.kind === "type" &&
|
|
345
|
+
(t.value === "uint" ||
|
|
346
|
+
t.value === "uint32" ||
|
|
347
|
+
t.value === "uint64"),
|
|
348
|
+
)
|
|
349
|
+
? "uint"
|
|
345
350
|
: "double";
|
|
346
351
|
return random_custom(COALESCE(importer))("number")(comments)(
|
|
347
352
|
RandomRanger.number({
|
|
@@ -378,30 +383,19 @@ export namespace RandomProgrammer {
|
|
|
378
383
|
random_custom(COALESCE(importer))("bigint")(comments)(
|
|
379
384
|
RandomRanger.number({
|
|
380
385
|
type: tags.find(
|
|
381
|
-
(t) =>
|
|
386
|
+
(t) =>
|
|
387
|
+
t.kind === "type" &&
|
|
388
|
+
(t.value === "uint" || t.value === "uint64"),
|
|
382
389
|
)
|
|
383
390
|
? "uint"
|
|
384
391
|
: "int",
|
|
385
|
-
transform: (value) =>
|
|
386
|
-
ts.factory.createCallExpression(
|
|
387
|
-
ts.factory.createIdentifier("BigInt"),
|
|
388
|
-
undefined,
|
|
389
|
-
[ts.factory.createStringLiteral(value.toString())],
|
|
390
|
-
),
|
|
392
|
+
transform: (value) => ExpressionFactory.bigint(value),
|
|
391
393
|
setter: (args) =>
|
|
392
394
|
ts.factory.createCallExpression(
|
|
393
395
|
COALESCE(importer)("bigint"),
|
|
394
396
|
undefined,
|
|
395
397
|
args.map((value) =>
|
|
396
|
-
|
|
397
|
-
ts.factory.createIdentifier("BigInt"),
|
|
398
|
-
undefined,
|
|
399
|
-
[
|
|
400
|
-
ts.factory.createStringLiteral(
|
|
401
|
-
value.toString(),
|
|
402
|
-
),
|
|
403
|
-
],
|
|
404
|
-
),
|
|
398
|
+
ExpressionFactory.bigint(value),
|
|
405
399
|
),
|
|
406
400
|
),
|
|
407
401
|
})({
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Metadata } from "../../schemas/metadata/Metadata";
|
|
2
|
+
import { MetadataObject } from "../../schemas/metadata/MetadataObject";
|
|
2
3
|
|
|
3
4
|
import { Atomic } from "../../typings/Atomic";
|
|
4
5
|
|
|
5
6
|
export namespace ProtobufUtil {
|
|
6
|
-
export const
|
|
7
|
+
export const getAtomics = (meta: Metadata) => {
|
|
7
8
|
const set: Set<Atomic.Literal> = new Set();
|
|
8
9
|
|
|
9
10
|
for (const atomic of meta.atomics) set.add(atomic);
|
|
@@ -14,6 +15,10 @@ export namespace ProtobufUtil {
|
|
|
14
15
|
(x, y) => ATOMIC_ORDER.get(x)! - ATOMIC_ORDER.get(y)!,
|
|
15
16
|
);
|
|
16
17
|
};
|
|
18
|
+
|
|
19
|
+
export const isStaticObject = (obj: MetadataObject): boolean =>
|
|
20
|
+
obj.properties.length >= 1 &&
|
|
21
|
+
obj.properties.every((p) => p.key.isSoleLiteral());
|
|
17
22
|
}
|
|
18
23
|
|
|
19
24
|
const ATOMIC_ORDER = new Map<Atomic.Literal, number>([
|
|
@@ -101,11 +101,7 @@ export namespace RandomRanger {
|
|
|
101
101
|
//----
|
|
102
102
|
// INT
|
|
103
103
|
const integer = (value: number) => value === Math.floor(value);
|
|
104
|
-
if (
|
|
105
|
-
tags.find(
|
|
106
|
-
(t) => t.kind === "type" && t.value.indexOf("int") !== -1,
|
|
107
|
-
) !== undefined
|
|
108
|
-
) {
|
|
104
|
+
if (config.type === "int") {
|
|
109
105
|
if (range.minimum.value !== undefined) {
|
|
110
106
|
if (range.minimum.exclusive) {
|
|
111
107
|
range.minimum.exclusive = false;
|
|
@@ -125,11 +121,7 @@ export namespace RandomRanger {
|
|
|
125
121
|
}
|
|
126
122
|
|
|
127
123
|
// UNSIGNED INT
|
|
128
|
-
if (
|
|
129
|
-
tags.find(
|
|
130
|
-
(t) => t.kind === "type" && t.value.indexOf("uint") === 0,
|
|
131
|
-
) !== undefined
|
|
132
|
-
) {
|
|
124
|
+
if (config.type === "uint") {
|
|
133
125
|
if (range.minimum.value === undefined) range.minimum.value = 0;
|
|
134
126
|
else if (range.minimum.value <= 0) {
|
|
135
127
|
range.minimum.value = 0;
|
|
@@ -42,7 +42,11 @@ export const application_number = (
|
|
|
42
42
|
if (
|
|
43
43
|
output.type === "integer" &&
|
|
44
44
|
(attribute["x-typia-metaTags"] ?? []).find(
|
|
45
|
-
(tag) =>
|
|
45
|
+
(tag) =>
|
|
46
|
+
tag.kind === "type" &&
|
|
47
|
+
(tag.value === "uint" ||
|
|
48
|
+
tag.value === "uint32" ||
|
|
49
|
+
tag.value === "uint64"),
|
|
46
50
|
)
|
|
47
51
|
)
|
|
48
52
|
if (
|
|
@@ -31,12 +31,18 @@ export const check_bigint =
|
|
|
31
31
|
entries.push([
|
|
32
32
|
tag,
|
|
33
33
|
ts.factory.createStrictEquality(
|
|
34
|
-
|
|
35
|
-
ts.factory.createModulo(
|
|
34
|
+
ExpressionFactory.bigint(0),
|
|
35
|
+
ts.factory.createModulo(
|
|
36
|
+
input,
|
|
37
|
+
ExpressionFactory.bigint(tag.value),
|
|
38
|
+
),
|
|
36
39
|
),
|
|
37
40
|
]);
|
|
38
41
|
else if (tag.kind === "step") {
|
|
39
|
-
const modulo = ts.factory.createModulo(
|
|
42
|
+
const modulo = ts.factory.createModulo(
|
|
43
|
+
input,
|
|
44
|
+
ExpressionFactory.bigint(tag.value),
|
|
45
|
+
);
|
|
40
46
|
const minimum =
|
|
41
47
|
(metaTags.find(
|
|
42
48
|
(tag) =>
|
|
@@ -46,31 +52,46 @@ export const check_bigint =
|
|
|
46
52
|
entries.push([
|
|
47
53
|
tag,
|
|
48
54
|
ts.factory.createStrictEquality(
|
|
49
|
-
|
|
55
|
+
ExpressionFactory.bigint(0),
|
|
50
56
|
minimum !== undefined
|
|
51
|
-
? ts.factory.createSubtract(
|
|
57
|
+
? ts.factory.createSubtract(
|
|
58
|
+
modulo,
|
|
59
|
+
ExpressionFactory.bigint(minimum),
|
|
60
|
+
)
|
|
52
61
|
: modulo,
|
|
53
62
|
),
|
|
54
63
|
]);
|
|
55
64
|
} else if (tag.kind === "minimum")
|
|
56
65
|
entries.push([
|
|
57
66
|
tag,
|
|
58
|
-
ts.factory.createLessThanEquals(
|
|
67
|
+
ts.factory.createLessThanEquals(
|
|
68
|
+
ExpressionFactory.bigint(tag.value),
|
|
69
|
+
input,
|
|
70
|
+
),
|
|
59
71
|
]);
|
|
60
72
|
else if (tag.kind === "maximum")
|
|
61
73
|
entries.push([
|
|
62
74
|
tag,
|
|
63
|
-
ts.factory.createGreaterThanEquals(
|
|
75
|
+
ts.factory.createGreaterThanEquals(
|
|
76
|
+
ExpressionFactory.bigint(tag.value),
|
|
77
|
+
input,
|
|
78
|
+
),
|
|
64
79
|
]);
|
|
65
80
|
else if (tag.kind === "exclusiveMinimum")
|
|
66
81
|
entries.push([
|
|
67
82
|
tag,
|
|
68
|
-
ts.factory.createLessThan(
|
|
83
|
+
ts.factory.createLessThan(
|
|
84
|
+
ExpressionFactory.bigint(tag.value),
|
|
85
|
+
input,
|
|
86
|
+
),
|
|
69
87
|
]);
|
|
70
88
|
else if (tag.kind === "exclusiveMaximum")
|
|
71
89
|
entries.push([
|
|
72
90
|
tag,
|
|
73
|
-
ts.factory.createGreaterThan(
|
|
91
|
+
ts.factory.createGreaterThan(
|
|
92
|
+
ExpressionFactory.bigint(tag.value),
|
|
93
|
+
input,
|
|
94
|
+
),
|
|
74
95
|
]);
|
|
75
96
|
}
|
|
76
97
|
return {
|
|
@@ -87,6 +108,3 @@ export const check_bigint =
|
|
|
87
108
|
],
|
|
88
109
|
};
|
|
89
110
|
};
|
|
90
|
-
|
|
91
|
-
const cast = (value: number) =>
|
|
92
|
-
ts.factory.createIdentifier(`${Math.floor(value)}n`);
|
|
@@ -56,7 +56,7 @@ export const check_number =
|
|
|
56
56
|
),
|
|
57
57
|
]);
|
|
58
58
|
// RANGE LIMIT
|
|
59
|
-
if (tag.value === "uint32")
|
|
59
|
+
if (tag.value === "uint" || tag.value === "uint32")
|
|
60
60
|
entries.push([
|
|
61
61
|
tag,
|
|
62
62
|
ts.factory.createLessThanEquals(
|
|
@@ -64,7 +64,35 @@ export const check_number =
|
|
|
64
64
|
ts.factory.createNumericLiteral(4294967295),
|
|
65
65
|
),
|
|
66
66
|
]);
|
|
67
|
-
else if (tag.value === "
|
|
67
|
+
else if (tag.value === "uint64")
|
|
68
|
+
entries.push([
|
|
69
|
+
tag,
|
|
70
|
+
ts.factory.createLessThanEquals(
|
|
71
|
+
input,
|
|
72
|
+
ts.factory.createNumericLiteral(
|
|
73
|
+
18446744073709551615,
|
|
74
|
+
),
|
|
75
|
+
),
|
|
76
|
+
]);
|
|
77
|
+
else if (tag.value === "int64")
|
|
78
|
+
entries.push([
|
|
79
|
+
tag,
|
|
80
|
+
ts.factory.createLogicalAnd(
|
|
81
|
+
ts.factory.createLessThanEquals(
|
|
82
|
+
ts.factory.createNumericLiteral(
|
|
83
|
+
-9223372036854775808,
|
|
84
|
+
),
|
|
85
|
+
input,
|
|
86
|
+
),
|
|
87
|
+
ts.factory.createLessThanEquals(
|
|
88
|
+
input,
|
|
89
|
+
ts.factory.createNumericLiteral(
|
|
90
|
+
9223372036854775807,
|
|
91
|
+
),
|
|
92
|
+
),
|
|
93
|
+
),
|
|
94
|
+
]);
|
|
95
|
+
else if (tag.value === "int" || tag.value === "int32")
|
|
68
96
|
entries.push([
|
|
69
97
|
tag,
|
|
70
98
|
ts.factory.createLogicalAnd(
|
|
@@ -40,28 +40,21 @@ export namespace JsonValidateParseProgrammer {
|
|
|
40
40
|
},
|
|
41
41
|
})(modulo)(false)(type, name),
|
|
42
42
|
),
|
|
43
|
-
ts.factory.createExpressionStatement(
|
|
44
|
-
ts.factory.createBinaryExpression(
|
|
45
|
-
ts.factory.createIdentifier("input"),
|
|
46
|
-
ts.SyntaxKind.EqualsToken,
|
|
47
|
-
ts.factory.createCallExpression(
|
|
48
|
-
ts.factory.createIdentifier("JSON.parse"),
|
|
49
|
-
undefined,
|
|
50
|
-
[ts.factory.createIdentifier("input")],
|
|
51
|
-
),
|
|
52
|
-
),
|
|
53
|
-
),
|
|
54
43
|
StatementFactory.constant(
|
|
55
44
|
"output",
|
|
56
45
|
ts.factory.createCallExpression(
|
|
57
|
-
ts.factory.createIdentifier("
|
|
46
|
+
ts.factory.createIdentifier("JSON.parse"),
|
|
58
47
|
undefined,
|
|
59
48
|
[ts.factory.createIdentifier("input")],
|
|
60
49
|
),
|
|
61
50
|
),
|
|
62
51
|
ts.factory.createReturnStatement(
|
|
63
52
|
ts.factory.createAsExpression(
|
|
64
|
-
ts.factory.
|
|
53
|
+
ts.factory.createCallExpression(
|
|
54
|
+
ts.factory.createIdentifier("validate"),
|
|
55
|
+
undefined,
|
|
56
|
+
[ts.factory.createIdentifier("output")],
|
|
57
|
+
),
|
|
65
58
|
ts.factory.createTypeReferenceNode("any"),
|
|
66
59
|
),
|
|
67
60
|
),
|
|
@@ -28,13 +28,6 @@ export namespace ProtobufAssertDecodeProgrammer {
|
|
|
28
28
|
),
|
|
29
29
|
undefined,
|
|
30
30
|
ts.factory.createBlock([
|
|
31
|
-
StatementFactory.constant(
|
|
32
|
-
"assert",
|
|
33
|
-
AssertProgrammer.write(project)(modulo)(false)(
|
|
34
|
-
type,
|
|
35
|
-
name,
|
|
36
|
-
),
|
|
37
|
-
),
|
|
38
31
|
StatementFactory.constant(
|
|
39
32
|
"decode",
|
|
40
33
|
ProtobufDecodeProgrammer.write({
|
|
@@ -46,11 +39,11 @@ export namespace ProtobufAssertDecodeProgrammer {
|
|
|
46
39
|
},
|
|
47
40
|
})(modulo)(type, name),
|
|
48
41
|
),
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
42
|
+
StatementFactory.constant(
|
|
43
|
+
"assert",
|
|
44
|
+
AssertProgrammer.write(project)(modulo)(false)(
|
|
45
|
+
type,
|
|
46
|
+
name,
|
|
54
47
|
),
|
|
55
48
|
),
|
|
56
49
|
StatementFactory.constant(
|
|
@@ -62,7 +55,11 @@ export namespace ProtobufAssertDecodeProgrammer {
|
|
|
62
55
|
),
|
|
63
56
|
),
|
|
64
57
|
ts.factory.createReturnStatement(
|
|
65
|
-
ts.factory.
|
|
58
|
+
ts.factory.createCallExpression(
|
|
59
|
+
ts.factory.createIdentifier("assert"),
|
|
60
|
+
undefined,
|
|
61
|
+
[ts.factory.createIdentifier("output")],
|
|
62
|
+
),
|
|
66
63
|
),
|
|
67
64
|
]),
|
|
68
65
|
);
|