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

kseval

v1.0.9

Published

Ksike Expression Evaluator

Downloads

771

Readme

Ksike Expression Evaluator

KsEval is a versatile and powerful library for Node.js that empowers developers to dynamically evaluate arithmetic, algebraic, and logical expressions expressed in text format. This library excels in flexibility, allowing you to seamlessly interpolate data from objects and variables specified through parameters. MathEvalJS goes beyond simple expression evaluation by providing extensive customization options, enabling developers to define and overload functions for formatting, sanitizing, destructuring, and interpolating.

This library belong to the Ksike ecosystem:

  • KsMf - Microframework (WEB, REST API, CLI, Proxy, etc)
  • Ksdp - Design Patterns Library (GoF, GRASP, IoC, DI, etc)
  • KsCryp - Cryptographic Library (RSA, JWT, x509, HEX, Base64, Hash, etc)
  • KsHook - Event Driven Library
  • KsEval - Expression Evaluator Library
  • KsWC - Web API deployment Library

Expression Evaluation:

  • Evaluate arithmetic, algebraic, and logical expressions expressed in text.
  • Support for a wide range of mathematical and logical operators.
  • Dynamic Interpolation:

Interpolate data from objects and variables specified through parameters.

  • Facilitates dynamic data integration into expressions.
  • Customization Options:

Overload functions for custom formatting of input and output.

  • Define custom sanitization routines to enhance security.
  • Implement destructuring functions for handling complex data structures.
  • Enable dynamic definition of functions and keywords for enhanced expressiveness.

Flexibility and Extensibility:

  • Highly flexible to accommodate diverse use cases.
  • Easily extendable with dynamic function and keyword definitions.

Explore the possibilities of dynamic expression evaluation with KsEval, where flexibility meets efficiency for all your mathematical and logical computation needs.

Quick overview

npm install kseval
const kseval = require ("kseval");

Demo Payload

const data = {
    age: 25,
    status: 'Regular',
    address: {
        code: 111
    }
}

Common logic expressions

console.log(
    kseval.native.run("age < 39 && status === 'Regular'", data) === true,
    kseval.native.run("age > 20 || status === 'Premium'", data) === false,
    kseval.native.run("!(age <= 18 || status === 'Premium')", data) === true,
);

Human-readable logic expressions

console.log(
    kseval.native.run("25 LESS THAN 30", data) === true,
    kseval.native.run("25 LESS THAN 25", data) === false,
    kseval.native.run("25 LESS THAN EQUAL 25", data) === true,

    kseval.native.run("25 GREATER THAN 20", data) === true,
    kseval.native.run("25 GREATER THAN 25", data) === false,
    kseval.native.run("25 GREATER THAN EQUAL 25", data) === true,

    kseval.native.run("25 DISTINCT 25", data) === false,
    kseval.native.run("25 DISTINCT 27", data) === true,
    kseval.native.run("25 DIFFERENT 27", data) === true,
    kseval.native.run("25 EQUAL 25", data) === true,

    kseval.native.run("age LESS THAN 39 AND status DISTINCT 'Premium'", data) === true,
    kseval.native.run("age GREATER THAN 39 OR status EQUAL 'Premium'", data) === false,
    kseval.native.run("NOT(age LESS THAN EQUAL 18 OR status EQUAL 'Premium')", data) === true,
    kseval.native.run("NOT(age GREATER THAN EQUAL 39 OR status EQUAL 'Premium')", data) === true,
);

Format customization by param

const opt = {
    format(expression, data, opt) {
        expression = expression.replace(/VL/ig, data.age);
        expression = expression.replace(/MYEQUAL/ig, "==");
        return { expression, data, opt };
    }
};
console.log(
    lib.native.run("age > 18 AND age MYEQUAL VL", data, opt) === true
);

Format customization by inheritance

class MyPrs extends kseval.native.Cls {
    format(expression, data, opt) {
        expression = expression.replace(/VL/ig, data.age);
        expression = expression.replace(/MYEQUAL/ig, "==");
        return { expression, data, opt };
    }
}

const myPrs = new MyPrs();

console.log(
    myPrs.run("age > 18 AND age MYEQUAL VL", data) === true
);