@konker.dev/tiny-rules-fp
Version:
Tiny rules engine based on Effect-ts
20 lines • 1.76 kB
TypeScript
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