Table of contents
Component Formula Parser
Parses the components formula expression
Platform agnostic library to parse the formula expression into a parsed object. It allows a narrow subset of expressions and more can be added on demand.
The Payroll components of Relay allows defining a formula that can apply a percentage on the sum of one of more components. For example:
12% of (BASIC + HRA)
is represented as
12 * (#<id-of-basic> + #<id-of-hra>)
This library parses the given expression into the following object.
{
"value": 12,
"operator": "MULTIPLY",
"components": ['id-of-basic', 'id-of-hra']
}
Since, addition
is the only allowed expression between multiple components. We return a flat array of component ids. Once we will introduce other expressions like multiple
, divison
, then we will have to convert this array into a tree.
Allowing expressions like multiple
and divison
are not that simple, since they need to be translated into the UI as well and we are not sure, if we will ever do that or not.
Installation
Install the package from npm registry as follows:
npm i @relayin/component-formula-parser
Usage
import { parse } from '@relayin/component-formula-parser'
const output = parse('12 * (#1 + #2)')
Output
{
"errors": [],
"parsed": {
"operator": "MULTIPLY",
"value": 12,
"components": [
"1",
"2"
]
}
}
Valid Expressions
12 * (#1 + #2)
(#1 + #2) * 12
12*(#1+#2)
-
12 * (#1+#2) + 20 + 80
: Here the addition of20
+80
are ignored. We don't allow literal values. -
12 * (#1 + 10 + #2)
: Here theaddition
of10
is ignore. We don't allow literal values. 0 * (#1 + #2)
Invalid Expressions
-
12(#1+#2)
: The operator is missing -
*(#1+#2)
: The value is missing -
0 * (#1 #2)
: Additional operator between two components is missing.