@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
package/src/parserContext.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
/* eslint-disable prefer-arrow-callback */
|
|
2
2
|
|
|
3
|
-
import invariant from 'invariant';
|
|
4
3
|
import { type ParserInputCompanion } from './parserInputCompanion.js';
|
|
5
4
|
import { type InputReader } from './inputReader.js';
|
|
6
5
|
import {
|
|
7
|
-
|
|
6
|
+
normalParserErrorModule,
|
|
7
|
+
noStackCaptureOverheadParserErrorModule,
|
|
8
|
+
ParserParsingFailedError,
|
|
8
9
|
} from './parserError.js';
|
|
9
10
|
import { type RunParserOptions } from './parser.js';
|
|
10
11
|
import { type Falsy, customInvariant, type ValueOrAccessor } from './customInvariant.js';
|
|
12
|
+
import { parserImplementationInvariant } from './parserImplementationInvariant.js';
|
|
13
|
+
import { formatLazyMessage, isLazyMessageError, LazyMessage } from './lazyMessageError.js';
|
|
11
14
|
|
|
12
15
|
type LookaheadOptions = {
|
|
13
16
|
debugName?: string;
|
|
@@ -17,25 +20,35 @@ type LookaheadOptions = {
|
|
|
17
20
|
type ParserContextOptions<Sequence, Element> =
|
|
18
21
|
& RunParserOptions<unknown, Sequence, Element>
|
|
19
22
|
& LookaheadOptions
|
|
23
|
+
& {
|
|
24
|
+
errorsModule: typeof normalParserErrorModule | typeof noStackCaptureOverheadParserErrorModule;
|
|
25
|
+
}
|
|
20
26
|
;
|
|
21
27
|
|
|
22
28
|
export type ParserContext<Sequence, Element> = {
|
|
23
29
|
from(elements: Element[]): Sequence;
|
|
30
|
+
concat(sequences: Sequence[]): Sequence;
|
|
24
31
|
length(sequence: Sequence): number;
|
|
25
32
|
at(sequence: Sequence, index: number): Element | undefined;
|
|
33
|
+
subsequence(sequence: Sequence, start: number, end: number): Sequence;
|
|
34
|
+
indexOf(sequence: Sequence, element: Element, fromIndex?: number): number;
|
|
35
|
+
indexOfSubsequence(sequence: Sequence, subsequence: Sequence, fromIndex?: number): number;
|
|
36
|
+
equals(sequenceA: Sequence, sequenceB: Sequence): boolean;
|
|
26
37
|
|
|
27
38
|
get position(): number;
|
|
28
39
|
peek(offset: number): Promise<Element | undefined>;
|
|
40
|
+
peekSequence(start: number, end: number): Promise<Sequence | undefined>;
|
|
29
41
|
skip(offset: number): void;
|
|
30
42
|
|
|
31
43
|
read(offset: number): Promise<Element>;
|
|
44
|
+
readSequence(start: number, end: number): Promise<Sequence>;
|
|
32
45
|
|
|
33
46
|
lookahead(options?: LookaheadOptions): ParserContext<Sequence, Element>;
|
|
34
47
|
unlookahead(): void;
|
|
35
48
|
dispose(): void;
|
|
36
49
|
|
|
37
|
-
invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments:
|
|
38
|
-
invariantJoin<T>(value: T, childErrors: ParserParsingFailedError[], format: ValueOrAccessor<string | string[]>, ...formatArguments:
|
|
50
|
+
invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy>;
|
|
51
|
+
invariantJoin<T>(value: T, childErrors: ParserParsingFailedError[], format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy>;
|
|
39
52
|
};
|
|
40
53
|
|
|
41
54
|
let parserContextId = 0;
|
|
@@ -72,6 +85,10 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
72
85
|
return this._parserInputCompanion.from(elements);
|
|
73
86
|
}
|
|
74
87
|
|
|
88
|
+
concat(sequences: Sequence[]): Sequence {
|
|
89
|
+
return this._parserInputCompanion.concat(sequences);
|
|
90
|
+
}
|
|
91
|
+
|
|
75
92
|
length(sequence: Sequence): number {
|
|
76
93
|
return this._parserInputCompanion.length(sequence);
|
|
77
94
|
}
|
|
@@ -80,6 +97,22 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
80
97
|
return this._parserInputCompanion.at(sequence, index);
|
|
81
98
|
}
|
|
82
99
|
|
|
100
|
+
subsequence(sequence: Sequence, start: number, end: number): Sequence {
|
|
101
|
+
return this._parserInputCompanion.subsequence(sequence, start, end);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
indexOf(sequence: Sequence, element: Element, fromIndex?: number): number {
|
|
105
|
+
return this._parserInputCompanion.indexOf(sequence, element, fromIndex);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
indexOfSubsequence(sequence: Sequence, subsequence: Sequence, fromIndex?: number): number {
|
|
109
|
+
return this._parserInputCompanion.indexOfSubsequence(sequence, subsequence, fromIndex);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
equals(sequenceA: Sequence, sequenceB: Sequence): boolean {
|
|
113
|
+
return this._parserInputCompanion.equals(sequenceA, sequenceB);
|
|
114
|
+
}
|
|
115
|
+
|
|
83
116
|
get position() {
|
|
84
117
|
return this._inputReader.position;
|
|
85
118
|
}
|
|
@@ -87,7 +120,7 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
87
120
|
async peek(offset: number): Promise<Element | undefined> {
|
|
88
121
|
if (
|
|
89
122
|
this._options.sliceEnd !== undefined
|
|
90
|
-
|
|
123
|
+
&& (this.position + offset) >= this._options.sliceEnd
|
|
91
124
|
) {
|
|
92
125
|
return undefined;
|
|
93
126
|
}
|
|
@@ -95,6 +128,39 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
95
128
|
return this._inputReader.peek(offset);
|
|
96
129
|
}
|
|
97
130
|
|
|
131
|
+
async peekSequence(start: number, end: number): Promise<Sequence | undefined> {
|
|
132
|
+
if (
|
|
133
|
+
this._options.sliceEnd !== undefined
|
|
134
|
+
&& (this.position + end - 1) >= this._options.sliceEnd
|
|
135
|
+
) {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
parserImplementationInvariant(
|
|
140
|
+
start >= 0,
|
|
141
|
+
'start (%s) >= 0',
|
|
142
|
+
start,
|
|
143
|
+
);
|
|
144
|
+
parserImplementationInvariant(
|
|
145
|
+
end >= start,
|
|
146
|
+
'end (%s) >= start (%s)',
|
|
147
|
+
start,
|
|
148
|
+
end,
|
|
149
|
+
);
|
|
150
|
+
parserImplementationInvariant(
|
|
151
|
+
Number.isSafeInteger(start),
|
|
152
|
+
'start (%d) is not a safe integer',
|
|
153
|
+
start,
|
|
154
|
+
);
|
|
155
|
+
parserImplementationInvariant(
|
|
156
|
+
Number.isSafeInteger(end),
|
|
157
|
+
'end (%d) is not a safe integer',
|
|
158
|
+
end,
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
return this._inputReader.peekSequence(start, end);
|
|
162
|
+
}
|
|
163
|
+
|
|
98
164
|
skip(offset: number) {
|
|
99
165
|
this._inputReader.skip(offset);
|
|
100
166
|
}
|
|
@@ -103,7 +169,7 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
103
169
|
const element = await this.peek(offset);
|
|
104
170
|
|
|
105
171
|
if (element === undefined) {
|
|
106
|
-
throw new ParserUnexpectedEndOfInputError('', this._depth, this.position);
|
|
172
|
+
throw new this._options.errorsModule.ParserUnexpectedEndOfInputError('', this._depth, this.position);
|
|
107
173
|
}
|
|
108
174
|
|
|
109
175
|
this.skip(offset + 1);
|
|
@@ -111,21 +177,31 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
111
177
|
return element;
|
|
112
178
|
}
|
|
113
179
|
|
|
114
|
-
|
|
115
|
-
const
|
|
180
|
+
async readSequence(start: number, end: number): Promise<Sequence> {
|
|
181
|
+
const sequence = await this.peekSequence(start, end);
|
|
116
182
|
|
|
117
|
-
if (
|
|
118
|
-
|
|
183
|
+
if (sequence === undefined) {
|
|
184
|
+
throw new this._options.errorsModule.ParserUnexpectedEndOfInputError('', this._depth, this.position);
|
|
119
185
|
}
|
|
120
186
|
|
|
121
|
-
|
|
187
|
+
this.skip(end);
|
|
188
|
+
|
|
189
|
+
return sequence;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
lookahead(options: LookaheadOptions = {}): ParserContext<Sequence, Element> {
|
|
193
|
+
const lookaheadInputReader = this._inputReader.lookahead();
|
|
194
|
+
|
|
195
|
+
parserImplementationInvariant(
|
|
122
196
|
this.position === lookaheadInputReader.position,
|
|
123
197
|
'lookahead this.position (%s) === lookaheadInputReader.position (%s)',
|
|
124
198
|
this.position,
|
|
125
199
|
lookaheadInputReader.position,
|
|
126
200
|
);
|
|
127
201
|
|
|
128
|
-
const
|
|
202
|
+
const ParserContext = this._options.parserContextClass ?? ParserContextImplementation;
|
|
203
|
+
|
|
204
|
+
const lookaheadParserContext = new ParserContext<Sequence, Element>(
|
|
129
205
|
this._parserInputCompanion,
|
|
130
206
|
lookaheadInputReader,
|
|
131
207
|
this,
|
|
@@ -143,11 +219,7 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
143
219
|
},
|
|
144
220
|
);
|
|
145
221
|
|
|
146
|
-
|
|
147
|
-
debugger;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
invariant(
|
|
222
|
+
parserImplementationInvariant(
|
|
151
223
|
this.position === lookaheadParserContext.position,
|
|
152
224
|
'lookahead this.position (%s) === lookaheadParserContext.position (%s)',
|
|
153
225
|
this.position,
|
|
@@ -158,42 +230,45 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
158
230
|
}
|
|
159
231
|
|
|
160
232
|
unlookahead() {
|
|
161
|
-
|
|
162
|
-
|
|
233
|
+
const parentParserContext = parserImplementationInvariant(
|
|
234
|
+
this._parentParserContext,
|
|
235
|
+
'this._parentParserContext !== undefined',
|
|
236
|
+
);
|
|
237
|
+
parserImplementationInvariant(
|
|
163
238
|
(
|
|
164
|
-
|
|
165
|
-
||
|
|
239
|
+
parentParserContext._exclusiveChildParserContext === undefined
|
|
240
|
+
|| parentParserContext._exclusiveChildParserContext === this
|
|
166
241
|
),
|
|
167
242
|
[
|
|
168
243
|
'Parent\'s exclusive child must be undefined or this',
|
|
169
244
|
'this: %s',
|
|
170
245
|
'parent: %s',
|
|
171
246
|
'parent.exclusiveChild: %s',
|
|
172
|
-
]
|
|
173
|
-
this.toString(),
|
|
174
|
-
|
|
175
|
-
|
|
247
|
+
],
|
|
248
|
+
() => this.toString(),
|
|
249
|
+
() => parentParserContext.toString(),
|
|
250
|
+
() => parentParserContext._exclusiveChildParserContext?.toString(),
|
|
176
251
|
);
|
|
177
|
-
|
|
178
|
-
|
|
252
|
+
parserImplementationInvariant(
|
|
253
|
+
parentParserContext.position <= this.position,
|
|
179
254
|
'unlookahead this._parentParserContext.position (%s) <= this.position (%s)',
|
|
180
|
-
|
|
255
|
+
parentParserContext.position,
|
|
181
256
|
this.position,
|
|
182
257
|
);
|
|
183
258
|
|
|
184
|
-
const offset = this._inputReader.position -
|
|
259
|
+
const offset = this._inputReader.position - parentParserContext._inputReader.position;
|
|
185
260
|
|
|
186
|
-
|
|
261
|
+
parentParserContext.skip(offset);
|
|
187
262
|
|
|
188
|
-
|
|
189
|
-
|
|
263
|
+
parserImplementationInvariant(
|
|
264
|
+
parentParserContext.position === this.position,
|
|
190
265
|
'unlookahead this._parentParserContext.position (%s) === this.position (%s)',
|
|
191
|
-
|
|
266
|
+
parentParserContext.position,
|
|
192
267
|
this.position,
|
|
193
268
|
);
|
|
194
269
|
|
|
195
|
-
this._inputReader =
|
|
196
|
-
|
|
270
|
+
this._inputReader = parentParserContext._inputReader;
|
|
271
|
+
parentParserContext._exclusiveChildParserContext = this;
|
|
197
272
|
|
|
198
273
|
if (this._exclusiveChildParserContext) {
|
|
199
274
|
this._exclusiveChildParserContext.unlookahead();
|
|
@@ -201,49 +276,52 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
201
276
|
}
|
|
202
277
|
|
|
203
278
|
dispose() {
|
|
204
|
-
|
|
205
|
-
|
|
279
|
+
const parentParserContext = parserImplementationInvariant(
|
|
280
|
+
this._parentParserContext,
|
|
281
|
+
'this._parentParserContext !== undefined',
|
|
282
|
+
);
|
|
283
|
+
parserImplementationInvariant(
|
|
206
284
|
(
|
|
207
|
-
|
|
208
|
-
||
|
|
285
|
+
parentParserContext._exclusiveChildParserContext === undefined
|
|
286
|
+
|| parentParserContext._exclusiveChildParserContext === this
|
|
209
287
|
),
|
|
210
288
|
[
|
|
211
289
|
'Parent\'s exclusive child must be undefined or this',
|
|
212
290
|
'this: %s',
|
|
213
291
|
'parent: %s',
|
|
214
292
|
'parent.exclusiveChild: %s',
|
|
215
|
-
]
|
|
216
|
-
this.toString(),
|
|
217
|
-
|
|
218
|
-
|
|
293
|
+
],
|
|
294
|
+
() => this.toString(),
|
|
295
|
+
() => parentParserContext.toString(),
|
|
296
|
+
() => parentParserContext._exclusiveChildParserContext?.toString(),
|
|
219
297
|
);
|
|
220
298
|
|
|
221
|
-
|
|
299
|
+
parentParserContext._exclusiveChildParserContext = undefined;
|
|
222
300
|
this._parentParserContext = undefined;
|
|
223
301
|
}
|
|
224
302
|
|
|
225
|
-
invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments:
|
|
303
|
+
invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy> {
|
|
226
304
|
const parserContext = this;
|
|
227
305
|
|
|
228
|
-
return customInvariant(function (
|
|
229
|
-
return new ParserParsingInvariantError(
|
|
306
|
+
return customInvariant(function (lazyMessage: LazyMessage) {
|
|
307
|
+
return new parserContext._options.errorsModule.ParserParsingInvariantError(lazyMessage, parserContext._depth, parserContext.position);
|
|
230
308
|
}, value, format, ...formatArguments);
|
|
231
309
|
}
|
|
232
310
|
|
|
233
|
-
invariantJoin<T>(value: T, childErrors: ParserParsingFailedError[], format: ValueOrAccessor<string | string[]>, ...formatArguments:
|
|
234
|
-
|
|
311
|
+
invariantJoin<T>(value: T, childErrors: ParserParsingFailedError[], format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy> {
|
|
312
|
+
parserImplementationInvariant(childErrors.length > 0, 'childErrors.length > 0');
|
|
235
313
|
|
|
236
314
|
const errorJoinMode = this._options.errorJoinMode ?? 'none';
|
|
237
315
|
const parserContext = this;
|
|
238
316
|
|
|
239
317
|
if (errorJoinMode === 'none') {
|
|
240
|
-
return customInvariant(function (
|
|
241
|
-
return new ParserParsingJoinNoneError(
|
|
318
|
+
return customInvariant(function (lazyMessage: LazyMessage) {
|
|
319
|
+
return new parserContext._options.errorsModule.ParserParsingJoinNoneError(lazyMessage, parserContext._depth, parserContext.position);
|
|
242
320
|
}, value, format, ...formatArguments);
|
|
243
321
|
}
|
|
244
322
|
|
|
245
323
|
if (errorJoinMode === 'furthest') {
|
|
246
|
-
return customInvariant(function (
|
|
324
|
+
return customInvariant(function (userLazyMessage: LazyMessage) {
|
|
247
325
|
let furthestPosition = 0;
|
|
248
326
|
let furthestChildErrors: ParserParsingFailedError[] = [];
|
|
249
327
|
|
|
@@ -261,23 +339,35 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
261
339
|
furthestChildErrors.push(childError);
|
|
262
340
|
}
|
|
263
341
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
342
|
+
return new parserContext._options.errorsModule.ParserParsingJoinFurthestError([
|
|
343
|
+
[
|
|
344
|
+
'%s',
|
|
345
|
+
'Furthest child error stacks, indented:',
|
|
346
|
+
'%s',
|
|
347
|
+
'End of furthest child error stacks',
|
|
348
|
+
],
|
|
349
|
+
() => formatLazyMessage(userLazyMessage),
|
|
350
|
+
() => furthestChildErrors.flatMap(furthestChildError => {
|
|
351
|
+
if (isLazyMessageError(furthestChildError)) {
|
|
352
|
+
furthestChildError.computeMessage();
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
return furthestChildError.stack?.split('\n').map(line => ' ' + line);
|
|
356
|
+
}).join('\n'),
|
|
357
|
+
], parserContext._depth, furthestPosition, furthestChildErrors);
|
|
272
358
|
}, value, format, ...formatArguments);
|
|
273
359
|
}
|
|
274
360
|
|
|
275
361
|
if (errorJoinMode === 'deepest') {
|
|
276
|
-
return customInvariant(function (
|
|
362
|
+
return customInvariant(function (userLazyMessage: LazyMessage) {
|
|
277
363
|
let deepestDepth = 0;
|
|
278
364
|
let deepestChildErrors: ParserParsingFailedError[] = [];
|
|
279
365
|
|
|
280
366
|
for (const childError of childErrors) {
|
|
367
|
+
if (isLazyMessageError(childError)) {
|
|
368
|
+
childError.computeMessage();
|
|
369
|
+
}
|
|
370
|
+
|
|
281
371
|
if (childError.depth < deepestDepth) {
|
|
282
372
|
continue;
|
|
283
373
|
}
|
|
@@ -291,30 +381,46 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
291
381
|
deepestChildErrors.push(childError);
|
|
292
382
|
}
|
|
293
383
|
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
384
|
+
return new parserContext._options.errorsModule.ParserParsingJoinDeepestError([
|
|
385
|
+
[
|
|
386
|
+
'%s',
|
|
387
|
+
'Deepest child error stacks, indented:',
|
|
388
|
+
'%s',
|
|
389
|
+
'End of deepest child error stacks',
|
|
390
|
+
],
|
|
391
|
+
() => formatLazyMessage(userLazyMessage),
|
|
392
|
+
() => deepestChildErrors.flatMap(deepestChildError => {
|
|
393
|
+
if (isLazyMessageError(deepestChildError)) {
|
|
394
|
+
deepestChildError.computeMessage();
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
return deepestChildError.stack?.split('\n').map(line => ' ' + line);
|
|
398
|
+
}).join('\n'),
|
|
399
|
+
], deepestDepth, parserContext.position, deepestChildErrors);
|
|
302
400
|
}, value, format, ...formatArguments);
|
|
303
401
|
}
|
|
304
402
|
|
|
305
403
|
if (errorJoinMode === 'all') {
|
|
306
|
-
return customInvariant(function (
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
404
|
+
return customInvariant(function (userLazyMessage: LazyMessage) {
|
|
405
|
+
return new parserContext._options.errorsModule.ParserParsingJoinAllError([
|
|
406
|
+
[
|
|
407
|
+
'%s',
|
|
408
|
+
'All child error stacks, indented:',
|
|
409
|
+
'%s',
|
|
410
|
+
'End of all child error stacks',
|
|
411
|
+
],
|
|
412
|
+
() => formatLazyMessage(userLazyMessage),
|
|
413
|
+
() => childErrors.flatMap(childError => {
|
|
414
|
+
if (isLazyMessageError(childError)) {
|
|
415
|
+
childError.computeMessage();
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
return childError.stack?.split('\n').map(line => ' ' + line);
|
|
419
|
+
}).join('\n'),
|
|
420
|
+
], parserContext._depth, parserContext.position, childErrors);
|
|
315
421
|
}, value, format, ...formatArguments);
|
|
316
422
|
}
|
|
317
423
|
|
|
318
|
-
|
|
424
|
+
return parserImplementationInvariant(false, 'Unsupported errorJoinMode: %s', errorJoinMode);
|
|
319
425
|
}
|
|
320
426
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import mem from 'mem';
|
|
1
2
|
import { type Parser } from './parser.js';
|
|
2
3
|
import { type DeriveSequenceElement } from './sequence.js';
|
|
3
4
|
|
|
@@ -11,13 +12,30 @@ export function parserCreatorCompose<
|
|
|
11
12
|
f1: (...arguments_: Arguments) => Parser<OutputA, Sequence, Element>,
|
|
12
13
|
f2: (outputA: OutputA) => Parser<OutputB, Sequence, Element>,
|
|
13
14
|
): (...arguments_: Arguments) => Parser<OutputB, Sequence, Element> {
|
|
14
|
-
|
|
15
|
+
const parserCreatorComposedOuter: (...arguments_: Arguments) => Parser<OutputB, Sequence, Element> = (...arguments_) => {
|
|
15
16
|
const parserA = f1(...arguments_);
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
const parserCreatorComposedInner: Parser<OutputB, Sequence, Element> = async parserContext => {
|
|
18
19
|
const outputA = await parserA(parserContext);
|
|
19
20
|
const parserB = f2(outputA);
|
|
20
21
|
return parserB(parserContext);
|
|
21
22
|
};
|
|
23
|
+
|
|
24
|
+
return parserCreatorComposedInner;
|
|
22
25
|
};
|
|
26
|
+
|
|
27
|
+
return parserCreatorComposedOuter;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function parserCreatorComposeMem<
|
|
31
|
+
Arguments extends unknown[],
|
|
32
|
+
OutputA,
|
|
33
|
+
OutputB,
|
|
34
|
+
Sequence,
|
|
35
|
+
Element = DeriveSequenceElement<Sequence>,
|
|
36
|
+
>(
|
|
37
|
+
f1: (...arguments_: Arguments) => Parser<OutputA, Sequence, Element>,
|
|
38
|
+
f2: (outputA: OutputA) => Parser<OutputB, Sequence, Element>,
|
|
39
|
+
): (...arguments_: Arguments) => Parser<OutputB, Sequence, Element> {
|
|
40
|
+
return parserCreatorCompose(mem(f1), mem(f2));
|
|
23
41
|
}
|