@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
package/src/parser.ts CHANGED
@@ -1,15 +1,22 @@
1
- import invariant from 'invariant';
1
+ import { type Class } from 'type-fest';
2
2
  import { type ParserInputCompanion } from './parserInputCompanion.js';
3
3
  import { InputReaderImplementation } from './inputReader.js';
4
4
  import { type ParserContext, ParserContextImplementation } from './parserContext.js';
5
5
  import { type DeriveSequenceElement } from './sequence.js';
6
+ import { toAsyncIterator } from './toAsyncIterator.js';
7
+ import { inputReaderStateCompanion } from './inputReaderState.js';
8
+ import { isLazyMessageError } from './lazyMessageError.js';
9
+ import { isParserError, isParserParsingFailedError, normalParserErrorModule, noStackCaptureOverheadParserErrorModule, ParserError } from './parserError.js';
10
+ import { NoStackCaptureOverheadError } from './noStackCaptureOverheadError.js';
11
+ import invariant from 'invariant';
6
12
 
7
13
  export type Parser<
8
14
  Output,
9
15
  Sequence,
10
16
  Element = DeriveSequenceElement<Sequence>,
11
- > = (parserContext: ParserContext<Sequence, Element>) => Promise<Output>;
17
+ > = (parserContext: ParserContext<Sequence, Element>) => Output | Promise<Output>;
12
18
 
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
20
  export function getParserName(parser: Parser<any, any, any>, default_ = 'anonymous'): string {
14
21
  return parser.name || default_;
15
22
  }
@@ -26,59 +33,171 @@ export function setParserName<
26
33
  return parser;
27
34
  }
28
35
 
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ const originalParserByClone = new WeakMap<Parser<any, any, any>, Parser<any, any, any>>();
38
+
39
+ export function cloneParser<
40
+ Output,
41
+ Sequence,
42
+ Element = DeriveSequenceElement<Sequence>,
43
+ >(parser: Parser<Output, Sequence, Element>): Parser<Output, Sequence, Element> {
44
+ const originalParser = originalParserByClone.get(parser) ?? parser;
45
+
46
+ const clone: Parser<Output, Sequence, Element> = parserContext => originalParser(parserContext);
47
+
48
+ setParserName(clone, getParserName(parser));
49
+
50
+ originalParserByClone.set(clone, originalParser);
51
+
52
+ return clone;
53
+ }
54
+
29
55
  export type RunParserOptions<
30
56
  Output,
31
57
  Sequence,
32
58
  Element = DeriveSequenceElement<Sequence>,
33
59
  > = {
34
60
  errorJoinMode?: 'none' | 'deepest' | 'furthest' | 'all';
61
+ errorStack?: boolean;
62
+ parserContextClass?: Class<ParserContext<Sequence, Element>>;
35
63
  };
36
64
 
37
- function isAsyncIterable<T>(value: any): value is AsyncIterable<T> {
38
- return value && typeof value[Symbol.asyncIterator] === 'function';
39
- }
65
+ export type RunParserWithRemainingInputResult<
66
+ Output,
67
+ Sequence,
68
+ Element = DeriveSequenceElement<Sequence>,
69
+ > = {
70
+ output: Output;
71
+ position: number;
72
+ remainingInput: undefined | AsyncIterable<Sequence>;
73
+ };
40
74
 
