@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.
- package/.github/copilot-instructions.md +149 -0
- package/.github/workflows/copilot-setup-steps.yml +18 -0
- package/.github/workflows/main.yml +29 -8
- package/.yarn/releases/yarn-4.9.4.cjs +942 -0
- package/.yarnrc.yml +1 -1
- package/build/allSettledStream.js +32 -14
- package/build/allSettledStream.test.js +32 -0
- package/build/androidPackage.d.ts +39 -0
- package/build/androidPackageParser.d.ts +17 -0
- package/build/androidPackageParser.js +185 -0
- package/build/androidPackageParser.test.js +22 -0
- package/build/androidPackageUnparser.d.ts +4 -0
- package/build/androidPackageUnparser.js +94 -0
- package/build/androidPackageUnparser.test.js +26 -0
- package/build/arbitrarilySlicedAsyncInterable.d.ts +3 -1
- package/build/arbitrarilySlicedAsyncInterable.js +3 -3
- package/build/arbitrarilySlicedAsyncInterator.js +2 -1
- package/build/arbitraryDalvikBytecode.d.ts +4 -0
- package/build/arbitraryDalvikBytecode.js +640 -0
- package/build/arbitraryDalvikExecutable.d.ts +3 -0
- package/build/arbitraryDalvikExecutable.js +282 -0
- package/build/arbitraryDosDateTime.js +1 -0
- package/build/arbitraryZipStream.js +1 -1
- package/build/arrayParser.js +2 -2
- package/build/arrayParser.test.js +3 -3
- package/build/arrayUnparser.d.ts +1 -1
- package/build/backsmali.d.ts +3 -0
- package/build/backsmali.js +50 -0
- package/build/bsonParser.js +6 -2
- package/build/customInvariant.d.ts +2 -1
- package/build/customInvariant.js +4 -6
- package/build/dalvikBytecodeParser/formatParsers.d.ts +171 -0
- package/build/dalvikBytecodeParser/formatParsers.js +304 -0
- package/build/dalvikBytecodeParser/formatSizes.d.ts +34 -0
- package/build/dalvikBytecodeParser/formatSizes.js +34 -0
- package/build/dalvikBytecodeParser/operationFormats.d.ts +225 -0
- package/build/dalvikBytecodeParser/operationFormats.js +225 -0
- package/build/dalvikBytecodeParser.d.ts +1207 -0
- package/build/dalvikBytecodeParser.js +1289 -0
- package/build/dalvikBytecodeUnparser/formatUnparsers.d.ts +152 -0
- package/build/dalvikBytecodeUnparser/formatUnparsers.js +225 -0
- package/build/dalvikBytecodeUnparser.d.ts +3 -0
- package/build/dalvikBytecodeUnparser.js +642 -0
- package/build/dalvikBytecodeUnparser.test.js +25 -0
- package/build/dalvikExecutable.d.ts +215 -0
- package/build/dalvikExecutable.js +56 -0
- package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +4 -0
- package/build/dalvikExecutableParser/stringSyntaxParser.js +76 -0
- package/build/dalvikExecutableParser/typeParsers.d.ts +11 -0
- package/build/dalvikExecutableParser/typeParsers.js +39 -0
- package/build/dalvikExecutableParser/typedNumbers.d.ts +106 -0
- package/build/dalvikExecutableParser/typedNumbers.js +18 -0
- package/build/dalvikExecutableParser.d.ts +5 -0
- package/build/dalvikExecutableParser.js +1757 -0
- package/build/dalvikExecutableParser.test.js +72 -0
- package/build/dalvikExecutableParserAgainstSmaliParser.test.js +275 -0
- package/build/dalvikExecutableUnparser/annotationUnparsers.d.ts +14 -0
- package/build/dalvikExecutableUnparser/annotationUnparsers.js +97 -0
- package/build/dalvikExecutableUnparser/poolBuilders.d.ts +49 -0
- package/build/dalvikExecutableUnparser/poolBuilders.js +140 -0
- package/build/dalvikExecutableUnparser/poolScanners.d.ts +4 -0
- package/build/dalvikExecutableUnparser/poolScanners.js +220 -0
- package/build/dalvikExecutableUnparser/sectionUnparsers.d.ts +25 -0
- package/build/dalvikExecutableUnparser/sectionUnparsers.js +581 -0
- package/build/dalvikExecutableUnparser/utils.d.ts +10 -0
- package/build/dalvikExecutableUnparser/utils.js +108 -0
- package/build/dalvikExecutableUnparser.d.ts +4 -0
- package/build/dalvikExecutableUnparser.js +406 -0
- package/build/dalvikExecutableUnparser.test.js +31 -0
- package/build/debugLogInputParser.d.ts +4 -0
- package/build/debugLogInputParser.js +16 -0
- package/build/debugLogParser.js +14 -3
- package/build/disjunctionParser.d.ts +2 -1
- package/build/disjunctionParser.js +6 -4
- package/build/elementTerminatedArrayParser.d.ts +3 -0
- package/build/elementTerminatedArrayParser.js +18 -0
- package/build/elementTerminatedArrayParser.test.js +52 -0
- package/build/elementTerminatedSequenceArrayParser.d.ts +3 -0
- package/build/elementTerminatedSequenceArrayParser.js +32 -0
- package/build/elementTerminatedSequenceArrayParser.test.js +34 -0
- package/build/elementTerminatedSequenceParser.d.ts +3 -0
- package/build/elementTerminatedSequenceParser.js +27 -0
- package/build/elementTerminatedSequenceParser.test.js +34 -0
- package/build/endOfInputParser.d.ts +1 -1
- package/build/exactElementParser.js +10 -5
- package/build/exactElementSwitchParser.d.ts +3 -0
- package/build/exactElementSwitchParser.js +22 -0
- package/build/exactSequenceParser.d.ts +2 -1
- package/build/exactSequenceParser.js +12 -2
- package/build/fetchCid.d.ts +1 -0
- package/build/fetchCid.js +103 -0
- package/build/fetchCid.test.js +16 -0
- package/build/fixedLengthSequenceParser.d.ts +1 -0
- package/build/fixedLengthSequenceParser.js +18 -1
- package/build/fixedLengthSequenceParser.test.js +41 -0
- package/build/hasExecutable.d.ts +1 -0
- package/build/hasExecutable.js +8 -0
- package/build/highResolutionTimer.d.ts +16 -0
- package/build/highResolutionTimer.js +42 -0
- package/build/inputReader.d.ts +11 -0
- package/build/inputReader.js +37 -0
- package/build/inputReader.test.js +161 -8
- package/build/inputReaderState.d.ts +10 -0
- package/build/inputReaderState.js +16 -0
- package/build/inspect.d.ts +1 -0
- package/build/inspect.js +7 -0
- package/build/javaKeyStoreParser.test.js +8 -8
- package/build/jsonParser.d.ts +2 -0
- package/build/jsonParser.js +19 -22
- package/build/lazyMessageError.d.ts +48 -0
- package/build/lazyMessageError.js +53 -0
- package/build/lazyMessageError.test.d.ts +1 -0
- package/build/lazyMessageError.test.js +15 -0
- package/build/leb128Parser.d.ts +7 -0
- package/build/leb128Parser.js +82 -0
- package/build/leb128Parser.test.d.ts +1 -0
- package/build/leb128Parser.test.js +107 -0
- package/build/lookaheadParser.d.ts +2 -0
- package/build/lookaheadParser.js +14 -0
- package/build/negativeLookaheadParser.js +22 -16
- package/build/negativeLookaheadParser.test.d.ts +1 -0
- package/build/negativeLookaheadParser.test.js +30 -0
- package/build/noStackCaptureOverheadError.d.ts +4 -0
- package/build/noStackCaptureOverheadError.js +9 -0
- package/build/noStackCaptureOverheadError.test.d.ts +1 -0
- package/build/noStackCaptureOverheadError.test.js +15 -0
- package/build/nonEmptyArrayParser.d.ts +2 -0
- package/build/nonEmptyArrayParser.js +32 -0
- package/build/nonEmptyArrayParser.test.d.ts +1 -0
- package/build/nonEmptyArrayParser.test.js +17 -0
- package/build/optionalParser.js +2 -2
- package/build/parser.d.ts +11 -1
- package/build/parser.js +82 -32
- package/build/parser.test.js +141 -25
- package/build/parserAccessorParser.js +9 -1
- package/build/parserConsumedSequenceParser.d.ts +1 -1
- package/build/parserConsumedSequenceParser.js +21 -16
- package/build/parserContext.d.ts +22 -6
- package/build/parserContext.js +113 -57
- package/build/parserContext.test.js +33 -2
- package/build/parserCreatorCompose.d.ts +1 -0
- package/build/parserCreatorCompose.js +8 -2
- package/build/parserError.d.ts +605 -40
- package/build/parserError.js +98 -53
- package/build/parserImplementationInvariant.d.ts +1 -1
- package/build/parserImplementationInvariant.js +2 -2
- package/build/parserInputCompanion.d.ts +15 -0
- package/build/parserInputCompanion.js +38 -0
- package/build/promiseCompose.d.ts +1 -1
- package/build/promiseCompose.js +11 -1
- package/build/promiseSettled.d.ts +1 -0
- package/build/promiseSettled.js +4 -0
- package/build/separatedArrayParser.d.ts +2 -0
- package/build/separatedArrayParser.js +39 -0
- package/build/separatedArrayParser.test.d.ts +1 -0
- package/build/separatedArrayParser.test.js +21 -0
- package/build/separatedNonEmptyArrayParser.d.ts +2 -0
- package/build/separatedNonEmptyArrayParser.js +40 -0
- package/build/separatedNonEmptyArrayParser.test.d.ts +1 -0
- package/build/separatedNonEmptyArrayParser.test.js +66 -0
- package/build/sequenceBuffer.d.ts +10 -0
- package/build/sequenceBuffer.js +54 -2
- package/build/sequenceBuffer.test.js +57 -0
- package/build/sequenceTerminatedSequenceParser.d.ts +5 -0
- package/build/sequenceTerminatedSequenceParser.js +32 -0
- package/build/sequenceTerminatedSequenceParser.test.d.ts +1 -0
- package/build/sequenceTerminatedSequenceParser.test.js +37 -0
- package/build/sequenceUnparser.d.ts +1 -1
- package/build/skipParser.d.ts +1 -1
- package/build/skipParser.js +4 -2
- package/build/skipToParser.d.ts +2 -0
- package/build/skipToParser.js +11 -0
- package/build/sliceBoundedParser.d.ts +1 -1
- package/build/sliceBoundedParser.js +7 -2
- package/build/sliceBoundedParser.test.js +30 -1
- package/build/smali.d.ts +1 -0
- package/build/smali.js +21 -0
- package/build/smaliParser.d.ts +68 -0
- package/build/smaliParser.js +2081 -0
- package/build/smaliParser.test.d.ts +1 -0
- package/build/smaliParser.test.js +410 -0
- package/build/stringFromAsyncIterable.d.ts +1 -0
- package/build/stringFromAsyncIterable.js +7 -0
- package/build/terminatedArrayParser.d.ts +3 -1
- package/build/terminatedArrayParser.js +79 -2
- package/build/terminatedArrayParser.test.d.ts +1 -0
- package/build/terminatedArrayParser.test.js +131 -0
- package/build/toAsyncIterable.d.ts +1 -0
- package/build/toAsyncIterable.js +7 -0
- package/build/toAsyncIterator.d.ts +1 -0
- package/build/toAsyncIterator.js +33 -0
- package/build/tupleParser.d.ts +4 -0
- package/build/tupleParser.js +1 -5
- package/build/unionParser.d.ts +2 -1
- package/build/unionParser.js +29 -14
- package/build/unionParser.test.d.ts +1 -0
- package/build/unionParser.test.js +60 -0
- package/build/unparser.d.ts +3 -3
- package/build/unparser.js +6 -4
- package/build/unparser.test.js +7 -19
- package/build/unparserContext.d.ts +2 -2
- package/build/unparserContext.js +2 -3
- package/build/unparserError.d.ts +2 -1
- package/build/unparserError.js +2 -1
- package/build/unparserImplementationInvariant.d.ts +1 -1
- package/build/unparserOutputCompanion.d.ts +1 -1
- package/build/unparserOutputCompanion.js +1 -1
- package/build/zipParser.d.ts +7 -2
- package/build/zipParser.js +36 -12
- package/build/zipUnparser.d.ts +7 -4
- package/build/zipUnparser.js +64 -45
- package/build/zipUnparser.test.js +15 -15
- package/package.json +33 -24
- package/src/allSettledStream.test.ts +40 -0
- package/src/allSettledStream.ts +47 -15
- package/src/androidPackage.ts +48 -0
- package/src/androidPackageParser.test.ts +27 -0
- package/src/{apkParser.test.ts.md → androidPackageParser.test.ts.md} +4 -4
- package/src/androidPackageParser.test.ts.snap +0 -0
- package/src/androidPackageParser.ts +398 -0
- package/src/androidPackageUnparser.test.ts +34 -0
- package/src/androidPackageUnparser.ts +126 -0
- package/src/arbitrarilySlicedAsyncInterable.ts +7 -2
- package/src/arbitrarilySlicedAsyncInterator.ts +4 -4
- package/src/arbitraryDalvikBytecode.ts +992 -0
- package/src/arbitraryDalvikExecutable.ts +434 -0
- package/src/arbitraryDosDateTime.ts +1 -0
- package/src/arbitraryZipStream.ts +1 -1
- package/src/arrayParser.test.ts +3 -3
- package/src/arrayParser.ts +2 -2
- package/src/arrayUnparser.ts +2 -2
- package/src/backsmali.ts +74 -0
- package/src/bsonParser.test.ts +12 -14
- package/src/bsonParser.ts +13 -2
- package/src/customInvariant.ts +8 -12
- package/src/dalvikBytecodeParser/formatParsers.ts +780 -0
- package/src/dalvikBytecodeParser/formatSizes.ts +35 -0
- package/src/dalvikBytecodeParser/operationFormats.ts +226 -0
- package/src/dalvikBytecodeParser.ts +2873 -0
- package/src/dalvikBytecodeUnparser/formatUnparsers.ts +442 -0
- package/src/dalvikBytecodeUnparser.test.ts +44 -0
- package/src/dalvikBytecodeUnparser.ts +758 -0
- package/src/dalvikExecutable.ts +282 -0
- package/src/dalvikExecutableParser/stringSyntaxParser.ts +145 -0
- package/src/dalvikExecutableParser/typeParsers.ts +74 -0
- package/src/dalvikExecutableParser/typedNumbers.ts +57 -0
- package/src/dalvikExecutableParser.test.ts +89 -0
- package/src/dalvikExecutableParser.test.ts.md +634 -0
- package/src/dalvikExecutableParser.test.ts.snap +0 -0
- package/src/dalvikExecutableParser.ts +3245 -0
- package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +363 -0
- package/src/dalvikExecutableUnparser/annotationUnparsers.ts +135 -0
- package/src/dalvikExecutableUnparser/poolBuilders.ts +189 -0
- package/src/dalvikExecutableUnparser/poolScanners.ts +297 -0
- package/src/dalvikExecutableUnparser/sectionUnparsers.ts +683 -0
- package/src/dalvikExecutableUnparser/utils.ts +149 -0
- package/src/dalvikExecutableUnparser.test.ts +57 -0
- package/src/dalvikExecutableUnparser.ts +581 -0
- package/src/debugLogInputParser.ts +28 -0
- package/src/debugLogParser.ts +19 -3
- package/src/disjunctionParser.ts +12 -7
- package/src/elementTerminatedArrayParser.test.ts +99 -0
- package/src/elementTerminatedArrayParser.ts +31 -0
- package/src/elementTerminatedSequenceArrayParser.test.ts +52 -0
- package/src/elementTerminatedSequenceArrayParser.ts +52 -0
- package/src/elementTerminatedSequenceParser.test.ts +52 -0
- package/src/elementTerminatedSequenceParser.ts +43 -0
- package/src/endOfInputParser.ts +1 -1
- package/src/exactElementParser.ts +17 -11
- package/src/exactElementSwitchParser.ts +41 -0
- package/src/exactSequenceParser.ts +23 -2
- package/src/fetchCid.test.ts +20 -0
- package/src/fetchCid.ts +121 -0
- package/src/fixedLengthSequenceParser.test.ts +75 -0
- package/src/fixedLengthSequenceParser.ts +28 -1
- package/src/hasExecutable.ts +11 -0
- package/src/highResolutionTimer.ts +49 -0
- package/src/inputReader.test.ts +204 -8
- package/src/inputReader.ts +76 -3
- package/src/inputReaderState.ts +33 -0
- package/src/inspect.ts +9 -0
- package/src/javaKeyStoreParser.test.ts +12 -15
- package/src/javaKeyStoreParser.ts +2 -6
- package/src/jsonParser.test.ts +2 -4
- package/src/jsonParser.ts +46 -62
- package/src/lazyMessageError.test.ts +21 -0
- package/src/lazyMessageError.ts +88 -0
- package/src/leb128Parser.test.ts +173 -0
- package/src/leb128Parser.ts +125 -0
- package/src/lookaheadParser.ts +19 -0
- package/src/negativeLookaheadParser.test.ts +49 -0
- package/src/negativeLookaheadParser.ts +27 -15
- package/src/noStackCaptureOverheadError.test.ts +17 -0
- package/src/noStackCaptureOverheadError.ts +12 -0
- package/src/nonEmptyArrayParser.test.ts +21 -0
- package/src/nonEmptyArrayParser.ts +44 -0
- package/src/optionalParser.ts +3 -2
- package/src/parser.test.ts +203 -31
- package/src/parser.test.ts.md +34 -27
- package/src/parser.test.ts.snap +0 -0
- package/src/parser.ts +172 -45
- package/src/parserAccessorParser.ts +12 -2
- package/src/parserConsumedSequenceParser.ts +26 -17
- package/src/parserContext.test.ts +37 -2
- package/src/parserContext.ts +185 -79
- package/src/parserCreatorCompose.ts +20 -2
- package/src/parserError.ts +144 -61
- package/src/parserImplementationInvariant.ts +3 -3
- package/src/parserInputCompanion.ts +55 -0
- package/src/promiseCompose.ts +17 -3
- package/src/promiseSettled.ts +6 -0
- package/src/separatedArrayParser.test.ts +34 -0
- package/src/separatedArrayParser.ts +55 -0
- package/src/separatedNonEmptyArrayParser.test.ts +117 -0
- package/src/separatedNonEmptyArrayParser.ts +61 -0
- package/src/sequenceBuffer.test.ts +70 -0
- package/src/sequenceBuffer.ts +88 -2
- package/src/sequenceTerminatedSequenceParser.test.ts +58 -0
- package/src/sequenceTerminatedSequenceParser.ts +62 -0
- package/src/sequenceUnparser.ts +2 -2
- package/src/skipParser.ts +7 -5
- package/src/skipToParser.ts +16 -0
- package/src/sliceBoundedParser.test.ts +35 -1
- package/src/sliceBoundedParser.ts +19 -1
- package/src/smali.ts +29 -0
- package/src/smaliParser.test.ts +443 -0
- package/src/smaliParser.test.ts.md +3907 -0
- package/src/smaliParser.test.ts.snap +0 -0
- package/src/smaliParser.ts +3348 -0
- package/src/stringFromAsyncIterable.ts +9 -0
- package/src/terminatedArrayParser.test.ts +258 -0
- package/src/terminatedArrayParser.ts +109 -6
- package/src/toAsyncIterable.ts +7 -0
- package/src/toAsyncIterator.ts +48 -0
- package/src/tupleParser.ts +8 -5
- package/src/uint8Array.ts +2 -3
- package/src/unionParser.test.ts +78 -0
- package/src/unionParser.ts +47 -21
- package/src/unparser.test.ts +18 -34
- package/src/unparser.ts +13 -9
- package/src/unparserContext.ts +9 -13
- package/src/unparserError.ts +2 -1
- package/src/unparserImplementationInvariant.ts +1 -1
- package/src/unparserOutputCompanion.ts +1 -1
- package/src/zip.ts +2 -6
- package/src/zipParser.ts +71 -20
- package/src/zipUnparser.test.ts +19 -19
- package/src/zipUnparser.ts +139 -90
- package/tsconfig.json +7 -1
- package/xo.config.ts +15 -0
- package/.yarn/releases/yarn-4.5.3.cjs +0 -934
- package/build/apk.d.ts +0 -39
- package/build/apkParser.d.ts +0 -16
- package/build/apkParser.js +0 -164
- package/build/apkParser.test.js +0 -22
- package/build/apkUnparser.d.ts +0 -4
- package/build/apkUnparser.js +0 -90
- package/build/apkUnparser.test.js +0 -26
- package/build/arbitraryDosDate.d.ts +0 -2
- package/build/arbitraryDosDate.js +0 -8
- package/build/arbitraryZipEntry.d.ts +0 -3
- package/build/arbitraryZipEntry.js +0 -26
- package/build/createDisjunctionParser.d.ts +0 -2
- package/build/createDisjunctionParser.js +0 -47
- package/build/createExactParser.d.ts +0 -2
- package/build/createExactParser.js +0 -12
- package/build/createSequentialUnionParser.d.ts +0 -2
- package/build/createSequentialUnionParser.js +0 -69
- package/build/fixedLengthChunkParser.d.ts +0 -2
- package/build/fixedLengthChunkParser.js +0 -12
- package/build/fixedLengthParser.d.ts +0 -2
- package/build/fixedLengthParser.js +0 -12
- package/build/inputChunkBuffer.d.ts +0 -15
- package/build/inputChunkBuffer.js +0 -40
- package/build/inputChunkBuffer.test.js +0 -34
- package/build/inputCompanion.d.ts +0 -18
- package/build/inputCompanion.js +0 -28
- package/build/invariantDefined.d.ts +0 -1
- package/build/invariantDefined.js +0 -5
- package/build/invariantIdentity.d.ts +0 -3
- package/build/invariantIdentity.js +0 -5
- package/build/javaKeystoreParser.d.ts +0 -2
- package/build/javaKeystoreParser.js +0 -7
- package/build/jsonParser2.d.ts +0 -3
- package/build/jsonParser2.js +0 -52
- package/build/jsonParser2.test.js +0 -22
- package/build/negativeLookahead.d.ts +0 -2
- package/build/negativeLookahead.js +0 -18
- package/build/parserCompose.d.ts +0 -3
- package/build/parserCompose.js +0 -7
- package/build/parserImplementationInvariantInvariant.d.ts +0 -3
- package/build/parserImplementationInvariantInvariant.js +0 -15
- package/build/parserInvariant.d.ts +0 -4
- package/build/parserInvariant.js +0 -11
- package/build/promiseFish.d.ts +0 -1
- package/build/promiseFish.js +0 -3
- package/build/sequenceParser.d.ts +0 -3
- package/build/sequenceParser.js +0 -10
- package/build/terminatedSequenceParser.d.ts +0 -2
- package/build/terminatedSequenceParser.js +0 -24
- package/build/unparserInputCompanion.d.ts +0 -15
- package/build/unparserInputCompanion.js +0 -13
- package/build/zipEntry.d.ts +0 -28
- package/build/zipFile.d.ts +0 -32
- package/build/zipFileEntry.d.ts +0 -6
- package/src/apk.ts +0 -48
- package/src/apkParser.test.ts +0 -30
- package/src/apkParser.test.ts.snap +0 -0
- package/src/apkParser.ts +0 -392
- package/src/apkUnparser.test.ts +0 -37
- package/src/apkUnparser.ts +0 -120
- package/src/invariantDefined.ts +0 -6
- package/src/invariantIdentity.ts +0 -8
- /package/build/{apk.js → androidPackage.js} +0 -0
- /package/build/{apkParser.test.d.ts → androidPackageParser.test.d.ts} +0 -0
- /package/build/{apkUnparser.test.d.ts → androidPackageUnparser.test.d.ts} +0 -0
- /package/build/{arbitraryDosPermissions.d.ts → dalvikBytecodeUnparser.test.d.ts} +0 -0
- /package/build/{arbitraryDosPermissions.js → dalvikExecutableParser.test.d.ts} +0 -0
- /package/build/{inputChunkBuffer.test.d.ts → dalvikExecutableParserAgainstSmaliParser.test.d.ts} +0 -0
- /package/build/{jsonParser2.test.d.ts → dalvikExecutableUnparser.test.d.ts} +0 -0
- /package/build/{parserParsingInvariant.d.ts → elementTerminatedArrayParser.test.d.ts} +0 -0
- /package/build/{parserParsingInvariant.js → elementTerminatedSequenceArrayParser.test.d.ts} +0 -0
- /package/build/{zipEntry.js → elementTerminatedSequenceParser.test.d.ts} +0 -0
- /package/build/{zipFile.js → fetchCid.test.d.ts} +0 -0
- /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 {
|
|
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
|
-
|
|
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
|
-
|
|
117
|
-
|
|
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;
|
package/build/inspect.js
ADDED
|
@@ -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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
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');
|
package/build/jsonParser.d.ts
CHANGED
|
@@ -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>;
|
package/build/jsonParser.js
CHANGED
|
@@ -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(
|
|
23
|
-
const jsonFormFeedEscapeSequenceParser = promiseCompose(createExactSequenceParser(
|
|
24
|
-
const jsonNewLineEscapeSequenceParser = promiseCompose(createExactSequenceParser(
|
|
25
|
-
const jsonCarriageReturnEscapeSequenceParser = promiseCompose(createExactSequenceParser(
|
|
26
|
-
const jsonTabEscapeSequenceParser = promiseCompose(createExactSequenceParser(
|
|
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(
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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 {};
|