1.0.0 • Published 4 years ago

@relayin/component-formula-parser v1.0.0

Weekly downloads
-
License
Unlicense
Repository
-
Last release
4 years ago

Table of contents

Component Formula Parser

Parses the components formula expression

circleci-image typescript-image npm-image license-image

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 of 20 + 80 are ignored. We don't allow literal values.
  • 12 * (#1 + 10 + #2): Here the addition of 10 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.