typia 3.5.0-dev.20230125 → 3.5.0-dev.20230211

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 (227) hide show
  1. package/README.md +64 -71
  2. package/lib/factories/MetadataCollection.d.ts +9 -1
  3. package/lib/factories/MetadataCollection.js +75 -2
  4. package/lib/factories/MetadataCollection.js.map +1 -1
  5. package/lib/factories/internal/metadata/iterate_metadata_native.js +0 -3
  6. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  7. package/lib/functional/$is_between.d.ts +1 -0
  8. package/lib/functional/$is_between.js +8 -0
  9. package/lib/functional/$is_between.js.map +1 -0
  10. package/lib/metadata/IMetadataTag.d.ts +3 -7
  11. package/lib/metadata/Metadata.js +2 -2
  12. package/lib/metadata/Metadata.js.map +1 -1
  13. package/lib/module.d.ts +33 -3
  14. package/lib/module.js +36 -8
  15. package/lib/module.js.map +1 -1
  16. package/lib/programmers/AssertProgrammer.js +3 -2
  17. package/lib/programmers/AssertProgrammer.js.map +1 -1
  18. package/lib/programmers/CheckerProgrammer.d.ts +2 -2
  19. package/lib/programmers/CheckerProgrammer.js +21 -16
  20. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  21. package/lib/programmers/FeatureProgrammer.d.ts +114 -18
  22. package/lib/programmers/FeatureProgrammer.js +4 -4
  23. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  24. package/lib/programmers/IsProgrammer.d.ts +4 -3
  25. package/lib/programmers/IsProgrammer.js +72 -61
  26. package/lib/programmers/IsProgrammer.js.map +1 -1
  27. package/lib/programmers/PruneProgrammer.d.ts +5 -0
  28. package/lib/programmers/PruneProgrammer.js +279 -0
  29. package/lib/programmers/PruneProgrammer.js.map +1 -0
  30. package/lib/programmers/StringifyProgrammer.js +26 -21
  31. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  32. package/lib/programmers/ValidateProgrammer.js +3 -2
  33. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  34. package/lib/programmers/helpers/AtomicPredicator.d.ts +2 -0
  35. package/lib/programmers/helpers/AtomicPredicator.js +9 -1
  36. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  37. package/lib/programmers/helpers/IExpressionEntry.d.ts +2 -2
  38. package/lib/programmers/helpers/OptionPredicator.d.ts +1 -0
  39. package/lib/programmers/helpers/OptionPredicator.js +4 -0
  40. package/lib/programmers/helpers/OptionPredicator.js.map +1 -1
  41. package/lib/programmers/helpers/PruneJoiner.d.ts +8 -0
  42. package/lib/programmers/helpers/PruneJoiner.js +60 -0
  43. package/lib/programmers/helpers/PruneJoiner.js.map +1 -0
  44. package/lib/programmers/helpers/StringifyJoinder.d.ts +1 -1
  45. package/lib/programmers/helpers/StringifyJoinder.js +2 -4
  46. package/lib/programmers/helpers/StringifyJoinder.js.map +1 -1
  47. package/lib/programmers/internal/application_object.js +11 -11
  48. package/lib/programmers/internal/application_object.js.map +1 -1
  49. package/lib/programmers/internal/application_schema.js +21 -12
  50. package/lib/programmers/internal/application_schema.js.map +1 -1
  51. package/lib/programmers/internal/check_dynamic_properties.js +34 -11
  52. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  53. package/lib/programmers/internal/check_native.js +9 -1
  54. package/lib/programmers/internal/check_native.js.map +1 -1
  55. package/lib/programmers/internal/check_object.d.ts +1 -0
  56. package/lib/programmers/internal/check_object.js +13 -9
  57. package/lib/programmers/internal/check_object.js.map +1 -1
  58. package/lib/programmers/internal/check_union_array_like.d.ts +1 -1
  59. package/lib/programmers/internal/check_union_array_like.js +3 -1
  60. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  61. package/lib/programmers/internal/feature_object_entries.d.ts +2 -2
  62. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  63. package/lib/programmers/internal/prune_object_properties.d.ts +1 -0
  64. package/lib/programmers/internal/prune_object_properties.js +28 -0
  65. package/lib/programmers/internal/prune_object_properties.js.map +1 -0
  66. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  67. package/lib/programmers/internal/stringify_regular_properties.js.map +1 -1
  68. package/lib/transformers/CallExpressionTransformer.js +5 -3
  69. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  70. package/lib/transformers/ITransformOptions.d.ts +14 -0
  71. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +3 -1
  72. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
  73. package/lib/transformers/features/miscellaneous/CreatePruneTransformer.d.ts +5 -0
  74. package/lib/transformers/features/miscellaneous/CreatePruneTransformer.js +17 -0
  75. package/lib/transformers/features/miscellaneous/CreatePruneTransformer.js.map +1 -0
  76. package/lib/transformers/features/miscellaneous/PruneTransformer.d.ts +5 -0
  77. package/lib/transformers/features/miscellaneous/PruneTransformer.js +34 -0
  78. package/lib/transformers/features/miscellaneous/PruneTransformer.js.map +1 -0
  79. package/package.json +5 -4
  80. package/src/factories/MetadataCollection.ts +41 -2
  81. package/src/factories/internal/metadata/iterate_metadata_native.ts +0 -5
  82. package/src/functional/$is_between.ts +7 -0
  83. package/src/metadata/IMetadataTag.ts +4 -19
  84. package/src/metadata/Metadata.ts +3 -6
  85. package/src/module.ts +91 -17
  86. package/src/programmers/AssertProgrammer.ts +3 -2
  87. package/src/programmers/CheckerProgrammer.ts +21 -13
  88. package/src/programmers/FeatureProgrammer.ts +146 -21
  89. package/src/programmers/IsProgrammer.ts +107 -87
  90. package/src/programmers/PruneProgrammer.ts +320 -0
  91. package/src/programmers/StringifyProgrammer.ts +51 -34
  92. package/src/programmers/ValidateProgrammer.ts +3 -2
  93. package/src/programmers/helpers/AtomicPredicator.ts +17 -1
  94. package/src/programmers/helpers/IExpressionEntry.ts +4 -2
  95. package/src/programmers/helpers/OptionPredicator.ts +4 -0
  96. package/src/programmers/helpers/PruneJoiner.ts +52 -0
  97. package/src/programmers/helpers/StringifyJoinder.ts +7 -4
  98. package/src/programmers/internal/application_object.ts +5 -5
  99. package/src/programmers/internal/application_schema.ts +33 -27
  100. package/src/programmers/internal/check_dynamic_properties.ts +67 -16
  101. package/src/programmers/internal/check_native.ts +14 -2
  102. package/src/programmers/internal/check_object.ts +8 -2
  103. package/src/programmers/internal/check_union_array_like.ts +4 -2
  104. package/src/programmers/internal/feature_object_entries.ts +6 -1
  105. package/src/programmers/internal/prune_object_properties.ts +60 -0
  106. package/src/programmers/internal/stringify_dynamic_properties.ts +2 -2
  107. package/src/programmers/internal/stringify_regular_properties.ts +2 -2
  108. package/src/transformers/CallExpressionTransformer.ts +15 -16
  109. package/src/transformers/ITransformOptions.ts +15 -0
  110. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +3 -1
  111. package/src/transformers/features/{protocols/MessageTransformer.ts → miscellaneous/CreatePruneTransformer.ts} +6 -7
  112. package/src/transformers/features/miscellaneous/PruneTransformer.ts +46 -0
  113. package/lib/factories/ProtocolFactory.d.ts +0 -8
  114. package/lib/factories/ProtocolFactory.js +0 -119
  115. package/lib/factories/ProtocolFactory.js.map +0 -1
  116. package/lib/factories/internal/protocols/ProtocolMetadataUtil.d.ts +0 -16
  117. package/lib/factories/internal/protocols/ProtocolMetadataUtil.js +0 -156
  118. package/lib/factories/internal/protocols/ProtocolMetadataUtil.js.map +0 -1
  119. package/lib/factories/internal/protocols/emplace_protocol_object.d.ts +0 -3
  120. package/lib/factories/internal/protocols/emplace_protocol_object.js +0 -44
  121. package/lib/factories/internal/protocols/emplace_protocol_object.js.map +0 -1
  122. package/lib/factories/internal/protocols/emplace_protocol_property.d.ts +0 -4
  123. package/lib/factories/internal/protocols/emplace_protocol_property.js +0 -20
  124. package/lib/factories/internal/protocols/emplace_protocol_property.js.map +0 -1
  125. package/lib/factories/internal/protocols/iterate_protocol_atomic.d.ts +0 -3
  126. package/lib/factories/internal/protocols/iterate_protocol_atomic.js +0 -69
  127. package/lib/factories/internal/protocols/iterate_protocol_atomic.js.map +0 -1
  128. package/lib/factories/internal/protocols/iterate_protocol_constant.d.ts +0 -2
  129. package/lib/factories/internal/protocols/iterate_protocol_constant.js +0 -30
  130. package/lib/factories/internal/protocols/iterate_protocol_constant.js.map +0 -1
  131. package/lib/factories/internal/protocols/iterate_protocol_main.d.ts +0 -3
  132. package/lib/factories/internal/protocols/iterate_protocol_main.js +0 -17
  133. package/lib/factories/internal/protocols/iterate_protocol_main.js.map +0 -1
  134. package/lib/factories/internal/protocols/iterate_protocol_map.d.ts +0 -4
  135. package/lib/factories/internal/protocols/iterate_protocol_map.js +0 -75
  136. package/lib/factories/internal/protocols/iterate_protocol_map.js.map +0 -1
  137. package/lib/factories/internal/protocols/iterate_protocol_metadata.d.ts +0 -5
  138. package/lib/factories/internal/protocols/iterate_protocol_metadata.js +0 -190
  139. package/lib/factories/internal/protocols/iterate_protocol_metadata.js.map +0 -1
  140. package/lib/factories/internal/protocols/iterate_protocol_native.d.ts +0 -2
  141. package/lib/factories/internal/protocols/iterate_protocol_native.js +0 -33
  142. package/lib/factories/internal/protocols/iterate_protocol_native.js.map +0 -1
  143. package/lib/factories/internal/protocols/iterate_protocol_never.d.ts +0 -1
  144. package/lib/factories/internal/protocols/iterate_protocol_never.js +0 -6
  145. package/lib/factories/internal/protocols/iterate_protocol_never.js.map +0 -1
  146. package/lib/factories/internal/protocols/iterate_protocol_object.d.ts +0 -4
  147. package/lib/factories/internal/protocols/iterate_protocol_object.js +0 -157
  148. package/lib/factories/internal/protocols/iterate_protocol_object.js.map +0 -1
  149. package/lib/factories/internal/protocols/iterate_protocol_repeated.d.ts +0 -5
  150. package/lib/factories/internal/protocols/iterate_protocol_repeated.js +0 -25
  151. package/lib/factories/internal/protocols/iterate_protocol_repeated.js.map +0 -1
  152. package/lib/factories/internal/protocols/iterate_protocol_tuple.d.ts +0 -3
  153. package/lib/factories/internal/protocols/iterate_protocol_tuple.js +0 -46
  154. package/lib/factories/internal/protocols/iterate_protocol_tuple.js.map +0 -1
  155. package/lib/functional/$proto_bytes.d.ts +0 -2
  156. package/lib/functional/$proto_bytes.js +0 -37
  157. package/lib/functional/$proto_bytes.js.map +0 -1
  158. package/lib/functional/$proto_field.d.ts +0 -10
  159. package/lib/functional/$proto_field.js +0 -42
  160. package/lib/functional/$proto_field.js.map +0 -1
  161. package/lib/functional/$proto_float.d.ts +0 -4
  162. package/lib/functional/$proto_float.js +0 -28
  163. package/lib/functional/$proto_float.js.map +0 -1
  164. package/lib/functional/$proto_i32.d.ts +0 -2
  165. package/lib/functional/$proto_i32.js +0 -23
  166. package/lib/functional/$proto_i32.js.map +0 -1
  167. package/lib/functional/$proto_i64.d.ts +0 -2
  168. package/lib/functional/$proto_i64.js +0 -31
  169. package/lib/functional/$proto_i64.js.map +0 -1
  170. package/lib/functional/$proto_size.d.ts +0 -6
  171. package/lib/functional/$proto_size.js +0 -76
  172. package/lib/functional/$proto_size.js.map +0 -1
  173. package/lib/functional/$proto_string.d.ts +0 -2
  174. package/lib/functional/$proto_string.js +0 -34
  175. package/lib/functional/$proto_string.js.map +0 -1
  176. package/lib/functional/$varint.d.ts +0 -6
  177. package/lib/functional/$varint.js +0 -99
  178. package/lib/functional/$varint.js.map +0 -1
  179. package/lib/functional/$zigzag.d.ts +0 -4
  180. package/lib/functional/$zigzag.js +0 -34
  181. package/lib/functional/$zigzag.js.map +0 -1
  182. package/lib/messages/IProtocolMap.d.ts +0 -5
  183. package/lib/messages/IProtocolMap.js +0 -3
  184. package/lib/messages/IProtocolMap.js.map +0 -1
  185. package/lib/messages/IProtocolMessage.d.ts +0 -5
  186. package/lib/messages/IProtocolMessage.js +0 -3
  187. package/lib/messages/IProtocolMessage.js.map +0 -1
  188. package/lib/messages/IProtocolProperty.d.ts +0 -12
  189. package/lib/messages/IProtocolProperty.js +0 -3
  190. package/lib/messages/IProtocolProperty.js.map +0 -1
  191. package/lib/programmers/MessageProgrammer.d.ts +0 -5
  192. package/lib/programmers/MessageProgrammer.js +0 -141
  193. package/lib/programmers/MessageProgrammer.js.map +0 -1
  194. package/lib/transformers/features/protocols/MessageTransformer.d.ts +0 -5
  195. package/lib/transformers/features/protocols/MessageTransformer.js +0 -17
  196. package/lib/transformers/features/protocols/MessageTransformer.js.map +0 -1
  197. package/lib/utils/NameEncoder.d.ts +0 -4
  198. package/lib/utils/NameEncoder.js +0 -89
  199. package/lib/utils/NameEncoder.js.map +0 -1
  200. package/src/factories/ProtocolFactory.ts +0 -92
  201. package/src/factories/internal/protocols/ProtocolMetadataUtil.ts +0 -163
  202. package/src/factories/internal/protocols/emplace_protocol_object.ts +0 -23
  203. package/src/factories/internal/protocols/emplace_protocol_property.ts +0 -12
  204. package/src/factories/internal/protocols/iterate_protocol_atomic.ts +0 -34
  205. package/src/factories/internal/protocols/iterate_protocol_constant.ts +0 -27
  206. package/src/factories/internal/protocols/iterate_protocol_main.ts +0 -19
  207. package/src/factories/internal/protocols/iterate_protocol_map.ts +0 -58
  208. package/src/factories/internal/protocols/iterate_protocol_metadata.ts +0 -96
  209. package/src/factories/internal/protocols/iterate_protocol_native.ts +0 -34
  210. package/src/factories/internal/protocols/iterate_protocol_never.ts +0 -1
  211. package/src/factories/internal/protocols/iterate_protocol_object.ts +0 -110
  212. package/src/factories/internal/protocols/iterate_protocol_repeated.ts +0 -34
  213. package/src/factories/internal/protocols/iterate_protocol_tuple.ts +0 -29
  214. package/src/functional/$proto_bytes.ts +0 -25
  215. package/src/functional/$proto_field.ts +0 -30
  216. package/src/functional/$proto_float.ts +0 -37
  217. package/src/functional/$proto_i32.ts +0 -29
  218. package/src/functional/$proto_i64.ts +0 -37
  219. package/src/functional/$proto_size.ts +0 -82
  220. package/src/functional/$proto_string.ts +0 -24
  221. package/src/functional/$varint.ts +0 -130
  222. package/src/functional/$zigzag.ts +0 -39
  223. package/src/messages/IProtocolMap.ts +0 -5
  224. package/src/messages/IProtocolMessage.ts +0 -6
  225. package/src/messages/IProtocolProperty.ts +0 -13
  226. package/src/programmers/MessageProgrammer.ts +0 -126
  227. package/src/utils/NameEncoder.ts +0 -32
