@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,780 @@
1
+ import { type Iso } from 'monocle-ts';
2
+ import {
3
+ byteParser, intParser, longParser, shortParser, ubyteParser, uintParser, ushortParser,
4
+ } from '../dalvikExecutableParser/typeParsers.js';
5
+ import { createElementParser } from '../elementParser.js';
6
+ import { type Parser, setParserName } from '../parser.js';
7
+ import { promiseCompose } from '../promiseCompose.js';
8
+ import { createTupleParser } from '../tupleParser.js';
9
+
10
+ // https://source.android.com/docs/core/runtime/instruction-formats
11
+
12
+ export const nibblesParser: Parser<[ number, number ], Uint8Array> = promiseCompose(
13
+ createElementParser(),
14
+ byte => [
15
+ byte >> 4,
16
+ byte & 0b1111,
17
+ ],
18
+ );
19
+
20
+ setParserName(nibblesParser, 'nibblesParser');
21
+
22
+ type DalvikBytecodeFormat10t = {
23
+ branchOffset: number;
24
+ };
25
+
26
+ export const dalvikBytecodeFormat10tParser: Parser<DalvikBytecodeFormat10t, Uint8Array> = promiseCompose(
27
+ byteParser,
28
+ branchOffset => ({
29
+ branchOffset,
30
+ }),
31
+ );
32
+
33
+ type DalvikBytecodeFormat10x = void;
34
+
35
+ export const dalvikBytecodeFormat10xParser: Parser<DalvikBytecodeFormat10x, Uint8Array> = promiseCompose(
36
+ createElementParser(),
37
+ () => undefined,
38
+ );
39
+
40
+ type DalvikBytecodeFormat11x = {
41
+ registers: number[];
42
+ };
43
+
44
+ export const dalvikBytecodeFormat11xParser: Parser<DalvikBytecodeFormat11x, Uint8Array> = promiseCompose(
45
+ ubyteParser,
46
+ register0 => ({
47
+ registers: [
48
+ register0,
49
+ ],
50
+ }),
51
+ );
52
+
53
+ type DalvikBytecodeFormat11n = {
54
+ value: number;
55
+ registers: number[];
56
+ };
57
+
58
+ export const dalvikBytecodeFormat11nParser: Parser<DalvikBytecodeFormat11n, Uint8Array> = promiseCompose(
59
+ nibblesParser,
60
+ ([
61
+ value,
62
+ register0,
63
+ ]) => ({
64
+ value: value << 28 >> 28, // Sign extend 4-bit value
65
+ registers: [
66
+ register0,
67
+ ],
68
+ }),
69
+ );
70
+
71
+ type DalvikBytecodeFormat12x = {
72
+ registers: number[];
73
+ };
74
+
75
+ export const dalvikBytecodeFormat12xParser: Parser<DalvikBytecodeFormat12x, Uint8Array> = promiseCompose(
76
+ nibblesParser,
77
+ ([
78
+ register0,
79
+ register1,
80
+ ]) => ({
81
+ registers: [
82
+ register0,
83
+ register1,
84
+ ],
85
+ }),
86
+ );
87
+
88
+ type DalvikBytecodeFormat20t = {
89
+ branchOffset: number;
90
+ };
91
+
92
+ export const dalvikBytecodeFormat20tParser: Parser<DalvikBytecodeFormat20t, Uint8Array> = promiseCompose(
93
+ createTupleParser([
94
+ ubyteParser,
95
+ shortParser,
96
+ ]),
97
+ ([
98
+ _zero,
99
+ branchOffset,
100
+ ]) => ({
101
+ branchOffset,
102
+ }),
103
+ );
104
+
105
+ type DalvikBytecodeFormat21c<Index> = {
106
+ index: Index;
107
+ registers: number[];
108
+ };
109
+
110
+ export const createDalvikBytecodeFormat21cParser = <Index>({
111
+ isoIndex,
112
+ }: {
113
+ isoIndex: Iso<Index, number>;
114
+ }): Parser<DalvikBytecodeFormat21c<Index>, Uint8Array> => promiseCompose(
115
+ createTupleParser([
116
+ ubyteParser,
117
+ ushortParser,
118
+ ]),
119
+ ([
120
+ register0,
121
+ index,
122
+ ]) => ({
123
+ index: isoIndex.wrap(index),
124
+ registers: [
125
+ register0,
126
+ ],
127
+ }),
128
+ );
129
+
130
+ type DalvikBytecodeFormat21h = {
131
+ value: number;
132
+ registers: number[];
133
+ };
134
+
135
+ export const dalvikBytecodeFormat21hParser: Parser<DalvikBytecodeFormat21h, Uint8Array> = promiseCompose(
136
+ createTupleParser([
137
+ ubyteParser,
138
+ ushortParser,
139
+ ]),
140
+ ([
141
+ register0,
142
+ value,
143
+ ]) => ({
144
+ value,
145
+ registers: [
146
+ register0,
147
+ ],
148
+ }),
149
+ );
150
+
151
+ type DalvikBytecodeFormat21t = {
152
+ branchOffset: number;
153
+ registers: number[];
154
+ };
155
+
156
+ export const createDalvikBytecodeFormat21tParser = (): Parser<DalvikBytecodeFormat21t, Uint8Array> => promiseCompose(
157
+ createTupleParser([
158
+ ubyteParser,
159
+ shortParser,
160
+ ]),
161
+ ([
162
+ register0,
163
+ branchOffset,
164
+ ]) => ({
165
+ branchOffset,
166
+ registers: [
167
+ register0,
168
+ ],
169
+ }),
170
+ );
171
+
172
+ type DalvikBytecodeFormat21s = {
173
+ registers: number[];
174
+ value: number;
175
+ };
176
+
177
+ export const createDalvikBytecodeFormat21sParser = (): Parser<DalvikBytecodeFormat21s, Uint8Array> => promiseCompose(
178
+ createTupleParser([
179
+ ubyteParser,
180
+ shortParser,
181
+ ]),
182
+ ([
183
+ register0,
184
+ value,
185
+ ]) => ({
186
+ value,
187
+ registers: [
188
+ register0,
189
+ ],
190
+ }),
191
+ );
192
+
193
+ type DalvikBytecodeFormat22b = {
194
+ registers: number[];
195
+ value: number;
196
+ };
197
+
198
+ export const createDalvikBytecodeFormat22bParser = (): Parser<DalvikBytecodeFormat22b, Uint8Array> => promiseCompose(
199
+ createTupleParser([
200
+ ubyteParser,
201
+ ubyteParser,
202
+ byteParser,
203
+ ]),
204
+ ([
205
+ register0,
206
+ register1,
207
+ value,
208
+ ]) => ({
209
+ value,
210
+ registers: [
211
+ register0,
212
+ register1,
213
+ ],
214
+ }),
215
+ );
216
+
217
+ type DalvikBytecodeFormat22c<Index> = {
218
+ registers: number[];
219
+ index: Index;
220
+ };
221
+
222
+ export const createDalvikBytecodeFormat22cParser = <Index>({
223
+ isoIndex,
224
+ }: {
225
+ isoIndex: Iso<Index, number>;
226
+ }): Parser<DalvikBytecodeFormat22c<Index>, Uint8Array> => promiseCompose(
227
+ createTupleParser([
228
+ nibblesParser,
229
+ ushortParser,
230
+ ]),
231
+ ([
232
+ [
233
+ register1,
234
+ register0,
235
+ ],
236
+ index,
237
+ ]) => ({
238
+ index: isoIndex.wrap(index),
239
+ registers: [
240
+ register0,
241
+ register1,
242
+ ],
243
+ }),
244
+ );
245
+
246
+ type DalvikBytecodeFormat22s = {
247
+ value: number;
248
+ registers: number[];
249
+ };
250
+
251
+ export const createDalvikBytecodeFormat22sParser = (): Parser<DalvikBytecodeFormat22s, Uint8Array> => promiseCompose(
252
+ createTupleParser([
253
+ nibblesParser,
254
+ shortParser,
255
+ ]),
256
+ ([
257
+ [
258
+ register0,
259
+ register1,
260
+ ],
261
+ value,
262
+ ]) => ({
263
+ value,
264
+ registers: [
265
+ register1,
266
+ register0,
267
+ ],
268
+ }),
269
+ );
270
+
271
+ type DalvikBytecodeFormat22t = {
272
+ branchOffset: number;
273
+ registers: number[];
274
+ };
275
+
276
+ export const createDalvikBytecodeFormat22tParser = (): Parser<DalvikBytecodeFormat22t, Uint8Array> => promiseCompose(
277
+ createTupleParser([
278
+ nibblesParser,
279
+ shortParser,
280
+ ]),
281
+ ([
282
+ [
283
+ register0,
284
+ register1,
285
+ ],
286
+ branchOffset,
287
+ ]) => ({
288
+ branchOffset,
289
+ registers: [
290
+ register0,
291
+ register1,
292
+ ],
293
+ }),
294
+ );
295
+
296
+ type DalvikBytecodeFormat22x = {
297
+ registers: number[];
298
+ };
299
+
300
+ export const dalvikBytecodeFormat22xParser: Parser<DalvikBytecodeFormat22x, Uint8Array> = promiseCompose(
301
+ createTupleParser([
302
+ ubyteParser,
303
+ ushortParser,
304
+ ]),
305
+ ([
306
+ register0,
307
+ register1,
308
+ ]) => ({
309
+ registers: [
310
+ register0,
311
+ register1,
312
+ ],
313
+ }),
314
+ );
315
+
316
+ type DalvikBytecodeFormat23x = {
317
+ registers: number[];
318
+ };
319
+
320
+ export const dalvikBytecodeFormat23xParser: Parser<DalvikBytecodeFormat23x, Uint8Array> = promiseCompose(
321
+ createTupleParser([
322
+ ubyteParser,
323
+ ubyteParser,
324
+ ubyteParser,
325
+ ]),
326
+ ([
327
+ register0,
328
+ register1,
329
+ register2,
330
+ ]) => ({
331
+ registers: [
332
+ register0,
333
+ register1,
334
+ register2,
335
+ ],
336
+ }),
337
+ );
338
+
339
+ type DalvikBytecodeFormat30t = {
340
+ branchOffset: number;
341
+ };
342
+
343
+ export const dalvikBytecodeFormat30tParser: Parser<DalvikBytecodeFormat30t, Uint8Array> = promiseCompose(
344
+ intParser,
345
+ branchOffset => ({
346
+ branchOffset,
347
+ }),
348
+ );
349
+
350
+ type DalvikBytecodeFormat31i = {
351
+ value: number;
352
+ registers: number[];
353
+ };
354
+
355
+ export const dalvikBytecodeFormat31iParser: Parser<DalvikBytecodeFormat31i, Uint8Array> = promiseCompose(
356
+ createTupleParser([
357
+ ubyteParser,
358
+ intParser,
359
+ ]),
360
+ ([
361
+ register0,
362
+ value,
363
+ ]) => ({
364
+ value,
365
+ registers: [
366
+ register0,
367
+ ],
368
+ }),
369
+ );
370
+
371
+ type DalvikBytecodeFormat31c<Index> = {
372
+ index: Index;
373
+ registers: number[];
374
+ };
375
+
376
+ export const createDalvikBytecodeFormat31cParser = <Index>({
377
+ isoIndex,
378
+ }: {
379
+ isoIndex: Iso<Index, number>;
380
+ }): Parser<DalvikBytecodeFormat31c<Index>, Uint8Array> => promiseCompose(
381
+ createTupleParser([
382
+ ubyteParser,
383
+ uintParser,
384
+ ]),
385
+ ([
386
+ register0,
387
+ index,
388
+ ]) => ({
389
+ index: isoIndex.wrap(index),
390
+ registers: [
391
+ register0,
392
+ ],
393
+ }),
394
+ );
395
+
396
+ type DalvikBytecodeFormat31t = {
397
+ branchOffset: number;
398
+ registers: number[];
399
+ };
400
+
401
+ export const dalvikBytecodeFormat31tParser: Parser<DalvikBytecodeFormat31t, Uint8Array> = promiseCompose(
402
+ createTupleParser([
403
+ ubyteParser,
404
+ intParser,
405
+ ]),
406
+ ([
407
+ register0,
408
+ branchOffset,
409
+ ]) => ({
410
+ branchOffset,
411
+ registers: [
412
+ register0,
413
+ ],
414
+ }),
415
+ );
416
+
417
+ type DalvikBytecodeFormat32x = {
418
+ registers: number[];
419
+ };
420
+
421
+ export const dalvikBytecodeFormat32xParser: Parser<DalvikBytecodeFormat32x, Uint8Array> = promiseCompose(
422
+ createTupleParser([
423
+ ushortParser,
424
+ ushortParser,
425
+ ]),
426
+ ([
427
+ register0,
428
+ register1,
429
+ ]) => ({
430
+ registers: [
431
+ register0,
432
+ register1,
433
+ ],
434
+ }),
435
+ );
436
+
437
+ type DalvikBytecodeFormat35c<Index> = {
438
+ index: Index;
439
+ registers: number[];
440
+ };
441
+
442
+ export const createDalvikBytecodeFormat35cParser = <Index>({
443
+ isoIndex,
444
+ }: {
445
+ isoIndex: Iso<Index, number>;
446
+ }): Parser<DalvikBytecodeFormat35c<Index>, Uint8Array> => promiseCompose(
447
+ createTupleParser([
448
+ nibblesParser,
449
+ ushortParser,
450
+ nibblesParser,
451
+ nibblesParser,
452
+ ]),
453
+ ([
454
+ [
455
+ registerCount,
456
+ register4,
457
+ ],
458
+ index,
459
+ [
460
+ register1,
461
+ register0,
462
+ ],
463
+ [
464
+ register3,
465
+ register2,
466
+ ],
467
+ ]) => ({
468
+ index: isoIndex.wrap(index),
469
+ registers: Object.assign([
470
+ register0,
471
+ register1,
472
+ register2,
473
+ register3,
474
+ register4,
475
+ ], {
476
+ length: registerCount,
477
+ }),
478
+ }),
479
+ );
480
+
481
+ type DalvikBytecodeFormat3rc<Index> = {
482
+ index: Index;
483
+ registers: number[];
484
+ };
485
+
486
+ export const createDalvikBytecodeFormat3rcParser = <Index>({
487
+ isoIndex,
488
+ }: {
489
+ isoIndex: Iso<Index, number>;
490
+ }): Parser<DalvikBytecodeFormat3rc<Index>, Uint8Array> => promiseCompose(
491
+ createTupleParser([
492
+ ubyteParser,
493
+ ushortParser,
494
+ ushortParser,
495
+ ]),
496
+ ([
497
+ registerCount,
498
+ index,
499
+ firstRegister,
500
+ ]) => ({
501
+ index: isoIndex.wrap(index),
502
+ registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
503
+ }),
504
+ );
505
+
506
+ type DalvikBytecodeFormat51l = {
507
+ value: bigint;
508
+ registers: number[];
509
+ };
510
+
511
+ export const dalvikBytecodeFormat51lParser: Parser<DalvikBytecodeFormat51l, Uint8Array> = promiseCompose(
512
+ createTupleParser([
513
+ ubyteParser,
514
+ longParser,
515
+ ]),
516
+ ([
517
+ register0,
518
+ value,
519
+ ]) => ({
520
+ value,
521
+ registers: [
522
+ register0,
523
+ ],
524
+ }),
525
+ );
526
+
527
+ // Format 20bc: throw-verification-error
528
+ type DalvikBytecodeFormat20bc = {
529
+ kind: number;
530
+ index: number;
531
+ };
532
+
533
+ export const dalvikBytecodeFormat20bcParser: Parser<DalvikBytecodeFormat20bc, Uint8Array> = promiseCompose(
534
+ createTupleParser([
535
+ ubyteParser,
536
+ ushortParser,
537
+ ]),
538
+ ([
539
+ kind,
540
+ index,
541
+ ]) => ({
542
+ kind,
543
+ index,
544
+ }),
545
+ );
546
+
547
+ // Format 22cs: field access quick (deprecated)
548
+ type DalvikBytecodeFormat22cs = {
549
+ registers: number[];
550
+ fieldOffset: number;
551
+ };
552
+
553
+ export const dalvikBytecodeFormat22csParser: Parser<DalvikBytecodeFormat22cs, Uint8Array> = promiseCompose(
554
+ createTupleParser([
555
+ nibblesParser,
556
+ ushortParser,
557
+ ]),
558
+ ([
559
+ [
560
+ register0,
561
+ register1,
562
+ ],
563
+ fieldOffset,
564
+ ]) => ({
565
+ fieldOffset,
566
+ registers: [
567
+ register0,
568
+ register1,
569
+ ],
570
+ }),
571
+ );
572
+
573
+ // Format 35mi: invoke-*/inline (deprecated)
574
+ type DalvikBytecodeFormat35mi = {
575
+ inlineIndex: number;
576
+ registers: number[];
577
+ };
578
+
579
+ export const dalvikBytecodeFormat35miParser: Parser<DalvikBytecodeFormat35mi, Uint8Array> = promiseCompose(
580
+ createTupleParser([
581
+ nibblesParser,
582
+ ushortParser,
583
+ nibblesParser,
584
+ nibblesParser,
585
+ ]),
586
+ ([
587
+ [
588
+ registerCount,
589
+ register4,
590
+ ],
591
+ inlineIndex,
592
+ [
593
+ register1,
594
+ register0,
595
+ ],
596
+ [
597
+ register3,
598
+ register2,
599
+ ],
600
+ ]) => ({
601
+ inlineIndex,
602
+ registers: Object.assign([
603
+ register0,
604
+ register1,
605
+ register2,
606
+ register3,
607
+ register4,
608
+ ], {
609
+ length: registerCount,
610
+ }),
611
+ }),
612
+ );
613
+
614
+ // Format 35ms: invoke-*/quick (deprecated)
615
+ type DalvikBytecodeFormat35ms = {
616
+ vtableOffset: number;
617
+ registers: number[];
618
+ };
619
+
620
+ export const dalvikBytecodeFormat35msParser: Parser<DalvikBytecodeFormat35ms, Uint8Array> = promiseCompose(
621
+ createTupleParser([
622
+ nibblesParser,
623
+ ushortParser,
624
+ nibblesParser,
625
+ nibblesParser,
626
+ ]),
627
+ ([
628
+ [
629
+ registerCount,
630
+ register4,
631
+ ],
632
+ vtableOffset,
633
+ [
634
+ register1,
635
+ register0,
636
+ ],
637
+ [
638
+ register3,
639
+ register2,
640
+ ],
641
+ ]) => ({
642
+ vtableOffset,
643
+ registers: Object.assign([
644
+ register0,
645
+ register1,
646
+ register2,
647
+ register3,
648
+ register4,
649
+ ], {
650
+ length: registerCount,
651
+ }),
652
+ }),
653
+ );
654
+
655
+ // Format 3rmi: invoke-*/inline/range (deprecated)
656
+ type DalvikBytecodeFormat3rmi = {
657
+ inlineIndex: number;
658
+ registers: number[];
659
+ };
660
+
661
+ export const dalvikBytecodeFormat3rmiParser: Parser<DalvikBytecodeFormat3rmi, Uint8Array> = promiseCompose(
662
+ createTupleParser([
663
+ ubyteParser,
664
+ ushortParser,
665
+ ushortParser,
666
+ ]),
667
+ ([
668
+ registerCount,
669
+ inlineIndex,
670
+ firstRegister,
671
+ ]) => ({
672
+ inlineIndex,
673
+ registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
674
+ }),
675
+ );
676
+
677
+ // Format 3rms: invoke-*/quick/range (deprecated)
678
+ type DalvikBytecodeFormat3rms = {
679
+ vtableOffset: number;
680
+ registers: number[];
681
+ };
682
+
683
+ export const dalvikBytecodeFormat3rmsParser: Parser<DalvikBytecodeFormat3rms, Uint8Array> = promiseCompose(
684
+ createTupleParser([
685
+ ubyteParser,
686
+ ushortParser,
687
+ ushortParser,
688
+ ]),
689
+ ([
690
+ registerCount,
691
+ vtableOffset,
692
+ firstRegister,
693
+ ]) => ({
694
+ vtableOffset,
695
+ registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
696
+ }),
697
+ );
698
+
699
+ // Format 45cc: invoke-polymorphic
700
+ type DalvikBytecodeFormat45cc<MethodIndex, ProtoIndex> = {
701
+ methodIndex: MethodIndex;
702
+ protoIndex: ProtoIndex;
703
+ registers: number[];
704
+ };
705
+
706
+ export const createDalvikBytecodeFormat45ccParser = <MethodIndex, ProtoIndex>({
707
+ isoMethodIndex,
708
+ isoProtoIndex,
709
+ }: {
710
+ isoMethodIndex: Iso<MethodIndex, number>;
711
+ isoProtoIndex: Iso<ProtoIndex, number>;
712
+ }): Parser<DalvikBytecodeFormat45cc<MethodIndex, ProtoIndex>, Uint8Array> => promiseCompose(
713
+ createTupleParser([
714
+ nibblesParser,
715
+ ushortParser,
716
+ nibblesParser,
717
+ nibblesParser,
718
+ ushortParser,
719
+ ]),
720
+ ([
721
+ [
722
+ registerCount,
723
+ register4,
724
+ ],
725
+ methodIndex,
726
+ [
727
+ register1,
728
+ register0,
729
+ ],
730
+ [
731
+ register3,
732
+ register2,
733
+ ],
734
+ protoIndex,
735
+ ]) => ({
736
+ methodIndex: isoMethodIndex.wrap(methodIndex),
737
+ protoIndex: isoProtoIndex.wrap(protoIndex),
738
+ registers: Object.assign([
739
+ register0,
740
+ register1,
741
+ register2,
742
+ register3,
743
+ register4,
744
+ ], {
745
+ length: registerCount,
746
+ }),
747
+ }),
748
+ );
749
+
750
+ // Format 4rcc: invoke-polymorphic/range
751
+ type DalvikBytecodeFormat4rcc<MethodIndex, ProtoIndex> = {
752
+ methodIndex: MethodIndex;
753
+ protoIndex: ProtoIndex;
754
+ registers: number[];
755
+ };
756
+
757
+ export const createDalvikBytecodeFormat4rccParser = <MethodIndex, ProtoIndex>({
758
+ isoMethodIndex,
759
+ isoProtoIndex,
760
+ }: {
761
+ isoMethodIndex: Iso<MethodIndex, number>;
762
+ isoProtoIndex: Iso<ProtoIndex, number>;
763
+ }): Parser<DalvikBytecodeFormat4rcc<MethodIndex, ProtoIndex>, Uint8Array> => promiseCompose(
764
+ createTupleParser([
765
+ ubyteParser,
766
+ ushortParser,
767
+ ushortParser,
768
+ ushortParser,
769
+ ]),
770
+ ([
771
+ registerCount,
772
+ methodIndex,
773
+ firstRegister,
774
+ protoIndex,
775
+ ]) => ({
776
+ methodIndex: isoMethodIndex.wrap(methodIndex),
777
+ protoIndex: isoProtoIndex.wrap(protoIndex),
778
+ registers: Array.from({ length: registerCount }, (_, index) => firstRegister + index),
779
+ }),
780
+ );