@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
@@ -1,58 +1,54 @@
1
1
  import zlib from 'node:zlib';
2
- import { Unparser } from "./unparser.js";
3
- import { Zip, ZipEntry, ZipFileEntry } from "./zip.js";
4
2
  import { Readable } from 'node:stream';
5
3
  import { pipeline } from 'node:stream/promises';
6
- import { ZipEndOfCentralDirectoryRecord } from './zipParser.js';
4
+ import { type Unparser } from './unparser.js';
5
+ import { type Zip, type ZipEntry, type ZipFileEntry } from './zip.js';
6
+ import { type ZipEndOfCentralDirectoryRecord, type ZipLocalFileHeader } from './zipParser.js';
7
7
  import { uint8ArrayAsyncIterableToUint8Array } from './uint8Array.js';
8
8
 
9
9
  const uint16LEUnparser: Unparser<number, Uint8Array> = async function * (uint16LE) {
10
10
  const buffer = Buffer.alloc(2);
11
11
  buffer.writeUInt16LE(uint16LE);
12
12
  yield buffer;
13
- }
13
+ };
14
14
 
15
15
  const uint32LEUnparser: Unparser<number, Uint8Array> = async function * (uint32LE) {
16
16
  const buffer = Buffer.alloc(4);
17
17
  buffer.writeUInt32LE(uint32LE);
18
18
  yield buffer;
19
- }
19
+ };
20
20
 
21
21
  const uint16LEPrefixedUint8ArrayUnparser: Unparser<Uint8Array, Uint8Array> = async function * (uint8Array, unparserContext) {
22
22
  yield * uint16LEUnparser(uint8Array.length, unparserContext);
23
23
  yield uint8Array;
24
- }
24
+ };
25
25
 
26
26
  const uint16LEPrefixedStringUnparser: Unparser<string, Uint8Array> = async function * (string, unparserContext) {
27
27
  yield * uint16LEPrefixedUint8ArrayUnparser(Buffer.from(string, 'utf8'), unparserContext);
28
- }
28
+ };
29
29
 
30
30
  const dosDateTimeUnparser: Unparser<Date, Uint8Array> = async function * (date, unparserContext) {
31
31
  yield * uint16LEUnparser(
32
32
  (
33
33
  date.getUTCSeconds() / 2
34
- | date.getUTCMinutes() << 5
35
- | date.getUTCHours() << 11
34
+ | date.getUTCMinutes() << 5
35
+ | date.getUTCHours() << 11
36
36
  ),
37
37
  unparserContext,
38
38
  );
39
39
  yield * uint16LEUnparser(
40
40
  (
41
41
  date.getUTCDate()
42
- | (date.getUTCMonth() + 1) << 5
43
- | (date.getUTCFullYear() - 1980) << 9
42
+ | (date.getUTCMonth() + 1) << 5
43
+ | (date.getUTCFullYear() - 1980) << 9
44
44
  ),
45
45
  unparserContext,
46
46
  );
47
- }
47
+ };
48
48
 
49
49
  const zipCompressionMethodUnparser: Unparser<'store' | 'deflate', Uint8Array> = async function * (compressionMethod, unparserContext) {
50
- if (compressionMethod === 'store') {
51
- yield * uint16LEUnparser(0, unparserContext);
52
- } else {
53
- yield * uint16LEUnparser(8, unparserContext);
54
- }
55
- }
50
+ yield * (compressionMethod === 'store' ? uint16LEUnparser(0, unparserContext) : uint16LEUnparser(8, unparserContext));
51
+ };
56
52
 
