UNPKG

@konker.dev/tiny-rules-fp

Version:

Tiny rules engine based on Effect-ts

20 lines 1.76 kB
import * as Effect from 'effect/Effect'; export type Fact = boolean; export type Facts = Record<string, Fact>; export type Rule<R, C, E, F extends Facts> = (context: C, facts: F) => Effect.Effect<F, E, R>; export type RuleSet<R, C, E, F extends Facts> = { readonly facts: F; readonly rules: Array<Rule<R, C, E, F>>; }; export type RuleSetTransform<R, C, E, F extends Facts> = (ruleSet: RuleSet<R, C, E, F>) => RuleSet<R, C, E, F>; export type RuleFunc<C, F extends Facts> = (context: C, facts: F) => boolean; export type RuleFuncEffect<R, C, E, F extends Facts> = (context: C, facts: F) => Effect.Effect<boolean, E, R>; export declare const createRuleSet: <R, C, E, F extends Facts>(initialFacts: F) => RuleSet<R, C, E, F>; export declare const setFacts: <R, C, E, F extends Facts>(ruleSet: RuleSet<R, C, E, F>, facts: F) => RuleSet<R, C, E, F>; export declare const setFact: <F extends Facts>(key: keyof F, value: Fact) => (facts: F) => F; export declare const addRule: <R, C, E, F extends Facts>(rule: Rule<R, C, E, F>) => (ruleSet: RuleSet<R, C, E, F>) => RuleSet<R, C, E, F>; export declare const addRuleFunc: <R, C, E, F extends Facts>(factName: keyof F, ruleFunc: RuleFunc<C, F>, _note?: string) => RuleSetTransform<R, C, E, F>; export declare const addRuleFuncEffect: <R, C, E, F extends Facts>(factName: keyof F, ruleFuncEffect: RuleFuncEffect<R, C, E, F>, _note?: string) => RuleSetTransform<R, C, E, F>; export declare const sequence: <R, C, E, F extends Facts>(rulesList: ReadonlyArray<RuleSetTransform<R, C, E, F>>) => (ruleSet: RuleSet<R, C, E, F>) => RuleSet<R, C, E, F>; export declare const decide: <R, C, E, F extends Facts>(context: C) => (ruleSet: RuleSet<R, C, E, F>) => Effect.Effect<F, E, R>; //# sourceMappingURL=index.d.ts.map