0.1.2 • Published 4 years ago
jasper-engine v0.1.2
1. Description
Jasper Rule Engine
Are you building an application that contains a lot of validation rules ?
Are you building an application that contains a lot of business workflow process ?
Here comes Jasper Rule Engine.
2. Quickstart
To get started
npm install --save jasper-engine rxjs jsonata
/*
Define your rules
*/
const isJasper: JasperRule = {
// the name of the rule
name: 'isJasper',
// a description for your rule. (documentation purpose only)
description: 'a rule to check if the dog is named Jasper',
// a jsonata expression to test if rule is true/false
action: 'name = "Jasper"',
};
const isSamoyed: JasperRule = {
name: 'isSamoyed',
description: 'a rule to check if the dog is of breed samoyed',
action: 'breed = "Samoyed"',
};
const isMyDog: JasperRule = {
name: 'isMyDog',
description: 'a rule to check if the dog is my dog',
action: 'true',
dependencies: {
name: 'my dog is a samoyed named Jasper',
operator: Operator.AND,
executionOrder: ExecutionOrder.Parallel,
rules: [
{
name: 'name should be jasper',
path: '$',
rule: isJasper.name,
},
{
name: 'breed should be samoyed',
path: '$',
rule: isSamoyed.name,
},
],
},
};
/*
compile your rules
*/
const ruleStore: Record<string, JasperRule> =
[isJasper, isSamoyed, isMyDog].reduce((accumulator: any, rule) => {
accumulator[`${rule.name}`] = rule;
return accumulator;
}, {});
/*
* execute to figure out if the dog is Jasper.
*/
const engine = new JasperEngine(ruleStore);
const dog = {
name: 'Jasper',
breed: 'Samoyed',
};
engine
.run({
root: dog,
ruleName: 'isMyDog',
})
.subscribe({
next: (response) => {
expect(response.isSuccessful).toBe(true);
done();
},
});
3. Rule
Rule
4. Dependencies
Simple Dependency
Composite Dependency
ExecutionOrder
Operator
5. Recipe
Process Engine
Validation Engine
6. Lifecycle Hooks
For Rule
- beforeAction
- afterAction
- onError
For Simple Dependency
- beforeDependency
- beforeEach
- afterEach
- afterDependency
- onDependencyError
For Compositive Dependency
- beforeDependency
- afterDependency
- onDependencyError