typia 5.0.0-dev.20230821 → 5.0.0-dev.20230822

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/lib/factories/MetadataFactory.js +9 -0
  2. package/lib/factories/MetadataFactory.js.map +1 -1
  3. package/lib/factories/ProtobufFactory.js +8 -0
  4. package/lib/factories/ProtobufFactory.js.map +1 -1
  5. package/lib/functional/$ProtobufReader.d.ts +2 -0
  6. package/lib/functional/$ProtobufReader.js +14 -3
  7. package/lib/functional/$ProtobufReader.js.map +1 -1
  8. package/lib/functional/$ProtobufSizer.js +1 -1
  9. package/lib/functional/$ProtobufSizer.js.map +1 -1
  10. package/lib/functional/$ProtobufWriter.js +0 -1
  11. package/lib/functional/$ProtobufWriter.js.map +1 -1
  12. package/lib/programmers/helpers/ProtobufUtil.d.ts +3 -1
  13. package/lib/programmers/helpers/ProtobufUtil.js +5 -1
  14. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  15. package/lib/programmers/json/JsonValidateParseProgrammer.js +2 -3
  16. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  17. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +2 -3
  18. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  19. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +357 -6
  20. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  21. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +15 -60
  22. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  23. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +1 -1
  24. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  25. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +1 -1
  26. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  27. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +3 -4
  28. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  29. package/lib/protobuf.d.ts +8 -9
  30. package/lib/protobuf.js +7 -0
  31. package/lib/protobuf.js.map +1 -1
  32. package/package.json +1 -1
  33. package/src/factories/ExpressionFactory.ts +115 -115
  34. package/src/factories/MetadataCollection.ts +269 -269
  35. package/src/factories/MetadataFactory.ts +46 -34
  36. package/src/factories/MetadataTagFactory.ts +364 -364
  37. package/src/factories/ProtobufFactory.ts +266 -251
  38. package/src/factories/StatementFactory.ts +72 -72
  39. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  40. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  41. package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
  42. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  43. package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
  44. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
  45. package/src/factories/internal/metadata/explore_metadata.ts +38 -38
  46. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  47. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  48. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  49. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  50. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  51. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  52. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  53. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +84 -84
  54. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  55. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  56. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  57. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  58. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  59. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  60. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
  61. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  62. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  63. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  64. package/src/functional/$ProtobufReader.ts +201 -188
  65. package/src/functional/$ProtobufSizer.ts +147 -144
  66. package/src/functional/$ProtobufWriter.ts +152 -152
  67. package/src/functional/$number.ts +13 -13
  68. package/src/functional/$strlen.ts +7 -7
  69. package/src/functional/$varint.ts +130 -130
  70. package/src/functional/$zigzag.ts +39 -39
  71. package/src/functional/IProtobufWriter.ts +18 -18
  72. package/src/functional/Namespace.ts +149 -149
  73. package/src/json.ts +648 -648
  74. package/src/misc.ts +651 -651
  75. package/src/module.ts +708 -708
  76. package/src/programmers/CheckerProgrammer.ts +1173 -1173
  77. package/src/programmers/FeatureProgrammer.ts +497 -497
  78. package/src/programmers/IsProgrammer.ts +239 -239
  79. package/src/programmers/IsPruneProgrammer.ts +73 -73
  80. package/src/programmers/RandomProgrammer.ts +578 -578
  81. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  82. package/src/programmers/helpers/CloneJoiner.ts +107 -107
  83. package/src/programmers/helpers/FunctionImporeter.ts +89 -89
  84. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  85. package/src/programmers/helpers/ProtobufUtil.ts +29 -24
  86. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  87. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  88. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  89. package/src/programmers/helpers/RandomRanger.ts +208 -208
  90. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  91. package/src/programmers/helpers/UnionExplorer.ts +310 -310
  92. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  93. package/src/programmers/helpers/disable_function_importer_declare.ts +27 -27
  94. package/src/programmers/internal/application_alias.ts +66 -66
  95. package/src/programmers/internal/application_array.ts +30 -30
  96. package/src/programmers/internal/application_constant.ts +26 -26
  97. package/src/programmers/internal/application_default.ts +17 -17
  98. package/src/programmers/internal/application_default_string.ts +33 -33
  99. package/src/programmers/internal/application_native.ts +39 -39
  100. package/src/programmers/internal/application_number.ts +81 -81
  101. package/src/programmers/internal/application_object.ts +165 -165
  102. package/src/programmers/internal/application_resolved.ts +55 -55
  103. package/src/programmers/internal/application_schema.ts +157 -157
  104. package/src/programmers/internal/application_string.ts +44 -44
  105. package/src/programmers/internal/application_templates.ts +25 -25
  106. package/src/programmers/internal/application_tuple.ts +57 -57
  107. package/src/programmers/internal/check_array.ts +30 -30
  108. package/src/programmers/internal/check_array_length.ts +35 -35
  109. package/src/programmers/internal/check_bigint.ts +110 -110
  110. package/src/programmers/internal/check_custom.ts +31 -31
  111. package/src/programmers/internal/check_number.ts +258 -258
  112. package/src/programmers/internal/check_string.ts +25 -25
  113. package/src/programmers/internal/check_string_tags.ts +67 -67
  114. package/src/programmers/internal/check_template.ts +56 -56
  115. package/src/programmers/internal/check_union_array_like.ts +329 -329
  116. package/src/programmers/internal/decode_union_object.ts +84 -84
  117. package/src/programmers/internal/feature_object_entries.ts +63 -63
  118. package/src/programmers/internal/get_comment_tags.ts +23 -23
  119. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  120. package/src/programmers/internal/prune_object_properties.ts +60 -60
  121. package/src/programmers/internal/random_custom.ts +29 -29
  122. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  123. package/src/programmers/internal/template_to_pattern.ts +15 -15
  124. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  125. package/src/programmers/json/JsonApplicationProgrammer.ts +47 -47
  126. package/src/programmers/json/JsonAssertParseProgrammer.ts +66 -66
  127. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +66 -66
  128. package/src/programmers/json/JsonIsParseProgrammer.ts +72 -72
  129. package/src/programmers/json/JsonIsStringifyProgrammer.ts +76 -76
  130. package/src/programmers/json/JsonStringifyProgrammer.ts +987 -987
  131. package/src/programmers/json/JsonValidateParseProgrammer.ts +63 -70
  132. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +84 -84
  133. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
  134. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +68 -68
  135. package/src/programmers/misc/MiscCloneProgrammer.ts +587 -587
  136. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  137. package/src/programmers/misc/MiscLiteralsProgrammer.ts +64 -64
  138. package/src/programmers/misc/MiscPruneProgrammer.ts +542 -542
  139. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
  140. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +78 -78
  141. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +66 -69
  142. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +66 -66
  143. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +653 -38
  144. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +812 -920
  145. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +75 -75
  146. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +76 -76
  147. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +178 -178
  148. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -83
  149. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +86 -86
  150. package/src/protobuf.ts +249 -239
  151. package/src/schemas/json/IJsonApplication.ts +8 -8
  152. package/src/schemas/json/IJsonComponents.ts +33 -33
  153. package/src/schemas/json/IJsonSchema.ts +133 -133
  154. package/src/schemas/metadata/ICommentTag.ts +4 -4
  155. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  156. package/src/schemas/metadata/IMetadata.ts +28 -28
  157. package/src/schemas/metadata/IMetadataAlias.ts +14 -14
  158. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  159. package/src/schemas/metadata/IMetadataArray.ts +10 -10
  160. package/src/schemas/metadata/IMetadataCollection.ts +11 -11
  161. package/src/schemas/metadata/IMetadataConstant.ts +16 -16
  162. package/src/schemas/metadata/IMetadataDictionary.ts +14 -14
  163. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  164. package/src/schemas/metadata/IMetadataObject.ts +18 -18
  165. package/src/schemas/metadata/IMetadataProperty.ts +11 -11
  166. package/src/schemas/metadata/IMetadataResolved.ts +6 -6
  167. package/src/schemas/metadata/IMetadataTag.ts +112 -112
  168. package/src/schemas/metadata/IMetadataTuple.ts +10 -10
  169. package/src/schemas/metadata/Metadata.ts +637 -637
  170. package/src/schemas/metadata/MetadataAlias.ts +66 -66
  171. package/src/schemas/metadata/MetadataArray.ts +55 -55
  172. package/src/schemas/metadata/MetadataConstant.ts +3 -3
  173. package/src/schemas/metadata/MetadataObject.ts +139 -139
  174. package/src/schemas/metadata/MetadataProperty.ts +64 -64
  175. package/src/schemas/metadata/MetadataResolved.ts +51 -51
  176. package/src/schemas/metadata/MetadataTuple.ts +58 -58
  177. package/src/transformers/CallExpressionTransformer.ts +240 -240
  178. package/src/transformers/features/AssertTransformer.ts +11 -11
  179. package/src/transformers/features/CreateAssertTransformer.ts +13 -13
  180. package/src/transformers/features/CreateIsTransformer.ts +11 -11
  181. package/src/transformers/features/CreateRandomTransformer.ts +39 -39
  182. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  183. package/src/transformers/features/IsTransformer.ts +11 -11
  184. package/src/transformers/features/RandomTransformer.ts +42 -42
  185. package/src/transformers/features/ValidateTransformer.ts +11 -11
  186. package/src/transformers/features/json/JsonApplicationTransformer.ts +111 -111
  187. package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
  188. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  189. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +10 -10
  190. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  191. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  192. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +10 -10
  193. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  194. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +10 -10
  195. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  196. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  197. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
  198. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  199. package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
  200. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  201. package/src/transformers/features/misc/MetadataTransformer.ts +53 -53
  202. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
  203. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
  204. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  205. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +10 -10
  206. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +10 -10
  207. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  208. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  209. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  210. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  211. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +10 -10
  212. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +10 -10
  213. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  214. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  215. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +28 -28
  216. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  217. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
  218. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
  219. package/src/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.ts +12 -12
  220. package/src/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.ts +12 -12
  221. package/src/transformers/features/protobuf/CreateProtobufDecodeTransformer.ts +9 -9
  222. package/src/transformers/features/protobuf/CreateProtobufEncodeTransformer.ts +9 -9
  223. package/src/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.ts +12 -12
  224. package/src/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.ts +12 -12
  225. package/src/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.ts +12 -12
  226. package/src/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.ts +12 -12
  227. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  228. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  229. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +10 -10
  230. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +10 -10
  231. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +10 -10
  232. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +10 -10
  233. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +31 -31
  234. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +12 -12
  235. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +12 -12
  236. 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);