typia 5.0.4 → 5.0.5-dev.20230921

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 (291) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/IRandomGenerator.ts +35 -35
  4. package/src/IValidation.ts +21 -21
  5. package/src/Primitive.ts +135 -135
  6. package/src/Resolved.ts +116 -116
  7. package/src/TypeGuardError.ts +36 -36
  8. package/src/executable/TypiaGenerateWizard.ts +85 -85
  9. package/src/executable/TypiaSetupWizard.ts +153 -153
  10. package/src/executable/setup/ArgumentParser.ts +45 -45
  11. package/src/executable/setup/CommandExecutor.ts +8 -8
  12. package/src/executable/setup/FileRetriever.ts +22 -22
  13. package/src/executable/setup/PackageManager.ts +71 -71
  14. package/src/executable/setup/PluginConfigurator.ts +70 -70
  15. package/src/executable/typia.ts +52 -52
  16. package/src/factories/CommentFactory.ts +84 -84
  17. package/src/factories/ExpressionFactory.ts +159 -159
  18. package/src/factories/IdentifierFactory.ts +74 -74
  19. package/src/factories/JsonMetadataFactory.ts +43 -43
  20. package/src/factories/LiteralFactory.ts +47 -47
  21. package/src/factories/MetadataCollection.ts +269 -269
  22. package/src/factories/MetadataCommentTagFactory.ts +629 -629
  23. package/src/factories/MetadataFactory.ts +214 -214
  24. package/src/factories/MetadataTypeTagFactory.ts +313 -313
  25. package/src/factories/NumericRangeFactory.ts +33 -33
  26. package/src/factories/ProtobufFactory.ts +272 -272
  27. package/src/factories/StatementFactory.ts +72 -72
  28. package/src/factories/TemplateFactory.ts +58 -58
  29. package/src/factories/TypeFactory.ts +119 -119
  30. package/src/factories/ValueFactory.ts +12 -12
  31. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  32. package/src/factories/internal/metadata/emend_metadata_atomics.ts +40 -40
  33. package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
  34. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +41 -41
  35. package/src/factories/internal/metadata/emplace_metadata_object.ts +150 -150
  36. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +60 -60
  37. package/src/factories/internal/metadata/explore_metadata.ts +32 -32
  38. package/src/factories/internal/metadata/iterate_metadata.ts +101 -101
  39. package/src/factories/internal/metadata/iterate_metadata_alias.ts +35 -35
  40. package/src/factories/internal/metadata/iterate_metadata_array.ts +37 -37
  41. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  42. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  43. package/src/factories/internal/metadata/iterate_metadata_collection.ts +141 -141
  44. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +26 -26
  45. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  46. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +197 -197
  47. package/src/factories/internal/metadata/iterate_metadata_map.ts +57 -57
  48. package/src/factories/internal/metadata/iterate_metadata_native.ts +210 -210
  49. package/src/factories/internal/metadata/iterate_metadata_object.ts +44 -44
  50. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +52 -52
  51. package/src/factories/internal/metadata/iterate_metadata_set.ts +42 -42
  52. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  53. package/src/factories/internal/metadata/iterate_metadata_template.ts +47 -47
  54. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
  55. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
  56. package/src/functional/$ProtobufReader.ts +201 -201
  57. package/src/functional/$ProtobufSizer.ts +147 -147
  58. package/src/functional/$ProtobufWriter.ts +151 -151
  59. package/src/functional/$any.ts +4 -4
  60. package/src/functional/$clone.ts +4 -4
  61. package/src/functional/$dictionary.ts +25 -25
  62. package/src/functional/$every.ts +11 -11
  63. package/src/functional/$guard.ts +35 -35
  64. package/src/functional/$is_between.ts +2 -2
  65. package/src/functional/$join.ts +46 -46
  66. package/src/functional/$number.ts +13 -13
  67. package/src/functional/$report.ts +15 -15
  68. package/src/functional/$rest.ts +3 -3
  69. package/src/functional/$string.ts +50 -50
  70. package/src/functional/$strlen.ts +7 -7
  71. package/src/functional/$tail.ts +5 -5
  72. package/src/functional/$varint.ts +130 -130
  73. package/src/functional/$zigzag.ts +39 -39
  74. package/src/functional/IProtobufWriter.ts +18 -18
  75. package/src/functional/Namespace.ts +133 -133
  76. package/src/index.ts +4 -4
  77. package/src/json.ts +648 -648
  78. package/src/misc.ts +651 -651
  79. package/src/module.ts +656 -656
  80. package/src/programmers/AssertProgrammer.ts +317 -317
  81. package/src/programmers/CheckerProgrammer.ts +1137 -1137
  82. package/src/programmers/FeatureProgrammer.ts +478 -478
  83. package/src/programmers/IsProgrammer.ts +252 -252
  84. package/src/programmers/RandomProgrammer.ts +878 -878
  85. package/src/programmers/TypiaProgrammer.ts +163 -163
  86. package/src/programmers/ValidateProgrammer.ts +346 -346
  87. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  88. package/src/programmers/helpers/CloneJoiner.ts +144 -144
  89. package/src/programmers/helpers/FunctionImporeter.ts +91 -91
  90. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  91. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  92. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  93. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  94. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  95. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  96. package/src/programmers/helpers/RandomJoiner.ts +151 -151
  97. package/src/programmers/helpers/RandomRanger.ts +173 -173
  98. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  99. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  100. package/src/programmers/helpers/UnionExplorer.ts +305 -305
  101. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  102. package/src/programmers/helpers/disable_function_importer_declare.ts +32 -32
  103. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  104. package/src/programmers/internal/application_alias.ts +65 -65
  105. package/src/programmers/internal/application_array.ts +53 -53
  106. package/src/programmers/internal/application_boolean.ts +15 -15
  107. package/src/programmers/internal/application_constant.ts +26 -26
  108. package/src/programmers/internal/application_default.ts +17 -17
  109. package/src/programmers/internal/application_default_string.ts +37 -37
  110. package/src/programmers/internal/application_escaped.ts +55 -55
  111. package/src/programmers/internal/application_native.ts +39 -39
  112. package/src/programmers/internal/application_number.ts +88 -88
  113. package/src/programmers/internal/application_object.ts +162 -162
  114. package/src/programmers/internal/application_schema.ts +175 -175
  115. package/src/programmers/internal/application_string.ts +51 -51
  116. package/src/programmers/internal/application_templates.ts +25 -25
  117. package/src/programmers/internal/application_tuple.ts +58 -58
  118. package/src/programmers/internal/check_array_length.ts +41 -41
  119. package/src/programmers/internal/check_bigint.ts +45 -45
  120. package/src/programmers/internal/check_dynamic_properties.ts +194 -194
  121. package/src/programmers/internal/check_everything.ts +28 -28
  122. package/src/programmers/internal/check_native.ts +21 -21
  123. package/src/programmers/internal/check_number.ts +105 -105
  124. package/src/programmers/internal/check_object.ts +55 -55
  125. package/src/programmers/internal/check_string.ts +45 -45
  126. package/src/programmers/internal/check_template.ts +61 -61
  127. package/src/programmers/internal/check_union_array_like.ts +323 -323
  128. package/src/programmers/internal/decode_union_object.ts +84 -84
  129. package/src/programmers/internal/feature_object_entries.ts +58 -58
  130. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  131. package/src/programmers/internal/prune_object_properties.ts +60 -60
  132. package/src/programmers/internal/random_custom.ts +37 -37
  133. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  134. package/src/programmers/internal/stringify_native.ts +7 -7
  135. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  136. package/src/programmers/internal/template_to_pattern.ts +15 -15
  137. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
  138. package/src/programmers/json/JsonApplicationProgrammer.ts +50 -50
  139. package/src/programmers/json/JsonAssertParseProgrammer.ts +71 -71
  140. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +66 -66
  141. package/src/programmers/json/JsonIsParseProgrammer.ts +77 -77
  142. package/src/programmers/json/JsonIsStringifyProgrammer.ts +76 -76
  143. package/src/programmers/json/JsonStringifyProgrammer.ts +964 -964
  144. package/src/programmers/json/JsonValidateParseProgrammer.ts +68 -68
  145. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +84 -84
  146. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
  147. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +68 -68
  148. package/src/programmers/misc/MiscCloneProgrammer.ts +774 -774
  149. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  150. package/src/programmers/misc/MiscIsPruneProgrammer.ts +73 -73
  151. package/src/programmers/misc/MiscLiteralsProgrammer.ts +69 -69
  152. package/src/programmers/misc/MiscPruneProgrammer.ts +550 -550
  153. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
  154. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +78 -78
  155. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -75
  156. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +66 -66
  157. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +655 -655
  158. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +883 -883
  159. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +85 -85
  160. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +76 -76
  161. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +165 -165
  162. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  163. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +86 -86
  164. package/src/protobuf.ts +881 -881
  165. package/src/schemas/json/IJsonApplication.ts +8 -8
  166. package/src/schemas/json/IJsonComponents.ts +33 -33
  167. package/src/schemas/json/IJsonSchema.ts +110 -110
  168. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  169. package/src/schemas/metadata/IMetadata.ts +34 -34
  170. package/src/schemas/metadata/IMetadataAlias.ts +12 -12
  171. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  172. package/src/schemas/metadata/IMetadataArray.ts +7 -7
  173. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  174. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  175. package/src/schemas/metadata/IMetadataCollection.ts +11 -11
  176. package/src/schemas/metadata/IMetadataConstant.ts +16 -16
  177. package/src/schemas/metadata/IMetadataDictionary.ts +14 -14
  178. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  179. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  180. package/src/schemas/metadata/IMetadataObject.ts +18 -18
  181. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  182. package/src/schemas/metadata/IMetadataTuple.ts +7 -7
  183. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  184. package/src/schemas/metadata/IMetadataTypeTag.ts +8 -8
  185. package/src/schemas/metadata/Metadata.ts +685 -685
  186. package/src/schemas/metadata/MetadataAlias.ts +61 -61
  187. package/src/schemas/metadata/MetadataArray.ts +49 -49
  188. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  189. package/src/schemas/metadata/MetadataAtomic.ts +42 -42
  190. package/src/schemas/metadata/MetadataConstant.ts +3 -3
  191. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  192. package/src/schemas/metadata/MetadataObject.ts +139 -139
  193. package/src/schemas/metadata/MetadataProperty.ts +59 -59
  194. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  195. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  196. package/src/tags/ExclusiveMaximum.ts +13 -13
  197. package/src/tags/ExclusiveMinimum.ts +13 -13
  198. package/src/tags/Format.ts +30 -30
  199. package/src/tags/MaxItems.ts +9 -9
  200. package/src/tags/MaxLength.ts +9 -9
  201. package/src/tags/Maximum.ts +13 -13
  202. package/src/tags/MinItems.ts +9 -9
  203. package/src/tags/MinLength.ts +9 -9
  204. package/src/tags/Minimum.ts +13 -13
  205. package/src/tags/MultipleOf.ts +15 -15
  206. package/src/tags/Pattern.ts +8 -8
  207. package/src/tags/TagBase.ts +68 -68
  208. package/src/tags/Type.ts +27 -27
  209. package/src/tags/index.ts +13 -13
  210. package/src/transform.ts +35 -35
  211. package/src/transformers/CallExpressionTransformer.ts +243 -243
  212. package/src/transformers/FileTransformer.ts +57 -57
  213. package/src/transformers/IProject.ts +15 -15
  214. package/src/transformers/ITransformOptions.ts +62 -62
  215. package/src/transformers/ImportTransformer.ts +66 -66
  216. package/src/transformers/NodeTransformer.ts +13 -13
  217. package/src/transformers/TransformerError.ts +55 -55
  218. package/src/transformers/features/AssertTransformer.ts +11 -11
  219. package/src/transformers/features/CreateAssertTransformer.ts +13 -13
  220. package/src/transformers/features/CreateIsTransformer.ts +11 -11
  221. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  222. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  223. package/src/transformers/features/IsTransformer.ts +11 -11
  224. package/src/transformers/features/RandomTransformer.ts +46 -46
  225. package/src/transformers/features/ValidateTransformer.ts +11 -11
  226. package/src/transformers/features/json/JsonApplicationTransformer.ts +118 -118
  227. package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
  228. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  229. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +10 -10
  230. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  231. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  232. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +10 -10
  233. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  234. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +10 -10
  235. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  236. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  237. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
  238. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  239. package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
  240. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  241. package/src/transformers/features/misc/MetadataTransformer.ts +61 -61
  242. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
  243. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
  244. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  245. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +10 -10
  246. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +10 -10
  247. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  248. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  249. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  250. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  251. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +10 -10
  252. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +10 -10
  253. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  254. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  255. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
  256. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  257. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
  258. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
  259. package/src/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.ts +12 -12
  260. package/src/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.ts +12 -12
  261. package/src/transformers/features/protobuf/CreateProtobufDecodeTransformer.ts +9 -9
  262. package/src/transformers/features/protobuf/CreateProtobufEncodeTransformer.ts +9 -9
  263. package/src/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.ts +12 -12
  264. package/src/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.ts +12 -12
  265. package/src/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.ts +12 -12
  266. package/src/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.ts +12 -12
  267. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  268. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  269. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +10 -10
  270. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +10 -10
  271. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +10 -10
  272. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +10 -10
  273. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
  274. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +12 -12
  275. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +12 -12
  276. package/src/transformers/internal/GenericTransformer.ts +104 -104
  277. package/src/typings/Atomic.ts +18 -18
  278. package/src/typings/ClassProperties.ts +5 -5
  279. package/src/typings/Customizable.ts +5 -5
  280. package/src/typings/OmitNever.ts +3 -3
  281. package/src/typings/ProtobufAtomic.ts +19 -19
  282. package/src/typings/SpecialFields.ts +3 -3
  283. package/src/typings/ValidationPipe.ts +9 -9
  284. package/src/typings/Writable.ts +11 -11
  285. package/src/utils/ArrayUtil.ts +45 -45
  286. package/src/utils/Escaper.ts +46 -46
  287. package/src/utils/MapUtil.ts +12 -12
  288. package/src/utils/NameEncoder.ts +32 -32
  289. package/src/utils/PatternUtil.ts +33 -33
  290. package/src/utils/RandomGenerator.ts +83 -83
  291. package/src/utils/Singleton.ts +17 -17
@@ -1,201 +1,201 @@
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);
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);