@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,13 +1,16 @@
1
1
  /* eslint-disable prefer-arrow-callback */
2
2
 
3
- import invariant from 'invariant';
4
3
  import { type ParserInputCompanion } from './parserInputCompanion.js';
5
4
  import { type InputReader } from './inputReader.js';
6
5
  import {
7
- type ParserParsingFailedError, ParserUnexpectedEndOfInputError, ParserParsingInvariantError, ParserParsingJoinNoneError, ParserParsingJoinAllError, ParserParsingJoinDeepestError, ParserParsingJoinFurthestError,
6
+ normalParserErrorModule,
7
+ noStackCaptureOverheadParserErrorModule,
8
+ ParserParsingFailedError,
8
9
  } from './parserError.js';
9
10
  import { type RunParserOptions } from './parser.js';
10
11
  import { type Falsy, customInvariant, type ValueOrAccessor } from './customInvariant.js';
12
+ import { parserImplementationInvariant } from './parserImplementationInvariant.js';
13
+ import { formatLazyMessage, isLazyMessageError, LazyMessage } from './lazyMessageError.js';
11
14
 
12
15
  type LookaheadOptions = {
13
16
  debugName?: string;
@@ -17,25 +20,35 @@ type LookaheadOptions = {
17
20
  type ParserContextOptions<Sequence, Element> =
18
21
  & RunParserOptions<unknown, Sequence, Element>
19
22
  & LookaheadOptions
23
+ & {
24
+ errorsModule: typeof normalParserErrorModule | typeof noStackCaptureOverheadParserErrorModule;
25
+ }
20
26
  ;
21
27
 
22
28
  export type ParserContext<Sequence, Element> = {
23
29
  from(elements: Element[]): Sequence;
30
+ concat(sequences: Sequence[]): Sequence;
24
31
  length(sequence: Sequence): number;
25
32
  at(sequence: Sequence, index: number): Element | undefined;
33
+ subsequence(sequence: Sequence, start: number, end: number): Sequence;
34
+ indexOf(sequence: Sequence, element: Element, fromIndex?: number): number;
35
+ indexOfSubsequence(sequence: Sequence, subsequence: Sequence, fromIndex?: number): number;
36
+ equals(sequenceA: Sequence, sequenceB: Sequence): boolean;
26
37
 
27
38
  get position(): number;
28
39
  peek(offset: number): Promise<Element | undefined>;
40
+ peekSequence(start: number, end: number): Promise<Sequence | undefined>;
29
41
  skip(offset: number): void;
30
42
 
31
43
  read(offset: number): Promise<Element>;
44
+ readSequence(start: number, end: number): Promise<Sequence>;
32
45
 
33
46
  lookahead(options?: LookaheadOptions): ParserContext<Sequence, Element>;
34
47
  unlookahead(): void;
35
48
  dispose(): void;
36
49
 
37
- invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments: any[]): Exclude<T, Falsy>;
38
- invariantJoin<T>(value: T, childErrors: ParserParsingFailedError[], format: ValueOrAccessor<string | string[]>, ...formatArguments: any[]): Exclude<T, Falsy>;
50
+ invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy>;
51
+ invariantJoin<T>(value: T, childErrors: ParserParsingFailedError[], format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy>;
39
52
  };
40
53
 
41
54
  let parserContextId = 0;
@@ -72,6 +85,10 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
72
85
  return this._parserInputCompanion.from(elements);
73
86
  }
74
87
 
88
+ concat(sequences: Sequence[]): Sequence {
89
+ return this._parserInputCompanion.concat(sequences);
90
+ }
91
+
75
92
  length(sequence: Sequence): number {
76
93
  return this._parserInputCompanion.length(sequence);
77
94
  }
@@ -80,6 +97,22 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
80
97
  return this._parserInputCompanion.at(sequence, index);
81
98
  }
82
99
 
100
+ subsequence(sequence: Sequence, start: number, end: number): Sequence {
101
+ return this._parserInputCompanion.subsequence(sequence, start, end);
102
+ }
103
+
104
+ indexOf(sequence: Sequence, element: Element, fromIndex?: number): number {
105
+ return this._parserInputCompanion.indexOf(sequence, element, fromIndex);
106
+ }
107
+
108
+ indexOfSubsequence(sequence: Sequence, subsequence: Sequence, fromIndex?: number): number {
109
+ return this._parserInputCompanion.indexOfSubsequence(sequence, subsequence, fromIndex);
110
+ }
111
+
112
+ equals(sequenceA: Sequence, sequenceB: Sequence): boolean {
113
+ return this._parserInputCompanion.equals(sequenceA, sequenceB);
114
+ }
115
+
83
116
  get position() {
84
117
  return this._inputReader.position;
85
118
  }
