effect-grammar 0.1.0 → 0.3.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 (49) hide show
  1. package/README.md +170 -73
  2. package/dist/combinators.d.ts +66 -21
  3. package/dist/combinators.d.ts.map +1 -1
  4. package/dist/combinators.js +150 -47
  5. package/dist/combinators.js.map +1 -1
  6. package/dist/core.d.ts +111 -39
  7. package/dist/core.d.ts.map +1 -1
  8. package/dist/core.js +24 -20
  9. package/dist/core.js.map +1 -1
  10. package/dist/env.d.ts +20 -0
  11. package/dist/env.d.ts.map +1 -0
  12. package/dist/env.js +63 -0
  13. package/dist/env.js.map +1 -0
  14. package/dist/errors.d.ts +34 -1
  15. package/dist/errors.d.ts.map +1 -1
  16. package/dist/errors.js +37 -4
  17. package/dist/errors.js.map +1 -1
  18. package/dist/gen.d.ts +7 -0
  19. package/dist/gen.d.ts.map +1 -0
  20. package/dist/gen.js +200 -0
  21. package/dist/gen.js.map +1 -0
  22. package/dist/index.d.ts +4 -4
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2 -2
  25. package/dist/index.js.map +1 -1
  26. package/dist/parse.d.ts.map +1 -1
  27. package/dist/parse.js +152 -114
  28. package/dist/parse.js.map +1 -1
  29. package/dist/pattern.d.ts +5 -0
  30. package/dist/pattern.d.ts.map +1 -0
  31. package/dist/pattern.js +46 -0
  32. package/dist/pattern.js.map +1 -0
  33. package/dist/print.d.ts +2 -1
  34. package/dist/print.d.ts.map +1 -1
  35. package/dist/print.js +201 -89
  36. package/dist/print.js.map +1 -1
  37. package/dist/recovery.d.ts +10 -0
  38. package/dist/recovery.d.ts.map +1 -0
  39. package/dist/recovery.js +296 -0
  40. package/dist/recovery.js.map +1 -0
  41. package/dist/render.d.ts +4 -4
  42. package/dist/render.d.ts.map +1 -1
  43. package/dist/render.js +133 -42
  44. package/dist/render.js.map +1 -1
  45. package/dist/schema.d.ts +1 -1
  46. package/dist/schema.d.ts.map +1 -1
  47. package/dist/schema.js +11 -4
  48. package/dist/schema.js.map +1 -1
  49. package/package.json +33 -17
@@ -1,77 +1,180 @@
1
- import { Equal, Function as F, Schema } from "effect";
2
- import { isField, isGrammar, isSilent, make, silent, } from "./core.js";
3
- import { preview } from "./errors.js";
4
- export { field } from "./core.js";
1
+ import { Equal, Function as F, Predicate, Result, Schema } from "effect";
2
+ import { isGrammar, isSilent, make, silent, } from "./core.js";
3
+ import { isCount } from "./env.js";
4
+ import { exceptionMessage, preview } from "./errors.js";
5
+ import { assertInScope } from "./gen.js";
6
+ export { gen, get, seq } from "./gen.js";
5
7
  export const literal = (value) => silent({ _tag: "Literal", value });
6
8
  export const empty = literal("");
