@thomasfosterau/effect-parse 0.1.0 → 0.3.0
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/README.md +291 -231
- package/dist/Ascii.d.ts +32 -53
- package/dist/Ascii.d.ts.map +1 -1
- package/dist/Ascii.js +576 -571
- package/dist/Ascii.js.map +1 -1
- package/dist/Binary.d.ts +6 -29
- package/dist/Binary.d.ts.map +1 -1
- package/dist/Binary.js +129 -116
- package/dist/Binary.js.map +1 -1
- package/dist/Bits.d.ts +4 -2
- package/dist/Bits.d.ts.map +1 -1
- package/dist/Bits.js +121 -123
- package/dist/Bits.js.map +1 -1
- package/dist/Compiler.d.ts +39 -0
- package/dist/Compiler.d.ts.map +1 -0
- package/dist/Compiler.js +48 -0
- package/dist/Compiler.js.map +1 -0
- package/dist/Encoding.d.ts +29 -46
- package/dist/Encoding.d.ts.map +1 -1
- package/dist/Encoding.js +76 -75
- package/dist/Encoding.js.map +1 -1
- package/dist/Expression.d.ts +15 -49
- package/dist/Expression.d.ts.map +1 -1
- package/dist/Expression.js +151 -132
- package/dist/Expression.js.map +1 -1
- package/dist/Input.d.ts +251 -177
- package/dist/Input.d.ts.map +1 -1
- package/dist/Input.js +409 -299
- package/dist/Input.js.map +1 -1
- package/dist/Nom.d.ts +45 -85
- package/dist/Nom.d.ts.map +1 -1
- package/dist/Nom.js +423 -453
- package/dist/Nom.js.map +1 -1
- package/dist/ParseError.d.ts +54 -49
- package/dist/ParseError.d.ts.map +1 -1
- package/dist/ParseError.js +232 -275
- package/dist/ParseError.js.map +1 -1
- package/dist/Parser.d.ts +345 -313
- package/dist/Parser.d.ts.map +1 -1
- package/dist/Parser.js +2034 -1802
- package/dist/Parser.js.map +1 -1
- package/dist/ParserSchema.d.ts +206 -7
- package/dist/ParserSchema.d.ts.map +1 -1
- package/dist/ParserSchema.js +678 -49
- package/dist/ParserSchema.js.map +1 -1
- package/dist/ParserStream.d.ts +26 -20
- package/dist/ParserStream.d.ts.map +1 -1
- package/dist/ParserStream.js +267 -255
- package/dist/ParserStream.js.map +1 -1
- package/dist/Syntax.d.ts +401 -0
- package/dist/Syntax.d.ts.map +1 -0
- package/dist/Syntax.js +717 -0
- package/dist/Syntax.js.map +1 -0
- package/dist/Text.d.ts +98 -134
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +534 -496
- package/dist/Text.js.map +1 -1
- package/dist/Token.d.ts +60 -42
- package/dist/Token.d.ts.map +1 -1
- package/dist/Token.js +331 -265
- package/dist/Token.js.map +1 -1
- package/dist/index.d.ts +16 -17
- package/dist/index.js +16 -17
- package/dist/internal/compiler/closure.d.ts +14 -16
- package/dist/internal/compiler/closure.d.ts.map +1 -1
- package/dist/internal/compiler/closure.js +1458 -1637
- package/dist/internal/compiler/closure.js.map +1 -1
- package/dist/internal/compiler/entries.d.ts +11 -11
- package/dist/internal/compiler/entries.d.ts.map +1 -1
- package/dist/internal/compiler/entries.js +36 -26
- package/dist/internal/compiler/entries.js.map +1 -1
- package/dist/internal/compiler/first.d.ts +19 -19
- package/dist/internal/compiler/first.d.ts.map +1 -1
- package/dist/internal/compiler/first.js +251 -227
- package/dist/internal/compiler/first.js.map +1 -1
- package/dist/internal/compiler/jit.d.ts +6 -17
- package/dist/internal/compiler/jit.d.ts.map +1 -1
- package/dist/internal/compiler/jit.js +860 -988
- package/dist/internal/compiler/jit.js.map +1 -1
- package/dist/internal/compiler/registry.d.ts +20 -21
- package/dist/internal/compiler/registry.d.ts.map +1 -1
- package/dist/internal/compiler/registry.js +21 -41
- package/dist/internal/compiler/registry.js.map +1 -1
- package/dist/internal/compiler/sets.d.ts +9 -13
- package/dist/internal/compiler/sets.d.ts.map +1 -1
- package/dist/internal/compiler/sets.js +76 -73
- package/dist/internal/compiler/sets.js.map +1 -1
- package/dist/internal/entries.d.ts +3 -3
- package/dist/internal/entries.d.ts.map +1 -1
- package/dist/internal/entries.js +38 -30
- package/dist/internal/entries.js.map +1 -1
- package/dist/internal/node.d.ts +177 -173
- package/dist/internal/node.d.ts.map +1 -1
- package/dist/internal/node.js +77 -66
- package/dist/internal/node.js.map +1 -1
- package/dist/internal/numbers.d.ts +7 -8
- package/dist/internal/numbers.d.ts.map +1 -1
- package/dist/internal/numbers.js +246 -276
- package/dist/internal/numbers.js.map +1 -1
- package/dist/internal/resume.d.ts +6 -24
- package/dist/internal/resume.d.ts.map +1 -1
- package/dist/internal/resume.js +30 -29
- package/dist/internal/resume.js.map +1 -1
- package/dist/internal/run.d.ts +15 -0
- package/dist/internal/run.d.ts.map +1 -0
- package/dist/internal/run.js +36 -0
- package/dist/internal/run.js.map +1 -0
- package/dist/internal/stack.d.ts +16 -0
- package/dist/internal/stack.d.ts.map +1 -0
- package/dist/internal/stack.js +36 -0
- package/dist/internal/stack.js.map +1 -0
- package/dist/internal/syntax.d.ts +147 -0
- package/dist/internal/syntax.d.ts.map +1 -0
- package/dist/internal/syntax.js +309 -0
- package/dist/internal/syntax.js.map +1 -0
- package/dist/internal/text.d.ts +10 -2
- package/dist/internal/text.d.ts.map +1 -1
- package/dist/internal/text.js +295 -345
- package/dist/internal/text.js.map +1 -1
- package/dist/internal/ties.d.ts +30 -0
- package/dist/internal/ties.d.ts.map +1 -0
- package/dist/internal/ties.js +67 -0
- package/dist/internal/ties.js.map +1 -0
- package/dist/internal/tokens.d.ts +25 -30
- package/dist/internal/tokens.d.ts.map +1 -1
- package/dist/internal/tokens.js +369 -363
- package/dist/internal/tokens.js.map +1 -1
- package/package.json +42 -28
- package/src/Ascii.ts +278 -187
- package/src/Binary.ts +150 -44
- package/src/Bits.ts +6 -3
- package/src/Compiler.ts +98 -0
- package/src/Expression.ts +24 -16
- package/src/Input.ts +210 -35
- package/src/Nom.ts +4 -3
- package/src/ParseError.ts +49 -52
- package/src/Parser.ts +1199 -799
- package/src/ParserSchema.ts +982 -23
- package/src/ParserStream.ts +104 -80
- package/src/Syntax.ts +900 -0
- package/src/Text.ts +272 -187
- package/src/Token.ts +180 -87
- package/src/index.ts +2 -0
- package/src/internal/compiler/closure.ts +121 -88
- package/src/internal/compiler/entries.ts +21 -8
- package/src/internal/compiler/first.ts +17 -15
- package/src/internal/compiler/jit.ts +360 -157
- package/src/internal/compiler/registry.ts +12 -33
- package/src/internal/compiler/sets.ts +17 -11
- package/src/internal/entries.ts +4 -2
- package/src/internal/node.ts +51 -37
- package/src/internal/numbers.ts +22 -20
- package/src/internal/resume.ts +8 -4
- package/src/internal/run.ts +41 -0
- package/src/internal/stack.ts +41 -0
- package/src/internal/syntax.ts +426 -0
- package/src/internal/text.ts +32 -25
- package/src/internal/ties.ts +83 -0
- package/src/internal/tokens.ts +96 -51
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
package/dist/ParseError.js
CHANGED
|
@@ -1,301 +1,258 @@
|
|
|
1
|
-
|
|
2
|
-
* The error type produced when running a parser.
|
|
3
|
-
*
|
|
4
|
-
* `ParseError` merges winnow's `ContextError`/`ParseError` and nom's
|
|
5
|
-
* `VerboseError`. It records where parsing failed, what was expected there,
|
|
6
|
-
* the context labels that were active, and an optional typed `cause`
|
|
7
|
-
* produced by `Parser.fail`, `Parser.tryMap` and friends. Its `message`
|
|
8
|
-
* shows the failing position in the input:
|
|
9
|
-
*
|
|
10
|
-
* ```text
|
|
11
|
-
* Parse error at line 1, column 4:
|
|
12
|
-
* 1 | [1,,2]
|
|
13
|
-
* | ^
|
|
14
|
-
* expected digit
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* `ParseError` is a `Data.TaggedError`, so it can be yielded directly inside
|
|
18
|
-
* `Effect.gen`.
|
|
19
|
-
*
|
|
20
|
-
* @since 0.1.0
|
|
21
|
-
*/
|
|
22
|
-
import * as Data from "effect/Data";
|
|
1
|
+
import * as Predicate from "effect/Predicate";
|
|
23
2
|
import * as Option from "effect/Option";
|
|
24
3
|
import * as text from "./internal/text.js";
|
|
4
|
+
import * as Data from "effect/Data";
|
|
5
|
+
//#region src/ParseError.ts
|
|
25
6
|
/**
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
7
|
+
* The error type produced when running a parser.
|
|
8
|
+
*
|
|
9
|
+
* `ParseError` merges winnow's `ContextError`/`ParseError` and nom's
|
|
10
|
+
* `VerboseError`. It records where parsing failed, what was expected there,
|
|
11
|
+
* the context labels that were active, and an optional typed `cause`
|
|
12
|
+
* produced by `Parser.fail`, `Parser.tryMap` and friends. Its `message`
|
|
13
|
+
* shows the failing position in the input:
|
|
14
|
+
*
|
|
15
|
+
* ```text
|
|
16
|
+
* Parse error at line 1, column 4:
|
|
17
|
+
* 1 | [1,,2]
|
|
18
|
+
* | ^
|
|
19
|
+
* expected digit
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* `ParseError` is a `Data.TaggedError`, so it can be yielded directly inside
|
|
23
|
+
* `Effect.gen`.
|
|
24
|
+
*
|
|
25
|
+
* @since 0.1.0
|
|
26
|
+
*/
|
|
30
27
|
/**
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
28
|
+
* @since 0.1.0
|
|
29
|
+
* @category type ids
|
|
30
|
+
*/
|
|
31
|
+
const TypeId = "~effect-parse/ParseError";
|
|
32
|
+
/**
|
|
33
|
+
* An error produced by running a parser.
|
|
34
|
+
*
|
|
35
|
+
* @since 0.1.0
|
|
36
|
+
* @category models
|
|
37
|
+
*/
|
|
38
|
+
var ParseError = class extends (/*#__PURE__*/ Data.TaggedError("ParseError")) {
|
|
39
|
+
/**
|
|
40
|
+
* @since 0.1.0
|
|
41
|
+
*/
|
|
42
|
+
[TypeId] = TypeId;
|
|
43
|
+
/**
|
|
44
|
+
* The 1-based line and column of the failure (for strings and encoded
|
|
45
|
+
* text; for other inputs the line is 1 and the column is `offset + 1`).
|
|
46
|
+
*
|
|
47
|
+
* @since 0.1.0
|
|
48
|
+
*/
|
|
49
|
+
get position() {
|
|
50
|
+
return lineColumn(this.input, this.offset, this.encoding);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The rendered, human-readable error message.
|
|
54
|
+
*
|
|
55
|
+
* @since 0.1.0
|
|
56
|
+
*/
|
|
57
|
+
get message() {
|
|
58
|
+
return render(this);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @since 0.1.0
|
|
62
|
+
*/
|
|
63
|
+
toString() {
|
|
64
|
+
return `ParseError: ${this.message}`;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
65
67
|
/**
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
* @since 0.1.0
|
|
69
|
+
* @category guards
|
|
70
|
+
*/
|
|
71
|
+
const isParseError = (u) => Predicate.isObjectOrArray(u) && "~effect-parse/ParseError" in u;
|
|
70
72
|
/**
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
73
|
+
* Builds a `ParseError` from the failure details recorded while parsing.
|
|
74
|
+
*
|
|
75
|
+
* @since 0.1.0
|
|
76
|
+
* @category constructors
|
|
77
|
+
*/
|
|
78
|
+
const fromFailure = (input, failure, mode, encoding) => new ParseError({
|
|
79
|
+
input,
|
|
80
|
+
offset: failure.offset,
|
|
81
|
+
kind: failure.kind,
|
|
82
|
+
mode,
|
|
83
|
+
expected: failure.expected,
|
|
84
|
+
context: failure.context,
|
|
85
|
+
cause: failure.hasCause ? failure.cause : void 0,
|
|
86
|
+
description: failure.message,
|
|
87
|
+
encoding: input instanceof Uint8Array ? encoding : void 0
|
|
86
88
|
});
|
|
87
89
|
/**
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
* The user supplied cause of an error, if any.
|
|
91
|
+
*
|
|
92
|
+
* @since 0.1.0
|
|
93
|
+
* @category getters
|
|
94
|
+
*/
|
|
95
|
+
const getCause = (self) => self.cause === void 0 ? Option.none() : Option.some(self.cause);
|
|
94
96
|
/**
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
97
|
+
* Computes the 1-based line and column (in code points) of an offset. Lines
|
|
98
|
+
* are separated by `\n`. Byte inputs are read as text when an `encoding`
|
|
99
|
+
* is given. For other inputs the line is always 1 and the column is
|
|
100
|
+
* `offset + 1`.
|
|
101
|
+
*
|
|
102
|
+
* @since 0.1.0
|
|
103
|
+
* @category utils
|
|
104
|
+
*/
|
|
105
|
+
const lineColumn = (input, offset, encoding) => {
|
|
106
|
+
if (encoding !== void 0 && input instanceof Uint8Array) {
|
|
107
|
+
let line = 1;
|
|
108
|
+
let column = 1;
|
|
109
|
+
text.walk(encoding, input, 0, Math.min(offset, input.length), (cp) => {
|
|
110
|
+
if (cp === 10) {
|
|
111
|
+
line++;
|
|
112
|
+
column = 1;
|
|
113
|
+
} else column++;
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
line,
|
|
117
|
+
column
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (!Predicate.isString(input)) return {
|
|
121
|
+
line: 1,
|
|
122
|
+
column: offset + 1
|
|
123
|
+
};
|
|
124
|
+
let line = 1;
|
|
125
|
+
let lineStart = 0;
|
|
126
|
+
for (let i = 0; i < offset && i < input.length; i++) if (input.charCodeAt(i) === 10) {
|
|
127
|
+
line++;
|
|
128
|
+
lineStart = i + 1;
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
line,
|
|
132
|
+
column: codePointCount(input, lineStart, Math.min(offset, input.length)) + 1
|
|
133
|
+
};
|
|
129
134
|
};
|
|
130
135
|
const codePointCount = (s, start, end) => {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
return n;
|
|
136
|
+
let n = 0;
|
|
137
|
+
for (let i = start; i < end; i++) {
|
|
138
|
+
const c = s.charCodeAt(i);
|
|
139
|
+
if (c >= 55296 && c <= 56319 && i + 1 < end) {
|
|
140
|
+
const d = s.charCodeAt(i + 1);
|
|
141
|
+
if (d >= 56320 && d <= 57343) i++;
|
|
142
|
+
}
|
|
143
|
+
n++;
|
|
144
|
+
}
|
|
145
|
+
return n;
|
|
142
146
|
};
|
|
143
147
|
/**
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return expected[0];
|
|
154
|
-
return `${expected.slice(0, -1).join(", ")} or ${expected[expected.length - 1]}`;
|
|
148
|
+
* Formats a list of expectations: `a`, `a or b`, `a, b or c`.
|
|
149
|
+
*
|
|
150
|
+
* @since 0.1.0
|
|
151
|
+
* @category utils
|
|
152
|
+
*/
|
|
153
|
+
const formatExpected = (expected) => {
|
|
154
|
+
if (expected.length === 0) return "";
|
|
155
|
+
if (expected.length === 1) return expected[0];
|
|
156
|
+
return `${expected.slice(0, -1).join(", ")} or ${expected[expected.length - 1]}`;
|
|
155
157
|
};
|
|
156
158
|
const hexBytes = (bytes) => Array.from(bytes, (b) => `0x${b.toString(16).padStart(2, "0")}`).join(" ");
|
|
157
159
|
const describeFound = (input, offset, encoding) => {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
return JSON.stringify(String.fromCodePoint(cp));
|
|
172
|
-
}
|
|
173
|
-
if (input instanceof Uint8Array) {
|
|
174
|
-
return `0x${input[offset].toString(16).padStart(2, "0")}`;
|
|
175
|
-
}
|
|
176
|
-
return inspectToken(input[offset]);
|
|
160
|
+
if (offset >= input.length) return "end of input";
|
|
161
|
+
if (encoding !== void 0 && input instanceof Uint8Array) {
|
|
162
|
+
const cp = encoding.decode(input, offset, input.length);
|
|
163
|
+
if (cp >= 0) return JSON.stringify(String.fromCodePoint(cp));
|
|
164
|
+
const bad = input.subarray(offset, Math.min(input.length, offset + Math.max(encoding.unit, 1)));
|
|
165
|
+
return cp === text.Truncated ? `incomplete ${encoding.name} sequence ${hexBytes(input.subarray(offset))}` : `invalid ${encoding.name} ${hexBytes(bad)}`;
|
|
166
|
+
}
|
|
167
|
+
if (Predicate.isString(input)) {
|
|
168
|
+
const cp = input.codePointAt(offset) ?? NaN;
|
|
169
|
+
return JSON.stringify(String.fromCodePoint(cp));
|
|
170
|
+
}
|
|
171
|
+
if (input instanceof Uint8Array) return `0x${input[offset].toString(16).padStart(2, "0")}`;
|
|
172
|
+
return inspectToken(input[offset]);
|
|
177
173
|
};
|
|
178
174
|
/** @internal */
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
return String(u);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
return String(u);
|
|
175
|
+
const inspectToken = (u) => {
|
|
176
|
+
if (Predicate.isString(u)) return JSON.stringify(u);
|
|
177
|
+
if (Predicate.isObjectOrArray(u)) try {
|
|
178
|
+
return JSON.stringify(u);
|
|
179
|
+
} catch {
|
|
180
|
+
return String(u);
|
|
181
|
+
}
|
|
182
|
+
return String(u);
|
|
191
183
|
};
|
|
192
184
|
const causeMessage = (cause) => {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
if (cause instanceof Error)
|
|
198
|
-
return cause.message;
|
|
199
|
-
if (typeof cause === "object" && cause !== null && "message" in cause && typeof cause.message === "string") {
|
|
200
|
-
return cause.message;
|
|
201
|
-
}
|
|
202
|
-
return inspectToken(cause);
|
|
185
|
+
if (cause === void 0) return void 0;
|
|
186
|
+
if (Predicate.isString(cause)) return cause;
|
|
187
|
+
if (Predicate.isObjectOrArray(cause) && "message" in cause && Predicate.isString(cause.message)) return cause.message;
|
|
188
|
+
return inspectToken(cause);
|
|
203
189
|
};
|
|
204
190
|
const renderSnippet = (input, offset, encoding) => {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
return [
|
|
249
|
-
`${gutter} | ${text}`,
|
|
250
|
-
`${pad} | ${" ".repeat(column - 1)}^`
|
|
251
|
-
];
|
|
252
|
-
}
|
|
253
|
-
if (input instanceof Uint8Array) {
|
|
254
|
-
const start = Math.max(0, offset - 8);
|
|
255
|
-
const end = Math.min(input.length, offset + 8);
|
|
256
|
-
const bytes = [];
|
|
257
|
-
for (let i = start; i < end; i++)
|
|
258
|
-
bytes.push(input[i].toString(16).padStart(2, "0"));
|
|
259
|
-
const caret = (offset - start) * 3;
|
|
260
|
-
return [
|
|
261
|
-
`${start.toString(16).padStart(8, "0")} | ${bytes.join(" ")}`,
|
|
262
|
-
`${" ".repeat(8)} | ${" ".repeat(caret)}^`
|
|
263
|
-
];
|
|
264
|
-
}
|
|
265
|
-
return [];
|
|
191
|
+
if (encoding !== void 0 && input instanceof Uint8Array) {
|
|
192
|
+
let lineStart = 0;
|
|
193
|
+
let end = input.length;
|
|
194
|
+
let column = 1;
|
|
195
|
+
text.walk(encoding, input, 0, input.length, (cp, i, w) => {
|
|
196
|
+
if (i >= offset && cp === 10) {
|
|
197
|
+
end = i;
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
if (i < offset) {
|
|
201
|
+
if (cp === 10) {
|
|
202
|
+
lineStart = i + w;
|
|
203
|
+
column = 1;
|
|
204
|
+
} else column++;
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
let line = text.lenientText(encoding, input, lineStart, end);
|
|
208
|
+
if (line.endsWith("\r")) line = line.slice(0, -1);
|
|
209
|
+
const gutter = String(lineColumn(input, offset, encoding).line);
|
|
210
|
+
const pad = " ".repeat(gutter.length);
|
|
211
|
+
return [`${gutter} | ${line}`, `${pad} | ${" ".repeat(column - 1)}^`];
|
|
212
|
+
}
|
|
213
|
+
if (Predicate.isString(input)) {
|
|
214
|
+
const { column, line } = lineColumn(input, offset);
|
|
215
|
+
let start = offset;
|
|
216
|
+
while (start > 0 && input.charCodeAt(start - 1) !== 10) start--;
|
|
217
|
+
let end = offset;
|
|
218
|
+
while (end < input.length && input.charCodeAt(end) !== 10) end++;
|
|
219
|
+
let text = input.slice(start, end);
|
|
220
|
+
if (text.endsWith("\r")) text = text.slice(0, -1);
|
|
221
|
+
const gutter = String(line);
|
|
222
|
+
const pad = " ".repeat(gutter.length);
|
|
223
|
+
return [`${gutter} | ${text}`, `${pad} | ${" ".repeat(column - 1)}^`];
|
|
224
|
+
}
|
|
225
|
+
if (input instanceof Uint8Array) {
|
|
226
|
+
const start = Math.max(0, offset - 8);
|
|
227
|
+
const end = Math.min(input.length, offset + 8);
|
|
228
|
+
const bytes = [];
|
|
229
|
+
for (let i = start; i < end; i++) bytes.push(input[i].toString(16).padStart(2, "0"));
|
|
230
|
+
const caret = (offset - start) * 3;
|
|
231
|
+
return [`${start.toString(16).padStart(8, "0")} | ${bytes.join(" ")}`, `${" ".repeat(8)} | ${" ".repeat(caret)}^`];
|
|
232
|
+
}
|
|
233
|
+
return [];
|
|
266
234
|
};
|
|
267
235
|
const render = (error) => {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
if (cause !== undefined)
|
|
287
|
-
lines.push(cause);
|
|
288
|
-
if (error.description !== undefined)
|
|
289
|
-
lines.push(error.description);
|
|
290
|
-
if (error.mode === "Incomplete") {
|
|
291
|
-
lines.push("unexpected end of input (incomplete)");
|
|
292
|
-
}
|
|
293
|
-
else if (error.expected.length > 0) {
|
|
294
|
-
lines.push(`expected ${formatExpected(error.expected)}, found ${describeFound(input, offset, encoding)}`);
|
|
295
|
-
}
|
|
296
|
-
else if (cause === undefined && error.description === undefined) {
|
|
297
|
-
lines.push(`unexpected ${describeFound(input, offset, encoding)} (${error.kind})`);
|
|
298
|
-
}
|
|
299
|
-
return lines.join("\n");
|
|
236
|
+
const { encoding, input, offset } = error;
|
|
237
|
+
const lines = [];
|
|
238
|
+
if (Predicate.isString(input)) {
|
|
239
|
+
const { column, line } = lineColumn(input, offset);
|
|
240
|
+
lines.push(`Parse error at line ${line}, column ${column}:`);
|
|
241
|
+
} else if (encoding !== void 0) {
|
|
242
|
+
const { column, line } = lineColumn(input, offset, encoding);
|
|
243
|
+
lines.push(`Parse error at line ${line}, column ${column} (byte ${offset}):`);
|
|
244
|
+
} else lines.push(`Parse error at offset ${offset}:`);
|
|
245
|
+
lines.push(...renderSnippet(input, offset, encoding));
|
|
246
|
+
for (let i = error.context.length - 1; i >= 0; i--) lines.push(`while parsing ${error.context[i]}`);
|
|
247
|
+
const cause = causeMessage(error.cause);
|
|
248
|
+
if (cause !== void 0) lines.push(cause);
|
|
249
|
+
if (error.description !== void 0) lines.push(error.description);
|
|
250
|
+
if (error.mode === "Incomplete") lines.push("unexpected end of input (incomplete)");
|
|
251
|
+
else if (error.expected.length > 0) lines.push(`expected ${formatExpected(error.expected)}, found ${describeFound(input, offset, encoding)}`);
|
|
252
|
+
else if (cause === void 0 && error.description === void 0) lines.push(`unexpected ${describeFound(input, offset, encoding)} (${error.kind})`);
|
|
253
|
+
return lines.join("\n");
|
|
300
254
|
};
|
|
255
|
+
//#endregion
|
|
256
|
+
export { ParseError, TypeId, formatExpected, fromFailure, getCause, inspectToken, isParseError, lineColumn };
|
|
257
|
+
|
|
301
258
|
//# sourceMappingURL=ParseError.js.map
|
package/dist/ParseError.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParseError.js","sourceRoot":"","sources":["../src/ParseError.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AA2C1C;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAA+B,0BAA0B,CAAA;AAE5E;;;;;GAKG;AACH,MAAM,OAAO,UAA0B,SAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAsB1E;IACA;;OAEG;IACM,CAAC,MAAM,CAAC,GAAkB,MAAM,CAAA;IAEzC;;;;;OAKG;IACH,IAAI,QAAQ;QACV,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3D,CAAC;IAED;;;;OAIG;IACH,IAAa,OAAO;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC;IAED;;OAEG;IACM,QAAQ;QACf,OAAO,eAAe,IAAI,CAAC,OAAO,EAAE,CAAA;IACtC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAU,EAA4B,EAAE,CACnE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAY,EACZ,OAAgB,EAChB,IAAa,EACb,QAAoC,EACrB,EAAE,CACjB,IAAI,UAAU,CAAI;IAChB,KAAK;IACL,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,IAAI;IACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ;IAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;IACxB,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAU,CAAC,CAAC,CAAC,SAAS;IACxD,WAAW,EAAE,OAAO,CAAC,OAAO;IAC5B,QAAQ,EAAE,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;CAC7D,CAAC,CAAA;AAEJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,IAAmB,EAAoB,EAAE,CACnE,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAapE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,MAAc,EAAE,QAAoC,EAAc,EAAE;IAC3G,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAC1D,IAAI,IAAI,GAAG,CAAC,CAAA;QACZ,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;YACnE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACd,IAAI,EAAE,CAAA;gBACN,MAAM,GAAG,CAAC,CAAA;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAA;YACV,CAAC;QACH,CAAC,CAAC,CAAA;QACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;IACzB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAA;IACrE,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,SAAS,GAAG,CAAC,CAAA;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAC/B,IAAI,EAAE,CAAA;YACN,SAAS,GAAG,CAAC,GAAG,CAAC,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;AAC/F,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,KAAa,EAAE,GAAW,EAAU,EAAE;IACvE,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACzB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAC7B,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM;gBAAE,CAAC,EAAE,CAAA;QACrC,CAAC;QACD,CAAC,EAAE,CAAA;IACL,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAA+B,EAAU,EAAE;IACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAE,CAAA;IAC9C,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAA;AAClF,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAU,EAAE,CAC7C,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAE5E,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,MAAc,EAAE,QAAmC,EAAU,EAAE;IAClG,IAAI,MAAM,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,cAAc,CAAA;IACjD,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAC1D,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACvD,IAAI,EAAE,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/F,OAAO,EAAE,KAAK,IAAI,CAAC,SAAS;YAC1B,CAAC,CAAC,cAAc,QAAQ,CAAC,IAAI,aAAa,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;YAC5E,CAAC,CAAC,WAAW,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAA;IACjD,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAE,CAAA;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAA;IACjD,CAAC;IACD,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,KAAK,KAAK,CAAC,MAAM,CAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;IAC5D,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;AACpC,CAAC,CAAA;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAU,EAAU,EAAE;IACjD,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACnD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,KAAc,EAAsB,EAAE;IAC1D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAA;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3G,OAAO,KAAK,CAAC,OAAO,CAAA;IACtB,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,MAAc,EAAE,QAAmC,EAAiB,EAAE;IACzG,IAAI,QAAQ,KAAK,SAAS,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAC1D,oDAAoD;QACpD,IAAI,SAAS,GAAG,CAAC,CAAA;QACjB,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAA;QACtB,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YACvD,IAAI,CAAC,IAAI,MAAM,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC7B,GAAG,GAAG,CAAC,CAAA;gBACP,OAAO,KAAK,CAAA;YACd,CAAC;YACD,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC;gBACf,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBACd,SAAS,GAAG,CAAC,GAAG,CAAC,CAAA;oBACjB,MAAM,GAAG,CAAC,CAAA;gBACZ,CAAC;qBAAM,CAAC;oBACN,MAAM,EAAE,CAAA;gBACV,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QACF,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAA;QAC5D,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAA;QAC/D,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACrC,OAAO;YACL,GAAG,MAAM,MAAM,IAAI,EAAE;YACrB,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;SACtC,CAAA;IACH,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAClD,IAAI,KAAK,GAAG,MAAM,CAAA;QAClB,OAAO,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE;YAAE,KAAK,EAAE,CAAA;QAC/D,IAAI,GAAG,GAAG,MAAM,CAAA;QAChB,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE;YAAE,GAAG,EAAE,CAAA;QAChE,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACrC,OAAO;YACL,GAAG,MAAM,MAAM,IAAI,EAAE;YACrB,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;SACtC,CAAA;IACH,CAAC;IACD,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAA;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAA;QAC9C,MAAM,KAAK,GAAkB,EAAE,CAAA;QAC/B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QACrF,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;QAClC,OAAO;YACL,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC7D,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;SAC3C,CAAA;IACH,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,KAA0B,EAAU,EAAE;IACpD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACzC,MAAM,KAAK,GAAkB,EAAE,CAAA;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAClD,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,YAAY,MAAM,GAAG,CAAC,CAAA;IAC9D,CAAC;SAAM,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC5D,KAAK,CAAC,IAAI,CAAC,uBAAuB,IAAI,YAAY,MAAM,UAAU,MAAM,IAAI,CAAC,CAAA;IAC/E,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,GAAG,CAAC,CAAA;IAChD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAA;IACrD,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACjD,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1C,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IAClE,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAA;IACpD,CAAC;SAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,YAAY,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC3G,CAAC;SAAM,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,cAAc,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,CAAC,CAAA;IACpF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"ParseError.js","names":[],"sources":["../src/ParseError.ts"],"sourcesContent":["/**\n * The error type produced when running a parser.\n *\n * `ParseError` merges winnow's `ContextError`/`ParseError` and nom's\n * `VerboseError`. It records where parsing failed, what was expected there,\n * the context labels that were active, and an optional typed `cause`\n * produced by `Parser.fail`, `Parser.tryMap` and friends. Its `message`\n * shows the failing position in the input:\n *\n * ```text\n * Parse error at line 1, column 4:\n * 1 | [1,,2]\n * | ^\n * expected digit\n * ```\n *\n * `ParseError` is a `Data.TaggedError`, so it can be yielded directly inside\n * `Effect.gen`.\n *\n * @since 0.1.0\n */\nimport * as Predicate from \"effect/Predicate\"\nimport * as Data from \"effect/Data\"\nimport * as Option from \"effect/Option\"\nimport type { Encoding } from \"./Encoding.js\"\nimport type { ErrMode, Failure, Input } from \"./Input.js\"\nimport * as text from \"./internal/text.js\"\n\n/**\n * The kind of parser that produced an error, in the spirit of nom's\n * `ErrorKind`.\n *\n * `\"TooDeep\"` is not produced by a parser: the runners report it when\n * deeply nested input exhausts the call stack (see `Parser.suspend`).\n *\n * @since 0.1.0\n * @category models\n */\nexport type ErrorKind =\n | \"Alpha\"\n | \"AlphaNumeric\"\n | \"Alt\"\n | \"Assert\"\n | \"Bits\"\n | \"Complete\"\n | \"CrLf\"\n | \"Digit\"\n | \"Dispatch\"\n | \"Eof\"\n | \"Escaped\"\n | \"Fail\"\n | \"Float\"\n | \"HexDigit\"\n | \"Incomplete\"\n | \"LineEnding\"\n | \"Literal\"\n | \"Many\"\n | \"MultiSpace\"\n | \"NoneOf\"\n | \"Not\"\n | \"OctDigit\"\n | \"OneOf\"\n | \"Permutation\"\n | \"Separated\"\n | \"Slice\"\n | \"Space\"\n | \"Take\"\n | \"TakeUntil\"\n | \"TakeWhile\"\n | \"Token\"\n | \"TooDeep\"\n | \"Verify\"\n\n/**\n * @since 0.1.0\n * @category type ids\n */\nexport const TypeId = \"~effect-parse/ParseError\" as const\n\n/**\n * An error produced by running a parser.\n *\n * @since 0.1.0\n * @category models\n */\nexport class ParseError<out E = never>\n extends /*#__PURE__*/ Data.TaggedError(\"ParseError\")<{\n /** The input that was being parsed. */\n readonly input: Input\n /** The offset of the failure in the input. */\n readonly offset: number\n /** The kind of parser that failed. */\n readonly kind: ErrorKind\n /** How the error propagated before parsing stopped. */\n readonly mode: ErrMode\n /** Descriptions of what was expected at `offset`. */\n readonly expected: ReadonlyArray<string>\n /** Context labels (`Parser.context`), innermost first. */\n readonly context: ReadonlyArray<string>\n /** The user supplied cause, if any. */\n readonly cause: E | undefined\n /** An optional free-form description. */\n readonly description: string | undefined\n /**\n * For byte inputs parsed by `Text` parsers, the text encoding. Errors\n * then show the input as text, with line and column numbers.\n */\n readonly encoding?: Encoding<Uint8Array> | undefined\n }>\n{\n /**\n * @since 0.1.0\n */\n readonly [TypeId]: typeof TypeId = TypeId\n\n /**\n * The 1-based line and column of the failure (for strings and encoded\n * text; for other inputs the line is 1 and the column is `offset + 1`).\n *\n * @since 0.1.0\n */\n get position(): LineColumn {\n return lineColumn(this.input, this.offset, this.encoding)\n }\n\n /**\n * The rendered, human-readable error message.\n *\n * @since 0.1.0\n */\n override get message(): string {\n return render(this)\n }\n\n /**\n * @since 0.1.0\n */\n override toString(): string {\n return `ParseError: ${this.message}`\n }\n}\n\n/**\n * @since 0.1.0\n * @category guards\n */\nexport const isParseError = (u: unknown): u is ParseError<unknown> => Predicate.isObjectOrArray(u) && TypeId in u\n\n/**\n * Builds a `ParseError` from the failure details recorded while parsing.\n *\n * @since 0.1.0\n * @category constructors\n */\nexport const fromFailure = <E = never>(\n input: Input,\n failure: Failure,\n mode: ErrMode,\n encoding?: Encoding<any> | undefined\n): ParseError<E> =>\n new ParseError<E>({\n input,\n offset: failure.offset,\n kind: failure.kind,\n mode,\n expected: failure.expected,\n context: failure.context,\n cause: failure.hasCause ? (failure.cause as E) : undefined,\n description: failure.message,\n encoding: input instanceof Uint8Array ? encoding : undefined\n })\n\n/**\n * The user supplied cause of an error, if any.\n *\n * @since 0.1.0\n * @category getters\n */\nexport const getCause = <E>(self: ParseError<E>): Option.Option<E> =>\n self.cause === undefined ? Option.none() : Option.some(self.cause)\n\n/**\n * A 1-based line/column position.\n *\n * @since 0.1.0\n * @category models\n */\nexport interface LineColumn {\n readonly line: number\n readonly column: number\n}\n\n/**\n * Computes the 1-based line and column (in code points) of an offset. Lines\n * are separated by `\\n`. Byte inputs are read as text when an `encoding`\n * is given. For other inputs the line is always 1 and the column is\n * `offset + 1`.\n *\n * @since 0.1.0\n * @category utils\n */\nexport const lineColumn = (input: Input, offset: number, encoding?: Encoding<any> | undefined): LineColumn => {\n if (encoding !== undefined && input instanceof Uint8Array) {\n let line = 1\n let column = 1\n text.walk(encoding, input, 0, Math.min(offset, input.length), (cp) => {\n if (cp === 10) {\n line++\n column = 1\n } else {\n column++\n }\n })\n return { line, column }\n }\n if (!Predicate.isString(input)) return { line: 1, column: offset + 1 }\n let line = 1\n let lineStart = 0\n for (let i = 0; i < offset && i < input.length; i++) {\n if (input.charCodeAt(i) === 10) {\n line++\n lineStart = i + 1\n }\n }\n return { line, column: codePointCount(input, lineStart, Math.min(offset, input.length)) + 1 }\n}\n\nconst codePointCount = (s: string, start: number, end: number): number => {\n let n = 0\n for (let i = start; i < end; i++) {\n const c = s.charCodeAt(i)\n if (c >= 0xd800 && c <= 0xdbff && i + 1 < end) {\n const d = s.charCodeAt(i + 1)\n if (d >= 0xdc00 && d <= 0xdfff) i++\n }\n n++\n }\n return n\n}\n\n/**\n * Formats a list of expectations: `a`, `a or b`, `a, b or c`.\n *\n * @since 0.1.0\n * @category utils\n */\nexport const formatExpected = (expected: ReadonlyArray<string>): string => {\n if (expected.length === 0) return \"\"\n if (expected.length === 1) return expected[0]\n return `${expected.slice(0, -1).join(\", \")} or ${expected[expected.length - 1]}`\n}\n\nconst hexBytes = (bytes: Uint8Array): string =>\n Array.from(bytes, (b) => `0x${b.toString(16).padStart(2, \"0\")}`).join(\" \")\n\nconst describeFound = (input: Input, offset: number, encoding: Encoding<any> | undefined): string => {\n if (offset >= input.length) return \"end of input\"\n if (encoding !== undefined && input instanceof Uint8Array) {\n const cp = encoding.decode(input, offset, input.length)\n if (cp >= 0) return JSON.stringify(String.fromCodePoint(cp))\n const bad = input.subarray(offset, Math.min(input.length, offset + Math.max(encoding.unit, 1)))\n return cp === text.Truncated\n ? `incomplete ${encoding.name} sequence ${hexBytes(input.subarray(offset))}`\n : `invalid ${encoding.name} ${hexBytes(bad)}`\n }\n if (Predicate.isString(input)) {\n const cp = input.codePointAt(offset) ?? Number.NaN\n return JSON.stringify(String.fromCodePoint(cp))\n }\n if (input instanceof Uint8Array) {\n return `0x${input[offset].toString(16).padStart(2, \"0\")}`\n }\n return inspectToken(input[offset])\n}\n\n/** @internal */\nexport const inspectToken = (u: unknown): string => {\n if (Predicate.isString(u)) return JSON.stringify(u)\n if (Predicate.isObjectOrArray(u)) {\n try {\n return JSON.stringify(u)\n } catch {\n return String(u)\n }\n }\n return String(u)\n}\n\nconst causeMessage = (cause: unknown): string | undefined => {\n if (cause === undefined) return undefined\n if (Predicate.isString(cause)) return cause\n // An `Error`'s message, or any other object's string `message`\n if (Predicate.isObjectOrArray(cause) && \"message\" in cause && Predicate.isString(cause.message)) {\n return cause.message\n }\n return inspectToken(cause)\n}\n\nconst renderSnippet = (input: Input, offset: number, encoding: Encoding<any> | undefined): Array<string> => {\n if (encoding !== undefined && input instanceof Uint8Array) {\n // Find the line containing `offset`, then decode it\n let lineStart = 0\n let end = input.length\n let column = 1\n text.walk(encoding, input, 0, input.length, (cp, i, w) => {\n if (i >= offset && cp === 10) {\n end = i\n return false\n }\n if (i < offset) {\n if (cp === 10) {\n lineStart = i + w\n column = 1\n } else {\n column++\n }\n }\n })\n let line = text.lenientText(encoding, input, lineStart, end)\n if (line.endsWith(\"\\r\")) line = line.slice(0, -1)\n const gutter = String(lineColumn(input, offset, encoding).line)\n const pad = \" \".repeat(gutter.length)\n return [`${gutter} | ${line}`, `${pad} | ${\" \".repeat(column - 1)}^`]\n }\n if (Predicate.isString(input)) {\n const { column, line } = lineColumn(input, offset)\n let start = offset\n while (start > 0 && input.charCodeAt(start - 1) !== 10) start--\n let end = offset\n while (end < input.length && input.charCodeAt(end) !== 10) end++\n let text = input.slice(start, end)\n if (text.endsWith(\"\\r\")) text = text.slice(0, -1)\n const gutter = String(line)\n const pad = \" \".repeat(gutter.length)\n return [`${gutter} | ${text}`, `${pad} | ${\" \".repeat(column - 1)}^`]\n }\n if (input instanceof Uint8Array) {\n const start = Math.max(0, offset - 8)\n const end = Math.min(input.length, offset + 8)\n const bytes: Array<string> = []\n for (let i = start; i < end; i++) bytes.push(input[i].toString(16).padStart(2, \"0\"))\n const caret = (offset - start) * 3\n return [`${start.toString(16).padStart(8, \"0\")} | ${bytes.join(\" \")}`, `${\" \".repeat(8)} | ${\" \".repeat(caret)}^`]\n }\n return []\n}\n\nconst render = (error: ParseError<unknown>): string => {\n const { encoding, input, offset } = error\n const lines: Array<string> = []\n if (Predicate.isString(input)) {\n const { column, line } = lineColumn(input, offset)\n lines.push(`Parse error at line ${line}, column ${column}:`)\n } else if (encoding !== undefined) {\n const { column, line } = lineColumn(input, offset, encoding)\n lines.push(`Parse error at line ${line}, column ${column} (byte ${offset}):`)\n } else {\n lines.push(`Parse error at offset ${offset}:`)\n }\n lines.push(...renderSnippet(input, offset, encoding))\n for (let i = error.context.length - 1; i >= 0; i--) {\n lines.push(`while parsing ${error.context[i]}`)\n }\n const cause = causeMessage(error.cause)\n if (cause !== undefined) lines.push(cause)\n if (error.description !== undefined) lines.push(error.description)\n if (error.mode === \"Incomplete\") {\n lines.push(\"unexpected end of input (incomplete)\")\n } else if (error.expected.length > 0) {\n lines.push(`expected ${formatExpected(error.expected)}, found ${describeFound(input, offset, encoding)}`)\n } else if (cause === undefined && error.description === undefined) {\n lines.push(`unexpected ${describeFound(input, offset, encoding)} (${error.kind})`)\n }\n return lines.join(\"\\n\")\n}\n"],"mappings":"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"}
|