@@ -87,7 +120,7 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
87
120
  async peek(offset: number): Promise<Element | undefined> {
88
121
  if (
89
122
  this._options.sliceEnd !== undefined
90
- && (this.position + offset) >= this._options.sliceEnd
123
+ && (this.position + offset) >= this._options.sliceEnd
91
124
  ) {
92
125
  return undefined;
93
126
  }
@@ -95,6 +128,39 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
95
128
  return this._inputReader.peek(offset);
96
129
  }
97
130
 
131
+ async peekSequence(start: number, end: number): Promise<Sequence | undefined> {
132
+ if (
133
+ this._options.sliceEnd !== undefined
134
+ && (this.position + end - 1) >= this._options.sliceEnd
135
+ ) {
136
+ return undefined;
137
+ }
138
+
139
+ parserImplementationInvariant(
140
+ start >= 0,
141
+ 'start (%s) >= 0',
142
+ start,
143
+ );
144
+ parserImplementationInvariant(
145
+ end >= start,
146
+ 'end (%s) >= start (%s)',
147
+ start,
148
+ end,
149
+ );
150
+ parserImplementationInvariant(
151
+ Number.isSafeInteger(start),
152
+ 'start (%d) is not a safe integer',
153
+ start,
154
+ );
155
+ parserImplementationInvariant(
156
+ Number.isSafeInteger(end),
157
+ 'end (%d) is not a safe integer',
158
+ end,
159
+ );
160
+
161
+ return this._inputReader.peekSequence(start, end);
162
+ }
163
+
98
164
  skip(offset: number) {
99
165
  this._inputReader.skip(offset);
100
166
  }
@@ -103,7 +169,7 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
103
169
  const element = await this.peek(offset);
104
170
 
105
171
  if (element === undefined) {
106
- throw new ParserUnexpectedEndOfInputError('', this._depth, this.position);
172
+ throw new this._options.errorsModule.ParserUnexpectedEndOfInputError('', this._depth, this.position);
107
173
  }
108
174
 
109
175
  this.skip(offset + 1);
@@ -111,21 +177,31 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
111
177
  return element;
112
178
  }
113
179
 
