effect-grammar 0.0.2 → 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.
- package/LICENSE +21 -0
- package/README.md +123 -64
- package/dist/combinators.d.ts +64 -27
- package/dist/combinators.d.ts.map +1 -1
- package/dist/combinators.js +73 -91
- package/dist/combinators.js.map +1 -1
- package/dist/core.d.ts +85 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +34 -0
- package/dist/core.js.map +1 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +27 -0
- package/dist/errors.js.map +1 -0
- package/dist/grammar.d.ts +7 -190
- package/dist/grammar.d.ts.map +1 -1
- package/dist/grammar.js +7 -494
- package/dist/grammar.js.map +1 -1
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/parse.d.ts +5 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +157 -0
- package/dist/parse.js.map +1 -0
- package/dist/print.d.ts +5 -0
- package/dist/print.d.ts.map +1 -0
- package/dist/print.js +121 -0
- package/dist/print.js.map +1 -0
- package/dist/render.d.ts +5 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +64 -0
- package/dist/render.js.map +1 -0
- package/dist/schema.d.ts +6 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +9 -0
- package/dist/schema.js.map +1 -0
- package/package.json +22 -21
- package/dist/error.d.ts +0 -28
- package/dist/error.d.ts.map +0 -1
- package/dist/error.js +0 -52
- package/dist/error.js.map +0 -1
- package/dist/parser.d.ts +0 -6
- package/dist/parser.d.ts.map +0 -1
- package/dist/parser.js +0 -6
- package/dist/parser.js.map +0 -1
- package/dist/run.d.ts +0 -6
- package/dist/run.d.ts.map +0 -1
- package/dist/run.js +0 -11
- package/dist/run.js.map +0 -1
- package/dist/state.d.ts +0 -51
- package/dist/state.d.ts.map +0 -1
- package/dist/state.js +0 -114
- package/dist/state.js.map +0 -1
- package/dist/stream.d.ts +0 -18
- package/dist/stream.d.ts.map +0 -1
- package/dist/stream.js +0 -38
- package/dist/stream.js.map +0 -1
package/dist/run.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEvC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAExD,yFAAyF;AACzF,MAAM,CAAC,MAAM,KAAK,GAAG,CAAO,KAAa,EAAE,CAAkC,EAAE,EAAE,CAC/E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IAC3C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAClB,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC;IACxC,qDAAqD;IACrD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC9D,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACpF,CAAA;AACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA"}
|
package/dist/state.d.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Context, Effect, Option, Pull, Ref } from "effect";
|
|
2
|
-
import { ParseError, UpstreamError } from "./error.ts";
|
|
3
|
-
/**
|
|
4
|
-
* The cursor a parser runs against. The same shape backs whole-string parsing
|
|
5
|
-
* (`makeStringState`: buffer pre-filled, `done` from the start) and streaming
|
|
6
|
-
* parsing (`makeStreamState`: `fill` pulls chunks from upstream on demand).
|
|
7
|
-
*
|
|
8
|
-
* Positions are absolute and monotonic. `base` is the absolute position of
|
|
9
|
-
* `buffer[0]`; `release` drops consumed input before `pos`, which is only
|
|
10
|
-
* done at points where no backtrack can reach it.
|
|
11
|
-
*/
|
|
12
|
-
export interface ParseStateShape {
|
|
13
|
-
readonly buffer: Ref.Ref<string>;
|
|
14
|
-
readonly pos: Ref.Ref<number>;
|
|
15
|
-
readonly base: Ref.Ref<number>;
|
|
16
|
-
readonly fill: Effect.Effect<void, UpstreamError>;
|
|
17
|
-
readonly done: Ref.Ref<boolean>;
|
|
18
|
-
}
|
|
19
|
-
declare const ParseState_base: Context.ServiceClass<ParseState, "ParseState", ParseStateShape>;
|
|
20
|
-
export declare class ParseState extends ParseState_base {
|
|
21
|
-
}
|
|
22
|
-
export declare const makeStringState: (input: string) => Effect.Effect<ParseStateShape>;
|
|
23
|
-
export declare const makeStreamState: <E>(pull: Pull.Pull<ReadonlyArray<string>, E>) => Effect.Effect<ParseStateShape>;
|
|
24
|
-
export declare const getPos: Effect.Effect<number, never, ParseState>;
|
|
25
|
-
export declare const seek: (p: number) => Effect.Effect<undefined, never, ParseState>;
|
|
26
|
-
/** The character at the cursor, or `undefined` at end of input. Pulls upstream if needed. */
|
|
27
|
-
export declare const peek: Effect.Effect<string | undefined, UpstreamError, ParseState>;
|
|
28
|
-
/** Whether the cursor is at end of input. Pulls upstream until a chunk arrives or it ends. */
|
|
29
|
-
export declare const isEof: Effect.Effect<boolean, UpstreamError, ParseState>;
|
|
30
|
-
/**
|
|
31
|
-
* Whether the input at the cursor starts with `s`. Pulls at most until `s`
|
|
32
|
-
* is decided — bounded by the length of `s`.
|
|
33
|
-
*/
|
|
34
|
-
export declare const startsWith: (s: string) => Effect.Effect<boolean, UpstreamError, ParseState>;
|
|
35
|
-
/**
|
|
36
|
-
* Match `re` at the cursor. Streaming caveat: while upstream is alive, a
|
|
37
|
-
* match that reaches the end of the buffer may extend (maximal munch), and a
|
|
38
|
-
* failed match may succeed after more input — so this pulls until the match
|
|
39
|
-
* stabilizes. At a choice point over a long stream, prefer `literal`/`char`
|
|
40
|
-
* alternatives, which decide within bounded input.
|
|
41
|
-
*/
|
|
42
|
-
export declare const matchRegex: (re: RegExp) => Effect.Effect<Option.Option<string>, UpstreamError, ParseState>;
|
|
43
|
-
/**
|
|
44
|
-
* Drop buffered input before the cursor. Only call where no backtrack can
|
|
45
|
-
* reach before `pos` (e.g. between top-level elements of a stream) — `seek`
|
|
46
|
-
* before the released point defects.
|
|
47
|
-
*/
|
|
48
|
-
export declare const release: Effect.Effect<void, never, ParseState>;
|
|
49
|
-
export declare const failHere: (expected: string) => Effect.Effect<never, ParseError | UpstreamError, ParseState>;
|
|
50
|
-
export {};
|
|
51
|
-
//# sourceMappingURL=state.d.ts.map
|
package/dist/state.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEtD;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;IACjD,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;CAChC;;AAED,qBAAa,UAAW,SAAQ,eAA4D;CAAG;AAE/F,eAAO,MAAM,eAAe,UAAW,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CASzE,CAAA;AAEJ,eAAO,MAAM,eAAe,GAAI,CAAC,QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KACxC,MAAM,CAAC,MAAM,CAAC,eAAe,CAkB5B,CAAA;AAEJ,eAAO,MAAM,MAAM,0CAAwD,CAAA;AAE3E,eAAO,MAAM,IAAI,MAAO,MAAM,gDAS1B,CAAA;AAQJ,6FAA6F;AAC7F,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,UAAU,CAU7E,CAAA;AAED,8FAA8F;AAC9F,eAAO,MAAM,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,CAGnE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,MAAO,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,UAAU,CAUnF,CAAA;AAEJ;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,OACjB,MAAM,KACT,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,UAAU,CAc7D,CAAA;AAEJ;;;;GAIG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAQzD,CAAA;AAEF,eAAO,MAAM,QAAQ,aAAc,MAAM,iEAIrC,CAAA"}
|
package/dist/state.js
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { Context, Effect, Option, Pull, Ref } from "effect";
|
|
2
|
-
import { ParseError, UpstreamError } from "./error.js";
|
|
3
|
-
export class ParseState extends Context.Service()("ParseState") {
|
|
4
|
-
}
|
|
5
|
-
export const makeStringState = (input) => Effect.gen(function* () {
|
|
6
|
-
return {
|
|
7
|
-
buffer: yield* Ref.make(input),
|
|
8
|
-
pos: yield* Ref.make(0),
|
|
9
|
-
base: yield* Ref.make(0),
|
|
10
|
-
fill: Effect.void,
|
|
11
|
-
done: yield* Ref.make(true),
|
|
12
|
-
};
|
|
13
|
-
});
|
|
14
|
-
export const makeStreamState = (pull) => Effect.gen(function* () {
|
|
15
|
-
const buffer = yield* Ref.make("");
|
|
16
|
-
const done = yield* Ref.make(false);
|
|
17
|
-
const next = pull.pipe(Pull.catchDone(() => Effect.succeed(undefined)), Effect.mapError((cause) => new UpstreamError({ cause })));
|
|
18
|
-
const fill = Effect.gen(function* () {
|
|
19
|
-
if (yield* Ref.get(done))
|
|
20
|
-
return;
|
|
21
|
-
const chunk = yield* next;
|
|
22
|
-
if (chunk === undefined) {
|
|
23
|
-
yield* Ref.set(done, true);
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
yield* Ref.update(buffer, (b) => b + chunk.join(""));
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
return { buffer, pos: yield* Ref.make(0), base: yield* Ref.make(0), fill, done };
|
|
30
|
-
});
|
|
31
|
-
export const getPos = Effect.flatMap(ParseState, ({ pos }) => Ref.get(pos));
|
|
32
|
-
export const seek = (p) => Effect.gen(function* () {
|
|
33
|
-
const { pos, base } = yield* ParseState;
|
|
34
|
-
if (p < (yield* Ref.get(base))) {
|
|
35
|
-
return yield* Effect.die(new Error(`cannot rewind to position ${p}: input before it was released`));
|
|
36
|
-
}
|
|
37
|
-
yield* Ref.set(pos, p);
|
|
38
|
-
});
|
|
39
|
-
/** The buffered, not-yet-consumed input. */
|
|
40
|
-
const remaining = Effect.gen(function* () {
|
|
41
|
-
const { buffer, pos, base } = yield* ParseState;
|
|
42
|
-
return (yield* Ref.get(buffer)).slice((yield* Ref.get(pos)) - (yield* Ref.get(base)));
|
|
43
|
-
});
|
|
44
|
-
/** The character at the cursor, or `undefined` at end of input. Pulls upstream if needed. */
|
|
45
|
-
export const peek = Effect.gen(function* () {
|
|
46
|
-
const { fill, done } = yield* ParseState;
|
|
47
|
-
let rest = yield* remaining;
|
|
48
|
-
while (rest.length === 0 && !(yield* Ref.get(done))) {
|
|
49
|
-
yield* fill;
|
|
50
|
-
rest = yield* remaining;
|
|
51
|
-
}
|
|
52
|
-
return rest[0];
|
|
53
|
-
});
|
|
54
|
-
/** Whether the cursor is at end of input. Pulls upstream until a chunk arrives or it ends. */
|
|
55
|
-
export const isEof = Effect.map(peek, (c) => c === undefined);
|
|
56
|
-
/**
|
|
57
|
-
* Whether the input at the cursor starts with `s`. Pulls at most until `s`
|
|
58
|
-
* is decided — bounded by the length of `s`.
|
|
59
|
-
*/
|
|
60
|
-
export const startsWith = (s) => Effect.gen(function* () {
|
|
61
|
-
const { fill, done } = yield* ParseState;
|
|
62
|
-
while (true) {
|
|
63
|
-
const rest = yield* remaining;
|
|
64
|
-
if (rest.length >= s.length)
|
|
65
|
-
return rest.startsWith(s);
|
|
66
|
-
if (!s.startsWith(rest))
|
|
67
|
-
return false;
|
|
68
|
-
if (yield* Ref.get(done))
|
|
69
|
-
return false;
|
|
70
|
-
yield* fill;
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
/**
|
|
74
|
-
* Match `re` at the cursor. Streaming caveat: while upstream is alive, a
|
|
75
|
-
* match that reaches the end of the buffer may extend (maximal munch), and a
|
|
76
|
-
* failed match may succeed after more input — so this pulls until the match
|
|
77
|
-
* stabilizes. At a choice point over a long stream, prefer `literal`/`char`
|
|
78
|
-
* alternatives, which decide within bounded input.
|
|
79
|
-
*/
|
|
80
|
-
export const matchRegex = (re) => Effect.gen(function* () {
|
|
81
|
-
const { fill, done } = yield* ParseState;
|
|
82
|
-
while (true) {
|
|
83
|
-
const rest = yield* remaining;
|
|
84
|
-
// Reset so /g and /y do not carry lastIndex across matches or fills.
|
|
85
|
-
re.lastIndex = 0;
|
|
86
|
-
const m = re.exec(rest);
|
|
87
|
-
const matched = m !== null && m.index === 0;
|
|
88
|
-
const exhausted = yield* Ref.get(done);
|
|
89
|
-
if (matched && (m[0].length < rest.length || exhausted))
|
|
90
|
-
return Option.some(m[0]);
|
|
91
|
-
if (exhausted)
|
|
92
|
-
return Option.none();
|
|
93
|
-
yield* fill;
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
/**
|
|
97
|
-
* Drop buffered input before the cursor. Only call where no backtrack can
|
|
98
|
-
* reach before `pos` (e.g. between top-level elements of a stream) — `seek`
|
|
99
|
-
* before the released point defects.
|
|
100
|
-
*/
|
|
101
|
-
export const release = Effect.gen(function* () {
|
|
102
|
-
const { buffer, pos, base } = yield* ParseState;
|
|
103
|
-
const p = yield* Ref.get(pos);
|
|
104
|
-
const b = yield* Ref.get(base);
|
|
105
|
-
if (p > b) {
|
|
106
|
-
yield* Ref.update(buffer, (buf) => buf.slice(p - b));
|
|
107
|
-
yield* Ref.set(base, p);
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
export const failHere = (expected) => Effect.gen(function* () {
|
|
111
|
-
const pos = yield* getPos;
|
|
112
|
-
return yield* new ParseError({ pos, expected, found: yield* peek });
|
|
113
|
-
});
|
|
114
|
-
//# sourceMappingURL=state.js.map
|
package/dist/state.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|
package/dist/stream.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Effect, Scope, Stream } from "effect";
|
|
2
|
-
import { UpstreamError } from "./error.ts";
|
|
3
|
-
import { ParseState } from "./state.ts";
|
|
4
|
-
/**
|
|
5
|
-
* Run a parser once over a stream of chunks, pulling input on demand. The
|
|
6
|
-
* parser sees one continuous input; chunk boundaries are invisible to it.
|
|
7
|
-
* Upstream failures surface as `UpstreamError`.
|
|
8
|
-
*/
|
|
9
|
-
export declare const parseStream: <A, E, E2, R2>(input: Stream.Stream<string, E2, R2>, p: Effect.Effect<A, E, ParseState>) => Effect.Effect<A, E | UpstreamError, Exclude<R2, Scope.Scope>>;
|
|
10
|
-
/**
|
|
11
|
-
* Parse a stream of chunks into a stream of values: run `element` repeatedly
|
|
12
|
-
* until end of input, emitting each value as soon as it parses. Consumed
|
|
13
|
-
* input is released between elements, so memory stays bounded by one
|
|
14
|
-
* element (unless an `attempt` inside the element holds more). Each element
|
|
15
|
-
* must consume input — a zero-width element is a defect.
|
|
16
|
-
*/
|
|
17
|
-
export declare const streamElements: <A, E, E2, R2>(input: Stream.Stream<string, E2, R2>, element: Effect.Effect<A, E, ParseState>) => Stream.Stream<A, E | UpstreamError, Exclude<R2, Scope.Scope>>;
|
|
18
|
-
//# sourceMappingURL=stream.d.ts.map
|
package/dist/stream.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAkC,UAAU,EAAW,MAAM,YAAY,CAAA;AAEhF;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,SAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,KACjC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,KACjC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAO5D,CAAA;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,SAClC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,WAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,KACvC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAqB5D,CAAA"}
|
package/dist/stream.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Effect, Option, Scope, Stream } from "effect";
|
|
2
|
-
import { UpstreamError } from "./error.js";
|
|
3
|
-
import { getPos, isEof, makeStreamState, ParseState, release } from "./state.js";
|
|
4
|
-
/**
|
|
5
|
-
* Run a parser once over a stream of chunks, pulling input on demand. The
|
|
6
|
-
* parser sees one continuous input; chunk boundaries are invisible to it.
|
|
7
|
-
* Upstream failures surface as `UpstreamError`.
|
|
8
|
-
*/
|
|
9
|
-
export const parseStream = (input, p) => Effect.scoped(Effect.gen(function* () {
|
|
10
|
-
const pull = yield* Stream.toPull(input);
|
|
11
|
-
const state = yield* makeStreamState(pull);
|
|
12
|
-
return yield* p.pipe(Effect.provideService(ParseState, state));
|
|
13
|
-
}));
|
|
14
|
-
/**
|
|
15
|
-
* Parse a stream of chunks into a stream of values: run `element` repeatedly
|
|
16
|
-
* until end of input, emitting each value as soon as it parses. Consumed
|
|
17
|
-
* input is released between elements, so memory stays bounded by one
|
|
18
|
-
* element (unless an `attempt` inside the element holds more). Each element
|
|
19
|
-
* must consume input — a zero-width element is a defect.
|
|
20
|
-
*/
|
|
21
|
-
export const streamElements = (input, element) => Stream.unwrap(Effect.gen(function* () {
|
|
22
|
-
const pull = yield* Stream.toPull(input);
|
|
23
|
-
const state = yield* makeStreamState(pull);
|
|
24
|
-
const withState = (eff) => eff.pipe(Effect.provideService(ParseState, state));
|
|
25
|
-
const step = Effect.gen(function* () {
|
|
26
|
-
if (yield* withState(isEof))
|
|
27
|
-
return [[], Option.none()];
|
|
28
|
-
const mark = yield* withState(getPos);
|
|
29
|
-
const a = yield* withState(element);
|
|
30
|
-
if ((yield* withState(getPos)) === mark) {
|
|
31
|
-
return yield* Effect.die(new Error("streamElements: element parser succeeded without consuming input"));
|
|
32
|
-
}
|
|
33
|
-
yield* withState(release);
|
|
34
|
-
return [[a], Option.some(undefined)];
|
|
35
|
-
});
|
|
36
|
-
return Stream.paginate(undefined, () => step);
|
|
37
|
-
}));
|
|
38
|
-
//# sourceMappingURL=stream.js.map
|
package/dist/stream.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEhF;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAoC,EACpC,CAAkC,EAC6B,EAAE,CACjE,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC1C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAA;AAChE,CAAC,CAAC,CACH,CAAA;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,KAAoC,EACpC,OAAwC,EACuB,EAAE,CACjE,MAAM,CAAC,MAAM,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC1C,MAAM,SAAS,GAAG,CAAQ,GAAqC,EAAE,EAAE,CACjE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAA;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/B,IAAI,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAU,CAAA;QAChE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QACrC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACtB,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAC9E,CAAA;QACH,CAAC;QACD,KAAK,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACzB,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAU,CAAA;IAC/C,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;AAC/C,CAAC,CAAC,CACH,CAAA"}
|