UNPKG

@o3r/rules-engine

Version:

This module provides a rule engine that can be executed on your Otter application to customize your application (translations, placeholders and configs) based on a json file generated by your CMS.

108 lines 4.7 kB
import { Observable } from 'rxjs'; import type { RulesEngine } from '../engine'; import { DebugEvent, EvaluationReason, RuleEvaluation, RuleEvaluationOutput } from '../engine.interface'; import type { Facts } from '../fact'; import { RulesetExecutor } from '../ruleset-executor'; import type { ActionBlock, Ruleset } from '../structure'; export interface EngineDebuggerOptions { /** * Limit of events to keep in the stack before subscribing to the debugEvents$ stream. * @default undefined no limit */ eventsStackLimit?: number; } /** * Rules engine debugger object to emit debug events */ export declare class EngineDebugger { private registeredRuleEngine?; private registeredRulesets; private readonly debugEventsSubject$; private performanceMeasures$; /** Stream emitting a debug event when is fired; timeline is kept */ readonly debugEvents$: Observable<DebugEvent>; /** Retrieved the rules engine plugged to the debugger */ get rulesEngine(): RulesEngine | undefined; /** * Instantiate a rules engine debugger * @param options Options to configure the debugger */ constructor(options?: EngineDebuggerOptions); private initializePerformanceObserver; private createBaseExecutionOutputObject; private rulesetExecution; private rulesetExecutionError; /** * Plug the debugger to a Rule Engine * @param rulesEngine */ registerRuleEngine(rulesEngine: RulesEngine): void; /** * Handle ruleset execution debug info * @param currRes * @param prevRes * @param allExecutionsValid * @param rulesetInputFacts * @param runtimeFactValues * @param executionCounter * @param ruleset */ handleDebugRulesetExecutionInfo(currRes: RuleEvaluationOutput[], prevRes: RuleEvaluationOutput[] | undefined, allExecutionsValid: boolean, rulesetInputFacts: string[], runtimeFactValues: Record<string, Facts>, executionCounter: number, ruleset: Ruleset): { executionCounter: number; rulesetOutputExecution: RuleEvaluation[]; allExecutionsValid: boolean; rulesetTriggers: Record<string, Record<string, EvaluationReason>>; }; /** * Emits an 'AvailableRulesets' debug event when rulesets are registered to the rules engine * @param rulesets */ addAvailableRulesets(rulesets: Ruleset[]): void; /** * Computes and emits an 'ActiveRulesets' debug event when the active rulesets are changing * @param ruleSetExecutorMap map off all rulesets executors * @param restrictiveRuleSets ids of the rulesets to activate; if not provided all registered rulesets will be considered as active */ activeRulesetsChange(ruleSetExecutorMap: Record<string, RulesetExecutor>, restrictiveRuleSets?: string[]): void; /** * Emits an 'AllActions' debug event each time the rules engine outputs the list of actions * @param actions list of outputted actions */ allActionsChange(actions: ActionBlock[]): void; /** * Emits a 'RulesetExecution' debug event at the output of a successful ruleset execution * @param ruleset * @param executionCounter * @param rulesetInputFacts * @param allOutputActions * @param runtimeFactValues * @param rulesetTriggers * @param rulesExecutions */ addRulesetExecutionEvent(ruleset: Ruleset, executionCounter: number, rulesetInputFacts: string[], allOutputActions: ActionBlock[], runtimeFactValues: Record<string, Facts>, rulesetTriggers: Record<string, Record<string, EvaluationReason>>, rulesExecutions: RuleEvaluation[]): void; /** * Emits a 'RulesetExecutionError' debug event at the output of a failing ruleset execution * @param ruleset * @param rulesetInputFacts * @param executionCounter * @param runtimeFactValues * @param rulesetTriggers * @param rulesExecutions */ addRulesetExecutionErrorEvent(ruleset: Ruleset, rulesetInputFacts: string[], executionCounter: number, runtimeFactValues: Record<string, Facts>, rulesetTriggers: Record<string, Record<string, EvaluationReason>>, rulesExecutions: RuleEvaluation[]): void; /** * Emits a 'AvailableFactsSnapshot' debug event when a fact value is updated * @param _id * @param factValue$ */ addAvailableFactsSnapshotEvent(_id: string, factValue$: Observable<any>): void; /** * Returns a list of fact name and value pairs * @param factsNames List of facts names to get the value for */ getFactsSnapshot(factsNames: string[]): Promise<{ factName: string; value: any; }[]>; } //# sourceMappingURL=engine.debug.d.ts.map