@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,7 +1,7 @@
1
1
  import test from 'ava';
2
2
  import { InputReaderImplementation } from './inputReader.js';
3
3
  import { stringParserInputCompanion } from './parserInputCompanion.js';
4
- import { ParserImplementationError } from './parserError.js';
4
+ import { toAsyncIterable } from './toAsyncIterable.js';
5
5
  test('inputReader', async (t) => {
6
6
  const inputReader = new InputReaderImplementation(stringParserInputCompanion, (async function* () {
7
7
  yield '';
@@ -31,6 +31,39 @@ test('inputReader', async (t) => {
31
31
  inputReader.skip(1);
32
32
  t.is(await inputReader.peek(0), undefined);
33
33
  });
34
+ test('inputReader peekSequence', async (t) => {
35
+ const inputReader = new InputReaderImplementation(stringParserInputCompanion, (async function* () {
36
+ yield '';
37
+ yield 'abc';
38
+ yield 'def';
39
+ yield '';
40
+ yield 'gh';
41
+ })());
42
+ t.is(await inputReader.peekSequence(0, 0), '');
43
+ t.is(await inputReader.peekSequence(0, 1), 'a');
44
+ inputReader.skip(0);
45
+ t.is(await inputReader.peekSequence(1, 2), 'b');
46
+ inputReader.skip(1);
47
+ t.is(await inputReader.peekSequence(1, 7), 'bcdefgh'.slice(1, 7));
48
+ t.is(await inputReader.peekSequence(1, 8), undefined);
49
+ inputReader.skip(6);
50
+ t.is(await inputReader.peekSequence(0, 0), '');
51
+ t.is(await inputReader.peekSequence(0, 1), 'h');
52
+ t.is(await inputReader.peekSequence(1, 2), undefined);
53
+ t.is(await inputReader.peekSequence(2, 2), undefined);
54
+ inputReader.skip(1);
55
+ t.is(await inputReader.peekSequence(0, 0), '');
56
+ t.is(await inputReader.peekSequence(0, 1), undefined);
57
+ t.is(await inputReader.peekSequence(1, 1), undefined);
58
+ inputReader.skip(0);
59
+ t.is(await inputReader.peekSequence(0, 0), '');
60
+ t.is(await inputReader.peekSequence(0, 1), undefined);
61
+ t.is(await inputReader.peekSequence(1, 1), undefined);
62
+ inputReader.skip(1);
63
+ t.is(await inputReader.peekSequence(0, 0), undefined);
64
+ t.is(await inputReader.peekSequence(0, 1), undefined);
65
+ t.is(await inputReader.peekSequence(1, 1), undefined);
66
+ });
34
67
  test('inputReader.peek concurrent', async (t) => {
35
68
  const inputReader = new InputReaderImplementation(stringParserInputCompanion, (async function* () {
36
69
  yield* 'abcdefgh';
@@ -50,14 +83,84 @@ test('inputReader.peek concurrent', async (t) => {
50
83
  ]);
51
84
  t.deepEqual(peeks, ['a', 'a', 'a', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']);
52
85
  });
86
+ test('inputReader.peekSequence concurrent', async (t) => {
87
+ const inputReader = new InputReaderImplementation(stringParserInputCompanion, (async function* () {
88
+ yield* 'abcdefgh';
89
+ })());
90
+ const peeks = await Promise.all([1, 2, 3].flatMap(length => [
91
+ inputReader.peekSequence(0, 0 + length),
92
+ inputReader.peekSequence(0, 0 + length),
93
+ inputReader.peekSequence(0, 0 + length),
94
+ inputReader.peekSequence(0, 0 + length),
95
+ inputReader.peekSequence(1, 1 + length),
96
+ inputReader.peekSequence(2, 2 + length),
97
+ inputReader.peekSequence(3, 3 + length),
98
+ inputReader.peekSequence(4, 4 + length),
99
+ inputReader.peekSequence(5, 5 + length),
100
+ inputReader.peekSequence(6, 6 + length),
101
+ inputReader.peekSequence(7, 7 + length),
102
+ ]));
103
+ t.deepEqual(peeks, [
104
+ 'a',
105
+ 'a',
106
+ 'a',
107
+ 'a',
108
+ 'b',
109
+ 'c',
110
+ 'd',
111
+ 'e',
112
+ 'f',
113
+ 'g',
114
+ 'h',
115
+ 'ab',
116
+ 'ab',
117
+ 'ab',
118
+ 'ab',
119
+ 'bc',
120
+ 'cd',
121
+ 'de',
122
+ 'ef',
123
+ 'fg',
124
+ 'gh',
125
+ undefined,
126
+ 'abc',
127
+ 'abc',
128
+ 'abc',
129
+ 'abc',
130
+ 'bcd',
131
+ 'cde',
132
+ 'def',
133
+ 'efg',
134
+ 'fgh',
135
+ undefined,
136
+ undefined,
137
+ ]);
138
+ });
53
139
  test('inputReader skip while peeking', async (t) => {
54
140
  const inputReader = new InputReaderImplementation(stringParserInputCompanion, (async function* () {
55
141
  yield* 'abcdefgh';
56
142
  })());
57
143
  const peekPromise = inputReader.peek(0);
58
144
  inputReader.skip(1);
145
+ const peekAfterSkipPromise = inputReader.peek(0);
146
+ const peekSequenceAfterSkipPromise = inputReader.peekSequence(0, 5);
59
147
  t.is(await peekPromise, 'a');
60
148
  t.is(await inputReader.peek(0), 'b');
149
+ t.is(await peekAfterSkipPromise, 'b');
150
+ t.is(await peekSequenceAfterSkipPromise, 'bcdef');
151
+ });
152
+ test('inputReader skip while peeking sequence', async (t) => {
153
+ const inputReader = new InputReaderImplementation(stringParserInputCompanion, (async function* () {
154
+ yield* 'abcdefgh';
155
+ })());
156
+ const peekPromise = inputReader.peekSequence(1, 5);
157
+ inputReader.skip(1);
158
+ const peekAfterSkipPromise = inputReader.peek(0);
159
+ const peekSequenceAfterSkipPromise = inputReader.peekSequence(0, 4);
160
+ t.is(await peekPromise, 'bcde', 'peekPromise');
161
+ t.is(await inputReader.peekSequence(0, 4), 'bcde', 'inputReader.peekSequence(0, 4)');
162
+ t.is(await peekAfterSkipPromise, 'b', 'peekAfterSkipPromise');
163
+ t.is(await peekSequenceAfterSkipPromise, 'bcde', 'peekSequenceAfterSkipPromise');
61
164
  });
62
165
  test('inputReader.lookahead', async (t) => {
63
166
  let read = 0;
@@ -84,10 +187,15 @@ test('inputReader.lookahead', async (t) => {
84
187
  t.is(read, 2);
85
188
  inputReader.skip(1);
86
189
  await t.throwsAsync(async () => lookahead0a.peek(0), {
87
- instanceOf: ParserImplementationError,
190
+ any: true,
191
+ name: 'ParserImplementationInvariantError',
192
+ });
193
+ await t.throwsAsync(async () => lookahead0b.peek(0), {
194
+ any: true,
195
+ });
196
+ await t.throwsAsync(async () => lookahead0c.peek(0), {
197
+ any: true,
88
198
  });
89
- await t.throwsAsync(async () => lookahead0b.peek(0));
90
- await t.throwsAsync(async () => lookahead0c.peek(0));
91
199
  const lookahead1a = inputReader.lookahead();
92
200
  const lookahead1b = inputReader.lookahead();
93
201
  t.is(await lookahead1a.peek(0), 'b');
@@ -112,11 +220,19 @@ test('inputReader.lookahead', async (t) => {
112
220
  inputReader.skip(1);
113
221
  t.is(await inputReader.peek(0), 'c');
114
222
  t.is(inputReader.position, 2);
115
- await t.throwsAsync(async () => lookahead0a.peek(0));
116
- await t.throwsAsync(async () => lookahead0b.peek(0));
117
- await t.throwsAsync(async () => lookahead0c.peek(0));
223
+ await t.throwsAsync(async () => lookahead0a.peek(0), {
224
+ any: true,
225
+ });
226
+ await t.throwsAsync(async () => lookahead0b.peek(0), {
227
+ any: true,
228
+ });
229
+ await t.throwsAsync(async () => lookahead0c.peek(0), {
230
+ any: true,
231
+ });
118
232
  t.is(await lookahead1a.peek(0), 'c');
119
- await t.throwsAsync(async () => lookahead1b.peek(0));
233
+ await t.throwsAsync(async () => lookahead1b.peek(0), {
234
+ any: true,
235
+ });
120
236
  t.is(await lookahead2a.peek(0), 'd');
121
237
  t.is(await lookahead2b.peek(0), 'c');
122
238
  t.is(lookahead0a.position, 0);
@@ -172,3 +288,40 @@ test('inputReader.lookahead skip position', async (t) => {
172
288
  t.is(await lookahead.peek(0), 'c');
173
289
  t.is(await lookahead1.peek(0), 'd');
174
290
  });
291
+ const END_OF_CONSUMED_SEQUENCES = Symbol('END_OF_CONSUMED_SEQUENCES');
292
+ const END_OF_BUFFERED_SEQUENCES = Symbol('END_OF_BUFFERED_SEQUENCES');
293
+ async function inputReaderStateToArray({ unconsumedBufferedSequences, consumedBufferedSequences, unbufferedSequences, }) {
294
+ const unconsumedBufferedSequencesArray = [...unconsumedBufferedSequences];
295
+ const consumedBufferedSequencesArray = [...consumedBufferedSequences];
296
+ const unbufferedSequencesArray = [];
297
+ if (unbufferedSequences) {
298
+ for await (const sequence of toAsyncIterable(unbufferedSequences)) {
299
+ unbufferedSequencesArray.push(sequence);
300
+ }
301
+ }
302
+ return [
303
+ ...consumedBufferedSequencesArray,
304
+ END_OF_CONSUMED_SEQUENCES,
305
+ ...unconsumedBufferedSequencesArray,
306
+ END_OF_BUFFERED_SEQUENCES,
307
+ ...unbufferedSequencesArray,
308
+ ];
309
+ }
310
+ const inputReaderStateMacro = test.macro({
311
+ title: (providedTitle, input, position) => providedTitle ?? `inputReader.toInputReaderState ${JSON.stringify({ input, position })}`,
312
+ async exec(t, input, position, expected) {
313
+ const inputReader = new InputReaderImplementation(stringParserInputCompanion, (async function* () {
314
+ yield* input;
315
+ })());
316
+ inputReader.skip(position);
317
+ await inputReader.peek(0);
318
+ const actual = await inputReaderStateToArray(inputReader.toInputReaderState());
319
+ t.deepEqual(actual, expected);
320
+ },
321
+ });
322
+ test(inputReaderStateMacro, ['', 'abc', 'def', '', 'gh'], 0, [END_OF_CONSUMED_SEQUENCES, 'abc', END_OF_BUFFERED_SEQUENCES, 'def', '', 'gh']);
323
+ test(inputReaderStateMacro, ['', 'abc', 'def', '', 'gh'], 1, ['a', END_OF_CONSUMED_SEQUENCES, 'bc', END_OF_BUFFERED_SEQUENCES, 'def', '', 'gh']);
324
+ test(inputReaderStateMacro, ['', 'abc', 'def', '', 'gh'], 2, ['ab', END_OF_CONSUMED_SEQUENCES, 'c', END_OF_BUFFERED_SEQUENCES, 'def', '', 'gh']);
325
+ test(inputReaderStateMacro, ['', 'abc', 'def', '', 'gh'], 3, [END_OF_CONSUMED_SEQUENCES, 'def', END_OF_BUFFERED_SEQUENCES, '', 'gh']);
326
+ test(inputReaderStateMacro, ['', 'abc', 'def', '', 'gh'], 4, ['d', END_OF_CONSUMED_SEQUENCES, 'ef', END_OF_BUFFERED_SEQUENCES, '', 'gh']);
327
+ test(inputReaderStateMacro, ['', 'abc', 'def', '', 'gh'], 8, [END_OF_CONSUMED_SEQUENCES, END_OF_BUFFERED_SEQUENCES]);
@@ -0,0 +1,10 @@
1
+ export type InputReaderState<Sequence> = {
2
+ position: number;
3
+ consumedBufferedSequences: Sequence[];
4
+ unconsumedBufferedSequences: Sequence[];
5
+ unbufferedSequences: undefined | AsyncIterator<Sequence>;
6
+ };
7
+ export declare const inputReaderStateCompanion: {
8
+ isDone<Sequence>({ unconsumedBufferedSequences, unbufferedSequences, }: InputReaderState<Sequence>): boolean;
9
+ toRemainingInputAsyncIterator<Sequence>({ unconsumedBufferedSequences, unbufferedSequences, }: InputReaderState<Sequence>): AsyncIterable<Sequence>;
10
+ };
@@ -0,0 +1,16 @@
1
+ export const inputReaderStateCompanion = {
2
+ isDone({ unconsumedBufferedSequences, unbufferedSequences, }) {
3
+ return (unconsumedBufferedSequences.length === 0
4
+ && unbufferedSequences === undefined);
5
+ },
6
+ async *toRemainingInputAsyncIterator({ unconsumedBufferedSequences, unbufferedSequences, }) {
7
+ yield* unconsumedBufferedSequences;
8
+ if (unbufferedSequences !== undefined) {
9
+ yield* {
10
+ [Symbol.asyncIterator]() {
11
+ return unbufferedSequences;
12
+ },
13
+ };
14
+ }
15
+ },
16
+ };
@@ -0,0 +1 @@
1
+ export declare const inspect: (value: unknown) => string;
@@ -0,0 +1,7 @@
1
+ import { inspect as nodeInspect } from 'node:util';
2
+ export const inspect = (value) => {
3
+ if (value instanceof Uint8Array) {
4
+ value = Buffer.from(value);
5
+ }
6
+ return nodeInspect(value);
7
+ };
@@ -2,15 +2,15 @@ import test from 'ava';
2
2
  import { uint8ArrayParserInputCompanion } from './parserInputCompanion.js';
3
3
  import { runParser } from './parser.js';
4
4
  import { javaKeyStoreParser } from './javaKeyStoreParser.js';
5
- for (const javaKeyStoreCid of [
6
- 'bafkreig6k53b6p7bdvfjxc5mcb4qv3mffqls5ymqerxkqd6ih2xy5cs3n4',
7
- ]) {
8
- test('javaKeyStore ' + javaKeyStoreCid, async (t) => {
9
- const javaKeyStoreResponse = await fetch('https://ipfs.io/ipfs/' + javaKeyStoreCid);
10
- const javaKeyStoreStream = javaKeyStoreResponse.body;
5
+ import { fetchCid } from './fetchCid.js';
6
+ const javaKeyStoreMacro = test.macro({
7
+ title: (providedTitle, javaKeyStoreCid) => providedTitle ?? `javaKeyStore ${javaKeyStoreCid}`,
8
+ async exec(t, javaKeyStoreCid) {
9
+ const javaKeyStoreStream = await fetchCid(javaKeyStoreCid);
11
10
  const actual = await runParser(javaKeyStoreParser, javaKeyStoreStream, uint8ArrayParserInputCompanion, {
12
11
  errorJoinMode: 'all',
13
12
  });
14
13
  t.snapshot(actual);
15
- });
16
- }
14
+ },
15
+ });
16
+ test(javaKeyStoreMacro, 'bafkreig6k53b6p7bdvfjxc5mcb4qv3mffqls5ymqerxkqd6ih2xy5cs3n4');
@@ -1,3 +1,5 @@
1
1
  import { type JsonValue } from 'type-fest';
2
2
  import { type Parser } from './parser.js';
3
+ export declare const jsonStringParser: Parser<string, string>;
4
+ export declare const jsonNumberParser: Parser<number, string>;
3
5
  export declare const jsonValueParser: Parser<JsonValue, string>;
@@ -10,22 +10,23 @@ import { createArrayParser } from './arrayParser.js';
10
10
  import { createParserAccessorParser } from './parserAccessorParser.js';
11
11
  import { createElementParser } from './elementParser.js';
12
12
  import { parserCreatorCompose } from './parserCreatorCompose.js';
13
+ import { createSeparatedArrayParser } from './separatedArrayParser.js';
13
14
  const whitespaceParser = createArrayParser(createUnionParser([
14
15
  createExactSequenceParser(' '),
15
16
  createExactSequenceParser('\t'),
16
17
  createExactSequenceParser('\r'),
17
18
  createExactSequenceParser('\n'),
18
19
  ]));
19
- const jsonQuoteEscapeSequenceParser = promiseCompose(createExactSequenceParser('\\"'), () => '"');
20
+ const jsonQuoteEscapeSequenceParser = promiseCompose(createExactSequenceParser(String.raw `\"`), () => '"');
20
21
  const jsonBackslashEscapeSequenceParser = promiseCompose(createExactSequenceParser('\\\\'), () => '\\');
21
- const jsonSlashEscapeSequenceParser = promiseCompose(createExactSequenceParser('\\/'), () => '/');
22
- const jsonBackspaceEscapeSequenceParser = promiseCompose(createExactSequenceParser('\\b'), () => '\b');
23
- const jsonFormFeedEscapeSequenceParser = promiseCompose(createExactSequenceParser('\\f'), () => '\f');
24
- const jsonNewLineEscapeSequenceParser = promiseCompose(createExactSequenceParser('\\n'), () => '\n');
25
- const jsonCarriageReturnEscapeSequenceParser = promiseCompose(createExactSequenceParser('\\r'), () => '\r');
26
- const jsonTabEscapeSequenceParser = promiseCompose(createExactSequenceParser('\\t'), () => '\t');
22
+ const jsonSlashEscapeSequenceParser = promiseCompose(createExactSequenceParser(String.raw `\/`), () => '/');
23
+ const jsonBackspaceEscapeSequenceParser = promiseCompose(createExactSequenceParser(String.raw `\b`), () => '\b');
24
+ const jsonFormFeedEscapeSequenceParser = promiseCompose(createExactSequenceParser(String.raw `\f`), () => '\f');
25
+ const jsonNewLineEscapeSequenceParser = promiseCompose(createExactSequenceParser(String.raw `\n`), () => '\n');
26
+ const jsonCarriageReturnEscapeSequenceParser = promiseCompose(createExactSequenceParser(String.raw `\r`), () => '\r');
27
+ const jsonTabEscapeSequenceParser = promiseCompose(createExactSequenceParser(String.raw `\t`), () => '\t');
27
28
  const jsonUnicodeEscapeSequenceParser = promiseCompose(createTupleParser([
28
- createExactSequenceParser('\\u'),
29
+ createExactSequenceParser(String.raw `\u`),
29
30
  createFixedLengthSequenceParser(4),
30
31
  ]), ([, hexCode]) => String.fromCharCode(Number.parseInt(hexCode, 16)));
31
32
  const jsonStringEscapeSequenceParser = createUnionParser([
@@ -47,11 +48,11 @@ const jsonStringCharacterParser = createDisjunctionParser([
47
48
  return character;
48
49
  })(),
49
50
  ]);
50
- const jsonStringParser = promiseCompose(createTupleParser([
51
+ export const jsonStringParser = promiseCompose(createTupleParser([
51
52
  createExactSequenceParser('"'),
52
53
  promiseCompose(createTerminatedArrayParser(jsonStringCharacterParser, createExactSequenceParser('"')), ([characters]) => characters.join('')),
53
54
  ]), ([, string]) => string);
54
- const jsonNumberParser = parserCreatorCompose(() => createArrayParser(parserCreatorCompose(() => elementParser, character => async (parserContext) => {
55
+ export const jsonNumberParser = parserCreatorCompose(() => createArrayParser(parserCreatorCompose(() => elementParser, character => async (parserContext) => {
55
56
  parserContext.invariant((character === '-'
56
57
  || (character >= '0' && character <= '9')
57
58
  || character === '.'
@@ -113,18 +114,14 @@ const jsonObjectParser = promiseCompose(createTupleParser([
113
114
  const jsonArrayParser = promiseCompose(createTupleParser([
114
115
  createExactSequenceParser('['),
115
116
  whitespaceParser,
116
- promiseCompose(createTerminatedArrayParser(createDisjunctionParser([
117
- promiseCompose(createTupleParser([
118
- createParserAccessorParser(() => jsonValueParser),
119
- whitespaceParser,
120
- createExactSequenceParser(','),
121
- whitespaceParser,
122
- ]), ([value]) => value),
123
- promiseCompose(createTupleParser([
124
- createParserAccessorParser(() => jsonValueParser),
125
- whitespaceParser,
126
- ]), ([value]) => value),
127
- ]), createExactSequenceParser(']')), ([values]) => values),
117
+ createSeparatedArrayParser(createParserAccessorParser(() => jsonValueParser), createTupleParser([
118
+ whitespaceParser,
119
+ createExactSequenceParser(','),
120
+ whitespaceParser,
121
+ ])),
122
+ whitespaceParser,
123
+ createExactSequenceParser(']'),
124
+ whitespaceParser,
128
125
  ]), ([_bracket, _whitespace, values]) => values);
129
126
  export const jsonValueParser = createUnionParser([
130
127
  jsonObjectParser,
@@ -0,0 +1,48 @@
1
+ import { NoStackCaptureOverheadError } from "./noStackCaptureOverheadError.js";
2
+ type ValueOrAccessor<T> = T | (() => T);
3
+ export type LazyMessage = ValueOrAccessor<string | string[]> | [ValueOrAccessor<string | string[]>, ...Array<ValueOrAccessor<unknown>>];
4
+ export declare function formatLazyMessage(lazyMessage: LazyMessage): string;
5
+ export interface LazyMessageError extends Error {
6
+ computeMessage(): void;
7
+ }
8
+ export declare function createLazyMessageErrorClass(BaseError: typeof NoStackCaptureOverheadError | typeof Error): {
9
+ new (lazyMessage: LazyMessage): {
10
+ name: string;
11
+ _lazyMessage: undefined | LazyMessage;
12
+ computeMessage(): void;
13
+ message: string;
14
+ stack?: string;
15
+ cause?: unknown;
16
+ };
17
+ captureStackTrace(targetObject: object, constructorOpt?: Function): void;
18
+ prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
19
+ stackTraceLimit: number;
20
+ };
21
+ export declare const NormalLazyMessageError: {
22
+ new (lazyMessage: LazyMessage): {
23
+ name: string;
24
+ _lazyMessage: undefined | LazyMessage;
25
+ computeMessage(): void;
26
+ message: string;
27
+ stack?: string;
28
+ cause?: unknown;
29
+ };
30
+ captureStackTrace(targetObject: object, constructorOpt?: Function): void;
31
+ prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
32
+ stackTraceLimit: number;
33
+ };
34
+ export declare const NoStackCaptureOverheadLazyMessageError: {
35
+ new (lazyMessage: LazyMessage): {
36
+ name: string;
37
+ _lazyMessage: undefined | LazyMessage;
38
+ computeMessage(): void;
39
+ message: string;
40
+ stack?: string;
41
+ cause?: unknown;
42
+ };
43
+ captureStackTrace(targetObject: object, constructorOpt?: Function): void;
44
+ prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
45
+ stackTraceLimit: number;
46
+ };
47
+ export declare function isLazyMessageError(value: unknown): value is LazyMessageError;
48
+ export {};
@@ -0,0 +1,53 @@
1
+ import { NoStackCaptureOverheadError } from "./noStackCaptureOverheadError.js";
2
+ function formatLazyMessageFormat(format) {
3
+ if (typeof format === 'function') {
4
+ format = format();
5
+ }
6
+ if (Array.isArray(format)) {
7
+ return format.join('\n');
8
+ }
9
+ return format;
10
+ }
11
+ function formatLazyMessageSubstitutions(format, formatArguments) {
12
+ return format.replaceAll('%s', () => {
13
+ const argumentOrAccessor = formatArguments.shift();
14
+ return typeof argumentOrAccessor === 'function' ? argumentOrAccessor() : argumentOrAccessor;
15
+ });
16
+ }
17
+ export function formatLazyMessage(lazyMessage) {
18
+ if (Array.isArray(lazyMessage)) {
19
+ const [format, ...formatArguments] = lazyMessage;
20
+ const formattedFormat = formatLazyMessageFormat(format);
21
+ return formatLazyMessageSubstitutions(formattedFormat, formatArguments);
22
+ }
23
+ else {
24
+ return formatLazyMessageFormat(lazyMessage);
25
+ }
26
+ }
27
+ export function createLazyMessageErrorClass(BaseError) {
28
+ return class LazyMessageError extends BaseError {
29
+ name = 'LazyMessageError';
30
+ _lazyMessage;
31
+ constructor(lazyMessage) {
32
+ super('LAZY_MESSAGE');
33
+ this._lazyMessage = lazyMessage;
34
+ }
35
+ computeMessage() {
36
+ if (this._lazyMessage === undefined) {
37
+ return;
38
+ }
39
+ this.message = formatLazyMessage(this._lazyMessage);
40
+ this.stack = this.stack?.replace('LAZY_MESSAGE', this.message);
41
+ delete this._lazyMessage;
42
+ }
43
+ };
44
+ }
45
+ export const NormalLazyMessageError = createLazyMessageErrorClass(Error);
46
+ export const NoStackCaptureOverheadLazyMessageError = createLazyMessageErrorClass(NoStackCaptureOverheadError);
47
+ export function isLazyMessageError(value) {
48
+ return (typeof value === 'object'
49
+ && value !== null
50
+ && value instanceof Error
51
+ && '_lazyMessage' in value
52
+ && typeof value.computeMessage === 'function');
53
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import test from 'ava';
2
+ import { NormalLazyMessageError } from './lazyMessageError.js';
3
+ test('LazyMessageError works', t => {
4
+ const error = new NormalLazyMessageError([
5
+ () => [
6
+ 'Line 1: %s',
7
+ 'Line 2: %s and %s.',
8
+ ],
9
+ 42,
10
+ () => 'foo',
11
+ true,
12
+ ]);
13
+ error.computeMessage();
14
+ t.is(error.message, 'Line 1: 42\nLine 2: foo and true.');
15
+ });
@@ -0,0 +1,7 @@
1
+ import { type Parser } from './parser.js';
2
+ export declare const uleb128Parser: Parser<bigint, Uint8Array>;
3
+ export declare const sleb128Parser: Parser<bigint, Uint8Array>;
4
+ export declare const uleb128NumberParser: Parser<number, Uint8Array>;
5
+ export declare const sleb128NumberParser: Parser<number, Uint8Array>;
6
+ export declare const uleb128UnsafeNumberParser: Parser<number, Uint8Array>;
7
+ export declare const sleb128UnsafeNumberParser: Parser<number, Uint8Array>;
@@ -0,0 +1,82 @@
1
+ export const uleb128Parser = async (parserContext) => {
2
+ let leastSignificantValueBitIndex = 0n;
3
+ let value = 0n;
4
+ while (true) {
5
+ const byte = await parserContext.read(0);
6
+ const byteValue = BigInt(byte & 0b0111_1111);
7
+ const byteNotLast = BigInt(byte & 0b1000_0000);
8
+ value |= byteValue << leastSignificantValueBitIndex;
9
+ if (byteNotLast) {
10
+ leastSignificantValueBitIndex += 7n;
11
+ continue;
12
+ }
13
+ break;
14
+ }
15
+ return value;
16
+ };
17
+ export const sleb128Parser = async (parserContext) => {
18
+ let value = 0n;
19
+ let leastSignificantValueBitIndex = 0n;
20
+ while (true) {
21
+ const byte = await parserContext.read(0);
22
+ const byteValue = BigInt(byte & 0b0111_1111);
23
+ const byteNotLast = BigInt(byte & 0b1000_0000);
24
+ value |= byteValue << leastSignificantValueBitIndex;
25
+ leastSignificantValueBitIndex += 7n;
26
+ if (byteNotLast) {
27
+ continue;
28
+ }
29
+ const mostSignificantInputBit = byte & 0b0100_0000;
30
+ if (mostSignificantInputBit) {
31
+ value |= (~0n << leastSignificantValueBitIndex);
32
+ }
33
+ break;
34
+ }
35
+ return value;
36
+ };
37
+ export const uleb128NumberParser = async (parserContext) => {
38
+ const value = await uleb128Parser(parserContext);
39
+ parserContext.invariant(Number(value) <= Number.MAX_SAFE_INTEGER, 'Value is too large to be represented as a number: %s', value);
40
+ return Number(value);
41
+ };
42
+ export const sleb128NumberParser = async (parserContext) => {
43
+ const value = await sleb128Parser(parserContext);
44
+ parserContext.invariant(Number(value) >= Number.MIN_SAFE_INTEGER && Number(value) <= Number.MAX_SAFE_INTEGER, 'Value is too large to be represented as a number: %s', value);
45
+ return Number(value);
46
+ };
47
+ export const uleb128UnsafeNumberParser = async (parserContext) => {
48
+ let leastSignificantValueBitIndex = 0;
49
+ let value = 0;
50
+ while (true) {
51
+ const byte = await parserContext.read(0);
52
+ const byteValue = byte & 0b0111_1111;
53
+ const byteNotLast = byte & 0b1000_0000;
54
+ value |= byteValue << leastSignificantValueBitIndex;
55
+ if (byteNotLast) {
56
+ leastSignificantValueBitIndex += 7;
57
+ continue;
58
+ }
59
+ break;
60
+ }
61
+ return value;
62
+ };
63
+ export const sleb128UnsafeNumberParser = async (parserContext) => {
64
+ let value = 0;
65
+ let leastSignificantValueBitIndex = 0;
66
+ while (true) {
67
+ const byte = await parserContext.read(0);
68
+ const byteValue = byte & 0b0111_1111;
69
+ const byteNotLast = byte & 0b1000_0000;
70
+ value |= byteValue << leastSignificantValueBitIndex;
71
+ leastSignificantValueBitIndex += 7;
72
+ if (byteNotLast) {
73
+ continue;
74
+ }
75
+ const mostSignificantInputBit = byte & 0b0100_0000;
76
+ if (leastSignificantValueBitIndex < 32 && mostSignificantInputBit) {
77
+ value |= (~0 << leastSignificantValueBitIndex);
78
+ }
79
+ break;
80
+ }
81
+ return value;
82
+ };
@@ -0,0 +1 @@
1
+ export {};