@@ -1,30 +0,0 @@
1
- import { $varint_decode_i32, $varint_encode } from "./$varint";
2
-
3
- export enum $proto_field_wiretype {
4
- VARINT = 0,
5
- I64 = 1,
6
- LEN = 2,
7
- SGROUP = 3, // deprecated
8
- EGROUP = 4, // deprecated
9
- I32 = 5,
10
- }
11
-
12
- export function $proto_field_encode(
13
- dst: Uint8Array,
14
- offset: number,
15
- fieldNumber: number,
16
- wireType: $proto_field_wiretype,
17
- ): number {
18
- const tag = (fieldNumber << 3) | Number(wireType);
19
- return $varint_encode(dst, offset, tag);
20
- }
21
-
22
- export function $proto_field_decode(
23
- buf: Uint8Array,
24
- offset: number,
25
- ): [fieldNumber: number, wireType: $proto_field_wiretype, offset: number] {
26
- const [tag, o] = $varint_decode_i32(buf, offset);
27
- const fieldNumber = tag >>> 3;
28
- const wireType = tag & 0b111;
29
- return [fieldNumber, wireType, o];
30
- }
@@ -1,37 +0,0 @@
1
- export function $proto_float32_encode(
2
- dst: Uint8Array,
3
- offset: number,
4
- value: number,
5
- ): number {
6
- new DataView(dst).setFloat32(offset, value, true);
7
- offset += 4;
8
- return offset;
9
- }
10
-
11
- export function $proto_float32_decode(
12
- src: Uint8Array,
13
- offset: number,
14
- ): [value: number, offset: number] {
15
- const value = new DataView(src).getFloat32(offset, true);
16
- offset += 4;
17
- return [value, offset];
18
- }
19
-
20
- export function $proto_float64_encode(
21
- dst: Uint8Array,
22
- offset: number,
23
- value: number,
24
- ): number {
25
- new DataView(dst).setFloat64(offset, value, true);
26
- offset += 8;
27
- return offset;
28
- }
29
-
30
- export function $proto_float64_decode(
31
- src: Uint8Array,
32
- offset: number,
33
- ): [value: number, offset: number] {
34
- const value = new DataView(src).getFloat64(offset, true);
35
- offset += 8;
36
- return [value, offset];
37
- }
@@ -1,29 +0,0 @@
1
- export function $proto_i32_encode(
2
- dst: Uint8Array,
3
- offset: number,
4
- value: number,
5
- ): number {
6
- value = (value | 0) >>> 0;
7
-
8
- dst[offset] = value & 0xff;
9
- dst[offset + 1] = (value >>> 8) & 0xff;
10
- dst[offset + 2] = (value >>> 16) & 0xff;
11
- dst[offset + 3] = (value >>> 24) & 0xff;
12
- offset += 4;
13
-
14
- return offset;
15
- }
16
-
17
- export function $proto_i32_decode(
18
- buf: Uint8Array,
19
- offset: number,
20
- ): [value: number, offset: number] {
21
- const value =
22
- (buf[offset]! << 0) |
23
- (buf[offset + 1]! << 8) |
24
- (buf[offset + 2]! << 16) |
25
- (buf[offset + 3]! << 24);
26
- offset += 4;
27
-
28
- return [value, offset];
29
- }
@@ -1,37 +0,0 @@
1
- export function $proto_i64_encode(
2
- dst: Uint8Array,
3
- offset: number,
4
- value: bigint,
5
- ): number {
6
- value = BigInt.asUintN(64, value);
7
-
8
- dst[offset] = Number(value & BigInt(0xff));
9
- dst[offset + 1] = Number((value >> BigInt(8)) & BigInt(0xff));
10
- dst[offset + 2] = Number((value >> BigInt(16)) & BigInt(0xff));
11
- dst[offset + 3] = Number((value >> BigInt(24)) & BigInt(0xff));
12
- dst[offset + 4] = Number((value >> BigInt(32)) & BigInt(0xff));
13
- dst[offset + 5] = Number((value >> BigInt(40)) & BigInt(0xff));
14
- dst[offset + 6] = Number((value >> BigInt(48)) & BigInt(0xff));
15
- dst[offset + 7] = Number((value >> BigInt(56)) & BigInt(0xff));
16
- offset += 8;
17
-
18
- return offset;
19
- }
20
-
21
- export function $proto_i64_decode(
22
- buf: Uint8Array,
23
- offset: number,
24
- ): [value: bigint, offset: number] {
25
- const value =
26
- (BigInt(buf[offset]!) << BigInt(0)) |
27
- (BigInt(buf[offset + 1]!) << BigInt(8)) |
28
- (BigInt(buf[offset + 2]!) << BigInt(16)) |
29
- (BigInt(buf[offset + 3]!) << BigInt(24)) |
30
- (BigInt(buf[offset + 4]!) << BigInt(32)) |
31
- (BigInt(buf[offset + 5]!) << BigInt(40)) |
32
- (BigInt(buf[offset + 6]!) << BigInt(48)) |
33
- (BigInt(buf[offset + 7]!) << BigInt(56));
34
- offset += 8;
35
-
36
- return [BigInt.asIntN(64, value), offset];
37
- }
@@ -1,82 +0,0 @@
1
- import { $proto_field_wiretype } from "./$proto_field";
2
-
3
- export function $proto_size_varint(n: number): number;
4
- export function $proto_size_varint(n: bigint): number;
5
-
6
- export function $proto_size_varint(n: number | bigint): number {
7
- if (typeof n === "number") {
8
- if (n < 0) {
9
- return SizeVarInt64(BigInt(n));
10
- }
11
- return SizeVarInt32(n);
12
- }
13
-
14
- return SizeVarInt64(n);
15
- }
16
-
17
- export function $proto_size_field(
18
- fieldNumber: number,
19
- wireType: $proto_field_wiretype,
20
- ): number {
21
- const tag = (fieldNumber << 3) | Number(wireType);
22
- return $proto_size_varint(tag);
23
- }
24
-
25
- export function $proto_size_bytes(len: number): number {
26
- return $proto_size_varint(len) + len;
27
- }
28
-
29
- const utf8_encoder = new TextEncoder();
30
-
31
- export function $proto_size_string(value: string): number {
32
- // TODO: optimize (DON'T ENCODE TEXT TWICE)
33
- const bytes = utf8_encoder.encode(value);
34
- return $proto_size_bytes(bytes.length);
35
- }
36
-
37
- function SizeVarInt32(value: number): number {
38
- value = (value | 0) >>> 0; // 32-bit integer
39
- // TODO: optimize ( branchless solution exists )
40
- // TODO: try lookup table based solution
41
-
42
- if (value <= 127) {
43
- return 1;
44
- } else if (value <= 16383) {
45
- return 2;
46
- } else if (value <= 2097151) {
47
- return 3;
48
- } else if (value <= 268435455) {
49
- return 4;
50
- }
51
-
52
- // < 34359738367
53
- return 5;
54
- }
55
-
56
- function SizeVarInt64(value: bigint): number {
57
- value = BigInt.asUintN(64, value);
58
- // TODO: optimize ( branchless solution exists )
59
- // TODO: try lookup table based solution
60
-
61
- if (value <= BigInt("127")) {
62
- return 1;
63
- } else if (value <= BigInt("16383")) {
64
- return 2;
65
- } else if (value <= BigInt("2097151")) {
66
- return 3;
67
- } else if (value <= BigInt("268435455")) {
68
- return 4;
69
- } else if (value <= BigInt("34359738367")) {
70
- return 5;
71
- } else if (value <= BigInt("4398046511103")) {
72
- return 6;
73
- } else if (value <= BigInt("562949953421311")) {
74
- return 7;
75
- } else if (value <= BigInt("72057594037927935")) {
76
- return 8;
77
- } else if (value <= BigInt("9223372036854775807")) {
78
- return 9;
79
- }
80
-
81
- return 10;
82
- }
@@ -1,24 +0,0 @@
1
- import { $proto_bytes_decode, $proto_bytes_encode } from "./$proto_bytes";
2
-
3
- const utf8_encoder = new TextEncoder();
4
-
5
- export function $proto_string_encode(
6
- dst: Uint8Array,
7
- offset: number,
8
- value: string,
9
- ): number {
10
- // TODO: optimize (DON'T ENCODE TEXT TWICE)
11
-
12
- const bytes = utf8_encoder.encode(value);
13
- return $proto_bytes_encode(dst, offset, bytes);
14
- }
15
-
16
- export function $proto_string_decode(
17
- src: Uint8Array,
18
- offset: number,
19
- ): [value: string, offset: number] {
20
- const utf8_decoder = new TextDecoder("utf-8");
21
- const [bytes, o] = $proto_bytes_decode(src, offset);
22
- const value = utf8_decoder.decode(bytes);
23
- return [value, o];
24
- }
@@ -1,130 +0,0 @@
1
- function EncodeVarNumber(
2
- dst: Uint8Array,
3
- offset: number,
4
- value: number,
5
- ): number {
6
- value = (value | 0) >>> 0; // 32-bit integer
7
-
8
- while (value > 127) {
9
- dst[offset++] = (value & 0b01111111) | 0b10000000;
10
- value >>>= 7;
11
- }
12
- dst[offset++] = value;
13
-
14
- return offset;
15
- }
16
-
17
- function DecodeVarNumber(
18
- buf: Uint8Array,
19
- offset: number,
20
- ): [value: number, offset: number] {
21
- let value = 0;
22
- let shift = 0;
23
-
24
- while (true) {
25
- const byte = buf[offset++]!;
26
- value |= (byte & 0b01111111) << shift;
27
- if (byte < 128) {
28
- break;
29
- }
30
- shift += 7;
31
- }
32
-
33
- return [value | 0, offset];
34
- }
35
-
36
- function DecodeVarBigInt(
37
- buf: Uint8Array,
38
- offset: number,
39
- ): [value: bigint, offset: number] {
40
- let value = BigInt(0);
41
- let shift = BigInt(0);
42
-
43
- while (true) {
44
- const byte = buf[offset++]!;
45
- value |= BigInt(byte & 0b01111111) << shift;
46
- if (byte < 128) {
47
- break;
48
- }
49
- shift += BigInt(7);
50
- }
51
-
52
- return [BigInt.asIntN(64, value), offset];
53
- }
54
-
55
- export function $varint_decode_i32(
56
- buf: Uint8Array,
57
- offset: number,
58
- ): [value: number, offset: number] {
59
- const [v, o] = DecodeVarNumber(buf, offset);
60
- return [v, o];
61
- }
62
-
63
- export function $varint_decode_u32(
64
- buf: Uint8Array,
65
- offset: number,
66
- ): [value: number, offset: number] {
67
- const [v, o] = DecodeVarNumber(buf, offset);
68
- return [v >>> 0, o];
69
- }
70
-
71
- export function $varint_decode_i64(
72
- buf: Uint8Array,
73
- offset: number,
74
- ): [value: bigint, offset: number] {
75
- const [v, o] = DecodeVarBigInt(buf, offset);
76
- return [v, o];
77
- }
78
-
79
- export function $varint_decode_u64(
80
- buf: Uint8Array,
81
- offset: number,
82
- ): [value: bigint, offset: number] {
83
- const [v, o] = DecodeVarBigInt(buf, offset);
84
- return [BigInt.asUintN(64, v), o];
85
- }
86
-
87
- function EncodeVarBigInt(
88
- dst: Uint8Array,
89
- offset: number,
90
- value: bigint,
91
- ): number {
92
- value = BigInt.asUintN(64, value);
93
-
94
- while (value > BigInt(127)) {
95
- dst[offset++] = Number(value & BigInt(0b01111111)) | 0b10000000;
96
- value >>= BigInt(7);
97
- }
98
- dst[offset++] = Number(value);
99
-
100
- return offset;
101
- }
102
-
103
- export function $varint_encode(
104
- dst: Uint8Array,
105
- offset: number,
106
- value: number,
107
- ): number;
108
- export function $varint_encode(
109
- dst: Uint8Array,
110
- offset: number,
111
- value: bigint,
112
- ): number;
113
-
114
- export function $varint_encode(
115
- dst: Uint8Array,
116
- offset: number,
117
- value: number | bigint,
118
- ): number {
119
- if (typeof value === "bigint") {
120
- offset = EncodeVarBigInt(dst, offset, value);
121
- } else {
122
- if (value < 0) {
123
- // NOTE: Protocol Buffers signed varint encoding uses two's complement of 64-bit unsigned integers.
124
- offset = EncodeVarBigInt(dst, offset, BigInt(value));
125
- } else {
126
- offset = EncodeVarNumber(dst, offset, value);
127
- }
128
- }
129
- return offset;
130
- }
@@ -1,39 +0,0 @@
1
- export function $zigzag_encode(value: number): number;
2
- export function $zigzag_encode(value: bigint): bigint;
3
- export function $zigzag_encode(value: number | bigint): any {
4
- // TODO: optimize (branchless solution exists)
5
-
6
- if (typeof value === "bigint") {
7
- if (value < BigInt(0)) {
8
- value = -value;
9
- return value * BigInt(2) - BigInt(1);
10
- }
11
- return value * BigInt(2);
12
- }
13
-
14
- if (value < 0) {
15
- value = -value;
16
- return value * 2 - 1;
17
- }
18
- return value * 2;
19
- }
20
-
21
- export function $zigzag_decode(value: number): number;
22
- export function $zigzag_decode(value: bigint): bigint;
23
- export function $zigzag_decode(value: number | bigint): any {
24
- // TODO: optimize (branchless solution exists)
25
-
26
- if (typeof value === "bigint") {
27
- value = BigInt.asUintN(64, value);
28
- if (value & BigInt(1)) {
29
- return -(value + BigInt(1)) / BigInt(2);
30
- }
31
- return value / BigInt(2);
32
- }
33
-
34
- value = value >>> 0;
35
- if (value & 1) {
36
- return -(value + 1) / 2;
37
- }
38
- return value / 2;
39
- }
@@ -1,5 +0,0 @@
1
- export interface IProtocolMap {
2
- type: "map";
3
- key: string;
4
- value: string | IProtocolMap;
5
- }
@@ -1,6 +0,0 @@
1
- import { IProtocolProperty } from "./IProtocolProperty";
2
-
3
- export interface IProtocolMessage {
4
- name: string;
5
- properties: IProtocolProperty[];
6
- }
@@ -1,13 +0,0 @@
1
- import { IProtocolMap } from "./IProtocolMap";
2
-
3
- export interface IProtocolProperty {
4
- key: string;
5
- oneOf: IProtocolProperty.IOneOf[];
6
- required: boolean;
7
- repeated: boolean;
8
- }
9
- export namespace IProtocolProperty {
10
- export interface IOneOf {
11
- type: string | IProtocolMap;
12
- }
13
- }
@@ -1,126 +0,0 @@
1
- import ts from "typescript";
2
-
3
- import { MetadataCollection } from "../factories/MetadataCollection";
4
- import { ProtocolFactory } from "../factories/ProtocolFactory";
5
-
6
- import { Metadata } from "../metadata/Metadata";
7
-
8
- import { IProject } from "../transformers/IProject";
9
-
10
- import { Escaper } from "../utils/Escaper";
11
- import { MapUtil } from "../utils/MapUtil";
12
- import { NameEncoder } from "../utils/NameEncoder";
13
-
14
- import { IProtocolMap } from "../messages/IProtocolMap";
15
- import { IProtocolMessage } from "../messages/IProtocolMessage";
16
-
17
- export namespace MessageProgrammer {
18
- export const generate =
19
- ({ checker }: IProject) =>
20
- (type: ts.Type) => {
21
- // PARSE TARGET TYPE
22
- const collection: MetadataCollection = new MetadataCollection();
23
- const metadata: Metadata =
24
- ProtocolFactory.metadata(checker)(collection)(type);
25
-
26
- // CONVERT TO PROTOCOL MESSAGES
27
- const dict: Map<string, IProtocolMessage> = new Map();
28
- ProtocolFactory.generate(collection)(dict)(metadata);
29
-
30
- // STRINGIFY
31
- const hierarchies: Map<string, Hierarchy> = new Map();
32
- for (const msg of dict.values()) emplace(hierarchies)(msg);
33
-
34
- const content: string =
35
- `syntax = "proto3";\n\n` +
36
- [...hierarchies.values()]
37
- .map((hier) => stringify(hier))
38
- .join("\n\n");
39
-
40
- // RETURNS
41
- return ts.factory.createStringLiteral(content);
42
- };
43
-
44
- const stringify = (hierarchy: Hierarchy): string => {
45
- const { key, message, children } = hierarchy;
46
- let index: number = 1;
47
-
48
- const elements: string[] = [`message ${NameEncoder.encode(key)} {`];
49
- if (message !== null)
50
- elements.push(
51
- ...message.properties.map((property) => {
52
- const key: string =
53
- Escaper.variable(property.key) &&
54
- property.key.indexOf("$") === -1
55
- ? property.key
56
- : `v${index + 1}`;
57
- if (property.oneOf.length === 1)
58
- return [
59
- TAB,
60
- property.required ? "" : "optional ",
61
- property.repeated ? "repeated " : "",
62
- getTypeName(property.oneOf[0]!.type) + " ",
63
- key,
64
- " = ",
65
- `${index++};`,
66
- ].join("");
67
- return (
68
- `${TAB}oneof ${key} {\n` +
69
- property.oneOf
70
- .map(
71
- (o, i) =>
72
- `${TAB}${TAB}${getTypeName(
73
- o.type,
74
- )} ${key}_o${i} = ${index++};`,
75
- )
76
- .join("\n") +
77
- `\n${TAB}}`
78
- );
79
- }),
80
- );
81
- if (message !== null && children.size) elements.push("\n");
82
- if (children.size)
83
- elements.push(
84
- [...children.values()]
85
- .map((child) => stringify(child))
86
- .map((body) =>
87
- body
88
- .split("\n")
89
- .map((line) => `${TAB}${line}`)
90
- .join("\n"),
91
- )
92
- .join("\n\n"),
93
- );
94
- elements.push("}");
95
-
96
- return elements.join("\n");
97
- };
98
-
99
- const emplace =
100
- (dict: Map<string, Hierarchy>) => (message: IProtocolMessage) => {
101
- const accessors: string[] = message.name.split(".");
102
- accessors.forEach((access, i) => {
103
- const hierarchy: Hierarchy = MapUtil.take(dict, access, () => ({
104
- key: access,
105
- message: null!,
106
- children: new Map(),
107
- }));
108
- dict = hierarchy.children;
109
- if (i === accessors.length - 1) hierarchy.message = message;
110
- });
111
- };
112
-
113
- function getTypeName(type: string | IProtocolMap): string {
114
- return typeof type === "string"
115
- ? NameEncoder.encode(type)
116
- : `map<${type.key}, ${getTypeName(type.value)}>`;
117
- }
118
- }
119
-
120
- interface Hierarchy {
121
- key: string;
122
- message: IProtocolMessage | null;
123
- children: Map<string, Hierarchy>;
124
- }
125
-
126
- const TAB = " ".repeat(4);
@@ -1,32 +0,0 @@
1
- export namespace NameEncoder {
2
- export function encode(str: string): string {
3
- for (const [before, after] of REPLACERS)
4
- str = str.split(before).join(after);
5
- return str;
6
- }
7
-
8
- export function decode(str: string): string {
9
- for (const [before, after] of REPLACERS)
10
- if (after !== "") str = str.split(after).join(before);
11
- return str;
12
- }
13
- }
14
-
15
- const REPLACERS: [string, string][] = [
16
- ["$", "_dollar_"],
17
- ["&", "_and_"],
18
- ["|", "_or_"],
19
- ["{", "_blt_"],
20
- ["}", "_bgt_"],
21
- ["<", "_lt_"],
22
- [">", "_gt_"],
23
- ["(", "_lp_"],
24
- [")", "_rp_"],
25
- ["[", "_alt_"],
26
- ["]", "_agt_"],
27
- [",", "_comma_"],
28
- ["`", "_backquote_"],
29
- ["'", "_singlequote_"],
30
- ['"', "_doublequote_"],
31
- [" ", "_space_"],
32
- ];