verdict-rules
Version:
A small, zero-dependency, async-native rule-evaluation engine. Compose conditions into one explainable pass/fail verdict, with sequential evaluation and real short-circuiting as a guarantee.
25 lines (24 loc) • 931 B
TypeScript
/**
* A small, zero-dependency, async-native rule-evaluation engine.
*
* `Rule<TContext>`/`RulesEngine<TContext>` are generic over the context they
* read from, with no default type parameter — dict-context is
* `FunctionRule<Context>`/`RulesEngine<Context>`.
*
* ```ts
* import { AndRule, FunctionRule, type Context } from "verdict-rules";
*
* const overEighteen = new FunctionRule<Context>("over_18", async (ctx) => ({
* ruleName: "over_18",
* passed: (ctx.age as number) >= 18,
* }));
*
* const verdict = await new AndRule<Context>("eligible", [overEighteen]).evaluate({ age: 21 });
* console.log(verdict.passed); // true
* ```
*/
export { RulesEngine } from "./engine.js";
export { UnknownLookupError } from "./errors.js";
export type { Context, RuleResult, RunResult } from "./result.js";
export { AndRule, FunctionRule, OrRule } from "./rule.js";
export type { Rule, RulePredicate } from "./rule.js";