effect-grammar 0.2.0 → 0.4.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 (53) hide show
  1. package/README.md +75 -136
  2. package/dist/ast.d.ts +115 -0
  3. package/dist/ast.d.ts.map +1 -0
  4. package/dist/ast.js +253 -0
  5. package/dist/ast.js.map +1 -0
  6. package/dist/combinators.d.ts +66 -21
  7. package/dist/combinators.d.ts.map +1 -1
  8. package/dist/combinators.js +150 -47
  9. package/dist/combinators.js.map +1 -1
  10. package/dist/core.d.ts +111 -39
  11. package/dist/core.d.ts.map +1 -1
  12. package/dist/core.js +24 -20
  13. package/dist/core.js.map +1 -1
  14. package/dist/env.d.ts +20 -0
  15. package/dist/env.d.ts.map +1 -0
  16. package/dist/env.js +63 -0
  17. package/dist/env.js.map +1 -0
  18. package/dist/errors.d.ts +34 -1
  19. package/dist/errors.d.ts.map +1 -1
  20. package/dist/errors.js +37 -4
  21. package/dist/errors.js.map +1 -1
  22. package/dist/gen.d.ts +7 -0
  23. package/dist/gen.d.ts.map +1 -0
  24. package/dist/gen.js +200 -0
  25. package/dist/gen.js.map +1 -0
  26. package/dist/index.d.ts +5 -5
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +3 -3
  29. package/dist/index.js.map +1 -1
  30. package/dist/parse.d.ts.map +1 -1
  31. package/dist/parse.js +152 -114
  32. package/dist/parse.js.map +1 -1
  33. package/dist/pattern.d.ts +5 -0
  34. package/dist/pattern.d.ts.map +1 -0
  35. package/dist/pattern.js +46 -0
  36. package/dist/pattern.js.map +1 -0
  37. package/dist/print.d.ts +2 -1
  38. package/dist/print.d.ts.map +1 -1
  39. package/dist/print.js +201 -89
  40. package/dist/print.js.map +1 -1
  41. package/dist/recovery.d.ts +10 -0
  42. package/dist/recovery.d.ts.map +1 -0
  43. package/dist/recovery.js +296 -0
  44. package/dist/recovery.js.map +1 -0
  45. package/dist/render.d.ts +4 -4
  46. package/dist/render.d.ts.map +1 -1
  47. package/dist/render.js +133 -42
  48. package/dist/render.js.map +1 -1
  49. package/dist/schema.d.ts +1 -1
  50. package/dist/schema.d.ts.map +1 -1
  51. package/dist/schema.js +12 -5
  52. package/dist/schema.js.map +1 -1
  53. package/package.json +32 -16
package/dist/parse.js CHANGED
@@ -1,157 +1,195 @@
1
1
  import { Result } from "effect";
2
- import { isField, resolve } from "./core.js";
3
- import { ParseError } from "./errors.js";
2
+ import { nodeOf, resolve, unsafeToNever, } from "./core.js";
3
+ import { bind, caseFor, evaluate, frame, isCount, materialize, Unbound } from "./env.js";
4
+ import { exceptionMessage, ParseError, preview } from "./errors.js";
4
5
  import { describe } from "./render.js";
