@futpib/parser 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/.github/copilot-instructions.md +149 -0
  2. package/.github/workflows/copilot-setup-steps.yml +18 -0
  3. package/.github/workflows/main.yml +29 -8
  4. package/.yarn/releases/yarn-4.9.4.cjs +942 -0
  5. package/.yarnrc.yml +1 -1
  6. package/build/allSettledStream.js +32 -14
  7. package/build/allSettledStream.test.js +32 -0
  8. package/build/androidPackage.d.ts +39 -0
  9. package/build/androidPackageParser.d.ts +17 -0
  10. package/build/androidPackageParser.js +185 -0
  11. package/build/androidPackageParser.test.js +22 -0
  12. package/build/androidPackageUnparser.d.ts +4 -0
  13. package/build/androidPackageUnparser.js +94 -0
  14. package/build/androidPackageUnparser.test.js +26 -0
  15. package/build/arbitrarilySlicedAsyncInterable.d.ts +3 -1
  16. package/build/arbitrarilySlicedAsyncInterable.js +3 -3
  17. package/build/arbitrarilySlicedAsyncInterator.js +2 -1
  18. package/build/arbitraryDalvikBytecode.d.ts +4 -0
  19. package/build/arbitraryDalvikBytecode.js +640 -0
  20. package/build/arbitraryDalvikExecutable.d.ts +3 -0
  21. package/build/arbitraryDalvikExecutable.js +282 -0
  22. package/build/arbitraryDosDateTime.js +1 -0
  23. package/build/arbitraryZipStream.js +1 -1
  24. package/build/arrayParser.js +2 -2
  25. package/build/arrayParser.test.js +3 -3
  26. package/build/arrayUnparser.d.ts +1 -1
  27. package/build/backsmali.d.ts +3 -0
  28. package/build/backsmali.js +50 -0
  29. package/build/bsonParser.js +6 -2
  30. package/build/customInvariant.d.ts +2 -1
  31. package/build/customInvariant.js +4 -6
  32. package/build/dalvikBytecodeParser/formatParsers.d.ts +171 -0
  33. package/build/dalvikBytecodeParser/formatParsers.js +304 -0
  34. package/build/dalvikBytecodeParser/formatSizes.d.ts +34 -0
  35. package/build/dalvikBytecodeParser/formatSizes.js +34 -0
  36. package/build/dalvikBytecodeParser/operationFormats.d.ts +225 -0
  37. package/build/dalvikBytecodeParser/operationFormats.js +225 -0
  38. package/build/dalvikBytecodeParser.d.ts +1207 -0
  39. package/build/dalvikBytecodeParser.js +1289 -0
  40. package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +152 -0
  41. package/build/dalvikBytecodeUnparser/formatUnparsers.js +225 -0
  42. package/build/dalvikBytecodeUnparser.d.ts +3 -0
  43. package/build/dalvikBytecodeUnparser.js +642 -0
  44. package/build/dalvikBytecodeUnparser.test.js +25 -0
  45. package/build/dalvikExecutable.d.ts +215 -0
  46. package/build/dalvikExecutable.js +56 -0
  47. package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +4 -0
  48. package/build/dalvikExecutableParser/stringSyntaxParser.js +76 -0
  49. package/build/dalvikExecutableParser/typeParsers.d.ts +11 -0
  50. package/build/dalvikExecutableParser/typeParsers.js +39 -0
  51. package/build/dalvikExecutableParser/typedNumbers.d.ts +106 -0
  52. package/build/dalvikExecutableParser/typedNumbers.js +18 -0
  53. package/build/dalvikExecutableParser.d.ts +5 -0
  54. package/build/dalvikExecutableParser.js +1757 -0
  55. package/build/dalvikExecutableParser.test.js +72 -0
  56. package/build/dalvikExecutableParserAgainstSmaliParser.test.js +275 -0
  57. package/build/dalvikExecutableUnparser/annotationUnparsers.d.ts +14 -0
  58. package/build/dalvikExecutableUnparser/annotationUnparsers.js +97 -0
  59. package/build/dalvikExecutableUnparser/poolBuilders.d.ts +49 -0
  60. package/build/dalvikExecutableUnparser/poolBuilders.js +140 -0
  61. package/build/dalvikExecutableUnparser/poolScanners.d.ts +4 -0
  62. package/build/dalvikExecutableUnparser/poolScanners.js +220 -0
  63. package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +25 -0
  64. package/build/dalvikExecutableUnparser/sectionUnparsers.js +581 -0
  65. package/build/dalvikExecutableUnparser/utils.d.ts +10 -0
  66. package/build/dalvikExecutableUnparser/utils.js +108 -0
  67. package/build/dalvikExecutableUnparser.d.ts +4 -0
  68. package/build/dalvikExecutableUnparser.js +406 -0
  69. package/build/dalvikExecutableUnparser.test.js +31 -0
  70. package/build/debugLogInputParser.d.ts +4 -0
  71. package/build/debugLogInputParser.js +16 -0
  72. package/build/debugLogParser.js +14 -3
  73. package/build/disjunctionParser.d.ts +2 -1
  74. package/build/disjunctionParser.js +6 -4
  75. package/build/elementTerminatedArrayParser.d.ts +3 -0
  76. package/build/elementTerminatedArrayParser.js +18 -0
  77. package/build/elementTerminatedArrayParser.test.js +52 -0
  78. package/build/elementTerminatedSequenceArrayParser.d.ts +3 -0
  79. package/build/elementTerminatedSequenceArrayParser.js +32 -0
  80. package/build/elementTerminatedSequenceArrayParser.test.js +34 -0
  81. package/build/elementTerminatedSequenceParser.d.ts +3 -0
  82. package/build/elementTerminatedSequenceParser.js +27 -0
  83. package/build/elementTerminatedSequenceParser.test.js +34 -0
  84. package/build/endOfInputParser.d.ts +1 -1
  85. package/build/exactElementParser.js +10 -5
  86. package/build/exactElementSwitchParser.d.ts +3 -0
  87. package/build/exactElementSwitchParser.js +22 -0
  88. package/build/exactSequenceParser.d.ts +2 -1
  89. package/build/exactSequenceParser.js +12 -2
  90. package/build/fetchCid.d.ts +1 -0
  91. package/build/fetchCid.js +103 -0
  92. package/build/fetchCid.test.js +16 -0
  93. package/build/fixedLengthSequenceParser.d.ts +1 -0
  94. package/build/fixedLengthSequenceParser.js +18 -1
  95. package/build/fixedLengthSequenceParser.test.js +41 -0
  96. package/build/hasExecutable.d.ts +1 -0
  97. package/build/hasExecutable.js +8 -0
  98. package/build/highResolutionTimer.d.ts +16 -0
  99. package/build/highResolutionTimer.js +42 -0
  100. package/build/inputReader.d.ts +11 -0
  101. package/build/inputReader.js +37 -0
  102. package/build/inputReader.test.js +161 -8
  103. package/build/inputReaderState.d.ts +10 -0
  104. package/build/inputReaderState.js +16 -0
  105. package/build/inspect.d.ts +1 -0
  106. package/build/inspect.js +7 -0
  107. package/build/javaKeyStoreParser.test.js +8 -8
  108. package/build/jsonParser.d.ts +2 -0
  109. package/build/jsonParser.js +19 -22
  110. package/build/lazyMessageError.d.ts +48 -0
  111. package/build/lazyMessageError.js +53 -0
  112. package/build/lazyMessageError.test.d.ts +1 -0
  113. package/build/lazyMessageError.test.js +15 -0
  114. package/build/leb128Parser.d.ts +7 -0
  115. package/build/leb128Parser.js +82 -0
  116. package/build/leb128Parser.test.d.ts +1 -0
  117. package/build/leb128Parser.test.js +107 -0
  118. package/build/lookaheadParser.d.ts +2 -0
  119. package/build/lookaheadParser.js +14 -0
  120. package/build/negativeLookaheadParser.js +22 -16
  121. package/build/negativeLookaheadParser.test.d.ts +1 -0
  122. package/build/negativeLookaheadParser.test.js +30 -0
  123. package/build/noStackCaptureOverheadError.d.ts +4 -0
  124. package/build/noStackCaptureOverheadError.js +9 -0
  125. package/build/noStackCaptureOverheadError.test.d.ts +1 -0
  126. package/build/noStackCaptureOverheadError.test.js +15 -0
  127. package/build/nonEmptyArrayParser.d.ts +2 -0
  128. package/build/nonEmptyArrayParser.js +32 -0
  129. package/build/nonEmptyArrayParser.test.d.ts +1 -0
  130. package/build/nonEmptyArrayParser.test.js +17 -0
  131. package/build/optionalParser.js +2 -2
  132. package/build/parser.d.ts +11 -1
  133. package/build/parser.js +82 -32
  134. package/build/parser.test.js +141 -25
  135. package/build/parserAccessorParser.js +9 -1
  136. package/build/parserConsumedSequenceParser.d.ts +1 -1
  137. package/build/parserConsumedSequenceParser.js +21 -16
  138. package/build/parserContext.d.ts +22 -6
  139. package/build/parserContext.js +113 -57
  140. package/build/parserContext.test.js +33 -2
  141. package/build/parserCreatorCompose.d.ts +1 -0
  142. package/build/parserCreatorCompose.js +8 -2
  143. package/build/parserError.d.ts +605 -40
  144. package/build/parserError.js +98 -53
  145. package/build/parserImplementationInvariant.d.ts +1 -1
  146. package/build/parserImplementationInvariant.js +2 -2
  147. package/build/parserInputCompanion.d.ts +15 -0
  148. package/build/parserInputCompanion.js +38 -0
  149. package/build/promiseCompose.d.ts +1 -1
  150. package/build/promiseCompose.js +11 -1
  151. package/build/promiseSettled.d.ts +1 -0
  152. package/build/promiseSettled.js +4 -0
  153. package/build/separatedArrayParser.d.ts +2 -0
  154. package/build/separatedArrayParser.js +39 -0
  155. package/build/separatedArrayParser.test.d.ts +1 -0
  156. package/build/separatedArrayParser.test.js +21 -0
  157. package/build/separatedNonEmptyArrayParser.d.ts +2 -0
  158. package/build/separatedNonEmptyArrayParser.js +40 -0
  159. package/build/separatedNonEmptyArrayParser.test.d.ts +1 -0
  160. package/build/separatedNonEmptyArrayParser.test.js +66 -0
  161. package/build/sequenceBuffer.d.ts +10 -0
  162. package/build/sequenceBuffer.js +54 -2
  163. package/build/sequenceBuffer.test.js +57 -0
  164. package/build/sequenceTerminatedSequenceParser.d.ts +5 -0
  165. package/build/sequenceTerminatedSequenceParser.js +32 -0
  166. package/build/sequenceTerminatedSequenceParser.test.d.ts +1 -0
  167. package/build/sequenceTerminatedSequenceParser.test.js +37 -0
  168. package/build/sequenceUnparser.d.ts +1 -1
  169. package/build/skipParser.d.ts +1 -1
  170. package/build/skipParser.js +4 -2
  171. package/build/skipToParser.d.ts +2 -0
  172. package/build/skipToParser.js +11 -0
  173. package/build/sliceBoundedParser.d.ts +1 -1
  174. package/build/sliceBoundedParser.js +7 -2
  175. package/build/sliceBoundedParser.test.js +30 -1
  176. package/build/smali.d.ts +1 -0
  177. package/build/smali.js +21 -0
  178. package/build/smaliParser.d.ts +68 -0
  179. package/build/smaliParser.js +2081 -0
  180. package/build/smaliParser.test.d.ts +1 -0
  181. package/build/smaliParser.test.js +410 -0
  182. package/build/stringFromAsyncIterable.d.ts +1 -0
  183. package/build/stringFromAsyncIterable.js +7 -0
  184. package/build/terminatedArrayParser.d.ts +3 -1
  185. package/build/terminatedArrayParser.js +79 -2
  186. package/build/terminatedArrayParser.test.d.ts +1 -0
  187. package/build/terminatedArrayParser.test.js +131 -0
  188. package/build/toAsyncIterable.d.ts +1 -0
  189. package/build/toAsyncIterable.js +7 -0
  190. package/build/toAsyncIterator.d.ts +1 -0
  191. package/build/toAsyncIterator.js +33 -0
  192. package/build/tupleParser.d.ts +4 -0
  193. package/build/tupleParser.js +1 -5
  194. package/build/unionParser.d.ts +2 -1
  195. package/build/unionParser.js +29 -14
  196. package/build/unionParser.test.d.ts +1 -0
  197. package/build/unionParser.test.js +60 -0
  198. package/build/unparser.d.ts +3 -3
  199. package/build/unparser.js +6 -4
  200. package/build/unparser.test.js +7 -19
  201. package/build/unparserContext.d.ts +2 -2
  202. package/build/unparserContext.js +2 -3
  203. package/build/unparserError.d.ts +2 -1
  204. package/build/unparserError.js +2 -1
  205. package/build/unparserImplementationInvariant.d.ts +1 -1
  206. package/build/unparserOutputCompanion.d.ts +1 -1
  207. package/build/unparserOutputCompanion.js +1 -1
  208. package/build/zipParser.d.ts +7 -2
  209. package/build/zipParser.js +36 -12
  210. package/build/zipUnparser.d.ts +7 -4
  211. package/build/zipUnparser.js +64 -45
  212. package/build/zipUnparser.test.js +15 -15
  213. package/package.json +33 -24
  214. package/src/allSettledStream.test.ts +40 -0
  215. package/src/allSettledStream.ts +47 -15
  216. package/src/androidPackage.ts +48 -0
  217. package/src/androidPackageParser.test.ts +27 -0
  218. package/src/{apkParser.test.ts.md → androidPackageParser.test.ts.md} +4 -4
  219. package/src/androidPackageParser.test.ts.snap +0 -0
  220. package/src/androidPackageParser.ts +398 -0
  221. package/src/androidPackageUnparser.test.ts +34 -0
  222. package/src/androidPackageUnparser.ts +126 -0
  223. package/src/arbitrarilySlicedAsyncInterable.ts +7 -2
  224. package/src/arbitrarilySlicedAsyncInterator.ts +4 -4
  225. package/src/arbitraryDalvikBytecode.ts +992 -0
  226. package/src/arbitraryDalvikExecutable.ts +434 -0
  227. package/src/arbitraryDosDateTime.ts +1 -0
  228. package/src/arbitraryZipStream.ts +1 -1
  229. package/src/arrayParser.test.ts +3 -3
  230. package/src/arrayParser.ts +2 -2
  231. package/src/arrayUnparser.ts +2 -2
  232. package/src/backsmali.ts +74 -0
  233. package/src/bsonParser.test.ts +12 -14
  234. package/src/bsonParser.ts +13 -2
  235. package/src/customInvariant.ts +8 -12
  236. package/src/dalvikBytecodeParser/formatParsers.ts +780 -0
  237. package/src/dalvikBytecodeParser/formatSizes.ts +35 -0
  238. package/src/dalvikBytecodeParser/operationFormats.ts +226 -0
  239. package/src/dalvikBytecodeParser.ts +2873 -0
  240. package/src/dalvikBytecodeUnparser/formatUnparsers.ts +442 -0
  241. package/src/dalvikBytecodeUnparser.test.ts +44 -0
  242. package/src/dalvikBytecodeUnparser.ts +758 -0
  243. package/src/dalvikExecutable.ts +282 -0
  244. package/src/dalvikExecutableParser/stringSyntaxParser.ts +145 -0
  245. package/src/dalvikExecutableParser/typeParsers.ts +74 -0
  246. package/src/dalvikExecutableParser/typedNumbers.ts +57 -0
  247. package/src/dalvikExecutableParser.test.ts +89 -0
  248. package/src/dalvikExecutableParser.test.ts.md +634 -0
  249. package/src/dalvikExecutableParser.test.ts.snap +0 -0
  250. package/src/dalvikExecutableParser.ts +3245 -0
  251. package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +363 -0
  252. package/src/dalvikExecutableUnparser/annotationUnparsers.ts +135 -0
  253. package/src/dalvikExecutableUnparser/poolBuilders.ts +189 -0
  254. package/src/dalvikExecutableUnparser/poolScanners.ts +297 -0
  255. package/src/dalvikExecutableUnparser/sectionUnparsers.ts +683 -0
  256. package/src/dalvikExecutableUnparser/utils.ts +149 -0
  257. package/src/dalvikExecutableUnparser.test.ts +57 -0
  258. package/src/dalvikExecutableUnparser.ts +581 -0
  259. package/src/debugLogInputParser.ts +28 -0
  260. package/src/debugLogParser.ts +19 -3
  261. package/src/disjunctionParser.ts +12 -7
  262. package/src/elementTerminatedArrayParser.test.ts +99 -0
  263. package/src/elementTerminatedArrayParser.ts +31 -0
  264. package/src/elementTerminatedSequenceArrayParser.test.ts +52 -0
  265. package/src/elementTerminatedSequenceArrayParser.ts +52 -0
  266. package/src/elementTerminatedSequenceParser.test.ts +52 -0
  267. package/src/elementTerminatedSequenceParser.ts +43 -0
  268. package/src/endOfInputParser.ts +1 -1
  269. package/src/exactElementParser.ts +17 -11
  270. package/src/exactElementSwitchParser.ts +41 -0
  271. package/src/exactSequenceParser.ts +23 -2
  272. package/src/fetchCid.test.ts +20 -0
  273. package/src/fetchCid.ts +121 -0
  274. package/src/fixedLengthSequenceParser.test.ts +75 -0
  275. package/src/fixedLengthSequenceParser.ts +28 -1
  276. package/src/hasExecutable.ts +11 -0
  277. package/src/highResolutionTimer.ts +49 -0
  278. package/src/inputReader.test.ts +204 -8
  279. package/src/inputReader.ts +76 -3
  280. package/src/inputReaderState.ts +33 -0
  281. package/src/inspect.ts +9 -0
  282. package/src/javaKeyStoreParser.test.ts +12 -15
  283. package/src/javaKeyStoreParser.ts +2 -6
  284. package/src/jsonParser.test.ts +2 -4
  285. package/src/jsonParser.ts +46 -62
  286. package/src/lazyMessageError.test.ts +21 -0
  287. package/src/lazyMessageError.ts +88 -0
  288. package/src/leb128Parser.test.ts +173 -0
  289. package/src/leb128Parser.ts +125 -0
  290. package/src/lookaheadParser.ts +19 -0
  291. package/src/negativeLookaheadParser.test.ts +49 -0
  292. package/src/negativeLookaheadParser.ts +27 -15
  293. package/src/noStackCaptureOverheadError.test.ts +17 -0
  294. package/src/noStackCaptureOverheadError.ts +12 -0
  295. package/src/nonEmptyArrayParser.test.ts +21 -0
  296. package/src/nonEmptyArrayParser.ts +44 -0
  297. package/src/optionalParser.ts +3 -2
  298. package/src/parser.test.ts +203 -31
  299. package/src/parser.test.ts.md +34 -27
  300. package/src/parser.test.ts.snap +0 -0
  301. package/src/parser.ts +172 -45
  302. package/src/parserAccessorParser.ts +12 -2
  303. package/src/parserConsumedSequenceParser.ts +26 -17
  304. package/src/parserContext.test.ts +37 -2
  305. package/src/parserContext.ts +185 -79
  306. package/src/parserCreatorCompose.ts +20 -2
  307. package/src/parserError.ts +144 -61
  308. package/src/parserImplementationInvariant.ts +3 -3
  309. package/src/parserInputCompanion.ts +55 -0
  310. package/src/promiseCompose.ts +17 -3
  311. package/src/promiseSettled.ts +6 -0
  312. package/src/separatedArrayParser.test.ts +34 -0
  313. package/src/separatedArrayParser.ts +55 -0
  314. package/src/separatedNonEmptyArrayParser.test.ts +117 -0
  315. package/src/separatedNonEmptyArrayParser.ts +61 -0
  316. package/src/sequenceBuffer.test.ts +70 -0
  317. package/src/sequenceBuffer.ts +88 -2
  318. package/src/sequenceTerminatedSequenceParser.test.ts +58 -0
  319. package/src/sequenceTerminatedSequenceParser.ts +62 -0
  320. package/src/sequenceUnparser.ts +2 -2
  321. package/src/skipParser.ts +7 -5
  322. package/src/skipToParser.ts +16 -0
  323. package/src/sliceBoundedParser.test.ts +35 -1
  324. package/src/sliceBoundedParser.ts +19 -1
  325. package/src/smali.ts +29 -0
  326. package/src/smaliParser.test.ts +443 -0
  327. package/src/smaliParser.test.ts.md +3907 -0
  328. package/src/smaliParser.test.ts.snap +0 -0
  329. package/src/smaliParser.ts +3348 -0
  330. package/src/stringFromAsyncIterable.ts +9 -0
  331. package/src/terminatedArrayParser.test.ts +258 -0
  332. package/src/terminatedArrayParser.ts +109 -6
  333. package/src/toAsyncIterable.ts +7 -0
  334. package/src/toAsyncIterator.ts +48 -0
  335. package/src/tupleParser.ts +8 -5
  336. package/src/uint8Array.ts +2 -3
  337. package/src/unionParser.test.ts +78 -0
  338. package/src/unionParser.ts +47 -21
  339. package/src/unparser.test.ts +18 -34
  340. package/src/unparser.ts +13 -9
  341. package/src/unparserContext.ts +9 -13
  342. package/src/unparserError.ts +2 -1
  343. package/src/unparserImplementationInvariant.ts +1 -1
  344. package/src/unparserOutputCompanion.ts +1 -1
  345. package/src/zip.ts +2 -6
  346. package/src/zipParser.ts +71 -20
  347. package/src/zipUnparser.test.ts +19 -19
  348. package/src/zipUnparser.ts +139 -90
  349. package/tsconfig.json +7 -1
  350. package/xo.config.ts +15 -0
  351. package/.yarn/releases/yarn-4.5.3.cjs +0 -934
  352. package/build/apk.d.ts +0 -39
  353. package/build/apkParser.d.ts +0 -16
  354. package/build/apkParser.js +0 -164
  355. package/build/apkParser.test.js +0 -22
  356. package/build/apkUnparser.d.ts +0 -4
  357. package/build/apkUnparser.js +0 -90
  358. package/build/apkUnparser.test.js +0 -26
  359. package/build/arbitraryDosDate.d.ts +0 -2
  360. package/build/arbitraryDosDate.js +0 -8
  361. package/build/arbitraryZipEntry.d.ts +0 -3
  362. package/build/arbitraryZipEntry.js +0 -26
  363. package/build/createDisjunctionParser.d.ts +0 -2
  364. package/build/createDisjunctionParser.js +0 -47
  365. package/build/createExactParser.d.ts +0 -2
  366. package/build/createExactParser.js +0 -12
  367. package/build/createSequentialUnionParser.d.ts +0 -2
  368. package/build/createSequentialUnionParser.js +0 -69
  369. package/build/fixedLengthChunkParser.d.ts +0 -2
  370. package/build/fixedLengthChunkParser.js +0 -12
  371. package/build/fixedLengthParser.d.ts +0 -2
  372. package/build/fixedLengthParser.js +0 -12
  373. package/build/inputChunkBuffer.d.ts +0 -15
  374. package/build/inputChunkBuffer.js +0 -40
  375. package/build/inputChunkBuffer.test.js +0 -34
  376. package/build/inputCompanion.d.ts +0 -18
  377. package/build/inputCompanion.js +0 -28
  378. package/build/invariantDefined.d.ts +0 -1
  379. package/build/invariantDefined.js +0 -5
  380. package/build/invariantIdentity.d.ts +0 -3
  381. package/build/invariantIdentity.js +0 -5
  382. package/build/javaKeystoreParser.d.ts +0 -2
  383. package/build/javaKeystoreParser.js +0 -7
  384. package/build/jsonParser2.d.ts +0 -3
  385. package/build/jsonParser2.js +0 -52
  386. package/build/jsonParser2.test.js +0 -22
  387. package/build/negativeLookahead.d.ts +0 -2
  388. package/build/negativeLookahead.js +0 -18
  389. package/build/parserCompose.d.ts +0 -3
  390. package/build/parserCompose.js +0 -7
  391. package/build/parserImplementationInvariantInvariant.d.ts +0 -3
  392. package/build/parserImplementationInvariantInvariant.js +0 -15
  393. package/build/parserInvariant.d.ts +0 -4
  394. package/build/parserInvariant.js +0 -11
  395. package/build/promiseFish.d.ts +0 -1
  396. package/build/promiseFish.js +0 -3
  397. package/build/sequenceParser.d.ts +0 -3
  398. package/build/sequenceParser.js +0 -10
  399. package/build/terminatedSequenceParser.d.ts +0 -2
  400. package/build/terminatedSequenceParser.js +0 -24
  401. package/build/unparserInputCompanion.d.ts +0 -15
  402. package/build/unparserInputCompanion.js +0 -13
  403. package/build/zipEntry.d.ts +0 -28
  404. package/build/zipFile.d.ts +0 -32
  405. package/build/zipFileEntry.d.ts +0 -6
  406. package/src/apk.ts +0 -48
  407. package/src/apkParser.test.ts +0 -30
  408. package/src/apkParser.test.ts.snap +0 -0
  409. package/src/apkParser.ts +0 -392
  410. package/src/apkUnparser.test.ts +0 -37
  411. package/src/apkUnparser.ts +0 -120
  412. package/src/invariantDefined.ts +0 -6
  413. package/src/invariantIdentity.ts +0 -8
  414. /package/build/{apk.js → androidPackage.js} +0 -0
  415. /package/build/{apkParser.test.d.ts → androidPackageParser.test.d.ts} +0 -0
  416. /package/build/{apkUnparser.test.d.ts → androidPackageUnparser.test.d.ts} +0 -0
  417. /package/build/{arbitraryDosPermissions.d.ts → dalvikBytecodeUnparser.test.d.ts} +0 -0
  418. /package/build/{arbitraryDosPermissions.js → dalvikExecutableParser.test.d.ts} +0 -0
  419. /package/build/{inputChunkBuffer.test.d.ts → dalvikExecutableParserAgainstSmaliParser.test.d.ts} +0 -0
  420. /package/build/{jsonParser2.test.d.ts → dalvikExecutableUnparser.test.d.ts} +0 -0
  421. /package/build/{parserParsingInvariant.d.ts → elementTerminatedArrayParser.test.d.ts} +0 -0
  422. /package/build/{parserParsingInvariant.js → elementTerminatedSequenceArrayParser.test.d.ts} +0 -0
  423. /package/build/{zipEntry.js → elementTerminatedSequenceParser.test.d.ts} +0 -0
  424. /package/build/{zipFile.js → fetchCid.test.d.ts} +0 -0
  425. /package/build/{zipFileEntry.js → fixedLengthSequenceParser.test.d.ts} +0 -0
