@jbrowse/jexl 5.0.2 → 6.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.
Files changed (83) hide show
  1. package/README.md +4 -1
  2. package/dist/Jexl.js +12 -16
  3. package/dist/Jexl.js.map +1 -1
  4. package/dist/Lexer.d.ts +12 -94
  5. package/dist/Lexer.js +41 -142
  6. package/dist/Lexer.js.map +1 -1
  7. package/dist/analyze.d.ts +2 -0
  8. package/dist/analyze.js +7 -7
  9. package/dist/analyze.js.map +1 -1
  10. package/dist/check.js +30 -30
  11. package/dist/check.js.map +1 -1
  12. package/dist/collections.d.ts +7 -0
  13. package/dist/collections.js +9 -2
  14. package/dist/collections.js.map +1 -1
  15. package/dist/conditions.d.ts +1 -1
  16. package/dist/conditions.js +25 -47
  17. package/dist/conditions.js.map +1 -1
  18. package/dist/errors.d.ts +5 -0
  19. package/dist/errors.js +8 -0
  20. package/dist/errors.js.map +1 -1
  21. package/dist/evaluator/compile.js +37 -24
  22. package/dist/evaluator/compile.js.map +1 -1
  23. package/dist/grammar.d.ts +2 -2
  24. package/dist/grammar.js +1 -8
  25. package/dist/grammar.js.map +1 -1
  26. package/dist/operators.d.ts +5 -0
  27. package/dist/operators.js +9 -5
  28. package/dist/operators.js.map +1 -1
  29. package/dist/parser/Parser.d.ts +11 -12
  30. package/dist/parser/Parser.js +4 -10
  31. package/dist/parser/Parser.js.map +1 -1
  32. package/dist/print.d.ts +1 -1
  33. package/dist/print.js +41 -47
  34. package/dist/print.js.map +1 -1
  35. package/dist/types.d.ts +18 -21
  36. package/esm/Jexl.js +12 -16
  37. package/esm/Jexl.js.map +1 -1
  38. package/esm/Lexer.d.ts +12 -94
  39. package/esm/Lexer.js +40 -142
  40. package/esm/Lexer.js.map +1 -1
  41. package/esm/analyze.d.ts +2 -0
  42. package/esm/analyze.js +6 -7
  43. package/esm/analyze.js.map +1 -1
  44. package/esm/check.js +28 -28
  45. package/esm/check.js.map +1 -1
  46. package/esm/collections.d.ts +7 -0
  47. package/esm/collections.js +8 -1
  48. package/esm/collections.js.map +1 -1
  49. package/esm/conditions.d.ts +1 -1
  50. package/esm/conditions.js +26 -48
  51. package/esm/conditions.js.map +1 -1
  52. package/esm/errors.d.ts +5 -0
  53. package/esm/errors.js +7 -0
  54. package/esm/errors.js.map +1 -1
  55. package/esm/evaluator/compile.js +37 -24
  56. package/esm/evaluator/compile.js.map +1 -1
  57. package/esm/grammar.d.ts +2 -2
  58. package/esm/grammar.js +1 -8
  59. package/esm/grammar.js.map +1 -1
  60. package/esm/operators.d.ts +5 -0
  61. package/esm/operators.js +8 -5
  62. package/esm/operators.js.map +1 -1
  63. package/esm/parser/Parser.d.ts +11 -12
  64. package/esm/parser/Parser.js +4 -8
  65. package/esm/parser/Parser.js.map +1 -1
  66. package/esm/print.d.ts +1 -1
  67. package/esm/print.js +41 -47
  68. package/esm/print.js.map +1 -1
  69. package/esm/types.d.ts +18 -21
  70. package/package.json +1 -1
  71. package/src/Jexl.ts +13 -20
  72. package/src/Lexer.ts +42 -144
  73. package/src/analyze.ts +10 -10
  74. package/src/check.ts +47 -53
  75. package/src/collections.ts +11 -1
  76. package/src/conditions.ts +38 -61
  77. package/src/errors.ts +10 -0
  78. package/src/evaluator/compile.ts +49 -36
  79. package/src/grammar.ts +3 -9
  80. package/src/operators.ts +10 -6
  81. package/src/parser/Parser.ts +13 -19
  82. package/src/print.ts +50 -52
  83. package/src/types.ts +19 -23