41
- function isIterable<T>(value: any): value is Iterable<T> {
42
- return value && typeof value[Symbol.iterator] === 'function';
75
+ async function withEnrichedParserError<
76
+ Output,
77
+ Sequence,
78
+ Element = DeriveSequenceElement<Sequence>,
79
+ >(
80
+ parserContext: ParserContext<Sequence, Element>,
81
+ inputReader: InputReaderImplementation<Sequence, Element>,
82
+ f: () => Promise<Output>,
83
+ ): Promise<Output> {
84
+ try {
85
+ return await f();
86
+ } catch (error) {
87
+ if (error instanceof NoStackCaptureOverheadError) {
88
+ invariant(
89
+ error.name in normalParserErrorModule,
90
+ 'NoStackCaptureOverheadError with unknown name encountered during parser execution: %s',
91
+ error.name,
92
+ );
93
+
94
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
+ const normalError: ParserError = new ((normalParserErrorModule as any)[error.name])(error.message);
96
+ Object.assign(normalError, error);
97
+
98
+ normalError.stack = normalError.stack + '\nIf you need a useful stack trace, pass `errorStack: true` to `runParser`, trading off some performance.';
99
+
100
+ error = normalError;
101
+ }
102
+
103
+ if (isLazyMessageError(error)) {
104
+ error.computeMessage();
105
+ }
106
+
107
+ if (isParserError(error)) {
108
+ if (error.position === undefined) {
109
+ error.position = parserContext.position;
110
+ }
111
+
112
+ if (error.inputReaderSate === undefined) {
113
+ error.inputReaderSate = inputReader.toInputReaderState();
114
+ }
115
+ }
116
+
117
+ throw error;
118
+ }
43
119
  }
44
120
 
45
- function isIterator<T>(value: any): value is Iterator<T> {
46
- return value && typeof value.next === 'function';
47
- }
121
+ type RunParserInternalResult<
122
+ Output,
123
+ Sequence,
124
+ Element = DeriveSequenceElement<Sequence>,
125
+ > = {
126
+ outputPromise: Promise<Output>;
127
+ parserContext: ParserContext<Sequence, Element>;
128
+ inputReader: InputReaderImplementation<Sequence, Element>;
129
+ };
48
130
 
49
- function iteratorToAsyncIterator<T>(iterator: Iterator<T>): AsyncIterator<T> {
50
- return {
51
- next: async () => iterator.next(),
52
- };
53
- }
131
+ function runParserInternal<
132
+ Output,
133
+ Sequence,
134
+ Element = DeriveSequenceElement<Sequence>,
135
+ >(
136
+ parser: Parser<Output, Sequence, Element>,
137
+ input: AsyncIterator<Sequence> | AsyncIterable<Sequence> | Iterable<Sequence> | Sequence,
138
+ parserInputCompanion: ParserInputCompanion<Sequence, Element>,
139
+ options: RunParserOptions<Output, Sequence, Element> = {},
140
+ ): RunParserInternalResult<Output, Sequence, Element> {
141
+ const inputAsyncIterator = toAsyncIterator(input);
54
142
 
55
- function toAsyncIterator<T>(value: AsyncIterator<T> | AsyncIterable<T> | Iterable<T> | T): AsyncIterator<T> {
56
- if (
57
- typeof value === 'string'
58
- || value instanceof Uint8Array
59
- ) {
60
- return (async function * () {
61
- yield value as any;
62
- })();
63
- }
143
+ const inputReader = new InputReaderImplementation<Sequence, Element>(parserInputCompanion, inputAsyncIterator);
64
144
 
65
- if (isAsyncIterable(value)) {
66
- return value[Symbol.asyncIterator]();
67
- }
145
+ const ParserContext = options.parserContextClass ?? ParserContextImplementation;
68
146
 
69
- if (isIterable(value)) {
70
- return iteratorToAsyncIterator(value[Symbol.iterator]());
71
- }
147
+ const parserContext = new ParserContext<Sequence, Element>(parserInputCompanion, inputReader, undefined, {
148
+ ...options,
149
+ errorsModule: options.errorStack ? normalParserErrorModule : noStackCaptureOverheadParserErrorModule,
150
+ debugName: 'root',
151
+ });
72
152
 
73
- if (isIterator<T>(value)) {
74
- return iteratorToAsyncIterator(value);
75
- }
153
+ const outputPromise = (async () => {
154
+ try {
155
+ return await parser(parserContext);
156
+ } finally {
157
+ await parserContext.peek(0);
158
+ }
159
+ })();
76
160
 
77
- invariant(
78
- false,
79
- 'Value must be an async iterator, async iterable, iterable or iterator got %s.',
80
- value,
81
- );
161
+ return {
162
+ outputPromise,
163
+ parserContext,
164
+ inputReader,
165
+ };
166
+ }
167
+
168
+ export async function runParserWithRemainingInput<
169
+ Output,
170
+ Sequence,
171
+ Element = DeriveSequenceElement<Sequence>,
172
+ >(
173
+ parser: Parser<Output, Sequence, Element>,
174
+ input: AsyncIterator<Sequence> | AsyncIterable<Sequence> | Iterable<Sequence> | Sequence,
175
+ parserInputCompanion: ParserInputCompanion<Sequence, Element>,
176
+ options: RunParserOptions<Output, Sequence, Element> = {},
177
+ ): Promise<RunParserWithRemainingInputResult<Output, Sequence, Element>> {
178
+ const {
179
+ outputPromise,
180
+ parserContext,
181
+ inputReader,
182
+ } = runParserInternal(parser, input, parserInputCompanion, options);
183
+
184
+ return withEnrichedParserError(parserContext, inputReader, async () => {
185
+ const output = await outputPromise;
186
+
187
+ const inputReaderState = inputReader.toInputReaderState();
188
+
189
+ const remainingInput = (
190
+ inputReaderStateCompanion.isDone(inputReaderState)
191
+ ? undefined
192
+ : inputReaderStateCompanion.toRemainingInputAsyncIterator(inputReaderState)
193
+ );
194
+
195
+ return {
196
+ output,
197
+ position: parserContext.position,
198
+ remainingInput,
199
+ };
200
+ });
82
201
  }
83
202
 
84
203
  export async function runParser<
@@ -91,13 +210,21 @@ export async function runParser<
91
210
  parserInputCompanion: ParserInputCompanion<Sequence, Element>,
92
211
  options: RunParserOptions<Output, Sequence, Element> = {},
93
212
  ): Promise<Output> {
94
- const inputAsyncIterator = toAsyncIterator(input);
213
+ const {
214
+ outputPromise,
215
+ parserContext,
216
+ inputReader,
217
+ } = runParserInternal(parser, input, parserInputCompanion, options);
95
218
 
96
- const inputReader = new InputReaderImplementation<Sequence, Element>(parserInputCompanion, inputAsyncIterator);
97
- const parserContext = new ParserContextImplementation<Sequence, Element>(parserInputCompanion, inputReader, undefined, {
98
- ...options,
99
- debugName: 'root',
100
- });
219
+ return withEnrichedParserError(parserContext, inputReader, async () => {
220
+ const output = await outputPromise;
221
+
222
+ const inputReaderState = inputReader.toInputReaderState();
101
223
 
102
- return parser(parserContext);
224
+ if (!inputReaderStateCompanion.isDone(inputReaderState)) {
225
+ throw new normalParserErrorModule.ParserUnexpectedRemainingInputError('Unexpected remaining input', 0, parserContext.position);
226
+ }
227
+
228
+ return output;
229
+ });
103
230
  }
@@ -1,3 +1,13 @@
1
- import { type Parser } from './parser.js';
1
+ import { getParserName, setParserName, type Parser } from './parser.js';
2
2
 
3
- export const createParserAccessorParser = <Output, Sequence>(parserAccessor: () => Parser<Output, Sequence>): Parser<Output, Sequence> => async parserContext => parserAccessor()(parserContext);
3
+ export const createParserAccessorParser = <Output, Sequence>(parserAccessor: () => Parser<Output, Sequence>): Parser<Output, Sequence> => {
4
+ const parserAccessorParser: Parser<Output, Sequence> = async parserContext => {
5
+ const parser = parserAccessor();
6
+
7
+ setParserName(parserAccessorParser, `parserAccessorParser(${getParserName(parser, 'anonymousParserAccessor')})`);
8
+
9
+ return parser(parserContext);
10
+ };
11
+
12
+ return parserAccessorParser;
13
+ };
@@ -1,20 +1,29 @@
1
- import { createFixedLengthSequenceParser } from "./fixedLengthSequenceParser.js";
2
- import { Parser } from "./parser.js";
1
+ import { createFixedLengthSequenceParser } from './fixedLengthSequenceParser.js';
2
+ import { getParserName, type Parser, setParserName } from './parser.js';
3
3
 
4
4
  export const createParserConsumedSequenceParser = <Output, Sequence>(
5
5
  childParser: Parser<Output, Sequence>,
6
- ): Parser<[Output, Sequence], Sequence> => async parserContext => {
7
- const initialPosition = parserContext.position;
8
- const childParserContext = parserContext.lookahead();
9
- let value: Output;
10
- let consumedLength: number;
11
- try {
12
- value = await childParser(childParserContext);
13
- consumedLength = childParserContext.position - initialPosition;
14
- } finally {
15
- childParserContext.dispose();
16
- }
17
- const consumedSequenceParser = createFixedLengthSequenceParser<Sequence>(consumedLength);
18
- const consumedSequence = await consumedSequenceParser(parserContext);
19
- return [value, consumedSequence];
20
- }
6
+ ): Parser<[Output, Sequence], Sequence> => {
7
+ const parserConsumedSequenceParser: Parser<[Output, Sequence], Sequence> = async parserContext => {
8
+ const initialPosition = parserContext.position;
9
+ const childParserContext = parserContext.lookahead();
10
+
11
+ let value: Output;
12
+ let consumedLength: number;
13
+ try {
14
+ value = await childParser(childParserContext);
15
+ consumedLength = childParserContext.position - initialPosition;
16
+ } finally {
17
+ childParserContext.dispose();
18
+ }
19
+
20
+ const consumedSequenceParser = createFixedLengthSequenceParser<Sequence>(consumedLength);
21
+ const consumedSequence = await consumedSequenceParser(parserContext);
22
+
23
+ return [ value, consumedSequence ];
24
+ };
25
+
26
+ setParserName(parserConsumedSequenceParser, `parserConsumedSequenceParser(${getParserName(childParser, 'anonymousParserConsumedSequenceParserChild')})`);
27
+
28
+ return parserConsumedSequenceParser;
29
+ };
@@ -2,13 +2,15 @@ import test from 'ava';
2
2
  import { ParserContextImplementation } from './parserContext.js';
