@thomasfosterau/effect-parse 0.0.0-stage → 0.1.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.
Files changed (133) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +550 -2
  3. package/dist/Ascii.d.ts +392 -0
  4. package/dist/Ascii.d.ts.map +1 -0
  5. package/dist/Ascii.js +610 -0
  6. package/dist/Ascii.js.map +1 -0
  7. package/dist/Binary.d.ts +153 -0
  8. package/dist/Binary.d.ts.map +1 -0
  9. package/dist/Binary.js +171 -0
  10. package/dist/Binary.js.map +1 -0
  11. package/dist/Bits.d.ts +60 -0
  12. package/dist/Bits.d.ts.map +1 -0
  13. package/dist/Bits.js +144 -0
  14. package/dist/Bits.js.map +1 -0
  15. package/dist/Encoding.d.ts +116 -0
  16. package/dist/Encoding.d.ts.map +1 -0
  17. package/dist/Encoding.js +85 -0
  18. package/dist/Encoding.js.map +1 -0
  19. package/dist/Expression.d.ts +124 -0
  20. package/dist/Expression.d.ts.map +1 -0
  21. package/dist/Expression.js +139 -0
  22. package/dist/Expression.js.map +1 -0
  23. package/dist/Input.d.ts +301 -0
  24. package/dist/Input.d.ts.map +1 -0
  25. package/dist/Input.js +312 -0
  26. package/dist/Input.js.map +1 -0
  27. package/dist/Nom.d.ts +518 -0
  28. package/dist/Nom.d.ts.map +1 -0
  29. package/dist/Nom.js +519 -0
  30. package/dist/Nom.js.map +1 -0
  31. package/dist/ParseError.d.ts +120 -0
  32. package/dist/ParseError.d.ts.map +1 -0
  33. package/dist/ParseError.js +301 -0
  34. package/dist/ParseError.js.map +1 -0
  35. package/dist/Parser.d.ts +1312 -0
  36. package/dist/Parser.d.ts.map +1 -0
  37. package/dist/Parser.js +1936 -0
  38. package/dist/Parser.js.map +1 -0
  39. package/dist/ParserSchema.d.ts +31 -0
  40. package/dist/ParserSchema.d.ts.map +1 -0
  41. package/dist/ParserSchema.js +56 -0
  42. package/dist/ParserSchema.js.map +1 -0
  43. package/dist/ParserStream.d.ts +127 -0
  44. package/dist/ParserStream.d.ts.map +1 -0
  45. package/dist/ParserStream.js +270 -0
  46. package/dist/ParserStream.js.map +1 -0
  47. package/dist/Text.d.ts +330 -0
  48. package/dist/Text.d.ts.map +1 -0
  49. package/dist/Text.js +529 -0
  50. package/dist/Text.js.map +1 -0
  51. package/dist/Token.d.ts +225 -0
  52. package/dist/Token.d.ts.map +1 -0
  53. package/dist/Token.js +294 -0
  54. package/dist/Token.js.map +1 -0
  55. package/dist/index.d.ts +17 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +17 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/internal/compiler/closure.d.ts +25 -0
  60. package/dist/internal/compiler/closure.d.ts.map +1 -0
  61. package/dist/internal/compiler/closure.js +1668 -0
  62. package/dist/internal/compiler/closure.js.map +1 -0
  63. package/dist/internal/compiler/entries.d.ts +19 -0
  64. package/dist/internal/compiler/entries.d.ts.map +1 -0
  65. package/dist/internal/compiler/entries.js +32 -0
  66. package/dist/internal/compiler/entries.js.map +1 -0
  67. package/dist/internal/compiler/first.d.ts +33 -0
  68. package/dist/internal/compiler/first.d.ts.map +1 -0
  69. package/dist/internal/compiler/first.js +235 -0
  70. package/dist/internal/compiler/first.js.map +1 -0
  71. package/dist/internal/compiler/jit.d.ts +20 -0
  72. package/dist/internal/compiler/jit.d.ts.map +1 -0
  73. package/dist/internal/compiler/jit.js +1030 -0
  74. package/dist/internal/compiler/jit.js.map +1 -0
  75. package/dist/internal/compiler/registry.d.ts +34 -0
  76. package/dist/internal/compiler/registry.d.ts.map +1 -0
  77. package/dist/internal/compiler/registry.js +46 -0
  78. package/dist/internal/compiler/registry.js.map +1 -0
  79. package/dist/internal/compiler/sets.d.ts +29 -0
  80. package/dist/internal/compiler/sets.d.ts.map +1 -0
  81. package/dist/internal/compiler/sets.js +85 -0
  82. package/dist/internal/compiler/sets.js.map +1 -0
  83. package/dist/internal/entries.d.ts +27 -0
  84. package/dist/internal/entries.d.ts.map +1 -0
  85. package/dist/internal/entries.js +42 -0
  86. package/dist/internal/entries.js.map +1 -0
  87. package/dist/internal/node.d.ts +251 -0
  88. package/dist/internal/node.d.ts.map +1 -0
  89. package/dist/internal/node.js +73 -0
  90. package/dist/internal/node.js.map +1 -0
  91. package/dist/internal/numbers.d.ts +41 -0
  92. package/dist/internal/numbers.d.ts.map +1 -0
  93. package/dist/internal/numbers.js +302 -0
  94. package/dist/internal/numbers.js.map +1 -0
  95. package/dist/internal/resume.d.ts +39 -0
  96. package/dist/internal/resume.d.ts.map +1 -0
  97. package/dist/internal/resume.js +37 -0
  98. package/dist/internal/resume.js.map +1 -0
  99. package/dist/internal/text.d.ts +72 -0
  100. package/dist/internal/text.d.ts.map +1 -0
  101. package/dist/internal/text.js +391 -0
  102. package/dist/internal/text.js.map +1 -0
  103. package/dist/internal/tokens.d.ts +93 -0
  104. package/dist/internal/tokens.d.ts.map +1 -0
  105. package/dist/internal/tokens.js +400 -0
  106. package/dist/internal/tokens.js.map +1 -0
  107. package/package.json +115 -3
  108. package/src/Ascii.ts +741 -0
  109. package/src/Binary.ts +228 -0
  110. package/src/Bits.ts +192 -0
  111. package/src/Encoding.ts +128 -0
  112. package/src/Expression.ts +245 -0
  113. package/src/Input.ts +429 -0
  114. package/src/Nom.ts +642 -0
  115. package/src/ParseError.ts +378 -0
  116. package/src/Parser.ts +2763 -0
  117. package/src/ParserSchema.ts +87 -0
  118. package/src/ParserStream.ts +390 -0
  119. package/src/Text.ts +757 -0
  120. package/src/Token.ts +416 -0
  121. package/src/index.ts +16 -0
  122. package/src/internal/compiler/closure.ts +1583 -0
  123. package/src/internal/compiler/entries.ts +36 -0
  124. package/src/internal/compiler/first.ts +252 -0
  125. package/src/internal/compiler/jit.ts +1091 -0
  126. package/src/internal/compiler/registry.ts +79 -0
  127. package/src/internal/compiler/sets.ts +100 -0
  128. package/src/internal/entries.ts +51 -0
  129. package/src/internal/node.ts +207 -0
  130. package/src/internal/numbers.ts +291 -0
  131. package/src/internal/resume.ts +55 -0
  132. package/src/internal/text.ts +411 -0
  133. package/src/internal/tokens.ts +409 -0