114
- lookahead(options: LookaheadOptions = {}): ParserContext<Sequence, Element> {
115
- const lookaheadInputReader = this._inputReader.lookahead();
180
+ async readSequence(start: number, end: number): Promise<Sequence> {
181
+ const sequence = await this.peekSequence(start, end);
116
182
 
117
- if (this.position !== lookaheadInputReader.position) {
118
- debugger;
183
+ if (sequence === undefined) {
184
+ throw new this._options.errorsModule.ParserUnexpectedEndOfInputError('', this._depth, this.position);
119
185
  }
120
186
 
121
- invariant(
187
+ this.skip(end);
188
+
189
+ return sequence;
190
+ }
191
+
192
+ lookahead(options: LookaheadOptions = {}): ParserContext<Sequence, Element> {
193
+ const lookaheadInputReader = this._inputReader.lookahead();
194
+
195
+ parserImplementationInvariant(
122
196
  this.position === lookaheadInputReader.position,
123
197
  'lookahead this.position (%s) === lookaheadInputReader.position (%s)',
124
198
  this.position,
125
199
  lookaheadInputReader.position,
126
200
  );
127
201
 
128
- const lookaheadParserContext = new ParserContextImplementation(
202
+ const ParserContext = this._options.parserContextClass ?? ParserContextImplementation;
203
+
204
+ const lookaheadParserContext = new ParserContext<Sequence, Element>(
129
205
  this._parserInputCompanion,
130
206
  lookaheadInputReader,
131
207
  this,
@@ -143,11 +219,7 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
143
219
  },
144
220
  );
145
221
 
146
- if (this.position !== lookaheadParserContext.position) {
147
- debugger;
148
- }
149
-
150
- invariant(
222
+ parserImplementationInvariant(
151
223
  this.position === lookaheadParserContext.position,
152
224
  'lookahead this.position (%s) === lookaheadParserContext.position (%s)',
153
225
  this.position,
@@ -158,42 +230,45 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
158
230
  }
159
231
 
160
232
  unlookahead() {
161
- invariant(this._parentParserContext !== undefined, 'this._parentParserContext !== undefined');
162
- invariant(
233
+ const parentParserContext = parserImplementationInvariant(
234
+ this._parentParserContext,
235
+ 'this._parentParserContext !== undefined',
236
+ );
237
+ parserImplementationInvariant(
163
238
  (
164
- this._parentParserContext._exclusiveChildParserContext === undefined
165
- || this._parentParserContext._exclusiveChildParserContext === this
239
+ parentParserContext._exclusiveChildParserContext === undefined
240
+ || parentParserContext._exclusiveChildParserContext === this
166
241
  ),
167
242
  [
168
243
  'Parent\'s exclusive child must be undefined or this',
169
244
  'this: %s',
170
245
  'parent: %s',
171
246
  'parent.exclusiveChild: %s',
172
- ].join('\n'),
173
- this.toString(),
174
- this._parentParserContext.toString(),
175
- this._parentParserContext._exclusiveChildParserContext?.toString(),
247
+ ],
248
+ () => this.toString(),
249
+ () => parentParserContext.toString(),
250
+ () => parentParserContext._exclusiveChildParserContext?.toString(),
176
251
  );
177
- invariant(
178
- this._parentParserContext.position <= this.position,
252
+ parserImplementationInvariant(
253
+ parentParserContext.position <= this.position,
179
254
  'unlookahead this._parentParserContext.position (%s) <= this.position (%s)',
180
- this._parentParserContext.position,
255
+ parentParserContext.position,
181
256
  this.position,
182
257
  );
183
258
 
184
- const offset = this._inputReader.position - this._parentParserContext._inputReader.position;
259
+ const offset = this._inputReader.position - parentParserContext._inputReader.position;
185
260
 
186
- this._parentParserContext.skip(offset);
261
+ parentParserContext.skip(offset);
187
262
 
188
- invariant(
189
- this._parentParserContext.position === this.position,
263
+ parserImplementationInvariant(
264
+ parentParserContext.position === this.position,
190
265
  'unlookahead this._parentParserContext.position (%s) === this.position (%s)',
191
- this._parentParserContext.position,
266
+ parentParserContext.position,
192
267
  this.position,
193
268
  );
194
269
 
195
- this._inputReader = this._parentParserContext._inputReader;
196
- this._parentParserContext._exclusiveChildParserContext = this;
270
+ this._inputReader = parentParserContext._inputReader;
271
+ parentParserContext._exclusiveChildParserContext = this;
197
272
 
198
273
  if (this._exclusiveChildParserContext) {
199
274
  this._exclusiveChildParserContext.unlookahead();
@@ -201,49 +276,52 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
201
276
  }
202
277
 
203
278
  dispose() {
204
- invariant(this._parentParserContext !== undefined, 'this._parentParserContext !== undefined');
205
- invariant(
279
+ const parentParserContext = parserImplementationInvariant(
280
+ this._parentParserContext,
281
+ 'this._parentParserContext !== undefined',
282
+ );
283
+ parserImplementationInvariant(
206
284
  (
207
- this._parentParserContext._exclusiveChildParserContext === undefined
208
- || this._parentParserContext._exclusiveChildParserContext === this
285
+ parentParserContext._exclusiveChildParserContext === undefined
286
+ || parentParserContext._exclusiveChildParserContext === this
209
287
  ),
210
288
  [
211
289
  'Parent\'s exclusive child must be undefined or this',
212
290
  'this: %s',
213
291
  'parent: %s',
214
292
  'parent.exclusiveChild: %s',
215
- ].join('\n'),
216
- this.toString(),
217
- this._parentParserContext.toString(),
218
- this._parentParserContext._exclusiveChildParserContext?.toString(),
293
+ ],
294
+ () => this.toString(),
295
+ () => parentParserContext.toString(),
296
+ () => parentParserContext._exclusiveChildParserContext?.toString(),
219
297
  );
220
298
 
221
- this._parentParserContext._exclusiveChildParserContext = undefined;
299
+ parentParserContext._exclusiveChildParserContext = undefined;
222
300
  this._parentParserContext = undefined;
223
301
  }
224
302
 
225
- invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments: any[]): Exclude<T, Falsy> {
303
+ invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy> {
226
304
  const parserContext = this;
227
305
 
228
- return customInvariant(function (message: string) {
229
- return new ParserParsingInvariantError(message, parserContext._depth, parserContext.position);
306
+ return customInvariant(function (lazyMessage: LazyMessage) {
307
+ return new parserContext._options.errorsModule.ParserParsingInvariantError(lazyMessage, parserContext._depth, parserContext.position);
230
308
  }, value, format, ...formatArguments);
231
309
  }
232
310
 
233
- invariantJoin<T>(value: T, childErrors: ParserParsingFailedError[], format: ValueOrAccessor<string | string[]>, ...formatArguments: any[]): Exclude<T, Falsy> {
234
- invariant(childErrors.length > 0, 'childErrors.length > 0');
311
+ invariantJoin<T>(value: T, childErrors: ParserParsingFailedError[], format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy> {
312
+ parserImplementationInvariant(childErrors.length > 0, 'childErrors.length > 0');
235
313
 
236
314
  const errorJoinMode = this._options.errorJoinMode ?? 'none';
237
315
  const parserContext = this;
238
316
 
239
317
  if (errorJoinMode === 'none') {
240
- return customInvariant(function (message: string) {
241
- return new ParserParsingJoinNoneError(message, parserContext._depth, parserContext.position);
318
+ return customInvariant(function (lazyMessage: LazyMessage) {
319
+ return new parserContext._options.errorsModule.ParserParsingJoinNoneError(lazyMessage, parserContext._depth, parserContext.position);
242
320
  }, value, format, ...formatArguments);
243
321
  }
244
322
 
245
323
  if (errorJoinMode === 'furthest') {
246
- return customInvariant(function (message: string) {
324
+ return customInvariant(function (userLazyMessage: LazyMessage) {
247
325
  let furthestPosition = 0;
248
326
  let furthestChildErrors: ParserParsingFailedError[] = [];
249
327
 
@@ -261,23 +339,35 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
261
339
  furthestChildErrors.push(childError);
262
340
  }
263
341
 
264
- message += [
265
- '',
266
- 'Furthest child error stacks, indented:',
267
- ...furthestChildErrors.flatMap(furthestChildError => furthestChildError.stack?.split('\n').map(line => ' ' + line)),
268
- 'End of furthest child error stacks',
269
- ].join('\n');
270
-
271
- return new ParserParsingJoinFurthestError(message, parserContext._depth, furthestPosition, furthestChildErrors);
342
+ return new parserContext._options.errorsModule.ParserParsingJoinFurthestError([
343
+ [
344
+ '%s',
345
+ 'Furthest child error stacks, indented:',
346
+ '%s',
347
+ 'End of furthest child error stacks',
348
+ ],
349
+ () => formatLazyMessage(userLazyMessage),
350
+ () => furthestChildErrors.flatMap(furthestChildError => {
351
+ if (isLazyMessageError(furthestChildError)) {
352
+ furthestChildError.computeMessage();
353
+ }
354
+
355
+ return furthestChildError.stack?.split('\n').map(line => ' ' + line);
356
+ }).join('\n'),
357
+ ], parserContext._depth, furthestPosition, furthestChildErrors);
272
358
  }, value, format, ...formatArguments);
273
359
  }
274
360
 
275
361
  if (errorJoinMode === 'deepest') {
276
- return customInvariant(function (message: string) {
362
+ return customInvariant(function (userLazyMessage: LazyMessage) {
277
363
  let deepestDepth = 0;
278
364
  let deepestChildErrors: ParserParsingFailedError[] = [];
279
365
 
280
366
  for (const childError of childErrors) {
367
+ if (isLazyMessageError(childError)) {
368
+ childError.computeMessage();
369
+ }
370
+
281
371
  if (childError.depth < deepestDepth) {
282
372
  continue;
283
373
  }
@@ -291,30 +381,46 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
291
381
  deepestChildErrors.push(childError);
292
382
  }
293
383
 
294
- message += [
295
- '',
296
- 'Deepest child error stacks, indented:',
297
- ...deepestChildErrors.flatMap(deepestChildError => deepestChildError.stack?.split('\n').map(line => ' ' + line)),
298
- 'End of deepest child error stacks',
299
- ].join('\n');
300
-
301
- return new ParserParsingJoinDeepestError(message, deepestDepth, parserContext.position, deepestChildErrors);
384
+ return new parserContext._options.errorsModule.ParserParsingJoinDeepestError([
385
+ [
386
+ '%s',
387
+ 'Deepest child error stacks, indented:',
388
+ '%s',
389
+ 'End of deepest child error stacks',
390
+ ],
391
+ () => formatLazyMessage(userLazyMessage),
392
+ () => deepestChildErrors.flatMap(deepestChildError => {
393
+ if (isLazyMessageError(deepestChildError)) {
394
+ deepestChildError.computeMessage();
395
+ }
396
+
397
+ return deepestChildError.stack?.split('\n').map(line => ' ' + line);
398
+ }).join('\n'),
399
+ ], deepestDepth, parserContext.position, deepestChildErrors);
302
400
  }, value, format, ...formatArguments);
303
401
  }
304
402
 
305
403
  if (errorJoinMode === 'all') {
306
- return customInvariant(function (message: string) {
307
- message += [
308
- '',
309
- 'Child error stacks, indented:',
310
- ...childErrors.flatMap(childError => childError.stack?.split('\n').map(line => ' ' + line)),
311
- 'End of child error stacks',
312
- ].join('\n');
313
-
314
- return new ParserParsingJoinAllError(message, parserContext._depth, parserContext.position, childErrors);
404
+ return customInvariant(function (userLazyMessage: LazyMessage) {
405
+ return new parserContext._options.errorsModule.ParserParsingJoinAllError([
406
+ [
407
+ '%s',
408
+ 'All child error stacks, indented:',
409
+ '%s',
410
+ 'End of all child error stacks',
411
+ ],
412
+ () => formatLazyMessage(userLazyMessage),
413
+ () => childErrors.flatMap(childError => {
414
+ if (isLazyMessageError(childError)) {
415
+ childError.computeMessage();
416
+ }
417
+
418
+ return childError.stack?.split('\n').map(line => ' ' + line);
419
+ }).join('\n'),
420
+ ], parserContext._depth, parserContext.position, childErrors);
315
421
  }, value, format, ...formatArguments);
316
422
  }
317
423
 
318
- invariant(false, 'Unsupported errorJoinMode: %s', errorJoinMode);
424
+ return parserImplementationInvariant(false, 'Unsupported errorJoinMode: %s', errorJoinMode);
319
425
  }
320
426
  }
@@ -1,3 +1,4 @@
1
+ import mem from 'mem';
1
2
  import { type Parser } from './parser.js';
2
3
  import { type DeriveSequenceElement } from './sequence.js';
3
4
 
@@ -11,13 +12,30 @@ export function parserCreatorCompose<
11
12
  f1: (...arguments_: Arguments) => Parser<OutputA, Sequence, Element>,
12
13
  f2: (outputA: OutputA) => Parser<OutputB, Sequence, Element>,
13
14
  ): (...arguments_: Arguments) => Parser<OutputB, Sequence, Element> {
14
- return (...arguments_) => {
15
+ const parserCreatorComposedOuter: (...arguments_: Arguments) => Parser<OutputB, Sequence, Element> = (...arguments_) => {
15
16
  const parserA = f1(...arguments_);
16
17
 
17
- return async parserContext => {
18
+ const parserCreatorComposedInner: Parser<OutputB, Sequence, Element> = async parserContext => {
18
19
  const outputA = await parserA(parserContext);
19
20
  const parserB = f2(outputA);
20
21
  return parserB(parserContext);
21
22
  };
23
+
24
+ return parserCreatorComposedInner;
22
25
  };
26
+
27
+ return parserCreatorComposedOuter;
28
+ }
29
+
30
+ export function parserCreatorComposeMem<
31
+ Arguments extends unknown[],
32
+ OutputA,
33
+ OutputB,
34
+ Sequence,
35
+ Element = DeriveSequenceElement<Sequence>,
36
+ >(
37
+ f1: (...arguments_: Arguments) => Parser<OutputA, Sequence, Element>,
38
+ f2: (outputA: OutputA) => Parser<OutputB, Sequence, Element>,
39
+ ): (...arguments_: Arguments) => Parser<OutputB, Sequence, Element> {
40
+ return parserCreatorCompose(mem(f1), mem(f2));
23
41
  }