@futpib/parser 1.0.2 → 1.0.4
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 +1 -1
- package/build/allSettledStream.test.js +2 -2
- package/build/androidPackageParser.d.ts +1 -1
- package/build/androidPackageParser.js +5 -3
- package/build/androidPackageParser.test.js +7 -7
- package/build/androidPackageUnparser.d.ts +2 -2
- package/build/androidPackageUnparser.js +18 -14
- package/build/androidPackageUnparser.test.js +7 -7
- 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/arrayUnparser.d.ts +1 -1
- package/build/backsmali.d.ts +3 -1
- package/build/backsmali.js +31 -3
- package/build/bash.d.ts +84 -0
- package/build/bash.js +1 -0
- package/build/bashParser.d.ts +6 -0
- package/build/bashParser.js +294 -0
- package/build/bashParser.test.d.ts +1 -0
- package/build/bashParser.test.js +181 -0
- package/build/customInvariant.d.ts +2 -1
- package/build/customInvariant.js +4 -6
- package/build/dalvikBytecodeParser/formatParsers.d.ts +76 -2
- package/build/dalvikBytecodeParser/formatParsers.js +146 -11
- 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 +1105 -5
- package/build/dalvikBytecodeParser.js +658 -205
- 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.d.ts +1 -0
- package/build/dalvikBytecodeUnparser.test.js +25 -0
- package/build/dalvikExecutable.d.ts +65 -8
- package/build/dalvikExecutable.js +36 -0
- package/build/dalvikExecutableParser/stringSyntaxParser.d.ts +1 -1
- package/build/dalvikExecutableParser/stringSyntaxParser.js +17 -17
- package/build/dalvikExecutableParser/typeParsers.d.ts +2 -1
- package/build/dalvikExecutableParser/typeParsers.js +16 -11
- package/build/dalvikExecutableParser/typedNumbers.d.ts +85 -69
- package/build/dalvikExecutableParser/typedNumbers.js +0 -1
- package/build/dalvikExecutableParser.d.ts +2 -2
- package/build/dalvikExecutableParser.js +655 -337
- package/build/dalvikExecutableParser.test.js +24 -22
- package/build/dalvikExecutableParserAgainstSmaliParser.test.js +223 -246
- 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.d.ts +1 -0
- package/build/dalvikExecutableUnparser.test.js +31 -0
- package/build/debugLogInputParser.js +1 -1
- package/build/disjunctionParser.d.ts +2 -2
- package/build/disjunctionParser.js +2 -2
- package/build/elementTerminatedArrayParser.d.ts +2 -2
- package/build/elementTerminatedArrayParser.js +1 -1
- package/build/elementTerminatedArrayParser.test.js +5 -5
- package/build/elementTerminatedSequenceArrayParser.d.ts +2 -2
- package/build/elementTerminatedSequenceArrayParser.js +1 -1
- package/build/elementTerminatedSequenceArrayParser.test.js +2 -2
- package/build/elementTerminatedSequenceParser.d.ts +2 -2
- package/build/elementTerminatedSequenceParser.js +1 -1
- package/build/elementTerminatedSequenceParser.test.js +2 -2
- package/build/endOfInputParser.d.ts +1 -1
- package/build/exactElementSwitchParser.d.ts +3 -0
- package/build/exactElementSwitchParser.js +22 -0
- package/build/fetchCid.js +2 -6
- package/build/fetchCid.test.d.ts +1 -0
- package/build/fetchCid.test.js +16 -0
- package/build/fixedLengthSequenceParser.test.js +2 -2
- package/build/hasExecutable.js +2 -2
- package/build/highResolutionTimer.js +1 -1
- package/build/index.d.ts +24 -2
- package/build/index.js +22 -1
- package/build/inputReader.d.ts +1 -1
- package/build/inputReader.test.js +33 -45
- package/build/javaKeyStoreParser.test.js +6 -6
- package/build/jsonParser.js +8 -8
- 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 +1 -1
- package/build/leb128Parser.js +10 -10
- package/build/leb128Parser.test.js +7 -7
- package/build/negativeLookaheadParser.js +2 -2
- package/build/negativeLookaheadParser.test.js +4 -4
- 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.js +2 -2
- package/build/nonEmptyArrayParser.test.js +2 -1
- package/build/optionalParser.js +2 -2
- package/build/parser.d.ts +2 -1
- package/build/parser.js +23 -8
- package/build/parser.test.js +78 -29
- package/build/parserConsumedSequenceParser.d.ts +1 -1
- package/build/parserConsumedSequenceParser.js +2 -2
- package/build/parserContext.d.ts +8 -6
- package/build/parserContext.js +60 -33
- package/build/parserContext.test.js +7 -3
- package/build/parserError.d.ts +603 -44
- package/build/parserError.js +98 -53
- package/build/parserImplementationInvariant.d.ts +1 -1
- package/build/parserImplementationInvariant.js +2 -2
- package/build/parserInputCompanion.js +2 -2
- package/build/promiseCompose.js +1 -2
- package/build/regexpParser.d.ts +2 -0
- package/build/regexpParser.js +71 -0
- package/build/regexpParser.test.d.ts +1 -0
- package/build/regexpParser.test.js +83 -0
- package/build/regularExpression.d.ts +63 -0
- package/build/regularExpression.js +1 -0
- package/build/regularExpressionParser.d.ts +3 -0
- package/build/regularExpressionParser.js +580 -0
- package/build/regularExpressionParser.test.d.ts +1 -0
- package/build/regularExpressionParser.test.js +89 -0
- package/build/separatedArrayParser.js +2 -2
- 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.js +1 -1
- package/build/sequenceTerminatedSequenceParser.d.ts +2 -2
- package/build/sequenceTerminatedSequenceParser.js +3 -3
- package/build/sequenceTerminatedSequenceParser.test.js +1 -1
- package/build/sequenceUnparser.d.ts +1 -1
- package/build/skipToParser.d.ts +1 -1
- package/build/skipToParser.js +2 -2
- package/build/sliceBoundedParser.test.js +4 -9
- package/build/smali.d.ts +1 -1
- package/build/smali.js +6 -2
- package/build/smaliParser.d.ts +62 -6
- package/build/smaliParser.js +1721 -296
- package/build/smaliParser.test.js +338 -43
- package/build/stringFromAsyncIterable.d.ts +1 -0
- package/build/stringFromAsyncIterable.js +7 -0
- package/build/terminatedArrayParser.js +4 -4
- package/build/terminatedArrayParser.test.js +7 -7
- package/build/toAsyncIterator.js +4 -4
- package/build/unionParser.d.ts +1 -1
- package/build/unionParser.js +2 -2
- package/build/unionParser.test.js +3 -3
- 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.js +1 -1
- package/build/zipUnparser.d.ts +3 -3
- package/build/zipUnparser.js +9 -19
- package/build/zipUnparser.test.js +1 -1
- package/package.json +20 -26
- package/src/allSettledStream.test.ts +2 -2
- package/src/allSettledStream.ts +3 -3
- package/src/androidPackageParser.test.ts +17 -19
- package/src/androidPackageParser.ts +129 -171
- package/src/androidPackageUnparser.test.ts +19 -21
- package/src/androidPackageUnparser.ts +23 -17
- package/src/arbitrarilySlicedAsyncInterable.ts +1 -1
- 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.ts +2 -2
- package/src/arrayUnparser.ts +2 -2
- package/src/backsmali.ts +48 -4
- package/src/bash.ts +120 -0
- package/src/bashParser.test.ts +332 -0
- package/src/bashParser.ts +461 -0
- package/src/bsonParser.test.ts +12 -14
- package/src/customInvariant.ts +8 -12
- package/src/dalvikBytecodeParser/formatParsers.ts +376 -17
- package/src/dalvikBytecodeParser/formatSizes.ts +35 -0
- package/src/dalvikBytecodeParser/operationFormats.ts +226 -0
- package/src/dalvikBytecodeParser.ts +1042 -243
- package/src/dalvikBytecodeUnparser/formatUnparsers.ts +442 -0
- package/src/dalvikBytecodeUnparser.test.ts +44 -0
- package/src/dalvikBytecodeUnparser.ts +758 -0
- package/src/dalvikExecutable.ts +110 -48
- package/src/dalvikExecutableParser/stringSyntaxParser.ts +33 -33
- package/src/dalvikExecutableParser/typeParsers.ts +23 -14
- package/src/dalvikExecutableParser/typedNumbers.ts +19 -19
- package/src/dalvikExecutableParser.test.ts +60 -60
- package/src/dalvikExecutableParser.test.ts.md +6 -6
- package/src/dalvikExecutableParser.test.ts.snap +0 -0
- package/src/dalvikExecutableParser.ts +911 -434
- package/src/dalvikExecutableParserAgainstSmaliParser.test.ts +256 -239
- 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 +1 -1
- package/src/disjunctionParser.ts +5 -5
- package/src/elementTerminatedArrayParser.test.ts +8 -8
- package/src/elementTerminatedArrayParser.ts +2 -2
- package/src/elementTerminatedSequenceArrayParser.test.ts +4 -6
- package/src/elementTerminatedSequenceArrayParser.ts +2 -2
- package/src/elementTerminatedSequenceParser.test.ts +4 -6
- package/src/elementTerminatedSequenceParser.ts +2 -2
- package/src/endOfInputParser.ts +1 -1
- package/src/exactElementSwitchParser.ts +41 -0
- package/src/fetchCid.test.ts +20 -0
- package/src/fetchCid.ts +3 -7
- package/src/fixedLengthSequenceParser.test.ts +10 -12
- package/src/hasExecutable.ts +2 -2
- package/src/highResolutionTimer.ts +1 -1
- package/src/index.ts +113 -2
- package/src/inputReader.test.ts +39 -52
- package/src/inputReader.ts +2 -4
- package/src/inputReaderState.ts +1 -1
- package/src/inspect.ts +1 -1
- package/src/javaKeyStoreParser.test.ts +12 -14
- package/src/javaKeyStoreParser.ts +2 -6
- package/src/jsonParser.test.ts +2 -4
- package/src/jsonParser.ts +34 -38
- package/src/lazyMessageError.test.ts +21 -0
- package/src/lazyMessageError.ts +88 -0
- package/src/leb128Parser.test.ts +25 -23
- package/src/leb128Parser.ts +19 -19
- package/src/negativeLookaheadParser.test.ts +7 -11
- package/src/negativeLookaheadParser.ts +2 -2
- package/src/noStackCaptureOverheadError.test.ts +17 -0
- package/src/noStackCaptureOverheadError.ts +12 -0
- package/src/nonEmptyArrayParser.test.ts +3 -2
- package/src/nonEmptyArrayParser.ts +2 -2
- package/src/optionalParser.ts +2 -2
- package/src/parser.test.ts +96 -43
- package/src/parser.test.ts.md +13 -6
- package/src/parser.test.ts.snap +0 -0
- package/src/parser.ts +35 -12
- package/src/parserAccessorParser.ts +1 -1
- package/src/parserConsumedSequenceParser.ts +3 -3
- package/src/parserContext.test.ts +7 -3
- package/src/parserContext.ts +82 -48
- package/src/parserError.ts +143 -63
- package/src/parserImplementationInvariant.ts +3 -3
- package/src/parserInputCompanion.ts +2 -2
- package/src/promiseCompose.ts +2 -2
- package/src/regexpParser.test.ts +186 -0
- package/src/regexpParser.ts +94 -0
- package/src/regularExpression.ts +24 -0
- package/src/regularExpressionParser.test.ts +102 -0
- package/src/regularExpressionParser.ts +921 -0
- package/src/separatedArrayParser.ts +3 -3
- package/src/separatedNonEmptyArrayParser.test.ts +117 -0
- package/src/separatedNonEmptyArrayParser.ts +61 -0
- package/src/sequenceBuffer.test.ts +9 -9
- package/src/sequenceBuffer.ts +4 -4
- package/src/sequenceTerminatedSequenceParser.test.ts +3 -5
- package/src/sequenceTerminatedSequenceParser.ts +4 -4
- package/src/sequenceUnparser.ts +2 -2
- package/src/skipToParser.ts +2 -2
- package/src/sliceBoundedParser.test.ts +4 -12
- package/src/sliceBoundedParser.ts +2 -2
- package/src/smali.ts +8 -3
- package/src/smaliParser.test.ts +377 -66
- package/src/smaliParser.test.ts.md +1635 -48
- package/src/smaliParser.test.ts.snap +0 -0
- package/src/smaliParser.ts +2751 -569
- package/src/stringFromAsyncIterable.ts +9 -0
- package/src/terminatedArrayParser.test.ts +11 -11
- package/src/terminatedArrayParser.ts +5 -7
- package/src/toAsyncIterator.ts +8 -8
- package/src/uint8Array.ts +2 -3
- package/src/unionParser.test.ts +22 -23
- package/src/unionParser.ts +6 -8
- 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 +10 -18
- package/src/zipUnparser.test.ts +1 -1
- package/src/zipUnparser.ts +52 -64
- package/tsconfig.json +7 -1
- package/xo.config.ts +15 -0
- package/.yarn/releases/yarn-4.5.3.cjs +0 -934
package/src/parserContext.ts
CHANGED
|
@@ -3,11 +3,14 @@
|
|
|
3
3
|
import { type ParserInputCompanion } from './parserInputCompanion.js';
|
|
4
4
|
import { type InputReader } from './inputReader.js';
|
|
5
5
|
import {
|
|
6
|
-
|
|
6
|
+
normalParserErrorModule,
|
|
7
|
+
noStackCaptureOverheadParserErrorModule,
|
|
8
|
+
ParserParsingFailedError,
|
|
7
9
|
} from './parserError.js';
|
|
8
10
|
import { type RunParserOptions } from './parser.js';
|
|
9
11
|
import { type Falsy, customInvariant, type ValueOrAccessor } from './customInvariant.js';
|
|
10
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,6 +20,9 @@ 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> = {
|
|
@@ -41,8 +47,8 @@ export type ParserContext<Sequence, Element> = {
|
|
|
41
47
|
unlookahead(): void;
|
|
42
48
|
dispose(): void;
|
|
43
49
|
|
|
44
|
-
invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments:
|
|
45
|
-
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>;
|
|
46
52
|
};
|
|
47
53
|
|
|
48
54
|
let parserContextId = 0;
|
|
@@ -114,7 +120,7 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
114
120
|
async peek(offset: number): Promise<Element | undefined> {
|
|
115
121
|
if (
|
|
116
122
|
this._options.sliceEnd !== undefined
|
|
117
|
-
|
|
123
|
+
&& (this.position + offset) >= this._options.sliceEnd
|
|
118
124
|
) {
|
|
119
125
|
return undefined;
|
|
120
126
|
}
|
|
@@ -125,7 +131,7 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
125
131
|
async peekSequence(start: number, end: number): Promise<Sequence | undefined> {
|
|
126
132
|
if (
|
|
127
133
|
this._options.sliceEnd !== undefined
|
|
128
|
-
|
|
134
|
+
&& (this.position + end - 1) >= this._options.sliceEnd
|
|
129
135
|
) {
|
|
130
136
|
return undefined;
|
|
131
137
|
}
|
|
@@ -163,7 +169,7 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
163
169
|
const element = await this.peek(offset);
|
|
164
170
|
|
|
165
171
|
if (element === undefined) {
|
|
166
|
-
throw new ParserUnexpectedEndOfInputError('', this._depth, this.position);
|
|
172
|
+
throw new this._options.errorsModule.ParserUnexpectedEndOfInputError('', this._depth, this.position);
|
|
167
173
|
}
|
|
168
174
|
|
|
169
175
|
this.skip(offset + 1);
|
|
@@ -175,7 +181,7 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
175
181
|
const sequence = await this.peekSequence(start, end);
|
|
176
182
|
|
|
177
183
|
if (sequence === undefined) {
|
|
178
|
-
throw new ParserUnexpectedEndOfInputError('', this._depth, this.position);
|
|
184
|
+
throw new this._options.errorsModule.ParserUnexpectedEndOfInputError('', this._depth, this.position);
|
|
179
185
|
}
|
|
180
186
|
|
|
181
187
|
this.skip(end);
|
|
@@ -238,10 +244,10 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
238
244
|
'this: %s',
|
|
239
245
|
'parent: %s',
|
|
240
246
|
'parent.exclusiveChild: %s',
|
|
241
|
-
]
|
|
242
|
-
this.toString(),
|
|
243
|
-
parentParserContext.toString(),
|
|
244
|
-
parentParserContext._exclusiveChildParserContext?.toString(),
|
|
247
|
+
],
|
|
248
|
+
() => this.toString(),
|
|
249
|
+
() => parentParserContext.toString(),
|
|
250
|
+
() => parentParserContext._exclusiveChildParserContext?.toString(),
|
|
245
251
|
);
|
|
246
252
|
parserImplementationInvariant(
|
|
247
253
|
parentParserContext.position <= this.position,
|
|
@@ -284,38 +290,38 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
284
290
|
'this: %s',
|
|
285
291
|
'parent: %s',
|
|
286
292
|
'parent.exclusiveChild: %s',
|
|
287
|
-
]
|
|
288
|
-
this.toString(),
|
|
289
|
-
parentParserContext.toString(),
|
|
290
|
-
parentParserContext._exclusiveChildParserContext?.toString(),
|
|
293
|
+
],
|
|
294
|
+
() => this.toString(),
|
|
295
|
+
() => parentParserContext.toString(),
|
|
296
|
+
() => parentParserContext._exclusiveChildParserContext?.toString(),
|
|
291
297
|
);
|
|
292
298
|
|
|
293
299
|
parentParserContext._exclusiveChildParserContext = undefined;
|
|
294
300
|
this._parentParserContext = undefined;
|
|
295
301
|
}
|
|
296
302
|
|
|
297
|
-
invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments:
|
|
303
|
+
invariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy> {
|
|
298
304
|
const parserContext = this;
|
|
299
305
|
|
|
300
|
-
return customInvariant(function (
|
|
301
|
-
return new ParserParsingInvariantError(
|
|
306
|
+
return customInvariant(function (lazyMessage: LazyMessage) {
|
|
307
|
+
return new parserContext._options.errorsModule.ParserParsingInvariantError(lazyMessage, parserContext._depth, parserContext.position);
|
|
302
308
|
}, value, format, ...formatArguments);
|
|
303
309
|
}
|
|
304
310
|
|
|
305
|
-
invariantJoin<T>(value: T, childErrors: ParserParsingFailedError[], format: ValueOrAccessor<string | string[]>, ...formatArguments:
|
|
311
|
+
invariantJoin<T>(value: T, childErrors: ParserParsingFailedError[], format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy> {
|
|
306
312
|
parserImplementationInvariant(childErrors.length > 0, 'childErrors.length > 0');
|
|
307
313
|
|
|
308
314
|
const errorJoinMode = this._options.errorJoinMode ?? 'none';
|
|
309
315
|
const parserContext = this;
|
|
310
316
|
|
|
311
317
|
if (errorJoinMode === 'none') {
|
|
312
|
-
return customInvariant(function (
|
|
313
|
-
return new ParserParsingJoinNoneError(
|
|
318
|
+
return customInvariant(function (lazyMessage: LazyMessage) {
|
|
319
|
+
return new parserContext._options.errorsModule.ParserParsingJoinNoneError(lazyMessage, parserContext._depth, parserContext.position);
|
|
314
320
|
}, value, format, ...formatArguments);
|
|
315
321
|
}
|
|
316
322
|
|
|
317
323
|
if (errorJoinMode === 'furthest') {
|
|
318
|
-
return customInvariant(function (
|
|
324
|
+
return customInvariant(function (userLazyMessage: LazyMessage) {
|
|
319
325
|
let furthestPosition = 0;
|
|
320
326
|
let furthestChildErrors: ParserParsingFailedError[] = [];
|
|
321
327
|
|
|
@@ -333,23 +339,35 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
333
339
|
furthestChildErrors.push(childError);
|
|
334
340
|
}
|
|
335
341
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
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);
|
|
344
358
|
}, value, format, ...formatArguments);
|
|
345
359
|
}
|
|
346
360
|
|
|
347
361
|
if (errorJoinMode === 'deepest') {
|
|
348
|
-
return customInvariant(function (
|
|
362
|
+
return customInvariant(function (userLazyMessage: LazyMessage) {
|
|
349
363
|
let deepestDepth = 0;
|
|
350
364
|
let deepestChildErrors: ParserParsingFailedError[] = [];
|
|
351
365
|
|
|
352
366
|
for (const childError of childErrors) {
|
|
367
|
+
if (isLazyMessageError(childError)) {
|
|
368
|
+
childError.computeMessage();
|
|
369
|
+
}
|
|
370
|
+
|
|
353
371
|
if (childError.depth < deepestDepth) {
|
|
354
372
|
continue;
|
|
355
373
|
}
|
|
@@ -363,27 +381,43 @@ export class ParserContextImplementation<Sequence, Element> implements ParserCon
|
|
|
363
381
|
deepestChildErrors.push(childError);
|
|
364
382
|
}
|
|
365
383
|
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
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);
|
|
374
400
|
}, value, format, ...formatArguments);
|
|
375
401
|
}
|
|
376
402
|
|
|
377
403
|
if (errorJoinMode === 'all') {
|
|
378
|
-
return customInvariant(function (
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
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);
|
|
387
421
|
}, value, format, ...formatArguments);
|
|
388
422
|
}
|
|
389
423
|
|
package/src/parserError.ts
CHANGED
|
@@ -1,88 +1,168 @@
|
|
|
1
|
-
import { InputReaderState } from
|
|
1
|
+
import { type InputReaderState } from './inputReaderState.js';
|
|
2
|
+
import { LazyMessage, NormalLazyMessageError, NoStackCaptureOverheadLazyMessageError } from './lazyMessageError.js';
|
|
2
3
|
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
public position: undefined | number = undefined;
|
|
7
|
-
public inputReaderSate: undefined | InputReaderState<unknown> = undefined;
|
|
4
|
+
export interface ParserError extends Error {
|
|
5
|
+
position: undefined | number;
|
|
6
|
+
inputReaderSate: undefined | InputReaderState<unknown>;
|
|
8
7
|
}
|
|
9
8
|
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
export function isParserError(value: unknown): value is ParserError {
|
|
10
|
+
return (
|
|
11
|
+
typeof value === 'object'
|
|
12
|
+
&& value !== null
|
|
13
|
+
&& value instanceof Error
|
|
14
|
+
&& 'position' in value
|
|
15
|
+
&& (typeof value.position === 'number' || value.position === undefined)
|
|
16
|
+
&& 'inputReaderSate' in value
|
|
17
|
+
&& (value.inputReaderSate === undefined || typeof value.inputReaderSate === 'object')
|
|
18
|
+
);
|
|
15
19
|
}
|
|
16
20
|
|
|
17
|
-
|
|
18
|
-
name = 'ParserParsingFailedError';
|
|
21
|
+
type ParserErrorInterface = ParserError;
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
public readonly position: number,
|
|
24
|
-
) {
|
|
25
|
-
super(message);
|
|
26
|
-
}
|
|
23
|
+
export interface ParserParsingFailedError extends ParserErrorInterface {
|
|
24
|
+
depth: number;
|
|
25
|
+
position: number;
|
|
27
26
|
}
|
|
28
27
|
|
|
29
|
-
export
|
|
30
|
-
|
|
28
|
+
export function isParserParsingFailedError(value: unknown): value is ParserParsingFailedError {
|
|
29
|
+
return (
|
|
30
|
+
typeof value === 'object'
|
|
31
|
+
&& value !== null
|
|
32
|
+
&& value instanceof Error
|
|
33
|
+
&& 'depth' in value
|
|
34
|
+
&& typeof value.depth === 'number'
|
|
35
|
+
&& 'position' in value
|
|
36
|
+
&& typeof value.position === 'number'
|
|
37
|
+
);
|
|
38
|
+
}
|
|
31
39
|
|
|
32
|
-
|
|
40
|
+
type ParserParsingFailedErrorInterface = ParserParsingFailedError;
|
|
41
|
+
|
|
42
|
+
export interface ParserParsingJoinError extends ParserParsingFailedErrorInterface {
|
|
43
|
+
childErrors: ParserParsingFailedErrorInterface[];
|
|
33
44
|
}
|
|
34
45
|
|
|
35
|
-
export
|
|
36
|
-
|
|
46
|
+
export function isParserParsingJoinError(value: unknown): value is ParserParsingJoinError {
|
|
47
|
+
return (
|
|
48
|
+
typeof value === 'object'
|
|
49
|
+
&& value !== null
|
|
50
|
+
&& value instanceof Error
|
|
51
|
+
&& 'childErrors' in value
|
|
52
|
+
&& Array.isArray(value.childErrors)
|
|
53
|
+
&& value.childErrors.every((childError: unknown) => isParserParsingFailedError(childError))
|
|
54
|
+
);
|
|
37
55
|
}
|
|
38
56
|
|
|
39
|
-
|
|
40
|
-
|
|
57
|
+
type ParserParsingJoinErrorInterface = ParserParsingJoinError;
|
|
58
|
+
|
|
59
|
+
function createParserErrorModule(
|
|
60
|
+
BaseLazyMessageError: typeof NormalLazyMessageError | typeof NoStackCaptureOverheadLazyMessageError,
|
|
61
|
+
) {
|
|
62
|
+
class ParserError extends BaseLazyMessageError implements ParserErrorInterface {
|
|
63
|
+
name = 'ParserError';
|
|
41
64
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
depth: number,
|
|
45
|
-
position: number,
|
|
46
|
-
public readonly childErrors: ParserParsingFailedError[],
|
|
47
|
-
) {
|
|
48
|
-
super(message, depth, position);
|
|
65
|
+
public position: undefined | number = undefined;
|
|
66
|
+
public inputReaderSate: undefined | InputReaderState<unknown> = undefined;
|
|
49
67
|
}
|
|
50
|
-
}
|
|
51
68
|
|
|
52
|
-
|
|
53
|
-
|
|
69
|
+
class ParserImplementationError extends ParserError {
|
|
70
|
+
name = 'ParserImplementationError';
|
|
71
|
+
}
|
|
72
|
+
class ParserImplementationInvariantError extends ParserImplementationError {
|
|
73
|
+
name = 'ParserImplementationInvariantError';
|
|
74
|
+
}
|
|
54
75
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
76
|
+
class ParserParsingFailedError extends ParserError implements ParserParsingFailedErrorInterface {
|
|
77
|
+
name = 'ParserParsingFailedError';
|
|
78
|
+
|
|
79
|
+
constructor(
|
|
80
|
+
message: LazyMessage,
|
|
81
|
+
public readonly depth: number,
|
|
82
|
+
public readonly position: number,
|
|
83
|
+
) {
|
|
84
|
+
super(message);
|
|
85
|
+
}
|
|
62
86
|
}
|
|
63
|
-
}
|
|
64
87
|
|
|
65
|
-
|
|
66
|
-
|
|
88
|
+
class ParserParsingJoinError extends ParserParsingFailedError implements ParserParsingJoinErrorInterface {
|
|
89
|
+
name = 'ParserParsingJoinError';
|
|
67
90
|
|
|
68
|
-
|
|
69
|
-
message: string,
|
|
70
|
-
depth: number,
|
|
71
|
-
position: number,
|
|
72
|
-
public readonly childErrors: ParserParsingFailedError[],
|
|
73
|
-
) {
|
|
74
|
-
super(message, depth, position);
|
|
91
|
+
public readonly childErrors: ParserParsingFailedErrorInterface[] = [];
|
|
75
92
|
}
|
|
76
|
-
}
|
|
77
93
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
94
|
+
class ParserParsingJoinNoneError extends ParserParsingJoinError {
|
|
95
|
+
name = 'ParserParsingJoinNoneError';
|
|
96
|
+
}
|
|
81
97
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
98
|
+
class ParserParsingJoinAllError extends ParserParsingJoinError {
|
|
99
|
+
name = 'ParserParsingJoinAllError';
|
|
100
|
+
|
|
101
|
+
constructor(
|
|
102
|
+
message: LazyMessage,
|
|
103
|
+
depth: number,
|
|
104
|
+
position: number,
|
|
105
|
+
public readonly childErrors: ParserParsingFailedErrorInterface[],
|
|
106
|
+
) {
|
|
107
|
+
super(message, depth, position);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
class ParserParsingJoinDeepestError extends ParserParsingJoinError {
|
|
112
|
+
name = 'ParserParsingJoinDeepestError';
|
|
113
|
+
|
|
114
|
+
constructor(
|
|
115
|
+
message: LazyMessage,
|
|
116
|
+
depth: number,
|
|
117
|
+
position: number,
|
|
118
|
+
public readonly childErrors: ParserParsingFailedErrorInterface[],
|
|
119
|
+
) {
|
|
120
|
+
super(message, depth, position);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
class ParserParsingJoinFurthestError extends ParserParsingJoinError {
|
|
125
|
+
name = 'ParserParsingJoinFurthestError';
|
|
126
|
+
|
|
127
|
+
constructor(
|
|
128
|
+
message: LazyMessage,
|
|
129
|
+
depth: number,
|
|
130
|
+
position: number,
|
|
131
|
+
public readonly childErrors: ParserParsingFailedErrorInterface[],
|
|
132
|
+
) {
|
|
133
|
+
super(message, depth, position);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
class ParserParsingInvariantError extends ParserParsingFailedError {
|
|
138
|
+
name = 'ParserParsingInvariantError';
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
class ParserUnexpectedEndOfInputError extends ParserParsingFailedError {
|
|
142
|
+
name = 'ParserUnexpectedEndOfInputError';
|
|
143
|
+
}
|
|
85
144
|
|
|
86
|
-
|
|
87
|
-
|
|
145
|
+
class ParserUnexpectedRemainingInputError extends ParserParsingFailedError {
|
|
146
|
+
name = 'ParserUnexpectedRemainingInputError';
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return {
|
|
150
|
+
ParserError,
|
|
151
|
+
ParserImplementationError,
|
|
152
|
+
ParserImplementationInvariantError,
|
|
153
|
+
ParserParsingFailedError,
|
|
154
|
+
ParserParsingJoinError,
|
|
155
|
+
ParserParsingJoinNoneError,
|
|
156
|
+
ParserParsingJoinAllError,
|
|
157
|
+
ParserParsingJoinDeepestError,
|
|
158
|
+
ParserParsingJoinFurthestError,
|
|
159
|
+
ParserParsingInvariantError,
|
|
160
|
+
ParserUnexpectedEndOfInputError,
|
|
161
|
+
ParserUnexpectedRemainingInputError,
|
|
162
|
+
};
|
|
88
163
|
}
|
|
164
|
+
|
|
165
|
+
export type ParserErrorModule = ReturnType<typeof createParserErrorModule>;
|
|
166
|
+
|
|
167
|
+
export const normalParserErrorModule = createParserErrorModule(NormalLazyMessageError);
|
|
168
|
+
export const noStackCaptureOverheadParserErrorModule = createParserErrorModule(NoStackCaptureOverheadLazyMessageError);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ParserImplementationInvariantError } from './parserError.js';
|
|
2
1
|
import { type Falsy, customInvariant, type ValueOrAccessor } from './customInvariant.js';
|
|
2
|
+
import { normalParserErrorModule } from './parserError.js';
|
|
3
3
|
|
|
4
|
-
export function parserImplementationInvariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments:
|
|
5
|
-
return customInvariant(ParserImplementationInvariantError, value, format, ...formatArguments);
|
|
4
|
+
export function parserImplementationInvariant<T>(value: T, format: ValueOrAccessor<string | string[]>, ...formatArguments: unknown[]): Exclude<T, Falsy> {
|
|
5
|
+
return customInvariant(normalParserErrorModule.ParserImplementationInvariantError, value, format, ...formatArguments);
|
|
6
6
|
}
|
|
@@ -89,8 +89,8 @@ export class Uint8ArrayParserInputCompanion implements ParserInputCompanion<Uint
|
|
|
89
89
|
return false;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
for (
|
|
93
|
-
if (
|
|
92
|
+
for (const [ index, element ] of sequenceA.entries()) {
|
|
93
|
+
if (element !== sequenceB[index]) {
|
|
94
94
|
return false;
|
|
95
95
|
}
|
|
96
96
|
}
|
package/src/promiseCompose.ts
CHANGED
|
@@ -3,7 +3,7 @@ export function promiseCompose<A, B, C>(
|
|
|
3
3
|
f1: (a: A) => B | Promise<B>,
|
|
4
4
|
f2: (b: B) => C | Promise<C>,
|
|
5
5
|
): (a: A) => C | Promise<C> {
|
|
6
|
-
function promiseComposed(a: A) {
|
|
6
|
+
async function promiseComposed(a: A) {
|
|
7
7
|
const bOrBPromise = f1(a);
|
|
8
8
|
|
|
9
9
|
if (bOrBPromise instanceof Promise) {
|
|
@@ -11,7 +11,7 @@ export function promiseCompose<A, B, C>(
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
return f2(bOrBPromise);
|
|
14
|
-
}
|
|
14
|
+
}
|
|
15
15
|
|
|
16
16
|
Object.defineProperty(promiseComposed, 'name', {
|
|
17
17
|
value: `promiseCompose(${f1.name}, ${f2.name})`,
|