@halleyassist/rule-parser 1.0.3 → 1.0.7

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@halleyassist/rule-parser",
3
- "version": "1.0.3",
3
+ "version": "1.0.7",
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.4.0"
24
+ "mocha": "^10.8.2"
25
25
  },
26
26
  "publishConfig": {
27
27
  "access": "public",
@@ -2,12 +2,12 @@ const {Grammars} = require('ebnf');
2
2
 
3
3
  const grammar = `
4
4
  statement_main ::= statement EOF
5
- logical_operator ::= AND | OR
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 ::= NOT (result | parenthesis_expression)
10
- standard_expression ::= result ((WS* eq_approx) | (WS* basic_rhs) | ((WS+ IS)? WS+ between))?
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 ::= number ((WS+ ("and" | "AND") WS+) | (WS* "-" WS*)) number
49
- between_tod ::= number_tod ((WS+ ("and" | "AND") WS+)) number_tod
50
- between ::= ("between" | "BETWEEN") WS+ (between_number | between_tod)
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 ::= (WS* "&&" WS*) | (WS+ ("AND"|"and") WS+)
53
- OR ::= (WS* "||" WS*) | (WS+ ("OR"|"or") WS+)
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 ::= "is" | "IS"
58
+ IS ||= "is"
59
59
  EQ ::= "==" | "="
60
60
  NEQ ::= "!="
61
- NOT ::= ("!" WS*) | ("not" WS+) | ("NOT" WS+)
62
- false ::= "false" | "FALSE"
63
- null ::= "null" | "NULL"
64
- true ::= "true" | "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 ::= "seconds" | "second" | "minutes" | "minute" | "min" | "mins" | "min" | "hours" | "hour" | "days" | "day" | "weeks" | "week" | "SECONDS" | "SECOND" | "MINUTES" | "MINUTE" | "MIN" | "MINS" | "MIN" | "HOURS" | "HOUR" | "DAYS" | "DAY" | "WEEKS" | "WEEK"
68
- number ::= "-"? ([0-9]+) ("." [0-9]+)? (("e" | "E") ( "-" | "+" )? ("0" | [1-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 ::= "today"
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":"%%%between_number111213","bnf":[["\"and\""],["\"AND\""]],"fragment":true},{"name":"%%between_number1112","bnf":[["WS+","%%%between_number111213","WS+"]],"fragment":true},{"name":"%%between_number1114","bnf":[["WS*","\"-\"","WS*"]],"fragment":true},{"name":"%between_number11","bnf":[["%%between_number1112"],["%%between_number1114"]],"fragment":true},{"name":"between_number","bnf":[["number","%between_number11","number"]]},{"name":"%%%between_tod151617","bnf":[["\"and\""],["\"AND\""]],"fragment":true},{"name":"%%between_tod1516","bnf":[["WS+","%%%between_tod151617","WS+"]],"fragment":true},{"name":"%between_tod15","bnf":[["%%between_tod1516"]],"fragment":true},{"name":"between_tod","bnf":[["number_tod","%between_tod15","number_tod"]]},{"name":"%between18","bnf":[["\"between\""],["\"BETWEEN\""]],"fragment":true},{"name":"%between19","bnf":[["between_number"],["between_tod"]],"fragment":true},{"name":"between","bnf":[["%between18","WS+","%between19"]]},{"name":"%AND20","bnf":[["WS*","\"&&\"","WS*"]],"fragment":true},{"name":"%%AND2122","bnf":[["\"AND\""],["\"and\""]],"fragment":true},{"name":"%AND21","bnf":[["WS+","%%AND2122","WS+"]],"fragment":true},{"name":"AND","bnf":[["%AND20"],["%AND21"]]},{"name":"%OR23","bnf":[["WS*","\"||\"","WS*"]],"fragment":true},{"name":"%%OR2425","bnf":[["\"OR\""],["\"or\""]],"fragment":true},{"name":"%OR24","bnf":[["WS+","%%OR2425","WS+"]],"fragment":true},{"name":"OR","bnf":[["%OR23"],["%OR24"]]},{"name":"GT","bnf":[["\">\""]]},{"name":"LT","bnf":[["\"<\""]]},{"name":"GTE","bnf":[["\">=\""]]},{"name":"LTE","bnf":[["\"<=\""]]},{"name":"IS","bnf":[["\"is\""],["\"IS\""]]},{"name":"EQ","bnf":[["\"==\""],["\"=\""]]},{"name":"NEQ","bnf":[["\"!=\""]]},{"name":"%NOT26","bnf":[["\"!\"","WS*"]],"fragment":true},{"name":"%NOT27","bnf":[["\"not\"","WS+"]],"fragment":true},{"name":"%NOT28","bnf":[["\"NOT\"","WS+"]],"fragment":true},{"name":"NOT","bnf":[["%NOT26"],["%NOT27"],["%NOT28"]]},{"name":"false","bnf":[["\"false\""],["\"FALSE\""]]},{"name":"null","bnf":[["\"null\""],["\"NULL\""]]},{"name":"true","bnf":[["\"true\""],["\"TRUE\""]]},{"name":"%%array2930","bnf":[["VALUE_SEPARATOR","value"]],"fragment":true},{"name":"%array29","bnf":[["value","%%array2930*"]],"fragment":true},{"name":"array","bnf":[["BEGIN_ARRAY","%array29?","END_ARRAY"]]},{"name":"unit","bnf":[["\"seconds\""],["\"second\""],["\"minutes\""],["\"minute\""],["\"min\""],["\"mins\""],["\"min\""],["\"hours\""],["\"hour\""],["\"days\""],["\"day\""],["\"weeks\""],["\"week\""],["\"SECONDS\""],["\"SECOND\""],["\"MINUTES\""],["\"MINUTE\""],["\"MIN\""],["\"MINS\""],["\"MIN\""],["\"HOURS\""],["\"HOUR\""],["\"DAYS\""],["\"DAY\""],["\"WEEKS\""],["\"WEEK\""]]},{"name":"%%number3132","bnf":[[/[0-9]/]]},{"name":"%number31","bnf":[["%%number3132+"]],"fragment":true},{"name":"%%number3334","bnf":[[/[0-9]/]]},{"name":"%number33","bnf":[["\".\"","%%number3334+"]],"fragment":true},{"name":"%%number3536","bnf":[["\"e\""],["\"E\""]],"fragment":true},{"name":"%%number3537","bnf":[["\"-\""],["\"+\""]],"fragment":true},{"name":"%%%number353839","bnf":[[/[0-9]/]]},{"name":"%%number3538","bnf":[["\"0\""],[/[1-9]/,"%%%number353839*"]],"fragment":true},{"name":"%number35","bnf":[["%%number3536","%%number3537?","%%number3538"]],"fragment":true},{"name":"number","bnf":[["\"-\"?","%number31","%number33?","%number35?"]]},{"name":"number_time","bnf":[["number","WS+","unit"]]},{"name":"%%number_tod4041","bnf":[[/[0-9]/]]},{"name":"%number_tod40","bnf":[["%%number_tod4041+"]],"fragment":true},{"name":"%%number_tod4243","bnf":[[/[0-9]/]]},{"name":"%number_tod42","bnf":[["%%number_tod4243+"]],"fragment":true},{"name":"number_tod","bnf":[["%number_tod40","\":\"","%number_tod42"]]},{"name":"time_period_const","bnf":[["\"today\""]]},{"name":"time_period","bnf":[["time_period_const"],["between"]]},{"name":"%%string4445","bnf":[[/[\x20-\x21]/],[/[\x23-\x5B]/],[/[\x5D-\uFFFF]/]],"fragment":true},{"name":"%%string4446","bnf":[[/\x22/],[/\x5C/],[/\x2F/],[/\x62/],[/\x66/],[/\x6E/],[/\x72/],[/\x74/],[/\x75/,"HEXDIG","HEXDIG","HEXDIG","HEXDIG"]],"fragment":true},{"name":"%string44","bnf":[["%%string4445"],[/\x5C/,"%%string4446"]],"fragment":true},{"name":"string","bnf":[["'\"'","%string44*","'\"'"]]},{"name":"HEXDIG","bnf":[[/[a-fA-F0-9]/]]}]
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){