@@ -0,0 +1,301 @@
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";
23
+ import * as Option from "effect/Option";
24
+ import * as text from "./internal/text.js";
25
+ /**
26
+ * @since 0.1.0
27
+ * @category type ids
28
+ */
29
+ export const TypeId = "~effect-parse/ParseError";
30
+ /**
31
+ * An error produced by running a parser.
32
+ *
33
+ * @since 0.1.0
34
+ * @category models
35
+ */
36
+ export class ParseError extends Data.TaggedError("ParseError") {
37
+ /**
38
+ * @since 0.1.0
39
+ */
40
+ [TypeId] = TypeId;
41
+ /**
42
+ * The 1-based line and column of the failure (for strings and encoded
43
+ * text; for other inputs the line is 1 and the column is `offset + 1`).
44
+ *
45
+ * @since 0.1.0
46
+ */
47
+ get position() {
48
+ return lineColumn(this.input, this.offset, this.encoding);
49
+ }
50
+ /**
51
+ * The rendered, human-readable error message.
52
+ *
53
+ * @since 0.1.0
54
+ */
55
+ get message() {
56
+ return render(this);
57
+ }
58
+ /**
59
+ * @since 0.1.0
60
+ */
61
+ toString() {
62
+ return `ParseError: ${this.message}`;
63
+ }
64
+ }
65
+ /**
66
+ * @since 0.1.0
67
+ * @category guards
68
+ */
69
+ export const isParseError = (u) => typeof u === "object" && u !== null && TypeId in u;
70
+ /**
71
+ * Builds a `ParseError` from the failure details recorded while parsing.
72
+ *
73
+ * @since 0.1.0
74
+ * @category constructors
75
+ */
76
+ export const fromFailure = (input, failure, mode, encoding) => new ParseError({
77
+ input,
78
+ offset: failure.offset,
79
+ kind: failure.kind,
80
+ mode,
81
+ expected: failure.expected,
82
+ context: failure.context,
83
+ cause: failure.hasCause ? failure.cause : undefined,
84
+ description: failure.message,
85
+ encoding: input instanceof Uint8Array ? encoding : undefined
86
+ });
87
+ /**
88
+ * The user supplied cause of an error, if any.
89
+ *
90
+ * @since 0.1.0
91
+ * @category getters
92
+ */
93
+ export const getCause = (self) => self.cause === undefined ? Option.none() : Option.some(self.cause);
94
+ /**
95
+ * Computes the 1-based line and column (in code points) of an offset. Lines
96
+ * are separated by `\n`. Byte inputs are read as text when an `encoding`
97
+ * is given. For other inputs the line is always 1 and the column is
98
+ * `offset + 1`.
99
+ *
100
+ * @since 0.1.0
101
+ * @category utils
102
+ */
103
+ export const lineColumn = (input, offset, encoding) => {
104
+ if (encoding !== undefined && input instanceof Uint8Array) {
105
+ let line = 1;
106
+ let column = 1;
107
+ text.walk(encoding, input, 0, Math.min(offset, input.length), (cp) => {
108
+ if (cp === 10) {
109
+ line++;
110
+ column = 1;
111
+ }
112
+ else {
113
+ column++;
114
+ }
115
+ });
116
+ return { line, column };
117
+ }
118
+ if (typeof input !== "string")
119
+ return { line: 1, column: offset + 1 };
120
+ let line = 1;
121
+ let lineStart = 0;
122
+ for (let i = 0; i < offset && i < input.length; i++) {
123
+ if (input.charCodeAt(i) === 10) {
124
+ line++;
125
+ lineStart = i + 1;
126
+ }
127
+ }
128
+ return { line, column: codePointCount(input, lineStart, Math.min(offset, input.length)) + 1 };
129
+ };
130
+ const codePointCount = (s, start, end) => {
131
+ let n = 0;
132
+ for (let i = start; i < end; i++) {
133
+ const c = s.charCodeAt(i);
134
+ if (c >= 0xd800 && c <= 0xdbff && i + 1 < end) {
135
+ const d = s.charCodeAt(i + 1);
136
+ if (d >= 0xdc00 && d <= 0xdfff)
137
+ i++;
138
+ }
139
+ n++;
140
+ }
141
+ return n;
142
+ };
143
+ /**
144
+ * Formats a list of expectations: `a`, `a or b`, `a, b or c`.
145
+ *
146
+ * @since 0.1.0
147
+ * @category utils
148
+ */
149
+ export const formatExpected = (expected) => {
150
+ if (expected.length === 0)
151
+ return "";
152
+ if (expected.length === 1)
153
+ return expected[0];
154
+ return `${expected.slice(0, -1).join(", ")} or ${expected[expected.length - 1]}`;
155
+ };
156
+ const hexBytes = (bytes) => Array.from(bytes, (b) => `0x${b.toString(16).padStart(2, "0")}`).join(" ");
157
+ const describeFound = (input, offset, encoding) => {
158
+ if (offset >= input.length)
159
+ return "end of input";
160
+ if (encoding !== undefined && input instanceof Uint8Array) {
161
+ const cp = encoding.decode(input, offset, input.length);
162
+ if (cp >= 0)
163
+ 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
166
+ ? `incomplete ${encoding.name} sequence ${hexBytes(input.subarray(offset))}`
167
+ : `invalid ${encoding.name} ${hexBytes(bad)}`;
168
+ }
169
+ if (typeof input === "string") {
170
+ const cp = input.codePointAt(offset);
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]);
177
+ };
178
+ /** @internal */
179
+ export const inspectToken = (u) => {
180
+ if (typeof u === "string")
181
+ return JSON.stringify(u);
182
+ if (typeof u === "object" && u !== null) {
183
+ try {
184
+ return JSON.stringify(u);
185
+ }
186
+ catch {
187
+ return String(u);
188
+ }
189
+ }
190
+ return String(u);
191
+ };
192
+ const causeMessage = (cause) => {
193
+ if (cause === undefined)
194
+ return undefined;
195
+ if (typeof cause === "string")
196
+ return cause;
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);
203
+ };
204
+ const renderSnippet = (input, offset, encoding) => {
205
+ if (encoding !== undefined && input instanceof Uint8Array) {
206
+ // Find the line containing `offset`, then decode it
207
+ let lineStart = 0;
208
+ let end = input.length;
209
+ let column = 1;
210
+ text.walk(encoding, input, 0, input.length, (cp, i, w) => {
211
+ if (i >= offset && cp === 10) {
212
+ end = i;
213
+ return false;
214
+ }
215
+ if (i < offset) {
216
+ if (cp === 10) {
217
+ lineStart = i + w;
218
+ column = 1;
219
+ }
220
+ else {
221
+ column++;
222
+ }
223
+ }
224
+ });
225
+ let line = text.lenientText(encoding, input, lineStart, end);
226
+ if (line.endsWith("\r"))
227
+ line = line.slice(0, -1);
228
+ const gutter = String(lineColumn(input, offset, encoding).line);
229
+ const pad = " ".repeat(gutter.length);
230
+ return [
231
+ `${gutter} | ${line}`,
232
+ `${pad} | ${" ".repeat(column - 1)}^`
233
+ ];
234
+ }
235
+ if (typeof input === "string") {
236
+ const { column, line } = lineColumn(input, offset);
237
+ let start = offset;
238
+ while (start > 0 && input.charCodeAt(start - 1) !== 10)
239
+ start--;
240
+ let end = offset;
241
+ while (end < input.length && input.charCodeAt(end) !== 10)
242
+ end++;
243
+ let text = input.slice(start, end);
244
+ if (text.endsWith("\r"))
245
+ text = text.slice(0, -1);
246
+ const gutter = String(line);
247
+ const pad = " ".repeat(gutter.length);
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 [];
266
+ };
267
+ const render = (error) => {
268
+ const { encoding, input, offset } = error;
269
+ const lines = [];
270
+ if (typeof input === "string") {
271
+ const { column, line } = lineColumn(input, offset);
272
+ lines.push(`Parse error at line ${line}, column ${column}:`);
273
+ }
274
+ else if (encoding !== undefined) {
275
+ const { column, line } = lineColumn(input, offset, encoding);
276
+ lines.push(`Parse error at line ${line}, column ${column} (byte ${offset}):`);
277
+ }
278
+ else {
279
+ lines.push(`Parse error at offset ${offset}:`);
280
+ }
281
+ lines.push(...renderSnippet(input, offset, encoding));
282
+ for (let i = error.context.length - 1; i >= 0; i--) {
283
+ lines.push(`while parsing ${error.context[i]}`);
284
+ }
285
+ const cause = causeMessage(error.cause);
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");
300
+ };
301
+ //# sourceMappingURL=ParseError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParseError.js","sourceRoot":"","sources":["../src/ParseError.ts"],"names":[],"mappings":"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"}