squid-eval
TypeScript icon, indicating that this package has built-in type declarations

1.1.3 • Public • Published

squid-eval

Writing logic in natural language way. (Could use eval() function of JS, but it can lead to code injection)

  • Simple expression/rule evaluator with minimal syntax.
  • Write expression in natural language.
  • Write conditional logic or math calculation or both.
  • Easily use in front-end or back-end.
  • Reduce the coding effort with the logic written as Json or DB data.
  • Can use this to show a conditional content/input-field on UI.
  • Customize operators symbols.

How it works

import { RuleEvaluator } from 'squid-eval'

const evaluator = new RuleEvaluator();
evaluator.parse('Toronto Rule', "[city] = Toronto and [day of birth] > 20 or [name] = Wendy's");

console.log(evaluator.execute('Toronto Rule', {
    city: 'Toronto',
    'day of birth': 23,
    name: "Wendy's"
}));
// output will be true

Handles parenthesized expressions as well.

evaluator.parse('Toronto 2nd Rule', "[city] = Toronto and ([day of birth] + 10 < 20 or [name] = Wendy's)");
console.log(evaluator.execute('Toronto Rule', {
    city: 'Toronto',
    'day of birth': 23,
    name: "Starbucks"
}));
// output will be false

Syntax

Only two things to know

  • Variables are to be put within square brackets. e.g. [day of birth]
  • If need to use operator symbols or square brackets as a plain text, then just put it in side single quotes. e.g. [formula] = '2 + [3]'. And to use quote inside quoted text, just use it twice. e.g. [name] = 'Macy''s'

Validation

  • Call parse() method which will throw error if expression has issue.
  • Call getVariables() and check if the required variables are extracted.

Customizing operators

Default operators available are: +, -, *, /, =, !=, >, <, and, or, contains
Want to add more of your own? Below are the APIs can be used.

  • addOperator() to add a new operation
  • deleteOperator() to delete an operator
  • clearOperators() to delete all the operators
  • changeOperatorSymbol() to change symbol of an existing operator. e.g. say you don't like to use '=', instead would prefer using 'is' as in a rule '[city] is Toronto'

Rule Action Service

Optional service to evaluate rules and find actions to take.

  • RuleActionService:
    • add (ruleName, action: string, rule: string)
    • update (ruleName, action: string, rule: string)
    • delete (ruleName, action: string)
    • evaluate (ruleName, data: JsonType): string[]
      Returns list of actions, to be taken based on rules setup for given rule name.
    • evaluateAll (data: JsonType): Map<RuleName, string[]>
      Return list of actions to be taken on each of the saved rule names.

```javascript 1.8 import { RuleActionService } from 'squid-eval';

const inputFieldActionsService = new RuleActionService(); inputFieldActionsService.add('underAgeDisclaimer', 'show', '[age] < 18'); inputFieldActionsService.add('underAgeDisclaimer', 'block-user', '[age] < 16');

const formData = { age: 15 }; inputFieldActionsService.evaluate('underAgeDisclaimer', formData); // ['show', 'block-user']

Package Sidebar

Install

npm i squid-eval

Weekly Downloads

1

Version

1.1.3

License

MIT

Unpacked Size

34.3 kB

Total Files

17

Last publish

Collaborators

  • rajeevn