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

dmn-engine

v1.0.6

Published

Business Rules Engine for Javascript and Node.js, with built-in Expression Language supporting DMN Decision Table

Downloads

35

Readme

Business-Rules Engine

Condition Symbols

  • Column Value: $$ example DateDiff($$,@now)

  • variable symbol: $example: $caseId this is needed since we allow multi words operations like starts with

  • Is null value or empty: Null or Empty

  • Any Value: -

  • All types:

    • null or empty
    • not null
    • true or false

Project Status: Active - The project has reached a stable, usable state and is being actively developed.

Introduction

Is a Business Rules Engine supporting DMN Decision Tables. Allowing developers to integrate Rules into JavaScript or Node.js applications.

This solution utilizes deterministic rules vs Rete based solutions that are non-deterministic.

This package is designed specifically for Node.js and TypeScript

As an example of Decisition Table Example

Anatomy

Usage

Definition

Decision table can be defined as a JSON or CSV file

Invoke

To invoke the above example

    const Rules=requires('./business-rules.json')'
    const dt= Rules.load('client-category);
    let result=dt.run({type:'Private',  deposit: 500 , netWorth: 500});

    console.log(result.category);

Testing

    const tester=Rules.loadTest('./client-category-tests.json');
    let results=tester.run();
    console.log(results.summary);

tests

UI for Testing and expeirmenting

Rule Syntax

Conditions

Expression Language

Simple Conditions shortcuts

  • Literal values with or without quotes, so "high" and high are acceptable

  • coditional operators and functions without referencing the variable like >500

  • Empty Condition or - indicates all values are true

  • For numeric variables:

    • 500

    • between 500 and 700
  • For Date variables, functions like:

    • > 30 days , > 50 minutes , < 10 years etc.
    • before '2018/01/01' or after '2018/03/01'
    • between '2018/01/01' and '2019/12/31'

Complex Conditions

  • And , Or and Not operators, brackets () can also be used
  • complex operations and functions can reference the variable using @ symbol

Output

Output expressions can use the full expression language and reference any input or ouput variable.

Expression Engine


    const exp=new Expression(`2+3*4`);
    const result= expr.evaluate();
    console.log(result);

Expressions are compiled into AST

    const exp=new Expression(`2+3*4`);
    const compiled= expr.compile();

    // or reloaed

    const expr=Expression.load(compiled);
    const result= expr.evaluate();

    console.log(result);

Language Constructs

Literals

  • Strings: 'John'
  • Numbers: 123.25

Words

salary

customer.address

Operators

The package already defines a set of operators but you can add your own

Operator Symbols

+ -' * /` etcs.

Word Operators

between is defined as a word operator

Functions

Keywords

The following literals are defined as Keywords

-true -false -null