typia 5.0.0-dev.20230821 → 5.0.0-dev.20230823

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