typia 5.0.0-dev.20230820 → 5.0.0-dev.20230821

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 (221) hide show
  1. package/README.md +1 -1
  2. package/lib/factories/MetadataTagFactory.js +1 -2
  3. package/lib/factories/MetadataTagFactory.js.map +1 -1
  4. package/lib/programmers/RandomProgrammer.js +18 -9
  5. package/lib/programmers/RandomProgrammer.js.map +1 -1
  6. package/lib/programmers/helpers/RandomRanger.js +2 -2
  7. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  8. package/lib/programmers/internal/application_number.js +6 -1
  9. package/lib/programmers/internal/application_number.js.map +1 -1
  10. package/lib/programmers/internal/check_bigint.js +8 -11
  11. package/lib/programmers/internal/check_bigint.js.map +1 -1
  12. package/lib/programmers/internal/check_number.js +12 -2
  13. package/lib/programmers/internal/check_number.js.map +1 -1
  14. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +1 -1
  15. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  16. package/lib/schemas/metadata/IMetadataTag.d.ts +1 -1
  17. package/package.json +1 -1
  18. package/src/factories/ExpressionFactory.ts +115 -115
  19. package/src/factories/MetadataCollection.ts +269 -269
  20. package/src/factories/MetadataFactory.ts +34 -34
  21. package/src/factories/MetadataTagFactory.ts +364 -365
  22. package/src/factories/ProtobufFactory.ts +251 -251
  23. package/src/factories/StatementFactory.ts +72 -72
  24. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  25. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  26. package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
  27. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  28. package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
  29. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
  30. package/src/factories/internal/metadata/explore_metadata.ts +38 -38
  31. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  32. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  33. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  34. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  35. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  36. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  37. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  38. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +84 -84
  39. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  40. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  41. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  42. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  43. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  44. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  45. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
  46. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  47. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  48. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  49. package/src/functional/$ProtobufReader.ts +188 -188
  50. package/src/functional/$ProtobufSizer.ts +144 -144
  51. package/src/functional/$ProtobufWriter.ts +152 -152
  52. package/src/functional/$number.ts +13 -13
  53. package/src/functional/$strlen.ts +7 -7
  54. package/src/functional/$varint.ts +130 -130
  55. package/src/functional/$zigzag.ts +39 -39
  56. package/src/functional/IProtobufWriter.ts +18 -18
  57. package/src/functional/Namespace.ts +149 -149
  58. package/src/json.ts +648 -648
  59. package/src/misc.ts +651 -651
  60. package/src/module.ts +708 -708
  61. package/src/programmers/CheckerProgrammer.ts +1173 -1173
  62. package/src/programmers/FeatureProgrammer.ts +497 -497
  63. package/src/programmers/IsProgrammer.ts +239 -239
  64. package/src/programmers/IsPruneProgrammer.ts +73 -73
  65. package/src/programmers/RandomProgrammer.ts +578 -579
  66. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  67. package/src/programmers/helpers/CloneJoiner.ts +107 -107
  68. package/src/programmers/helpers/FunctionImporeter.ts +89 -89
  69. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  70. package/src/programmers/helpers/ProtobufUtil.ts +24 -24
  71. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  72. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  73. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  74. package/src/programmers/helpers/RandomRanger.ts +208 -216
  75. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  76. package/src/programmers/helpers/UnionExplorer.ts +310 -310
  77. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  78. package/src/programmers/helpers/disable_function_importer_declare.ts +27 -27
  79. package/src/programmers/internal/application_alias.ts +66 -66
  80. package/src/programmers/internal/application_array.ts +30 -30
  81. package/src/programmers/internal/application_constant.ts +26 -26
  82. package/src/programmers/internal/application_default.ts +17 -17
  83. package/src/programmers/internal/application_default_string.ts +33 -33
  84. package/src/programmers/internal/application_native.ts +39 -39
  85. package/src/programmers/internal/application_number.ts +81 -77
  86. package/src/programmers/internal/application_object.ts +165 -165
  87. package/src/programmers/internal/application_resolved.ts +55 -55
  88. package/src/programmers/internal/application_schema.ts +157 -157
  89. package/src/programmers/internal/application_string.ts +44 -44
  90. package/src/programmers/internal/application_templates.ts +25 -25
  91. package/src/programmers/internal/application_tuple.ts +57 -57
  92. package/src/programmers/internal/check_array.ts +30 -30
  93. package/src/programmers/internal/check_array_length.ts +35 -35
  94. package/src/programmers/internal/check_bigint.ts +110 -92
  95. package/src/programmers/internal/check_custom.ts +31 -31
  96. package/src/programmers/internal/check_number.ts +258 -230
  97. package/src/programmers/internal/check_string.ts +25 -25
  98. package/src/programmers/internal/check_string_tags.ts +67 -67
  99. package/src/programmers/internal/check_template.ts +56 -56
  100. package/src/programmers/internal/check_union_array_like.ts +329 -329
  101. package/src/programmers/internal/decode_union_object.ts +84 -84
  102. package/src/programmers/internal/feature_object_entries.ts +63 -63
  103. package/src/programmers/internal/get_comment_tags.ts +23 -23
  104. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  105. package/src/programmers/internal/prune_object_properties.ts +60 -60
  106. package/src/programmers/internal/random_custom.ts +29 -29
  107. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  108. package/src/programmers/internal/template_to_pattern.ts +15 -15
  109. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  110. package/src/programmers/json/JsonApplicationProgrammer.ts +47 -47
  111. package/src/programmers/json/JsonAssertParseProgrammer.ts +66 -66
  112. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +66 -66
  113. package/src/programmers/json/JsonIsParseProgrammer.ts +72 -72
  114. package/src/programmers/json/JsonIsStringifyProgrammer.ts +76 -76
  115. package/src/programmers/json/JsonStringifyProgrammer.ts +987 -987
  116. package/src/programmers/json/JsonValidateParseProgrammer.ts +70 -70
  117. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +84 -84
  118. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
  119. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +68 -68
  120. package/src/programmers/misc/MiscCloneProgrammer.ts +587 -587
  121. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  122. package/src/programmers/misc/MiscLiteralsProgrammer.ts +64 -64
  123. package/src/programmers/misc/MiscPruneProgrammer.ts +542 -542
  124. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
  125. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +78 -78
  126. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +69 -69
  127. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +66 -66
  128. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +38 -38
  129. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +920 -921
  130. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +75 -75
  131. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +76 -76
  132. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +178 -178
  133. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +83 -83
  134. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +86 -86
  135. package/src/protobuf.ts +239 -239
  136. package/src/schemas/json/IJsonApplication.ts +8 -8
  137. package/src/schemas/json/IJsonComponents.ts +33 -33
  138. package/src/schemas/json/IJsonSchema.ts +133 -133
  139. package/src/schemas/metadata/ICommentTag.ts +4 -4
  140. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  141. package/src/schemas/metadata/IMetadata.ts +28 -28
  142. package/src/schemas/metadata/IMetadataAlias.ts +14 -14
  143. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  144. package/src/schemas/metadata/IMetadataArray.ts +10 -10
  145. package/src/schemas/metadata/IMetadataCollection.ts +11 -11
  146. package/src/schemas/metadata/IMetadataConstant.ts +16 -16
  147. package/src/schemas/metadata/IMetadataDictionary.ts +14 -14
  148. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  149. package/src/schemas/metadata/IMetadataObject.ts +18 -18
  150. package/src/schemas/metadata/IMetadataProperty.ts +11 -11
  151. package/src/schemas/metadata/IMetadataResolved.ts +6 -6
  152. package/src/schemas/metadata/IMetadataTag.ts +112 -113
  153. package/src/schemas/metadata/IMetadataTuple.ts +10 -10
  154. package/src/schemas/metadata/Metadata.ts +637 -637
  155. package/src/schemas/metadata/MetadataAlias.ts +66 -66
  156. package/src/schemas/metadata/MetadataArray.ts +55 -55
  157. package/src/schemas/metadata/MetadataConstant.ts +3 -3
  158. package/src/schemas/metadata/MetadataObject.ts +139 -139
  159. package/src/schemas/metadata/MetadataProperty.ts +64 -64
  160. package/src/schemas/metadata/MetadataResolved.ts +51 -51
  161. package/src/schemas/metadata/MetadataTuple.ts +58 -58
  162. package/src/transformers/CallExpressionTransformer.ts +240 -240
  163. package/src/transformers/features/AssertTransformer.ts +11 -11
  164. package/src/transformers/features/CreateAssertTransformer.ts +13 -13
  165. package/src/transformers/features/CreateIsTransformer.ts +11 -11
  166. package/src/transformers/features/CreateRandomTransformer.ts +39 -39
  167. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  168. package/src/transformers/features/IsTransformer.ts +11 -11
  169. package/src/transformers/features/RandomTransformer.ts +42 -42
  170. package/src/transformers/features/ValidateTransformer.ts +11 -11
  171. package/src/transformers/features/json/JsonApplicationTransformer.ts +111 -111
  172. package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
  173. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  174. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +10 -10
  175. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  176. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  177. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +10 -10
  178. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  179. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +10 -10
  180. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  181. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  182. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
  183. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  184. package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
  185. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  186. package/src/transformers/features/misc/MetadataTransformer.ts +53 -53
  187. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
  188. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
  189. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  190. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +10 -10
  191. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +10 -10
  192. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  193. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  194. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  195. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  196. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +10 -10
  197. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +10 -10
  198. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  199. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  200. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +28 -28
  201. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  202. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
  203. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
  204. package/src/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.ts +12 -12
  205. package/src/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.ts +12 -12
  206. package/src/transformers/features/protobuf/CreateProtobufDecodeTransformer.ts +9 -9
  207. package/src/transformers/features/protobuf/CreateProtobufEncodeTransformer.ts +9 -9
  208. package/src/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.ts +12 -12
  209. package/src/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.ts +12 -12
  210. package/src/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.ts +12 -12
  211. package/src/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.ts +12 -12
  212. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  213. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  214. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +10 -10
  215. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +10 -10
  216. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +10 -10
  217. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +10 -10
  218. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +31 -31
  219. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +12 -12
  220. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +12 -12
  221. package/src/utils/NameEncoder.ts +32 -32