5
- const FAIL = Symbol.for("effect-grammar/fail");
6
- const failAt = (s, expected) => {
7
- if (s.pos > s.furthest) {
8
- s.furthest = s.pos;
9
- s.expected = new Set([expected]);
6
+ const Fail = Symbol("effect-grammar/ParseFail");
7
+ const failAt = (state, expected) => {
8
+ if (state.pos > state.furthest) {
9
+ state.furthest = state.pos;
10
+ state.expected = new Set([expected]);
10
11
  }
11
- else if (s.pos === s.furthest) {
12
- s.expected.add(expected);
12
+ else if (state.pos === state.furthest) {
13
+ state.expected.add(expected);
13
14
  }
14
- return FAIL;
15
+ return Fail;
15
16
  };
16
- const runPart = (p, s) => go(isField(p) ? p.grammar : p, s);
17
- const go = (g, s) => {
18
- const n = g.node;
19
- switch (n._tag) {
17
+ const go = (grammar, state, env) => {
18
+ const node = nodeOf(grammar);
19
+ switch (node._tag) {
20
20
  case "Literal": {
21
- if (!s.input.startsWith(n.value, s.pos))
22
- return failAt(s, JSON.stringify(n.value));
23
- s.pos += n.value.length;
24
- return undefined;
21
+ if (state.input.startsWith(node.value, state.pos)) {
22
+ state.pos += node.value.length;
23
+ return undefined;
24
+ }
25
+ // Failure path only: report at the first mismatching character.
26
+ const end = state.pos + node.value.length;
27
+ let current = state.pos;
28
+ while (current < end && state.input[current] === node.value[current - state.pos])
29
+ current++;
30
+ state.pos = current;
31
+ return failAt(state, JSON.stringify(node.value));
25
32
  }
26
33
  case "Regex": {
27
- n.re.lastIndex = s.pos;
28
- const m = n.re.exec(s.input);
29
- if (m === null)
30
- return failAt(s, n.name);
31
- s.pos += m[0].length;
32
- return m[0];
33
- }
34
- case "Seq": {
35
- const out = new Map();
36
- for (const p of n.parts) {
37
- const v = runPart(p, s);
38
- if (v === FAIL)
39
- return FAIL;
40
- if (isField(p))
41
- out.set(p.name, v);
42
- }
43
- return n.parts.some(isField) ? Object.fromEntries(out) : undefined;
34
+ node.re.lastIndex = state.pos;
35
+ const match = node.re.exec(state.input);
36
+ if (match === null)
37
+ return failAt(state, node.name);
38
+ state.pos += match[0].length;
39
+ return match[0];
44
40
  }
45
41
  case "Gen": {
46
- const it = n.run();
47
- const out = new Map();
48
- let r = it.next();
49
- while (!r.done) {
50
- const p = r.value;
51
- const v = runPart(p, s);
52
- if (v === FAIL) {
53
- it.return(undefined);
54
- return FAIL;
55
- }
56
- if (isField(p)) {
57
- if (out.has(p.name)) {
58
- throw new Error(`gen: field "${p.name}" yielded twice — use many() to repeat`);
59
- }
60
- out.set(p.name, v);
61
- }
62
- r = it.next(v);
42
+ const local = frame(node.scope, node.slotCount, env);
43
+ for (const step of node.steps) {
44
+ const value = go(step.grammar, state, local);
45
+ if (value === Fail)
46
+ return Fail;
47
+ if (step._tag === "Bind")
48
+ bind(local, step.slot, value);
63
49
  }
64
- return r.value ?? Object.fromEntries(out);
50
+ const value = materialize(node.result, local);
51
+ return value === Unbound ? failAt(state, "a bound generator result") : value;
65
52
  }
66
53
  case "Wrap": {
67
- if (go(n.open, s) === FAIL)
68
- return FAIL;
69
- const v = go(n.inner, s);
70
- if (v === FAIL)
71
- return FAIL;
72
- return go(n.close, s) === FAIL ? FAIL : v;
54
+ if (go(node.open, state, env) === Fail)
55
+ return Fail;
56
+ const value = go(node.inner, state, env);
57
+ if (value === Fail)
58
+ return Fail;
59
+ return go(node.close, state, env) === Fail ? Fail : value;
73
60
  }
74
61
  case "Choice": {
75
- const start = s.pos;
76
- for (const o of n.options) {
77
- const v = go(o, s);
78
- if (v !== FAIL)
79
- return v;
80
- s.pos = start;
62
+ const start = state.pos;
63
+ for (const option of node.options) {
64
+ const value = go(option, state, env);
65
+ if (value !== Fail)
66
+ return value;
67
+ state.pos = start;
81
68
  }
82
- return FAIL;
69
+ return Fail;
83
70
  }
84
71
  case "Many": {
85
- const out = [];
86
- let mark = s.pos;
87
- while (out.length < n.max) {
88
- const v = go(n.inner, s);
89
- if (v === FAIL)
72
+ const values = [];
73
+ let mark = state.pos;
74
+ while (values.length < node.max) {
75
+ const value = go(node.inner, state, env);
76
+ if (value === Fail)
90
77
  break;
91
- if (s.pos === mark)
92
- throw new Error("many: element matched without consuming input");
93
- out.push(v);
94
- mark = s.pos;
95
- if (go(n.sep, s) === FAIL)
78
+ if (state.pos === mark)
79
+ return failAt(state, "a repetition element that consumes input");
80
+ values.push(value);
81
+ mark = state.pos;
82
+ if (go(node.sep, state, env) === Fail)
96
83
  break;
97
84
  }
98
- s.pos = mark;
99
- return out.length < n.min ? FAIL : out;
85
+ state.pos = mark;
86
+ return values.length < node.min ? Fail : values;
100
87
  }
101
88
  case "Optional": {
102
- const mark = s.pos;
103
- const v = go(n.inner, s);
104
- if (v !== FAIL)
105
- return v;
106
- s.pos = mark;
89
+ const mark = state.pos;
90
+ const value = go(node.inner, state, env);
91
+ if (value !== Fail)
92
+ return value;
93
+ state.pos = mark;
107
94
  return undefined;
108
95
  }
109
96
  case "Transform": {
110
- const start = s.pos;
111
- const v = go(n.inner, s);
112
- if (v === FAIL)
113
- return FAIL;
114
- const b = n.decode(v);
115
- if (n.is?.(b) === false) {
116
- s.pos = start;
117
- return failAt(s, n.name ?? describe(n.inner));
97
+ const start = state.pos;
98
+ const value = go(node.inner, state, env);
99
+ if (value === Fail)
100
+ return Fail;
101
+ try {
102
+ const decoded = node.decode(unsafeToNever(value));
103
+ if (Result.isFailure(decoded)) {
104
+ state.pos = start;
105
+ return failAt(state, decoded.failure.message);
106
+ }
107
+ if (node.is?.(unsafeToNever(decoded.success)) === false) {
108
+ state.pos = start;
109
+ return failAt(state, node.name ?? describe(node.inner));
110
+ }
111
+ return decoded.success;
112
+ }
113
+ catch (error) {
114
+ state.pos = start;
115
+ return failAt(state, `${node.name ?? describe(node.inner)}: ${exceptionMessage(error)}`);
118
116
  }
119
- return b;
120
117
  }
121
118
  case "Skip":
122
- return go(n.inner, s) === FAIL ? FAIL : undefined;
119
+ return go(node.inner, state, env) === Fail ? Fail : undefined;
123
120
  case "Label": {
124
- const start = s.pos;
125
- // Expectations already recorded here belong to sibling branches; only the inner ones collapse.
126
- const siblings = s.furthest === start ? [...s.expected] : [];
127
- const v = go(n.inner, s);
128
- if (v === FAIL && s.furthest === start)
129
- s.expected = new Set([...siblings, n.name]);
130
- return v;
121
+ const start = state.pos;
122
+ const siblings = state.furthest === start ? [...state.expected] : [];
123
+ const value = go(node.inner, state, env);
124
+ if (value === Fail && state.furthest === start) {
125
+ state.expected = new Set([...siblings, node.name]);
126
+ }
127
+ return value;
131
128
  }
132
129
  case "Suspend":
133
- return go(resolve(n), s);
130
+ return go(resolve(node), state, env);
131
+ case "Match": {
132
+ const key = evaluate(node.scrutinee, env);
133
+ if (key === Unbound)
134
+ return failAt(state, "a bound match ref");
135
+ const matchCase = caseFor(node.cases, key);
136
+ if (matchCase === undefined)
137
+ return failAt(state, `a match case for ${preview(key)}`);
138
+ return go(matchCase.grammar, state, env);
139
+ }
140
+ case "Take": {
141
+ const count = evaluate(node.count, env);
142
+ if (count === Unbound)
143
+ return failAt(state, "a bound take count");
144
+ if (!isCount(count))
145
+ return failAt(state, `<char>{${preview(count)}}`);
146
+ if (state.input.length - state.pos < count) {
147
+ return failAt(state, `${count} chars`);
148
+ }
149
+ const value = state.input.slice(state.pos, state.pos + count);
150
+ state.pos += count;
151
+ return value;
152
+ }
153
+ case "RepeatExact": {
154
+ const count = evaluate(node.count, env);
155
+ if (count === Unbound)
156
+ return failAt(state, "a bound repeat count");
157
+ if (!isCount(count))
158
+ return failAt(state, `a non-negative repeat count`);
159
+ const values = [];
160
+ for (let index = 0; index < count; index++) {
161
+ const mark = state.pos;
162
+ const value = go(node.inner, state, env);
163
+ if (value === Fail)
164
+ return Fail;
165
+ if (state.pos === mark)
166
+ return failAt(state, "a repetition element that consumes input");
167
+ values.push(value);
168
+ }
169
+ return values;
170
+ }
134
171
  }
135
172
  };
136
- const toError = (s) => {
137
- const before = s.input.slice(0, s.furthest);
173
+ const toError = (state) => {
174
+ const before = state.input.slice(0, state.furthest);
175
+ const code = state.input.codePointAt(state.furthest);
138
176
  return new ParseError({
139
- pos: s.furthest,
177
+ pos: state.furthest,
140
178
  line: before.split("\n").length,
141
179
  column: before.length - before.lastIndexOf("\n"),
142
- expected: [...s.expected],
143
- found: s.input[s.furthest],
180
+ expected: [...state.expected],
181
+ found: code === undefined ? undefined : String.fromCodePoint(code),
144
182
  });
145
183
  };
146
184
  export const parse = (grammar, input) => {
147
- const s = { input, pos: 0, furthest: 0, expected: new Set() };
148
- const v = go(grammar, s);
149
- if (v !== FAIL && s.pos === input.length) {
150
- // SAFETY: go only returns the grammar's parsed value when it reaches the end successfully.
151
- return Result.succeed(v);
185
+ const state = { input, pos: 0, furthest: 0, expected: new Set() };
186
+ const value = go(grammar, state, undefined);
187
+ if (value !== Fail && state.pos === input.length) {
188
+ // SAFETY: interpreting Grammar<A> preserves its output type across every node.
189
+ return Result.succeed(value);
152
190
  }
153
- if (v !== FAIL)
154
- failAt(s, "end of input");
155
- return Result.fail(toError(s));
191
+ if (value !== Fail)
192
+ failAt(state, "end of input");
193
+ return Result.fail(toError(state));
156
194
  };
157
195
  //# sourceMappingURL=parse.js.map
package/dist/parse.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Pattern, Value } from "./core.ts";
2
+ import { type Frame } from "./env.ts";
3
+ import type { PrintIssue } from "./errors.ts";
4
+ export declare const unifyPattern: (pattern: Pattern, value: Value, values: Frame) => PrintIssue | undefined;
5
+ //# sourceMappingURL=pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../src/pattern.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAQ,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,eAAO,MAAM,YAAY,YACd,OAAO,SACT,KAAK,UACJ,KAAK,KACZ,UAAU,GAAG,SAwCf,CAAA"}
@@ -0,0 +1,46 @@
1
+ import { Equal, Predicate } from "effect";
2
+ import { bind } from "./env.js";
3
+ export const unifyPattern = (pattern, value, values) => {
4
+ switch (pattern._tag) {
5
+ case "Ref":
6
+ bind(values, pattern.slot, value);
7
+ return undefined;
8
+ case "Const":
9
+ return Equal.equals(value, pattern.value)
10
+ ? undefined
11
+ : { _tag: "ConstantMismatch", expected: pattern.value, actual: value };
12
+ case "Object": {
13
+ if (!Predicate.isObject(value) || Array.isArray(value)) {
14
+ return { _tag: "TypeMismatch", expected: "an object", actual: value };
15
+ }
16
+ for (const [key, field] of pattern.fields) {
17
+ if (!Object.hasOwn(value, key)) {
18
+ return { _tag: "AtPath", path: key, issue: { _tag: "MissingField", field: key } };
19
+ }
20
+ const issue = unifyPattern(field, value[key], values);
21
+ if (issue !== undefined)
22
+ return { _tag: "AtPath", path: key, issue };
23
+ }
24
+ return undefined;
25
+ }
26
+ case "Array": {
27
+ if (!Array.isArray(value))
28
+ return { _tag: "TypeMismatch", expected: "an array", actual: value };
29
+ if (value.length !== pattern.items.length) {
30
+ return {
31
+ _tag: "InvalidValue",
32
+ expected: `${pattern.items.length} items`,
33
+ actual: value.length,
34
+ detail: `expected ${pattern.items.length} items, got ${value.length}`,
35
+ };
36
+ }
37
+ for (const [index, item] of pattern.items.entries()) {
38
+ const issue = unifyPattern(item, value[index], values);
39
+ if (issue !== undefined)
40
+ return { _tag: "AtPath", path: index, issue };
41
+ }
42
+ return undefined;
43
+ }
44
+ }
45
+ };
46
+ //# sourceMappingURL=pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../src/pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAGzC,OAAO,EAAE,IAAI,EAAc,MAAM,UAAU,CAAA;AAG3C,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAAgB,EAChB,KAAY,EACZ,MAAa,EACW,EAAE;IAC1B,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,KAAK;YACR,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YACjC,OAAO,SAAS,CAAA;QAClB,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;gBACvC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;QAC1E,KAAK,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;YACvE,CAAC;YACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAA;gBACnF,CAAC;gBACD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAA;gBACrD,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;YACtE,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,KAAK,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACvB,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;YACtE,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC1C,OAAO;oBACL,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,QAAQ;oBACzC,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,MAAM,EAAE,YAAY,OAAO,CAAC,KAAK,CAAC,MAAM,eAAe,KAAK,CAAC,MAAM,EAAE;iBACtE,CAAA;YACH,CAAC;YACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;gBACtD,IAAI,KAAK,KAAK,SAAS;oBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;YACxE,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
package/dist/print.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Result } from "effect";
2
- import { type Grammar } from "./core.ts";
2
+ import { type Grammar, type GrammarInternal, type Value } from "./core.ts";
3
3
  import { PrintError } from "./errors.ts";
4
+ export declare const printUnknown: (grammar: GrammarInternal, value: Value) => Result.Result<string, PrintError>;
4
5
  export declare const print: <A>(grammar: Grammar<A>, value: A) => Result.Result<string, PrintError>;
5
6
  //# sourceMappingURL=print.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"print.d.ts","sourceRoot":"","sources":["../src/print.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAEvC,OAAO,EAAe,KAAK,OAAO,EAA+B,MAAM,WAAW,CAAA;AAClF,OAAO,EAAW,UAAU,EAAE,MAAM,aAAa,CAAA;AAkHjD,eAAO,MAAM,KAAK,GAAI,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAKxF,CAAA"}
1
+ {"version":3,"file":"print.d.ts","sourceRoot":"","sources":["../src/print.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE1C,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,eAAe,EAOpB,KAAK,KAAK,EACX,MAAM,WAAW,CAAA;AAElB,OAAO,EAA6B,UAAU,EAAmB,MAAM,aAAa,CAAA;AAwOpF,eAAO,MAAM,YAAY,YACd,eAAe,SACjB,KAAK,KACX,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAKlC,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAC3D,CAAA"}