@f-o-t/rules-engine 3.0.1 → 3.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/analyzer/analysis.d.ts +72 -0
  2. package/dist/analyzer/analysis.d.ts.map +1 -0
  3. package/dist/builder/conditions.d.ts +29 -0
  4. package/dist/builder/conditions.d.ts.map +1 -0
  5. package/dist/builder/rule.d.ts +40 -0
  6. package/dist/builder/rule.d.ts.map +1 -0
  7. package/dist/cache/cache.d.ts +21 -0
  8. package/dist/cache/cache.d.ts.map +1 -0
  9. package/dist/cache/noop.d.ts +3 -0
  10. package/dist/cache/noop.d.ts.map +1 -0
  11. package/dist/core/evaluate.d.ts +21 -0
  12. package/dist/core/evaluate.d.ts.map +1 -0
  13. package/dist/core/filter.d.ts +8 -0
  14. package/dist/core/filter.d.ts.map +1 -0
  15. package/dist/core/group.d.ts +10 -0
  16. package/dist/core/group.d.ts.map +1 -0
  17. package/dist/core/sort.d.ts +14 -0
  18. package/dist/core/sort.d.ts.map +1 -0
  19. package/dist/engine/engine.d.ts +27 -0
  20. package/dist/engine/engine.d.ts.map +1 -0
  21. package/dist/engine/hooks.d.ts +16 -0
  22. package/dist/engine/hooks.d.ts.map +1 -0
  23. package/dist/engine/state.d.ts +19 -0
  24. package/dist/engine/state.d.ts.map +1 -0
  25. package/dist/index.d.ts +33 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +3083 -0
  28. package/dist/index.js.map +37 -0
  29. package/dist/optimizer/index-builder.d.ts +48 -0
  30. package/dist/optimizer/index-builder.d.ts.map +1 -0
  31. package/dist/serialization/serializer.d.ts +79 -0
  32. package/dist/serialization/serializer.d.ts.map +1 -0
  33. package/dist/simulation/simulator.d.ts +65 -0
  34. package/dist/simulation/simulator.d.ts.map +1 -0
  35. package/dist/types/config.d.ts +87 -0
  36. package/dist/types/config.d.ts.map +1 -0
  37. package/dist/types/consequence.d.ts +21 -0
  38. package/dist/types/consequence.d.ts.map +1 -0
  39. package/dist/types/evaluation.d.ts +70 -0
  40. package/dist/types/evaluation.d.ts.map +1 -0
  41. package/dist/types/rule.d.ts +114 -0
  42. package/dist/types/rule.d.ts.map +1 -0
  43. package/dist/types/state.d.ts +65 -0
  44. package/dist/types/state.d.ts.map +1 -0
  45. package/dist/utils/conditions.d.ts +24 -0
  46. package/dist/utils/conditions.d.ts.map +1 -0
  47. package/dist/utils/hash.d.ts +3 -0
  48. package/dist/utils/hash.d.ts.map +1 -0
  49. package/dist/utils/id.d.ts +2 -0
  50. package/dist/utils/id.d.ts.map +1 -0
  51. package/dist/utils/time.d.ts +8 -0
  52. package/dist/utils/time.d.ts.map +1 -0
  53. package/dist/validation/conflicts.d.ts +25 -0
  54. package/dist/validation/conflicts.d.ts.map +1 -0
  55. package/dist/validation/integrity.d.ts +38 -0
  56. package/dist/validation/integrity.d.ts.map +1 -0
  57. package/dist/validation/schema.d.ts +69 -0
  58. package/dist/validation/schema.d.ts.map +1 -0
  59. package/dist/versioning/version-store.d.ts +50 -0
  60. package/dist/versioning/version-store.d.ts.map +1 -0
  61. package/package.json +35 -34
