@halleyassist/rule-parser 1.0.3 → 1.0.6
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/package.json +2 -2
- package/src/RuleParser.ebnf.js +16 -16
- package/src/RuleParser.js +2 -16
- package/src/RuleParser.production.ebnf.js +1 -1
- package/src/RuleParser.production.js +2 -16
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@halleyassist/rule-parser",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "The grammar for HalleyAssist rules",
|
|
5
5
|
"main": "src/RuleParser.production.js",
|
|
6
6
|
"scripts": {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"chai": "^4",
|
|
24
|
-
"mocha": "^10.
|
|
24
|
+
"mocha": "^10.8.2"
|
|
25
25
|
},
|
|
26
26
|
"publishConfig": {
|
|
27
27
|
"access": "public",
|
package/src/RuleParser.ebnf.js
CHANGED
|
@@ -2,12 +2,12 @@ const {Grammars} = require('ebnf');
|
|
|
2
2
|
|
|
3
3
|
const grammar = `
|
|
4
4
|
statement_main ::= statement EOF
|
|
5
|
-
logical_operator
|
|
5
|
+
logical_operator ||= AND | OR
|
|
6
6
|
statement ::= expression (logical_operator expression)*
|
|
7
7
|
expression ::= not_expression | standard_expression | parenthesis_expression
|
|
8
8
|
parenthesis_expression::= BEGIN_PARENTHESIS WS* statement WS* END_PARENTHESIS
|
|
9
|
-
not_expression
|
|
10
|
-
standard_expression
|
|
9
|
+
not_expression ||= NOT (result | parenthesis_expression)
|
|
10
|
+
standard_expression ||= result ((WS* eq_approx) | (WS* basic_rhs) | ((WS+ IS)? WS+ between))?
|
|
11
11
|
basic_rhs ::= operator WS* result
|
|
12
12
|
eq_approx ::= eq_operator WS* "~" WS* result
|
|
13
13
|
|
|
@@ -45,31 +45,31 @@ arguments ::= argument*
|
|
|
45
45
|
fname ::= [a-zA-z0-9]+
|
|
46
46
|
fcall ::= fname WS* BEGIN_ARGUMENT WS* arguments? END_ARGUMENT
|
|
47
47
|
|
|
48
|
-
between_number
|
|
49
|
-
between_tod
|
|
50
|
-
between
|
|
48
|
+
between_number ||= number ((WS+ "AND" WS+) | (WS* "-" WS*)) number
|
|
49
|
+
between_tod ||= number_tod ((WS+ "AND" WS+)) number_tod
|
|
50
|
+
between ||= "BETWEEN" WS+ (between_number | between_tod)
|
|
51
51
|
|
|
52
|
-
AND
|
|
53
|
-
OR
|
|
52
|
+
AND ||= (WS* "&&" WS*) | (WS+ "AND" WS+)
|
|
53
|
+
OR ||= (WS* "||" WS*) | (WS+ "OR" WS+)
|
|
54
54
|
GT ::= ">"
|
|
55
55
|
LT ::= "<"
|
|
56
56
|
GTE ::= ">="
|
|
57
57
|
LTE ::= "<="
|
|
58
|
-
IS
|
|
58
|
+
IS ||= "is"
|
|
59
59
|
EQ ::= "==" | "="
|
|
60
60
|
NEQ ::= "!="
|
|
61
|
-
NOT
|
|
62
|
-
false
|
|
63
|
-
null
|
|
64
|
-
true
|
|
61
|
+
NOT ||= ("!" WS*) | ("not" WS+)
|
|
62
|
+
false ||= "FALSE"
|
|
63
|
+
null ||= "null"
|
|
64
|
+
true ||= "TRUE"
|
|
65
65
|
array ::= BEGIN_ARRAY (value (VALUE_SEPARATOR value)*)? END_ARRAY
|
|
66
66
|
|
|
67
|
-
unit
|
|
68
|
-
number ::= "-"? ([0-9]+) ("." [0-9]+)? (
|
|
67
|
+
unit ||= "seconds" | "second" | "minutes" | "minute" | "min" | "mins" | "min" | "hours" | "hour" | "days" | "day" | "weeks" | "week"
|
|
68
|
+
number ::= "-"? ([0-9]+) ("." [0-9]+)? ("e" ( "-" | "+" )? ("0" | [1-9] [0-9]*))?
|
|
69
69
|
number_time ::= number WS+ unit
|
|
70
70
|
number_tod ::= ([0-9]+) ":" ([0-9]+)
|
|
71
71
|
|
|
72
|
-
time_period_const
|
|
72
|
+
time_period_const ||= "today"
|
|
73
73
|
time_period ::= time_period_const | between
|
|
74
74
|
|
|
75
75
|
string ::= '"' (([#x20-#x21] | [#x23-#x5B] | [#x5D-#xFFFF]) | #x5C (#x22 | #x5C | #x2F | #x62 | #x66 | #x6E | #x72 | #x74 | #x75 HEXDIG HEXDIG HEXDIG HEXDIG))* '"'
|
package/src/RuleParser.js
CHANGED
|
@@ -26,10 +26,8 @@ const OperatorFn = {
|
|
|
26
26
|
const LogicalOperators = {
|
|
27
27
|
"&&": 'And',
|
|
28
28
|
"AND": 'And',
|
|
29
|
-
"and": 'And',
|
|
30
29
|
"||": 'Or',
|
|
31
30
|
"OR": 'Or',
|
|
32
|
-
"or": 'Or',
|
|
33
31
|
}
|
|
34
32
|
|
|
35
33
|
const Epsilon = 0.01
|
|
@@ -98,33 +96,21 @@ class RuleParser {
|
|
|
98
96
|
case 'number_time': {
|
|
99
97
|
const nt = child
|
|
100
98
|
const mult = parseFloat(nt.children[0].text)
|
|
101
|
-
switch(nt.children[1].text){
|
|
102
|
-
case 'seconds':
|
|
103
|
-
case 'second':
|
|
99
|
+
switch(nt.children[1].text.toUpperCase()){
|
|
104
100
|
case 'SECONDS':
|
|
105
101
|
case 'SECOND':
|
|
106
102
|
return mult
|
|
107
|
-
case 'minutes':
|
|
108
|
-
case 'minute':
|
|
109
|
-
case 'mins':
|
|
110
|
-
case 'min':
|
|
111
103
|
case 'MINUTES':
|
|
112
104
|
case 'MINUTE':
|
|
113
105
|
case 'MINS':
|
|
114
106
|
case 'MIN':
|
|
115
107
|
return mult * 60
|
|
116
|
-
case 'hours':
|
|
117
|
-
case 'hour':
|
|
118
108
|
case 'HOURS':
|
|
119
109
|
case 'HOUR':
|
|
120
110
|
return mult * 60 * 60
|
|
121
|
-
case 'days':
|
|
122
|
-
case 'day':
|
|
123
111
|
case 'DAYS':
|
|
124
112
|
case 'DAY':
|
|
125
113
|
return mult * 60 * 60 * 24
|
|
126
|
-
case 'weeks':
|
|
127
|
-
case 'week':
|
|
128
114
|
case 'WEEKS':
|
|
129
115
|
case 'WEEK':
|
|
130
116
|
return mult * 60 * 60 * 24 * 7
|
|
@@ -239,7 +225,7 @@ class RuleParser {
|
|
|
239
225
|
for(const expr of ast.children){
|
|
240
226
|
if(expr.type == 'logical_operator') {
|
|
241
227
|
const logicalOperator = expr.text.trim()
|
|
242
|
-
const operatorFn = LogicalOperators[logicalOperator]
|
|
228
|
+
const operatorFn = LogicalOperators[logicalOperator.toUpperCase()]
|
|
243
229
|
assert(operatorFn, `Unknown logical operator ${logicalOperator}`)
|
|
244
230
|
if(currentLogical === null || currentLogical !== operatorFn){
|
|
245
231
|
if(ret.length > 1){
|
|
@@ -1 +1 @@
|
|
|
1
|
-
module.exports=[{"name":"statement_main","bnf":[["statement","EOF"]]},{"name":"logical_operator","bnf":[["AND"],["OR"]]},{"name":"%statement0","bnf":[["logical_operator","expression"]],"fragment":true},{"name":"statement","bnf":[["expression","%statement0*"]]},{"name":"expression","bnf":[["not_expression"],["standard_expression"],["parenthesis_expression"]]},{"name":"parenthesis_expression","bnf":[["BEGIN_PARENTHESIS","WS*","statement","WS*","END_PARENTHESIS"]]},{"name":"%not_expression1","bnf":[["result"],["parenthesis_expression"]],"fragment":true},{"name":"not_expression","bnf":[["NOT","%not_expression1"]]},{"name":"%%standard_expression23","bnf":[["WS*","eq_approx"]],"fragment":true},{"name":"%%standard_expression24","bnf":[["WS*","basic_rhs"]],"fragment":true},{"name":"%%%standard_expression256","bnf":[["WS+","IS"]],"fragment":true},{"name":"%%standard_expression25","bnf":[["%%%standard_expression256?","WS+","between"]],"fragment":true},{"name":"%standard_expression2","bnf":[["%%standard_expression23"],["%%standard_expression24"],["%%standard_expression25"]],"fragment":true},{"name":"standard_expression","bnf":[["result","%standard_expression2?"]]},{"name":"basic_rhs","bnf":[["operator","WS*","result"]]},{"name":"eq_approx","bnf":[["eq_operator","WS*","\"~\"","WS*","result"]]},{"name":"PLUS","bnf":[["\"+\""]]},{"name":"MINUS","bnf":[["\"-\""]]},{"name":"MULTIPLY","bnf":[["\"*\""]]},{"name":"DIVIDE","bnf":[["\"/\""]]},{"name":"MODULUS","bnf":[["\"%\""]]},{"name":"DEFAULT_VAL","bnf":[["\"??\""]]},{"name":"arithmetic_operator","bnf":[["PLUS"],["MINUS"],["MULTIPLY"],["DIVIDE"],["MODULUS"],["DEFAULT_VAL"]]},{"name":"%arithmetic_result7","bnf":[["arithmetic_result"],["simple_result"]],"fragment":true},{"name":"arithmetic_result","bnf":[["simple_result","WS*","arithmetic_operator","WS*","%arithmetic_result7"]]},{"name":"simple_result","bnf":[["fcall"],["value"]]},{"name":"result","bnf":[["arithmetic_result"],["simple_result"]]},{"name":"value","bnf":[["false"],["true"],["array"],["number_time"],["number"],["number_tod"],["time_period"],["string"]]},{"name":"BEGIN_ARRAY","bnf":[["WS*",/\x5B/,"WS*"]]},{"name":"BEGIN_OBJECT","bnf":[["WS*",/\x7B/,"WS*"]]},{"name":"END_ARRAY","bnf":[["WS*",/\x5D/,"WS*"]]},{"name":"END_OBJECT","bnf":[["WS*",/\x7D/,"WS*"]]},{"name":"NAME_SEPARATOR","bnf":[["WS*",/\x3A/,"WS*"]]},{"name":"VALUE_SEPARATOR","bnf":[["WS*",/\x2C/,"WS*"]]},{"name":"%WS8","bnf":[[/[\x20\x09\x0A\x0D]/]]},{"name":"WS","bnf":[["%WS8+"]]},{"name":"operator","bnf":[["GTE"],["LTE"],["GT"],["LT"],["EQ"],["NEQ"]]},{"name":"eq_operator","bnf":[["EQ"],["NEQ"]]},{"name":"BEGIN_ARGUMENT","bnf":[["\"(\""]]},{"name":"END_ARGUMENT","bnf":[["\")\""]]},{"name":"BEGIN_PARENTHESIS","bnf":[["\"(\""]]},{"name":"END_PARENTHESIS","bnf":[["\")\""]]},{"name":"%argument9","bnf":[["\",\"","WS*"]],"fragment":true},{"name":"argument","bnf":[["statement","WS*","%argument9?"]]},{"name":"arguments","bnf":[["argument*"]]},{"name":"%fname10","bnf":[[/[a-zA-z0-9]/]]},{"name":"fname","bnf":[["%fname10+"]]},{"name":"fcall","bnf":[["fname","WS*","BEGIN_ARGUMENT","WS*","arguments?","END_ARGUMENT"]]},{"name":"
|
|
1
|
+
module.exports=[{"name":"statement_main","bnf":[["statement","EOF"]]},{"name":"logical_operator","bnf":[["AND"],["OR"]]},{"name":"%statement0","bnf":[["logical_operator","expression"]],"fragment":true},{"name":"statement","bnf":[["expression","%statement0*"]]},{"name":"expression","bnf":[["not_expression"],["standard_expression"],["parenthesis_expression"]]},{"name":"parenthesis_expression","bnf":[["BEGIN_PARENTHESIS","WS*","statement","WS*","END_PARENTHESIS"]]},{"name":"%not_expression1","bnf":[["result"],["parenthesis_expression"]],"fragment":true},{"name":"not_expression","bnf":[["NOT","%not_expression1"]]},{"name":"%%standard_expression23","bnf":[["WS*","eq_approx"]],"fragment":true},{"name":"%%standard_expression24","bnf":[["WS*","basic_rhs"]],"fragment":true},{"name":"%%%standard_expression256","bnf":[["WS+","IS"]],"fragment":true},{"name":"%%standard_expression25","bnf":[["%%%standard_expression256?","WS+","between"]],"fragment":true},{"name":"%standard_expression2","bnf":[["%%standard_expression23"],["%%standard_expression24"],["%%standard_expression25"]],"fragment":true},{"name":"standard_expression","bnf":[["result","%standard_expression2?"]]},{"name":"basic_rhs","bnf":[["operator","WS*","result"]]},{"name":"eq_approx","bnf":[["eq_operator","WS*","\"~\"","WS*","result"]]},{"name":"PLUS","bnf":[["\"+\""]]},{"name":"MINUS","bnf":[["\"-\""]]},{"name":"MULTIPLY","bnf":[["\"*\""]]},{"name":"DIVIDE","bnf":[["\"/\""]]},{"name":"MODULUS","bnf":[["\"%\""]]},{"name":"DEFAULT_VAL","bnf":[["\"??\""]]},{"name":"arithmetic_operator","bnf":[["PLUS"],["MINUS"],["MULTIPLY"],["DIVIDE"],["MODULUS"],["DEFAULT_VAL"]]},{"name":"%arithmetic_result7","bnf":[["arithmetic_result"],["simple_result"]],"fragment":true},{"name":"arithmetic_result","bnf":[["simple_result","WS*","arithmetic_operator","WS*","%arithmetic_result7"]]},{"name":"simple_result","bnf":[["fcall"],["value"]]},{"name":"result","bnf":[["arithmetic_result"],["simple_result"]]},{"name":"value","bnf":[["false"],["true"],["array"],["number_time"],["number"],["number_tod"],["time_period"],["string"]]},{"name":"BEGIN_ARRAY","bnf":[["WS*",/\x5B/,"WS*"]]},{"name":"BEGIN_OBJECT","bnf":[["WS*",/\x7B/,"WS*"]]},{"name":"END_ARRAY","bnf":[["WS*",/\x5D/,"WS*"]]},{"name":"END_OBJECT","bnf":[["WS*",/\x7D/,"WS*"]]},{"name":"NAME_SEPARATOR","bnf":[["WS*",/\x3A/,"WS*"]]},{"name":"VALUE_SEPARATOR","bnf":[["WS*",/\x2C/,"WS*"]]},{"name":"%WS8","bnf":[[/[\x20\x09\x0A\x0D]/]]},{"name":"WS","bnf":[["%WS8+"]]},{"name":"operator","bnf":[["GTE"],["LTE"],["GT"],["LT"],["EQ"],["NEQ"]]},{"name":"eq_operator","bnf":[["EQ"],["NEQ"]]},{"name":"BEGIN_ARGUMENT","bnf":[["\"(\""]]},{"name":"END_ARGUMENT","bnf":[["\")\""]]},{"name":"BEGIN_PARENTHESIS","bnf":[["\"(\""]]},{"name":"END_PARENTHESIS","bnf":[["\")\""]]},{"name":"%argument9","bnf":[["\",\"","WS*"]],"fragment":true},{"name":"argument","bnf":[["statement","WS*","%argument9?"]]},{"name":"arguments","bnf":[["argument*"]]},{"name":"%fname10","bnf":[[/[a-zA-z0-9]/]]},{"name":"fname","bnf":[["%fname10+"]]},{"name":"fcall","bnf":[["fname","WS*","BEGIN_ARGUMENT","WS*","arguments?","END_ARGUMENT"]]},{"name":"%%between_number1112","bnf":[["WS+",/[Aa]/,/[Nn]/,/[Dd]/,"WS+"]],"fragment":true},{"name":"%%between_number1113","bnf":[["WS*",/\-/,"WS*"]],"fragment":true},{"name":"%between_number11","bnf":[["%%between_number1112"],["%%between_number1113"]],"fragment":true},{"name":"between_number","bnf":[["number","%between_number11","number"]]},{"name":"%%between_tod1415","bnf":[["WS+",/[Aa]/,/[Nn]/,/[Dd]/,"WS+"]],"fragment":true},{"name":"%between_tod14","bnf":[["%%between_tod1415"]],"fragment":true},{"name":"between_tod","bnf":[["number_tod","%between_tod14","number_tod"]]},{"name":"%between16","bnf":[["between_number"],["between_tod"]],"fragment":true},{"name":"between","bnf":[[/[Bb]/,/[Ee]/,/[Tt]/,/[Ww]/,/[Ee]/,/[Ee]/,/[Nn]/,"WS+","%between16"]]},{"name":"%AND17","bnf":[["WS*",/&/,/&/,"WS*"]],"fragment":true},{"name":"%AND18","bnf":[["WS+",/[Aa]/,/[Nn]/,/[Dd]/,"WS+"]],"fragment":true},{"name":"AND","bnf":[["%AND17"],["%AND18"]]},{"name":"%OR19","bnf":[["WS*",/\|/,/\|/,"WS*"]],"fragment":true},{"name":"%OR20","bnf":[["WS+",/[Oo]/,/[Rr]/,"WS+"]],"fragment":true},{"name":"OR","bnf":[["%OR19"],["%OR20"]]},{"name":"GT","bnf":[["\">\""]]},{"name":"LT","bnf":[["\"<\""]]},{"name":"GTE","bnf":[["\">=\""]]},{"name":"LTE","bnf":[["\"<=\""]]},{"name":"IS","bnf":[[/[Ii]/,/[Ss]/]]},{"name":"EQ","bnf":[["\"==\""],["\"=\""]]},{"name":"NEQ","bnf":[["\"!=\""]]},{"name":"%NOT21","bnf":[[/!/,"WS*"]],"fragment":true},{"name":"%NOT22","bnf":[[/[Nn]/,/[Oo]/,/[Tt]/,"WS+"]],"fragment":true},{"name":"NOT","bnf":[["%NOT21"],["%NOT22"]]},{"name":"false","bnf":[[/[Ff]/,/[Aa]/,/[Ll]/,/[Ss]/,/[Ee]/]]},{"name":"null","bnf":[[/[Nn]/,/[Uu]/,/[Ll]/,/[Ll]/]]},{"name":"true","bnf":[[/[Tt]/,/[Rr]/,/[Uu]/,/[Ee]/]]},{"name":"%%array2324","bnf":[["VALUE_SEPARATOR","value"]],"fragment":true},{"name":"%array23","bnf":[["value","%%array2324*"]],"fragment":true},{"name":"array","bnf":[["BEGIN_ARRAY","%array23?","END_ARRAY"]]},{"name":"unit","bnf":[[/[Ss]/,/[Ee]/,/[Cc]/,/[Oo]/,/[Nn]/,/[Dd]/,/[Ss]/],[/[Ss]/,/[Ee]/,/[Cc]/,/[Oo]/,/[Nn]/,/[Dd]/],[/[Mm]/,/[Ii]/,/[Nn]/,/[Uu]/,/[Tt]/,/[Ee]/,/[Ss]/],[/[Mm]/,/[Ii]/,/[Nn]/,/[Uu]/,/[Tt]/,/[Ee]/],[/[Mm]/,/[Ii]/,/[Nn]/],[/[Mm]/,/[Ii]/,/[Nn]/,/[Ss]/],[/[Mm]/,/[Ii]/,/[Nn]/],[/[Hh]/,/[Oo]/,/[Uu]/,/[Rr]/,/[Ss]/],[/[Hh]/,/[Oo]/,/[Uu]/,/[Rr]/],[/[Dd]/,/[Aa]/,/[Yy]/,/[Ss]/],[/[Dd]/,/[Aa]/,/[Yy]/],[/[Ww]/,/[Ee]/,/[Ee]/,/[Kk]/,/[Ss]/],[/[Ww]/,/[Ee]/,/[Ee]/,/[Kk]/]]},{"name":"%%number2526","bnf":[[/[0-9]/]]},{"name":"%number25","bnf":[["%%number2526+"]],"fragment":true},{"name":"%%number2728","bnf":[[/[0-9]/]]},{"name":"%number27","bnf":[["\".\"","%%number2728+"]],"fragment":true},{"name":"%%number2930","bnf":[["\"-\""],["\"+\""]],"fragment":true},{"name":"%%%number293132","bnf":[[/[0-9]/]]},{"name":"%%number2931","bnf":[["\"0\""],[/[1-9]/,"%%%number293132*"]],"fragment":true},{"name":"%number29","bnf":[["\"e\"","%%number2930?","%%number2931"]],"fragment":true},{"name":"number","bnf":[["\"-\"?","%number25","%number27?","%number29?"]]},{"name":"number_time","bnf":[["number","WS+","unit"]]},{"name":"%%number_tod3334","bnf":[[/[0-9]/]]},{"name":"%number_tod33","bnf":[["%%number_tod3334+"]],"fragment":true},{"name":"%%number_tod3536","bnf":[[/[0-9]/]]},{"name":"%number_tod35","bnf":[["%%number_tod3536+"]],"fragment":true},{"name":"number_tod","bnf":[["%number_tod33","\":\"","%number_tod35"]]},{"name":"time_period_const","bnf":[[/[Tt]/,/[Oo]/,/[Dd]/,/[Aa]/,/[Yy]/]]},{"name":"time_period","bnf":[["time_period_const"],["between"]]},{"name":"%%string3738","bnf":[[/[\x20-\x21]/],[/[\x23-\x5B]/],[/[\x5D-\uFFFF]/]],"fragment":true},{"name":"%%string3739","bnf":[[/\x22/],[/\x5C/],[/\x2F/],[/\x62/],[/\x66/],[/\x6E/],[/\x72/],[/\x74/],[/\x75/,"HEXDIG","HEXDIG","HEXDIG","HEXDIG"]],"fragment":true},{"name":"%string37","bnf":[["%%string3738"],[/\x5C/,"%%string3739"]],"fragment":true},{"name":"string","bnf":[["'\"'","%string37*","'\"'"]]},{"name":"HEXDIG","bnf":[[/[a-fA-F0-9]/]]}]
|
|
@@ -26,10 +26,8 @@ const OperatorFn = {
|
|
|
26
26
|
const LogicalOperators = {
|
|
27
27
|
"&&": 'And',
|
|
28
28
|
"AND": 'And',
|
|
29
|
-
"and": 'And',
|
|
30
29
|
"||": 'Or',
|
|
31
30
|
"OR": 'Or',
|
|
32
|
-
"or": 'Or',
|
|
33
31
|
}
|
|
34
32
|
|
|
35
33
|
const Epsilon = 0.01
|
|
@@ -98,33 +96,21 @@ class RuleParser {
|
|
|
98
96
|
case 'number_time': {
|
|
99
97
|
const nt = child
|
|
100
98
|
const mult = parseFloat(nt.children[0].text)
|
|
101
|
-
switch(nt.children[1].text){
|
|
102
|
-
case 'seconds':
|
|
103
|
-
case 'second':
|
|
99
|
+
switch(nt.children[1].text.toUpperCase()){
|
|
104
100
|
case 'SECONDS':
|
|
105
101
|
case 'SECOND':
|
|
106
102
|
return mult
|
|
107
|
-
case 'minutes':
|
|
108
|
-
case 'minute':
|
|
109
|
-
case 'mins':
|
|
110
|
-
case 'min':
|
|
111
103
|
case 'MINUTES':
|
|
112
104
|
case 'MINUTE':
|
|
113
105
|
case 'MINS':
|
|
114
106
|
case 'MIN':
|
|
115
107
|
return mult * 60
|
|
116
|
-
case 'hours':
|
|
117
|
-
case 'hour':
|
|
118
108
|
case 'HOURS':
|
|
119
109
|
case 'HOUR':
|
|
120
110
|
return mult * 60 * 60
|
|
121
|
-
case 'days':
|
|
122
|
-
case 'day':
|
|
123
111
|
case 'DAYS':
|
|
124
112
|
case 'DAY':
|
|
125
113
|
return mult * 60 * 60 * 24
|
|
126
|
-
case 'weeks':
|
|
127
|
-
case 'week':
|
|
128
114
|
case 'WEEKS':
|
|
129
115
|
case 'WEEK':
|
|
130
116
|
return mult * 60 * 60 * 24 * 7
|
|
@@ -239,7 +225,7 @@ class RuleParser {
|
|
|
239
225
|
for(const expr of ast.children){
|
|
240
226
|
if(expr.type == 'logical_operator') {
|
|
241
227
|
const logicalOperator = expr.text.trim()
|
|
242
|
-
const operatorFn = LogicalOperators[logicalOperator]
|
|
228
|
+
const operatorFn = LogicalOperators[logicalOperator.toUpperCase()]
|
|
243
229
|
assert(operatorFn, `Unknown logical operator ${logicalOperator}`)
|
|
244
230
|
if(currentLogical === null || currentLogical !== operatorFn){
|
|
245
231
|
if(ret.length > 1){
|