57
53
  export const zipEndOfCentralDirectoryRecordUnparser: Unparser<ZipEndOfCentralDirectoryRecord, Uint8Array> = async function * (zipEndOfCentralDirectoryRecord, unparserContext) {
58
54
  yield Buffer.from('504b0506', 'hex');
@@ -64,80 +60,135 @@ export const zipEndOfCentralDirectoryRecordUnparser: Unparser<ZipEndOfCentralDir
64
60
  yield * uint32LEUnparser(zipEndOfCentralDirectoryRecord.offsetOfStartOfCentralDirectoryWithRespectToTheStartingDiskNumber, unparserContext);
65
61
 
66
62
  yield * uint16LEPrefixedStringUnparser(zipEndOfCentralDirectoryRecord.zipFileComment, unparserContext);
67
- }
68
-
69
- export const zipUnparser: Unparser<Zip, Uint8Array> = async function * (zip, unparserContext) {
70
- const compressedContentByZipFileEntry = new Map<ZipFileEntry, undefined | Promise<Uint8Array>>(
71
- zip.entries.flatMap(zipEntry => {
72
- if (zipEntry.type !== 'file') {
73
- return [];
74
- }
63
+ };
64
+
65
+ const zipDataDescriptorUnparser: Unparser<{
66
+ crc32: number;
67
+ compressedSize: number;
68
+ uncompressedSize: number;
69
+ }, Uint8Array> = async function * ({
70
+ crc32,
71
+ compressedSize,
72
+ uncompressedSize,
73
+ }, unparserContext) {
74
+ yield Buffer.from('504b0708', 'hex');
75
+ yield * uint32LEUnparser(crc32, unparserContext);
76
+ yield * uint32LEUnparser(compressedSize, unparserContext);
77
+ yield * uint32LEUnparser(uncompressedSize, unparserContext);
78
+ };
79
+
80
+ const zipLocalFileHeaderUnparser: Unparser<ZipLocalFileHeader, Uint8Array> = async function * ({
81
+ versionNeededToExtract,
82
+ generalPurposeBitFlag,
83
+ compressionMethod,
84
+ lastModifiedFile,
85
+ crc32,
86
+ compressedSize,
87
+ uncompressedSize,
88
+
89
+ filePath,
90
+ extraField,
91
+ }, unparserContext) {
92
+ yield Buffer.from('504b0304', 'hex');
93
+
94
+ yield * uint16LEUnparser(versionNeededToExtract, unparserContext);
95
+ yield * uint16LEUnparser(generalPurposeBitFlag, unparserContext);
96
+ yield * zipCompressionMethodUnparser(compressionMethod, unparserContext);
97
+ yield * dosDateTimeUnparser(lastModifiedFile, unparserContext);
98
+ yield * uint32LEUnparser(crc32, unparserContext);
99
+ yield * uint32LEUnparser(compressedSize, unparserContext);
100
+ yield * uint32LEUnparser(uncompressedSize, unparserContext);
101
+
102
+ const filePathBuffer = Buffer.from(filePath, 'utf8');
103
+
104
+ yield * uint16LEUnparser(filePathBuffer.length, unparserContext);
105
+ yield * uint16LEUnparser(extraField.length, unparserContext);
106
+ yield filePathBuffer;
107
+ yield extraField;
108
+ };
109
+
110
+ export const createZipUnparser = ({
111
+ dataDescriptor = false,
112
+ }: {
113
+ dataDescriptor?: boolean;
114
+ } = {}): Unparser<Zip, Uint8Array> => async function * (zip, unparserContext) {
115
+ const compressedContentByZipFileEntry = new Map<ZipFileEntry, undefined | Promise<Uint8Array>>(zip.entries.flatMap(zipEntry => {
116
+ if (zipEntry.type !== 'file') {
117
+ return [];
118
+ }
75
119
 
76
- if (zipEntry.compression === 'store') {
77
- return [[zipEntry, Promise.resolve(zipEntry.content)]];
78
- }
120
+ if (zipEntry.compression === 'store') {
121
+ return [ [ zipEntry, Promise.resolve(zipEntry.content) ] ];
122
+ }
79
123
 
80
- const uncompressedContent = zipEntry.content;
124
+ const uncompressedContent = zipEntry.content;
81
125
 
82
- const deflate = zlib.createDeflateRaw();
83
- const input = Readable.from(Buffer.from(uncompressedContent));
126
+ const deflate = zlib.createDeflateRaw();
127
+ const input = Readable.from(Buffer.from(uncompressedContent));
84
128
 
85
- const promise = Promise.all([
86
- pipeline(input, deflate),
87
- uint8ArrayAsyncIterableToUint8Array(deflate),
88
- ]);
129
+ const promise = Promise.all([
130
+ pipeline(input, deflate),
131
+ uint8ArrayAsyncIterableToUint8Array(deflate),
132
+ ]);
89
133
 
90
- return [[zipEntry, promise.then(([, compressedContent]) => compressedContent)]];
91
- }),
92
- );
134
+ return [ [ zipEntry, promise.then(([ , compressedContent ]) => compressedContent) ] ];
135
+ }));
93
136
 
94
- const filePathByZipEntry = new Map<ZipEntry, string>(
95
- zip.entries.map(zipEntry => [zipEntry, zipEntry.type === 'file' ? zipEntry.path : zipEntry.path + '/']),
96
- );
137
+ const filePathByZipEntry = new Map<ZipEntry, string>(zip.entries.map(zipEntry => [ zipEntry, zipEntry.type === 'file' ? zipEntry.path : zipEntry.path + '/' ]));
97
138
 
98
139
  const localHeaderPositionByZipEntry = new Map<ZipEntry, number>();
99
140
 
100
141
  for (const zipEntry of zip.entries) {
101
142
  localHeaderPositionByZipEntry.set(zipEntry, unparserContext.position);
102
143
 
103
- yield Buffer.from('504b0304', 'hex');
144
+ const filePath = filePathByZipEntry.get(zipEntry)!;
104
145
 
105
- yield * uint16LEUnparser(10, unparserContext); // version needed to extract
106
- yield * uint16LEUnparser(0, unparserContext); // general purpose bit flag
146
+ const zipLocalFileHeader: ZipLocalFileHeader = {
147
+ versionNeededToExtract: 20,
148
+ generalPurposeBitFlag: 0,
149
+ compressionMethod: 'store',
150
+ lastModifiedFile: zipEntry.date,
151
+ crc32: 0,
152
+ compressedSize: 0,
153
+ uncompressedSize: 0,
154
+ filePath,
155
+ extraField: Buffer.alloc(0),
156
+ };
107
157
 
108
- if (zipEntry.type === 'file') {
109
- yield * zipCompressionMethodUnparser(zipEntry.compression, unparserContext);
110
- } else {
111
- yield * uint16LEUnparser(0, unparserContext);
112
- }
113
-
114
- yield * dosDateTimeUnparser(zipEntry.date, unparserContext);
158
+ let shouldWriteDataDescriptor = false;
115
159
 
116
160
  if (zipEntry.type === 'file') {
117
161
  const compressedContent = await compressedContentByZipFileEntry.get(zipEntry)!;
118
162
 
119
- yield * uint32LEUnparser(0, unparserContext); // crc32 // TODO
120
- yield * uint32LEUnparser(compressedContent.length, unparserContext);
121
- yield * uint32LEUnparser(zipEntry.content.length, unparserContext);
122
- } else {
123
- yield * uint32LEUnparser(0, unparserContext);
124
- yield * uint32LEUnparser(0, unparserContext);
125
- yield * uint32LEUnparser(0, unparserContext);
126
- }
163
+ zipLocalFileHeader.compressionMethod = zipEntry.compression;
164
+ zipLocalFileHeader.crc32 = 0; // TODO
165
+ zipLocalFileHeader.compressedSize = compressedContent.length;
166
+ zipLocalFileHeader.uncompressedSize = zipEntry.content.length;
127
167
 
128
- const filePath = filePathByZipEntry.get(zipEntry)!;
168
+ if (dataDescriptor) {
169
+ shouldWriteDataDescriptor = true;
129
170
 
130
- const filePathBuffer = Buffer.from(filePath, 'utf8');
131
- const extraFieldBuffer = Buffer.alloc(0);
132
- yield * uint16LEUnparser(filePathBuffer.length, unparserContext);
133
- yield * uint16LEUnparser(extraFieldBuffer.length, unparserContext);
134
- yield filePathBuffer;
135
- yield extraFieldBuffer;
171
+ zipLocalFileHeader.generalPurposeBitFlag |= 0b0000_0000_0000_1000;
172
+ zipLocalFileHeader.crc32 = 0;
173
+ zipLocalFileHeader.compressedSize = 0;
174
+ zipLocalFileHeader.uncompressedSize = 0;
175
+ }
176
+ }
177
+
178
+ yield * zipLocalFileHeaderUnparser(zipLocalFileHeader, unparserContext);
136
179
 
137
180
  if (zipEntry.type === 'file') {
138
181
  const compressedContent = await compressedContentByZipFileEntry.get(zipEntry)!;
139
182
 
140
183
  yield compressedContent;
184
+
185
+ if (shouldWriteDataDescriptor) {
186
+ yield * zipDataDescriptorUnparser({
187
+ crc32: zipLocalFileHeader.crc32,
188
+ compressedSize: zipLocalFileHeader.compressedSize,
189
+ uncompressedSize: zipLocalFileHeader.uncompressedSize,
190
+ }, unparserContext);
191
+ }
141
192
  }
142
193
  }