package/dist/print.js CHANGED
@@ -8,29 +8,15 @@ exports.isName = isName;
8
8
  exports.key = key;
9
9
  exports.quote = quote;
10
10
  exports.print = print;
11
- const PRECEDENCE = {
12
- '=': 2,
13
- '||': 10,
14
- '??': 10,
15
- '&&': 11,
16
- '==': 20,
17
- '!=': 20,
18
- '~': 20,
19
- '!~': 20,
20
- '<': 20,
21
- '<=': 20,
22
- '>': 20,
23
- '>=': 20,
24
- in: 20,
25
- '+': 30,
26
- '-': 30,
27
- '*': 40,
28
- '/': 40,
29
- '//': 40,
30
- '%': 50,
31
- '^': 50
32
- };
33
- const RIGHT_ASSOCIATIVE = new Set(['^']);
11
+ const Lexer_ts_1 = require("./Lexer.js");
12
+ const grammar_ts_1 = require("./grammar.js");
13
+ const { elements } = (0, grammar_ts_1.getGrammar)();
14
+ // print knows where only the built-in operators bind, so a host's own ones
15
+ // print with their operands parenthesized
16
+ function builtIn(operator) {
17
+ const element = elements[operator];
18
+ return element?.type === 'binaryOp' ? element : undefined;
19
+ }
34
20
  const LOGICAL = new Set(['||', '&&']);
35
21
  // how tightly each form binds, mirroring the Parser's levels: `;`, then `=`
36
22
  // and lambdas, then `?:`, then binary operators, then prefix operators
@@ -39,11 +25,14 @@ const ASSIGNMENT = 1;
39
25
  const CONDITIONAL = 2;
40
26
  const CUSTOM_BINARY = 3;
41
27
  const UNARY = 100;
42
- const letter = String.raw `a-zA-Zа-яА-Я_À-ÖØ-öø-ÿ$`;
43
- const IDENTIFIER = new RegExp(`^[${letter}][${letter}0-9]*$`);
44
- const WORDS = new Set(['in', 'true', 'false', 'null']);
28
+ const WORDS = new Set([
29
+ 'true',
30
+ 'false',
31
+ 'null',
32
+ ...Object.keys(elements).filter((word) => Lexer_ts_1.identRegex.test(word))
33
+ ]);
45
34
  function isName(text) {
46
- return IDENTIFIER.test(text) && !WORDS.has(text);
35
+ return Lexer_ts_1.identRegex.test(text) && !WORDS.has(text);
47
36
  }
48
37
  function key(name) {
49
38
  return isName(name) ? `.${name}` : `[${quote(name)}]`;
@@ -65,7 +54,7 @@ function precedenceOf(node) {
65
54
  return node.alternate ? CONDITIONAL : SEQUENCE;
66
55
  }
67
56
  case 'BinaryExpression': {
68
- return PRECEDENCE[node.operator] ?? CUSTOM_BINARY;
57
+ return builtIn(node.operator)?.precedence ?? CUSTOM_BINARY;
69
58
  }
70
59
  case 'UnaryExpression': {
71
60
  return UNARY;
@@ -75,24 +64,24 @@ function precedenceOf(node) {
75
64
  }
76
65
  }
77
66
  }
