prefix-expression

Evaluate Prefix Expressions represented in JSON

Usage no npm install needed!

<script type="module">
  import prefixExpression from 'https://cdn.skypack.dev/prefix-expression';
</script>

README

prefix-expression

Library to Evaluate Prefix Expressions represented in JSON

Publish

npm i prefix-expression

Overview

prefix expression can be represented in JSON Format as follows

EXPRESSION = {
    OPERATOR : [
        ...OPERANDS
    ]
}

An OPERAND can be strng, number, boolean, null, array or EXPRESSION The type and number of OPERANDs are defined by each operator

The supported OPERATORs are

  • Numeric
    • Arithmatic
      ( +, -, *, /, pow, % )
    • Comparision
      ( >, >=, <, <= )
  • Boolean Logic
    • Comparision
      ( ==, ===, !=, !== )
    • Negate
      ( ! )
    • Logical
      ( or, and )
    • Others
      ( if ) if requires 3 operands [condition, trueValue, falseValue]
  • Array
    • ( map, reduce, filter )
    • ( intersection, diff, union )
    • ( includes )
    • ( size ) works with string also
    • ( max, min )
  • String
    • ( indexOf )
    • ( concat )
    • ( size ) works with array also
  • Object
    • ( entries )
  • Special Operators
    Special Operators can not be overrided or removed
    • Data Access
      ( var )
      Uses JSONPath to access data
      has 2 operands , 1st is a JSON path string or an expression which resolves into a string , 2nd is boolean indicating to return all or 1st result from json path query
    • Callback
      ( callback )
      to differ the evaluation of expression until parent expression is evaluated ... parent Operation can use the callback to evaluate child expression with new data

Install

npm i prefix-expression

Usage

evaluate

import { evaluate, PrefixExpression, Expression } from "prefix-expression"

// prefix expression
const expression: PrefixExpression;

// simple evaluate
const result = evaluate(expression);

// evaluate with data
const data: unknown;
const result = evaluate(expression, data);

// overide the operators
type OperatorLogic = {
  name: string;
  logic: {
    schema: JSONSchemaType<Expression[]>;
    operation: (operands: Expression)=>Expression};
}
const operators: (string|OperatorLogic)[];
const result = evaluate(expression, {}, operators);

  • result is either result of the expression OR reduced expression with unresolved data
  • result can be still evaluated when more data is available

Support

This project is a part of Open Source Intitiative from Sodaru Technologies

Write an email to opensource@sodaru.com for queries on this project