@jbrowse/jexl 4.0.1 → 5.0.1
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/README.md +163 -20
- package/dist/Expression.d.ts +16 -0
- package/dist/Expression.js +28 -4
- package/dist/Expression.js.map +1 -1
- package/dist/Jexl.d.ts +20 -8
- package/dist/Jexl.js +34 -15
- package/dist/Jexl.js.map +1 -1
- package/dist/Lexer.d.ts +4 -3
- package/dist/Lexer.js +29 -21
- package/dist/Lexer.js.map +1 -1
- package/dist/analyze.d.ts +84 -0
- package/dist/analyze.js +259 -0
- package/dist/analyze.js.map +1 -0
- package/dist/check.d.ts +109 -0
- package/dist/check.js +1267 -0
- package/dist/check.js.map +1 -0
- package/dist/collections.d.ts +3 -0
- package/dist/collections.js +140 -0
- package/dist/collections.js.map +1 -0
- package/dist/conditions.d.ts +62 -0
- package/dist/conditions.js +207 -0
- package/dist/conditions.js.map +1 -0
- package/dist/errors.d.ts +5 -0
- package/dist/errors.js +18 -0
- package/dist/errors.js.map +1 -0
- package/dist/evaluator/compile.d.ts +10 -7
- package/dist/evaluator/compile.js +292 -99
- package/dist/evaluator/compile.js.map +1 -1
- package/dist/grammar.d.ts +22 -9
- package/dist/grammar.js +83 -55
- package/dist/grammar.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/operators.d.ts +34 -0
- package/dist/operators.js +131 -0
- package/dist/operators.js.map +1 -0
- package/dist/parser/Parser.d.ts +48 -91
- package/dist/parser/Parser.js +347 -221
- package/dist/parser/Parser.js.map +1 -1
- package/dist/types.d.ts +11 -5
- package/esm/Expression.d.ts +16 -0
- package/esm/Expression.js +28 -4
- package/esm/Expression.js.map +1 -1
- package/esm/Jexl.d.ts +20 -8
- package/esm/Jexl.js +34 -15
- package/esm/Jexl.js.map +1 -1
- package/esm/Lexer.d.ts +4 -3
- package/esm/Lexer.js +29 -21
- package/esm/Lexer.js.map +1 -1
- package/esm/analyze.d.ts +84 -0
- package/esm/analyze.js +256 -0
- package/esm/analyze.js.map +1 -0
- package/esm/check.d.ts +109 -0
- package/esm/check.js +1260 -0
- package/esm/check.js.map +1 -0
- package/esm/collections.d.ts +3 -0
- package/esm/collections.js +137 -0
- package/esm/collections.js.map +1 -0
- package/esm/conditions.d.ts +62 -0
- package/esm/conditions.js +200 -0
- package/esm/conditions.js.map +1 -0
- package/esm/errors.d.ts +5 -0
- package/esm/errors.js +14 -0
- package/esm/errors.js.map +1 -0
- package/esm/evaluator/compile.d.ts +10 -7
- package/esm/evaluator/compile.js +292 -99
- package/esm/evaluator/compile.js.map +1 -1
- package/esm/grammar.d.ts +22 -9
- package/esm/grammar.js +79 -53
- package/esm/grammar.js.map +1 -1
- package/esm/index.d.ts +9 -0
- package/esm/index.js +4 -0
- package/esm/index.js.map +1 -1
- package/esm/operators.d.ts +34 -0
- package/esm/operators.js +123 -0
- package/esm/operators.js.map +1 -0
- package/esm/parser/Parser.d.ts +48 -91
- package/esm/parser/Parser.js +349 -192
- package/esm/parser/Parser.js.map +1 -1
- package/esm/types.d.ts +11 -5
- package/package.json +1 -1
- package/src/Expression.ts +34 -4
- package/src/Jexl.ts +52 -16
- package/src/Lexer.ts +32 -21
- package/src/analyze.ts +378 -0
- package/src/check.ts +1682 -0
- package/src/collections.ts +148 -0
- package/src/conditions.ts +262 -0
- package/src/errors.ts +15 -0
- package/src/evaluator/compile.ts +351 -102
- package/src/grammar.ts +137 -55
- package/src/index.ts +15 -0
- package/src/operators.ts +151 -0
- package/src/parser/Parser.ts +389 -199
- package/src/types.ts +13 -3
- package/dist/parser/handlers.d.ts +0 -115
- package/dist/parser/handlers.js +0 -352
- package/dist/parser/handlers.js.map +0 -1
- package/dist/parser/states.d.ts +0 -47
- package/dist/parser/states.js +0 -176
- package/dist/parser/states.js.map +0 -1
- package/esm/parser/handlers.d.ts +0 -115
- package/esm/parser/handlers.js +0 -328
- package/esm/parser/handlers.js.map +0 -1
- package/esm/parser/states.d.ts +0 -47
- package/esm/parser/states.js +0 -140
- package/esm/parser/states.js.map +0 -1
- package/src/parser/handlers.ts +0 -372
- package/src/parser/states.ts +0 -159
package/esm/evaluator/compile.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Jexl
|
|
3
3
|
* Copyright 2020 Tom Shawver
|
|
4
4
|
*/
|
|
5
|
+
import { and, nullish, or } from "../grammar.js";
|
|
5
6
|
/**
|
|
6
7
|
* Writes a key that a plain assignment would mishandle. Storing to
|
|
7
8
|
* "__proto__" invokes the prototype setter rather than creating a property, so
|
|
@@ -20,15 +21,23 @@ function defineOwn(target, key, value) {
|
|
|
20
21
|
function assignOwn(target, key, value) {
|
|
21
22
|
target[key] = value;
|
|
22
23
|
}
|
|
24
|
+
/** The key `subject[index]` reads under, or undefined when it reads nothing. */
|
|
25
|
+
function memberKey(index) {
|
|
26
|
+
return typeof index === 'string' || typeof index === 'number'
|
|
27
|
+
? index
|
|
28
|
+
: indexKey(index);
|
|
29
|
+
}
|
|
23
30
|
/**
|
|
24
31
|
* The key a bracket index that is neither a string nor a number reads under:
|
|
25
32
|
* its string form, when it has one worth using.
|
|
26
33
|
*
|
|
27
34
|
* A boolean and an array of primitives do — `['a']` is the key `'a'`, exactly
|
|
28
|
-
* as JS would index by it
|
|
29
|
-
*
|
|
30
|
-
* `
|
|
31
|
-
*
|
|
35
|
+
* as JS would index by it, and how a `@gmod/vcf` INFO value (always a list,
|
|
36
|
+
* `Number=1` included) indexes a lookup table. A multi-valued list is the key
|
|
37
|
+
* `'a,b'`, and misses rather than guess which value was meant. A plain object
|
|
38
|
+
* does not, since '[object Object]' is not a key anything is stored under, so
|
|
39
|
+
* it and an array holding one answer `undefined` instead. null and undefined
|
|
40
|
+
* are the same case.
|
|
32
41
|
*/
|
|
33
42
|
function indexKey(value) {
|
|
34
43
|
if (typeof value === 'boolean') {
|
|
@@ -44,17 +53,159 @@ function isKeyPart(value) {
|
|
|
44
53
|
typeof value === 'number' ||
|
|
45
54
|
typeof value === 'boolean');
|
|
46
55
|
}
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
56
|
+
/**
|
|
57
|
+
* The value of an object or array literal holding only primitives, built once.
|
|
58
|
+
* Indexing such a table, as in `{CDS: 'red', exon: 'blue'}[feature.type]`,
|
|
59
|
+
* can only yield a primitive, so the table never escapes and one frozen copy
|
|
60
|
+
* serves every evaluation.
|
|
61
|
+
*/
|
|
62
|
+
function literalTable(node) {
|
|
63
|
+
const literal = node;
|
|
64
|
+
if (literal.type === 'ArrayLiteral') {
|
|
65
|
+
return literal.value.every((item) => item.type === 'Literal')
|
|
66
|
+
? Object.freeze(literal.value.map((item) => item.value))
|
|
67
|
+
: undefined;
|
|
51
68
|
}
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
69
|
+
if (literal.type === 'ObjectLiteral') {
|
|
70
|
+
const entries = Object.entries(literal.value);
|
|
71
|
+
if (entries.every(([, value]) => value.type === 'Literal')) {
|
|
72
|
+
const table = {};
|
|
73
|
+
for (const [key, value] of entries) {
|
|
74
|
+
defineOwn(table, key, value.value);
|
|
75
|
+
}
|
|
76
|
+
return Object.freeze(table);
|
|
77
|
+
}
|
|
56
78
|
}
|
|
57
|
-
return
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const unassigned = Symbol('unassigned');
|
|
82
|
+
/**
|
|
83
|
+
* One call of a lambda. A name the lambda binds reads from `args`, a name bound
|
|
84
|
+
* by a lambda around it from `outer`, a name the expression assigns from
|
|
85
|
+
* `locals` — the evaluation's own, captured when the lambda was made, so a
|
|
86
|
+
* lambda called after its evaluation ends still sees them — and any other name
|
|
87
|
+
* from `context`.
|
|
88
|
+
*/
|
|
89
|
+
class LambdaFrame {
|
|
90
|
+
args;
|
|
91
|
+
outer;
|
|
92
|
+
context;
|
|
93
|
+
locals;
|
|
94
|
+
constructor(args, outer, context, locals) {
|
|
95
|
+
this.args = args;
|
|
96
|
+
this.outer = outer;
|
|
97
|
+
this.context = context;
|
|
98
|
+
this.locals = locals;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// the closures compiled inside a lambda are handed its LambdaFrame in place of
|
|
102
|
+
// the context, and only the ones that read a name, below, look inside it
|
|
103
|
+
const asFrame = (env) => env;
|
|
104
|
+
const asContext = (frame) => frame;
|
|
105
|
+
function compileName(name, grammar, scope) {
|
|
106
|
+
let hops = 0;
|
|
107
|
+
for (let p = scope.params; p; p = p.outer) {
|
|
108
|
+
const index = p.names.indexOf(name);
|
|
109
|
+
if (index !== -1) {
|
|
110
|
+
return hops === 0 ? (env) => asFrame(env).args[index] : climb(hops, index);
|
|
111
|
+
}
|
|
112
|
+
hops++;
|
|
113
|
+
}
|
|
114
|
+
const read = grammar.variableReader?.(name) ??
|
|
115
|
+
((ctx) => ctx[name]);
|
|
116
|
+
const fromContext = scope.params
|
|
117
|
+
? (env) => read(asFrame(env).context)
|
|
118
|
+
: read;
|
|
119
|
+
const slot = scope.locals?.slots.get(name);
|
|
120
|
+
if (slot === undefined) {
|
|
121
|
+
return fromContext;
|
|
122
|
+
}
|
|
123
|
+
if (scope.params) {
|
|
124
|
+
return (env) => {
|
|
125
|
+
const local = asFrame(env).locals[slot];
|
|
126
|
+
return local === unassigned ? fromContext(env) : local;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const { frame } = scope.locals;
|
|
130
|
+
return (env) => {
|
|
131
|
+
const local = frame.locals[slot];
|
|
132
|
+
return local === unassigned ? fromContext(env) : local;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function climb(hops, index) {
|
|
136
|
+
return (env) => {
|
|
137
|
+
let frame = asFrame(env);
|
|
138
|
+
for (let i = 0; i < hops; i++) {
|
|
139
|
+
frame = frame.outer;
|
|
140
|
+
}
|
|
141
|
+
return frame.args[index];
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function assignedNames(ast, names = new Set()) {
|
|
145
|
+
const node = ast;
|
|
146
|
+
switch (node?.type) {
|
|
147
|
+
case 'AssignmentExpression': {
|
|
148
|
+
names.add(node.left.value);
|
|
149
|
+
assignedNames(node.right, names);
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
case 'Identifier': {
|
|
153
|
+
assignedNames(node.from, names);
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case 'BinaryExpression': {
|
|
157
|
+
assignedNames(node.left, names);
|
|
158
|
+
assignedNames(node.right, names);
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
case 'UnaryExpression': {
|
|
162
|
+
assignedNames(node.right, names);
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case 'ConditionalExpression': {
|
|
166
|
+
assignedNames(node.test, names);
|
|
167
|
+
assignedNames(node.consequent, names);
|
|
168
|
+
assignedNames(node.alternate, names);
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
case 'FilterExpression': {
|
|
172
|
+
assignedNames(node.subject, names);
|
|
173
|
+
assignedNames(node.expr, names);
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
case 'ArrayLiteral':
|
|
177
|
+
case 'FunctionCall':
|
|
178
|
+
case 'SequenceExpression': {
|
|
179
|
+
const children = node.type === 'ArrayLiteral'
|
|
180
|
+
? node.value
|
|
181
|
+
: node.type === 'FunctionCall'
|
|
182
|
+
? node.args
|
|
183
|
+
: node.expressions;
|
|
184
|
+
for (const child of children) {
|
|
185
|
+
assignedNames(child, names);
|
|
186
|
+
}
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case 'ObjectLiteral': {
|
|
190
|
+
for (const child of Object.values(node.value)) {
|
|
191
|
+
assignedNames(child, names);
|
|
192
|
+
}
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
case 'TemplateLiteral': {
|
|
196
|
+
for (const part of node.parts) {
|
|
197
|
+
if (part.type === 'expression') {
|
|
198
|
+
assignedNames(part.value, names);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
case 'Lambda': {
|
|
204
|
+
assignedNames(node.body, names);
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return names;
|
|
58
209
|
}
|
|
59
210
|
/**
|
|
60
211
|
* Lowers an expression tree into a tree of closures, resolving each node's type
|
|
@@ -65,16 +216,54 @@ function stringify(value) {
|
|
|
65
216
|
* times.
|
|
66
217
|
*
|
|
67
218
|
* Operators are bound here, so a grammar change after compilation requires
|
|
68
|
-
* recompiling
|
|
69
|
-
*
|
|
70
|
-
* an expression has been compiled.
|
|
219
|
+
* recompiling. Functions are looked up per call, since they are commonly
|
|
220
|
+
* registered after an expression has been compiled.
|
|
71
221
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
222
|
+
* Each name the expression assigns gets a slot, numbered at compile time, in a
|
|
223
|
+
* frame that lasts one evaluation, so an assignment never touches the context
|
|
224
|
+
* and a context reused from one evaluation to the next comes back unchanged. A
|
|
225
|
+
* name reads its slot once assigned, and resolves as usual until then. An
|
|
226
|
+
* expression that assigns nothing gets no frame. The frame is not a layer over
|
|
227
|
+
* the context via `Object.create`: V8 gives every object used as a prototype a
|
|
228
|
+
* map of its own, which made evaluating against a context built per evaluation
|
|
229
|
+
* six times slower.
|
|
76
230
|
*/
|
|
77
231
|
export function compileAst(ast, grammar) {
|
|
232
|
+
const names = [...assignedNames(ast)];
|
|
233
|
+
if (names.length === 0) {
|
|
234
|
+
return compileNode(ast, grammar, {});
|
|
235
|
+
}
|
|
236
|
+
const slots = new Map(names.map((name, i) => [name, i]));
|
|
237
|
+
const empty = names.map(() => unassigned);
|
|
238
|
+
const frame = { locals: empty };
|
|
239
|
+
const fn = compileNode(ast, grammar, { locals: { slots, frame } });
|
|
240
|
+
// saved and restored, so a function that evaluates this same expression
|
|
241
|
+
// again from inside it leaves the outer evaluation's locals intact
|
|
242
|
+
return (ctx) => {
|
|
243
|
+
const outer = frame.locals;
|
|
244
|
+
frame.locals = empty.slice();
|
|
245
|
+
try {
|
|
246
|
+
return fn(ctx);
|
|
247
|
+
}
|
|
248
|
+
finally {
|
|
249
|
+
frame.locals = outer;
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
/** Renders an interpolated value for a template literal. */
|
|
254
|
+
function stringify(value) {
|
|
255
|
+
if (value == null) {
|
|
256
|
+
return '';
|
|
257
|
+
}
|
|
258
|
+
if (typeof value === 'string' ||
|
|
259
|
+
typeof value === 'number' ||
|
|
260
|
+
typeof value === 'boolean') {
|
|
261
|
+
return String(value);
|
|
262
|
+
}
|
|
263
|
+
return JSON.stringify(value);
|
|
264
|
+
}
|
|
265
|
+
function compileNode(ast, grammar, scope) {
|
|
266
|
+
const compile = (child) => compileNode(child, grammar, scope);
|
|
78
267
|
// AstNode types its `type` as a plain string so the Parser can build the tree
|
|
79
268
|
// loosely; narrowing to the union once, here, lets every case below see its
|
|
80
269
|
// own node type instead of repeating the same cast in each branch
|
|
@@ -87,46 +276,56 @@ export function compileAst(ast, grammar) {
|
|
|
87
276
|
case 'Identifier': {
|
|
88
277
|
const name = node.value;
|
|
89
278
|
if (!node.from) {
|
|
90
|
-
return (
|
|
279
|
+
return compileName(name, grammar, scope);
|
|
280
|
+
}
|
|
281
|
+
const from = compile(node.from);
|
|
282
|
+
const { getMember } = grammar;
|
|
283
|
+
if (getMember) {
|
|
284
|
+
return (ctx) => {
|
|
285
|
+
const target = from(ctx);
|
|
286
|
+
return target == null
|
|
287
|
+
? undefined
|
|
288
|
+
: getMember(target, name);
|
|
289
|
+
};
|
|
91
290
|
}
|
|
92
|
-
const from = compileAst(node.from, grammar);
|
|
93
291
|
return (ctx) => {
|
|
94
|
-
const
|
|
95
|
-
if (subject == null) {
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
// an identifier chained off an array reads through its first element
|
|
99
|
-
const target = Array.isArray(subject) ? subject[0] : subject;
|
|
292
|
+
const target = from(ctx);
|
|
100
293
|
return target == null ? undefined : target[name];
|
|
101
294
|
};
|
|
102
295
|
}
|
|
103
296
|
case 'BinaryExpression': {
|
|
104
297
|
const op = grammar.elements[node.operator];
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
298
|
+
const left = compile(node.left);
|
|
299
|
+
const right = compile(node.right);
|
|
300
|
+
if (op?.type === 'binaryOp' && op.evalOnDemand) {
|
|
301
|
+
const { evalOnDemand } = op;
|
|
302
|
+
if (evalOnDemand === and) {
|
|
303
|
+
return (ctx) => {
|
|
304
|
+
const value = left(ctx);
|
|
305
|
+
return value ? right(ctx) : value;
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
if (evalOnDemand === or) {
|
|
309
|
+
return (ctx) => {
|
|
310
|
+
const value = left(ctx);
|
|
311
|
+
return value || right(ctx);
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
if (evalOnDemand === nullish) {
|
|
315
|
+
return (ctx) => left(ctx) ?? right(ctx);
|
|
316
|
+
}
|
|
317
|
+
// a host's operator gets its operands unevaluated, behind `eval`
|
|
318
|
+
// thunks, so that it can short-circuit as it chooses
|
|
116
319
|
return (ctx) => evalOnDemand({ eval: () => left(ctx) }, { eval: () => right(ctx) });
|
|
117
320
|
}
|
|
118
|
-
const fn = op.eval;
|
|
321
|
+
const fn = op?.type === 'binaryOp' ? op.eval : undefined;
|
|
119
322
|
if (!fn) {
|
|
120
|
-
|
|
121
|
-
left(ctx);
|
|
122
|
-
right(ctx);
|
|
123
|
-
return undefined;
|
|
124
|
-
};
|
|
323
|
+
throw new Error(`Unknown binary operator '${node.operator}'`);
|
|
125
324
|
}
|
|
126
325
|
return (ctx) => fn(left(ctx), right(ctx));
|
|
127
326
|
}
|
|
128
327
|
case 'UnaryExpression': {
|
|
129
|
-
const right =
|
|
328
|
+
const right = compile(node.right);
|
|
130
329
|
const elem = grammar.elements[node.operator];
|
|
131
330
|
const fn = elem?.type === 'unaryOp'
|
|
132
331
|
? elem.eval
|
|
@@ -134,22 +333,14 @@ export function compileAst(ast, grammar) {
|
|
|
134
333
|
? elem.unaryEval
|
|
135
334
|
: undefined;
|
|
136
335
|
if (!fn) {
|
|
137
|
-
|
|
138
|
-
return (ctx) => {
|
|
139
|
-
right(ctx);
|
|
140
|
-
return undefined;
|
|
141
|
-
};
|
|
336
|
+
throw new Error(`Unknown unary operator '${node.operator}'`);
|
|
142
337
|
}
|
|
143
338
|
return (ctx) => fn(right(ctx));
|
|
144
339
|
}
|
|
145
340
|
case 'ConditionalExpression': {
|
|
146
|
-
const test =
|
|
147
|
-
const consequent = node.consequent
|
|
148
|
-
|
|
149
|
-
: undefined;
|
|
150
|
-
const alternate = node.alternate
|
|
151
|
-
? compileAst(node.alternate, grammar)
|
|
152
|
-
: undefined;
|
|
341
|
+
const test = compile(node.test);
|
|
342
|
+
const consequent = node.consequent ? compile(node.consequent) : undefined;
|
|
343
|
+
const alternate = node.alternate ? compile(node.alternate) : undefined;
|
|
153
344
|
return (ctx) => {
|
|
154
345
|
const res = test(ctx);
|
|
155
346
|
if (res) {
|
|
@@ -160,43 +351,29 @@ export function compileAst(ast, grammar) {
|
|
|
160
351
|
};
|
|
161
352
|
}
|
|
162
353
|
case 'FilterExpression': {
|
|
163
|
-
const
|
|
164
|
-
const
|
|
354
|
+
const table = literalTable(node.subject);
|
|
355
|
+
const subject = table ? () => table : compile(node.subject);
|
|
356
|
+
const index = compile(node.expr);
|
|
357
|
+
const { getMember } = grammar;
|
|
358
|
+
if (getMember) {
|
|
359
|
+
return (ctx) => {
|
|
360
|
+
const subjectVal = subject(ctx);
|
|
361
|
+
const key = memberKey(index(ctx));
|
|
362
|
+
return subjectVal == null || key === undefined
|
|
363
|
+
? undefined
|
|
364
|
+
: getMember(subjectVal, key);
|
|
365
|
+
};
|
|
366
|
+
}
|
|
165
367
|
return (ctx) => {
|
|
166
368
|
const subjectVal = subject(ctx);
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
return undefined;
|
|
170
|
-
}
|
|
171
|
-
if (typeof indexVal === 'string' || typeof indexVal === 'number') {
|
|
172
|
-
return subjectVal[indexVal];
|
|
173
|
-
}
|
|
174
|
-
// A value with a meaningful string form is indexed by it, which is what
|
|
175
|
-
// JS does and what this did until the evaluator was lowered to closures
|
|
176
|
-
// — the tree-walking version was a bare `subject?.[index]`. Answering
|
|
177
|
-
// `undefined` for everything else reads as a deliberate strictness and
|
|
178
|
-
// is not: nothing wanted it, and the shape it rejects is common.
|
|
179
|
-
//
|
|
180
|
-
// That shape is a one-element array. Every `@gmod/vcf` INFO value is a
|
|
181
|
-
// list — `Number=1` included, so `CLNSIG=Pathogenic` parses to
|
|
182
|
-
// `['Pathogenic']` — and the natural way to colour by one is a lookup
|
|
183
|
-
// table indexed by it. The miss is silent, because such an expression
|
|
184
|
-
// always carries a `|| fallback` for the values it has no entry for,
|
|
185
|
-
// and that fallback then answers for every record.
|
|
186
|
-
//
|
|
187
|
-
// A multi-valued list still misses — `['a','b']` is the key 'a,b' —
|
|
188
|
-
// which is the honest answer rather than a lucky one: reading through
|
|
189
|
-
// to the first element would be the index guessing which value was
|
|
190
|
-
// meant. `Identifier` above does read through a one-element array, but
|
|
191
|
-
// it is navigating rather than selecting, so it has nothing to guess.
|
|
192
|
-
const key = indexKey(indexVal);
|
|
193
|
-
return key === undefined
|
|
369
|
+
const key = memberKey(index(ctx));
|
|
370
|
+
return subjectVal == null || key === undefined
|
|
194
371
|
? undefined
|
|
195
372
|
: subjectVal[key];
|
|
196
373
|
};
|
|
197
374
|
}
|
|
198
375
|
case 'ArrayLiteral': {
|
|
199
|
-
const items = node.value.map(
|
|
376
|
+
const items = node.value.map(compile);
|
|
200
377
|
const len = items.length;
|
|
201
378
|
return (ctx) => {
|
|
202
379
|
const out = new Array(len);
|
|
@@ -209,7 +386,7 @@ export function compileAst(ast, grammar) {
|
|
|
209
386
|
case 'ObjectLiteral': {
|
|
210
387
|
const entries = Object.entries(node.value);
|
|
211
388
|
const keys = entries.map(([key]) => key);
|
|
212
|
-
const values = entries.map(([, value]) =>
|
|
389
|
+
const values = entries.map(([, value]) => compile(value));
|
|
213
390
|
const len = keys.length;
|
|
214
391
|
// resolved once, here, so the common case keeps its plain store
|
|
215
392
|
const store = keys.includes('__proto__') ? defineOwn : assignOwn;
|
|
@@ -228,7 +405,7 @@ export function compileAst(ast, grammar) {
|
|
|
228
405
|
const { value } = part;
|
|
229
406
|
return () => value;
|
|
230
407
|
}
|
|
231
|
-
const expr =
|
|
408
|
+
const expr = compile(part.value);
|
|
232
409
|
return (ctx) => stringify(expr(ctx));
|
|
233
410
|
});
|
|
234
411
|
return (ctx) => {
|
|
@@ -241,7 +418,7 @@ export function compileAst(ast, grammar) {
|
|
|
241
418
|
}
|
|
242
419
|
case 'FunctionCall': {
|
|
243
420
|
const { name } = node;
|
|
244
|
-
const args = node.args.map(
|
|
421
|
+
const args = node.args.map(compile);
|
|
245
422
|
// hasOwn, so that inherited Object.prototype members such as `toString`
|
|
246
423
|
// and `constructor` aren't callable as Jexl functions. Resolved per call
|
|
247
424
|
// rather than baked in, since functions are routinely registered after
|
|
@@ -284,7 +461,7 @@ export function compileAst(ast, grammar) {
|
|
|
284
461
|
}
|
|
285
462
|
}
|
|
286
463
|
case 'SequenceExpression': {
|
|
287
|
-
const exprs = node.expressions.map(
|
|
464
|
+
const exprs = node.expressions.map(compile);
|
|
288
465
|
const len = exprs.length;
|
|
289
466
|
return (ctx) => {
|
|
290
467
|
let last;
|
|
@@ -295,13 +472,29 @@ export function compileAst(ast, grammar) {
|
|
|
295
472
|
};
|
|
296
473
|
}
|
|
297
474
|
case 'AssignmentExpression': {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
475
|
+
if (scope.params) {
|
|
476
|
+
throw new Error('Assignment is not supported in a lambda');
|
|
477
|
+
}
|
|
478
|
+
const right = compile(node.right);
|
|
479
|
+
const { slots, frame } = scope.locals;
|
|
480
|
+
const slot = slots.get(node.left.value);
|
|
481
|
+
return (ctx) => (frame.locals[slot] = right(ctx));
|
|
482
|
+
}
|
|
483
|
+
case 'Lambda': {
|
|
484
|
+
const body = compileNode(node.body, grammar, {
|
|
485
|
+
...scope,
|
|
486
|
+
params: { names: node.params, outer: scope.params }
|
|
487
|
+
});
|
|
488
|
+
if (!scope.params) {
|
|
489
|
+
const frame = scope.locals?.frame;
|
|
490
|
+
return (ctx) => {
|
|
491
|
+
const locals = frame?.locals;
|
|
492
|
+
return (...args) => body(asContext(new LambdaFrame(args, undefined, ctx, locals)));
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
return (env) => {
|
|
496
|
+
const outer = asFrame(env);
|
|
497
|
+
return (...args) => body(asContext(new LambdaFrame(args, outer, outer.context, outer.locals)));
|
|
305
498
|
};
|
|
306
499
|
}
|
|
307
500
|
default: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/evaluator/compile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/evaluator/compile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAA;AAqBhD;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,MAAe,EAAE,GAAW,EAAE,KAAgB;IAC/D,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE;QACjC,KAAK;QACL,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;KACnB,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAe,EAAE,GAAW,EAAE,KAAgB;IAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AACrB,CAAC;AAED,gFAAgF;AAChF,SAAS,SAAS,CAAC,KAAgB;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3D,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,QAAQ,CAAC,KAAgB;IAChC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;QACnD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QACjB,CAAC,CAAC,SAAS,CAAA;AACf,CAAC;AAED,SAAS,SAAS,CAChB,KAAgB;IAEhB,OAAO,CACL,KAAK,IAAI,IAAI;QACb,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS,CAC3B,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,IAAa;IACjC,MAAM,OAAO,GAAG,IAAoB,CAAA;IACpC,IAAI,OAAO,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;YAC3D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAE,IAAgB,CAAC,KAAK,CAAC,CAAC;YACrE,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC7C,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,CAAC;YAC3D,MAAM,KAAK,GAAY,EAAE,CAAA;YACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;gBACnC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAG,KAAiB,CAAC,KAAK,CAAC,CAAA;YACjD,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AAWvC;;;;;;GAMG;AACH,MAAM,WAAW;IACf,IAAI,CAAa;IACjB,KAAK,CAAyB;IAC9B,OAAO,CAAS;IAChB,MAAM,CAAuB;IAE7B,YACE,IAAiB,EACjB,KAA8B,EAC9B,OAAgB,EAChB,MAA6B;QAE7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAaD,+EAA+E;AAC/E,yEAAyE;AACzE,MAAM,OAAO,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,GAA6B,CAAA;AAC/D,MAAM,SAAS,GAAG,CAAC,KAAkB,EAAE,EAAE,CAAC,KAA2B,CAAA;AAErE,SAAS,WAAW,CAClB,IAAY,EACZ,OAAgB,EAChB,KAAY;IAEZ,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC5E,CAAC;QACD,IAAI,EAAE,CAAA;IACR,CAAC;IACD,MAAM,IAAI,GACP,OAAO,CAAC,cAAc,EAAE,CAAC,IAAI,CAA8B;QAC5D,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;IACtB,MAAM,WAAW,GAAiB,KAAK,CAAC,MAAM;QAC5C,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QACrC,CAAC,CAAC,IAAI,CAAA;IACR,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,EAAE,EAAE;YACb,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAO,CAAC,IAAI,CAAC,CAAA;YACxC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,KAAmB,CAAA;QACvE,CAAC,CAAA;IACH,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,MAAO,CAAA;IAC/B,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAChC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,KAAmB,CAAA;IACvE,CAAC,CAAA;AACH,CAAC;AAED,SAAS,KAAK,CAAC,IAAY,EAAE,KAAa;IACxC,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,KAAK,GAAG,KAAK,CAAC,KAAM,CAAA;QACtB,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,GAAwB,EAAE,QAAQ,IAAI,GAAG,EAAU;IACxE,MAAM,IAAI,GAAG,GAA+B,CAAA;IAC5C,QAAQ,IAAI,EAAE,IAAI,EAAE,CAAC;QACnB,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC1B,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAChC,MAAK;QACP,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC/B,MAAK;QACP,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC/B,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAChC,MAAK;QACP,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAChC,MAAK;QACP,CAAC;QACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC/B,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;YACrC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YACpC,MAAK;QACP,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;YAClC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC/B,MAAK;QACP,CAAC;QACD,KAAK,cAAc,CAAC;QACpB,KAAK,cAAc,CAAC;QACpB,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,MAAM,QAAQ,GACZ,IAAI,CAAC,IAAI,KAAK,cAAc;gBAC1B,CAAC,CAAC,IAAI,CAAC,KAAK;gBACZ,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc;oBAC5B,CAAC,CAAC,IAAI,CAAC,IAAI;oBACX,CAAC,CAAC,IAAI,CAAC,WAAW,CAAA;YACxB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBAC7B,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC7B,CAAC;YACD,MAAK;QACP,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC7B,CAAC;YACD,MAAK;QACP,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC/B,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;gBAClC,CAAC;YACH,CAAC;YACD,MAAK;QACP,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAC/B,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,UAAU,CAAC,GAAY,EAAE,OAAgB;IACvD,MAAM,KAAK,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;IACtC,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAA;IACzC,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC/B,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;IAClE,wEAAwE;IACxE,mEAAmE;IACnE,OAAO,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QAC5B,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,GAAG,CAAC,CAAA;QAChB,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,MAAM,GAAG,KAAK,CAAA;QACtB,CAAC;IACH,CAAC,CAAA;AACH,CAAC;AAED,4DAA4D;AAC5D,SAAS,SAAS,CAAC,KAAgB;IACjC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS,EAC1B,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,WAAW,CAClB,GAAY,EACZ,OAAgB,EAChB,KAAY;IAEZ,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IACtE,8EAA8E;IAC9E,4EAA4E;IAC5E,kEAAkE;IAClE,MAAM,IAAI,GAAG,GAAmB,CAAA;IAChC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;YACtB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAA;QACpB,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;YAC1C,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;YAC7B,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;oBACxB,OAAO,MAAM,IAAI,IAAI;wBACnB,CAAC,CAAC,SAAS;wBACX,CAAC,CAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAe,CAAA;gBAC5C,CAAC,CAAA;YACH,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,EAAE;gBACb,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;gBACxB,OAAO,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,MAAkB,CAAC,IAAI,CAAC,CAAA;YAC/D,CAAC,CAAA;QACH,CAAC;QAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAM,CAAC,CAAA;YAClC,IAAI,EAAE,EAAE,IAAI,KAAK,UAAU,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;gBAC/C,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CAAA;gBAC3B,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,EAAE,EAAE;wBACb,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;wBACvB,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;oBACnC,CAAC,CAAA;gBACH,CAAC;gBACD,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,EAAE,EAAE;wBACb,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;wBACvB,OAAO,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA;oBAC5B,CAAC,CAAA;gBACH,CAAC;gBACD,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;oBAC7B,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA;gBACzC,CAAC;gBACD,iEAAiE;gBACjE,qDAAqD;gBACrD,OAAO,CAAC,GAAG,EAAE,EAAE,CACb,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACvE,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;YACxD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;YAC/D,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3C,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAM,CAAC,CAAA;YAClC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC5C,MAAM,EAAE,GACN,IAAI,EAAE,IAAI,KAAK,SAAS;gBACtB,CAAC,CAAC,IAAI,CAAC,IAAI;gBACX,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,UAAU;oBACzB,CAAC,CAAC,IAAI,CAAC,SAAS;oBAChB,CAAC,CAAC,SAAS,CAAA;YACjB,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;YAC9D,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QAChC,CAAC;QAED,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YACzE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YACtE,OAAO,CAAC,GAAG,EAAE,EAAE;gBACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;gBACrB,IAAI,GAAG,EAAE,CAAC;oBACR,0DAA0D;oBAC1D,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;gBAC3C,CAAC;gBACD,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC/C,CAAC,CAAA;QACH,CAAC;QAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACxC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;YAC7B,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,EAAE,EAAE;oBACb,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;oBAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;oBACjC,OAAO,UAAU,IAAI,IAAI,IAAI,GAAG,KAAK,SAAS;wBAC5C,CAAC,CAAC,SAAS;wBACX,CAAC,CAAE,SAAS,CAAC,UAAU,EAAE,GAAG,CAAe,CAAA;gBAC/C,CAAC,CAAA;YACH,CAAC;YACD,OAAO,CAAC,GAAG,EAAE,EAAE;gBACb,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;gBAC/B,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;gBACjC,OAAO,UAAU,IAAI,IAAI,IAAI,GAAG,KAAK,SAAS;oBAC5C,CAAC,CAAC,SAAS;oBACX,CAAC,CAAE,UAAiD,CAAC,GAAG,CAAC,CAAA;YAC7D,CAAC,CAAA;QACH,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACrC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAA;YACxB,OAAO,CAAC,GAAG,EAAE,EAAE;gBACb,MAAM,GAAG,GAAgB,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA;gBACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAA;gBACzB,CAAC;gBACD,OAAO,GAAG,CAAA;YACZ,CAAC,CAAA;QACH,CAAC;QAED,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;YACzD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;YACvB,gEAAgE;YAChE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;YAChE,OAAO,CAAC,GAAG,EAAE,EAAE;gBACb,MAAM,GAAG,GAA8B,EAAE,CAAA;gBACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBACvC,CAAC;gBACD,OAAO,GAAG,CAAA;YACZ,CAAC,CAAA;QACH,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,0EAA0E;YAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAA8B,EAAE;gBAChE,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;oBACtB,OAAO,GAAG,EAAE,CAAC,KAAK,CAAA;gBACpB,CAAC;gBACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAChC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;YACtC,CAAC,CAAC,CAAA;YACF,OAAO,CAAC,GAAG,EAAE,EAAE;gBACb,IAAI,GAAG,GAAG,EAAE,CAAA;gBACZ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAA;gBAClB,CAAC;gBACD,OAAO,GAAG,CAAA;YACZ,CAAC,CAAA;QACH,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAA;YACrB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACnC,wEAAwE;YACxE,yEAAyE;YACzE,uEAAuE;YACvE,mCAAmC;YACnC,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;gBAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC;oBACpC,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,kBAAkB,CAAC,CAAA;gBAC1D,CAAC;gBACD,OAAO,SAAS,CAAC,IAAI,CAAE,CAAA;YACzB,CAAC,CAAA;YACD,qEAAqE;YACrE,qCAAqC;YACrC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpB,KAAK,CAAC,CAAC,CAAC,CAAC;oBACP,OAAO,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAA;gBACzB,CAAC;gBACD,KAAK,CAAC,CAAC,CAAC,CAAC;oBACP,MAAM,CAAC,EAAE,CAAC,GAAG,IAAsB,CAAA;oBACnC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBACnC,CAAC;gBACD,KAAK,CAAC,CAAC,CAAC,CAAC;oBACP,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAoC,CAAA;oBACrD,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC5C,CAAC;gBACD,KAAK,CAAC,CAAC,CAAC,CAAC;oBACP,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAIpB,CAAA;oBACD,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBACrD,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACR,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;oBACvB,OAAO,CAAC,GAAG,EAAE,EAAE;wBACb,MAAM,IAAI,GAAgB,IAAI,KAAK,CAAC,GAAG,CAAC,CAAA;wBACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAA;wBACzB,CAAC;wBACD,OAAO,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;oBAC1B,CAAC,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAA;YACxB,OAAO,CAAC,GAAG,EAAE,EAAE;gBACb,IAAI,IAAe,CAAA;gBACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAA;gBACvB,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC,CAAA;QACH,CAAC;QAED,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;YAC5D,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAM,CAAC,CAAA;YAClC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,MAAO,CAAA;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAE,CAAA;YACxC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QACnD,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;gBAC3C,GAAG,KAAK;gBACR,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;aACpD,CAAC,CAAA;YACF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAA;gBACjC,OAAO,CAAC,GAAG,EAAgB,EAAE;oBAC3B,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,CAAA;oBAC5B,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,CACjB,IAAI,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;gBAClE,CAAC,CAAA;YACH,CAAC;YACD,OAAO,CAAC,GAAG,EAAgB,EAAE;gBAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;gBAC1B,OAAO,CAAC,GAAG,IAAI,EAAE,EAAE,CACjB,IAAI,CACF,SAAS,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CACrE,CAAA;YACL,CAAC,CAAA;QACH,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/esm/grammar.d.ts
CHANGED
|
@@ -30,6 +30,8 @@ export interface BinaryOp {
|
|
|
30
30
|
* which is how `-x` is distinguished from `a - x`.
|
|
31
31
|
*/
|
|
32
32
|
unaryEval?: (right: JexlValue) => JexlValue;
|
|
33
|
+
/** Groups a chain from the right, so `a ^ b ^ c` is `a ^ (b ^ c)`. */
|
|
34
|
+
rightAssociative?: boolean;
|
|
33
35
|
}
|
|
34
36
|
export type UnaryOpEval = (right: JexlValue) => JexlValue;
|
|
35
37
|
export interface UnaryOp {
|
|
@@ -39,23 +41,34 @@ export interface UnaryOp {
|
|
|
39
41
|
}
|
|
40
42
|
/**
|
|
41
43
|
* The punctuation elements of the grammar. Unlike operators these carry no
|
|
42
|
-
* behavior of their own; the Parser
|
|
43
|
-
*
|
|
44
|
-
*
|
|
44
|
+
* behavior of their own; the Parser gives them meaning. The type is a literal
|
|
45
|
+
* union rather than `string` so that `GrammarElement` is a discriminated union,
|
|
46
|
+
* letting operator properties be accessed without casts.
|
|
45
47
|
*/
|
|
46
48
|
export interface SimpleElement {
|
|
47
|
-
type: 'dot' | 'openBracket' | 'closeBracket' | 'openCurl' | 'closeCurl' | 'colon' | 'comma' | 'openParen' | 'closeParen' | 'question' | 'semicolon';
|
|
49
|
+
type: 'dot' | 'openBracket' | 'closeBracket' | 'openCurl' | 'closeCurl' | 'colon' | 'comma' | 'openParen' | 'closeParen' | 'question' | 'semicolon' | 'arrow';
|
|
48
50
|
}
|
|
49
51
|
export type GrammarElement = BinaryOp | UnaryOp | SimpleElement;
|
|
50
52
|
/** A registered function, as jexl calls it once the operands are evaluated. */
|
|
51
53
|
export type GrammarFn = (...args: JexlValue[]) => JexlValue;
|
|
54
|
+
/**
|
|
55
|
+
* Reads `key` off `subject` for `subject.key` and `subject[key]`, in place of
|
|
56
|
+
* a plain property read. Like a registered function, it is handed host values
|
|
57
|
+
* jexl has no type for, so the subject is only promised not to be nullish.
|
|
58
|
+
*/
|
|
59
|
+
export type GetMember = (subject: NonNullable<unknown>, key: string | number) => unknown;
|
|
60
|
+
/**
|
|
61
|
+
* Called once per bare variable name as an expression compiles. A reader it
|
|
62
|
+
* returns replaces `context[name]` for that name; `undefined` keeps it.
|
|
63
|
+
*/
|
|
64
|
+
export type VariableReader = (name: string) => ((context: Record<string, unknown>) => unknown) | undefined;
|
|
52
65
|
export interface Grammar {
|
|
53
66
|
elements: Record<string, GrammarElement>;
|
|
54
67
|
functions: Record<string, GrammarFn>;
|
|
68
|
+
getMember?: GetMember;
|
|
69
|
+
variableReader?: VariableReader;
|
|
55
70
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
*/
|
|
60
|
-
export declare function precedenceOf(elem: GrammarElement | undefined): number;
|
|
71
|
+
export declare const and: BinaryOpEvalOnDemand;
|
|
72
|
+
export declare const or: BinaryOpEvalOnDemand;
|
|
73
|
+
export declare const nullish: BinaryOpEvalOnDemand;
|
|
61
74
|
export declare const getGrammar: () => Grammar;
|