@futpib/parser 1.0.1 → 1.0.3

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 (425) hide show
  1. package/.github/copilot-instructions.md +149 -0
  2. package/.github/workflows/copilot-setup-steps.yml +18 -0
  3. package/.github/workflows/main.yml +29 -8
  4. package/.yarn/releases/yarn-4.9.4.cjs +942 -0
  5. package/.yarnrc.yml +1 -1
  6. package/build/allSettledStream.js +32 -14
  7. package/build/allSettledStream.test.js +32 -0
  8. package/build/androidPackage.d.ts +39 -0
  9. package/build/androidPackageParser.d.ts +17 -0
  10. package/build/androidPackageParser.js +185 -0
  11. package/build/androidPackageParser.test.js +22 -0
  12. package/build/androidPackageUnparser.d.ts +4 -0
  13. package/build/androidPackageUnparser.js +94 -0
  14. package/build/androidPackageUnparser.test.js +26 -0
  15. package/build/arbitrarilySlicedAsyncInterable.d.ts +3 -1
  16. package/build/arbitrarilySlicedAsyncInterable.js +3 -3
  17. package/build/arbitrarilySlicedAsyncInterator.js +2 -1
  18. package/build/arbitraryDalvikBytecode.d.ts +4 -0
  19. package/build/arbitraryDalvikBytecode.js +640 -0
  20. package/build/arbitraryDalvikExecutable.d.ts +3 -0
  21. package/build/arbitraryDalvikExecutable.js +282 -0
  22. package/build/arbitraryDosDateTime.js +1 -0
  23. package/build/arbitraryZipStream.js +1 -1
  24. package/build/arrayParser.js +2 -2
  25. package/build/arrayParser.test.js +3 -3
  26. package/build/arrayUnparser.d.ts +1 -1
  27. package/build/backsmali.d.ts +3 -0
  28. package/build/backsmali.js +50 -0
  29. package/build/bsonParser.js +6 -2
  30. package/build/customInvariant.d.ts +2 -1
  31. package/build/customInvariant.js +4 -6
  32. package/build/dalvikBytecodeParser/formatParsers.d.ts +171 -0
  33. package/build/dalvikBytecodeParser/formatParsers.js +304 -0
  34. package/build/dalvikBytecodeParser/formatSizes.d.ts +34 -0
  35. package/build/dalvikBytecodeParser/formatSizes.js +34 -0
  36. package/build/dalvikBytecodeParser/operationFormats.d.ts +225 -0
  37. package/build/dalvikBytecodeParser/operationFormats.js +225 -0
  38. package/build/dalvikBytecodeParser.d.ts +1207 -0
  39. package/build/dalvikBytecodeParser.js +1289 -0
  40. package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +152 -0
  41. package/build/dalvikBytecodeUnparser/formatUnparsers.js +225 -0
  42. package/build/dalvikBytecodeUnparser.d.ts +3 -0
  43. package/build/dalvikBytecodeUnparser.js +642 -0
  44. package/build/dalvikBytecodeUnparser.test.js +25 -0
  45. package/build/dalvikExecutable.d.ts +215 -0
  46. package/build/dalvikExecutable.js +56 -0
  47. package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +4 -0
  48. package/build/dalvikExecutableParser/stringSyntaxParser.js +76 -0
  49. package/build/dalvikExecutableParser/typeParsers.d.ts +11 -0
  50. package/build/dalvikExecutableParser/typeParsers.js +39 -0
  51. package/build/dalvikExecutableParser/typedNumbers.d.ts +106 -0
  52. package/build/dalvikExecutableParser/typedNumbers.js +18 -0
  53. package/build/dalvikExecutableParser.d.ts +5 -0
  54. package/build/dalvikExecutableParser.js +1757 -0
  55. package/build/dalvikExecutableParser.test.js +72 -0
  56. package/build/dalvikExecutableParserAgainstSmaliParser.test.js +275 -0
  57. package/build/dalvikExecutableUnparser/annotationUnparsers.d.ts +14 -0
  58. package/build/dalvikExecutableUnparser/annotationUnparsers.js +97 -0
  59. package/build/dalvikExecutableUnparser/poolBuilders.d.ts +49 -0
  60. package/build/dalvikExecutableUnparser/poolBuilders.js +140 -0
  61. package/build/dalvikExecutableUnparser/poolScanners.d.ts +4 -0
  62. package/build/dalvikExecutableUnparser/poolScanners.js +220 -0
  63. package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +25 -0
  64. package/build/dalvikExecutableUnparser/sectionUnparsers.js +581 -0
  65. package/build/dalvikExecutableUnparser/utils.d.ts +10 -0
  66. package/build/dalvikExecutableUnparser/utils.js +108 -0
  67. package/build/dalvikExecutableUnparser.d.ts +4 -0
  68. package/build/dalvikExecutableUnparser.js +406 -0
  69. package/build/dalvikExecutableUnparser.test.js +31 -0
  70. package/build/debugLogInputParser.d.ts +4 -0
  71. package/build/debugLogInputParser.js +16 -0
  72. package/build/debugLogParser.js +14 -3
  73. package/build/disjunctionParser.d.ts +2 -1
  74. package/build/disjunctionParser.js +6 -4
  75. package/build/elementTerminatedArrayParser.d.ts +3 -0
  76. package/build/elementTerminatedArrayParser.js +18 -0
  77. package/build/elementTerminatedArrayParser.test.js +52 -0
  78. package/build/elementTerminatedSequenceArrayParser.d.ts +3 -0
  79. package/build/elementTerminatedSequenceArrayParser.js +32 -0
  80. package/build/elementTerminatedSequenceArrayParser.test.js +34 -0
  81. package/build/elementTerminatedSequenceParser.d.ts +3 -0
  82. package/build/elementTerminatedSequenceParser.js +27 -0
  83. package/build/elementTerminatedSequenceParser.test.js +34 -0
  84. package/build/endOfInputParser.d.ts +1 -1
  85. package/build/exactElementParser.js +10 -5
  86. package/build/exactElementSwitchParser.d.ts +3 -0
  87. package/build/exactElementSwitchParser.js +22 -0
  88. package/build/exactSequenceParser.d.ts +2 -1
  89. package/build/exactSequenceParser.js +12 -2
  90. package/build/fetchCid.d.ts +1 -0
  91. package/build/fetchCid.js +103 -0
  92. package/build/fetchCid.test.js +16 -0
  93. package/build/fixedLengthSequenceParser.d.ts +1 -0
  94. package/build/fixedLengthSequenceParser.js +18 -1
  95. package/build/fixedLengthSequenceParser.test.js +41 -0
  96. package/build/hasExecutable.d.ts +1 -0
  97. package/build/hasExecutable.js +8 -0
  98. package/build/highResolutionTimer.d.ts +16 -0
  99. package/build/highResolutionTimer.js +42 -0
  100. package/build/inputReader.d.ts +11 -0
  101. package/build/inputReader.js +37 -0
  102. package/build/inputReader.test.js +161 -8
  103. package/build/inputReaderState.d.ts +10 -0
  104. package/build/inputReaderState.js +16 -0
  105. package/build/inspect.d.ts +1 -0
  106. package/build/inspect.js +7 -0
  107. package/build/javaKeyStoreParser.test.js +8 -8
  108. package/build/jsonParser.d.ts +2 -0
  109. package/build/jsonParser.js +19 -22
  110. package/build/lazyMessageError.d.ts +48 -0
  111. package/build/lazyMessageError.js +53 -0
  112. package/build/lazyMessageError.test.d.ts +1 -0
  113. package/build/lazyMessageError.test.js +15 -0
  114. package/build/leb128Parser.d.ts +7 -0
  115. package/build/leb128Parser.js +82 -0
  116. package/build/leb128Parser.test.d.ts +1 -0
  117. package/build/leb128Parser.test.js +107 -0
  118. package/build/lookaheadParser.d.ts +2 -0
  119. package/build/lookaheadParser.js +14 -0
  120. package/build/negativeLookaheadParser.js +22 -16
  121. package/build/negativeLookaheadParser.test.d.ts +1 -0
  122. package/build/negativeLookaheadParser.test.js +30 -0
  123. package/build/noStackCaptureOverheadError.d.ts +4 -0
  124. package/build/noStackCaptureOverheadError.js +9 -0
  125. package/build/noStackCaptureOverheadError.test.d.ts +1 -0
  126. package/build/noStackCaptureOverheadError.test.js +15 -0
  127. package/build/nonEmptyArrayParser.d.ts +2 -0
  128. package/build/nonEmptyArrayParser.js +32 -0
  129. package/build/nonEmptyArrayParser.test.d.ts +1 -0
  130. package/build/nonEmptyArrayParser.test.js +17 -0
  131. package/build/optionalParser.js +2 -2
  132. package/build/parser.d.ts +11 -1
  133. package/build/parser.js +82 -32
  134. package/build/parser.test.js +141 -25
  135. package/build/parserAccessorParser.js +9 -1
  136. package/build/parserConsumedSequenceParser.d.ts +1 -1
  137. package/build/parserConsumedSequenceParser.js +21 -16
  138. package/build/parserContext.d.ts +22 -6
  139. package/build/parserContext.js +113 -57
  140. package/build/parserContext.test.js +33 -2
  141. package/build/parserCreatorCompose.d.ts +1 -0
  142. package/build/parserCreatorCompose.js +8 -2
  143. package/build/parserError.d.ts +605 -40
  144. package/build/parserError.js +98 -53
  145. package/build/parserImplementationInvariant.d.ts +1 -1
  146. package/build/parserImplementationInvariant.js +2 -2
  147. package/build/parserInputCompanion.d.ts +15 -0
  148. package/build/parserInputCompanion.js +38 -0
  149. package/build/promiseCompose.d.ts +1 -1
  150. package/build/promiseCompose.js +11 -1
  151. package/build/promiseSettled.d.ts +1 -0
  152. package/build/promiseSettled.js +4 -0
  153. package/build/separatedArrayParser.d.ts +2 -0
  154. package/build/separatedArrayParser.js +39 -0
  155. package/build/separatedArrayParser.test.d.ts +1 -0
  156. package/build/separatedArrayParser.test.js +21 -0
  157. package/build/separatedNonEmptyArrayParser.d.ts +2 -0
  158. package/build/separatedNonEmptyArrayParser.js +40 -0
  159. package/build/separatedNonEmptyArrayParser.test.d.ts +1 -0
  160. package/build/separatedNonEmptyArrayParser.test.js +66 -0
  161. package/build/sequenceBuffer.d.ts +10 -0
  162. package/build/sequenceBuffer.js +54 -2
  163. package/build/sequenceBuffer.test.js +57 -0
  164. package/build/sequenceTerminatedSequenceParser.d.ts +5 -0
  165. package/build/sequenceTerminatedSequenceParser.js +32 -0
  166. package/build/sequenceTerminatedSequenceParser.test.d.ts +1 -0
  167. package/build/sequenceTerminatedSequenceParser.test.js +37 -0
  168. package/build/sequenceUnparser.d.ts +1 -1
  169. package/build/skipParser.d.ts +1 -1
  170. package/build/skipParser.js +4 -2
  171. package/build/skipToParser.d.ts +2 -0
  172. package/build/skipToParser.js +11 -0
  173. package/build/sliceBoundedParser.d.ts +1 -1
  174. package/build/sliceBoundedParser.js +7 -2
  175. package/build/sliceBoundedParser.test.js +30 -1
  176. package/build/smali.d.ts +1 -0
  177. package/build/smali.js +21 -0
  178. package/build/smaliParser.d.ts +68 -0
  179. package/build/smaliParser.js +2081 -0
  180. package/build/smaliParser.test.d.ts +1 -0
  181. package/build/smaliParser.test.js +410 -0
  182. package/build/stringFromAsyncIterable.d.ts +1 -0
  183. package/build/stringFromAsyncIterable.js +7 -0
  184. package/build/terminatedArrayParser.d.ts +3 -1
  185. package/build/terminatedArrayParser.js +79 -2
  186. package/build/terminatedArrayParser.test.d.ts +1 -0
  187. package/build/terminatedArrayParser.test.js +131 -0
  188. package/build/toAsyncIterable.d.ts +1 -0
  189. package/build/toAsyncIterable.js +7 -0
  190. package/build/toAsyncIterator.d.ts +1 -0
  191. package/build/toAsyncIterator.js +33 -0
  192. package/build/tupleParser.d.ts +4 -0
  193. package/build/tupleParser.js +1 -5
  194. package/build/unionParser.d.ts +2 -1
  195. package/build/unionParser.js +29 -14
  196. package/build/unionParser.test.d.ts +1 -0
  197. package/build/unionParser.test.js +60 -0
  198. package/build/unparser.d.ts +3 -3
  199. package/build/unparser.js +6 -4
  200. package/build/unparser.test.js +7 -19
  201. package/build/unparserContext.d.ts +2 -2
  202. package/build/unparserContext.js +2 -3
  203. package/build/unparserError.d.ts +2 -1
  204. package/build/unparserError.js +2 -1
  205. package/build/unparserImplementationInvariant.d.ts +1 -1
  206. package/build/unparserOutputCompanion.d.ts +1 -1
  207. package/build/unparserOutputCompanion.js +1 -1
  208. package/build/zipParser.d.ts +7 -2
  209. package/build/zipParser.js +36 -12
  210. package/build/zipUnparser.d.ts +7 -4
  211. package/build/zipUnparser.js +64 -45
  212. package/build/zipUnparser.test.js +15 -15
  213. package/package.json +33 -24
  214. package/src/allSettledStream.test.ts +40 -0
  215. package/src/allSettledStream.ts +47 -15
  216. package/src/androidPackage.ts +48 -0
  217. package/src/androidPackageParser.test.ts +27 -0
  218. package/src/{apkParser.test.ts.md → androidPackageParser.test.ts.md} +4 -4
  219. package/src/androidPackageParser.test.ts.snap +0 -0
  220. package/src/androidPackageParser.ts +398 -0
  221. package/src/androidPackageUnparser.test.ts +34 -0
  222. package/src/androidPackageUnparser.ts +126 -0
  223. package/src/arbitrarilySlicedAsyncInterable.ts +7 -2
  224. package/src/arbitrarilySlicedAsyncInterator.ts +4 -4
  225. package/src/arbitraryDalvikBytecode.ts +992 -0
  226. package/src/arbitraryDalvikExecutable.ts +434 -0
  227. package/src/arbitraryDosDateTime.ts +1 -0
  228. package/src/arbitraryZipStream.ts +1 -1
  229. package/src/arrayParser.test.ts +3 -3
  230. package/src/arrayParser.ts +2 -2
  231. package/src/arrayUnparser.ts +2 -2
  232. package/src/backsmali.ts +74 -0
  233. package/src/bsonParser.test.ts +12 -14
  234. package/src/bsonParser.ts +13 -2
  235. package/src/customInvariant.ts +8 -12
  236. package/src/dalvikBytecodeParser/formatParsers.ts +780 -0
  237. package/src/dalvikBytecodeParser/formatSizes.ts +35 -0
  238. package/src/dalvikBytecodeParser/operationFormats.ts +226 -0
  239. package/src/dalvikBytecodeParser.ts +2873 -0
  240. package/src/dalvikBytecodeUnparser/formatUnparsers.ts +442 -0
  241. package/src/dalvikBytecodeUnparser.test.ts +44 -0
  242. package/src/dalvikBytecodeUnparser.ts +758 -0
  243. package/src/dalvikExecutable.ts +282 -0
  244. package/src/dalvikExecutableParser/stringSyntaxParser.ts +145 -0
  245. package/src/dalvikExecutableParser/typeParsers.ts +74 -0
  246. package/src/dalvikExecutableParser/typedNumbers.ts +57 -0
  247. package/src/dalvikExecutableParser.test.ts +89 -0
  248. package/src/dalvikExecutableParser.test.ts.md +634 -0
  249. package/src/dalvikExecutableParser.test.ts.snap +0 -0
  250. package/src/dalvikExecutableParser.ts +3245 -0
  251. package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +363 -0
  252. package/src/dalvikExecutableUnparser/annotationUnparsers.ts +135 -0
  253. package/src/dalvikExecutableUnparser/poolBuilders.ts +189 -0
  254. package/src/dalvikExecutableUnparser/poolScanners.ts +297 -0
  255. package/src/dalvikExecutableUnparser/sectionUnparsers.ts +683 -0
  256. package/src/dalvikExecutableUnparser/utils.ts +149 -0
  257. package/src/dalvikExecutableUnparser.test.ts +57 -0
  258. package/src/dalvikExecutableUnparser.ts +581 -0
  259. package/src/debugLogInputParser.ts +28 -0
  260. package/src/debugLogParser.ts +19 -3
  261. package/src/disjunctionParser.ts +12 -7
  262. package/src/elementTerminatedArrayParser.test.ts +99 -0
  263. package/src/elementTerminatedArrayParser.ts +31 -0
  264. package/src/elementTerminatedSequenceArrayParser.test.ts +52 -0
  265. package/src/elementTerminatedSequenceArrayParser.ts +52 -0
  266. package/src/elementTerminatedSequenceParser.test.ts +52 -0
  267. package/src/elementTerminatedSequenceParser.ts +43 -0
  268. package/src/endOfInputParser.ts +1 -1
  269. package/src/exactElementParser.ts +17 -11
  270. package/src/exactElementSwitchParser.ts +41 -0
  271. package/src/exactSequenceParser.ts +23 -2
  272. package/src/fetchCid.test.ts +20 -0
  273. package/src/fetchCid.ts +121 -0
  274. package/src/fixedLengthSequenceParser.test.ts +75 -0
  275. package/src/fixedLengthSequenceParser.ts +28 -1
  276. package/src/hasExecutable.ts +11 -0
  277. package/src/highResolutionTimer.ts +49 -0
  278. package/src/inputReader.test.ts +204 -8
  279. package/src/inputReader.ts +76 -3
  280. package/src/inputReaderState.ts +33 -0
  281. package/src/inspect.ts +9 -0
  282. package/src/javaKeyStoreParser.test.ts +12 -15
  283. package/src/javaKeyStoreParser.ts +2 -6
  284. package/src/jsonParser.test.ts +2 -4
  285. package/src/jsonParser.ts +46 -62
  286. package/src/lazyMessageError.test.ts +21 -0
  287. package/src/lazyMessageError.ts +88 -0
  288. package/src/leb128Parser.test.ts +173 -0
  289. package/src/leb128Parser.ts +125 -0
  290. package/src/lookaheadParser.ts +19 -0
  291. package/src/negativeLookaheadParser.test.ts +49 -0
  292. package/src/negativeLookaheadParser.ts +27 -15
  293. package/src/noStackCaptureOverheadError.test.ts +17 -0
  294. package/src/noStackCaptureOverheadError.ts +12 -0
  295. package/src/nonEmptyArrayParser.test.ts +21 -0
  296. package/src/nonEmptyArrayParser.ts +44 -0
  297. package/src/optionalParser.ts +3 -2
  298. package/src/parser.test.ts +203 -31
  299. package/src/parser.test.ts.md +34 -27
  300. package/src/parser.test.ts.snap +0 -0
  301. package/src/parser.ts +172 -45
  302. package/src/parserAccessorParser.ts +12 -2
  303. package/src/parserConsumedSequenceParser.ts +26 -17
  304. package/src/parserContext.test.ts +37 -2
  305. package/src/parserContext.ts +185 -79
  306. package/src/parserCreatorCompose.ts +20 -2
  307. package/src/parserError.ts +144 -61
  308. package/src/parserImplementationInvariant.ts +3 -3
  309. package/src/parserInputCompanion.ts +55 -0
  310. package/src/promiseCompose.ts +17 -3
  311. package/src/promiseSettled.ts +6 -0
  312. package/src/separatedArrayParser.test.ts +34 -0
  313. package/src/separatedArrayParser.ts +55 -0
  314. package/src/separatedNonEmptyArrayParser.test.ts +117 -0
  315. package/src/separatedNonEmptyArrayParser.ts +61 -0
  316. package/src/sequenceBuffer.test.ts +70 -0
  317. package/src/sequenceBuffer.ts +88 -2
  318. package/src/sequenceTerminatedSequenceParser.test.ts +58 -0
  319. package/src/sequenceTerminatedSequenceParser.ts +62 -0
  320. package/src/sequenceUnparser.ts +2 -2
  321. package/src/skipParser.ts +7 -5
  322. package/src/skipToParser.ts +16 -0
  323. package/src/sliceBoundedParser.test.ts +35 -1
  324. package/src/sliceBoundedParser.ts +19 -1
  325. package/src/smali.ts +29 -0
  326. package/src/smaliParser.test.ts +443 -0
  327. package/src/smaliParser.test.ts.md +3907 -0
  328. package/src/smaliParser.test.ts.snap +0 -0
  329. package/src/smaliParser.ts +3348 -0
  330. package/src/stringFromAsyncIterable.ts +9 -0
  331. package/src/terminatedArrayParser.test.ts +258 -0
  332. package/src/terminatedArrayParser.ts +109 -6
  333. package/src/toAsyncIterable.ts +7 -0
  334. package/src/toAsyncIterator.ts +48 -0
  335. package/src/tupleParser.ts +8 -5
  336. package/src/uint8Array.ts +2 -3
  337. package/src/unionParser.test.ts +78 -0
  338. package/src/unionParser.ts +47 -21
  339. package/src/unparser.test.ts +18 -34
  340. package/src/unparser.ts +13 -9
  341. package/src/unparserContext.ts +9 -13
  342. package/src/unparserError.ts +2 -1
  343. package/src/unparserImplementationInvariant.ts +1 -1
  344. package/src/unparserOutputCompanion.ts +1 -1
  345. package/src/zip.ts +2 -6
  346. package/src/zipParser.ts +71 -20
  347. package/src/zipUnparser.test.ts +19 -19
  348. package/src/zipUnparser.ts +139 -90
  349. package/tsconfig.json +7 -1
  350. package/xo.config.ts +15 -0
  351. package/.yarn/releases/yarn-4.5.3.cjs +0 -934
  352. package/build/apk.d.ts +0 -39
  353. package/build/apkParser.d.ts +0 -16
  354. package/build/apkParser.js +0 -164
  355. package/build/apkParser.test.js +0 -22
  356. package/build/apkUnparser.d.ts +0 -4
  357. package/build/apkUnparser.js +0 -90
  358. package/build/apkUnparser.test.js +0 -26
  359. package/build/arbitraryDosDate.d.ts +0 -2
  360. package/build/arbitraryDosDate.js +0 -8
  361. package/build/arbitraryZipEntry.d.ts +0 -3
  362. package/build/arbitraryZipEntry.js +0 -26
  363. package/build/createDisjunctionParser.d.ts +0 -2
  364. package/build/createDisjunctionParser.js +0 -47
  365. package/build/createExactParser.d.ts +0 -2
  366. package/build/createExactParser.js +0 -12
  367. package/build/createSequentialUnionParser.d.ts +0 -2
  368. package/build/createSequentialUnionParser.js +0 -69
  369. package/build/fixedLengthChunkParser.d.ts +0 -2
  370. package/build/fixedLengthChunkParser.js +0 -12
  371. package/build/fixedLengthParser.d.ts +0 -2
  372. package/build/fixedLengthParser.js +0 -12
  373. package/build/inputChunkBuffer.d.ts +0 -15
  374. package/build/inputChunkBuffer.js +0 -40
  375. package/build/inputChunkBuffer.test.js +0 -34
  376. package/build/inputCompanion.d.ts +0 -18
  377. package/build/inputCompanion.js +0 -28
  378. package/build/invariantDefined.d.ts +0 -1
  379. package/build/invariantDefined.js +0 -5
  380. package/build/invariantIdentity.d.ts +0 -3
  381. package/build/invariantIdentity.js +0 -5
  382. package/build/javaKeystoreParser.d.ts +0 -2
  383. package/build/javaKeystoreParser.js +0 -7
  384. package/build/jsonParser2.d.ts +0 -3
  385. package/build/jsonParser2.js +0 -52
  386. package/build/jsonParser2.test.js +0 -22
  387. package/build/negativeLookahead.d.ts +0 -2
  388. package/build/negativeLookahead.js +0 -18
  389. package/build/parserCompose.d.ts +0 -3
  390. package/build/parserCompose.js +0 -7
  391. package/build/parserImplementationInvariantInvariant.d.ts +0 -3
  392. package/build/parserImplementationInvariantInvariant.js +0 -15
  393. package/build/parserInvariant.d.ts +0 -4
  394. package/build/parserInvariant.js +0 -11
  395. package/build/promiseFish.d.ts +0 -1
  396. package/build/promiseFish.js +0 -3
  397. package/build/sequenceParser.d.ts +0 -3
  398. package/build/sequenceParser.js +0 -10
  399. package/build/terminatedSequenceParser.d.ts +0 -2
  400. package/build/terminatedSequenceParser.js +0 -24
  401. package/build/unparserInputCompanion.d.ts +0 -15
  402. package/build/unparserInputCompanion.js +0 -13
  403. package/build/zipEntry.d.ts +0 -28
  404. package/build/zipFile.d.ts +0 -32
  405. package/build/zipFileEntry.d.ts +0 -6
  406. package/src/apk.ts +0 -48
  407. package/src/apkParser.test.ts +0 -30
  408. package/src/apkParser.test.ts.snap +0 -0
  409. package/src/apkParser.ts +0 -392
  410. package/src/apkUnparser.test.ts +0 -37
  411. package/src/apkUnparser.ts +0 -120
  412. package/src/invariantDefined.ts +0 -6
  413. package/src/invariantIdentity.ts +0 -8
  414. /package/build/{apk.js → androidPackage.js} +0 -0
  415. /package/build/{apkParser.test.d.ts → androidPackageParser.test.d.ts} +0 -0
  416. /package/build/{apkUnparser.test.d.ts → androidPackageUnparser.test.d.ts} +0 -0
  417. /package/build/{arbitraryDosPermissions.d.ts → dalvikBytecodeUnparser.test.d.ts} +0 -0
  418. /package/build/{arbitraryDosPermissions.js → dalvikExecutableParser.test.d.ts} +0 -0
  419. /package/build/{inputChunkBuffer.test.d.ts → dalvikExecutableParserAgainstSmaliParser.test.d.ts} +0 -0
  420. /package/build/{jsonParser2.test.d.ts → dalvikExecutableUnparser.test.d.ts} +0 -0
  421. /package/build/{parserParsingInvariant.d.ts → elementTerminatedArrayParser.test.d.ts} +0 -0
  422. /package/build/{parserParsingInvariant.js → elementTerminatedSequenceArrayParser.test.d.ts} +0 -0
  423. /package/build/{zipEntry.js → elementTerminatedSequenceParser.test.d.ts} +0 -0
  424. /package/build/{zipFile.js → fetchCid.test.d.ts} +0 -0
  425. /package/build/{zipFileEntry.js → fixedLengthSequenceParser.test.d.ts} +0 -0
