@thomasfosterau/effect-parse 0.5.0 → 0.6.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/CHANGELOG.md +202 -0
- package/README.md +19 -1
- package/dist/Ascii.d.ts.map +1 -1
- package/dist/Ascii.js +5 -3
- package/dist/Ascii.js.map +1 -1
- package/dist/Binary.d.ts +5 -2
- package/dist/Binary.d.ts.map +1 -1
- package/dist/Binary.js +20 -3
- package/dist/Binary.js.map +1 -1
- package/dist/Bits.d.ts.map +1 -1
- package/dist/Bits.js +4 -0
- package/dist/Bits.js.map +1 -1
- package/dist/Input.d.ts +21 -3
- package/dist/Input.d.ts.map +1 -1
- package/dist/Input.js +31 -4
- package/dist/Input.js.map +1 -1
- package/dist/Nom.d.ts.map +1 -1
- package/dist/ParseError.d.ts +69 -11
- package/dist/ParseError.d.ts.map +1 -1
- package/dist/ParseError.js +129 -28
- package/dist/ParseError.js.map +1 -1
- package/dist/Parser.d.ts +10 -4
- package/dist/Parser.d.ts.map +1 -1
- package/dist/Parser.js +10 -24
- package/dist/Parser.js.map +1 -1
- package/dist/ParserSchema.d.ts.map +1 -1
- package/dist/ParserSchema.js +1 -2
- package/dist/ParserSchema.js.map +1 -1
- package/dist/ParserStream.d.ts +119 -12
- package/dist/ParserStream.d.ts.map +1 -1
- package/dist/ParserStream.js +282 -55
- package/dist/ParserStream.js.map +1 -1
- package/dist/Syntax.js +1 -1
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +13 -7
- package/dist/Text.js.map +1 -1
- package/dist/Token.d.ts +10 -1
- package/dist/Token.d.ts.map +1 -1
- package/dist/Token.js +14 -5
- package/dist/Token.js.map +1 -1
- package/dist/internal/compiler/closure.d.ts +1 -1
- package/dist/internal/compiler/closure.d.ts.map +1 -1
- package/dist/internal/compiler/closure.js +7 -17
- package/dist/internal/compiler/closure.js.map +1 -1
- package/dist/internal/compiler/first.d.ts.map +1 -1
- package/dist/internal/compiler/first.js +2 -1
- package/dist/internal/compiler/first.js.map +1 -1
- package/dist/internal/compiler/graph.d.ts +23 -1
- package/dist/internal/compiler/graph.d.ts.map +1 -1
- package/dist/internal/compiler/graph.js +27 -5
- package/dist/internal/compiler/graph.js.map +1 -1
- package/dist/internal/compiler/jit.d.ts.map +1 -1
- package/dist/internal/compiler/jit.js +26 -13
- package/dist/internal/compiler/jit.js.map +1 -1
- package/dist/internal/compiler/registry.d.ts +1 -1
- package/dist/internal/compiler/wasm.d.ts.map +1 -1
- package/dist/internal/compiler/wasm.js +105 -34
- package/dist/internal/compiler/wasm.js.map +1 -1
- package/dist/internal/node.d.ts +19 -1
- package/dist/internal/node.d.ts.map +1 -1
- package/dist/internal/node.js +42 -8
- package/dist/internal/node.js.map +1 -1
- package/dist/internal/run.d.ts +3 -1
- package/dist/internal/run.d.ts.map +1 -1
- package/dist/internal/run.js +4 -2
- package/dist/internal/run.js.map +1 -1
- package/dist/internal/stack.d.ts +8 -0
- package/dist/internal/stack.d.ts.map +1 -1
- package/dist/internal/stack.js +17 -1
- package/dist/internal/stack.js.map +1 -1
- package/dist/internal/tokens.d.ts +10 -3
- package/dist/internal/tokens.d.ts.map +1 -1
- package/dist/internal/tokens.js +22 -9
- package/dist/internal/tokens.js.map +1 -1
- package/dist/internal/tuple.d.ts +6 -0
- package/dist/internal/tuple.d.ts.map +1 -0
- package/dist/internal/tuple.js +170 -0
- package/dist/internal/tuple.js.map +1 -0
- package/package.json +17 -10
- package/src/Ascii.ts +5 -3
- package/src/Binary.ts +24 -3
- package/src/Bits.ts +4 -0
- package/src/Input.ts +37 -4
- package/src/ParseError.ts +206 -52
- package/src/Parser.ts +19 -29
- package/src/ParserSchema.ts +1 -2
- package/src/ParserStream.ts +336 -62
- package/src/Text.ts +16 -12
- package/src/Token.ts +14 -5
- package/src/internal/compiler/closure.ts +9 -18
- package/src/internal/compiler/first.ts +6 -0
- package/src/internal/compiler/graph.ts +32 -4
- package/src/internal/compiler/jit.ts +37 -17
- package/src/internal/compiler/wasm.ts +141 -68
- package/src/internal/node.ts +49 -3
- package/src/internal/run.ts +4 -2
- package/src/internal/stack.ts +17 -0
- package/src/internal/tokens.ts +20 -10
- package/src/internal/tuple.ts +141 -0
package/dist/Parser.js
CHANGED
|
@@ -2,6 +2,7 @@ import * as Predicate from "effect/Predicate";
|
|
|
2
2
|
import * as Result from "effect/Result";
|
|
3
3
|
import { Fail, Failure, State, mergeExpected, mergeFailures, mergeTiedFailures } from "./Input.js";
|
|
4
4
|
import { Key } from "./internal/key.js";
|
|
5
|
+
import { Defer as Defer$1, NodeId, bounds, describedNode } from "./internal/node.js";
|
|
5
6
|
import * as Resume from "./internal/resume.js";
|
|
6
7
|
import * as Registry from "./internal/compiler/registry.js";
|
|
7
8
|
import * as Run from "./internal/run.js";
|
|
@@ -17,7 +18,7 @@ import { pipeArguments } from "effect/Pipeable";
|
|
|
17
18
|
import * as ParseError from "./ParseError.js";
|
|
18
19
|
import * as Entries from "./internal/entries.js";
|
|
19
20
|
import * as Stack from "./internal/stack.js";
|
|
20
|
-
import {
|
|
21
|
+
import { tupleStep } from "./internal/tuple.js";
|
|
21
22
|
// src/Parser.ts
|
|
22
23
|
/**
|
|
23
24
|
* The `Parser` data type and its general-purpose combinators.
|
|
@@ -1282,17 +1283,8 @@ const allConsuming = (self) => terminated(self, eof);
|
|
|
1282
1283
|
* @category sequencing
|
|
1283
1284
|
*/
|
|
1284
1285
|
const seq = (...parsers) => {
|
|
1285
|
-
const
|
|
1286
|
-
|
|
1287
|
-
return described((state) => {
|
|
1288
|
-
const out = new Array(n);
|
|
1289
|
-
for (let i = 0; i < n; i++) {
|
|
1290
|
-
const a = steps[i](state);
|
|
1291
|
-
if (a === Fail) return Fail;
|
|
1292
|
-
out[i] = a;
|
|
1293
|
-
}
|
|
1294
|
-
return out;
|
|
1295
|
-
}, "seq", {
|
|
1286
|
+
const step = tupleStep(parsers.map((p) => p.step));
|
|
1287
|
+
return described(step, "seq", {
|
|
1296
1288
|
_tag: "Seq",
|
|
1297
1289
|
parsers,
|
|
1298
1290
|
output: "tuple"
|
|
@@ -1735,11 +1727,7 @@ const permutation = (...parsers) => {
|
|
|
1735
1727
|
}, "permutation");
|
|
1736
1728
|
};
|
|
1737
1729
|
const normalizeRange = (range) => {
|
|
1738
|
-
|
|
1739
|
-
if (Predicate.isNumber(range)) return [range, range];
|
|
1740
|
-
const min = range.min ?? 0;
|
|
1741
|
-
const max = range.max ?? Infinity;
|
|
1742
|
-
if (min > max) throw new RangeError(`invalid range: min (${min}) > max (${max})`);
|
|
1730
|
+
const { max, min } = bounds(range);
|
|
1743
1731
|
return [min, max];
|
|
1744
1732
|
};
|
|
1745
1733
|
const assertConsumes = (state, name) => state.failMessage("Cut", "Assert", `\`${name}\` parsers must always consume`);
|
|
@@ -1751,7 +1739,6 @@ const saveFold = (state, key, entry, acc, pos) => Resume.save(state, key, entry,
|
|
|
1751
1739
|
const foldImpl = (self, range, init, f, name, node, cond) => {
|
|
1752
1740
|
const [min, max] = normalizeRange(range);
|
|
1753
1741
|
const step = self.step;
|
|
1754
|
-
const checkLoop = max === Infinity;
|
|
1755
1742
|
const key = new Key();
|
|
1756
1743
|
return described((state) => {
|
|
1757
1744
|
const entry = state.pos;
|
|
@@ -1781,7 +1768,7 @@ const foldImpl = (self, range, init, f, name, node, cond) => {
|
|
|
1781
1768
|
recover(state, start);
|
|
1782
1769
|
return Resume.done(state, key, entry, resumed !== void 0, acc);
|
|
1783
1770
|
}
|
|
1784
|
-
if (
|
|
1771
|
+
if (state.pos === start) return assertConsumes(state, name);
|
|
1785
1772
|
acc = f(acc, a);
|
|
1786
1773
|
}
|
|
1787
1774
|
return Resume.done(state, key, entry, resumed !== void 0, acc);
|
|
@@ -1803,9 +1790,9 @@ const foldImpl = (self, range, init, f, name, node, cond) => {
|
|
|
1803
1790
|
* exactly that many times. With a literal positive `min`, the output is
|
|
1804
1791
|
* typed as a non-empty array.
|
|
1805
1792
|
*
|
|
1806
|
-
*
|
|
1807
|
-
*
|
|
1808
|
-
*
|
|
1793
|
+
* A parser that succeeds without consuming input fails the repetition with
|
|
1794
|
+
* an unrecoverable `Assert` failure, whatever the range (winnow checks only
|
|
1795
|
+
* unbounded ones): a bound can come from the input (`Binary.lengthRepeat`).
|
|
1809
1796
|
*
|
|
1810
1797
|
* @example
|
|
1811
1798
|
* ```ts
|
|
@@ -1913,7 +1900,6 @@ const separated = /*#__PURE__*/ dual(isTwoParserArgs, (self, separator, range) =
|
|
|
1913
1900
|
const [min, max] = normalizeRange(range);
|
|
1914
1901
|
const step = self.step;
|
|
1915
1902
|
const sepStep = separator.step;
|
|
1916
|
-
const checkLoop = max === Infinity;
|
|
1917
1903
|
const key = new Key();
|
|
1918
1904
|
return described((state) => {
|
|
1919
1905
|
const entry = state.pos;
|
|
@@ -1949,7 +1935,7 @@ const separated = /*#__PURE__*/ dual(isTwoParserArgs, (self, separator, range) =
|
|
|
1949
1935
|
recover(state, start);
|
|
1950
1936
|
return Resume.done(state, key, entry, resumed !== void 0, acc);
|
|
1951
1937
|
}
|
|
1952
|
-
if (
|
|
1938
|
+
if (state.pos === start) return assertConsumes(state, "separated");
|
|
1953
1939
|
const a = step(state);
|
|
1954
1940
|
if (a === Fail) {
|
|
1955
1941
|
if (state.mode === "Incomplete" && state.resume !== void 0) Resume.save(state, key, entry, {
|