@jbrowse/jexl 2.3.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.
Files changed (89) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/LICENSE.txt +19 -0
  3. package/README.md +216 -0
  4. package/dist/Expression.d.ts +38 -0
  5. package/dist/Expression.js +75 -0
  6. package/dist/Expression.js.map +1 -0
  7. package/dist/Jexl.d.ts +148 -0
  8. package/dist/Jexl.js +208 -0
  9. package/dist/Jexl.js.map +1 -0
  10. package/dist/Lexer.d.ts +130 -0
  11. package/dist/Lexer.js +321 -0
  12. package/dist/Lexer.js.map +1 -0
  13. package/dist/PromiseSync.d.ts +13 -0
  14. package/dist/PromiseSync.js +80 -0
  15. package/dist/PromiseSync.js.map +1 -0
  16. package/dist/evaluator/Evaluator.d.ts +92 -0
  17. package/dist/evaluator/Evaluator.js +153 -0
  18. package/dist/evaluator/Evaluator.js.map +1 -0
  19. package/dist/evaluator/handlers.d.ts +111 -0
  20. package/dist/evaluator/handlers.js +216 -0
  21. package/dist/evaluator/handlers.js.map +1 -0
  22. package/dist/grammar.d.ts +25 -0
  23. package/dist/grammar.js +179 -0
  24. package/dist/grammar.js.map +1 -0
  25. package/dist/index.d.ts +5 -0
  26. package/dist/index.js +20 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/package.json +1 -0
  29. package/dist/parser/Parser.d.ts +112 -0
  30. package/dist/parser/Parser.js +233 -0
  31. package/dist/parser/Parser.js.map +1 -0
  32. package/dist/parser/handlers.d.ts +112 -0
  33. package/dist/parser/handlers.js +302 -0
  34. package/dist/parser/handlers.js.map +1 -0
  35. package/dist/parser/states.d.ts +47 -0
  36. package/dist/parser/states.js +195 -0
  37. package/dist/parser/states.js.map +1 -0
  38. package/dist/types.d.ts +77 -0
  39. package/dist/types.js +7 -0
  40. package/dist/types.js.map +1 -0
  41. package/esm/Expression.d.ts +38 -0
  42. package/esm/Expression.js +70 -0
  43. package/esm/Expression.js.map +1 -0
  44. package/esm/Jexl.d.ts +148 -0
  45. package/esm/Jexl.js +202 -0
  46. package/esm/Jexl.js.map +1 -0
  47. package/esm/Lexer.d.ts +130 -0
  48. package/esm/Lexer.js +319 -0
  49. package/esm/Lexer.js.map +1 -0
  50. package/esm/PromiseSync.d.ts +13 -0
  51. package/esm/PromiseSync.js +78 -0
  52. package/esm/PromiseSync.js.map +1 -0
  53. package/esm/evaluator/Evaluator.d.ts +92 -0
  54. package/esm/evaluator/Evaluator.js +118 -0
  55. package/esm/evaluator/Evaluator.js.map +1 -0
  56. package/esm/evaluator/handlers.d.ts +111 -0
  57. package/esm/evaluator/handlers.js +202 -0
  58. package/esm/evaluator/handlers.js.map +1 -0
  59. package/esm/grammar.d.ts +25 -0
  60. package/esm/grammar.js +175 -0
  61. package/esm/grammar.js.map +1 -0
  62. package/esm/index.d.ts +5 -0
  63. package/esm/index.js +9 -0
  64. package/esm/index.js.map +1 -0
  65. package/esm/parser/Parser.d.ts +112 -0
  66. package/esm/parser/Parser.js +198 -0
  67. package/esm/parser/Parser.js.map +1 -0
  68. package/esm/parser/handlers.d.ts +112 -0
  69. package/esm/parser/handlers.js +280 -0
  70. package/esm/parser/handlers.js.map +1 -0
  71. package/esm/parser/states.d.ts +47 -0
  72. package/esm/parser/states.js +159 -0
  73. package/esm/parser/states.js.map +1 -0
  74. package/esm/types.d.ts +77 -0
  75. package/esm/types.js +6 -0
  76. package/esm/types.js.map +1 -0
  77. package/package.json +67 -0
  78. package/src/Expression.ts +95 -0
  79. package/src/Jexl.ts +232 -0
  80. package/src/Lexer.ts +344 -0
  81. package/src/PromiseSync.ts +86 -0
  82. package/src/evaluator/Evaluator.ts +153 -0
  83. package/src/evaluator/handlers.ts +226 -0
  84. package/src/grammar.ts +200 -0
  85. package/src/index.ts +10 -0
  86. package/src/parser/Parser.ts +235 -0
  87. package/src/parser/handlers.ts +309 -0
  88. package/src/parser/states.ts +177 -0
  89. package/src/types.ts +107 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Evaluator.js","sourceRoot":"","sources":["../../src/evaluator/Evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import type Evaluator from './Evaluator.ts';
