@thomasfosterau/effect-parse 0.0.0-stage → 0.0.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,225 @@
1
+ /**
2
+ * Parsers for individual tokens and slices of tokens (winnow's `token`
3
+ * module, nom's `bytes` module).
4
+ *
5
+ * Parsers here work on every input kind: `string` (tokens are code points),
6
+ * `Uint8Array` (tokens are bytes) and arrays (tokens are elements). Parsers
7
+ * whose input type cannot be inferred from their arguments take a type
8
+ * parameter that defaults to `string`:
9
+ *
10
+ * ```ts
11
+ * import { Token } from "@thomasfosterau/effect-parse"
12
+ *
13
+ * Token.take(4) // Parser<string, never, never, string>
14
+ * Token.take<Uint8Array>(4) // Parser<Uint8Array, never, never, Uint8Array>
15
+ * ```
16
+ *
17
+ * On partial input (see `Parser.parsePartial`), parsers that reach the end
18
+ * of the available data report `Incomplete` rather than succeeding early or
19
+ * failing.
20
+ *
21
+ * @since 0.1.0
22
+ */
23
+ import type { Input, Slice, Token } from "./Input.js";
24
+ import type { ErrorKind } from "./ParseError.js";
25
+ import type { Parser, Range } from "./Parser.js";
26
+ export type {
27
+ /**
28
+ * @since 0.1.0
29
+ * @category models
30
+ */
31
+ Token };
32
+ /**
33
+ * An inclusive range of tokens, e.g. `Token.range("a", "z")`.
34
+ *
35
+ * @since 0.1.0
36
+ * @category models
37
+ */
38
+ export interface TokenRange<T> {
39
+ readonly _tag: "TokenRange";
40
+ readonly from: T;
41
+ readonly to: T;
42
+ }
43
+ /**
44
+ * Creates an inclusive token range (winnow's `'a'..='z'`).
45
+ *
46
+ * @since 0.1.0
47
+ * @category constructors
48
+ */
49
+ export declare const range: <T extends string | number>(from: T, to: T) => TokenRange<T>;
50
+ /**
51
+ * A set of string tokens: the characters of a string, a range, a predicate,
52
+ * or an array of these.
53
+ *
54
+ * @since 0.1.0
55
+ * @category models
56
+ */
57
+ export type StringTokenSet = string | TokenRange<string> | ((char: string) => boolean) | ReadonlyArray<StringTokenSet>;
58
+ /**
59
+ * A set of byte tokens: a byte, the (ASCII) characters of a string, a
60
+ * `Uint8Array` of bytes, a range, a predicate, or an array of these.
61
+ *
62
+ * @since 0.1.0
63
+ * @category models
64
+ */
65
+ export type ByteTokenSet = number | string | Uint8Array | TokenRange<number> | ((byte: number) => boolean) | ReadonlyArray<ByteTokenSet>;
66
+ /**
67
+ * A set of tokens (winnow's `ContainsToken`). For array inputs, a set is a
68
+ * predicate or an array of allowed elements (compared with `===`).
69
+ *
70
+ * @since 0.1.0
71
+ * @category models
72
+ */
73
+ export type TokenSet<I> = I extends string ? StringTokenSet : I extends Uint8Array ? ByteTokenSet : I extends ReadonlyArray<infer T> ? ((token: T) => boolean) | ReadonlyArray<T> : never;
74
+ /**
75
+ * Matches any single token: a character of a string (winnow's `any`, nom's
76
+ * `anychar`).
77
+ *
78
+ * @since 0.1.0
79
+ * @category tokens
80
+ */
81
+ export declare const any: Parser<string>;
82
+ /**
83
+ * Matches any single token of an input of type `I`.
84
+ *
85
+ * @example
86
+ * ```ts
87
+ * import { Parser, Token } from "@thomasfosterau/effect-parse"
88
+ *
89
+ * const byte = Token.anyToken<Uint8Array>()
90
+ * Parser.parse(byte, new Uint8Array([7])) // Result.succeed(7)
91
+ * ```
92
+ *
93
+ * @since 0.1.0
94
+ * @category tokens
95
+ */
96
+ export declare const anyToken: <I extends Input = string>() => Parser<Token<NoInfer<I>>, never, never, NoInfer<I>>;
97
+ /**
98
+ * Matches a literal sequence of tokens (winnow's `literal`, nom's `tag`).
99
+ * Strings are matched against string input, `Uint8Array`s against byte
100
+ * input, and arrays element-wise (with `===`) against array input.
101
+ *
102
+ * @example
103
+ * ```ts
104
+ * import { Parser, Token } from "@thomasfosterau/effect-parse"
105
+ *
106
+ * const keyword = Parser.alt(Token.literal("true"), Token.literal("false"))
107
+ * // ^? Parser<"true" | "false">
108
+ * ```
109
+ *
110
+ * @since 0.1.0
111
+ * @category tokens
112
+ */
113
+ export declare const literal: {
114
+ <const L extends string>(literal: L): Parser<L, never, never, string>;
115
+ (literal: Uint8Array): Parser<Uint8Array, never, never, Uint8Array>;
116
+ <const T>(literal: ReadonlyArray<T>): Parser<ReadonlyArray<T>, never, never, ReadonlyArray<T>>;
117
+ };
118
+ /** @internal */
119
+ export declare const literalImpl: (lit: Input, caseless: boolean) => Parser<any, never, never, any>;
120
+ /**
121
+ * Matches one token belonging to a set, returning it (winnow's and nom's
122
+ * `one_of`).
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * import { Parser, Token } from "@thomasfosterau/effect-parse"
127
+ *
128
+ * const sign = Token.oneOf("+-")
129
+ * const lower = Token.oneOf(Token.range("a", "z"))
130
+ * const hexByte = Token.oneOf<Uint8Array>([Token.range(0x30, 0x39), Token.range(0x61, 0x66)])
131
+ * ```
132
+ *
133
+ * @since 0.1.0
134
+ * @category tokens
135
+ */
136
+ export declare const oneOf: <I extends Input = string>(set: TokenSet<I>) => Parser<Token<NoInfer<I>>, never, never, NoInfer<I>>;
137
+ /**
138
+ * Matches one token *not* belonging to a set, returning it (winnow's and
139
+ * nom's `none_of`).
140
+ *
141
+ * @since 0.1.0
142
+ * @category tokens
143
+ */
144
+ export declare const noneOf: <I extends Input = string>(set: TokenSet<I>) => Parser<Token<NoInfer<I>>, never, never, NoInfer<I>>;
145
+ /**
146
+ * Takes exactly `count` tokens (winnow's and nom's `take`).
147
+ *
148
+ * @since 0.1.0
149
+ * @category slices
150
+ */
151
+ export declare const take: <I extends Input = string>(count: number) => Parser<Slice<NoInfer<I>>, never, never, NoInfer<I>>;
152
+ /** @internal */
153
+ export declare const takeWhileImpl: <I extends Input>(set: unknown, r: Range | undefined, negate: boolean, name: string, description?: string, kind?: ErrorKind, hint?: boolean) => Parser<Slice<NoInfer<I>>, never, never, NoInfer<I>>;
154
+ /**
155
+ * Takes the longest run of tokens belonging to a set, with the number of
156
+ * tokens constrained by `range` (default: zero or more). This is winnow's
157
+ * `take_while(range, set)`, and nom's `take_while`, `take_while1` and
158
+ * `take_while_m_n`.
159
+ *
160
+ * @example
161
+ * ```ts
162
+ * import { Parser, Token } from "@thomasfosterau/effect-parse"
163
+ *
164
+ * const identifier = Token.takeWhile(
165
+ * [Token.range("a", "z"), Token.range("A", "Z"), "_"],
166
+ * { min: 1 }
167
+ * )
168
+ * ```
169
+ *
170
+ * @since 0.1.0
171
+ * @category slices
172
+ */
173
+ export declare const takeWhile: <I extends Input = string>(set: TokenSet<I>, range?: Range) => Parser<Slice<NoInfer<I>>, never, never, NoInfer<I>>;
174
+ /**
175
+ * Takes the longest run of tokens *not* belonging to a set (winnow's
176
+ * `take_till`, nom's `take_till` and `take_till1`).
177
+ *
178
+ * @since 0.1.0
179
+ * @category slices
180
+ */
181
+ export declare const takeTill: <I extends Input = string>(set: TokenSet<I>, range?: Range) => Parser<Slice<NoInfer<I>>, never, never, NoInfer<I>>;
182
+ /**
183
+ * Takes tokens up to (not including) the first occurrence of a literal
184
+ * (winnow's `take_until`, nom's `take_until`). The literal is not
185
+ * consumed. `range` constrains the number of tokens taken.
186
+ *
187
+ * @since 0.1.0
188
+ * @category slices
189
+ */
190
+ export declare const takeUntil: {
191
+ (literal: string, range?: Range): Parser<string, never, never, string>;
192
+ (literal: Uint8Array, range?: Range): Parser<Uint8Array, never, never, Uint8Array>;
193
+ <T>(literal: ReadonlyArray<T>, range?: Range): Parser<ReadonlyArray<T>, never, never, ReadonlyArray<T>>;
194
+ };
195
+ /**
196
+ * Takes the rest of the input (winnow's and nom's `rest`).
197
+ *
198
+ * @since 0.1.0
199
+ * @category slices
200
+ */
201
+ export declare const rest: Parser<string>;
202
+ /**
203
+ * Takes the rest of an input of type `I`.
204
+ *
205
+ * @since 0.1.0
206
+ * @category slices
207
+ */
208
+ export declare const restOf: <I extends Input = string>() => Parser<Slice<NoInfer<I>>, never, never, NoInfer<I>>;
209
+ /**
210
+ * Returns the length of the remaining input without consuming it (winnow's
211
+ * and nom's `rest_len`).
212
+ *
213
+ * @since 0.1.0
214
+ * @category slices
215
+ */
216
+ export declare const restLen: Parser<number, never, never, Input>;
217
+ /**
218
+ * Matches a token satisfying a predicate (nom's `satisfy`). Equivalent to
219
+ * `Token.oneOf(predicate)`.
220
+ *
221
+ * @since 0.1.0
222
+ * @category tokens
223
+ */
224
+ export declare const satisfy: <I extends Input = string>(predicate: (token: Token<I>) => boolean) => Parser<Token<NoInfer<I>>, never, never, NoInfer<I>>;
225
+ //# sourceMappingURL=Token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Token.d.ts","sourceRoot":"","sources":["../src/Token.ts"],"names":[],"mappings":"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"}
package/dist/Token.js ADDED
@@ -0,0 +1,294 @@
1
+ import { advance, compileAny, countTokens, describeBytes, End, indexOf, matchLiteral, nextIf, NoMatch, scan, splitSurrogate } from "./internal/tokens.js";
2
+ import { bounds } from "./internal/node.js";
3
+ import { described } from "./Parser.js";
4
+ /**
5
+ * Creates an inclusive token range (winnow's `'a'..='z'`).
6
+ *
7
+ * @since 0.1.0
8
+ * @category constructors
9
+ */
10
+ export const range = (from, to) => ({ _tag: "TokenRange", from, to });
11
+ const expectedAny = ["any token"];
12
+ const anyStep = (state) => {
13
+ const pos = state.pos;
14
+ if (pos >= state.end)
15
+ return state.eoi("Token", expectedAny, 1);
16
+ switch (state.inputKind) {
17
+ case 0: {
18
+ const s = state.input;
19
+ if (splitSurrogate(state, pos))
20
+ return state.incomplete(1, expectedAny);
21
+ const c = s.charCodeAt(pos);
22
+ if (c >= 0xd800 && c <= 0xdbff && pos + 1 < s.length && (s.charCodeAt(pos + 1) & 0xfc00) === 0xdc00) {
23
+ state.pos = pos + 2;
24
+ return s.slice(pos, pos + 2);
25
+ }
26
+ state.pos = pos + 1;
27
+ return s[pos];
28
+ }
29
+ case 1:
30
+ state.pos = pos + 1;
31
+ return state.input[pos];
32
+ default:
33
+ state.pos = pos + 1;
34
+ return state.input[pos];
35
+ }
36
+ };
37
+ /**
38
+ * Matches any single token: a character of a string (winnow's `any`, nom's
39
+ * `anychar`).
40
+ *
41
+ * @since 0.1.0
42
+ * @category tokens
43
+ */
44
+ export const any = described(anyStep, "any", { _tag: "Any", encoding: undefined });
45
+ /**
46
+ * Matches any single token of an input of type `I`.
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * import { Parser, Token } from "@thomasfosterau/effect-parse"
51
+ *
52
+ * const byte = Token.anyToken<Uint8Array>()
53
+ * Parser.parse(byte, new Uint8Array([7])) // Result.succeed(7)
54
+ * ```
55
+ *
56
+ * @since 0.1.0
57
+ * @category tokens
58
+ */
59
+ export const anyToken = () => any;
60
+ /**
61
+ * Matches a literal sequence of tokens (winnow's `literal`, nom's `tag`).
62
+ * Strings are matched against string input, `Uint8Array`s against byte
63
+ * input, and arrays element-wise (with `===`) against array input.
64
+ *
65
+ * @example
66
+ * ```ts
67
+ * import { Parser, Token } from "@thomasfosterau/effect-parse"
68
+ *
69
+ * const keyword = Parser.alt(Token.literal("true"), Token.literal("false"))
70
+ * // ^? Parser<"true" | "false">
71
+ * ```
72
+ *
73
+ * @since 0.1.0
74
+ * @category tokens
75
+ */
76
+ export const literal = (lit) => literalImpl(lit, false);
77
+ /** @internal */
78
+ export const literalImpl = (lit, caseless) => {
79
+ const description = typeof lit === "string"
80
+ ? JSON.stringify(lit)
81
+ : lit instanceof Uint8Array
82
+ ? describeBytes(lit)
83
+ : `[${lit.map((t) => JSON.stringify(t)).join(", ")}]`;
84
+ const expected = [caseless ? `${description} (case insensitive)` : description];
85
+ // A string literal may also be matched against byte input (as UTF-8)
86
+ let asBytes;
87
+ const literalKind = typeof lit === "string" ? 0 : lit instanceof Uint8Array ? 1 : 2;
88
+ return described((state) => {
89
+ const pos = state.pos;
90
+ const l = literalKind === 0 && state.inputKind === 1 ? (asBytes ??= new TextEncoder().encode(lit)) : lit;
91
+ const len = l.length;
92
+ const r = matchLiteral(state, l, caseless);
93
+ if (r === -1)
94
+ return state.backtrack("Literal", expected);
95
+ if (r === -2) {
96
+ if (state.partial)
97
+ return state.incomplete(len - (state.end - pos), expected);
98
+ return state.backtrack("Literal", expected);
99
+ }
100
+ state.pos = pos + len;
101
+ return caseless || state.inputKind !== literalKind ? state.slice(pos, pos + len) : lit;
102
+ }, description, { _tag: "Literal", literal: lit, caseless, encoding: undefined });
103
+ };
104
+ /**
105
+ * Matches one token belonging to a set, returning it (winnow's and nom's
106
+ * `one_of`).
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * import { Parser, Token } from "@thomasfosterau/effect-parse"
111
+ *
112
+ * const sign = Token.oneOf("+-")
113
+ * const lower = Token.oneOf(Token.range("a", "z"))
114
+ * const hexByte = Token.oneOf<Uint8Array>([Token.range(0x30, 0x39), Token.range(0x61, 0x66)])
115
+ * ```
116
+ *
117
+ * @since 0.1.0
118
+ * @category tokens
119
+ */
120
+ export const oneOf = (set) => {
121
+ const m = compileAny(set);
122
+ const expected = [m.description];
123
+ return described((state) => {
124
+ const t = nextIf(state, m, false);
125
+ if (t === End)
126
+ return state.eoi("OneOf", expected, 1);
127
+ if (t === NoMatch)
128
+ return state.backtrack("OneOf", expected);
129
+ return t;
130
+ }, m.description, { _tag: "OneOf", set, negate: false, encoding: undefined });
131
+ };
132
+ /**
133
+ * Matches one token *not* belonging to a set, returning it (winnow's and
134
+ * nom's `none_of`).
135
+ *
136
+ * @since 0.1.0
137
+ * @category tokens
138
+ */
139
+ export const noneOf = (set) => {
140
+ const m = compileAny(set);
141
+ const expected = [`anything but ${m.description}`];
142
+ return described((state) => {
143
+ const t = nextIf(state, m, true);
144
+ if (t === End)
145
+ return state.eoi("NoneOf", expected, 1);
146
+ if (t === NoMatch)
147
+ return state.backtrack("NoneOf", expected);
148
+ return t;
149
+ }, expected[0], { _tag: "OneOf", set, negate: true, encoding: undefined });
150
+ };
151
+ /**
152
+ * Takes exactly `count` tokens (winnow's and nom's `take`).
153
+ *
154
+ * @since 0.1.0
155
+ * @category slices
156
+ */
157
+ export const take = (count) => {
158
+ const expected = [count === 1 ? "1 token" : `${count} tokens`];
159
+ return described((state) => {
160
+ const start = state.pos;
161
+ const { count: got, offset } = advance(state, start, count);
162
+ if (got < count)
163
+ return state.eoi("Take", expected, count - got);
164
+ state.pos = offset;
165
+ return state.slice(start, offset);
166
+ }, "take", { _tag: "Take", count, encoding: undefined });
167
+ };
168
+ const normalize = (r) => {
169
+ if (r === undefined)
170
+ return [0, Infinity];
171
+ if (typeof r === "number")
172
+ return [r, r];
173
+ return [r.min ?? 0, r.max ?? Infinity];
174
+ };
175
+ /** @internal */
176
+ export const takeWhileImpl = (set, r, negate, name, description, kind = "TakeWhile", hint = false) => {
177
+ const m = compileAny(set);
178
+ const [min, max] = normalize(r);
179
+ const expected = [description ?? (negate ? `anything but ${m.description}` : m.description)];
180
+ return described((state) => {
181
+ const start = state.pos;
182
+ const { count, hitEnd, offset } = scan(state, m, negate, max);
183
+ if (hitEnd && state.partial)
184
+ return state.incomplete(1, expected);
185
+ if (count < min)
186
+ return state.backtrack(kind, expected, offset);
187
+ // More matching tokens would have been accepted where we stopped
188
+ if (hint && count < max)
189
+ state.setHint(offset, expected);
190
+ state.pos = offset;
191
+ return state.slice(start, offset);
192
+ }, name, { _tag: "TakeWhile", set, negate, min, max, encoding: undefined });
193
+ };
194
+ /**
195
+ * Takes the longest run of tokens belonging to a set, with the number of
196
+ * tokens constrained by `range` (default: zero or more). This is winnow's
197
+ * `take_while(range, set)`, and nom's `take_while`, `take_while1` and
198
+ * `take_while_m_n`.
199
+ *
200
+ * @example
201
+ * ```ts
202
+ * import { Parser, Token } from "@thomasfosterau/effect-parse"
203
+ *
204
+ * const identifier = Token.takeWhile(
205
+ * [Token.range("a", "z"), Token.range("A", "Z"), "_"],
206
+ * { min: 1 }
207
+ * )
208
+ * ```
209
+ *
210
+ * @since 0.1.0
211
+ * @category slices
212
+ */
213
+ export const takeWhile = (set, range) => takeWhileImpl(set, range, false, "takeWhile");
214
+ /**
215
+ * Takes the longest run of tokens *not* belonging to a set (winnow's
216
+ * `take_till`, nom's `take_till` and `take_till1`).
217
+ *
218
+ * @since 0.1.0
219
+ * @category slices
220
+ */
221
+ export const takeTill = (set, range) => takeWhileImpl(set, range, true, "takeTill");
222
+ /**
223
+ * Takes tokens up to (not including) the first occurrence of a literal
224
+ * (winnow's `take_until`, nom's `take_until`). The literal is not
225
+ * consumed. `range` constrains the number of tokens taken.
226
+ *
227
+ * @since 0.1.0
228
+ * @category slices
229
+ */
230
+ export const takeUntil = (lit, r) => {
231
+ const [min, max] = normalize(r);
232
+ const description = typeof lit === "string"
233
+ ? JSON.stringify(lit)
234
+ : lit instanceof Uint8Array
235
+ ? describeBytes(lit)
236
+ : `[${lit.map((t) => JSON.stringify(t)).join(", ")}]`;
237
+ const expected = [description];
238
+ return described((state) => {
239
+ const start = state.pos;
240
+ const idx = indexOf(state, lit, start);
241
+ if (idx < 0) {
242
+ if (state.partial)
243
+ return state.incomplete(0, expected);
244
+ return state.backtrack("TakeUntil", expected, state.end);
245
+ }
246
+ // As in winnow, the first occurrence must lie within the range
247
+ if (min > 0 || max !== Infinity) {
248
+ const count = countTokens(state, start, idx);
249
+ if (count < min)
250
+ return state.backtrack("TakeUntil", expected, idx);
251
+ if (count > max)
252
+ return state.backtrack("TakeUntil", expected);
253
+ }
254
+ state.pos = idx;
255
+ return state.slice(start, idx);
256
+ }, "takeUntil", { _tag: "TakeUntil", literal: lit, ...bounds(r), encoding: undefined });
257
+ };
258
+ /**
259
+ * Takes the rest of the input (winnow's and nom's `rest`).
260
+ *
261
+ * @since 0.1.0
262
+ * @category slices
263
+ */
264
+ export const rest = described((state) => {
265
+ const start = state.pos;
266
+ state.pos = state.end;
267
+ return state.slice(start, state.end);
268
+ }, "rest", { _tag: "Rest", encoding: undefined });
269
+ /**
270
+ * Takes the rest of an input of type `I`.
271
+ *
272
+ * @since 0.1.0
273
+ * @category slices
274
+ */
275
+ export const restOf = () => rest;
276
+ /**
277
+ * Returns the length of the remaining input without consuming it (winnow's
278
+ * and nom's `rest_len`).
279
+ *
280
+ * @since 0.1.0
281
+ * @category slices
282
+ */
283
+ export const restLen = described((state) => state.end - state.pos, "restLen", {
284
+ _tag: "RestLen"
285
+ });
286
+ /**
287
+ * Matches a token satisfying a predicate (nom's `satisfy`). Equivalent to
288
+ * `Token.oneOf(predicate)`.
289
+ *
290
+ * @since 0.1.0
291
+ * @category tokens
292
+ */
293
+ export const satisfy = (predicate) => oneOf(predicate);
294
+ //# sourceMappingURL=Token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Token.js","sourceRoot":"","sources":["../src/Token.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @since 0.1.0
3
+ */
4
+ export * as Input from "./Input.js";
5
+ export * as Parser from "./Parser.js";
6
+ export * as ParseError from "./ParseError.js";
7
+ export * as Token from "./Token.js";
8
+ export * as Ascii from "./Ascii.js";
9
+ export * as Text from "./Text.js";
10
+ export * as Encoding from "./Encoding.js";
11
+ export * as Binary from "./Binary.js";
12
+ export * as Bits from "./Bits.js";
13
+ export * as Expression from "./Expression.js";
14
+ export * as Nom from "./Nom.js";
15
+ export * as ParserSchema from "./ParserSchema.js";
16
+ export * as ParserStream from "./ParserStream.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @since 0.1.0
3
+ */
4
+ export * as Input from "./Input.js";
5
+ export * as Parser from "./Parser.js";
6
+ export * as ParseError from "./ParseError.js";
7
+ export * as Token from "./Token.js";
8
+ export * as Ascii from "./Ascii.js";
9
+ export * as Text from "./Text.js";
10
+ export * as Encoding from "./Encoding.js";
11
+ export * as Binary from "./Binary.js";
12
+ export * as Bits from "./Bits.js";
13
+ export * as Expression from "./Expression.js";
14
+ export * as Nom from "./Nom.js";
15
+ export * as ParserSchema from "./ParserSchema.js";
16
+ export * as ParserStream from "./ParserStream.js";
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA"}
@@ -0,0 +1,25 @@
1
+ import type { State } from "../../Input.js";
2
+ import type { Node, ParserLike } from "../node.js";
3
+ import { FirstSets } from "./first.js";
4
+ export type Step = (state: State<any>) => any;
5
+ /** A parser that the compiler left to its interpreted step. */
6
+ export interface Fallback {
7
+ readonly name: string | undefined;
8
+ readonly tag: Node["_tag"];
9
+ readonly reason: string;
10
+ }
11
+ /** The maximum number of distinct parsers compiled for one root. */
12
+ export declare const maxNodes = 2048;
13
+ export interface ClosureCompiler {
14
+ readonly compile: (p: ParserLike, used: boolean) => Step;
15
+ readonly note: (p: ParserLike, node: Node, reason: string) => void;
16
+ readonly firsts: FirstSets;
17
+ readonly fallbacks: ReadonlyArray<Fallback>;
18
+ }
19
+ export declare const createClosureCompiler: (kind: 0 | 1 | 2, resumable?: boolean) => ClosureCompiler;
20
+ /** Compiles a root parser for one input kind. */
21
+ export declare const compileClosure: (root: ParserLike, kind: 0 | 1 | 2, resumable?: boolean) => {
22
+ readonly step: Step;
23
+ readonly fallbacks: ReadonlyArray<Fallback>;
24
+ };
25
+ //# sourceMappingURL=closure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closure.d.ts","sourceRoot":"","sources":["../../../src/internal/compiler/closure.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAW,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAGpD,OAAO,KAAK,EAAE,IAAI,EAAU,UAAU,EAAE,MAAM,YAAY,CAAA;AAS1D,OAAO,EAAE,SAAS,EAAW,MAAM,YAAY,CAAA;AAI/C,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAA;AAE7C,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,oEAAoE;AACpE,eAAO,MAAM,QAAQ,OAAO,CAAA;AAg/C5B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACxD,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IAClE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CAC5C;AAED,eAAO,MAAM,qBAAqB,SAAU,CAAC,GAAG,CAAC,GAAG,CAAC,0BAAsB,eAQ1E,CAAA;AAED,iDAAiD;AACjD,eAAO,MAAM,cAAc,SACnB,UAAU,QACV,CAAC,GAAG,CAAC,GAAG,CAAC,0BAEd;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CAIpE,CAAA"}