3
3
  import { stringParserInputCompanion } from './parserInputCompanion.js';
4
4
  import { InputReaderImplementation } from './inputReader.js';
5
- import { ParserUnexpectedEndOfInputError } from './parserError.js';
5
+ import { noStackCaptureOverheadParserErrorModule } from './parserError.js';
6
6
 
7
7
  const commonParserContextArguments = [
8
8
  undefined,
9
9
  {
10
10
  debugName: 'root',
11
11
  errorJoinMode: 'all',
12
+ errorStack: false,
13
+ errorsModule: noStackCaptureOverheadParserErrorModule,
12
14
  },
13
15
  ] as const;
14
16
 
@@ -26,7 +28,32 @@ test('parserContext.read', async t => {
26
28
  t.is(await parserContext.read(5), 'h');
27
29
 
28
30
  await t.throwsAsync(async () => parserContext.read(0), {
29
- instanceOf: ParserUnexpectedEndOfInputError,
31
+ any: true,
32
+ name: 'ParserUnexpectedEndOfInputError',
33
+ });
34
+ });
35
+
36
+ test('parserContext.readSequence', async t => {
37
+ const parserContext = new ParserContextImplementation(stringParserInputCompanion, new InputReaderImplementation(stringParserInputCompanion, (async function * () {
38
+ yield '';
39
+ yield 'abc';
40
+ yield 'def';
41
+ yield '';
42
+ yield 'gh';
43
+ })()), ...commonParserContextArguments);
44
+
45
+ t.is(await parserContext.readSequence(0, 0), '');
46
+ t.is(await parserContext.readSequence(0, 1), 'a');
47
+ t.is(await parserContext.readSequence(1, 4), 'cde');
48
+ t.is(await parserContext.readSequence(0, 1), 'f');
49
+ t.is(await parserContext.readSequence(0, 0), '');
50
+ t.is(await parserContext.readSequence(0, 1), 'g');
51
+ t.is(await parserContext.readSequence(1, 1), '');
52
+ t.is(await parserContext.readSequence(0, 0), '');
53
+
54
+ await t.throwsAsync(async () => parserContext.readSequence(0, 1), {
55
+ any: true,
56
+ name: 'ParserUnexpectedEndOfInputError',
30
57
  });
31
58
  });