2
+ /**
3
+ * Evaluates an ArrayLiteral by returning its value, with each element
4
+ * independently run through the evaluator.
5
+ * @param {{type: 'ObjectLiteral', value: <{}>}} ast An expression tree with an
6
+ * ObjectLiteral as the top node
7
+ * @returns {Promise.<[]>} resolves to a map contained evaluated values.
8
+ * @private
9
+ */
10
+ export declare function ArrayLiteral(this: Evaluator, ast: any): any;
11
+ /**
12
+ * Evaluates a BinaryExpression node by running the Grammar's evaluator for
13
+ * the given operator. Note that binary expressions support two types of
14
+ * evaluators: `eval` is called with the left and right operands pre-evaluated.
15
+ * `evalOnDemand`, if it exists, will be called with the left and right operands
16
+ * each individually wrapped in an object with an "eval" function that returns
17
+ * a promise with the resulting value. This allows the binary expression to
18
+ * evaluate the operands conditionally.
19
+ * @param {{type: 'BinaryExpression', operator: <string>, left: {},
20
+ * right: {}}} ast An expression tree with a BinaryExpression as the top
21
+ * node
22
+ * @returns {Promise<*>} resolves with the value of the BinaryExpression.
23
+ * @private
24
+ */
25
+ export declare function BinaryExpression(this: Evaluator, ast: any): any;
26
+ /**
27
+ * Evaluates a ConditionalExpression node by first evaluating its test branch,
28
+ * and resolving with the consequent branch if the test is truthy, or the
29
+ * alternate branch if it is not. If there is no consequent branch, the test
30
+ * result will be used instead.
31
+ * @param {{type: 'ConditionalExpression', test: {}, consequent: {},
32
+ * alternate: {}}} ast An expression tree with a ConditionalExpression as
33
+ * the top node
34
+ * @private
35
+ */
36
+ export declare function ConditionalExpression(this: Evaluator, ast: any): any;
37
+ /**
38
+ * Evaluates a FilterExpression by applying it to the subject value.
39
+ * @param {{type: 'FilterExpression', relative: <boolean>, expr: {},
40
+ * subject: {}}} ast An expression tree with a FilterExpression as the top
41
+ * node
42
+ * @returns {Promise<*>} resolves with the value of the FilterExpression.
43
+ * @private
44
+ */
45
+ export declare function FilterExpression(this: Evaluator, ast: any): any;
46
+ /**
47
+ * Evaluates an Identifier by either stemming from the evaluated 'from'
48
+ * expression tree or accessing the context provided when this Evaluator was
49
+ * constructed.
50
+ * @param {{type: 'Identifier', value: <string>, [from]: {}}} ast An expression
51
+ * tree with an Identifier as the top node
52
+ * @returns {Promise<*>|*} either the identifier's value, or a Promise that
53
+ * will resolve with the identifier's value.
54
+ * @private
55
+ */
56
+ export declare function Identifier(this: Evaluator, ast: any): any;
57
+ /**
58
+ * Evaluates a Literal by returning its value property.
59
+ * @param {{type: 'Literal', value: <string|number|boolean>}} ast An expression
60
+ * tree with a Literal as its only node
61
+ * @returns {string|number|boolean} The value of the Literal node
62
+ * @private
63
+ */
64
+ export declare function Literal(this: Evaluator, ast: any): any;
65
+ /**
66
+ * Evaluates a TemplateLiteral by evaluating each interpolated expression
67
+ * and concatenating all parts into a final string.
68
+ * @param {{type: 'TemplateLiteral', parts: Array<{}>}} ast An expression
69
+ * tree with a TemplateLiteral as the top node
70
+ * @returns {Promise<string>} resolves with the final interpolated string
71
+ * @private
72
+ */
73
+ export declare function TemplateLiteral(this: Evaluator, ast: any): any;
74
+ /**
75
+ * Evaluates an ObjectLiteral by returning its value, with each key
76
+ * independently run through the evaluator.
77
+ * @param {{type: 'ObjectLiteral', value: <{}>}} ast An expression tree with an
78
+ * ObjectLiteral as the top node
79
+ * @returns {Promise<{}>} resolves to a map contained evaluated values.
80
+ * @private
81
+ */
82
+ export declare function ObjectLiteral(this: Evaluator, ast: any): any;
83
+ /**
84
+ * Evaluates a FunctionCall node by applying the supplied arguments to a
85
+ * function defined in one of the grammar's function pools.
86
+ * @param {{type: 'FunctionCall', name: <string>}} ast An
87
+ * expression tree with a FunctionCall as the top node
88
+ * @returns {Promise<*>|*} the value of the function call, or a Promise that
89
+ * will resolve with the resulting value.
90
+ * @private
91
+ */
92
+ export declare function FunctionCall(this: Evaluator, ast: any): any;
93
+ /**
94
+ * Evaluates a Unary expression by passing the right side through the
95
+ * operator's eval function.
96
+ * @param {{type: 'UnaryExpression', operator: <string>, right: {}}} ast An
97
+ * expression tree with a UnaryExpression as the top node
98
+ * @returns {Promise<*>} resolves with the value of the UnaryExpression.
99
+ * @constructor
100
+ */
101
+ export declare function UnaryExpression(this: Evaluator, ast: any): any;
102
+ /**
103
+ * Evaluates a SequenceExpression by evaluating each expression in order
104
+ * and returning the value of the last expression.
105
+ */
106
+ export declare function SequenceExpression(this: Evaluator, ast: any): any;
107
+ /**
108
+ * Evaluates an AssignmentExpression by evaluating the right side
109
+ * and assigning it to the variable name on the left side.
110
+ */
111
+ export declare function AssignmentExpression(this: Evaluator, ast: any): any;
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ /*
3
+ * Jexl
4
+ * Copyright 2020 Tom Shawver
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ArrayLiteral = ArrayLiteral;
8
+ exports.BinaryExpression = BinaryExpression;
9
+ exports.ConditionalExpression = ConditionalExpression;
10
+ exports.FilterExpression = FilterExpression;
11
+ exports.Identifier = Identifier;
12
+ exports.Literal = Literal;
13
+ exports.TemplateLiteral = TemplateLiteral;
14
+ exports.ObjectLiteral = ObjectLiteral;
15
+ exports.FunctionCall = FunctionCall;
16
+ exports.UnaryExpression = UnaryExpression;
17
+ exports.SequenceExpression = SequenceExpression;
18
+ exports.AssignmentExpression = AssignmentExpression;
19
+ const poolNames = {
20
+ functions: 'Jexl Function',
21
+ transforms: 'Transform'
22
+ };
23
+ /**
24
+ * Evaluates an ArrayLiteral by returning its value, with each element
25
+ * independently run through the evaluator.
26
+ * @param {{type: 'ObjectLiteral', value: <{}>}} ast An expression tree with an
27
+ * ObjectLiteral as the top node
28
+ * @returns {Promise.<[]>} resolves to a map contained evaluated values.
29
+ * @private
30
+ */
31
+ function ArrayLiteral(ast) {
32
+ return this.evalArray(ast.value);
33
+ }
34
+ /**
35
+ * Evaluates a BinaryExpression node by running the Grammar's evaluator for
36
+ * the given operator. Note that binary expressions support two types of
37
+ * evaluators: `eval` is called with the left and right operands pre-evaluated.
38
+ * `evalOnDemand`, if it exists, will be called with the left and right operands
39
+ * each individually wrapped in an object with an "eval" function that returns
40
+ * a promise with the resulting value. This allows the binary expression to
41
+ * evaluate the operands conditionally.
42
+ * @param {{type: 'BinaryExpression', operator: <string>, left: {},
43
+ * right: {}}} ast An expression tree with a BinaryExpression as the top
44
+ * node
45
+ * @returns {Promise<*>} resolves with the value of the BinaryExpression.
46
+ * @private
47
+ */
48
+ function BinaryExpression(ast) {
49
+ const grammarOp = this._grammar.elements[ast.operator];
50
+ if (grammarOp.evalOnDemand) {
51
+ const wrap = (subAst) => ({ eval: () => this.eval(subAst) });
52
+ return grammarOp.evalOnDemand(wrap(ast.left), wrap(ast.right));
53
+ }
54
+ return this.Promise.all([this.eval(ast.left), this.eval(ast.right)]).then((arr) => grammarOp.eval(arr[0], arr[1]));
55
+ }
56
+ /**
57
+ * Evaluates a ConditionalExpression node by first evaluating its test branch,
58
+ * and resolving with the consequent branch if the test is truthy, or the
59
+ * alternate branch if it is not. If there is no consequent branch, the test
60
+ * result will be used instead.
61
+ * @param {{type: 'ConditionalExpression', test: {}, consequent: {},
62
+ * alternate: {}}} ast An expression tree with a ConditionalExpression as
63
+ * the top node
64
+ * @private
65
+ */
66
+ function ConditionalExpression(ast) {
67
+ return this.eval(ast.test).then((res) => {
68
+ if (res) {
69
+ if (ast.consequent) {
70
+ return this.eval(ast.consequent);
71
+ }
72
+ return res;
73
+ }
74
+ return this.eval(ast.alternate);
75
+ });
76
+ }
77
+ /**
78
+ * Evaluates a FilterExpression by applying it to the subject value.
79
+ * @param {{type: 'FilterExpression', relative: <boolean>, expr: {},
80
+ * subject: {}}} ast An expression tree with a FilterExpression as the top
81
+ * node
82
+ * @returns {Promise<*>} resolves with the value of the FilterExpression.
83
+ * @private
84
+ */
85
+ function FilterExpression(ast) {
86
+ return this.eval(ast.subject).then((subject) => {
87
+ if (ast.relative) {
88
+ return this._filterRelative(subject, ast.expr);
89
+ }
90
+ return this._filterStatic(subject, ast.expr);
91
+ });
92
+ }
93
+ /**
94
+ * Evaluates an Identifier by either stemming from the evaluated 'from'
95
+ * expression tree or accessing the context provided when this Evaluator was
96
+ * constructed.
97
+ * @param {{type: 'Identifier', value: <string>, [from]: {}}} ast An expression
98
+ * tree with an Identifier as the top node
99
+ * @returns {Promise<*>|*} either the identifier's value, or a Promise that
100
+ * will resolve with the identifier's value.
101
+ * @private
102
+ */
103
+ function Identifier(ast) {
104
+ if (!ast.from) {
105
+ const contextSource = ast.relative ? this._relContext : this._context;
106
+ return contextSource[ast.value];
107
+ }
108
+ return this.eval(ast.from).then((context) => {
109
+ if (context == null) {
110
+ return undefined;
111
+ }
112
+ const ctx = Array.isArray(context) ? context[0] : context;
113
+ return ctx?.[ast.value];
114
+ });
115
+ }
116
+ /**
117
+ * Evaluates a Literal by returning its value property.
118
+ * @param {{type: 'Literal', value: <string|number|boolean>}} ast An expression
119
+ * tree with a Literal as its only node
120
+ * @returns {string|number|boolean} The value of the Literal node
121
+ * @private
122
+ */
123
+ function Literal(ast) {
124
+ return ast.value;
125
+ }
126
+ /**
127
+ * Evaluates a TemplateLiteral by evaluating each interpolated expression
128
+ * and concatenating all parts into a final string.
129
+ * @param {{type: 'TemplateLiteral', parts: Array<{}>}} ast An expression
130
+ * tree with a TemplateLiteral as the top node
131
+ * @returns {Promise<string>} resolves with the final interpolated string
132
+ * @private
133
+ */
134
+ function TemplateLiteral(ast) {
135
+ const promises = ast.parts.map((part) => {
136
+ if (part.type === 'static') {
137
+ return this.Promise.resolve(part.value);
138
+ }
139
+ return this.eval(part.value).then((result) => {
140
+ if (result == null) {
141
+ return '';
142
+ }
143
+ return String(result);
144
+ });
145
+ });
146
+ return this.Promise.all(promises).then((values) => values.join(''));
147
+ }
148
+ /**
149
+ * Evaluates an ObjectLiteral by returning its value, with each key
150
+ * independently run through the evaluator.
151
+ * @param {{type: 'ObjectLiteral', value: <{}>}} ast An expression tree with an
152
+ * ObjectLiteral as the top node
153
+ * @returns {Promise<{}>} resolves to a map contained evaluated values.
154
+ * @private
155
+ */
156
+ function ObjectLiteral(ast) {
157
+ return this.evalMap(ast.value);
158
+ }
159
+ /**
160
+ * Evaluates a FunctionCall node by applying the supplied arguments to a
161
+ * function defined in one of the grammar's function pools.
162
+ * @param {{type: 'FunctionCall', name: <string>}} ast An
163
+ * expression tree with a FunctionCall as the top node
164
+ * @returns {Promise<*>|*} the value of the function call, or a Promise that
165
+ * will resolve with the resulting value.
166
+ * @private
167
+ */
168
+ function FunctionCall(ast) {
169
+ const poolName = poolNames[ast.pool];
170
+ if (!poolName) {
171
+ throw new Error(`Corrupt AST: Pool '${ast.pool}' not found`);
172
+ }
173
+ const pool = this._grammar[ast.pool];
174
+ const func = pool?.[ast.name];
175
+ if (!func) {
176
+ throw new Error(`${poolName} ${ast.name} is not defined.`);
177
+ }
178
+ return this.evalArray(ast.args || []).then((args) => func(...args));
179
+ }
180
+ /**
181
+ * Evaluates a Unary expression by passing the right side through the
182
+ * operator's eval function.
183
+ * @param {{type: 'UnaryExpression', operator: <string>, right: {}}} ast An
184
+ * expression tree with a UnaryExpression as the top node
185
+ * @returns {Promise<*>} resolves with the value of the UnaryExpression.
186
+ * @constructor
187
+ */
188
+ function UnaryExpression(ast) {
189
+ return this.eval(ast.right).then((right) => this._grammar.elements[ast.operator].eval(right));
190
+ }
191
+ /**
192
+ * Evaluates a SequenceExpression by evaluating each expression in order
193
+ * and returning the value of the last expression.
194
+ */
195
+ function SequenceExpression(ast) {
196
+ let lastValue;
197
+ let promise = this.Promise.resolve();
198
+ for (const expr of ast.expressions) {
199
+ promise = promise.then(() => this.eval(expr).then((val) => {
200
+ lastValue = val;
201
+ }));
202
+ }
203
+ return promise.then(() => lastValue);
204
+ }
205
+ /**
206
+ * Evaluates an AssignmentExpression by evaluating the right side
207
+ * and assigning it to the variable name on the left side.
208
+ */
209
+ function AssignmentExpression(ast) {
210
+ return this.eval(ast.right).then((value) => {
211
+ const varName = ast.left.value;
212
+ this._context[varName] = value;
213
+ return value;
214
+ });
215
+ }
216
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/evaluator/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface BinaryOp {
2
+ type: 'binaryOp';
3
+ precedence: number;
4
+ eval?: (left: any, right: any) => any;
5
+ evalOnDemand?: (left: {
6
+ eval: () => Promise<any>;
7
+ }, right: {
8
+ eval: () => Promise<any>;
9
+ }) => Promise<any>;
10
+ }
11
+ export interface UnaryOp {
12
+ type: 'unaryOp';
13
+ precedence: number;
14
+ eval: (right: any) => any;
15
+ }
16
+ export interface SimpleElement {
17
+ type: string;
18
+ }
19
+ export type GrammarElement = BinaryOp | UnaryOp | SimpleElement;
20
+ export interface Grammar {
21
+ elements: Record<string, GrammarElement>;
22
+ functions: Record<string, (...args: any[]) => any>;
23
+ transforms: Record<string, (val: any, ...args: any[]) => any>;
24
+ }
25
+ export declare const getGrammar: () => Grammar;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ /*
3
+ * Jexl
4
+ * Copyright 2020 Tom Shawver
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getGrammar = void 0;
8
+ const getGrammar = () => ({
9
+ /**
10
+ * A map of all expression elements to their properties. Note that changes
11
+ * here may require changes in the Lexer or Parser.
12
+ * @type {{}}
13
+ */
14
+ elements: {
15
+ '.': { type: 'dot' },
16
+ '[': { type: 'openBracket' },
17
+ ']': { type: 'closeBracket' },
18
+ '|': { type: 'pipe' },
19
+ '{': { type: 'openCurl' },
20
+ '}': { type: 'closeCurl' },
21
+ ':': { type: 'colon' },
22
+ ',': { type: 'comma' },
23
+ '(': { type: 'openParen' },
24
+ ')': { type: 'closeParen' },
25
+ '?': { type: 'question' },
26
+ ';': { type: 'semicolon' },
27
+ '+': {
28
+ type: 'binaryOp',
29
+ precedence: 30,
30
+ eval: (left, right) => left + right
31
+ },
32
+ '-': {
33
+ type: 'binaryOp',
34
+ precedence: 30,
35
+ eval: (left, right) => left - right
36
+ },
37
+ '*': {
38
+ type: 'binaryOp',
39
+ precedence: 40,
40
+ eval: (left, right) => left * right
41
+ },
42
+ '/': {
43
+ type: 'binaryOp',
44
+ precedence: 40,
45
+ eval: (left, right) => left / right
46
+ },
47
+ '//': {
48
+ type: 'binaryOp',
49
+ precedence: 40,
50
+ eval: (left, right) => Math.floor(left / right)
51
+ },
52
+ '%': {
53
+ type: 'binaryOp',
54
+ precedence: 50,
55
+ eval: (left, right) => left % right
56
+ },
57
+ '^': {
58
+ type: 'binaryOp',
59
+ precedence: 50,
60
+ eval: (left, right) => Math.pow(left, right)
61
+ },
62
+ '==': {
63
+ type: 'binaryOp',
64
+ precedence: 20,
65
+ eval: (left, right) => left == right
66
+ },
67
+ '!=': {
68
+ type: 'binaryOp',
69
+ precedence: 20,
70
+ eval: (left, right) => left != right
71
+ },
72
+ '>': {
73
+ type: 'binaryOp',
74
+ precedence: 20,
75
+ eval: (left, right) => left > right
76
+ },
77
+ '>=': {
78
+ type: 'binaryOp',
79
+ precedence: 20,
80
+ eval: (left, right) => left >= right
81
+ },
82
+ '<': {
83
+ type: 'binaryOp',
84
+ precedence: 20,
85
+ eval: (left, right) => left < right
86
+ },
87
+ '<=': {
88
+ type: 'binaryOp',
89
+ precedence: 20,
90
+ eval: (left, right) => left <= right
91
+ },
92
+ '&&': {
93
+ type: 'binaryOp',
94
+ precedence: 10,
95
+ evalOnDemand: (left, right) => {
96
+ return left.eval().then((leftVal) => {
97
+ if (!leftVal) {
98
+ return leftVal;
99
+ }
100
+ return right.eval();
101
+ });
102
+ }
103
+ },
104
+ '||': {
105
+ type: 'binaryOp',
106
+ precedence: 10,
107
+ evalOnDemand: (left, right) => {
108
+ return left.eval().then((leftVal) => {
109
+ if (leftVal) {
110
+ return leftVal;
111
+ }
112
+ return right.eval();
113
+ });
114
+ }
115
+ },
116
+ in: {
117
+ type: 'binaryOp',
118
+ precedence: 20,
119
+ eval: (left, right) => {
120
+ if (typeof right === 'string') {
121
+ return right.includes(left);
122
+ }
123
+ if (Array.isArray(right)) {
124
+ return right.includes(left);
125
+ }
126
+ return false;
127
+ }
128
+ },
129
+ '!': {
130
+ type: 'unaryOp',
131
+ precedence: Infinity,
132
+ eval: (right) => !right
133
+ },
134
+ '=': {
135
+ type: 'binaryOp',
136
+ precedence: 2,
137
+ eval: (_left, _right) => {
138
+ throw new Error('Assignment handled specially');
139
+ }
140
+ }
141
+ },
142
+ /**
143
+ * A map of function names to javascript functions. A Jexl function
144
+ * takes zero ore more arguemnts:
145
+ *
146
+ * - {*} ...args: A variable number of arguments passed to this function.
147
+ * All of these are pre-evaluated to their actual values before calling
148
+ * the function.
149
+ *
150
+ * The Jexl function should return either the transformed value, or
151
+ * a Promises/A+ Promise object that resolves with the value and rejects
152
+ * or throws only when an unrecoverable error occurs. Functions should
153
+ * generally return undefined when they don't make sense to be used on the
154
+ * given value type, rather than throw/reject. An error is only
155
+ * appropriate when the function would normally return a value, but
156
+ * cannot due to some other failure.
157
+ */
158
+ functions: {},
159
+ /**
160
+ * A map of transform names to transform functions. A transform function
161
+ * takes one ore more arguemnts:
162
+ *
163
+ * - {*} val: A value to be transformed
164
+ * - {*} ...args: A variable number of arguments passed to this transform.
165
+ * All of these are pre-evaluated to their actual values before calling
166
+ * the function.
167
+ *
168
+ * The transform function should return either the transformed value, or
169
+ * a Promises/A+ Promise object that resolves with the value and rejects
170
+ * or throws only when an unrecoverable error occurs. Transforms should
171
+ * generally return undefined when they don't make sense to be used on the
172
+ * given value type, rather than throw/reject. An error is only
173
+ * appropriate when the transform would normally return a value, but
174
+ * cannot due to some other failure.
175
+ */
176
+ transforms: {}
177
+ });
178
+ exports.getGrammar = getGrammar;
179
+ //# sourceMappingURL=grammar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grammar.js","sourceRoot":"","sources":["../src/grammar.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA6BI,MAAM,UAAU,GAAG,GAAY,EAAE,CAAC,CAAC;IACxC;;;;OAIG;IACH,QAAQ,EAAE;QACR,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACpB,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;QAC5B,GAAG,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;QAC7B,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACrB,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;QACzB,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;QAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QACtB,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QACtB,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;QAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;QAC3B,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;QACzB,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;QAC1B,GAAG,EAAE;YACH,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK;SACpC;QACD,GAAG,EAAE;YACH,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK;SACpC;QACD,GAAG,EAAE;YACH,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK;SACpC;QACD,GAAG,EAAE;YACH,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK;SACpC;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;SAChD;QACD,GAAG,EAAE;YACH,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK;SACpC;QACD,GAAG,EAAE;YACH,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;SAC7C;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK;SACrC;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK;SACrC;QACD,GAAG,EAAE;YACH,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK;SACpC;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK;SACrC;QACD,GAAG,EAAE;YACH,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK;SACpC;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK;SACrC;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC5B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;oBAClC,IAAI,CAAC,OAAO,EAAE,CAAC;wBAAA,OAAO,OAAO,CAAA;oBAAA,CAAC;oBAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;gBACrB,CAAC,CAAC,CAAA;YACJ,CAAC;SACF;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC5B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;oBAClC,IAAI,OAAO,EAAE,CAAC;wBAAA,OAAO,OAAO,CAAA;oBAAA,CAAC;oBAC7B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;gBACrB,CAAC,CAAC,CAAA;YACJ,CAAC;SACF;QACD,EAAE,EAAE;YACF,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAC7B,CAAC;gBACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAC7B,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC;SACF;QACD,GAAG,EAAE;YACH,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,QAAQ;YACpB,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK;SACxB;QACD,GAAG,EAAE;YACH,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,CAAC;YACb,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;gBACtB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YACjD,CAAC;SACF;KACF;IAED;;;;;;;;;;;;;;;OAeG;IACH,SAAS,EAAE,EAAE;IAEb;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU,EAAE,EAAE;CACf,CAAC,CAAA;AAvKW,QAAA,UAAU,cAuKrB"}
@@ -0,0 +1,5 @@
1
+ export { Jexl, default } from './Jexl.ts';
2
+ export { default as Expression } from './Expression.ts';
3
+ export { default as Lexer } from './Lexer.ts';
4
+ export { getGrammar } from './grammar.ts';
5
+ export type * from './types.ts';
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /*
3
+ * Jexl
4
+ * Copyright 2020 Tom Shawver
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.getGrammar = exports.Lexer = exports.Expression = exports.default = exports.Jexl = void 0;
11
+ var Jexl_ts_1 = require("./Jexl.js");
12
+ Object.defineProperty(exports, "Jexl", { enumerable: true, get: function () { return Jexl_ts_1.Jexl; } });
13
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(Jexl_ts_1).default; } });
14
+ var Expression_ts_1 = require("./Expression.js");
15
+ Object.defineProperty(exports, "Expression", { enumerable: true, get: function () { return __importDefault(Expression_ts_1).default; } });
16
+ var Lexer_ts_1 = require("./Lexer.js");
17
+ Object.defineProperty(exports, "Lexer", { enumerable: true, get: function () { return __importDefault(Lexer_ts_1).default; } });
18
+ var grammar_ts_1 = require("./grammar.js");
19
+ Object.defineProperty(exports, "getGrammar", { enumerable: true, get: function () { return grammar_ts_1.getGrammar; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,qCAAyC;AAAhC,+FAAA,IAAI,OAAA;AAAE,mHAAA,OAAO,OAAA;AACtB,iDAAuD;AAA9C,4HAAA,OAAO,OAAc;AAC9B,uCAA6C;AAApC,kHAAA,OAAO,OAAS;AACzB,2CAAyC;AAAhC,wGAAA,UAAU,OAAA"}
@@ -0,0 +1 @@
1
+ {"type": "commonjs"}