@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
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
|
|
2
|
+
class NoStackCaptureOverheadErrorClass extends Error {}
|
|
3
|
+
|
|
4
|
+
function NoStackCaptureOverheadErrorConstructor(this: Error, message: string) {
|
|
5
|
+
this.name = 'NoStackCaptureOverheadError';
|
|
6
|
+
this.message = message;
|
|
7
|
+
this.stack = 'This stack is intentionally left blank to avoid capture overhead.';
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
NoStackCaptureOverheadErrorConstructor.prototype = Object.create(Error.prototype);
|
|
11
|
+
|
|
12
|
+
export const NoStackCaptureOverheadError = NoStackCaptureOverheadErrorConstructor as unknown as typeof NoStackCaptureOverheadErrorClass
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import test from 'ava';
|
|
2
|
+
import { createNonEmptyArrayParser } from './nonEmptyArrayParser.js';
|
|
3
|
+
import { type Parser, runParser } from './parser.js';
|
|
4
|
+
import { stringParserInputCompanion } from './parserInputCompanion.js';
|
|
5
|
+
import { createExactElementParser } from './exactElementParser.js';
|
|
6
|
+
|
|
7
|
+
test('empty array does not match', async t => {
|
|
8
|
+
const parser: Parser<string[], string> = createNonEmptyArrayParser(createExactElementParser('0'));
|
|
9
|
+
|
|
10
|
+
await t.throwsAsync(async () => runParser(parser, '', stringParserInputCompanion), {
|
|
11
|
+
any: true,
|
|
12
|
+
message: /Expected .* to match at least once/,
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test('non-empty array matches', async t => {
|
|
17
|
+
const parser: Parser<string[], string> = createNonEmptyArrayParser(createExactElementParser('0'));
|
|
18
|
+
const result = await runParser(parser, '0', stringParserInputCompanion);
|
|
19
|
+
|
|
20
|
+
t.deepEqual(result, [ '0' ]);
|
|
21
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { getParserName, type Parser, setParserName } from './parser.js';
|
|
2
|
+
import { isParserParsingFailedError, ParserParsingFailedError } from './parserError.js';
|
|
3
|
+
|
|
4
|
+
export const createNonEmptyArrayParser = <ElementOutput, Sequence>(
|
|
5
|
+
elementParser: Parser<ElementOutput, Sequence>,
|
|
6
|
+
): Parser<ElementOutput[], Sequence> => {
|
|
7
|
+
const nonEmptyArrayParser: Parser<ElementOutput[], Sequence> = async parserContext => {
|
|
8
|
+
const elements: ElementOutput[] = [];
|
|
9
|
+
|
|
10
|
+
while (true) {
|
|
11
|
+
const elementParserContext = parserContext.lookahead();
|
|
12
|
+
const initialPosition = elementParserContext.position;
|
|
13
|
+
try {
|
|
14
|
+
const element = await elementParser(elementParserContext);
|
|
15
|
+
if (elementParserContext.position === initialPosition) {
|
|
16
|
+
break;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
elements.push(element);
|
|
20
|
+
elementParserContext.unlookahead();
|
|
21
|
+
} catch (error) {
|
|
22
|
+
if (isParserParsingFailedError(error)) {
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
throw error;
|
|
27
|
+
} finally {
|
|
28
|
+
elementParserContext.dispose();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
parserContext.invariant(
|
|
33
|
+
elements.length > 0,
|
|
34
|
+
'Expected elementParser (%s) to match at least once',
|
|
35
|
+
getParserName(elementParser, 'anonymousNonEmptyArrayChild'),
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
return elements;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
setParserName(nonEmptyArrayParser, getParserName(elementParser, 'anonymousNonEmptyArrayChild') + '+');
|
|
42
|
+
|
|
43
|
+
return nonEmptyArrayParser;
|
|
44
|
+
};
|
package/src/optionalParser.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { getParserName, type Parser, setParserName } from './parser.js';
|
|
2
|
-
import { ParserParsingFailedError } from './parserError.js';
|
|
2
|
+
import { isParserParsingFailedError, ParserParsingFailedError } from './parserError.js';
|
|
3
3
|
|
|
4
4
|
export const createOptionalParser = <Output, Sequence>(
|
|
5
5
|
childParser: Parser<Output, Sequence>,
|
|
6
6
|
): Parser<undefined | Output, Sequence> => {
|
|
7
7
|
const optionalParser: Parser<undefined | Output, Sequence> = async parserContext => {
|
|
8
8
|
const childParserContext = parserContext.lookahead();
|
|
9
|
+
|
|
9
10
|
try {
|
|
10
11
|
const value = await childParser(childParserContext);
|
|
11
12
|
childParserContext.unlookahead();
|
|
12
13
|
return value;
|
|
13
14
|
} catch (error) {
|
|
14
|
-
if (error
|
|
15
|
+
if (isParserParsingFailedError(error)) {
|
|
15
16
|
return undefined;
|
|
16
17
|
}
|
|
17
18
|
|
package/src/parser.test.ts
CHANGED
|
@@ -1,36 +1,41 @@
|
|
|
1
1
|
import test from 'ava';
|
|
2
2
|
import invariant from 'invariant';
|
|
3
3
|
import { createUnionParser } from './unionParser.js';
|
|
4
|
-
import { type Parser, runParser } from './parser.js';
|
|
4
|
+
import { type Parser, runParser, runParserWithRemainingInput } from './parser.js';
|
|
5
5
|
import { stringParserInputCompanion, uint8ArrayParserInputCompanion } from './parserInputCompanion.js';
|
|
6
6
|
import {
|
|
7
|
-
|
|
7
|
+
isParserParsingJoinError,
|
|
8
|
+
normalParserErrorModule,
|
|
9
|
+
ParserError,
|
|
10
|
+
ParserParsingJoinError,
|
|
8
11
|
} from './parserError.js';
|
|
9
12
|
import { createTupleParser } from './tupleParser.js';
|
|
10
13
|
import { promiseCompose } from './promiseCompose.js';
|
|
11
14
|
import { createDisjunctionParser } from './disjunctionParser.js';
|
|
12
|
-
import {
|
|
15
|
+
import { createExactSequenceNaiveParser } from './exactSequenceParser.js';
|
|
13
16
|
import { createArrayParser } from './arrayParser.js';
|
|
14
17
|
import { createElementParser } from './elementParser.js';
|
|
18
|
+
import { toAsyncIterable } from './toAsyncIterable.js';
|
|
19
|
+
import { stringFromAsyncIterable } from './stringFromAsyncIterable.js';
|
|
15
20
|
|
|
16
21
|
const aUnionParser = createUnionParser<string, string>([
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
createExactSequenceNaiveParser('1'),
|
|
23
|
+
createExactSequenceNaiveParser('aa'),
|
|
24
|
+
createExactSequenceNaiveParser('AAA'),
|
|
20
25
|
]);
|
|
21
26
|
|
|
22
27
|
const abDisjunctionParser = createDisjunctionParser<string, string>([
|
|
23
28
|
aUnionParser,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
createExactSequenceNaiveParser('2'),
|
|
30
|
+
createExactSequenceNaiveParser('bb'),
|
|
31
|
+
createExactSequenceNaiveParser('BBB'),
|
|
27
32
|
]);
|
|
28
33
|
|
|
29
34
|
const abcUnionParser = createUnionParser<string, string>([
|
|
30
35
|
abDisjunctionParser,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
createExactSequenceNaiveParser('final_3'),
|
|
37
|
+
createExactSequenceNaiveParser('final_cc'),
|
|
38
|
+
createExactSequenceNaiveParser('final_CCC'),
|
|
34
39
|
]);
|
|
35
40
|
|
|
36
41
|
const sampleParser = promiseCompose(
|
|
@@ -46,64 +51,66 @@ async function * asyncIteratorFromString(string: string) {
|
|
|
46
51
|
yield string;
|
|
47
52
|
}
|
|
48
53
|
|
|
49
|
-
function sortChildErrors(error:
|
|
54
|
+
function sortChildErrors(error: ParserParsingJoinError) {
|
|
50
55
|
error.childErrors.sort((a, b) => a.message.localeCompare(b.message));
|
|
51
56
|
|
|
52
57
|
for (const childError of error.childErrors) {
|
|
53
|
-
if (childError
|
|
58
|
+
if (isParserParsingJoinError(childError)) {
|
|
54
59
|
sortChildErrors(childError);
|
|
55
60
|
}
|
|
56
61
|
}
|
|
57
62
|
}
|
|
58
63
|
|
|
59
|
-
function removeStackLocations(errorStack: string) {
|
|
60
|
-
return errorStack
|
|
64
|
+
function removeStackLocations(errorStack: string | undefined) {
|
|
65
|
+
return errorStack?.replaceAll(/((at [^\n]+)[\s\n]+)+(at [^\n]+)/g, 'at [LOCATIONS]');
|
|
61
66
|
}
|
|
62
67
|
|
|
63
68
|
test('errorJoinMode: none', async t => {
|
|
64
69
|
const error = await t.throwsAsync(runParser(sampleParser, asyncIteratorFromString('1bbfinal_CC!'), stringParserInputCompanion, {
|
|
65
70
|
errorJoinMode: 'none',
|
|
71
|
+
errorStack: true,
|
|
66
72
|
}), {
|
|
67
|
-
instanceOf: ParserParsingJoinNoneError,
|
|
73
|
+
instanceOf: normalParserErrorModule.ParserParsingJoinNoneError,
|
|
68
74
|
});
|
|
69
75
|
|
|
70
76
|
t.is(error.position, 12);
|
|
71
77
|
t.deepEqual(error.childErrors, []);
|
|
72
78
|
|
|
73
|
-
t.snapshot(removeStackLocations(error.stack
|
|
79
|
+
t.snapshot(removeStackLocations(error.stack));
|
|
74
80
|
});
|
|
75
81
|
|
|
76
82
|
test('errorJoinMode: all', async t => {
|
|
77
83
|
const error = await t.throwsAsync(runParser(sampleParser, asyncIteratorFromString('1bbfinal_CC!'), stringParserInputCompanion, {
|
|
78
84
|
errorJoinMode: 'all',
|
|
85
|
+
errorStack: true,
|
|
79
86
|
}), {
|
|
80
|
-
instanceOf: ParserParsingJoinAllError,
|
|
87
|
+
instanceOf: normalParserErrorModule.ParserParsingJoinAllError,
|
|
81
88
|
});
|
|
82
89
|
|
|
83
90
|
sortChildErrors(error);
|
|
84
91
|
|
|
85
|
-
t.snapshot(removeStackLocations(error.stack
|
|
92
|
+
t.snapshot(removeStackLocations(error.stack));
|
|
86
93
|
|
|
87
94
|
t.is(error.position, 12, 'error.position');
|
|
88
95
|
t.is(error.childErrors.length, 4);
|
|
89
96
|
|
|
90
97
|
const error1 = error.childErrors.at(-1)!;
|
|
91
98
|
|
|
92
|
-
invariant(error1
|
|
99
|
+
invariant(isParserParsingJoinError(error1), 'error1 instanceof ParserParsingJoinAllError');
|
|
93
100
|
|
|
94
101
|
t.is(error1.position, 3, 'error1.position');
|
|
95
102
|
t.is(error1.childErrors.length, 4);
|
|
96
103
|
|
|
97
104
|
const error2 = error1.childErrors.at(-1)!;
|
|
98
105
|
|
|
99
|
-
invariant(error2
|
|
106
|
+
invariant(isParserParsingJoinError(error2), 'error2 instanceof ParserParsingJoinAllError');
|
|
100
107
|
|
|
101
108
|
t.is(error2.position, 4, 'error2.position');
|
|
102
109
|
t.is(error2.childErrors.length, 3);
|
|
103
110
|
|
|
104
111
|
const error3 = error2.childErrors.at(-1)!;
|
|
105
112
|
|
|
106
|
-
invariant(error3
|
|
113
|
+
invariant(error3.name === 'ParserParsingInvariantError', 'error3 instanceof ParserParsingInvariantError');
|
|
107
114
|
|
|
108
115
|
t.is(error3.position, 4, 'error3.position');
|
|
109
116
|
});
|
|
@@ -111,34 +118,35 @@ test('errorJoinMode: all', async t => {
|
|
|
111
118
|
test('errorJoinMode: deepest', async t => {
|
|
112
119
|
const error = await t.throwsAsync(runParser(sampleParser, asyncIteratorFromString('1bbfinal_CC!'), stringParserInputCompanion, {
|
|
113
120
|
errorJoinMode: 'deepest',
|
|
121
|
+
errorStack: true,
|
|
114
122
|
}), {
|
|
115
|
-
instanceOf: ParserParsingJoinDeepestError,
|
|
123
|
+
instanceOf: normalParserErrorModule.ParserParsingJoinDeepestError,
|
|
116
124
|
});
|
|
117
125
|
|
|
118
126
|
sortChildErrors(error);
|
|
119
127
|
|
|
120
|
-
t.snapshot(removeStackLocations(error.stack
|
|
128
|
+
t.snapshot(removeStackLocations(error.stack));
|
|
121
129
|
|
|
122
130
|
t.is(error.position, 12);
|
|
123
131
|
t.is(error.childErrors.length, 1);
|
|
124
132
|
|
|
125
133
|
const error1 = error.childErrors.at(-1)!;
|
|
126
134
|
|
|
127
|
-
invariant(error1
|
|
135
|
+
invariant(isParserParsingJoinError(error1), 'error1 instanceof ParserParsingJoinDeepestError');
|
|
128
136
|
|
|
129
137
|
t.is(error1.position, 3);
|
|
130
138
|
t.is(error1.childErrors.length, 1);
|
|
131
139
|
|
|
132
140
|
const error2 = error1.childErrors.at(-1)!;
|
|
133
141
|
|
|
134
|
-
invariant(error2
|
|
142
|
+
invariant(isParserParsingJoinError(error2), 'error2 instanceof ParserParsingJoinDeepestError');
|
|
135
143
|
|
|
136
144
|
t.is(error2.position, 4);
|
|
137
145
|
t.is(error2.childErrors.length, 3);
|
|
138
146
|
|
|
139
147
|
const error3 = error2.childErrors.at(-1)!;
|
|
140
148
|
|
|
141
|
-
invariant(error3
|
|
149
|
+
invariant(error3.name === 'ParserParsingInvariantError', 'error3 instanceof ParserParsingInvariantError');
|
|
142
150
|
|
|
143
151
|
t.is(error3.position, 4);
|
|
144
152
|
});
|
|
@@ -146,24 +154,83 @@ test('errorJoinMode: deepest', async t => {
|
|
|
146
154
|
test('errorJoinMode: furthest', async t => {
|
|
147
155
|
const error = await t.throwsAsync(runParser(sampleParser, asyncIteratorFromString('1bbfinal_CC!'), stringParserInputCompanion, {
|
|
148
156
|
errorJoinMode: 'furthest',
|
|
157
|
+
errorStack: true,
|
|
149
158
|
}), {
|
|
150
|
-
instanceOf: ParserParsingJoinFurthestError,
|
|
159
|
+
instanceOf: normalParserErrorModule.ParserParsingJoinFurthestError,
|
|
151
160
|
});
|
|
152
161
|
|
|
153
162
|
sortChildErrors(error);
|
|
154
163
|
|
|
155
|
-
t.snapshot(removeStackLocations(error.stack
|
|
164
|
+
t.snapshot(removeStackLocations(error.stack));
|
|
156
165
|
|
|
157
166
|
t.is(error.position, 12);
|
|
158
167
|
t.is(error.childErrors.length, 1);
|
|
159
168
|
|
|
160
169
|
const error1 = error.childErrors.at(-1)!;
|
|
161
170
|
|
|
162
|
-
invariant(error1
|
|
171
|
+
invariant(error1.name === 'ParserParsingInvariantError', 'error1 instanceof ParserParsingInvariantError');
|
|
163
172
|
|
|
164
173
|
t.is(error1.position, 12);
|
|
165
174
|
});
|
|
166
175
|
|
|
176
|
+
test('errorStack: false', async t => {
|
|
177
|
+
const error = await t.throwsAsync(runParser(sampleParser, 'nothing like what sampleParser expects', stringParserInputCompanion, {
|
|
178
|
+
errorJoinMode: 'all',
|
|
179
|
+
}), {
|
|
180
|
+
instanceOf: normalParserErrorModule.ParserParsingJoinAllError,
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
t.regex(error.stack!, /intentionally left blank/);
|
|
184
|
+
t.regex(error.stack!, /errorStack: true/);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
test('errorStack: true', async t => {
|
|
188
|
+
const error = await t.throwsAsync(runParser(sampleParser, 'nothing like what sampleParser expects', stringParserInputCompanion, {
|
|
189
|
+
errorJoinMode: 'all',
|
|
190
|
+
errorStack: true,
|
|
191
|
+
}), {
|
|
192
|
+
instanceOf: normalParserErrorModule.ParserParsingJoinAllError,
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
t.regex(error.stack!, /exactSequenceParser/);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
test('errorJoinMode: none, errorStack: false', async t => {
|
|
199
|
+
const error = await t.throwsAsync(runParser(sampleParser, asyncIteratorFromString('1bbfinal_CC!'), stringParserInputCompanion, {
|
|
200
|
+
errorJoinMode: 'none',
|
|
201
|
+
errorStack: false,
|
|
202
|
+
}), {
|
|
203
|
+
instanceOf: normalParserErrorModule.ParserParsingJoinNoneError,
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
t.is(error.position, 12);
|
|
207
|
+
t.deepEqual(error.childErrors, []);
|
|
208
|
+
|
|
209
|
+
t.snapshot(removeStackLocations(error.stack));
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
test('retrows normal errors untouched', async t => {
|
|
213
|
+
class CustomError extends Error {};
|
|
214
|
+
const originalCustomError1 = new CustomError('This is a custom error');
|
|
215
|
+
const originalCustomError2 = new Error('This is a normal error');
|
|
216
|
+
|
|
217
|
+
const error1 = await t.throwsAsync(runParser(() => {
|
|
218
|
+
throw originalCustomError1;
|
|
219
|
+
}, 'foo', stringParserInputCompanion), {
|
|
220
|
+
instanceOf: CustomError,
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
t.is(error1, originalCustomError1);
|
|
224
|
+
|
|
225
|
+
const error2 = await t.throwsAsync(runParser(() => {
|
|
226
|
+
throw originalCustomError2;
|
|
227
|
+
}, 'foo', stringParserInputCompanion), {
|
|
228
|
+
instanceOf: Error,
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
t.is(error2, originalCustomError2);
|
|
232
|
+
});
|
|
233
|
+
|
|
167
234
|
test('throws on parserInputCompanion type mismatch', async t => {
|
|
168
235
|
const anythingParser: Parser<any, any> = createArrayParser(createElementParser());
|
|
169
236
|
|
|
@@ -176,3 +243,108 @@ test('throws on parserInputCompanion type mismatch', async t => {
|
|
|
176
243
|
message: /input companion/,
|
|
177
244
|
});
|
|
178
245
|
});
|
|
246
|
+
|
|
247
|
+
test('thrown error has input reader state', async t => {
|
|
248
|
+
const error = await t.throwsAsync(
|
|
249
|
+
runParser(
|
|
250
|
+
createTupleParser([
|
|
251
|
+
createExactSequenceNaiveParser('foo'),
|
|
252
|
+
createExactSequenceNaiveParser('bar'),
|
|
253
|
+
]),
|
|
254
|
+
(async function * () {
|
|
255
|
+
yield 'foo';
|
|
256
|
+
yield 'qux';
|
|
257
|
+
yield 'bar';
|
|
258
|
+
})(),
|
|
259
|
+
stringParserInputCompanion,
|
|
260
|
+
{
|
|
261
|
+
errorStack: true,
|
|
262
|
+
},
|
|
263
|
+
),
|
|
264
|
+
{
|
|
265
|
+
instanceOf: normalParserErrorModule.ParserParsingInvariantError,
|
|
266
|
+
},
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
t.is(error.position, 4);
|
|
270
|
+
|
|
271
|
+
invariant(error.inputReaderSate, 'error.inputReaderSate');
|
|
272
|
+
|
|
273
|
+
const {
|
|
274
|
+
consumedBufferedSequences,
|
|
275
|
+
unconsumedBufferedSequences,
|
|
276
|
+
unbufferedSequences,
|
|
277
|
+
position,
|
|
278
|
+
...inputReaderStateRest
|
|
279
|
+
} = error.inputReaderSate;
|
|
280
|
+
|
|
281
|
+
t.is(position, 4);
|
|
282
|
+
t.deepEqual(inputReaderStateRest, {});
|
|
283
|
+
|
|
284
|
+
const unbufferedSequencesArray = [];
|
|
285
|
+
|
|
286
|
+
if (unbufferedSequences) {
|
|
287
|
+
for await (const sequence of toAsyncIterable(unbufferedSequences)) {
|
|
288
|
+
unbufferedSequencesArray.push(sequence);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
t.deepEqual(consumedBufferedSequences, [ 'q' ]);
|
|
293
|
+
t.deepEqual(unconsumedBufferedSequences, [ 'ux' ]);
|
|
294
|
+
t.deepEqual(unbufferedSequencesArray, [ 'bar' ]);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
test('runParser throws with remaining input', async t => {
|
|
298
|
+
const parser: Parser<string, string> = createExactSequenceNaiveParser('foo');
|
|
299
|
+
const error = await t.throwsAsync(async () => runParser(parser, 'foobar', stringParserInputCompanion), {
|
|
300
|
+
any: true,
|
|
301
|
+
name: 'ParserUnexpectedRemainingInputError',
|
|
302
|
+
message: /remaining input/,
|
|
303
|
+
}) as ParserError;
|
|
304
|
+
|
|
305
|
+
t.is(error.position, 3);
|
|
306
|
+
|
|
307
|
+
const {
|
|
308
|
+
position,
|
|
309
|
+
consumedBufferedSequences,
|
|
310
|
+
unconsumedBufferedSequences,
|
|
311
|
+
unbufferedSequences,
|
|
312
|
+
...inputReaderStateRest
|
|
313
|
+
} = error.inputReaderSate!;
|
|
314
|
+
|
|
315
|
+
t.deepEqual(inputReaderStateRest, {});
|
|
316
|
+
t.is(position, 3);
|
|
317
|
+
t.deepEqual(consumedBufferedSequences, [ 'foo' ]);
|
|
318
|
+
t.deepEqual(unconsumedBufferedSequences, [ 'bar' ]);
|
|
319
|
+
t.truthy(unbufferedSequences);
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
test('runParser does not throw without remaining input', async t => {
|
|
323
|
+
const parser: Parser<string, string> = createExactSequenceNaiveParser('foo');
|
|
324
|
+
const output = await runParser(parser, 'foo', stringParserInputCompanion);
|
|
325
|
+
|
|
326
|
+
t.is(output, 'foo');
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
test('runParserWithRemainingInput with remaining input', async t => {
|
|
330
|
+
const parser: Parser<string, string> = createExactSequenceNaiveParser('foo');
|
|
331
|
+
const {
|
|
332
|
+
output,
|
|
333
|
+
remainingInput,
|
|
334
|
+
position,
|
|
335
|
+
...resultRest
|
|
336
|
+
} = await runParserWithRemainingInput(parser, 'foobar', stringParserInputCompanion);
|
|
337
|
+
|
|
338
|
+
t.deepEqual(resultRest, {});
|
|
339
|
+
t.is(output, 'foo');
|
|
340
|
+
t.is(await stringFromAsyncIterable(remainingInput!), 'bar');
|
|
341
|
+
t.is(position, 3);
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
test('runParserWithRemainingInput without remaining input', async t => {
|
|
345
|
+
const parser: Parser<string, string> = createExactSequenceNaiveParser('foo');
|
|
346
|
+
const { output, remainingInput } = await runParserWithRemainingInput(parser, 'foo', stringParserInputCompanion);
|
|
347
|
+
|
|
348
|
+
t.is(output, 'foo');
|
|
349
|
+
t.is(remainingInput, undefined);
|
|
350
|
+
});
|
package/src/parser.test.ts.md
CHANGED
|
@@ -8,48 +8,48 @@ Generated by [AVA](https://avajs.dev).
|
|
|
8
8
|
|
|
9
9
|
> Snapshot 1
|
|
10
10
|
|
|
11
|
-
`ParserParsingJoinNoneError:
|
|
11
|
+
`ParserParsingJoinNoneError: No union child parser succeeded.␊
|
|
12
12
|
at [LOCATIONS]`
|
|
13
13
|
|
|
14
14
|
## errorJoinMode: all
|
|
15
15
|
|
|
16
16
|
> Snapshot 1
|
|
17
17
|
|
|
18
|
-
`ParserParsingJoinAllError:
|
|
19
|
-
|
|
20
|
-
ParserParsingInvariantError:
|
|
21
|
-
ParserParsingInvariantError:
|
|
22
|
-
ParserParsingJoinAllError:
|
|
23
|
-
|
|
24
|
-
ParserParsingJoinAllError:
|
|
25
|
-
|
|
26
|
-
ParserParsingInvariantError:
|
|
27
|
-
ParserParsingInvariantError:
|
|
28
|
-
ParserParsingInvariantError:
|
|
29
|
-
End of child error stacks␊
|
|
18
|
+
`ParserParsingJoinAllError: No union child parser succeeded.␊
|
|
19
|
+
All child error stacks, indented:␊
|
|
20
|
+
ParserParsingInvariantError: Expected "3", got "C", at [LOCATIONS]␊
|
|
21
|
+
ParserParsingInvariantError: Expected "c", got "C", at [LOCATIONS]␊
|
|
22
|
+
ParserParsingJoinAllError: No disjunction child parser succeeded.␊
|
|
23
|
+
All child error stacks, indented:␊
|
|
24
|
+
ParserParsingJoinAllError: No union child parser succeeded.␊
|
|
25
|
+
All child error stacks, indented:␊
|
|
26
|
+
ParserParsingInvariantError: Expected "1", got "f", at [LOCATIONS]␊
|
|
27
|
+
ParserParsingInvariantError: Expected "a", got "f", at [LOCATIONS]␊
|
|
28
|
+
ParserParsingInvariantError: Expected "A", got "f", at [LOCATIONS]␊
|
|
29
|
+
End of all child error stacks␊
|
|
30
30
|
at [LOCATIONS]␊
|
|
31
|
-
ParserParsingInvariantError:
|
|
32
|
-
ParserParsingInvariantError:
|
|
33
|
-
ParserParsingInvariantError:
|
|
34
|
-
End of child error stacks␊
|
|
31
|
+
ParserParsingInvariantError: Expected "2", got "f", at [LOCATIONS]␊
|
|
32
|
+
ParserParsingInvariantError: Expected "b", got "f", at [LOCATIONS]␊
|
|
33
|
+
ParserParsingInvariantError: Expected "B", got "f", at [LOCATIONS]␊
|
|
34
|
+
End of all child error stacks␊
|
|
35
35
|
at [LOCATIONS]␊
|
|
36
|
-
ParserParsingInvariantError:
|
|
37
|
-
End of child error stacks␊
|
|
36
|
+
ParserParsingInvariantError: Expected "C", got "!", at [LOCATIONS]␊
|
|
37
|
+
End of all child error stacks␊
|
|
38
38
|
at [LOCATIONS]`
|
|
39
39
|
|
|
40
40
|
## errorJoinMode: deepest
|
|
41
41
|
|
|
42
42
|
> Snapshot 1
|
|
43
43
|
|
|
44
|
-
`ParserParsingJoinDeepestError:
|
|
44
|
+
`ParserParsingJoinDeepestError: No union child parser succeeded.␊
|
|
45
45
|
Deepest child error stacks, indented:␊
|
|
46
|
-
ParserParsingJoinDeepestError:
|
|
46
|
+
ParserParsingJoinDeepestError: No disjunction child parser succeeded.␊
|
|
47
47
|
Deepest child error stacks, indented:␊
|
|
48
|
-
ParserParsingJoinDeepestError:
|
|
48
|
+
ParserParsingJoinDeepestError: No union child parser succeeded.␊
|
|
49
49
|
Deepest child error stacks, indented:␊
|
|
50
|
-
ParserParsingInvariantError:
|
|
51
|
-
ParserParsingInvariantError:
|
|
52
|
-
ParserParsingInvariantError:
|
|
50
|
+
ParserParsingInvariantError: Expected "1", got "f", at [LOCATIONS]␊
|
|
51
|
+
ParserParsingInvariantError: Expected "a", got "f", at [LOCATIONS]␊
|
|
52
|
+
ParserParsingInvariantError: Expected "A", got "f", at [LOCATIONS]␊
|
|
53
53
|
End of deepest child error stacks␊
|
|
54
54
|
at [LOCATIONS]␊
|
|
55
55
|
End of deepest child error stacks␊
|
|
@@ -61,8 +61,15 @@ Generated by [AVA](https://avajs.dev).
|
|
|
61
61
|
|
|
62
62
|
> Snapshot 1
|
|
63
63
|
|
|
64
|
-
`ParserParsingJoinFurthestError:
|
|
64
|
+
`ParserParsingJoinFurthestError: No union child parser succeeded.␊
|
|
65
65
|
Furthest child error stacks, indented:␊
|
|
66
|
-
ParserParsingInvariantError:
|
|
66
|
+
ParserParsingInvariantError: Expected "C", got "!", at [LOCATIONS]␊
|
|
67
67
|
End of furthest child error stacks␊
|
|
68
68
|
at [LOCATIONS]`
|
|
69
|
+
|
|
70
|
+
## errorJoinMode: none, errorStack: false
|
|
71
|
+
|
|
72
|
+
> Snapshot 1
|
|
73
|
+
|
|
74
|
+
`This stack is intentionally left blank to avoid capture overhead.␊
|
|
75
|
+
If you need a useful stack trace, pass \`errorStack: true\` to \`runParser\`, trading off some performance.`
|
package/src/parser.test.ts.snap
CHANGED
|
Binary file
|