78
- function within(ast, least) {
79
- const text = print(ast);
80
- return precedenceOf(ast) < least ? `(${text})` : text;
67
+ function within(node, least) {
68
+ const text = print(node);
69
+ return precedenceOf(node) < least ? `(${text})` : text;
81
70
  }
82
- function binaryOperand(parent, ast, left) {
83
- const own = PRECEDENCE[parent.operator];
84
- if (own === undefined) {
85
- return within(ast, UNARY);
71
+ function binaryOperand(parent, child, left) {
72
+ const op = builtIn(parent.operator);
73
+ if (!op) {
74
+ return within(child, UNARY);
86
75
  }
87
- const child = ast;
76
+ const own = op.precedence;
88
77
  const theirs = precedenceOf(child);
89
78
  const chained = child.type === 'BinaryExpression' &&
90
- RIGHT_ASSOCIATIVE.has(parent.operator) &&
91
- RIGHT_ASSOCIATIVE.has(child.operator);
79
+ !!op.rightAssociative &&
80
+ !!builtIn(child.operator)?.rightAssociative;
92
81
  const mixesNullish = child.type === 'BinaryExpression' &&
93
82
  ((parent.operator === '??' && LOGICAL.has(child.operator)) ||
94
83
  (child.operator === '??' && LOGICAL.has(parent.operator)));
95
- const text = print(ast);
84
+ const text = print(child);
96
85
  return theirs < own || (theirs === own && left === chained) || mixesNullish
97
86
  ? `(${text})`
98
87
  : text;
@@ -101,16 +90,21 @@ function binaryOperand(parent, ast, left) {
101
90
  * Renders a tree back to expression text, for messages and suggestions. The
102
91
  * text parses back to the same tree.
103
92
  */
104
- function print(ast) {
105
- const node = ast;
93
+ function print(node) {
106
94
  switch (node.type) {
107
95
  case 'Literal': {
108
96
  const { value } = node;
109
- return typeof value === 'string'
110
- ? quote(value)
111
- : Object.is(value, -0)
112
- ? '-0'
113
- : String(value);
97
+ if (typeof value === 'string') {
98
+ return quote(value);
99
+ }
100
+ // a number too large for a double reads as Infinity, which is a name
101
+ return Object.is(value, -0)
102
+ ? '-0'
103
+ : value === Infinity
104
+ ? '1e999'
105
+ : value === -Infinity
106
+ ? '-1e999'
107
+ : String(value);
114
108
  }
115
109
  case 'Identifier': {
116
110
  return node.from
@@ -130,7 +124,7 @@ function print(ast) {
130
124
  if (operator === '-' && /^\d/.test(right)) {
131
125
  return `-(${right})`;
132
126
  }
133
- return IDENTIFIER.test(operator)
127
+ return Lexer_ts_1.identRegex.test(operator)
134
128
  ? `${operator} ${right}`
135
129
  : operator + right;
136
130
  }
package/dist/print.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"print.js","sourceRoot":"","sources":["../src/print.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../src/print.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAiCH,wBAEC;AAED,kBAEC;AAED,sBAEC;AA6DD,sBA+FC;AArMD,yCAAuC;AACvC,6CAAyC;AAIzC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,uBAAU,GAAE,CAAA;AAEjC,2EAA2E;AAC3E,0CAA0C;AAC1C,SAAS,OAAO,CAAC,QAAgB;IAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAClC,OAAO,OAAO,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;AAC3D,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAErC,4EAA4E;AAC5E,uEAAuE;AACvE,MAAM,QAAQ,GAAG,CAAC,CAAA;AAClB,MAAM,UAAU,GAAG,CAAC,CAAA;AACpB,MAAM,WAAW,GAAG,CAAC,CAAA;AACrB,MAAM,aAAa,GAAG,CAAC,CAAA;AACvB,MAAM,KAAK,GAAG,GAAG,CAAA;AAEjB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;IACpB,MAAM;IACN,OAAO;IACP,MAAM;IACN,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;CACjE,CAAC,CAAA;AAEF,SAAgB,MAAM,CAAC,IAAY;IACjC,OAAO,qBAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAClD,CAAC;AAED,SAAgB,GAAG,CAAC,IAAY;IAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAA;AACvD,CAAC;AAED,SAAgB,KAAK,CAAC,IAAY;IAChC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAA,IAAI,CAAC,GAAG,CAAA;AAC7E,CAAC;AAED,SAAS,YAAY,CAAC,IAAa;IACjC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,KAAK,sBAAsB,CAAC;QAC5B,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,4EAA4E;YAC5E,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAA;QAChD,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,UAAU,IAAI,aAAa,CAAA;QAC5D,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,QAAQ,CAAA;QACjB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,IAAa,EAAE,KAAa;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACxB,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;AACxD,CAAC;AAED,SAAS,aAAa,CACpB,MAAwB,EACxB,KAAc,EACd,IAAa;IAEb,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACnC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAA;IACzB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAClC,MAAM,OAAO,GACX,KAAK,CAAC,IAAI,KAAK,kBAAkB;QACjC,CAAC,CAAC,EAAE,CAAC,gBAAgB;QACrB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAA;IAC7C,MAAM,YAAY,GAChB,KAAK,CAAC,IAAI,KAAK,kBAAkB;QACjC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACxD,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IACzB,OAAO,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,OAAO,CAAC,IAAI,YAAY;QACzE,CAAC,CAAC,IAAI,IAAI,GAAG;QACb,CAAC,CAAC,IAAI,CAAA;AACV,CAAC;AAED;;;GAGG;AACH,SAAgB,KAAK,CAAC,IAAa;IACjC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;YACtB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAC,KAAK,CAAC,CAAA;YACrB,CAAC;YACD,qEAAqE;YACrE,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACzB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,KAAK,KAAK,QAAQ;oBAClB,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ;wBACnB,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,OAAO,IAAI,CAAC,IAAI;gBACd,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA;QAChB,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAA;QAC9E,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAA;QAC7G,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;YACzB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACvC,yDAAyD;YACzD,IAAI,QAAQ,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,OAAO,KAAK,KAAK,GAAG,CAAA;YACtB,CAAC;YACD,OAAO,qBAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAC9B,CAAC,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE;gBACxB,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAA;QACtB,CAAC;QACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;YAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;gBAChC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG;gBAC5C,CAAC,CAAC,EAAE,CAAA;YACN,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS;gBAC9B,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;gBAC1C,CAAC,CAAC,EAAE,CAAA;YACN,OAAO,GAAG,IAAI,KAAK,UAAU,IAAI,SAAS,EAAE,CAAA;QAC9C,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAA;YAC5D,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;QAC3C,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;YAChE,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;QAChC,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAC5C,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAChB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CACvE,CAAA;YACD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;QAClC,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACpC,IAAI,CAAC,IAAI,KAAK,QAAQ;gBACpB,CAAC,CAAC,IAAI,CAAC,KAAK;qBACP,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;qBACxB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;qBACtB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;gBAC7B,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAC/B,CAAA;YACD,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA;QAChC,CAAC;QACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;YAC5B,MAAM,IAAI,GAAG,WAAW;iBACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;iBACvC,IAAI,CAAC,IAAI,CAAC,CAAA;YACb,OAAO,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;QACrD,CAAC;QACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAA;QACjE,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;gBACtB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBAChB,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;YACnC,OAAO,GAAG,MAAM,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAA;QACxD,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;AACH,CAAC"}
package/dist/types.d.ts CHANGED
@@ -12,35 +12,31 @@ export interface Token {
12
12
  value: string | number | boolean | null | TemplatePart[];
13
13
  raw: string;
14
14
  }
15
- export interface AstNode {
16
- type: string;
17
- right?: AstNode;
18
- }
19
- export interface Literal extends AstNode {
15
+ export interface Literal {
20
16
  type: 'Literal';
21
17
  value: string | number | boolean | null;
22
18
  }
23
- export interface Identifier extends AstNode {
19
+ export interface Identifier {
24
20
  type: 'Identifier';
25
21
  value: string;
26
22
  from?: AstNode;
27
23
  }
28
- export interface BinaryExpression extends AstNode {
24
+ export interface BinaryExpression {
29
25
  type: 'BinaryExpression';
30
26
  operator: string;
31
27
  left: AstNode;
32
- right?: AstNode;
28
+ right: AstNode;
33
29
  }
34
- export interface UnaryExpression extends AstNode {
30
+ export interface UnaryExpression {
35
31
  type: 'UnaryExpression';
36
32
  operator: string;
37
- right?: AstNode;
33
+ right: AstNode;
38
34
  }
39
- export interface ArrayLiteral extends AstNode {
35
+ export interface ArrayLiteral {
40
36
  type: 'ArrayLiteral';
41
37
  value: AstNode[];
42
38
  }
43
- export interface ObjectLiteral extends AstNode {
39
+ export interface ObjectLiteral {
44
40
  type: 'ObjectLiteral';
45
41
  value: Record<string, AstNode>;
46
42
  }
@@ -51,41 +47,42 @@ export type TemplateLiteralPart = {
51
47
  type: 'expression';
52
48
  value: AstNode;
53
49
  };
54
- export interface TemplateLiteral extends AstNode {
50
+ export interface TemplateLiteral {
55
51
  type: 'TemplateLiteral';
56
52
  parts: TemplateLiteralPart[];
57
53
  }
58
- export interface FunctionCall extends AstNode {
54
+ export interface FunctionCall {
59
55
  type: 'FunctionCall';
60
56
  name: string;
61
57
  args: AstNode[];
62
58
  }
63
- export interface FilterExpression extends AstNode {
59
+ export interface FilterExpression {
64
60
  type: 'FilterExpression';
65
61
  expr: AstNode;
66
62
  subject: AstNode;
67
63
  }
68
- export interface ConditionalExpression extends AstNode {
64
+ export interface ConditionalExpression {
69
65
  type: 'ConditionalExpression';
70
66
  test: AstNode;
71
67
  consequent?: AstNode;
72
68
  alternate?: AstNode;
73
69
  }
74
- export interface SequenceExpression extends AstNode {
70
+ export interface SequenceExpression {
75
71
  type: 'SequenceExpression';
76
72
  expressions: AstNode[];
77
73
  }
78
- export interface AssignmentExpression extends AstNode {
74
+ export interface AssignmentExpression {
79
75
  type: 'AssignmentExpression';
80
76
  operator: '=';
81
77
  left: Identifier;
78
+ right: AstNode;
82
79
  }
83
- export interface Lambda extends AstNode {
80
+ export interface Lambda {
84
81
  type: 'Lambda';
85
82
  params: string[];
86
83
  body: AstNode;
87
84
  }
88
- export type AstNodeUnion = Literal | Identifier | BinaryExpression | UnaryExpression | ArrayLiteral | ObjectLiteral | TemplateLiteral | FunctionCall | FilterExpression | ConditionalExpression | SequenceExpression | AssignmentExpression | Lambda;
89
- export type NodeByType<T extends AstNodeUnion['type']> = Extract<AstNodeUnion, {
85
+ export type AstNode = Literal | Identifier | BinaryExpression | UnaryExpression | ArrayLiteral | ObjectLiteral | TemplateLiteral | FunctionCall | FilterExpression | ConditionalExpression | SequenceExpression | AssignmentExpression | Lambda;
86
+ export type NodeByType<T extends AstNode['type']> = Extract<AstNode, {
90
87
  type: T;
91
88
  }>;
package/esm/Jexl.js CHANGED
@@ -24,24 +24,21 @@ class Jexl {
24
24
  this.expr = this.expr.bind(this);
25
25
  }
26
26
  addBinaryOp(operator, precedence, fn, manualEval) {
27
- // replacing `-` keeps its prefix form, which is a separate operation
27
+ // a replacement keeps how the operator parses: `-` its prefix form, `^`
28
+ // its grouping from the right
28
29
  const previous = this._grammar.elements[operator];
29
- const unaryEval = previous?.type === 'binaryOp' ? previous.unaryEval : undefined;
30
+ const { unaryEval, rightAssociative } = previous?.type === 'binaryOp' ? previous : {};
30
31
  // the overloads above pair `fn` with `manualEval`; the implementation
31
32
  // signature can't express that correlation, hence the assertions
32
- this._addGrammarElement(operator, manualEval
33
- ? {
34
- type: 'binaryOp',
35
- precedence,
36
- evalOnDemand: fn,
37
- unaryEval
38
- }
39
- : {
40
- type: 'binaryOp',
41
- precedence,
42
- eval: fn,
43
- unaryEval
44
- });
33
+ this._addGrammarElement(operator, {
34
+ type: 'binaryOp',
35
+ precedence,
36
+ unaryEval,
37
+ rightAssociative,
38
+ ...(manualEval
39
+ ? { evalOnDemand: fn }
40
+ : { eval: fn })
41
+ });
45
42
  }
46
43
  /**
47
44
  * Adds or replaces an expression function in this Jexl instance.
@@ -76,7 +73,6 @@ class Jexl {
76
73
  addUnaryOp(operator, fn) {
77
74
  this._addGrammarElement(operator, {
78
75
  type: 'unaryOp',
79
- precedence: Infinity,
80
76
  eval: fn
81
77
  });
82
78
  }
package/esm/Jexl.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Jexl.js","sourceRoot":"","sources":["../src/Jexl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Jexl.js","sourceRoot":"","sources":["../src/Jexl.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AA0BzC,MAAM,YAAY,GAAG,MAAM,CAAA;AAE3B;;;;;GAKG;AACH,MAAM,IAAI;IACR,QAAQ,CAAS;IACjB,0EAA0E;IAC1E,gEAAgE;IAChE,MAAM,CAAO;IACb,SAAS,GAAG,IAAI,GAAG,EAAsB,CAAA;IAEzC,YAAY,EAAE,SAAS,EAAE,cAAc,KAAkB,EAAE;QACzD,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,UAAU,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAA;QAC9D,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAiCD,WAAW,CACT,QAAgB,EAChB,UAAkB,EAClB,EAAsC,EACtC,UAAoB;QAEpB,wEAAwE;QACxE,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GACnC,QAAQ,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/C,sEAAsE;QACtE,iEAAiE;QACjE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;YAChC,IAAI,EAAE,UAAU;YAChB,UAAU;YACV,SAAS;YACT,gBAAgB;YAChB,GAAG,CAAC,UAAU;gBACZ,CAAC,CAAC,EAAE,YAAY,EAAE,EAA0B,EAAE;gBAC9C,CAAC,CAAC,EAAE,IAAI,EAAE,EAA6B,EAAE,CAAC;SAC7C,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,IAAY,EAAE,EAAe;QACvC,uEAAuE;QACvE,uEAAuE;QACvE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAA0B,CAAA;IAC5D,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,GAAgC;QAC3C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IAC7C,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,QAAgB,EAAE,EAAe;QAC1C,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE;YAChC,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,EAA4B;SACnC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;OAKG;IACH,OAAO,CAAC,UAAkB;QACxB,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAA;YACtD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC;gBACxC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC,CAAA;YAC5D,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAC1C,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,UAAkB;QACjC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAC/D,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,UAAkB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAA;IACrC,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,UAAkB,EAAE,OAAO,GAAG,EAAE;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,IAA0B,EAAE,GAAG,IAAiB;QACnD,IAAI,OAAO,GAAG,EAAE,CAAA;QAChB,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACxC,OAAO,IAAI,GAAG,CAAA;YACd,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;gBACrB,IACE,OAAO,GAAG,KAAK,QAAQ;oBACvB,OAAO,GAAG,KAAK,QAAQ;oBACvB,OAAO,GAAG,KAAK,SAAS,EACxB,CAAC;oBACD,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;gBACxB,CAAC;qBAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACvC,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,QAAgB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC7C,IAAI,IAAI,EAAE,IAAI,KAAK,UAAU,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAC1D,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YACxD,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,kBAAkB,CAAC,GAAW,EAAE,GAAmB;QACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;QACjC,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,eAAe;QACb,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;QACzB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;CACF;AAED,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAA;AAC/B,eAAe,YAAY,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,CAAA"}
package/esm/Lexer.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { Grammar } from './grammar.ts';
2
2
  import type { TemplatePart, Token } from './types.ts';
3
+ export declare const identRegex: RegExp;
3
4
  /**
4
5
  * Lexer handles the lexical parsing of a Jexl string. Its responsibility is to
5
6
  * identify the "parts of speech" of a Jexl expression, and tokenize and label
@@ -22,110 +23,27 @@ declare class Lexer {
22
23
  * regex is derived from their keys.
23
24
  */
24
25
  _clearCache(): void;
25
- /**
26
- * Splits a Jexl expression string into an array of expression elements.
27
- * @param {string} str A Jexl expression string
28
- * @returns {Array<string>} An array of substrings defining the functional
29
- * elements of the expression.
30
- */
26
+ /** Splits a Jexl string into its elements: tokens and runs of whitespace. */
31
27
  getElements(str: string): string[];
32
28
  /**
33
- * Converts an array of expression elements into an array of tokens. Note that
34
- * the resulting array may not equal the element array in length, as any
35
- * elements that consist only of whitespace get appended to the previous
36
- * token's "raw" property. For the structure of a token object, please see
37
- * {@link Lexer#tokenize}.
38
- * @param {Array<string>} elements An array of Jexl expression elements to be
39
- * converted to tokens
40
- * @returns {Array<{type, value, raw}>} an array of token objects.
29
+ * The tokens for a list of elements. Whitespace makes no token of its own;
30
+ * it joins the `raw` of the token before it.
41
31
  */
42
32
  getTokens(elements: string[]): Token[];
43
33
  /**
44
- * Converts a Jexl string into an array of tokens. Each token is an object
45
- * in the following format:
46
- *
47
- * {
48
- * type: <string>,
49
- * [name]: <string>,
50
- * value: <boolean|number|string>,
51
- * raw: <string>
52
- * }
53
- *
54
- * Type is one of the following:
55
- *
56
- * literal, identifier, binaryOp, unaryOp
57
- *
58
- * OR, if the token is a control character its type is the name of the element
59
- * defined in the Grammar.
60
- *
61
- * Name appears only if the token is a control string found in
62
- * {@link grammar#elements}, and is set to the name of the element.
63
- *
64
- * Value is the value of the token in the correct type (boolean or numeric as
65
- * appropriate). Raw is the string representation of this value taken directly
66
- * from the expression string, including any trailing spaces.
67
- * @param {string} str The Jexl string to be tokenized
68
- * @returns {Array<{type, value, raw}>} an array of token objects.
69
- * @throws {Error} if the provided string contains an invalid token.
34
+ * Splits a Jexl string into tokens. A token's `type` is `literal`,
35
+ * `templateString`, `identifier` or the type of the grammar element it
36
+ * spells; its `value` is a literal's value or the template's parts; its `raw`
37
+ * is its source text and any whitespace after it.
38
+ * @throws {JexlSyntaxError} for text that is no token
70
39
  */
71
40
  tokenize(str: string): Token[];
72
- /**
73
- * Creates a new token object from an element of a Jexl string. See
74
- * {@link Lexer#tokenize} for a description of the token object.
75
- * @param {string} element The element from which a token should be made
76
- * @returns {{value: number|boolean|string, [name]: string, type: string,
77
- * raw: string}} a token object describing the provided element.
78
- * @throws {Error} if the provided string is not a valid expression element.
79
- * @private
80
- */
81
41
  _createToken(element: string, offset?: number): Token;
82
- /**
83
- * Escapes a string so that it can be treated as a string literal within a
84
- * regular expression. A word such as `in` also stops matching inside a
85
- * longer name.
86
- * @param {string} str The string to be escaped
87
- * @returns {string} the RegExp-escaped string.
88
- * @see https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions
89
- * @private
90
- */
42
+ /** A grammar element's text as a regex. A word such as `in` also stops
43
+ * matching inside a longer name. */
91
44
  _escapeRegExp(str: string): string;
92
- /**
93
- * Gets a RegEx object appropriate for splitting a Jexl string into its core
94
- * elements.
95
- * @returns {RegExp} An element-splitting RegExp object
96
- * @private
97
- */
98
45
  _getSplitRegex(): RegExp;
99
- /**
100
- * Determines whether the addition of a '-' token should be interpreted as a
101
- * negative symbol for an upcoming number, given an array of tokens already
102
- * processed.
103
- * @param {Array<Object>} tokens An array of tokens already processed
104
- * @returns {boolean} true if adding a '-' should be considered a negative
105
- * symbol; false otherwise
106
- * @private
107
- */
108
- _isNegative(tokens: Token[]): boolean;
109
- /**
110
- * A utility function to determine if a string consists of only space
111
- * characters.
112
- * @param {string} str A string to be tested
113
- * @returns {boolean} true if the string is empty or consists of only spaces;
114
- * false otherwise.
115
- * @private
116
- */
117
- _isWhitespace(str: string): boolean;
118
- /**
119
- * Removes the beginning and trailing quotes from a string, unescapes any
120
- * escaped quotes on its interior, and unescapes any escaped escape
121
- * characters. Note that this function is not defensive; it assumes that the
122
- * provided string is not empty, and that its first and last characters are
123
- * actually quotes.
124
- * @param {string} str A string whose first and last characters are quotes
125
- * @returns {string} a string with the surrounding quotes stripped and escapes
126
- * properly processed.
127
- * @private
128
- */
46
+ /** A quoted string literal's text, unquoted and unescaped. */
129
47
  _unquote(str: string): string;
130
48
  _parseTemplateString(str: string, offset?: number): TemplatePart[];
131
49
  _unescapeTemplateString(str: string): string;