@@ -0,0 +1,442 @@
1
+ import { type Unparser } from '../unparser.js';
2
+
3
+ // Basic type unparsers
4
+ export const ubyteUnparser: Unparser<number, Uint8Array> = async function * (input) {
5
+ const buffer = Buffer.alloc(1);
6
+ buffer.writeUInt8(input);
7
+ yield buffer;
8
+ };
9
+
10
+ export const byteUnparser: Unparser<number, Uint8Array> = async function * (input) {
11
+ const buffer = Buffer.alloc(1);
12
+ buffer.writeInt8(input);
13
+ yield buffer;
14
+ };
15
+
16
+ export const shortUnparser: Unparser<number, Uint8Array> = async function * (input) {
17
+ const buffer = Buffer.alloc(2);
18
+ buffer.writeInt16LE(input);
19
+ yield buffer;
20
+ };
21
+
22
+ export const ushortUnparser: Unparser<number, Uint8Array> = async function * (input) {
23
+ const buffer = Buffer.alloc(2);
24
+ buffer.writeUInt16LE(input);
25
+ yield buffer;
26
+ };
27
+
28
+ export const intUnparser: Unparser<number, Uint8Array> = async function * (input) {
29
+ const buffer = Buffer.alloc(4);
30
+ buffer.writeInt32LE(input);
31
+ yield buffer;
32
+ };
33
+
34
+ export const uintUnparser: Unparser<number, Uint8Array> = async function * (input) {
35
+ const buffer = Buffer.alloc(4);
36
+ buffer.writeUInt32LE(input);
37
+ yield buffer;
38
+ };
39
+
40
+ export const longUnparser: Unparser<bigint, Uint8Array> = async function * (input) {
41
+ const buffer = Buffer.alloc(8);
42
+ buffer.writeBigInt64LE(input);
43
+ yield buffer;
44
+ };
45
+
46
+ export const ulongUnparser: Unparser<bigint, Uint8Array> = async function * (input) {
47
+ const buffer = Buffer.alloc(8);
48
+ buffer.writeBigUInt64LE(input);
49
+ yield buffer;
50
+ };
51
+
52
+ // Nibbles unparser (two 4-bit values in one byte)
53
+ export const nibblesUnparser: Unparser<[ number, number ], Uint8Array> = async function * ([ high, low ], unparserContext) {
54
+ const byte = (high << 4) | (low & 0b1111);
55
+ yield * ubyteUnparser(byte, unparserContext);
56
+ };
57
+
58
+ // Format 10t: branchOffset (1 byte signed)
59
+ type DalvikBytecodeFormat10t = {
60
+ branchOffset: number;
61
+ };
62
+
63
+ export const dalvikBytecodeFormat10tUnparser: Unparser<DalvikBytecodeFormat10t, Uint8Array> = async function * (input, unparserContext) {
64
+ yield * byteUnparser(input.branchOffset, unparserContext);
65
+ };
66
+
67
+ // Format 10x: no data
68
+ type DalvikBytecodeFormat10x = void;
69
+
70
+ export const dalvikBytecodeFormat10xUnparser: Unparser<DalvikBytecodeFormat10x, Uint8Array> = async function * (_input, unparserContext) {
71
+ yield * ubyteUnparser(0, unparserContext); // Zero byte
72
+ };
73
+
74
+ // Format 11x: single register (1 byte)
75
+ type DalvikBytecodeFormat11x = {
76
+ registers: number[];
77
+ };
78
+
79
+ export const dalvikBytecodeFormat11xUnparser: Unparser<DalvikBytecodeFormat11x, Uint8Array> = async function * (input, unparserContext) {
80
+ yield * ubyteUnparser(input.registers[0], unparserContext);
81
+ };
82
+
83
+ // Format 11n: value (4-bit signed) + register (4-bit)
84
+ type DalvikBytecodeFormat11n = {
85
+ value: number;
86
+ registers: number[];
87
+ };
88
+
89
+ export const dalvikBytecodeFormat11nUnparser: Unparser<DalvikBytecodeFormat11n, Uint8Array> = async function * (input, unparserContext) {
90
+ yield * nibblesUnparser([ input.value & 0b1111, input.registers[0] ], unparserContext);
91
+ };
92
+
93
+ // Format 12x: two registers in nibbles
94
+ type DalvikBytecodeFormat12x = {
95
+ registers: number[];
96
+ };
97
+
98
+ export const dalvikBytecodeFormat12xUnparser: Unparser<DalvikBytecodeFormat12x, Uint8Array> = async function * (input, unparserContext) {
99
+ yield * nibblesUnparser([ input.registers[0], input.registers[1] ], unparserContext);
100
+ };
101
+
102
+ // Format 12x with reversed registers (for operations like array-length that reverse in parser)
103
+ export const dalvikBytecodeFormat12xReversedUnparser: Unparser<DalvikBytecodeFormat12x, Uint8Array> = async function * (input, unparserContext) {
104
+ yield * nibblesUnparser([ input.registers[1], input.registers[0] ], unparserContext);
105
+ };
106
+
107
+ // Format 20t: zero byte + branchOffset (2 bytes signed)
108
+ type DalvikBytecodeFormat20t = {
109
+ branchOffset: number;
110
+ };
111
+
112
+ export const dalvikBytecodeFormat20tUnparser: Unparser<DalvikBytecodeFormat20t, Uint8Array> = async function * (input, unparserContext) {
113
+ yield * ubyteUnparser(0, unparserContext);
114
+ yield * shortUnparser(input.branchOffset, unparserContext);
115
+ };
116
+
117
+ // Format 21c: register + index (2 bytes)
118
+ type DalvikBytecodeFormat21c = {
119
+ index: number;
120
+ registers: number[];
121
+ };
122
+
123
+ export const dalvikBytecodeFormat21cUnparser: Unparser<DalvikBytecodeFormat21c, Uint8Array> = async function * (input, unparserContext) {
124
+ yield * ubyteUnparser(input.registers[0], unparserContext);
125
+ yield * ushortUnparser(input.index, unparserContext);
126
+ };
127
+
128
+ // Format 21h: register + value (2 bytes high bits)
129
+ type DalvikBytecodeFormat21h = {
130
+ value: number;
131
+ registers: number[];
132
+ };
133
+
134
+ export const dalvikBytecodeFormat21hUnparser: Unparser<DalvikBytecodeFormat21h, Uint8Array> = async function * (input, unparserContext) {
135
+ yield * ubyteUnparser(input.registers[0], unparserContext);
136
+ yield * ushortUnparser(input.value, unparserContext);
137
+ };
138
+
139
+ // Format 21t: register + branchOffset (2 bytes signed)
140
+ type DalvikBytecodeFormat21t = {
141
+ branchOffset: number;
142
+ registers: number[];
143
+ };
144
+
145
+ export const dalvikBytecodeFormat21tUnparser: Unparser<DalvikBytecodeFormat21t, Uint8Array> = async function * (input, unparserContext) {
146
+ yield * ubyteUnparser(input.registers[0], unparserContext);
147
+ yield * shortUnparser(input.branchOffset, unparserContext);
148
+ };
149
+
150
+ // Format 21s: register + value (2 bytes signed)
151
+ type DalvikBytecodeFormat21s = {
152
+ registers: number[];
153
+ value: number;
154
+ };
155
+
156
+ export const dalvikBytecodeFormat21sUnparser: Unparser<DalvikBytecodeFormat21s, Uint8Array> = async function * (input, unparserContext) {
157
+ yield * ubyteUnparser(input.registers[0], unparserContext);
158
+ yield * shortUnparser(input.value, unparserContext);
159
+ };
160
+
161
+ // Format 22b: two registers + value (1 byte signed)
162
+ type DalvikBytecodeFormat22b = {
163
+ registers: number[];
164
+ value: number;
165
+ };
166
+
167
+ export const dalvikBytecodeFormat22bUnparser: Unparser<DalvikBytecodeFormat22b, Uint8Array> = async function * (input, unparserContext) {
168
+ yield * ubyteUnparser(input.registers[0], unparserContext);
169
+ yield * ubyteUnparser(input.registers[1], unparserContext);
170
+ yield * byteUnparser(input.value, unparserContext);
171
+ };
172
+
173
+ // Format 22c: two registers in nibbles + index (2 bytes)
174
+ type DalvikBytecodeFormat22c = {
175
+ registers: number[];
176
+ index: number;
177
+ };
178
+
179
+ export const dalvikBytecodeFormat22cUnparser: Unparser<DalvikBytecodeFormat22c, Uint8Array> = async function * (input, unparserContext) {
180
+ yield * nibblesUnparser([ input.registers[1], input.registers[0] ], unparserContext);
181
+ yield * ushortUnparser(input.index, unparserContext);
182
+ };
183
+
184
+ // Format 22s: two registers in nibbles + value (2 bytes signed)
185
+ type DalvikBytecodeFormat22s = {
186
+ value: number;
187
+ registers: number[];
188
+ };
189
+
190
+ export const dalvikBytecodeFormat22sUnparser: Unparser<DalvikBytecodeFormat22s, Uint8Array> = async function * (input, unparserContext) {
191
+ yield * nibblesUnparser([ input.registers[1], input.registers[0] ], unparserContext);
192
+ yield * shortUnparser(input.value, unparserContext);
193
+ };
194
+
195
+ // Format 22t: two registers in nibbles + branchOffset (2 bytes signed)
196
+ type DalvikBytecodeFormat22t = {
197
+ branchOffset: number;
198
+ registers: number[];
199
+ };
200
+
201
+ export const dalvikBytecodeFormat22tUnparser: Unparser<DalvikBytecodeFormat22t, Uint8Array> = async function * (input, unparserContext) {
202
+ yield * nibblesUnparser([ input.registers[1], input.registers[0] ], unparserContext);
203
+ yield * shortUnparser(input.branchOffset, unparserContext);
204
+ };
205
+
206
+ // Format 22t for commutative operations (if-eq, if-ne): registers are already in sorted/canonical order
207
+ // so we don't reverse them
208
+ export const dalvikBytecodeFormat22tCommutativeUnparser: Unparser<DalvikBytecodeFormat22t, Uint8Array> = async function * (input, unparserContext) {
209
+ yield * nibblesUnparser([ input.registers[0], input.registers[1] ], unparserContext);
210
+ yield * shortUnparser(input.branchOffset, unparserContext);
211
+ };
212
+
213
+ // Format 22x: register + register (2 bytes)
214
+ type DalvikBytecodeFormat22x = {
215
+ registers: number[];
216
+ };
217
+
218
+ export const dalvikBytecodeFormat22xUnparser: Unparser<DalvikBytecodeFormat22x, Uint8Array> = async function * (input, unparserContext) {
219
+ yield * ubyteUnparser(input.registers[0], unparserContext);
220
+ yield * ushortUnparser(input.registers[1], unparserContext);
221
+ };
222
+
223
+ // Format 23x: three registers
224
+ type DalvikBytecodeFormat23x = {
225
+ registers: number[];
226
+ };
227
+
228
+ export const dalvikBytecodeFormat23xUnparser: Unparser<DalvikBytecodeFormat23x, Uint8Array> = async function * (input, unparserContext) {
229
+ yield * ubyteUnparser(input.registers[0], unparserContext);
230
+ yield * ubyteUnparser(input.registers[1], unparserContext);
231
+ yield * ubyteUnparser(input.registers[2], unparserContext);
232
+ };
233
+
234
+ // Format 30t: zero byte + branchOffset (4 bytes signed)
235
+ type DalvikBytecodeFormat30t = {
236
+ branchOffset: number;
237
+ };
238
+
239
+ export const dalvikBytecodeFormat30tUnparser: Unparser<DalvikBytecodeFormat30t, Uint8Array> = async function * (input, unparserContext) {
240
+ yield * intUnparser(input.branchOffset, unparserContext);
241
+ };
242
+
243
+ // Format 31i: register + value (4 bytes signed)
244
+ type DalvikBytecodeFormat31i = {
245
+ value: number;
246
+ registers: number[];
247
+ };
248
+
249
+ export const dalvikBytecodeFormat31iUnparser: Unparser<DalvikBytecodeFormat31i, Uint8Array> = async function * (input, unparserContext) {
250
+ yield * ubyteUnparser(input.registers[0], unparserContext);
251
+ yield * intUnparser(input.value, unparserContext);
252
+ };
253
+
254
+ // Format 31c: register + index (4 bytes)
255
+ type DalvikBytecodeFormat31c = {
256
+ index: number;
257
+ registers: number[];
258
+ };
259
+
260
+ export const dalvikBytecodeFormat31cUnparser: Unparser<DalvikBytecodeFormat31c, Uint8Array> = async function * (input, unparserContext) {
261
+ yield * ubyteUnparser(input.registers[0], unparserContext);
262
+ yield * uintUnparser(input.index, unparserContext);
263
+ };
264
+
265
+ // Format 31t: register + branchOffset (4 bytes signed)
266
+ type DalvikBytecodeFormat31t = {
267
+ branchOffset: number;
268
+ registers: number[];
269
+ };
270
+
271
+ export const dalvikBytecodeFormat31tUnparser: Unparser<DalvikBytecodeFormat31t, Uint8Array> = async function * (input, unparserContext) {
272
+ yield * ubyteUnparser(input.registers[0], unparserContext);
273
+ yield * intUnparser(input.branchOffset, unparserContext);
274
+ };
275
+
276
+ // Format 32x: two registers (2 bytes each)
277
+ type DalvikBytecodeFormat32x = {
278
+ registers: number[];
279
+ };
280
+
281
+ export const dalvikBytecodeFormat32xUnparser: Unparser<DalvikBytecodeFormat32x, Uint8Array> = async function * (input, unparserContext) {
282
+ yield * ushortUnparser(input.registers[0], unparserContext);
283
+ yield * ushortUnparser(input.registers[1], unparserContext);
284
+ };
285
+
286
+ // Format 35c: registerCount + 5 registers + index (up to 5 args for invoke)
287
+ type DalvikBytecodeFormat35c = {
288
+ index: number;
289
+ registers: number[];
290
+ };
291
+
292
+ export const dalvikBytecodeFormat35cUnparser: Unparser<DalvikBytecodeFormat35c, Uint8Array> = async function * (input, unparserContext) {
293
+ const registerCount = input.registers.length;
294
+ const register4 = input.registers[4] ?? 0;
295
+ const register3 = input.registers[3] ?? 0;
296
+ const register2 = input.registers[2] ?? 0;
297
+ const register1 = input.registers[1] ?? 0;
298
+ const register0 = input.registers[0] ?? 0;
299
+
300
+ yield * nibblesUnparser([ registerCount, register4 ], unparserContext);
301
+ yield * ushortUnparser(input.index, unparserContext);
302
+ yield * nibblesUnparser([ register1, register0 ], unparserContext);
303
+ yield * nibblesUnparser([ register3, register2 ], unparserContext);
304
+ };
305
+
306
+ // Format 3rc: registerCount + index + firstRegister (register range)
307
+ type DalvikBytecodeFormat3rc = {
308
+ index: number;
309
+ registers: number[];
310
+ };
311
+
312
+ export const dalvikBytecodeFormat3rcUnparser: Unparser<DalvikBytecodeFormat3rc, Uint8Array> = async function * (input, unparserContext) {
313
+ const registerCount = input.registers.length;
314
+ const firstRegister = input.registers[0] ?? 0;
315
+
316
+ yield * ubyteUnparser(registerCount, unparserContext);
317
+ yield * ushortUnparser(input.index, unparserContext);
318
+ yield * ushortUnparser(firstRegister, unparserContext);
319
+ };
320
+
321
+ // Format 51l: register + value (8 bytes)
322
+ type DalvikBytecodeFormat51l = {
323
+ value: bigint;
324
+ registers: number[];
325
+ };
326
+
327
+ export const dalvikBytecodeFormat51lUnparser: Unparser<DalvikBytecodeFormat51l, Uint8Array> = async function * (input, unparserContext) {
328
+ yield * ubyteUnparser(input.registers[0], unparserContext);
329
+ yield * longUnparser(input.value, unparserContext);
330
+ };
331
+
332
+ // Format 45cc: invoke-polymorphic (register count + 5 registers + method index + proto index)
333
+ type DalvikBytecodeFormat45cc = {
334
+ methodIndex: number;
335
+ protoIndex: number;
336
+ registers: number[];
337
+ };
338
+
339
+ export const dalvikBytecodeFormat45ccUnparser: Unparser<DalvikBytecodeFormat45cc, Uint8Array> = async function * (input, unparserContext) {
340
+ const registerCount = input.registers.length;
341
+ const register4 = input.registers[4] ?? 0;
342
+ const register3 = input.registers[3] ?? 0;
343
+ const register2 = input.registers[2] ?? 0;
344
+ const register1 = input.registers[1] ?? 0;
345
+ const register0 = input.registers[0] ?? 0;
346
+
347
+ yield * nibblesUnparser([ registerCount, register4 ], unparserContext);
348
+ yield * ushortUnparser(input.methodIndex, unparserContext);
349
+ yield * nibblesUnparser([ register1, register0 ], unparserContext);
350
+ yield * nibblesUnparser([ register3, register2 ], unparserContext);
351
+ yield * ushortUnparser(input.protoIndex, unparserContext);
352
+ };
353
+
354
+ // Format 4rcc: invoke-polymorphic/range
355
+ type DalvikBytecodeFormat4rcc = {
356
+ methodIndex: number;
357
+ protoIndex: number;
358
+ registers: number[];
359
+ };
360
+
361
+ export const dalvikBytecodeFormat4rccUnparser: Unparser<DalvikBytecodeFormat4rcc, Uint8Array> = async function * (input, unparserContext) {
362
+ const registerCount = input.registers.length;
363
+ const firstRegister = input.registers[0] ?? 0;
364
+
365
+ yield * ubyteUnparser(registerCount, unparserContext);
366
+ yield * ushortUnparser(input.methodIndex, unparserContext);
367
+ yield * ushortUnparser(firstRegister, unparserContext);
368
+ yield * ushortUnparser(input.protoIndex, unparserContext);
369
+ };
370
+
371
+ // Payload formats
372
+
373
+ // Packed-switch-payload
374
+ type DalvikBytecodeOperationPackedSwitchPayload = {
375
+ operation: 'packed-switch-payload';
376
+ value: number;
377
+ branchOffsets: number[];
378
+ };
379
+
380
+ export const dalvikBytecodeOperationPackedSwitchPayloadUnparser: Unparser<DalvikBytecodeOperationPackedSwitchPayload, Uint8Array> = async function * (input, unparserContext) {
381
+ // Ident (0x0100) - little-endian
382
+ yield * ushortUnparser(0x01_00, unparserContext);
383
+ // Size
384
+ yield * ushortUnparser(input.branchOffsets.length, unparserContext);
385
+ // First key value
386
+ yield * intUnparser(input.value, unparserContext);
387
+ // Branch offsets
388
+ for (const offset of input.branchOffsets) {
389
+ yield * intUnparser(offset, unparserContext);
390
+ }
391
+ };
392
+
393
+ // Sparse-switch-payload
394
+ type DalvikBytecodeOperationSparseSwitchPayload = {
395
+ operation: 'sparse-switch-payload';
396
+ keys: number[];
397
+ branchOffsets: number[];
398
+ };
399
+
400
+ export const dalvikBytecodeOperationSparseSwitchPayloadUnparser: Unparser<DalvikBytecodeOperationSparseSwitchPayload, Uint8Array> = async function * (input, unparserContext) {
401
+ // Ident (0x0200) - little-endian
402
+ yield * ushortUnparser(0x02_00, unparserContext);
403
+ // Size
404
+ yield * ushortUnparser(input.keys.length, unparserContext);
405
+ // Keys
406
+ for (const key of input.keys) {
407
+ yield * intUnparser(key, unparserContext);
408
+ }
409
+ // Branch offsets
410
+ for (const offset of input.branchOffsets) {
411
+ yield * intUnparser(offset, unparserContext);
412
+ }
413
+ };
414
+
415
+ // Fill-array-data-payload
416
+ type DalvikBytecodeOperationFillArrayDataPayload = {
417
+ operation: 'fill-array-data-payload';
418
+ elementWidth: number;
419
+ data: number[];
420
+ };
421
+
422
+ export const dalvikBytecodeOperationFillArrayDataPayloadUnparser: Unparser<DalvikBytecodeOperationFillArrayDataPayload, Uint8Array> = async function * (input, unparserContext) {
423
+ // Ident (0x0300) - little-endian
424
+ yield * ushortUnparser(0x03_00, unparserContext);
425
+ // Element width
426
+ yield * ushortUnparser(input.elementWidth, unparserContext);
427
+ // Size (number of elements) - data array contains bytes, so divide by elementWidth
428
+ const numElements = Math.floor(input.data.length / input.elementWidth);
429
+ yield * uintUnparser(numElements, unparserContext);
430
+
431
+ // Data (each byte from the data array)
432
+ for (const byte of input.data) {
433
+ yield * ubyteUnparser(byte, unparserContext);
434
+ }
435
+
436
+ // Padding if needed (align to 2-byte boundary)
437
+ const dataSize = input.data.length;
438
+ const paddingSize = dataSize % 2;
439
+ if (paddingSize === 1) {
440
+ yield * ubyteUnparser(0, unparserContext);
441
+ }
442
+ };
@@ -0,0 +1,44 @@
1
+ import { testProp } from '@fast-check/ava';
2
+ import { runUnparser } from './unparser.js';
3
+ import { dalvikBytecodeUnparser } from './dalvikBytecodeUnparser.js';
4
+ import { uint8ArrayUnparserOutputCompanion } from './unparserOutputCompanion.js';
5
+ import { runParser } from './parser.js';
6
+ import { createDalvikBytecodeParser } from './dalvikBytecodeParser.js';
7
+ import { uint8ArrayParserInputCompanion } from './parserInputCompanion.js';
8
+ import { arbitraryDalvikBytecode } from './arbitraryDalvikBytecode.js';
9
+ import { uint8ArrayAsyncIterableToUint8Array } from './uint8Array.js';
10
+
11
+ const seed = process.env.SEED ? Number(process.env.SEED) : undefined;
12
+
13
+ testProp(
14
+ 'dalvik bytecode roundtrip',
15
+ [arbitraryDalvikBytecode],
16
+ async (t, bytecode) => {
17
+ // Unparse the bytecode to bytes
18
+ const unparsedStreamIterable = runUnparser(
19
+ dalvikBytecodeUnparser,
20
+ bytecode,
21
+ uint8ArrayUnparserOutputCompanion
22
+ );
23
+
24
+ // Collect all chunks into a single Uint8Array
25
+ const unparsedStream = await uint8ArrayAsyncIterableToUint8Array(unparsedStreamIterable);
26
+
27
+ // Create parser with the correct size
28
+ const dalvikBytecodeParser = createDalvikBytecodeParser(unparsedStream.length);
29
+
30
+ // Re-parse the unparsed bytes
31
+ const actual = await runParser(
32
+ dalvikBytecodeParser,
33
+ unparsedStream,
34
+ uint8ArrayParserInputCompanion
35
+ );
36
+
37
+ // Assert deep equality
38
+ t.deepEqual(actual, bytecode);
39
+ },
40
+ {
41
+ verbose: true,
42
+ seed,
43
+ }
44
+ );