143
194
 
@@ -147,28 +198,24 @@ export const zipUnparser: Unparser<Zip, Uint8Array> = async function * (zip, unp
147
198
  yield Buffer.from('504b0102', 'hex');
148
199
 
149
200
  if (zipEntry.hostSystem === 'unix') {
150
- yield 0; // zip specification version
151
- yield 3; // host system
201
+ yield 0; // Zip specification version
202
+ yield 3; // Host system
152
203
  } else {
153
204
  yield 0;
154
205
  yield 0;
155
206
  }
156
207
 
157
- yield * uint16LEUnparser(0, unparserContext); // version needed to extract
158
- yield * uint16LEUnparser(0, unparserContext); // general purpose bit flag
208
+ yield * uint16LEUnparser(0, unparserContext); // Version needed to extract
209
+ yield * uint16LEUnparser(0, unparserContext); // General purpose bit flag
159
210
 
160
- if (zipEntry.type === 'file') {
161
- yield * zipCompressionMethodUnparser(zipEntry.compression, unparserContext);
162
- } else {
163
- yield * uint16LEUnparser(0, unparserContext);
164
- }
211
+ yield * (zipEntry.type === 'file' ? zipCompressionMethodUnparser(zipEntry.compression, unparserContext) : uint16LEUnparser(0, unparserContext));
165
212
 
166
213
  yield * dosDateTimeUnparser(zipEntry.date, unparserContext);
167
214
 
168
215
  if (zipEntry.type === 'file') {
169
216
  const compressedContent = await compressedContentByZipFileEntry.get(zipEntry)!;
170
217
 
171
- yield * uint32LEUnparser(0, unparserContext); // crc32 // TODO
218
+ yield * uint32LEUnparser(0, unparserContext); // Crc32 // TODO
172
219
  yield * uint32LEUnparser(compressedContent.length, unparserContext);
173
220
  yield * uint32LEUnparser(zipEntry.content.length, unparserContext);
174
221
  } else {
@@ -186,18 +233,18 @@ export const zipUnparser: Unparser<Zip, Uint8Array> = async function * (zip, unp
186
233
  const fileCommentBuffer = Buffer.from(zipEntry.comment, 'utf8');
187
234
  yield * uint16LEUnparser(fileCommentBuffer.length, unparserContext);
188
235
 
189
- yield * uint16LEUnparser(0, unparserContext); // disk number start
190
- yield * uint16LEUnparser(0, unparserContext); // internal file attributes
236
+ yield * uint16LEUnparser(0, unparserContext); // Disk number start
237
+ yield * uint16LEUnparser(0, unparserContext); // Internal file attributes
191
238
 
192
239
  if (zipEntry.hostSystem === 'unix') {
193
240
  yield * uint32LEUnparser(
194
241
  (
195
242
  0
196
- | (
197
- zipEntry.type === 'directory'
198
- ? (0b0100_0000_0000_0000 << 16)
199
- : (0b1000_0000_0000_0000 << 16)
200
- )
243
+ | (
244
+ zipEntry.type === 'directory'
245
+ ? (0b0100_0000_0000_0000 << 16)
246
+ : (0b1000_0000_0000_0000 << 16)
247
+ )
201
248
  ) >>> 0,
202
249
  unparserContext,
203
250
  );
@@ -205,11 +252,11 @@ export const zipUnparser: Unparser<Zip, Uint8Array> = async function * (zip, unp
205
252
  yield * uint32LEUnparser(
206
253
  (
207
254
  0
208
- | (
209
- zipEntry.type === 'directory'
210
- ? 0b0001_0000
211
- : 0
212
- )
255
+ | (
256
+ zipEntry.type === 'directory'
257
+ ? 0b0001_0000
258
+ : 0
259
+ )
213
260
  ),
214
261
  unparserContext,
215
262
  );
@@ -236,4 +283,6 @@ export const zipUnparser: Unparser<Zip, Uint8Array> = async function * (zip, unp
236
283
  offsetOfStartOfCentralDirectoryWithRespectToTheStartingDiskNumber: startOfCentralDirectoryPosition,
237
284
  zipFileComment: zip.comment,
238
285
  }, unparserContext);
239
- }
286
+ };
287
+
288
+ export const zipUnparser = createZipUnparser();
package/tsconfig.json CHANGED
@@ -105,5 +105,11 @@
105
105
  /* Completeness */
106
106
  // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
107
107
  "skipLibCheck": true /* Skip type checking all .d.ts files. */
108
- }
108
+ },
109
+ "include": [
110
+ "src/**/*"
111
+ ],
112
+ "exclude": [
113
+ "xo.config.ts"
114
+ ]
109
115
  }
package/xo.config.ts ADDED
@@ -0,0 +1,15 @@
1
+ import { createRequire } from 'node:module';
2
+
3
+ const require = createRequire(import.meta.url);
4
+ const tsOverridesModule = require('eslint-config-xo-typescript-overrides');
5
+
6
+ const tsOverrides = tsOverridesModule.default || tsOverridesModule;
7
+
8
+ export default [
9
+ ...tsOverrides,
10
+ {
11
+ rules: {
12
+ 'ava/no-ignored-test-files': 'off',
13
+ },
14
+ },
15
+ ];