@@ -1,188 +1,188 @@
1
- import { ProtobufWire } from "../programmers/helpers/ProtobufWire";
2
-
3
- export class $ProtobufReader {
4
- /**
5
- * Read buffer
6
- */
7
- private buf: Uint8Array;
8
-
9
- /**
10
- * Read buffer pointer.
11
- */
12
- private ptr: number;
13
-
14
- /**
15
- * DataView for buffer.
16
- */
17
- private view: DataView;
18
-
19
- public constructor(buf: Uint8Array) {
20
- this.buf = buf;
21
- this.ptr = 0;
22
- this.view = new DataView(buf.buffer);
23
- }
24
-
25
- // public reset(buf: Uint8Array): void {
26
- // this.buf = buf;
27
- // this.ptr = 0;
28
- // this.view = new DataView(buf.buffer);
29
- // }
30
-
31
- public uint32(): number {
32
- return this.varint32();
33
- }
34
-
35
- public int32(): number {
36
- return this.varint32();
37
- }
38
-
39
- public sint32(): number {
40
- const value: number = this.varint32();
41
- return (value >>> 1) ^ -(value & 1);
42
- }
43
-
44
- public uint64(): bigint {
45
- return this.varint64();
46
- }
47
-
48
- public int64(): bigint {
49
- return this.varint64();
50
- }
51
-
52
- public sint64(): bigint {
53
- const value = this.varint64();
54
- return (value >> N01) ^ -(value & N01);
55
- }
56
-
57
- public bool(): boolean {
58
- return this.varint32() !== 0;
59
- }
60
-
61
- public float(): number {
62
- const value: number = this.view.getFloat32(this.ptr, true);
63
- this.ptr += 4;
64
- return value;
65
- }
66
-
67
- public double(): number {
68
- const value: number = this.view.getFloat64(this.ptr, true);
69
- this.ptr += 8;
70
- return value;
71
- }
72
-
73
- public bytes(): Uint8Array {
74
- const length: number = this.uint32();
75
- return this.buf.subarray(this.ptr, (this.ptr += length));
76
- }
77
-
78
- public string(): string {
79
- return utf8.decode(this.bytes());
80
- }
81
-
82
- public skip(length: number): void {
83
- if (length === 0) while (this.u8() & 0x80);
84
- else this.ptr += length;
85
- }
86
-
87
- public skipType(wireType: ProtobufWire): void {
88
- switch (wireType) {
89
- case ProtobufWire.VARIANT:
90
- this.skip(0);
91
- break;
92
- case ProtobufWire.I64:
93
- this.skip(8);
94
- break;
95
- case ProtobufWire.LEN:
96
- this.skip(this.uint32());
97
- break;
98
- case ProtobufWire.START_GROUP:
99
- while (
100
- (wireType = this.uint32() & 0x07) !== ProtobufWire.END_GROUP
101
- )
102
- this.skipType(wireType);
103
- break;
104
- case ProtobufWire.I32:
105
- this.skip(4);
106
- break;
107
- default:
108
- throw new Error("Invalid wire type " + wireType.toString());
109
- }
110
- }
111
-
112
- private varint32(): number {
113
- let loaded: number;
114
- let value: number;
115
-
116
- value = (loaded = this.u8()) & 0x7f;
117
- if (loaded < 0x80) return value;
118
-
119
- value |= ((loaded = this.u8()) & 0x7f) << 7;
120
- if (loaded < 0x80) return value;
121
-
122
- value |= ((loaded = this.u8()) & 0x7f) << 14;
123
- if (loaded < 0x80) return value;
124
-
125
- value |= ((loaded = this.u8()) & 0x7f) << 21;
126
- if (loaded < 0x80) return value;
127
-
128
- value |= ((loaded = this.u8()) & 0xf) << 28;
129
- if (loaded < 0x80) return value;
130
-
131
- // increment position until there is no continuation bit or until we read 10 bytes
132
- if (this.u8() < 0x80) return value;
133
- if (this.u8() < 0x80) return value;
134
- if (this.u8() < 0x80) return value;
135
- if (this.u8() < 0x80) return value;
136
- if (this.u8() < 0x80) return value;
137
-
138
- return value;
139
- }
140
-
141
- private varint64(): bigint {
142
- let loaded: bigint;
143
- let value: bigint;
144
-
145
- value = (loaded = this.u8n()) & N7F;
146
- if (loaded < N80) return value;
147
-
148
- value |= ((loaded = this.u8n()) & N7F) << BigInt(7);
149
- if (loaded < N80) return value;
150
-
151
- value |= ((loaded = this.u8n()) & N7F) << BigInt(14);
152
- if (loaded < N80) return value;
153
-
154
- value |= ((loaded = this.u8n()) & N7F) << BigInt(21);
155
- if (loaded < N80) return value;
156
-
157
- value |= ((loaded = this.u8n()) & N7F) << BigInt(28);
158
- if (loaded < N80) return value;
159
-
160
- value |= ((loaded = this.u8n()) & N7F) << BigInt(35);
161
- if (loaded < N80) return value;
162
-
163
- value |= ((loaded = this.u8n()) & N7F) << BigInt(42);
164
- if (loaded < N80) return value;
165
-
166
- value |= ((loaded = this.u8n()) & N7F) << BigInt(49);
167
- if (loaded < N80) return value;
168
-
169
- value |= ((loaded = this.u8n()) & N7F) << BigInt(56);
170
- if (loaded < N80) return value;
171
-
172
- value |= (this.u8n() & N01) << BigInt(63);
173
- return BigInt.asIntN(64, value);
174
- }
175
-
176
- private u8(): number {
177
- return this.view.getUint8(this.ptr++);
178
- }
179
-
180
- private u8n(): bigint {
181
- return BigInt(this.u8());
182
- }
183
- }
184
-
185
- const utf8 = new TextDecoder();
186
- const N01 = BigInt(0x01);
187
- const N7F = BigInt(0x7f);
188
- const N80 = BigInt(0x80);
1
+ import { ProtobufWire } from "../programmers/helpers/ProtobufWire";
2
+
3
+ export class $ProtobufReader {
4
+ /**
5
+ * Read buffer
6
+ */
7
+ private buf: Uint8Array;
8
+
9
+ /**
10
+ * Read buffer pointer.
11
+ */
12
+ private ptr: number;
13
+
14
+ /**
15
+ * DataView for buffer.
16
+ */
17
+ private view: DataView;
18
+
19
+ public constructor(buf: Uint8Array) {
20
+ this.buf = buf;
21
+ this.ptr = 0;
22
+ this.view = new DataView(buf.buffer);
23
+ }
24
+
25
+ // public reset(buf: Uint8Array): void {
26
+ // this.buf = buf;
27
+ // this.ptr = 0;
28
+ // this.view = new DataView(buf.buffer);
29
+ // }
30
+
31
+ public uint32(): number {
32
+ return this.varint32();
33
+ }
34
+
35
+ public int32(): number {
36
+ return this.varint32();
37
+ }
38
+
39
+ public sint32(): number {
40
+ const value: number = this.varint32();
41
+ return (value >>> 1) ^ -(value & 1);
42
+ }
43
+
44
+ public uint64(): bigint {
45
+ return this.varint64();
46
+ }
47
+
48
+ public int64(): bigint {
49
+ return this.varint64();
50
+ }
51
+
52
+ public sint64(): bigint {
53
+ const value = this.varint64();
54
+ return (value >> N01) ^ -(value & N01);
55
+ }
56
+
57
+ public bool(): boolean {
58
+ return this.varint32() !== 0;
59
+ }
60
+
61
+ public float(): number {
62
+ const value: number = this.view.getFloat32(this.ptr, true);
63
+ this.ptr += 4;
64
+ return value;
65
+ }
66
+
67
+ public double(): number {
68
+ const value: number = this.view.getFloat64(this.ptr, true);
69
+ this.ptr += 8;
70
+ return value;
71
+ }
72
+
73
+ public bytes(): Uint8Array {
74
+ const length: number = this.uint32();
75
+ return this.buf.subarray(this.ptr, (this.ptr += length));
76
+ }
77
+
78
+ public string(): string {
79
+ return utf8.decode(this.bytes());
80
+ }
81
+
82
+ public skip(length: number): void {
83
+ if (length === 0) while (this.u8() & 0x80);
84
+ else this.ptr += length;
85
+ }
86
+
87
+ public skipType(wireType: ProtobufWire): void {
88
+ switch (wireType) {
89
+ case ProtobufWire.VARIANT:
90
+ this.skip(0);
91
+ break;
92
+ case ProtobufWire.I64:
93
+ this.skip(8);
94
+ break;
95
+ case ProtobufWire.LEN:
96
+ this.skip(this.uint32());
97
+ break;
98
+ case ProtobufWire.START_GROUP:
99
+ while (
100
+ (wireType = this.uint32() & 0x07) !== ProtobufWire.END_GROUP
101
+ )
102
+ this.skipType(wireType);
103
+ break;
104
+ case ProtobufWire.I32:
105
+ this.skip(4);
106
+ break;
107
+ default:
108
+ throw new Error("Invalid wire type " + wireType.toString());
109
+ }
110
+ }
111
+
112
+ private varint32(): number {
113
+ let loaded: number;
114
+ let value: number;
115
+
116
+ value = (loaded = this.u8()) & 0x7f;
117
+ if (loaded < 0x80) return value;
118
+
119
+ value |= ((loaded = this.u8()) & 0x7f) << 7;
120
+ if (loaded < 0x80) return value;
121
+
122
+ value |= ((loaded = this.u8()) & 0x7f) << 14;
123
+ if (loaded < 0x80) return value;
124
+
125
+ value |= ((loaded = this.u8()) & 0x7f) << 21;
126
+ if (loaded < 0x80) return value;
127
+
128
+ value |= ((loaded = this.u8()) & 0xf) << 28;
129
+ if (loaded < 0x80) return value;
130
+
131
+ // increment position until there is no continuation bit or until we read 10 bytes
132
+ if (this.u8() < 0x80) return value;
133
+ if (this.u8() < 0x80) return value;
134
+ if (this.u8() < 0x80) return value;
135
+ if (this.u8() < 0x80) return value;
136
+ if (this.u8() < 0x80) return value;
137
+
138
+ return value;
139
+ }
140
+
141
+ private varint64(): bigint {
142
+ let loaded: bigint;
143
+ let value: bigint;
144
+
145
+ value = (loaded = this.u8n()) & N7F;
146
+ if (loaded < N80) return value;
147
+
148
+ value |= ((loaded = this.u8n()) & N7F) << BigInt(7);
149
+ if (loaded < N80) return value;
150
+
151
+ value |= ((loaded = this.u8n()) & N7F) << BigInt(14);
152
+ if (loaded < N80) return value;
153
+
154
+ value |= ((loaded = this.u8n()) & N7F) << BigInt(21);
155
+ if (loaded < N80) return value;
156
+
157
+ value |= ((loaded = this.u8n()) & N7F) << BigInt(28);
158
+ if (loaded < N80) return value;
159
+
160
+ value |= ((loaded = this.u8n()) & N7F) << BigInt(35);
161
+ if (loaded < N80) return value;
162
+
163
+ value |= ((loaded = this.u8n()) & N7F) << BigInt(42);
164
+ if (loaded < N80) return value;
165
+
166
+ value |= ((loaded = this.u8n()) & N7F) << BigInt(49);
167
+ if (loaded < N80) return value;
168
+
169
+ value |= ((loaded = this.u8n()) & N7F) << BigInt(56);
170
+ if (loaded < N80) return value;
171
+
172
+ value |= (this.u8n() & N01) << BigInt(63);
173
+ return BigInt.asIntN(64, value);
174
+ }
175
+
176
+ private u8(): number {
177
+ return this.view.getUint8(this.ptr++);
178
+ }
179
+
180
+ private u8n(): bigint {
181
+ return BigInt(this.u8());
182
+ }
183
+ }
184
+
185
+ const utf8 = new TextDecoder();
186
+ const N01 = BigInt(0x01);
187
+ const N7F = BigInt(0x7f);
188
+ const N80 = BigInt(0x80);
@@ -1,144 +1,144 @@
1
- import { $strlen } from "./$strlen";
2
- import { IProtobufWriter } from "./IProtobufWriter";
3
-
4
- export class $ProtobufSizer implements IProtobufWriter {
5
- /**
6
- * Total length.
7
- */
8
- public len: number;
9
-
10
- /**
11
- * Position stack.
12
- */
13
- public readonly pos: Array<number>;
14
-
15
- /**
16
- * Variable length list.
17
- */
18
- public readonly varlen: Array<number>;
19
-
20
- /**
21
- * Variable length index stack.
22
- */
23
- public readonly varlenidx: Array<number>;
24
-
25
- public constructor(length: number = 0) {
26
- this.len = length;
27
- this.pos = [];
28
- this.varlen = [];
29
- this.varlenidx = [];
30
- }
31
-
32
- public bool(): void {
33
- this.len += 1;
34
- }
35
- public int32(value: number): void {
36
- if (value < 0) {
37
- // 10 bytes to encode negative number
38
- this.len += 10;
39
- } else {
40
- this.varint32(value);
41
- }
42
- }
43
- public sint32(value: number): void {
44
- this.varint32((value << 1) ^ (value >> 31));
45
- }
46
- public uint32(value: number): void {
47
- this.varint32(value);
48
- }
49
-
50
- public int64(value: bigint | number): void {
51
- this.varint64(typeof value === "number" ? BigInt(value) : value);
52
- }
53
- public sint64(value: bigint | number): void {
54
- if (typeof value === "number") value = BigInt(value);
55
- this.varint64((value << BigInt(1)) ^ (value >> BigInt(63)));
56
- }
57
- public uint64(value: bigint | number): void {
58
- this.varint64(typeof value === "number" ? BigInt(value) : value);
59
- }
60
-
61
- // public fixed32(_value: number): void {
62
- // this.len += 4;
63
- // }
64
- // public sfixed32(_value: number): void {
65
- // this.len += 4;
66
- // }
67
- // public fixed64(_value: number | bigint): void {
68
- // this.len += 8;
69
- // }
70
- // public sfixed64(_value: number | bigint): void {
71
- // this.len += 8;
72
- // }
73
- public float(_value: number): void {
74
- this.len += 4;
75
- }
76
- public double(_value: number): void {
77
- this.len += 8;
78
- }
79
-
80
- public bytes(value: Uint8Array): void {
81
- this.uint32(value.byteLength);
82
- this.len += value.byteLength;
83
- }
84
- public string(value: string): void {
85
- const len: number = $strlen(value);
86
- this.varlen.push(len);
87
- this.uint32(len);
88
- this.len += len;
89
- }
90
-
91
- public fork(): void {
92
- this.pos.push(this.len); // save current position
93
- this.varlenidx.push(this.varlen.length); // save current index in varlen array
94
- this.varlen.push(0); // add 0 length to varlen array (to be updated in ldelim())
95
- }
96
-
97
- public ldelim(): void {
98
- if (!(this.pos.length && this.varlenidx.length))
99
- throw new Error("Missing fork() before ldelim() call.");
100
-
101
- const endPos = this.len; // current position is end position
102
- const startPos = this.pos.pop()!; // get start position from stack
103
- const idx = this.varlenidx.pop()!; // get varlen index from stack
104
- const len = endPos - startPos; // calculate length
105
-
106
- this.varlen[idx] = len; // update variable length
107
- this.uint32(len); // add uint32 that should be called in fork()
108
- }
109
-
110
- public reset(): void {
111
- this.len = 0;
112
- // re-use arrays
113
- this.pos.length = 0;
114
- this.varlen.length = 0;
115
- this.varlenidx.length = 0;
116
- }
117
-
118
- private varint32(value: number): void {
119
- this.len +=
120
- value < 0
121
- ? 10 // 10 bits with leading 1's
122
- : value < 0x80
123
- ? 1
124
- : value < 0x4000
125
- ? 2
126
- : value < 0x200000
127
- ? 3
128
- : value < 0x10000000
129
- ? 4
130
- : 5;
131
- }
132
-
133
- private varint64(val: bigint): void {
134
- val = BigInt.asUintN(64, val);
135
- while (val > NX7F) {
136
- ++this.len;
137
- val = val >> ND07;
138
- }
139
- ++this.len;
140
- }
141
- }
142
-
143
- const ND07 = BigInt(7);
144
- const NX7F = BigInt(0x7f);
1
+ import { $strlen } from "./$strlen";
2
+ import { IProtobufWriter } from "./IProtobufWriter";
3
+
4
+ export class $ProtobufSizer implements IProtobufWriter {
5
+ /**
6
+ * Total length.
7
+ */
8
+ public len: number;
9
+
10
+ /**
11
+ * Position stack.
12
+ */
13
+ public readonly pos: Array<number>;
14
+
15
+ /**
16
+ * Variable length list.
17
+ */
18
+ public readonly varlen: Array<number>;
19
+
20
+ /**
21
+ * Variable length index stack.
22
+ */
23
+ public readonly varlenidx: Array<number>;
24
+
25
+ public constructor(length: number = 0) {
26
+ this.len = length;
27
+ this.pos = [];
28
+ this.varlen = [];
29
+ this.varlenidx = [];
30
+ }
31
+
32
+ public bool(): void {
33
+ this.len += 1;
34
+ }
35
+ public int32(value: number): void {
36
+ if (value < 0) {
37
+ // 10 bytes to encode negative number
38
+ this.len += 10;
39
+ } else {
40
+ this.varint32(value);
41
+ }
42
+ }
43
+ public sint32(value: number): void {
44
+ this.varint32((value << 1) ^ (value >> 31));
45
+ }
46
+ public uint32(value: number): void {
47
+ this.varint32(value);
48
+ }
49
+
50
+ public int64(value: bigint | number): void {
51
+ this.varint64(typeof value === "number" ? BigInt(value) : value);
52
+ }
53
+ public sint64(value: bigint | number): void {
54
+ if (typeof value === "number") value = BigInt(value);
55
+ this.varint64((value << BigInt(1)) ^ (value >> BigInt(63)));
56
+ }
57
+ public uint64(value: bigint | number): void {
58
+ this.varint64(typeof value === "number" ? BigInt(value) : value);
59
+ }
60
+
61
+ // public fixed32(_value: number): void {
62
+ // this.len += 4;
63
+ // }
64
+ // public sfixed32(_value: number): void {
65
+ // this.len += 4;
66
+ // }
67
+ // public fixed64(_value: number | bigint): void {
68
+ // this.len += 8;
69
+ // }
70
+ // public sfixed64(_value: number | bigint): void {
71
+ // this.len += 8;
72
+ // }
73
+ public float(_value: number): void {
74
+ this.len += 4;
75
+ }
76
+ public double(_value: number): void {
77
+ this.len += 8;
78
+ }
79
+
80
+ public bytes(value: Uint8Array): void {
81
+ this.uint32(value.byteLength);
82
+ this.len += value.byteLength;
83
+ }
84
+ public string(value: string): void {
85
+ const len: number = $strlen(value);
86
+ this.varlen.push(len);
87
+ this.uint32(len);
88
+ this.len += len;
89
+ }
90
+
91
+ public fork(): void {
92
+ this.pos.push(this.len); // save current position
93
+ this.varlenidx.push(this.varlen.length); // save current index in varlen array
94
+ this.varlen.push(0); // add 0 length to varlen array (to be updated in ldelim())
95
+ }
96
+
97
+ public ldelim(): void {
98
+ if (!(this.pos.length && this.varlenidx.length))
99
+ throw new Error("Missing fork() before ldelim() call.");
100
+
101
+ const endPos = this.len; // current position is end position
102
+ const startPos = this.pos.pop()!; // get start position from stack
103
+ const idx = this.varlenidx.pop()!; // get varlen index from stack
104
+ const len = endPos - startPos; // calculate length
105
+
106
+ this.varlen[idx] = len; // update variable length
107
+ this.uint32(len); // add uint32 that should be called in fork()
108
+ }
109
+
110
+ public reset(): void {
111
+ this.len = 0;
112
+ // re-use arrays
113
+ this.pos.length = 0;
114
+ this.varlen.length = 0;
115
+ this.varlenidx.length = 0;
116
+ }
117
+
118
+ private varint32(value: number): void {
119
+ this.len +=
120
+ value < 0
121
+ ? 10 // 10 bits with leading 1's
122
+ : value < 0x80
123
+ ? 1
124
+ : value < 0x4000
125
+ ? 2
126
+ : value < 0x200000
127
+ ? 3
128
+ : value < 0x10000000
129
+ ? 4
130
+ : 5;
131
+ }
132
+
133
+ private varint64(val: bigint): void {
134
+ val = BigInt.asUintN(64, val);
135
+ while (val > NX7F) {
136
+ ++this.len;
137
+ val = val >> ND07;
138
+ }
139
+ ++this.len;
140
+ }
141
+ }
142
+
143
+ const ND07 = BigInt(7);
144
+ const NX7F = BigInt(0x7f);