32
59
 
@@ -42,11 +69,15 @@ test('parserContext.lookahead', async t => {
42
69
  });
43
70
 
44
71
  t.is(await lookaheadContext3.peek(2), 'c');
72
+ t.is(await lookaheadContext3.peekSequence(2, 3), 'c');
45
73
  t.is(await lookaheadContext3.peek(3), undefined);
74
+ t.is(await lookaheadContext3.peekSequence(3, 4), undefined);
46
75
  t.is(await lookaheadContext3.read(0), 'a');
47
76
  t.is(await lookaheadContext3.read(0), 'b');
48
77
  t.is(await lookaheadContext3.read(0), 'c');
49
78
  t.is(await lookaheadContext3.peek(0), undefined);
79
+ t.is(await lookaheadContext3.peekSequence(0, 1), undefined);
80
+ t.is(await lookaheadContext3.peekSequence(0, 0), '');
50
81
 
51
82
  t.is(await parserContext.peek(0), 'a');
52
83
  t.is(await lookaheadContext1.peek(0), 'a');
@@ -63,6 +94,10 @@ test('parserContext.lookahead', async t => {
63
94
  t.is(lookaheadContext1.position, 1);
64
95
  t.is(lookaheadContext2.position, 0);
65
96
  t.is(lookaheadContext3.position, 3);
97
+
98
+ lookaheadContext3.skip(1);
99
+ t.is(await lookaheadContext3.peekSequence(0, 0), undefined);
100
+ t.is(lookaheadContext3.position, 4);
66
101
  });
67
102
 
68
103
  test('parserContext.unlookahead', async t => {