7
- /** The regex is made sticky so the parser can match at a position without slicing. */
8
- export const regex = (re, name) => {
9
- const flags = re.flags.replace(/[gy]/g, "");
10
- return make({
11
- _tag: "Regex",
12
- re: new RegExp(re.source, `${flags}y`),
13
- whole: new RegExp(`^(?:${re.source})$`, flags),
14
- name,
15
- });
9
+ export const regex = (expression, name) => {
10
+ const flags = expression.flags.replace(/[gy]/g, "");
11
+ return make({ _tag: "Regex", re: new RegExp(expression.source, `${flags}y`), name });
16
12
  };
17
- const _toSilent = (s) => (isGrammar(s) ? s : literal(s));
18
- const _silentIf = (cond, node) => (cond ? silent(node) : make(node));
19
- export function seq(...parts) {
20
- return _silentIf(!parts.some(isField), { _tag: "Seq", parts });
21
- }
22
- export const gen = (run) => make({ _tag: "Gen", run });
23
- export function wrap(open, inner, close) {
24
- return _silentIf(isSilent(inner), {
13
+ const toSilent = (value) => Predicate.isString(value) ? literal(value) : value;
14
+ const preserveSilence = (inner, node) => {
15
+ if (isSilent(inner))
16
+ return silent(node);
17
+ return make(node);
18
+ };
19
+ export function between(open, innerOrClose, close) {
20
+ if (close === undefined) {
21
+ // SAFETY: the two-argument overload accepts only a Silent or string here.
22
+ const closing = toSilent(innerOrClose);
23
+ return (inner) => between(open, inner, closing);
24
+ }
25
+ // SAFETY: the three-argument overload requires a Grammar as its second argument.
26
+ const inner = innerOrClose;
27
+ return preserveSilence(inner, {
25
28
  _tag: "Wrap",
26
- open: _toSilent(open),
29
+ open: toSilent(open),
27
30
  inner,
28
- close: _toSilent(close),
31
+ close: toSilent(close),
29
32
  });
30
33
  }
34
+ export const wrap = between;
31
35
  export function prefix(open, inner) {
32
- return wrap(open, inner, empty);
36
+ return inner === undefined
37
+ ? (value) => between(open, value, empty)
38
+ : between(open, inner, empty);
33
39
  }
34
- export function suffix(inner, close) {
35
- return wrap(empty, inner, close);
40
+ export function suffix(innerOrClose, close) {
41
+ if (close === undefined) {
42
+ // SAFETY: the one-argument overload accepts only a Silent or string here.
43
+ return (inner) => between(empty, inner, innerOrClose);
44
+ }
45
+ // SAFETY: the two-argument overload requires a Grammar as its first argument.
46
+ return between(empty, innerOrClose, close);
36
47
  }
37
48
  export const choice = (...options) => make({ _tag: "Choice", options });
38
49
  export function optional(inner) {
39
- return _silentIf(isSilent(inner), { _tag: "Optional", inner });
50
+ if (inner === undefined)
51
+ return (value) => optional(value);
52
+ return preserveSilence(inner, { _tag: "Optional", inner });
40
53
  }
41
- const bounds = (name, opts) => {
42
- const min = opts?.min ?? 0;
43
- const max = opts?.max ?? Number.POSITIVE_INFINITY;
44
- if (!Number.isSafeInteger(min) || min < 0) {
54
+ const bounds = (name, options) => {
55
+ const min = options?.min ?? 0;
56
+ const max = options?.max ?? Number.POSITIVE_INFINITY;
57
+ if (!isCount(min))
45
58
  throw new RangeError(`${name}: min must be a non-negative safe integer`);
46
- }
47
- if (max !== Number.POSITIVE_INFINITY && !(Number.isSafeInteger(max) && max >= min)) {
59
+ if (max !== Number.POSITIVE_INFINITY && (!isCount(max) || max < min)) {
48
60
  throw new RangeError(`${name}: max must be a safe integer >= min`);
49
61
  }
50
62
  return { min, max };
51
63
  };
52
- const _dataFirst = (args) => isGrammar(args[0]);
53
- export const many = F.dual(_dataFirst, (inner, opts) => make({ _tag: "Many", inner, sep: empty, ...bounds("many", opts) }));
54
- export const sepBy = F.dual(_dataFirst, (inner, sep, opts) => make({ _tag: "Many", inner, sep: _toSilent(sep), ...bounds("sepBy", opts) }));
55
- export const transform = F.dual(2, (inner, f) => make({ _tag: "Transform", inner, ...f }));
56
- export const decodeTo = (schema) => (f) => (inner) => {
57
- let is;
58
- return transform(inner, { ...f, is: f.is ?? ((value) => (is ??= Schema.is(schema))(value)) });
64
+ const dataFirst = (args) => isGrammar(args[0]);
65
+ const repeatNode = (name, inner, separator, options) => make({ _tag: "Many", inner, sep: separator, ...bounds(name, options) });
66
+ export const many = F.dual(dataFirst, (inner, options) => repeatNode("many", inner, empty, options));
67
+ export const sepBy = F.dual(dataFirst, (inner, separator, options) => repeatNode("sepBy", inner, toSilent(separator), options));
68
+ export const match = (scrutinee, cases) => make({
69
+ _tag: "Match",
70
+ scrutinee: assertInScope(scrutinee, "match"),
71
+ // SAFETY: Object.keys returns only keys from the closed Cases record.
72
+ cases: Object.keys(cases).map((key) => ({ key, grammar: cases[key] })),
73
+ });
74
+ export const matchValue = (scrutinee, entries) => make({
75
+ _tag: "Match",
76
+ scrutinee: assertInScope(scrutinee, "matchValue"),
77
+ cases: entries.map(([key, grammar]) => ({ key, grammar })),
78
+ });
79
+ export const take = (count) => make({ _tag: "Take", count: assertInScope(count, "take") });
80
+ export const repeat = F.dual(dataFirst, (inner, count) => make({ _tag: "RepeatExact", count: assertInScope(count, "repeat"), inner }));
81
+ const attempt = (decode) => (a) => {
82
+ try {
83
+ return Result.succeed(decode(a));
84
+ }
85
+ catch (error) {
86
+ return Result.fail({ message: exceptionMessage(error) });
87
+ }
88
+ };
89
+ export const transform = F.dual(2, (inner, options) => make({
90
+ _tag: "Transform",
91
+ inner,
92
+ decode: attempt(options.decode),
93
+ encode: attempt(options.encode),
94
+ is: options.is,
95
+ name: options.name,
96
+ }));
97
+ export const transformOrFail = F.dual(2, (inner, options) => make({ _tag: "Transform", inner, ...options }));
98
+ export const decodeTo = (schema) => (options) => (inner) => {
99
+ let guard;
100
+ return transform(inner, {
101
+ ...options,
102
+ is: options.is ?? ((value) => (guard ??= Schema.is(schema))(value)),
103
+ });
59
104
  };
60
105
  export const as = F.dual(2, (inner, value) => transform(inner, {
61
106
  decode: () => value,
62
107
  encode: () => undefined,
63
- is: (u) => Equal.equals(u, value),
108
+ is: (input) => Equal.equals(input, value),
64
109
  name: preview(value),
65
110
  }));
66
- export const flag = (s) => choice(as(_toSilent(s), true), as(empty, false));
111
+ export const flag = (value) => choice(as(toSilent(value), true), as(empty, false));
67
112
  export const skip = F.dual(2, (inner, printAs) => silent({ _tag: "Skip", inner, printAs, show: true }));
68
113
  export const label = F.dual(2, (inner, name) => make({ _tag: "Label", inner, name }));
69
114
  export const suspend = (thunk, name) => make({ _tag: "Suspend", thunk, name });
70
- const hiddenWhitespace = (printAs) => silent({ _tag: "Skip", inner: regex(/\s*/, "whitespace"), printAs, show: false });
71
- export const whitespace = hiddenWhitespace("");
115
+ export const defaulted = F.dual(dataFirst, (inner, value) => transform(inner, {
116
+ decode: (input) => input ?? value,
117
+ encode: (input) => (Equal.equals(input, value) ? undefined : input),
118
+ }));
119
+ export const struct = (fields) => {
120
+ const scope = { _tag: "ScopeId" };
121
+ const entries = Object.entries(fields);
122
+ return make({
123
+ _tag: "Gen",
124
+ scope,
125
+ slotCount: entries.length,
126
+ steps: entries.map(([, grammar], slot) => ({ _tag: "Bind", slot, grammar })),
127
+ result: {
128
+ _tag: "Object",
129
+ fields: entries.map(([key], slot) => [key, { _tag: "Ref", scope, slot }]),
130
+ },
131
+ });
132
+ };
133
+ export const tuple = (...elements) => {
134
+ const scope = { _tag: "ScopeId" };
135
+ return make({
136
+ _tag: "Gen",
137
+ scope,
138
+ slotCount: elements.length,
139
+ steps: elements.map((grammar, slot) => ({ _tag: "Bind", slot, grammar })),
140
+ result: {
141
+ _tag: "Array",
142
+ items: elements.map((_, slot) => ({ _tag: "Ref", scope, slot })),
143
+ },
144
+ });
145
+ };
146
+ export const taggedChoice = (tag, cases) => {
147
+ const branches = Object.entries(cases).map(([key, grammar]) => make({
148
+ _tag: "Transform",
149
+ inner: grammar,
150
+ decode: (value) => Result.succeed({ [tag]: key, value }),
151
+ encode: (value) => Result.succeed(Object(value).value),
152
+ is: (value) => {
153
+ if (!Predicate.isObject(value) || !Object.hasOwn(value, tag))
154
+ return false;
155
+ return Object.is(value[tag], key) && Object.hasOwn(value, "value");
156
+ },
157
+ name: `${tag}=${preview(key)}`,
158
+ }));
159
+ if (branches.length === 0)
160
+ throw new RangeError("taggedChoice: at least one case is required");
161
+ return make({ _tag: "Choice", options: branches });
162
+ };
163
+ const hiddenWhitespace = (expression, name, printAs) => silent({ _tag: "Skip", inner: regex(expression, name), printAs, show: false });
164
+ export const trivia = hiddenWhitespace(/\s*/, "trivia", "");
165
+ export const space = literal(" ");
166
+ export const spaces = hiddenWhitespace(/\s+/, "whitespace", " ");
72
167
  export function lexeme(inner) {
73
- return suffix(inner, hiddenWhitespace(" "));
168
+ return suffix(inner, trivia);
74
169
  }
75
- export const symbol = (s) => lexeme(literal(s));
76
- export const integer = regex(/-?\d+/, "integer").pipe(transform({ decode: Number, encode: String, is: Number.isSafeInteger, name: "integer" }));
170
+ export const symbol = (value) => lexeme(literal(value));
171
+ export const integer = regex(/-?\d+/, "integer").pipe(transform({
172
+ decode: (text) => {
173
+ const value = Number(text);
174
+ return Object.is(value, -0) ? 0 : value;
175
+ },
176
+ encode: String,
177
+ is: Number.isSafeInteger,
178
+ name: "integer",
179
+ }));
77
180
  //# sourceMappingURL=combinators.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"combinators.js","sourceRoot":"","sources":["../src/combinators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"combinators.js","sourceRoot":"","sources":["../src/combinators.ts"],"names":[],"mappings":"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"}
package/dist/core.d.ts CHANGED
@@ -1,85 +1,157 @@
1
- import { Pipeable, type Types } from "effect";
2
- export type Part = Field<string, any> | Grammar<any>;
1
+ import { Pipeable, Result, type Types } from "effect";
2
+ declare const GrammarTypeId: unique symbol;
3
+ declare const SilentTypeId: unique symbol;
4
+ declare const NodeTypeId: unique symbol;
5
+ export declare const RefTypeId: unique symbol;
6
+ /** Every JavaScript value; `{}` is TypeScript's non-nullish top type. */
7
+ export type Value = {} | null | undefined;
8
+ /**
9
+ * Bridges an erased node callback with the runtime value produced for that
10
+ * node. Node callbacks are stored as `never`-argument functions so the
11
+ * public combinator types stay precise; this is the single choke point where
12
+ * the runtime value is passed to them.
13
+ */
14
+ export declare const unsafeToNever: (value: Value) => never;
15
+ export interface ScopeId {
16
+ readonly _tag: "ScopeId";
17
+ }
3
18
  export interface Bounds {
4
19
  readonly min: number;
5
20
  readonly max: number;
6
21
  }
22
+ export interface RefExpr {
23
+ readonly _tag: "Ref";
24
+ readonly scope: ScopeId;
25
+ readonly slot: number;
26
+ }
27
+ export type Expr = RefExpr | {
28
+ readonly _tag: "Prop";
29
+ readonly object: Expr;
30
+ readonly key: PropertyKey;
31
+ };
32
+ export type Pattern = RefExpr | {
33
+ readonly _tag: "Const";
34
+ readonly value: Value;
35
+ } | {
36
+ readonly _tag: "Object";
37
+ readonly fields: ReadonlyArray<readonly [string, Pattern]>;
38
+ } | {
39
+ readonly _tag: "Array";
40
+ readonly items: ReadonlyArray<Pattern>;
41
+ };
42
+ export type MatchKey = string | number | boolean;
43
+ export interface GrammarIssue {
44
+ readonly message: string;
45
+ }
46
+ export interface GrammarInternal extends Pipeable.Pipeable {
47
+ readonly [NodeTypeId]: Node;
48
+ }
49
+ export interface Case {
50
+ readonly key: MatchKey;
51
+ readonly grammar: GrammarInternal;
52
+ }
53
+ export type Step = {
54
+ readonly _tag: "Silent";
55
+ readonly grammar: Silent;
56
+ } | {
57
+ readonly _tag: "Bind";
58
+ readonly slot: number;
59
+ readonly grammar: GrammarInternal;
60
+ };
7
61
  export type Node = {
8
62
  readonly _tag: "Literal";
9
63
  readonly value: string;
10
64
  } | {
11
65
  readonly _tag: "Regex";
12
66
  readonly re: RegExp;
13
- readonly whole: RegExp;
14
67
  readonly name: string;
15
- } | {
16
- readonly _tag: "Seq";
17
- readonly parts: ReadonlyArray<Part>;
18
68
  } | {
19
69
  readonly _tag: "Gen";
20
- readonly run: () => Generator<Part, any, any>;
70
+ readonly scope: ScopeId;
71
+ readonly slotCount: number;
72
+ readonly steps: ReadonlyArray<Step>;
73
+ readonly result: Pattern;
21
74
  } | {
22
75
  readonly _tag: "Wrap";
23
76
  readonly open: Silent;
24
- readonly inner: Grammar<any>;
77
+ readonly inner: GrammarInternal;
25
78
  readonly close: Silent;
26
79
  } | {
27
80
  readonly _tag: "Choice";
28
- readonly options: ReadonlyArray<Grammar<any>>;
81
+ readonly options: ReadonlyArray<GrammarInternal>;
29
82
  } | ({
30
83
  readonly _tag: "Many";
31
- readonly inner: Grammar<any>;
84
+ readonly inner: GrammarInternal;
32
85
  readonly sep: Silent;
33
86
  } & Bounds) | {
34
87
  readonly _tag: "Optional";
35
- readonly inner: Grammar<any>;
88
+ readonly inner: GrammarInternal;
36
89
  } | {
37
90
  readonly _tag: "Transform";
38
- readonly inner: Grammar<any>;
39
- readonly decode: (a: any) => any;
40
- readonly encode: (b: any) => any;
41
- readonly is?: ((value: any) => boolean) | undefined;
91
+ readonly inner: GrammarInternal;
92
+ readonly decode: (a: never) => Result.Result<Value, GrammarIssue>;
93
+ readonly encode: (b: never) => Result.Result<Value, GrammarIssue>;
94
+ readonly is?: ((value: never) => boolean) | undefined;
42
95
  readonly name?: string | undefined;
43
96
  } | {
44
97
  readonly _tag: "Skip";
45
- readonly inner: Grammar<any>;
46
- readonly printAs: any;
98
+ readonly inner: GrammarInternal;
99
+ readonly printAs: Value;
47
100
  readonly show: boolean;
48
101
  } | {
49
102
  readonly _tag: "Label";
50
- readonly inner: Grammar<any>;
103
+ readonly inner: GrammarInternal;
51
104
  readonly name: string;
52
105
  } | {
53
106
  readonly _tag: "Suspend";
54
- readonly thunk: () => Grammar<any>;
107
+ readonly thunk: () => GrammarInternal;
55
108
  readonly name?: string | undefined;
56
- resolved?: Grammar<any> | undefined;
109
+ resolved?: GrammarInternal | undefined;
110
+ } | {
111
+ readonly _tag: "Match";
112
+ readonly scrutinee: Expr;
113
+ readonly cases: ReadonlyArray<Case>;
114
+ } | {
115
+ readonly _tag: "Take";
116
+ readonly count: Expr;
117
+ } | {
118
+ readonly _tag: "RepeatExact";
119
+ readonly count: Expr;
120
+ readonly inner: GrammarInternal;
57
121
  };
58
- export interface Grammar<out A> extends Pipeable.Pipeable {
59
- readonly _A: Types.Covariant<A>;
60
- readonly node: Node;
122
+ export type Bound<A> = [A] extends [void] ? void : Ref<A>;
123
+ export interface GrammarIterator<A> {
124
+ next(...args: ReadonlyArray<unknown>): IteratorResult<Grammar<A>, Bound<A>>;
125
+ }
126
+ export interface Grammar<in out A> extends GrammarInternal {
127
+ readonly [GrammarTypeId]: Types.Invariant<A>;
128
+ [Symbol.iterator](): GrammarIterator<A>;
61
129
  }
62
130
  export interface Silent extends Grammar<void> {
63
- [Symbol.iterator](): Iterator<Silent, void>;
131
+ readonly [SilentTypeId]: true;
64
132
  }
65
- export interface Field<K extends string, A> {
66
- readonly name: K;
67
- readonly grammar: Grammar<A>;
68
- [Symbol.iterator](): Iterator<Field<K, A>, A>;
133
+ export interface RefBase<out A> {
134
+ readonly [RefTypeId]: Types.Covariant<A>;
69
135
  }
136
+ type RefProps<A> = [A] extends [ReadonlyArray<unknown>] ? {
137
+ readonly length: Ref<number>;
138
+ } : [A] extends [object] ? {
139
+ readonly [K in keyof A & string]-?: Ref<A[K]>;
140
+ } : {};
141
+ export type Ref<A> = RefBase<A> & RefProps<A>;
142
+ export type Denote<T> = T extends RefBase<infer A> ? A : T extends ReadonlyArray<unknown> ? {
143
+ -readonly [K in keyof T]: Denote<T[K]>;
144
+ } : T extends object ? {
145
+ -readonly [K in keyof T]: Denote<T[K]>;
146
+ } : T;
147
+ export type Type<G> = G extends Grammar<infer A> ? A : never;
148
+ export declare const nodeOf: (grammar: GrammarInternal) => Node;
70
149
  export declare const make: <A>(node: Node) => Grammar<A>;
71
150
  export declare const silent: (node: Node) => Silent;
72
- export declare const field: <const K extends string, G extends Grammar<any>>(name: K, grammar: G) => Field<K, Type<G>>;
73
- export declare const isGrammar: (value: any) => value is Grammar<any>;
74
- export declare const isSilent: (g: Grammar<any>) => g is Silent;
75
- export declare const isField: (p: Part) => p is Field<string, any>;
76
- export declare const resolve: (n: Extract<Node, {
151
+ export declare const isGrammar: <T>(value: T) => value is T & GrammarInternal;
152
+ export declare const isSilent: (grammar: GrammarInternal) => grammar is Silent;
153
+ export declare const resolve: (node: Extract<Node, {
77
154
  _tag: "Suspend";
78
- }>) => Grammar<any>;
79
- export type Type<G> = G extends Grammar<infer A> ? A : never;
80
- type Names<Y> = Y extends Field<infer K, any> ? K : never;
81
- export type Fields<Y> = {
82
- [K in Names<Y>]: Y extends Field<K, infer A> ? A : never;
83
- };
155
+ }>) => GrammarInternal;
84
156
  export {};
85
157
  //# sourceMappingURL=core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
package/dist/core.js CHANGED
@@ -1,34 +1,38 @@
1
- import { Pipeable, Utils } from "effect";
1
+ import { Pipeable, Predicate, Result, Utils } from "effect";
2
+ const GrammarTypeId = Symbol.for("effect-grammar/Grammar");
3
+ const SilentTypeId = Symbol.for("effect-grammar/Silent");
4
+ const NodeTypeId = Symbol("effect-grammar/Node");
5
+ export const RefTypeId = Symbol.for("effect-grammar/Ref");
6
+ /**
7
+ * Bridges an erased node callback with the runtime value produced for that
8
+ * node. Node callbacks are stored as `never`-argument functions so the
9
+ * public combinator types stay precise; this is the single choke point where
10
+ * the runtime value is passed to them.
11
+ */
12
+ export const unsafeToNever = (value) => {
13
+ // SAFETY: erased Node callbacks accept the runtime value produced for that node.
14
+ return value;
15
+ };
2
16
  class GrammarImpl {
3
- node;
17
+ [NodeTypeId];
4
18
  constructor(node) {
5
- this.node = node;
19
+ this[NodeTypeId] = node;
6
20
  }
7
21
  pipe() {
8
22
  return Pipeable.pipeArguments(this, arguments);
9
23
  }
10
- }
11
- class SilentImpl extends GrammarImpl {
12
24
  [Symbol.iterator]() {
13
25
  return new Utils.SingleShotGen(this);
14
26
  }
15
27
  }
16
- class FieldImpl {
17
- name;
18
- grammar;
19
- constructor(name, grammar) {
20
- this.name = name;
21
- this.grammar = grammar;
22
- }
23
- [Symbol.iterator]() {
24
- return new Utils.SingleShotGen(this);
25
- }
28
+ Object.defineProperty(GrammarImpl.prototype, GrammarTypeId, { value: GrammarTypeId });
29
+ class SilentImpl extends GrammarImpl {
26
30
  }
31
+ Object.defineProperty(SilentImpl.prototype, SilentTypeId, { value: true });
32
+ export const nodeOf = (grammar) => grammar[NodeTypeId];
27
33
  export const make = (node) => new GrammarImpl(node);
28
34
  export const silent = (node) => new SilentImpl(node);
29
- export const field = (name, grammar) => new FieldImpl(name, grammar);
30
- export const isGrammar = (value) => value instanceof GrammarImpl;
31
- export const isSilent = (g) => g instanceof SilentImpl;
32
- export const isField = (p) => p instanceof FieldImpl;
33
- export const resolve = (n) => (n.resolved ??= n.thunk());
35
+ export const isGrammar = (value) => Predicate.hasProperty(value, GrammarTypeId);
36
+ export const isSilent = (grammar) => Predicate.hasProperty(grammar, SilentTypeId);
37
+ export const resolve = (node) => (node.resolved ??= node.thunk());
34
38
  //# sourceMappingURL=core.js.map
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAc,KAAK,EAAE,MAAM,QAAQ,CAAA;AAoEpD,MAAM,WAAW;IAEN,IAAI,CAAM;IACnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IACD,IAAI;QACF,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAChD,CAAC;CACF;AAED,MAAM,UAAW,SAAQ,WAAiB;IACxC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,KAAK,CAAC,aAAa,CAAe,IAAI,CAAC,CAAA;IACpD,CAAC;CACF;AAED,MAAM,SAAS;IACJ,IAAI,CAAG;IACP,OAAO,CAAY;IAC5B,YAAY,IAAO,EAAE,OAAmB;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IACD,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,KAAK,CAAC,aAAa,CAAiB,IAAI,CAAC,CAAA;IACtD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAAI,IAAU,EAAc,EAAE,CAAC,IAAI,WAAW,CAAI,IAAI,CAAC,CAAA;AAC3E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAU,EAAU,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;AAClE,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,IAAO,EACP,OAAU,EACS,EAAE,CAAC,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAEpD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAU,EAAyB,EAAE,CAAC,KAAK,YAAY,WAAW,CAAA;AAC5F,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAe,EAAe,EAAE,CAAC,CAAC,YAAY,UAAU,CAAA;AACjF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAO,EAA2B,EAAE,CAAC,CAAC,YAAY,SAAS,CAAA;AAEnF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAqC,EAAgB,EAAE,CAC7E,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAc,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEvE,MAAM,aAAa,GAAkB,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;AACzE,MAAM,YAAY,GAAkB,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;AACvE,MAAM,UAAU,GAAkB,MAAM,CAAC,qBAAqB,CAAC,CAAA;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAkB,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;AAKxE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAY,EAAS,EAAE;IACnD,iFAAiF;IACjF,OAAO,KAAc,CAAA;AACvB,CAAC,CAAA;AAgID,MAAM,WAAW;IAEN,CAAC,UAAU,CAAC,CAAM;IAE3B,YAAY,IAAU;QACpB,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;IACzB,CAAC;IAED,IAAI;QACF,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAChD,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,KAAK,CAAC,aAAa,CAAuB,IAAI,CAAC,CAAA;IAC5D,CAAC;CACF;AAED,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAA;AAErF,MAAM,UAAW,SAAQ,WAAiB;CAEzC;AAED,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAE1E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAwB,EAAQ,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAE7E,MAAM,CAAC,MAAM,IAAI,GAAG,CAAI,IAAU,EAAc,EAAE,CAAC,IAAI,WAAW,CAAI,IAAI,CAAC,CAAA;AAE3E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAU,EAAU,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;AAElE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,KAAQ,EAAgC,EAAE,CACrE,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;AAE7C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAwB,EAAqB,EAAE,CACtE,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;AAE9C,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAwC,EAAmB,EAAE,CACnF,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA"}
package/dist/env.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ import type { Case, Expr, Pattern, RefExpr, ScopeId, Value } from "./core.ts";
2
+ /**
3
+ * Sentinel for "no value has been bound here". Distinguished from `undefined`
4
+ * because slots can legitimately hold `undefined` (e.g. `optional`).
5
+ */
6
+ export declare const Unbound: unique symbol;
7
+ export type BoundValue = Value | typeof Unbound;
8
+ export interface Frame {
9
+ readonly scope: ScopeId;
10
+ readonly parent: Frame | undefined;
11
+ readonly values: Array<Value>;
12
+ }
13
+ export declare const frame: (scope: ScopeId, slotCount: number, parent: Frame | undefined) => Frame;
14
+ export declare const bind: (target: Frame, slot: number, value: Value) => void;
15
+ export declare const lookup: (env: Frame | undefined, ref: RefExpr) => BoundValue;
16
+ export declare const evaluate: (expr: Expr, env: Frame | undefined) => BoundValue;
17
+ export declare const materialize: (pattern: Pattern, env: Frame) => BoundValue;
18
+ export declare const caseFor: (cases: ReadonlyArray<Case>, value: Value) => Case | undefined;
19
+ export declare const isCount: (value: Value) => value is number;
20
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAE7E;;;GAGG;AACH,eAAO,MAAM,OAAO,eAAmC,CAAA;AAEvD,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,OAAO,CAAA;AAE/C,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;CAC9B;AAED,eAAO,MAAM,KAAK,UAAW,OAAO,aAAa,MAAM,UAAU,KAAK,GAAG,SAAS,KAAG,KAKpF,CAAA;AAED,eAAO,MAAM,IAAI,WAAY,KAAK,QAAQ,MAAM,SAAS,KAAK,KAAG,IAEhE,CAAA;AAED,eAAO,MAAM,MAAM,QAAS,KAAK,GAAG,SAAS,OAAO,OAAO,KAAG,UAM7D,CAAA;AAED,eAAO,MAAM,QAAQ,SAAU,IAAI,OAAO,KAAK,GAAG,SAAS,KAAG,UAM7D,CAAA;AAED,eAAO,MAAM,WAAW,YAAa,OAAO,OAAO,KAAK,KAAG,UAyB1D,CAAA;AAED,eAAO,MAAM,OAAO,UAAW,aAAa,CAAC,IAAI,CAAC,SAAS,KAAK,qBACJ,CAAA;AAE5D,eAAO,MAAM,OAAO,UAAW,KAAK,KAAG,KAAK,IAAI,MACwB,CAAA"}