@@ -0,0 +1,48 @@
1
+ import type { ConsequenceDefinitions, DefaultConsequences } from "../types/consequence";
2
+ import type { Rule } from "../types/rule";
3
+ export type FieldIndex<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = Map<string, ReadonlyArray<Rule<TContext, TConsequences>>>;
4
+ export type TagIndex<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = Map<string, ReadonlyArray<Rule<TContext, TConsequences>>>;
5
+ export type CategoryIndex<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = Map<string, ReadonlyArray<Rule<TContext, TConsequences>>>;
6
+ export type PriorityIndex<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = Map<number, ReadonlyArray<Rule<TContext, TConsequences>>>;
7
+ export type RuleIndex<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
8
+ readonly byField: FieldIndex<TContext, TConsequences>;
9
+ readonly byTag: TagIndex<TContext, TConsequences>;
10
+ readonly byCategory: CategoryIndex<TContext, TConsequences>;
11
+ readonly byPriority: PriorityIndex<TContext, TConsequences>;
12
+ readonly byId: Map<string, Rule<TContext, TConsequences>>;
13
+ readonly sortedByPriority: ReadonlyArray<Rule<TContext, TConsequences>>;
14
+ };
15
+ export type IndexOptions = {
16
+ readonly indexByField?: boolean;
17
+ readonly indexByTag?: boolean;
18
+ readonly indexByCategory?: boolean;
19
+ readonly indexByPriority?: boolean;
20
+ };
21
+ export declare const buildIndex: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(rules: ReadonlyArray<Rule<TContext, TConsequences>>, options?: IndexOptions) => RuleIndex<TContext, TConsequences>;
22
+ export declare const getRulesByField: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(index: RuleIndex<TContext, TConsequences>, field: string) => ReadonlyArray<Rule<TContext, TConsequences>>;
23
+ export declare const getRulesByFields: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(index: RuleIndex<TContext, TConsequences>, fields: ReadonlyArray<string>, mode?: "any" | "all") => ReadonlyArray<Rule<TContext, TConsequences>>;
24
+ export declare const getRulesByTag: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(index: RuleIndex<TContext, TConsequences>, tag: string) => ReadonlyArray<Rule<TContext, TConsequences>>;
25
+ export declare const getRulesByTags: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(index: RuleIndex<TContext, TConsequences>, tags: ReadonlyArray<string>, mode?: "any" | "all") => ReadonlyArray<Rule<TContext, TConsequences>>;
26
+ export declare const getRulesByCategory: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(index: RuleIndex<TContext, TConsequences>, category: string) => ReadonlyArray<Rule<TContext, TConsequences>>;
27
+ export declare const getRulesByPriority: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(index: RuleIndex<TContext, TConsequences>, priority: number) => ReadonlyArray<Rule<TContext, TConsequences>>;
28
+ export declare const getRulesByPriorityRange: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(index: RuleIndex<TContext, TConsequences>, minPriority: number, maxPriority: number) => ReadonlyArray<Rule<TContext, TConsequences>>;
29
+ export declare const getRuleById: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(index: RuleIndex<TContext, TConsequences>, id: string) => Rule<TContext, TConsequences> | undefined;
30
+ export declare const filterRulesForContext: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(index: RuleIndex<TContext, TConsequences>, contextFields: ReadonlyArray<string>) => ReadonlyArray<Rule<TContext, TConsequences>>;
31
+ export type OptimizationSuggestion = {
32
+ readonly type: "INDEX" | "CACHE" | "MERGE" | "SIMPLIFY" | "REORDER";
33
+ readonly severity: "high" | "medium" | "low";
34
+ readonly message: string;
35
+ readonly ruleIds?: ReadonlyArray<string>;
36
+ readonly details?: Readonly<Record<string, unknown>>;
37
+ };
38
+ export declare const analyzeOptimizations: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(rules: ReadonlyArray<Rule<TContext, TConsequences>>) => ReadonlyArray<OptimizationSuggestion>;
39
+ export declare const getIndexStats: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(index: RuleIndex<TContext, TConsequences>) => {
40
+ totalRules: number;
41
+ uniqueFields: number;
42
+ uniqueTags: number;
43
+ uniqueCategories: number;
44
+ uniquePriorities: number;
45
+ averageRulesPerField: number;
46
+ averageRulesPerTag: number;
47
+ };
48
+ //# sourceMappingURL=index-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-builder.d.ts","sourceRoot":"","sources":["../../src/optimizer/index-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type { ConditionGroup } from "@f-o-t/condition-evaluator";
2
+ import type { ConsequenceDefinitions, DefaultConsequences } from "../types/consequence";
3
+ import type { Rule, RuleSet } from "../types/rule";
4
+ export type SerializedRule = {
5
+ readonly id: string;
6
+ readonly name: string;
7
+ readonly description?: string;
8
+ readonly conditions: ConditionGroup;
9
+ readonly consequences: ReadonlyArray<{
10
+ type: string;
11
+ payload: unknown;
12
+ }>;
13
+ readonly priority: number;
14
+ readonly enabled: boolean;
15
+ readonly stopOnMatch: boolean;
16
+ readonly tags: ReadonlyArray<string>;
17
+ readonly category?: string;
18
+ readonly metadata?: Readonly<Record<string, unknown>>;
19
+ readonly createdAt: string;
20
+ readonly updatedAt: string;
21
+ };
22
+ export type SerializedRuleSet = {
23
+ readonly id: string;
24
+ readonly name: string;
25
+ readonly description?: string;
26
+ readonly ruleIds: ReadonlyArray<string>;
27
+ readonly enabled: boolean;
28
+ readonly metadata?: Readonly<Record<string, unknown>>;
29
+ };
30
+ export type ExportFormat = {
31
+ readonly version: string;
32
+ readonly exportedAt: string;
33
+ readonly rules: ReadonlyArray<SerializedRule>;
34
+ readonly ruleSets?: ReadonlyArray<SerializedRuleSet>;
35
+ readonly metadata?: Readonly<Record<string, unknown>>;
36
+ };
37
+ export type ImportOptions = {
38
+ readonly generateNewIds?: boolean;
39
+ readonly idPrefix?: string;
40
+ readonly preserveDates?: boolean;
41
+ readonly validateSchema?: boolean;
42
+ };
43
+ export type OrphanedReference = {
44
+ readonly ruleSetId: string;
45
+ readonly ruleSetName: string;
46
+ readonly missingRuleIds: ReadonlyArray<string>;
47
+ };
48
+ export type ImportResult<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
49
+ readonly success: boolean;
50
+ readonly rules: ReadonlyArray<Rule<TContext, TConsequences>>;
51
+ readonly ruleSets: ReadonlyArray<RuleSet>;
52
+ readonly errors: ReadonlyArray<{
53
+ index: number;
54
+ type: "rule" | "ruleSet";
55
+ message: string;
56
+ }>;
57
+ readonly idMapping: ReadonlyMap<string, string>;
58
+ readonly orphanedReferences: ReadonlyArray<OrphanedReference>;
59
+ };
60
+ export declare const serializeRule: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(rule: Rule<TContext, TConsequences>) => SerializedRule;
61
+ export declare const deserializeRule: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(serialized: SerializedRule, options?: ImportOptions) => Rule<TContext, TConsequences>;
62
+ export declare const serializeRuleSet: (ruleSet: RuleSet) => SerializedRuleSet;
63
+ export declare const deserializeRuleSet: (serialized: SerializedRuleSet, idMapping: Map<string, string>, options?: ImportOptions) => RuleSet;
64
+ export declare const exportRules: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(rules: ReadonlyArray<Rule<TContext, TConsequences>>, ruleSets?: ReadonlyArray<RuleSet>, metadata?: Record<string, unknown>) => ExportFormat;
65
+ export declare const exportToJson: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(rules: ReadonlyArray<Rule<TContext, TConsequences>>, ruleSets?: ReadonlyArray<RuleSet>, metadata?: Record<string, unknown>) => string;
66
+ export declare const importRules: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(data: ExportFormat, options?: ImportOptions) => ImportResult<TContext, TConsequences>;
67
+ export declare const importFromJson: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(json: string, options?: ImportOptions) => ImportResult<TContext, TConsequences>;
68
+ export declare const cloneRule: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(rule: Rule<TContext, TConsequences>, newId?: string, newName?: string) => Rule<TContext, TConsequences>;
69
+ export declare const mergeRuleSets: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(baseRules: ReadonlyArray<Rule<TContext, TConsequences>>, incomingRules: ReadonlyArray<Rule<TContext, TConsequences>>, strategy?: "replace" | "skip" | "merge") => ReadonlyArray<Rule<TContext, TConsequences>>;
70
+ export declare const diffRuleSets: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(oldRules: ReadonlyArray<Rule<TContext, TConsequences>>, newRules: ReadonlyArray<Rule<TContext, TConsequences>>) => {
71
+ added: ReadonlyArray<Rule<TContext, TConsequences>>;
72
+ removed: ReadonlyArray<Rule<TContext, TConsequences>>;
73
+ modified: ReadonlyArray<{
74
+ old: Rule<TContext, TConsequences>;
75
+ new: Rule<TContext, TConsequences>;
76
+ }>;
77
+ unchanged: ReadonlyArray<Rule<TContext, TConsequences>>;
78
+ };
79
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/serialization/serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { createEvaluator } from "@f-o-t/condition-evaluator";
2
+ import type { ConsequenceDefinitions, DefaultConsequences } from "../types/consequence";
3
+ import type { RuleEvaluationResult } from "../types/evaluation";
4
+ import type { Rule } from "../types/rule";
5
+ export type SimulationContext<TContext = unknown> = {
6
+ readonly data: TContext;
7
+ readonly metadata?: Record<string, unknown>;
8
+ };
9
+ export type SimulationResult<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
10
+ readonly context: SimulationContext<TContext>;
11
+ readonly matchedRules: ReadonlyArray<RuleEvaluationResult<TContext, TConsequences>>;
12
+ readonly unmatchedRules: ReadonlyArray<{
13
+ ruleId: string;
14
+ ruleName: string;
15
+ reason: string;
16
+ }>;
17
+ readonly consequences: ReadonlyArray<{
18
+ type: keyof TConsequences;
19
+ payload: unknown;
20
+ ruleId: string;
21
+ ruleName: string;
22
+ }>;
23
+ readonly executionTimeMs: number;
24
+ };
25
+ export type WhatIfResult<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
26
+ readonly original: SimulationResult<TContext, TConsequences>;
27
+ readonly modified: SimulationResult<TContext, TConsequences>;
28
+ readonly differences: {
29
+ readonly newMatches: ReadonlyArray<string>;
30
+ readonly lostMatches: ReadonlyArray<string>;
31
+ readonly consequenceChanges: ReadonlyArray<{
32
+ type: "added" | "removed" | "modified";
33
+ consequenceType: string;
34
+ ruleId: string;
35
+ }>;
36
+ };
37
+ };
38
+ export type BatchSimulationResult<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
39
+ readonly results: ReadonlyArray<SimulationResult<TContext, TConsequences>>;
40
+ readonly summary: {
41
+ readonly totalContexts: number;
42
+ readonly averageMatchedRules: number;
43
+ readonly ruleMatchFrequency: ReadonlyMap<string, number>;
44
+ readonly consequenceFrequency: ReadonlyMap<string, number>;
45
+ readonly averageExecutionTimeMs: number;
46
+ };
47
+ };
48
+ export declare const simulate: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(rules: ReadonlyArray<Rule<TContext, TConsequences>>, context: SimulationContext<TContext>, evaluator?: ReturnType<typeof createEvaluator>) => SimulationResult<TContext, TConsequences>;
49
+ export declare const simulateSingleRule: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(rule: Rule<TContext, TConsequences>, context: SimulationContext<TContext>, evaluator?: ReturnType<typeof createEvaluator>) => {
50
+ matched: boolean;
51
+ conditionResult: unknown;
52
+ consequences: ReadonlyArray<{
53
+ type: keyof TConsequences;
54
+ payload: unknown;
55
+ }>;
56
+ };
57
+ export declare const whatIf: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(originalRules: ReadonlyArray<Rule<TContext, TConsequences>>, modifiedRules: ReadonlyArray<Rule<TContext, TConsequences>>, context: SimulationContext<TContext>, evaluator?: ReturnType<typeof createEvaluator>) => WhatIfResult<TContext, TConsequences>;
58
+ export declare const batchSimulate: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(rules: ReadonlyArray<Rule<TContext, TConsequences>>, contexts: ReadonlyArray<SimulationContext<TContext>>, evaluator?: ReturnType<typeof createEvaluator>) => BatchSimulationResult<TContext, TConsequences>;
59
+ export declare const findRulesAffectedByContextChange: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(rules: ReadonlyArray<Rule<TContext, TConsequences>>, originalContext: SimulationContext<TContext>, modifiedContext: SimulationContext<TContext>, evaluator?: ReturnType<typeof createEvaluator>) => {
60
+ becameTrue: ReadonlyArray<Rule<TContext, TConsequences>>;
61
+ becameFalse: ReadonlyArray<Rule<TContext, TConsequences>>;
62
+ unchanged: ReadonlyArray<Rule<TContext, TConsequences>>;
63
+ };
64
+ export declare const formatSimulationResult: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>(result: SimulationResult<TContext, TConsequences>) => string;
65
+ //# sourceMappingURL=simulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../src/simulation/simulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { z } from "zod";
2
+ import type { OperatorMap } from "@f-o-t/condition-evaluator";
3
+ import type { AggregatedConsequence, ConsequenceDefinitions, DefaultConsequences } from "./consequence";
4
+ import type { ConflictResolutionStrategy, EngineExecutionResult, EvaluationContext, RuleEvaluationResult } from "./evaluation";
5
+ import type { Rule } from "./rule";
6
+ export declare const LogLevelSchema: z.ZodEnum<{
7
+ error: "error";
8
+ none: "none";
9
+ warn: "warn";
10
+ info: "info";
11
+ debug: "debug";
12
+ }>;
13
+ export type LogLevel = z.infer<typeof LogLevelSchema>;
14
+ export declare const CacheConfigSchema: z.ZodObject<{
15
+ enabled: z.ZodDefault<z.ZodBoolean>;
16
+ ttl: z.ZodDefault<z.ZodNumber>;
17
+ maxSize: z.ZodDefault<z.ZodNumber>;
18
+ }, z.core.$strip>;
19
+ export type CacheConfig = z.infer<typeof CacheConfigSchema>;
20
+ export declare const ValidationConfigSchema: z.ZodObject<{
21
+ enabled: z.ZodDefault<z.ZodBoolean>;
22
+ strict: z.ZodDefault<z.ZodBoolean>;
23
+ }, z.core.$strip>;
24
+ export type ValidationConfig = z.infer<typeof ValidationConfigSchema>;
25
+ export declare const VersioningConfigSchema: z.ZodObject<{
26
+ enabled: z.ZodDefault<z.ZodBoolean>;
27
+ maxVersions: z.ZodDefault<z.ZodNumber>;
28
+ }, z.core.$strip>;
29
+ export type VersioningConfig = z.infer<typeof VersioningConfigSchema>;
30
+ export type Logger = {
31
+ readonly error: (...args: unknown[]) => void;
32
+ readonly warn: (...args: unknown[]) => void;
33
+ readonly info: (...args: unknown[]) => void;
34
+ readonly debug: (...args: unknown[]) => void;
35
+ };
36
+ export type EngineHooks<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
37
+ readonly beforeEvaluation?: (context: EvaluationContext<TContext>, rules: ReadonlyArray<Rule<TContext, TConsequences>>) => void | Promise<void>;
38
+ readonly afterEvaluation?: (result: EngineExecutionResult<TContext, TConsequences>) => void | Promise<void>;
39
+ readonly beforeRuleEvaluation?: (rule: Rule<TContext, TConsequences>, context: EvaluationContext<TContext>) => void | Promise<void>;
40
+ readonly afterRuleEvaluation?: (rule: Rule<TContext, TConsequences>, result: RuleEvaluationResult<TContext, TConsequences>) => void | Promise<void>;
41
+ readonly onRuleMatch?: (rule: Rule<TContext, TConsequences>, context: EvaluationContext<TContext>) => void | Promise<void>;
42
+ readonly onRuleSkip?: (rule: Rule<TContext, TConsequences>, reason: string) => void | Promise<void>;
43
+ readonly onRuleError?: (rule: Rule<TContext, TConsequences>, error: Error) => void | Promise<void>;
44
+ readonly onConsequenceCollected?: (rule: Rule<TContext, TConsequences>, consequence: AggregatedConsequence<TConsequences>) => void | Promise<void>;
45
+ readonly onCacheHit?: (key: string, result: EngineExecutionResult<TContext, TConsequences>) => void | Promise<void>;
46
+ readonly onCacheMiss?: (key: string) => void | Promise<void>;
47
+ readonly onSlowRule?: (rule: Rule<TContext, TConsequences>, timeMs: number, threshold: number) => void | Promise<void>;
48
+ readonly onHookError?: (hookName: string, error: Error) => void;
49
+ };
50
+ export type EngineConfig<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
51
+ readonly consequences?: TConsequences;
52
+ readonly conflictResolution?: ConflictResolutionStrategy;
53
+ readonly cache?: Partial<CacheConfig>;
54
+ readonly validation?: Partial<ValidationConfig>;
55
+ readonly versioning?: Partial<VersioningConfig>;
56
+ readonly hooks?: EngineHooks<TContext, TConsequences>;
57
+ readonly logLevel?: LogLevel;
58
+ readonly logger?: Logger;
59
+ readonly continueOnError?: boolean;
60
+ readonly slowRuleThresholdMs?: number;
61
+ readonly hookTimeoutMs?: number;
62
+ readonly evaluator?: ReturnType<typeof import("@f-o-t/condition-evaluator").createEvaluator>;
63
+ readonly operators?: OperatorMap;
64
+ };
65
+ export type ResolvedEngineConfig<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
66
+ readonly consequences: TConsequences | undefined;
67
+ readonly conflictResolution: ConflictResolutionStrategy;
68
+ readonly cache: CacheConfig;
69
+ readonly validation: ValidationConfig;
70
+ readonly versioning: VersioningConfig;
71
+ readonly hooks: EngineHooks<TContext, TConsequences>;
72
+ readonly logLevel: LogLevel;
73
+ readonly logger: Logger;
74
+ readonly continueOnError: boolean;
75
+ readonly slowRuleThresholdMs: number;
76
+ readonly hookTimeoutMs: number | undefined;
77
+ readonly evaluator: ReturnType<typeof import("@f-o-t/condition-evaluator").createEvaluator>;
78
+ };
79
+ export declare const parseCacheConfig: (input?: Partial<CacheConfig>) => CacheConfig;
80
+ export declare const parseValidationConfig: (input?: Partial<ValidationConfig>) => ValidationConfig;
81
+ export declare const parseVersioningConfig: (input?: Partial<VersioningConfig>) => VersioningConfig;
82
+ export declare const getDefaultCacheConfig: () => CacheConfig;
83
+ export declare const getDefaultValidationConfig: () => ValidationConfig;
84
+ export declare const getDefaultVersioningConfig: () => VersioningConfig;
85
+ export declare const getDefaultLogLevel: () => LogLevel;
86
+ export declare const getDefaultConflictResolution: () => ConflictResolutionStrategy;
87
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EACT,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACT,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACtB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAMnC,eAAO,MAAM,cAAc;;;;;;EAMzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,sBAAsB;;;iBAGjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,sBAAsB;;;iBAGjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAMtE,MAAM,MAAM,MAAM,GAAG;IAClB,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,WAAW,CACpB,QAAQ,GAAG,OAAO,EAClB,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,IACjE;IACD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CACzB,OAAO,EAAE,iBAAiB,CAAC,QAAQ,CAAC,EACpC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,KACjD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,eAAe,CAAC,EAAE,CACxB,MAAM,EAAE,qBAAqB,CAAC,QAAQ,EAAE,aAAa,CAAC,KACpD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAC7B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EACnC,OAAO,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAClC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAC5B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EACnC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,aAAa,CAAC,KACnD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,WAAW,CAAC,EAAE,CACpB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EACnC,OAAO,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAClC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,UAAU,CAAC,EAAE,CACnB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EACnC,MAAM,EAAE,MAAM,KACZ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,WAAW,CAAC,EAAE,CACpB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EACnC,KAAK,EAAE,KAAK,KACV,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAC/B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EACnC,WAAW,EAAE,qBAAqB,CAAC,aAAa,CAAC,KAC/C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,UAAU,CAAC,EAAE,CACnB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,qBAAqB,CAAC,QAAQ,EAAE,aAAa,CAAC,KACpD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D,QAAQ,CAAC,UAAU,CAAC,EAAE,CACnB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EACnC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,KACf,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1B,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,YAAY,CACrB,QAAQ,GAAG,OAAO,EAClB,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,IACjE;IACD,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,0BAA0B,CAAC;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAEhC,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,cAAc,4BAA4B,EAAE,eAAe,CAAC,CAAC;IAC7F,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAC7B,QAAQ,GAAG,OAAO,EAClB,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,IACjE;IACD,QAAQ,CAAC,YAAY,EAAE,aAAa,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3C,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,cAAc,4BAA4B,EAAE,eAAe,CAAC,CAAC;CAC9F,CAAC;AAMF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,OAAO,CAAC,WAAW,CAAC,KAAG,WACzB,CAAC;AAExC,eAAO,MAAM,qBAAqB,GAC/B,QAAQ,OAAO,CAAC,gBAAgB,CAAC,KACjC,gBAA6D,CAAC;AAEjE,eAAO,MAAM,qBAAqB,GAC/B,QAAQ,OAAO,CAAC,gBAAgB,CAAC,KACjC,gBAA6D,CAAC;AAEjE,eAAO,MAAM,qBAAqB,QAAO,WACX,CAAC;AAE/B,eAAO,MAAM,0BAA0B,QAAO,gBACX,CAAC;AAEpC,eAAO,MAAM,0BAA0B,QAAO,gBACX,CAAC;AAEpC,eAAO,MAAM,kBAAkB,QAAO,QAAkB,CAAC;AAEzD,eAAO,MAAM,4BAA4B,QAAO,0BACnC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { z } from "zod";
2
+ export type ConsequenceDefinitions = Record<string, z.ZodType>;
3
+ export type DefaultConsequences = Record<string, z.ZodType>;
4
+ export type InferConsequenceType<T extends ConsequenceDefinitions> = keyof T;
5
+ export type InferConsequencePayload<T extends ConsequenceDefinitions, K extends keyof T> = z.infer<T[K]>;
6
+ export type Consequence<TConsequences extends ConsequenceDefinitions = DefaultConsequences, TType extends keyof TConsequences = keyof TConsequences> = {
7
+ readonly type: TType;
8
+ readonly payload: z.infer<TConsequences[TType]>;
9
+ };
10
+ export type ConsequenceInput<TConsequences extends ConsequenceDefinitions = DefaultConsequences, TType extends keyof TConsequences = keyof TConsequences> = {
11
+ type: TType;
12
+ payload: z.infer<TConsequences[TType]>;
13
+ };
14
+ export type AggregatedConsequence<TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
15
+ readonly type: keyof TConsequences;
16
+ readonly payload: unknown;
17
+ readonly ruleId: string;
18
+ readonly ruleName?: string;
19
+ readonly priority: number;
20
+ };
21
+ //# sourceMappingURL=consequence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consequence.d.ts","sourceRoot":"","sources":["../../src/types/consequence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAE5D,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,sBAAsB,IAAI,MAAM,CAAC,CAAC;AAE7E,MAAM,MAAM,uBAAuB,CAChC,CAAC,SAAS,sBAAsB,EAChC,CAAC,SAAS,MAAM,CAAC,IAChB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAElB,MAAM,MAAM,WAAW,CACpB,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,EAClE,KAAK,SAAS,MAAM,aAAa,GAAG,MAAM,aAAa,IACtD;IACD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,gBAAgB,CACzB,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,EAClE,KAAK,SAAS,MAAM,aAAa,GAAG,MAAM,aAAa,IACtD;IACD,IAAI,EAAE,KAAK,CAAC;IACZ,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAC9B,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,IACjE;IACD,QAAQ,CAAC,IAAI,EAAE,MAAM,aAAa,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC5B,CAAC"}
@@ -0,0 +1,70 @@
1
+ import type { GroupEvaluationResult } from "@f-o-t/condition-evaluator";
2
+ import { z } from "zod";
3
+ import type { AggregatedConsequence, ConsequenceDefinitions, DefaultConsequences } from "./consequence";
4
+ import type { Rule } from "./rule";
5
+ export declare const ConflictResolutionStrategySchema: z.ZodEnum<{
6
+ priority: "priority";
7
+ "first-match": "first-match";
8
+ all: "all";
9
+ "most-specific": "most-specific";
10
+ }>;
11
+ export type ConflictResolutionStrategy = z.infer<typeof ConflictResolutionStrategySchema>;
12
+ export declare const EvaluateOptionsSchema: z.ZodObject<{
13
+ conflictResolution: z.ZodOptional<z.ZodEnum<{
14
+ priority: "priority";
15
+ "first-match": "first-match";
16
+ all: "all";
17
+ "most-specific": "most-specific";
18
+ }>>;
19
+ maxRules: z.ZodOptional<z.ZodNumber>;
20
+ timeout: z.ZodOptional<z.ZodNumber>;
21
+ skipDisabled: z.ZodOptional<z.ZodBoolean>;
22
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
23
+ category: z.ZodOptional<z.ZodString>;
24
+ ruleSetId: z.ZodOptional<z.ZodString>;
25
+ bypassCache: z.ZodOptional<z.ZodBoolean>;
26
+ }, z.core.$strip>;
27
+ export type EvaluateOptions = z.infer<typeof EvaluateOptionsSchema>;
28
+ export declare const EvaluateConfigSchema: z.ZodObject<{
29
+ conflictResolution: z.ZodEnum<{
30
+ priority: "priority";
31
+ "first-match": "first-match";
32
+ all: "all";
33
+ "most-specific": "most-specific";
34
+ }>;
35
+ continueOnError: z.ZodBoolean;
36
+ collectAllConsequences: z.ZodBoolean;
37
+ }, z.core.$strip>;
38
+ export type EvaluateConfig = z.infer<typeof EvaluateConfigSchema>;
39
+ export type EvaluationContext<TContext = unknown> = {
40
+ readonly data: TContext;
41
+ readonly timestamp: Date;
42
+ readonly correlationId?: string;
43
+ readonly metadata?: Readonly<Record<string, unknown>>;
44
+ };
45
+ export type RuleEvaluationResult<_TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
46
+ readonly ruleId: string;
47
+ readonly ruleName: string;
48
+ readonly matched: boolean;
49
+ readonly conditionResult: GroupEvaluationResult;
50
+ readonly consequences: ReadonlyArray<AggregatedConsequence<TConsequences>>;
51
+ readonly evaluationTimeMs: number;
52
+ readonly skipped: boolean;
53
+ readonly skipReason?: string;
54
+ readonly error?: Error;
55
+ };
56
+ export type EngineExecutionResult<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
57
+ readonly context: EvaluationContext<TContext>;
58
+ readonly results: ReadonlyArray<RuleEvaluationResult<TContext, TConsequences>>;
59
+ readonly matchedRules: ReadonlyArray<Rule<TContext, TConsequences>>;
60
+ readonly consequences: ReadonlyArray<AggregatedConsequence<TConsequences>>;
61
+ readonly totalRulesEvaluated: number;
62
+ readonly totalRulesMatched: number;
63
+ readonly totalRulesSkipped: number;
64
+ readonly totalRulesErrored: number;
65
+ readonly executionTimeMs: number;
66
+ readonly stoppedEarly: boolean;
67
+ readonly stoppedByRuleId?: string;
68
+ readonly cacheHit: boolean;
69
+ };
70
+ //# sourceMappingURL=evaluation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation.d.ts","sourceRoot":"","sources":["../../src/types/evaluation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACT,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAMnC,eAAO,MAAM,gCAAgC;;;;;EAK3C,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,gCAAgC,CACzC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBAShC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,oBAAoB;;;;;;;;;iBAI/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAMlE,MAAM,MAAM,iBAAiB,CAAC,QAAQ,GAAG,OAAO,IAAI;IACjD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,oBAAoB,CAC7B,SAAS,GAAG,OAAO,EACnB,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,IACjE;IACD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3E,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,CAC9B,QAAQ,GAAG,OAAO,EAClB,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,IACjE;IACD,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,aAAa,CAC5B,oBAAoB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAC/C,CAAC;IACF,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IACpE,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3E,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC7B,CAAC"}
@@ -0,0 +1,114 @@
1
+ import type { ConditionGroup } from "@f-o-t/condition-evaluator";
2
+ import { z } from "zod";
3
+ import type { Consequence, ConsequenceDefinitions, DefaultConsequences } from "./consequence";
4
+ export type Rule<_TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
5
+ readonly id: string;
6
+ readonly name: string;
7
+ readonly description?: string;
8
+ readonly conditions: ConditionGroup;
9
+ readonly consequences: ReadonlyArray<Consequence<TConsequences>>;
10
+ readonly priority: number;
11
+ readonly enabled: boolean;
12
+ readonly stopOnMatch: boolean;
13
+ readonly tags: ReadonlyArray<string>;
14
+ readonly category?: string;
15
+ readonly metadata?: Readonly<Record<string, unknown>>;
16
+ readonly createdAt: Date;
17
+ readonly updatedAt: Date;
18
+ };
19
+ export type RuleInput<_TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
20
+ id?: string;
21
+ name: string;
22
+ description?: string;
23
+ conditions: ConditionGroup;
24
+ consequences: Array<{
25
+ type: keyof TConsequences;
26
+ payload: z.infer<TConsequences[keyof TConsequences]>;
27
+ }>;
28
+ priority?: number;
29
+ enabled?: boolean;
30
+ stopOnMatch?: boolean;
31
+ tags?: string[];
32
+ category?: string;
33
+ metadata?: Record<string, unknown>;
34
+ };
35
+ export type RuleSet = {
36
+ readonly id: string;
37
+ readonly name: string;
38
+ readonly description?: string;
39
+ readonly ruleIds: ReadonlyArray<string>;
40
+ readonly enabled: boolean;
41
+ readonly metadata?: Readonly<Record<string, unknown>>;
42
+ };
43
+ export type RuleSetInput = {
44
+ id?: string;
45
+ name: string;
46
+ description?: string;
47
+ ruleIds: string[];
48
+ enabled?: boolean;
49
+ metadata?: Record<string, unknown>;
50
+ };
51
+ export type RuleFilters = {
52
+ readonly enabled?: boolean;
53
+ readonly tags?: ReadonlyArray<string>;
54
+ readonly category?: string;
55
+ readonly ruleSetId?: string;
56
+ readonly ids?: ReadonlyArray<string>;
57
+ };
58
+ export declare const RuleSchema: z.ZodObject<{
59
+ id: z.ZodString;
60
+ name: z.ZodString;
61
+ description: z.ZodOptional<z.ZodString>;
62
+ conditions: z.ZodCustom<{
63
+ id: string;
64
+ operator: "AND" | "OR";
65
+ scoringMode?: "binary" | "weighted" | undefined;
66
+ threshold?: number | undefined;
67
+ weight?: number | undefined;
68
+ } & {
69
+ conditions: (import("@f-o-t/condition-evaluator").Condition | ({
70
+ id: string;
71
+ operator: "AND" | "OR";
72
+ scoringMode?: "binary" | "weighted" | undefined;
73
+ threshold?: number | undefined;
74
+ weight?: number | undefined;
75
+ } & /*elided*/ any))[];
76
+ }, {
77
+ id: string;
78
+ operator: "AND" | "OR";
79
+ scoringMode?: "binary" | "weighted" | undefined;
80
+ threshold?: number | undefined;
81
+ weight?: number | undefined;
82
+ } & {
83
+ conditions: (import("@f-o-t/condition-evaluator").Condition | ({
84
+ id: string;
85
+ operator: "AND" | "OR";
86
+ scoringMode?: "binary" | "weighted" | undefined;
87
+ threshold?: number | undefined;
88
+ weight?: number | undefined;
89
+ } & /*elided*/ any))[];
90
+ }>;
91
+ consequences: z.ZodArray<z.ZodObject<{
92
+ type: z.ZodString;
93
+ payload: z.ZodUnknown;
94
+ }, z.core.$strip>>;
95
+ priority: z.ZodDefault<z.ZodNumber>;
96
+ enabled: z.ZodDefault<z.ZodBoolean>;
97
+ stopOnMatch: z.ZodDefault<z.ZodBoolean>;
98
+ tags: z.ZodDefault<z.ZodArray<z.ZodString>>;
99
+ category: z.ZodOptional<z.ZodString>;
100
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
101
+ createdAt: z.ZodDefault<z.ZodDate>;
102
+ updatedAt: z.ZodDefault<z.ZodDate>;
103
+ }, z.core.$strip>;
104
+ export declare const RuleSetSchema: z.ZodObject<{
105
+ id: z.ZodString;
106
+ name: z.ZodString;
107
+ description: z.ZodOptional<z.ZodString>;
108
+ ruleIds: z.ZodArray<z.ZodString>;
109
+ enabled: z.ZodDefault<z.ZodBoolean>;
110
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
111
+ }, z.core.$strip>;
112
+ export type RuleSchemaType = z.infer<typeof RuleSchema>;
113
+ export type RuleSetSchemaType = z.infer<typeof RuleSetSchema>;
114
+ //# sourceMappingURL=rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../src/types/rule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { z } from "zod";
2
+ import type { ConsequenceDefinitions, DefaultConsequences } from "./consequence";
3
+ import type { Rule, RuleSet } from "./rule";
4
+ export declare const RuleStatsSchema: z.ZodObject<{
5
+ evaluations: z.ZodNumber;
6
+ matches: z.ZodNumber;
7
+ errors: z.ZodNumber;
8
+ totalTimeMs: z.ZodNumber;
9
+ avgTimeMs: z.ZodNumber;
10
+ lastEvaluated: z.ZodOptional<z.ZodDate>;
11
+ }, z.core.$strip>;
12
+ export type RuleStats = z.infer<typeof RuleStatsSchema>;
13
+ export declare const CacheStatsSchema: z.ZodObject<{
14
+ size: z.ZodNumber;
15
+ maxSize: z.ZodNumber;
16
+ hits: z.ZodNumber;
17
+ misses: z.ZodNumber;
18
+ hitRate: z.ZodNumber;
19
+ evictions: z.ZodNumber;
20
+ }, z.core.$strip>;
21
+ export type CacheStats = z.infer<typeof CacheStatsSchema>;
22
+ export declare const EngineStatsSchema: z.ZodObject<{
23
+ totalRules: z.ZodNumber;
24
+ enabledRules: z.ZodNumber;
25
+ disabledRules: z.ZodNumber;
26
+ totalRuleSets: z.ZodNumber;
27
+ totalEvaluations: z.ZodNumber;
28
+ totalMatches: z.ZodNumber;
29
+ totalErrors: z.ZodNumber;
30
+ avgEvaluationTimeMs: z.ZodNumber;
31
+ cacheHits: z.ZodNumber;
32
+ cacheMisses: z.ZodNumber;
33
+ cacheHitRate: z.ZodNumber;
34
+ }, z.core.$strip>;
35
+ export type EngineStats = z.infer<typeof EngineStatsSchema>;
36
+ export type EngineState<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
37
+ readonly rules: ReadonlyMap<string, Rule<TContext, TConsequences>>;
38
+ readonly ruleSets: ReadonlyMap<string, RuleSet>;
39
+ readonly ruleOrder: ReadonlyArray<string>;
40
+ };
41
+ export type MutableEngineState<TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences> = {
42
+ rules: Map<string, Rule<TContext, TConsequences>>;
43
+ ruleSets: Map<string, RuleSet>;
44
+ ruleOrder: string[];
45
+ };
46
+ export type MutableRuleStats = {
47
+ evaluations: number;
48
+ matches: number;
49
+ errors: number;
50
+ totalTimeMs: number;
51
+ avgTimeMs: number;
52
+ lastEvaluated?: Date;
53
+ };
54
+ export type OptimizerState = {
55
+ readonly ruleStats: ReadonlyMap<string, RuleStats>;
56
+ readonly lastOptimized?: Date;
57
+ };
58
+ export type MutableOptimizerState = {
59
+ ruleStats: Map<string, MutableRuleStats>;
60
+ lastOptimized?: Date;
61
+ };
62
+ export declare const createInitialState: <TContext = unknown, TConsequences extends ConsequenceDefinitions = DefaultConsequences>() => MutableEngineState<TContext, TConsequences>;
63
+ export declare const createInitialOptimizerState: () => MutableOptimizerState;
64
+ export declare const createInitialRuleStats: () => MutableRuleStats;
65
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/types/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EACT,sBAAsB,EACtB,mBAAmB,EACrB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAM5C,eAAO,MAAM,eAAe;;;;;;;iBAO1B,CAAC;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,gBAAgB;;;;;;;iBAO3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;iBAY5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAM5D,MAAM,MAAM,WAAW,CACpB,QAAQ,GAAG,OAAO,EAClB,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,IACjE;IACD,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC5C,CAAC;AAGF,MAAM,MAAM,kBAAkB,CAC3B,QAAQ,GAAG,OAAO,EAClB,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,IACjE;IACD,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAClD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAGF,MAAM,MAAM,gBAAgB,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC1B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC;CAChC,CAAC;AAGF,MAAM,MAAM,qBAAqB,GAAG;IACjC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACzC,aAAa,CAAC,EAAE,IAAI,CAAC;CACvB,CAAC;AAMF,eAAO,MAAM,kBAAkB,GAC5B,QAAQ,GAAG,OAAO,EAClB,aAAa,SAAS,sBAAsB,GAAG,mBAAmB,OAChE,kBAAkB,CAAC,QAAQ,EAAE,aAAa,CAI7C,CAAC;AAEH,eAAO,MAAM,2BAA2B,QAAO,qBAG7C,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAAO,gBAOxC,CAAC"}