@jbrowse/jexl 4.0.1 → 5.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.
- 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 +274 -97
- package/dist/evaluator/compile.js.map +1 -1
- package/dist/grammar.d.ts +19 -9
- package/dist/grammar.js +66 -40
- 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 +274 -97
- package/esm/evaluator/compile.js.map +1 -1
- package/esm/grammar.d.ts +19 -9
- package/esm/grammar.js +66 -39
- 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 +332 -100
- package/src/grammar.ts +123 -42
- 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
|
@@ -23,15 +23,23 @@ function defineOwn(target, key, value) {
|
|
|
23
23
|
function assignOwn(target, key, value) {
|
|
24
24
|
target[key] = value;
|
|
25
25
|
}
|
|
26
|
+
/** The key `subject[index]` reads under, or undefined when it reads nothing. */
|
|
27
|
+
function memberKey(index) {
|
|
28
|
+
return typeof index === 'string' || typeof index === 'number'
|
|
29
|
+
? index
|
|
30
|
+
: indexKey(index);
|
|
31
|
+
}
|
|
26
32
|
/**
|
|
27
33
|
* The key a bracket index that is neither a string nor a number reads under:
|
|
28
34
|
* its string form, when it has one worth using.
|
|
29
35
|
*
|
|
30
36
|
* A boolean and an array of primitives do — `['a']` is the key `'a'`, exactly
|
|
31
|
-
* as JS would index by it
|
|
32
|
-
*
|
|
33
|
-
* `
|
|
34
|
-
*
|
|
37
|
+
* as JS would index by it, and how a `@gmod/vcf` INFO value (always a list,
|
|
38
|
+
* `Number=1` included) indexes a lookup table. A multi-valued list is the key
|
|
39
|
+
* `'a,b'`, and misses rather than guess which value was meant. A plain object
|
|
40
|
+
* does not, since '[object Object]' is not a key anything is stored under, so
|
|
41
|
+
* it and an array holding one answer `undefined` instead. null and undefined
|
|
42
|
+
* are the same case.
|
|
35
43
|
*/
|
|
36
44
|
function indexKey(value) {
|
|
37
45
|
if (typeof value === 'boolean') {
|
|
@@ -47,17 +55,159 @@ function isKeyPart(value) {
|
|
|
47
55
|
typeof value === 'number' ||
|
|
48
56
|
typeof value === 'boolean');
|
|
49
57
|
}
|
|
50
|
-
/**
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
58
|
+
/**
|
|
59
|
+
* The value of an object or array literal holding only primitives, built once.
|
|
60
|
+
* Indexing such a table, as in `{CDS: 'red', exon: 'blue'}[feature.type]`,
|
|
61
|
+
* can only yield a primitive, so the table never escapes and one frozen copy
|
|
62
|
+
* serves every evaluation.
|
|
63
|
+
*/
|
|
64
|
+
function literalTable(node) {
|
|
65
|
+
const literal = node;
|
|
66
|
+
if (literal.type === 'ArrayLiteral') {
|
|
67
|
+
return literal.value.every((item) => item.type === 'Literal')
|
|
68
|
+
? Object.freeze(literal.value.map((item) => item.value))
|
|
69
|
+
: undefined;
|
|
54
70
|
}
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
71
|
+
if (literal.type === 'ObjectLiteral') {
|
|
72
|
+
const entries = Object.entries(literal.value);
|
|
73
|
+
if (entries.every(([, value]) => value.type === 'Literal')) {
|
|
74
|
+
const table = {};
|
|
75
|
+
for (const [key, value] of entries) {
|
|
76
|
+
defineOwn(table, key, value.value);
|
|
77
|
+
}
|
|
78
|
+
return Object.freeze(table);
|
|
79
|
+
}
|
|
59
80
|
}
|
|
60
|
-
return
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
const unassigned = Symbol('unassigned');
|
|
84
|
+
/**
|
|
85
|
+
* One call of a lambda. A name the lambda binds reads from `args`, a name bound
|
|
86
|
+
* by a lambda around it from `outer`, a name the expression assigns from
|
|
87
|
+
* `locals` — the evaluation's own, captured when the lambda was made, so a
|
|
88
|
+
* lambda called after its evaluation ends still sees them — and any other name
|
|
89
|
+
* from `context`.
|
|
90
|
+
*/
|
|
91
|
+
class LambdaFrame {
|
|
92
|
+
args;
|
|
93
|
+
outer;
|
|
94
|
+
context;
|
|
95
|
+
locals;
|
|
96
|
+
constructor(args, outer, context, locals) {
|
|
97
|
+
this.args = args;
|
|
98
|
+
this.outer = outer;
|
|
99
|
+
this.context = context;
|
|
100
|
+
this.locals = locals;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// the closures compiled inside a lambda are handed its LambdaFrame in place of
|
|
104
|
+
// the context, and only the ones that read a name, below, look inside it
|
|
105
|
+
const asFrame = (env) => env;
|
|
106
|
+
const asContext = (frame) => frame;
|
|
107
|
+
function compileName(name, grammar, scope) {
|
|
108
|
+
let hops = 0;
|
|
109
|
+
for (let p = scope.params; p; p = p.outer) {
|
|
110
|
+
const index = p.names.indexOf(name);
|
|
111
|
+
if (index !== -1) {
|
|
112
|
+
return hops === 0 ? (env) => asFrame(env).args[index] : climb(hops, index);
|
|
113
|
+
}
|
|
114
|
+
hops++;
|
|
115
|
+
}
|
|
116
|
+
const read = grammar.variableReader?.(name) ??
|
|
117
|
+
((ctx) => ctx[name]);
|
|
118
|
+
const fromContext = scope.params
|
|
119
|
+
? (env) => read(asFrame(env).context)
|
|
120
|
+
: read;
|
|
121
|
+
const slot = scope.locals?.slots.get(name);
|
|
122
|
+
if (slot === undefined) {
|
|
123
|
+
return fromContext;
|
|
124
|
+
}
|
|
125
|
+
if (scope.params) {
|
|
126
|
+
return (env) => {
|
|
127
|
+
const local = asFrame(env).locals[slot];
|
|
128
|
+
return local === unassigned ? fromContext(env) : local;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const { frame } = scope.locals;
|
|
132
|
+
return (env) => {
|
|
133
|
+
const local = frame.locals[slot];
|
|
134
|
+
return local === unassigned ? fromContext(env) : local;
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function climb(hops, index) {
|
|
138
|
+
return (env) => {
|
|
139
|
+
let frame = asFrame(env);
|
|
140
|
+
for (let i = 0; i < hops; i++) {
|
|
141
|
+
frame = frame.outer;
|
|
142
|
+
}
|
|
143
|
+
return frame.args[index];
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function assignedNames(ast, names = new Set()) {
|
|
147
|
+
const node = ast;
|
|
148
|
+
switch (node?.type) {
|
|
149
|
+
case 'AssignmentExpression': {
|
|
150
|
+
names.add(node.left.value);
|
|
151
|
+
assignedNames(node.right, names);
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
case 'Identifier': {
|
|
155
|
+
assignedNames(node.from, names);
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
case 'BinaryExpression': {
|
|
159
|
+
assignedNames(node.left, names);
|
|
160
|
+
assignedNames(node.right, names);
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
case 'UnaryExpression': {
|
|
164
|
+
assignedNames(node.right, names);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case 'ConditionalExpression': {
|
|
168
|
+
assignedNames(node.test, names);
|
|
169
|
+
assignedNames(node.consequent, names);
|
|
170
|
+
assignedNames(node.alternate, names);
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case 'FilterExpression': {
|
|
174
|
+
assignedNames(node.subject, names);
|
|
175
|
+
assignedNames(node.expr, names);
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
case 'ArrayLiteral':
|
|
179
|
+
case 'FunctionCall':
|
|
180
|
+
case 'SequenceExpression': {
|
|
181
|
+
const children = node.type === 'ArrayLiteral'
|
|
182
|
+
? node.value
|
|
183
|
+
: node.type === 'FunctionCall'
|
|
184
|
+
? node.args
|
|
185
|
+
: node.expressions;
|
|
186
|
+
for (const child of children) {
|
|
187
|
+
assignedNames(child, names);
|
|
188
|
+
}
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
case 'ObjectLiteral': {
|
|
192
|
+
for (const child of Object.values(node.value)) {
|
|
193
|
+
assignedNames(child, names);
|
|
194
|
+
}
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
case 'TemplateLiteral': {
|
|
198
|
+
for (const part of node.parts) {
|
|
199
|
+
if (part.type === 'expression') {
|
|
200
|
+
assignedNames(part.value, names);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
case 'Lambda': {
|
|
206
|
+
assignedNames(node.body, names);
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return names;
|
|
61
211
|
}
|
|
62
212
|
/**
|
|
63
213
|
* Lowers an expression tree into a tree of closures, resolving each node's type
|
|
@@ -68,16 +218,54 @@ function stringify(value) {
|
|
|
68
218
|
* times.
|
|
69
219
|
*
|
|
70
220
|
* Operators are bound here, so a grammar change after compilation requires
|
|
71
|
-
* recompiling
|
|
72
|
-
*
|
|
73
|
-
* an expression has been compiled.
|
|
221
|
+
* recompiling. Functions are looked up per call, since they are commonly
|
|
222
|
+
* registered after an expression has been compiled.
|
|
74
223
|
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
224
|
+
* Each name the expression assigns gets a slot, numbered at compile time, in a
|
|
225
|
+
* frame that lasts one evaluation, so an assignment never touches the context
|
|
226
|
+
* and a context reused from one evaluation to the next comes back unchanged. A
|
|
227
|
+
* name reads its slot once assigned, and resolves as usual until then. An
|
|
228
|
+
* expression that assigns nothing gets no frame. The frame is not a layer over
|
|
229
|
+
* the context via `Object.create`: V8 gives every object used as a prototype a
|
|
230
|
+
* map of its own, which made evaluating against a context built per evaluation
|
|
231
|
+
* six times slower.
|
|
79
232
|
*/
|
|
80
233
|
function compileAst(ast, grammar) {
|
|
234
|
+
const names = [...assignedNames(ast)];
|
|
235
|
+
if (names.length === 0) {
|
|
236
|
+
return compileNode(ast, grammar, {});
|
|
237
|
+
}
|
|
238
|
+
const slots = new Map(names.map((name, i) => [name, i]));
|
|
239
|
+
const empty = names.map(() => unassigned);
|
|
240
|
+
const frame = { locals: empty };
|
|
241
|
+
const fn = compileNode(ast, grammar, { locals: { slots, frame } });
|
|
242
|
+
// saved and restored, so a function that evaluates this same expression
|
|
243
|
+
// again from inside it leaves the outer evaluation's locals intact
|
|
244
|
+
return (ctx) => {
|
|
245
|
+
const outer = frame.locals;
|
|
246
|
+
frame.locals = empty.slice();
|
|
247
|
+
try {
|
|
248
|
+
return fn(ctx);
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
frame.locals = outer;
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/** Renders an interpolated value for a template literal. */
|
|
256
|
+
function stringify(value) {
|
|
257
|
+
if (value == null) {
|
|
258
|
+
return '';
|
|
259
|
+
}
|
|
260
|
+
if (typeof value === 'string' ||
|
|
261
|
+
typeof value === 'number' ||
|
|
262
|
+
typeof value === 'boolean') {
|
|
263
|
+
return String(value);
|
|
264
|
+
}
|
|
265
|
+
return JSON.stringify(value);
|
|
266
|
+
}
|
|
267
|
+
function compileNode(ast, grammar, scope) {
|
|
268
|
+
const compile = (child) => compileNode(child, grammar, scope);
|
|
81
269
|
// AstNode types its `type` as a plain string so the Parser can build the tree
|
|
82
270
|
// loosely; narrowing to the union once, here, lets every case below see its
|
|
83
271
|
// own node type instead of repeating the same cast in each branch
|
|
@@ -90,46 +278,41 @@ function compileAst(ast, grammar) {
|
|
|
90
278
|
case 'Identifier': {
|
|
91
279
|
const name = node.value;
|
|
92
280
|
if (!node.from) {
|
|
93
|
-
return (
|
|
281
|
+
return compileName(name, grammar, scope);
|
|
282
|
+
}
|
|
283
|
+
const from = compile(node.from);
|
|
284
|
+
const { getMember } = grammar;
|
|
285
|
+
if (getMember) {
|
|
286
|
+
return (ctx) => {
|
|
287
|
+
const target = from(ctx);
|
|
288
|
+
return target == null
|
|
289
|
+
? undefined
|
|
290
|
+
: getMember(target, name);
|
|
291
|
+
};
|
|
94
292
|
}
|
|
95
|
-
const from = compileAst(node.from, grammar);
|
|
96
293
|
return (ctx) => {
|
|
97
|
-
const
|
|
98
|
-
if (subject == null) {
|
|
99
|
-
return undefined;
|
|
100
|
-
}
|
|
101
|
-
// an identifier chained off an array reads through its first element
|
|
102
|
-
const target = Array.isArray(subject) ? subject[0] : subject;
|
|
294
|
+
const target = from(ctx);
|
|
103
295
|
return target == null ? undefined : target[name];
|
|
104
296
|
};
|
|
105
297
|
}
|
|
106
298
|
case 'BinaryExpression': {
|
|
107
299
|
const op = grammar.elements[node.operator];
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
const left = compileAst(node.left, grammar);
|
|
114
|
-
const right = compileAst(node.right, grammar);
|
|
115
|
-
const { evalOnDemand } = op;
|
|
116
|
-
if (evalOnDemand) {
|
|
300
|
+
const left = compile(node.left);
|
|
301
|
+
const right = compile(node.right);
|
|
302
|
+
if (op?.type === 'binaryOp' && op.evalOnDemand) {
|
|
303
|
+
const { evalOnDemand } = op;
|
|
117
304
|
// operands stay unevaluated behind an `eval` thunk, so operators such
|
|
118
305
|
// as && and || can short-circuit
|
|
119
306
|
return (ctx) => evalOnDemand({ eval: () => left(ctx) }, { eval: () => right(ctx) });
|
|
120
307
|
}
|
|
121
|
-
const fn = op.eval;
|
|
308
|
+
const fn = op?.type === 'binaryOp' ? op.eval : undefined;
|
|
122
309
|
if (!fn) {
|
|
123
|
-
|
|
124
|
-
left(ctx);
|
|
125
|
-
right(ctx);
|
|
126
|
-
return undefined;
|
|
127
|
-
};
|
|
310
|
+
throw new Error(`Unknown binary operator '${node.operator}'`);
|
|
128
311
|
}
|
|
129
312
|
return (ctx) => fn(left(ctx), right(ctx));
|
|
130
313
|
}
|
|
131
314
|
case 'UnaryExpression': {
|
|
132
|
-
const right =
|
|
315
|
+
const right = compile(node.right);
|
|
133
316
|
const elem = grammar.elements[node.operator];
|
|
134
317
|
const fn = elem?.type === 'unaryOp'
|
|
135
318
|
? elem.eval
|
|
@@ -137,22 +320,14 @@ function compileAst(ast, grammar) {
|
|
|
137
320
|
? elem.unaryEval
|
|
138
321
|
: undefined;
|
|
139
322
|
if (!fn) {
|
|
140
|
-
|
|
141
|
-
return (ctx) => {
|
|
142
|
-
right(ctx);
|
|
143
|
-
return undefined;
|
|
144
|
-
};
|
|
323
|
+
throw new Error(`Unknown unary operator '${node.operator}'`);
|
|
145
324
|
}
|
|
146
325
|
return (ctx) => fn(right(ctx));
|
|
147
326
|
}
|
|
148
327
|
case 'ConditionalExpression': {
|
|
149
|
-
const test =
|
|
150
|
-
const consequent = node.consequent
|
|
151
|
-
|
|
152
|
-
: undefined;
|
|
153
|
-
const alternate = node.alternate
|
|
154
|
-
? compileAst(node.alternate, grammar)
|
|
155
|
-
: undefined;
|
|
328
|
+
const test = compile(node.test);
|
|
329
|
+
const consequent = node.consequent ? compile(node.consequent) : undefined;
|
|
330
|
+
const alternate = node.alternate ? compile(node.alternate) : undefined;
|
|
156
331
|
return (ctx) => {
|
|
157
332
|
const res = test(ctx);
|
|
158
333
|
if (res) {
|
|
@@ -163,43 +338,29 @@ function compileAst(ast, grammar) {
|
|
|
163
338
|
};
|
|
164
339
|
}
|
|
165
340
|
case 'FilterExpression': {
|
|
166
|
-
const
|
|
167
|
-
const
|
|
341
|
+
const table = literalTable(node.subject);
|
|
342
|
+
const subject = table ? () => table : compile(node.subject);
|
|
343
|
+
const index = compile(node.expr);
|
|
344
|
+
const { getMember } = grammar;
|
|
345
|
+
if (getMember) {
|
|
346
|
+
return (ctx) => {
|
|
347
|
+
const subjectVal = subject(ctx);
|
|
348
|
+
const key = memberKey(index(ctx));
|
|
349
|
+
return subjectVal == null || key === undefined
|
|
350
|
+
? undefined
|
|
351
|
+
: getMember(subjectVal, key);
|
|
352
|
+
};
|
|
353
|
+
}
|
|
168
354
|
return (ctx) => {
|
|
169
355
|
const subjectVal = subject(ctx);
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
return undefined;
|
|
173
|
-
}
|
|
174
|
-
if (typeof indexVal === 'string' || typeof indexVal === 'number') {
|
|
175
|
-
return subjectVal[indexVal];
|
|
176
|
-
}
|
|
177
|
-
// A value with a meaningful string form is indexed by it, which is what
|
|
178
|
-
// JS does and what this did until the evaluator was lowered to closures
|
|
179
|
-
// — the tree-walking version was a bare `subject?.[index]`. Answering
|
|
180
|
-
// `undefined` for everything else reads as a deliberate strictness and
|
|
181
|
-
// is not: nothing wanted it, and the shape it rejects is common.
|
|
182
|
-
//
|
|
183
|
-
// That shape is a one-element array. Every `@gmod/vcf` INFO value is a
|
|
184
|
-
// list — `Number=1` included, so `CLNSIG=Pathogenic` parses to
|
|
185
|
-
// `['Pathogenic']` — and the natural way to colour by one is a lookup
|
|
186
|
-
// table indexed by it. The miss is silent, because such an expression
|
|
187
|
-
// always carries a `|| fallback` for the values it has no entry for,
|
|
188
|
-
// and that fallback then answers for every record.
|
|
189
|
-
//
|
|
190
|
-
// A multi-valued list still misses — `['a','b']` is the key 'a,b' —
|
|
191
|
-
// which is the honest answer rather than a lucky one: reading through
|
|
192
|
-
// to the first element would be the index guessing which value was
|
|
193
|
-
// meant. `Identifier` above does read through a one-element array, but
|
|
194
|
-
// it is navigating rather than selecting, so it has nothing to guess.
|
|
195
|
-
const key = indexKey(indexVal);
|
|
196
|
-
return key === undefined
|
|
356
|
+
const key = memberKey(index(ctx));
|
|
357
|
+
return subjectVal == null || key === undefined
|
|
197
358
|
? undefined
|
|
198
359
|
: subjectVal[key];
|
|
199
360
|
};
|
|
200
361
|
}
|
|
201
362
|
case 'ArrayLiteral': {
|
|
202
|
-
const items = node.value.map(
|
|
363
|
+
const items = node.value.map(compile);
|
|
203
364
|
const len = items.length;
|
|
204
365
|
return (ctx) => {
|
|
205
366
|
const out = new Array(len);
|
|
@@ -212,7 +373,7 @@ function compileAst(ast, grammar) {
|
|
|
212
373
|
case 'ObjectLiteral': {
|
|
213
374
|
const entries = Object.entries(node.value);
|
|
214
375
|
const keys = entries.map(([key]) => key);
|
|
215
|
-
const values = entries.map(([, value]) =>
|
|
376
|
+
const values = entries.map(([, value]) => compile(value));
|
|
216
377
|
const len = keys.length;
|
|
217
378
|
// resolved once, here, so the common case keeps its plain store
|
|
218
379
|
const store = keys.includes('__proto__') ? defineOwn : assignOwn;
|
|
@@ -231,7 +392,7 @@ function compileAst(ast, grammar) {
|
|
|
231
392
|
const { value } = part;
|
|
232
393
|
return () => value;
|
|
233
394
|
}
|
|
234
|
-
const expr =
|
|
395
|
+
const expr = compile(part.value);
|
|
235
396
|
return (ctx) => stringify(expr(ctx));
|
|
236
397
|
});
|
|
237
398
|
return (ctx) => {
|
|
@@ -244,7 +405,7 @@ function compileAst(ast, grammar) {
|
|
|
244
405
|
}
|
|
245
406
|
case 'FunctionCall': {
|
|
246
407
|
const { name } = node;
|
|
247
|
-
const args = node.args.map(
|
|
408
|
+
const args = node.args.map(compile);
|
|
248
409
|
// hasOwn, so that inherited Object.prototype members such as `toString`
|
|
249
410
|
// and `constructor` aren't callable as Jexl functions. Resolved per call
|
|
250
411
|
// rather than baked in, since functions are routinely registered after
|
|
@@ -287,7 +448,7 @@ function compileAst(ast, grammar) {
|
|
|
287
448
|
}
|
|
288
449
|
}
|
|
289
450
|
case 'SequenceExpression': {
|
|
290
|
-
const exprs = node.expressions.map(
|
|
451
|
+
const exprs = node.expressions.map(compile);
|
|
291
452
|
const len = exprs.length;
|
|
292
453
|
return (ctx) => {
|
|
293
454
|
let last;
|
|
@@ -298,13 +459,29 @@ function compileAst(ast, grammar) {
|
|
|
298
459
|
};
|
|
299
460
|
}
|
|
300
461
|
case 'AssignmentExpression': {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
462
|
+
if (scope.params) {
|
|
463
|
+
throw new Error('Assignment is not supported in a lambda');
|
|
464
|
+
}
|
|
465
|
+
const right = compile(node.right);
|
|
466
|
+
const { slots, frame } = scope.locals;
|
|
467
|
+
const slot = slots.get(node.left.value);
|
|
468
|
+
return (ctx) => (frame.locals[slot] = right(ctx));
|
|
469
|
+
}
|
|
470
|
+
case 'Lambda': {
|
|
471
|
+
const body = compileNode(node.body, grammar, {
|
|
472
|
+
...scope,
|
|
473
|
+
params: { names: node.params, outer: scope.params }
|
|
474
|
+
});
|
|
475
|
+
if (!scope.params) {
|
|
476
|
+
const frame = scope.locals?.frame;
|
|
477
|
+
return (ctx) => {
|
|
478
|
+
const locals = frame?.locals;
|
|
479
|
+
return (...args) => body(asContext(new LambdaFrame(args, undefined, ctx, locals)));
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
return (env) => {
|
|
483
|
+
const outer = asFrame(env);
|
|
484
|
+
return (...args) => body(asContext(new LambdaFrame(args, outer, outer.context, outer.locals)));
|
|
308
485
|
};
|
|
309
486
|
}
|
|
310
487
|
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":"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"}
|
package/dist/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,31 @@ 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
|
-
* Returns the binding power of a grammar element, or 0 for elements that
|
|
58
|
-
* aren't operators and therefore don't participate in precedence.
|
|
59
|
-
*/
|
|
60
|
-
export declare function precedenceOf(elem: GrammarElement | undefined): number;
|
|
61
71
|
export declare const getGrammar: () => Grammar;
|