@@ -0,0 +1,107 @@
1
+ import { testProp, fc } from '@fast-check/ava';
2
+ import test from 'ava';
3
+ // @ts-expect-error
4
+ import leb128 from 'leb128';
5
+ import { uint8ArrayParserInputCompanion } from './parserInputCompanion.js';
6
+ import { runParser } from './parser.js';
7
+ import { uleb128Parser, sleb128Parser, uleb128NumberParser, sleb128NumberParser, } from './leb128Parser.js';
8
+ test('sleb128, uleb128, uleb128p1', async (t) => {
9
+ for (const [input, expectedSleb128, expectedUleb128,] of [
10
+ [Buffer.from('00', 'hex'), 0n, 0n],
11
+ [Buffer.from('01', 'hex'), 1n, 1n],
12
+ [Buffer.from('7f', 'hex'), -1n, 127n],
13
+ [Buffer.from('807f', 'hex'), -128n, 16256n],
14
+ ]) {
15
+ const actualSleb128 = await runParser(sleb128Parser, input, uint8ArrayParserInputCompanion);
16
+ const actualUleb128 = await runParser(uleb128Parser, input, uint8ArrayParserInputCompanion);
17
+ t.is(actualSleb128, expectedSleb128, 'sleb128');
18
+ t.is(actualUleb128, expectedUleb128, 'uleb128');
19
+ }
20
+ for (const [input, expectedUleb128,] of [
21
+ [new Uint8Array([2]), 2n],
22
+ [new Uint8Array([127]), 127n],
23
+ [new Uint8Array([0 + 0x80, 1]), 128n],
24
+ [new Uint8Array([1 + 0x80, 1]), 129n],
25
+ [new Uint8Array([57 + 0x80, 100]), 12857n],
26
+ ]) {
27
+ const actualUleb128 = await runParser(uleb128Parser, input, uint8ArrayParserInputCompanion);
28
+ t.is(actualUleb128, expectedUleb128, 'uleb128');
29
+ }
30
+ for (const [input, expectedSleb128,] of [
31
+ [new Uint8Array([2]), 2n],
32
+ [new Uint8Array([0x7E]), -2n],
33
+ [new Uint8Array([127 + 0x80, 0]), 127n],
34
+ [new Uint8Array([1 + 0x80, 0x7F]), -127n],
35
+ [new Uint8Array([0 + 0x80, 1]), 128n],
36
+ [new Uint8Array([0 + 0x80, 0x7F]), -128n],
37
+ [new Uint8Array([1 + 0x80, 1]), 129n],
38
+ [new Uint8Array([0x7F + 0x80, 0x7E]), -129n],
39
+ ]) {
40
+ const actualSleb128 = await runParser(sleb128Parser, input, uint8ArrayParserInputCompanion);
41
+ t.is(actualSleb128, expectedSleb128, 'sleb128');
42
+ }
43
+ });
44
+ testProp('uleb128NumberParser on small number', [
45
+ fc.nat(),
46
+ ], async (t, natural) => {
47
+ const uleb128 = leb128.unsigned.encode(natural);
48
+ const actualUleb128 = await runParser(uleb128NumberParser, uleb128, uint8ArrayParserInputCompanion);
49
+ t.is(actualUleb128, natural, 'uleb128');
50
+ }, {
51
+ verbose: true,
52
+ });
53
+ testProp('sleb128NumberParser on small number', [
54
+ fc.integer(),
55
+ ], async (t, integer) => {
56
+ const sleb128 = leb128.signed.encode(integer);
57
+ const actualSleb128 = await runParser(sleb128NumberParser, sleb128, uint8ArrayParserInputCompanion);
58
+ t.is(actualSleb128, integer, 'sleb128');
59
+ }, {
60
+ verbose: true,
61
+ });
62
+ // TODO?
63
+ testProp.skip('uleb128NumberParser on large number', [
64
+ fc.maxSafeNat(),
65
+ ], async (t, natural) => {
66
+ const uleb128 = leb128.unsigned.encode(natural);
67
+ if (natural > (2 ** 32) - 1) {
68
+ await t.throwsAsync(async () => runParser(uleb128NumberParser, uleb128, uint8ArrayParserInputCompanion));
69
+ return;
70
+ }
71
+ const actualUleb128 = await runParser(uleb128NumberParser, uleb128, uint8ArrayParserInputCompanion);
72
+ t.is(actualUleb128, natural, 'uleb128');
73
+ }, {
74
+ verbose: true,
75
+ });
76
+ // TODO?
77
+ testProp.skip('sleb128NumberParser on large number', [
78
+ fc.maxSafeInteger(),
79
+ ], async (t, integer) => {
80
+ const sleb128 = leb128.signed.encode(integer);
81
+ if (integer > (2 ** 32) - 1 || integer < -(2 ** 32)) {
82
+ await t.throwsAsync(async () => runParser(sleb128NumberParser, sleb128, uint8ArrayParserInputCompanion));
83
+ return;
84
+ }
85
+ const actualSleb128 = await runParser(sleb128NumberParser, sleb128, uint8ArrayParserInputCompanion);
86
+ t.is(actualSleb128, integer, 'sleb128');
87
+ }, {
88
+ verbose: true,
89
+ });
90
+ testProp('uleb128Parser on bigint', [
91
+ fc.bigInt({ min: 0n }),
92
+ ], async (t, bigInt) => {
93
+ const uleb128 = leb128.unsigned.encode(bigInt);
94
+ const actualUleb128 = await runParser(uleb128Parser, uleb128, uint8ArrayParserInputCompanion);
95
+ t.is(actualUleb128, bigInt, 'uleb128');
96
+ }, {
97
+ verbose: true,
98
+ });
99
+ testProp('sleb128Parser on bigint', [
100
+ fc.bigInt(),
101
+ ], async (t, bigInt) => {
102
+ const sleb128 = leb128.signed.encode(bigInt);
103
+ const actualSleb128 = await runParser(sleb128Parser, sleb128, uint8ArrayParserInputCompanion);
104
+ t.is(actualSleb128, bigInt, 'sleb128');
105
+ }, {
106
+ verbose: true,
107
+ });
@@ -0,0 +1,2 @@
1
+ import { type Parser } from './parser.js';
2
+ export declare const createLookaheadParser: <Output, Sequence>(childParser: Parser<Output, Sequence>) => Parser<Output, Sequence>;
@@ -0,0 +1,14 @@
1
+ import { getParserName, setParserName } from './parser.js';
2
+ export const createLookaheadParser = (childParser) => {
3
+ const lookaheadParser = async (parserContext) => {
4
+ const childParserContext = parserContext.lookahead();
5
+ try {
6
+ return await childParser(childParserContext);
7
+ }
8
+ finally {
9
+ childParserContext.dispose();
10
+ }
11
+ };
12
+ setParserName(lookaheadParser, `(?=${getParserName(childParser)})`);
13
+ return lookaheadParser;
14
+ };
@@ -1,18 +1,24 @@
1
- import { getParserName } from './parser.js';
2
- import { ParserParsingFailedError } from './parserError.js';
3
- export const createNegativeLookaheadParser = (childParser) => async (parserContext) => {
4
- const childParserContext = parserContext.lookahead();
5
- try {
6
- await childParser(childParserContext);
7
- parserContext.invariant(false, 'Negative lookahead assertion failed for child parser %s.', getParserName(childParser));
8
- }
9
- catch (error) {
10
- if (error instanceof ParserParsingFailedError) {
11
- return;
1
+ import { getParserName, setParserName } from './parser.js';
2
+ import { isParserParsingFailedError } from './parserError.js';
3
+ export const createNegativeLookaheadParser = (childParser) => {
4
+ const negativeLookaheadParser = async (parserContext) => {
5
+ const childParserContext = parserContext.lookahead();
6
+ let childParserSuccess;
7
+ try {
8
+ await childParser(childParserContext);
9
+ childParserSuccess = true;
12
10
  }
13
- throw error;
14
- }
15
- finally {
16
- childParserContext.dispose();
17
- }
11
+ catch (error) {
12
+ if (!isParserParsingFailedError(error)) {
13
+ throw error;
14
+ }
15
+ childParserSuccess = false;
16
+ }
17
+ finally {
18
+ childParserContext.dispose();
19
+ }
20
+ parserContext.invariant(!childParserSuccess, 'Negative lookahead assertion failed for child parser %s.', getParserName(childParser));
21
+ };
22
+ setParserName(negativeLookaheadParser, `(?!${getParserName(childParser)})`);
23
+ return negativeLookaheadParser;
18
24
  };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ import * as fc from 'fast-check';
2
+ import { testProp } from '@fast-check/ava';
3
+ import { createNegativeLookaheadParser } from './negativeLookaheadParser.js';
4
+ import { createExactSequenceParser } from './exactSequenceParser.js';
5
+ import { runParser } from './parser.js';
6
+ import { stringParserInputCompanion } from './parserInputCompanion.js';
7
+ import { createTupleParser } from './tupleParser.js';
8
+ testProp('negativeLookaheadParser', [
9
+ fc.tuple(fc.string({
10
+ minLength: 1,
11
+ }), fc.string({
12
+ minLength: 1,
13
+ })).filter(([a, b]) => !a.startsWith(b)),
14
+ ], async (t, [stringA, stringB]) => {
15
+ const result = await runParser(createTupleParser([
16
+ createNegativeLookaheadParser(createExactSequenceParser(stringB)),
17
+ createExactSequenceParser(stringA + stringB),
18
+ ]), stringA + stringB, stringParserInputCompanion);
19
+ t.deepEqual(result, [undefined, stringA + stringB]);
20
+ await t.throwsAsync(async () => runParser(createTupleParser([
21
+ createNegativeLookaheadParser(createExactSequenceParser(stringA)),
22
+ createExactSequenceParser(stringA + stringB),
23
+ ]), stringA + stringB, stringParserInputCompanion), {
24
+ any: true,
25
+ name: 'ParserParsingInvariantError',
26
+ message: /lookahead/,
27
+ });
28
+ }, {
29
+ verbose: true,
30
+ });
@@ -0,0 +1,4 @@
1
+ declare class NoStackCaptureOverheadErrorClass extends Error {
2
+ }
3
+ export declare const NoStackCaptureOverheadError: typeof NoStackCaptureOverheadErrorClass;
4
+ export {};
@@ -0,0 +1,9 @@
1
+ class NoStackCaptureOverheadErrorClass extends Error {
2
+ }
3
+ function NoStackCaptureOverheadErrorConstructor(message) {
4
+ this.name = 'NoStackCaptureOverheadError';
5
+ this.message = message;
6
+ this.stack = 'This stack is intentionally left blank to avoid capture overhead.';
7
+ }
8
+ NoStackCaptureOverheadErrorConstructor.prototype = Object.create(Error.prototype);
9
+ export const NoStackCaptureOverheadError = NoStackCaptureOverheadErrorConstructor;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import test from 'ava';
2
+ import util from 'util';
3
+ import { NoStackCaptureOverheadError } from './noStackCaptureOverheadError.js';
4
+ test('NoStackCaptureOverheadError works', t => {
5
+ const error = new NoStackCaptureOverheadError('Test message');
6
+ t.is(error.name, 'NoStackCaptureOverheadError');
7
+ t.is(error.message, 'Test message');
8
+ t.true(error instanceof Error, 'error is instance of Error');
9
+ t.true(error instanceof NoStackCaptureOverheadError, 'error is instance of NoStackCaptureOverheadError');
10
+ t.false(new Error() instanceof NoStackCaptureOverheadError, 'regular Error is not instance of NoStackCaptureOverheadError');
11
+ if (typeof Error.isError === 'function') {
12
+ t.false(Error.isError(error), 'Error.isError does not identify error as Error');
13
+ }
14
+ t.false(util.types.isNativeError(error), 'util.types.isNativeError does not identify error as native Error');
15
+ });
@@ -0,0 +1,2 @@
1
+ import { type Parser } from './parser.js';
2
+ export declare const createNonEmptyArrayParser: <ElementOutput, Sequence>(elementParser: Parser<ElementOutput, Sequence>) => Parser<ElementOutput[], Sequence>;
@@ -0,0 +1,32 @@
1
+ import { getParserName, setParserName } from './parser.js';
2
+ import { isParserParsingFailedError } from './parserError.js';
3
+ export const createNonEmptyArrayParser = (elementParser) => {
4
+ const nonEmptyArrayParser = async (parserContext) => {
5
+ const elements = [];
6
+ while (true) {
7
+ const elementParserContext = parserContext.lookahead();
8
+ const initialPosition = elementParserContext.position;
9
+ try {
10
+ const element = await elementParser(elementParserContext);
11
+ if (elementParserContext.position === initialPosition) {
12
+ break;
13
+ }
14
+ elements.push(element);
15
+ elementParserContext.unlookahead();
16
+ }
17
+ catch (error) {
18
+ if (isParserParsingFailedError(error)) {
19
+ break;
20
+ }
21
+ throw error;
22
+ }
23
+ finally {
24
+ elementParserContext.dispose();
25
+ }
26
+ }
27
+ parserContext.invariant(elements.length > 0, 'Expected elementParser (%s) to match at least once', getParserName(elementParser, 'anonymousNonEmptyArrayChild'));
28
+ return elements;
29
+ };
30
+ setParserName(nonEmptyArrayParser, getParserName(elementParser, 'anonymousNonEmptyArrayChild') + '+');
31
+ return nonEmptyArrayParser;
32
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ import test from 'ava';
2
+ import { createNonEmptyArrayParser } from './nonEmptyArrayParser.js';
3
+ import { runParser } from './parser.js';
4
+ import { stringParserInputCompanion } from './parserInputCompanion.js';
5
+ import { createExactElementParser } from './exactElementParser.js';
6
+ test('empty array does not match', async (t) => {
7
+ const parser = createNonEmptyArrayParser(createExactElementParser('0'));
8
+ await t.throwsAsync(async () => runParser(parser, '', stringParserInputCompanion), {
9
+ any: true,
10
+ message: /Expected .* to match at least once/,
11
+ });
12
+ });
13
+ test('non-empty array matches', async (t) => {
14
+ const parser = createNonEmptyArrayParser(createExactElementParser('0'));
15
+ const result = await runParser(parser, '0', stringParserInputCompanion);
16
+ t.deepEqual(result, ['0']);
17
+ });
@@ -1,5 +1,5 @@
1
1
  import { getParserName, setParserName } from './parser.js';
2
- import { ParserParsingFailedError } from './parserError.js';
2
+ import { isParserParsingFailedError } from './parserError.js';
3
3
  export const createOptionalParser = (childParser) => {
4
4
  const optionalParser = async (parserContext) => {
5
5
  const childParserContext = parserContext.lookahead();
@@ -9,7 +9,7 @@ export const createOptionalParser = (childParser) => {
9
9
  return value;
10
10
  }
11
11
  catch (error) {
12
- if (error instanceof ParserParsingFailedError) {
12
+ if (isParserParsingFailedError(error)) {
13
13
  return undefined;
14
14
  }
15
15
  throw error;
package/build/parser.d.ts CHANGED
@@ -1,10 +1,20 @@
1
+ import { type Class } from 'type-fest';
1
2
  import { type ParserInputCompanion } from './parserInputCompanion.js';
2
3
  import { type ParserContext } from './parserContext.js';
3
4
  import { type DeriveSequenceElement } from './sequence.js';
4
- export type Parser<Output, Sequence, Element = DeriveSequenceElement<Sequence>> = (parserContext: ParserContext<Sequence, Element>) => Promise<Output>;
5
+ export type Parser<Output, Sequence, Element = DeriveSequenceElement<Sequence>> = (parserContext: ParserContext<Sequence, Element>) => Output | Promise<Output>;
5
6
  export declare function getParserName(parser: Parser<any, any, any>, default_?: string): string;
6
7
  export declare function setParserName<Output, Sequence, Element = DeriveSequenceElement<Sequence>>(parser: Parser<Output, Sequence, Element>, name: string): Parser<Output, Sequence, Element>;
8
+ export declare function cloneParser<Output, Sequence, Element = DeriveSequenceElement<Sequence>>(parser: Parser<Output, Sequence, Element>): Parser<Output, Sequence, Element>;
7
9
  export type RunParserOptions<Output, Sequence, Element = DeriveSequenceElement<Sequence>> = {
8
10
  errorJoinMode?: 'none' | 'deepest' | 'furthest' | 'all';
11
+ errorStack?: boolean;
12
+ parserContextClass?: Class<ParserContext<Sequence, Element>>;
9
13
  };
14
+ export type RunParserWithRemainingInputResult<Output, Sequence, Element = DeriveSequenceElement<Sequence>> = {
15
+ output: Output;
16
+ position: number;
17
+ remainingInput: undefined | AsyncIterable<Sequence>;
18
+ };
19
+ export declare function runParserWithRemainingInput<Output, Sequence, Element = DeriveSequenceElement<Sequence>>(parser: Parser<Output, Sequence, Element>, input: AsyncIterator<Sequence> | AsyncIterable<Sequence> | Iterable<Sequence> | Sequence, parserInputCompanion: ParserInputCompanion<Sequence, Element>, options?: RunParserOptions<Output, Sequence, Element>): Promise<RunParserWithRemainingInputResult<Output, Sequence, Element>>;
10
20
  export declare function runParser<Output, Sequence, Element = DeriveSequenceElement<Sequence>>(parser: Parser<Output, Sequence, Element>, input: AsyncIterator<Sequence> | AsyncIterable<Sequence> | Iterable<Sequence> | Sequence, parserInputCompanion: ParserInputCompanion<Sequence, Element>, options?: RunParserOptions<Output, Sequence, Element>): Promise<Output>;
package/build/parser.js CHANGED
@@ -1,6 +1,12 @@
1
- import invariant from 'invariant';
2
1
  import { InputReaderImplementation } from './inputReader.js';
3
2
  import { ParserContextImplementation } from './parserContext.js';
3
+ import { toAsyncIterator } from './toAsyncIterator.js';
4
+ import { inputReaderStateCompanion } from './inputReaderState.js';
5
+ import { isLazyMessageError } from './lazyMessageError.js';
6
+ import { isParserError, normalParserErrorModule, noStackCaptureOverheadParserErrorModule } from './parserError.js';
7
+ import { NoStackCaptureOverheadError } from './noStackCaptureOverheadError.js';
8
+ import invariant from 'invariant';
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
10
  export function getParserName(parser, default_ = 'anonymous') {
5
11
  return parser.name || default_;
6
12
  }
@@ -10,44 +16,88 @@ export function setParserName(parser, name) {
10
16
  });
11
17
  return parser;
12
18
  }
13
- function isAsyncIterable(value) {
14
- return value && typeof value[Symbol.asyncIterator] === 'function';
15
- }
16
- function isIterable(value) {
17
- return value && typeof value[Symbol.iterator] === 'function';
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ const originalParserByClone = new WeakMap();
21
+ export function cloneParser(parser) {
22
+ const originalParser = originalParserByClone.get(parser) ?? parser;
23
+ const clone = parserContext => originalParser(parserContext);
24
+ setParserName(clone, getParserName(parser));
25
+ originalParserByClone.set(clone, originalParser);
26
+ return clone;
18
27
  }
19
- function isIterator(value) {
20
- return value && typeof value.next === 'function';
21
- }
22
- function iteratorToAsyncIterator(iterator) {
23
- return {
24
- next: async () => iterator.next(),
25
- };
26
- }
27
- function toAsyncIterator(value) {
28
- if (typeof value === 'string'
29
- || value instanceof Uint8Array) {
30
- return (async function* () {
31
- yield value;
32
- })();
33
- }
34
- if (isAsyncIterable(value)) {
35
- return value[Symbol.asyncIterator]();
36
- }
37
- if (isIterable(value)) {
38
- return iteratorToAsyncIterator(value[Symbol.iterator]());
28
+ async function withEnrichedParserError(parserContext, inputReader, f) {
29
+ try {
30
+ return await f();
39
31
  }
40
- if (isIterator(value)) {
41
- return iteratorToAsyncIterator(value);
32
+ catch (error) {
33
+ if (error instanceof NoStackCaptureOverheadError) {
34
+ invariant(error.name in normalParserErrorModule, 'NoStackCaptureOverheadError with unknown name encountered during parser execution: %s', error.name);
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
+ const normalError = new (normalParserErrorModule[error.name])(error.message);
37
+ Object.assign(normalError, error);
38
+ normalError.stack = normalError.stack + '\nIf you need a useful stack trace, pass `errorStack: true` to `runParser`, trading off some performance.';
39
+ error = normalError;
40
+ }
41
+ if (isLazyMessageError(error)) {
42
+ error.computeMessage();
43
+ }
44
+ if (isParserError(error)) {
45
+ if (error.position === undefined) {
46
+ error.position = parserContext.position;
47
+ }
48
+ if (error.inputReaderSate === undefined) {
49
+ error.inputReaderSate = inputReader.toInputReaderState();
50
+ }
51
+ }
52
+ throw error;
42
53
  }
43
- invariant(false, 'Value must be an async iterator, async iterable, iterable or iterator got %s.', value);
44
54
  }
45
- export async function runParser(parser, input, parserInputCompanion, options = {}) {
55
+ function runParserInternal(parser, input, parserInputCompanion, options = {}) {
46
56
  const inputAsyncIterator = toAsyncIterator(input);
47
57
  const inputReader = new InputReaderImplementation(parserInputCompanion, inputAsyncIterator);
48
- const parserContext = new ParserContextImplementation(parserInputCompanion, inputReader, undefined, {
58
+ const ParserContext = options.parserContextClass ?? ParserContextImplementation;
59
+ const parserContext = new ParserContext(parserInputCompanion, inputReader, undefined, {
49
60
  ...options,
61
+ errorsModule: options.errorStack ? normalParserErrorModule : noStackCaptureOverheadParserErrorModule,
50
62
  debugName: 'root',
51
63
  });
52
- return parser(parserContext);
64
+ const outputPromise = (async () => {
65
+ try {
66
+ return await parser(parserContext);
67
+ }
68
+ finally {
69
+ await parserContext.peek(0);
70
+ }
71
+ })();
72
+ return {
73
+ outputPromise,
74
+ parserContext,
75
+ inputReader,
76
+ };
77
+ }
78
+ export async function runParserWithRemainingInput(parser, input, parserInputCompanion, options = {}) {
79
+ const { outputPromise, parserContext, inputReader, } = runParserInternal(parser, input, parserInputCompanion, options);
80
+ return withEnrichedParserError(parserContext, inputReader, async () => {
81
+ const output = await outputPromise;
82
+ const inputReaderState = inputReader.toInputReaderState();
83
+ const remainingInput = (inputReaderStateCompanion.isDone(inputReaderState)
84
+ ? undefined
85
+ : inputReaderStateCompanion.toRemainingInputAsyncIterator(inputReaderState));
86
+ return {
87
+ output,
88
+ position: parserContext.position,
89
+ remainingInput,
90
+ };
91
+ });
92
+ }
93
+ export async function runParser(parser, input, parserInputCompanion, options = {}) {
94
+ const { outputPromise, parserContext, inputReader, } = runParserInternal(parser, input, parserInputCompanion, options);
95
+ return withEnrichedParserError(parserContext, inputReader, async () => {
96
+ const output = await outputPromise;
97
+ const inputReaderState = inputReader.toInputReaderState();
98
+ if (!inputReaderStateCompanion.isDone(inputReaderState)) {
99
+ throw new normalParserErrorModule.ParserUnexpectedRemainingInputError('Unexpected remaining input', 0, parserContext.position);
100
+ }
101
+ return output;
102
+ });
53
103
  }