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.
Files changed (64) hide show
  1. package/README.md +1 -1
  2. package/lib/factories/MetadataFactory.js +9 -0
  3. package/lib/factories/MetadataFactory.js.map +1 -1
  4. package/lib/factories/MetadataTagFactory.js.map +1 -1
  5. package/lib/factories/ProtobufFactory.js +8 -0
  6. package/lib/factories/ProtobufFactory.js.map +1 -1
  7. package/lib/functional/$ProtobufReader.d.ts +2 -0
  8. package/lib/functional/$ProtobufReader.js +14 -3
  9. package/lib/functional/$ProtobufReader.js.map +1 -1
  10. package/lib/functional/$ProtobufSizer.js +1 -1
  11. package/lib/functional/$ProtobufSizer.js.map +1 -1
  12. package/lib/functional/$ProtobufWriter.js +0 -1
  13. package/lib/functional/$ProtobufWriter.js.map +1 -1
  14. package/lib/programmers/RandomProgrammer.js +15 -12
  15. package/lib/programmers/RandomProgrammer.js.map +1 -1
  16. package/lib/programmers/helpers/ProtobufUtil.d.ts +3 -1
  17. package/lib/programmers/helpers/ProtobufUtil.js +5 -1
  18. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  19. package/lib/programmers/helpers/RandomRanger.js +2 -2
  20. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  21. package/lib/programmers/internal/application_number.js +6 -1
  22. package/lib/programmers/internal/application_number.js.map +1 -1
  23. package/lib/programmers/internal/check_bigint.js +8 -11
  24. package/lib/programmers/internal/check_bigint.js.map +1 -1
  25. package/lib/programmers/internal/check_number.js +12 -2
  26. package/lib/programmers/internal/check_number.js.map +1 -1
  27. package/lib/programmers/json/JsonValidateParseProgrammer.js +2 -3
  28. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  29. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +2 -3
  30. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  31. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +357 -6
  32. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  33. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +15 -60
  34. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  35. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +1 -1
  36. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  37. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -1
  38. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  39. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +3 -4
  40. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  41. package/lib/protobuf.d.ts +8 -9
  42. package/lib/protobuf.js +7 -0
  43. package/lib/protobuf.js.map +1 -1
  44. package/package.json +1 -1
  45. package/src/factories/MetadataFactory.ts +12 -0
  46. package/src/factories/MetadataTagFactory.ts +1 -1
  47. package/src/factories/ProtobufFactory.ts +15 -0
  48. package/src/functional/$ProtobufReader.ts +21 -8
  49. package/src/functional/$ProtobufSizer.ts +4 -1
  50. package/src/functional/$ProtobufWriter.ts +1 -1
  51. package/src/programmers/RandomProgrammer.ts +14 -20
  52. package/src/programmers/helpers/ProtobufUtil.ts +6 -1
  53. package/src/programmers/helpers/RandomRanger.ts +2 -10
  54. package/src/programmers/internal/application_number.ts +5 -1
  55. package/src/programmers/internal/check_bigint.ts +30 -12
  56. package/src/programmers/internal/check_number.ts +30 -2
  57. package/src/programmers/json/JsonValidateParseProgrammer.ts +6 -13
  58. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +10 -13
  59. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +625 -10
  60. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +39 -147
  61. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +9 -9
  62. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +1 -1
  63. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +12 -20
  64. 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 === "uint32" ||
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) => t.kind === "type" && t.value === "uint",
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
- ts.factory.createCallExpression(
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 atomics = (meta: Metadata) => {
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) => tag.kind === "type" && tag.value === "uint",
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
- cast(0),
35
- ts.factory.createModulo(input, cast(tag.value)),
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(input, cast(tag.value));
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
- cast(0),
55
+ ExpressionFactory.bigint(0),
50
56
  minimum !== undefined
51
- ? ts.factory.createSubtract(modulo, cast(minimum))
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(cast(tag.value), input),
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(cast(tag.value), input),
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(cast(tag.value), input),
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(cast(tag.value), input),
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 === "int32")
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("validate"),
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.createIdentifier("output"),
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
- ts.factory.createExpressionStatement(
50
- ts.factory.createCallExpression(
51
- ts.factory.createIdentifier("assert"),
52
- undefined,
53
- [ts.factory.createIdentifier("input")],
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.createIdentifier("output"),
58
+ ts.factory.createCallExpression(
59
+ ts.factory.createIdentifier("assert"),
60
+ undefined,
61
+ [ts.factory.createIdentifier("output")],
62
+ ),
66
63
  ),
67
64
  ]),
68
65
  );