npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@yashkk3640/expression-evaluation

v0.0.3

Published

Expression Evaluation from String function

Downloads

84

Readme

For code base, check out expression-evaluation.

⭐️ Features

  • Solve Text (type String) which may have some parameters using prepareDynamicValue `
  • Babel 7
  • Hot reloading (npm start)
  • UMD exports, so your library works everywhere.
  • Jest unit testing
  • Daily dependabot dependency updates

📦 Getting Started

git clone https://github.com/yashkk3640/expression-evaluation.git myLibrary
npm install

🚀 Deployment

  1. npm publish
  2. Your users can include your library as usual

npm

import expressionEvaluate from '@yashkk3640/expression-evaluation';
/* or
// one or any of this as per your use case
import {
    EXPRESSION_TABLE,
    validateFunction,
    renderExpression,
    expressionResolver,
    evaluateExprFromString,
    EVALUATE_EXPR_LINES
} from '@yashkk3640/expression-evaluation';
*/
const exprWVariable = `Hello IF_ELSE(EQ($$user$$,Yash Khatri),Owner,$$user$$) ,\nWelcome to the coding world of Expression Evaluation! 🎉

We’re excited to have you here. $$repoName$$ repository is dedicated to solve string expression variables and basic functions. Whether you’re a beginner or an experienced developer, we hope you find this project engaging and useful.`

// If your code just have expression like `IF_ELSE(EQ($$user$$,Yash Khatri),Owner,$$user$$)` recommended to use `expressionResolver` instead of EVALUATE_EXPR_LINES
const solvedExpr = EVALUATE_EXPR_LINES(exprWVariable, {user:'Yash Khatri',repoName:"@yashkk3640/expression-evaluation"})
/*
Output : 'Hello Owner,\nWelcome to the coding world of Expression Evaluation! 🎉\n\nWe’re excited to have you here. @yashkk3640/expression-evaluation repository is dedicated to solve string expression variables and basic functions. Whether you’re a beginner or an experienced developer, we hope you find this project engaging and useful.'
*/

...

Exported Functions

| Functions Name | Type | Default Export | Description | | ----------------------- | -------- | -------------- | ------------------------------------------------------------------------------------------------- | | expressionResolver | FUNCTION | Yes | use to solve direct expression (string which just have Expression) Details | | EVALUATE_EXPR_LINES | FUNCTION | No | Use to solve paragraph kind of string (multiline strings) Details | | validateFunction | FUNCTION | No | Use to validate is given string expression valid or not, Details | | renderExpression | FUNCTION | No | Use to render expression with bold and italic text, Details | | EXPRESSION_TABLE | JSON | No | Json of all available functions with example and no of arguments require to call |

expressionResolver

Overview

expressionResolver evaluates a mathematical expression represented as a string and substitutes parameters for variables. This allows users to dynamically compute values based on provided inputs.

Parameters

  • expression: string
    A string representing the expression to evaluate (e.g., ADD($$firstNum$$,$$secondNum$$)).

  • parameters: object
    An object containing key-value pairs for variable substitution (e.g., { firstNum: 100, secondNum: 150 }).

Returns

  • The result of the evaluated expression, which could be a number or a string. For example, 250 for the given inputs.

Example

const expression = "ADD($$firstNum$$,$$secondNum$$)";
const parameters = { firstNum: 100, secondNum: 150 };

const result = expressionResolver(expression, parameters);
// Output: 250

EVALUATE_EXPR_LINES

Overview

EVALUATE_EXPR_LINES evaluates string expressions with dynamic variables. It replaces placeholders with actual values, making it useful for templating and content generation.

Parameters

  • expressionLines: string
    A string containing expressions with placeholders (e.g., Hello IF_ELSE(EQ($$user$$,Yash Khatri),Owner,$$user$$),...).

  • parameters: object
    An object for variable substitution (e.g., { user: 'Yash Khatri', repoName: "@yashkk3640/expression-evaluation" }).

Returns

  • A string with function and variables replaced by their corresponding values.

Example

const expression = `Hello IF_ELSE(EQ($$user$$,Yash Khatri),Owner,$$user$$),\nWelcome to the coding world of Expression Evaluation! 🎉...`;
const parameters = {
  user: "Yash Khatri",
  repoName: "@yashkk3640/expression-evaluation",
};

const result = EVALUATE_EXPR_LINES(expression, parameters);
// Output: 'Hello Owner,\nWelcome to the coding world of Expression Evaluation! 🎉...'

validateFunction

Overview

validateFunction is a JavaScript utility that validates function calls represented as strings. It checks for proper syntax, including bracket matching, valid function names, and the correct number of arguments.

Parameters

  • strFunCall: string (default: "")
    The function call string to validate.

  • setMessage: function (default: (_) => _)
    A callback function to display validation messages.

  • strict: boolean (default: false)
    If true, enforces strict validation for function call expressions.

Returns

  • Returns true if the function call is valid.
  • Returns false if invalid, setting appropriate error messages via setMessage.

Example

const functions = {
  myFunction: { noOfArgs: 2 },
  anotherFunction: { noOfArgs: 1 },
};

const setMessage = (msg) => console.log(msg);

const isValid = validateFunction("myFunction(arg1, arg2)", setMessage);
// Output: true

const isInvalid = validateFunction("myFunction(arg1)", setMessage);
// Output: Invalid number of arguments for myFunction. (needs 2)

renderExpression

Overview

renderExpression formats a given expression string by identifying variables and rendering them in HTML. Variables are displayed in bold and italicized text.

Parameters

  • expr: string (default: "")
    The expression string containing variables to format.

Returns

  • An array of strings and formatted HTML elements, where variables are wrapped in <b> and <i> tags.

Example

const VARIABLE_REGEX = /\$\$[a-zA-Z_][a-zA-Z0-9_]*/g;

const expression = "$$variable1 is greater than $$variable2";
const rendered = renderExpression(expression);

/* Output: [
   "<b key='variable1'><i>variable1</i></b> is greater than ",
   "<b key='variable2'><i>variable2</i></b>"
 ] */

| Function | Description | Example | No of Arguments | | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | --------------- | | Arithmetic Functions | | | | | ADD(Number1,Number2) | Summation of two input numbers | ADD(3,2) => 5 | 2 | | SUB(Number1,Number2) | Subtraction of two input numbers | SUB(3,2) => 1 | 2 | | MUL(Number1,Number2) | Multiplication of two input numbers | MUL(3,2) => 6 | 2 | | DIV(Number1,Number2) | Division of two input numbers | DIV(10,2) => 5 | 2 | | Relational Functions | | | | | EQ(Input1,Input2) | Returns TRUE if Input 1 is equal to Input 2, else returns FALSE | EQ(3,3) => true | 2 | | NEQ(Input1,Input2) | Returns TRUE if Input 1 is not equal to Input 2, else returns FALSE | NEQ(3,3) => false | 2 | | GT(Input1,Input2) | Returns TRUE if Input 1 is greater than Input 2, else returns FALSE | GT(3,2) => true | 2 | | GTE(Input1,Input2) | Returns TRUE if Input 1 is greater than or equal to Input 2, else returns FALSE | GTE(3,2) => true | 2 | | LT(Input1,Input2) | Returns TRUE if Input 1 is less than Input 2, else returns FALSE | LT(3,2) => false | 2 | | LTE(Input1,Input2) | Returns TRUE if Input 1 is less than or equal to Input 2, else returns FALSE | LTE(3,2) => false | 2 | | Logical Functions | | | | | AND(Condition1,Condition2) | Returns TRUE if Condition1 and Condition2 are TRUE, else returns FALSE | AND(true,false) => false | 2 | | OR(Condition1,Condition2) | Returns TRUE if Condition1 or Condition2 is TRUE, else returns FALSE | OR(true,false) => true | 2 | | NOT(Condition) | Returns the Opposite of provided Condition | NOT(true) => false | 1 | | TRUE() | Returns TRUE always (Has no inputs) | TRUE() => true | 0 | | Date Functions | | | | | DATE_GT(Date1,Date2) | Returns TRUE if Is Date1 greater than Date2, else returns FALSE | DATE_GT(today,today) => false | 2 | | DATE_GTE(Date1,Date2) | Returns TRUE if Is Date1 greater than or equal to Date2, else returns FALSE | DATE_GTE(today,yesterday) => true | 2 | | DATE_LT(Date1,Date2) | Returns TRUE if Is Date1 less than Date2, else returns FALSE | DATE_LT(yesterday,yesterday) => false | 2 | | DATE_LTE(Date1,Date2) | Returns TRUE if Is Date1 less than or equal to Date2, else returns FALSE | DATE_LTE(yesterday,yesterday) => true | 2 | | ADD_IN_DATE(InputDate,Number,UnitType) | Returns a Date that is the result of InputDate + Number of Units (you can use years, quarters, months, weeks, days, hours and minutes) | ADD_IN_DATE(yesterday,1,days) => today | 3 | | NOW() | Returns a Current Datetime | NOW() => 2024-11-18T08:01:45-05:00 | 0 | | DATE_FORMAT(InputDate,Format) | Return Date in specified format | DATE_FORMAT(02-12-2021,MM/DD/YYYY) => 02/12/2021 | 2 | | Condition Function | | | | | IF_ELSE(Condition1,True_Result,False_Result) | Returns True_Result if Condition1 is TRUE, else returns False_Result. Condition1 must result in a Boolean and True_Result and False_Result values can be boolean,numeric, or text | IF_ELSE(true,4,3) => 4 | 3 | | NOT_EMPTY(variable) | Returns TRUE if variable is not null (not empty) | NOT_EMPTY(varWithoutValue) => false | 1 | | EMPTY(variable) | Returns TRUE if variable is null (empty) | EMPTY(varWithoutValue) => true | 1 | | String Function | | | | | CONCAT(String1,String2) | Results in a string that is a combination of String1 and String2 | CONCAT(fname,lname) => fnamelname | 2 | | UPPERCASE(String) | Results in a string that is all uppercase letters | UPPERCASE(ticketNumber) => TICKETNUMBER | 1 | | LOWERCASE(String) | Results in a string that is all lowercase letters | LOWERCASE(ticketNumber) => ticketnumber | 1 | | CAMEL_TO_TITLE(String) | Results in a string that in Title Case | CAMEL_TO_TITLE(ticketNumber) => Ticket Number | 1 | | CONTAINS(String1,String2) | Returns TRUE if String2 is present in String1, or else FALSE | CONTAINS(ticket number,ticket) => true | 2 | | Special Function | | | | | PUSH | Add element in Array | PUSH(array,3) => [(all element array),3] | 2 | | SUM | Sum of Elements separated by ':' or Sum of property from Array by '::' | SUM($$array$$::propertyName) | 1 |

Happy coding! 🚀