/** * Rule Engine * * Evaluates the dependency graph against the ArchGuard configuration. * Each rule is an independent function that receives the graph and config, * and returns violations. New rules can be added without modifying others. * * Built-in rules: * 1. LayerDependencyRule — enforces layer dependency direction * 2. PackageBoundaryRule — enforces package isolation * 3. ObjectBoundaryRule — enforces object/field package isolation */ import { ArchGuardConfig, DependencyGraph, RuleResult } from '../types.js'; export interface ArchRule { /** Unique rule identifier */ name: string; /** Human-readable description */ description: string; /** Evaluate this rule against the graph */ evaluate(graph: DependencyGraph, config: ArchGuardConfig): RuleResult; } /** * Runs all registered rules against the dependency graph. */ export declare function evaluateRules(graph: DependencyGraph, config: ArchGuardConfig, customRules?: ArchRule[]): RuleResult[]; declare class LayerDependencyRule implements ArchRule { name: string; description: string; evaluate(graph: DependencyGraph, config: ArchGuardConfig): RuleResult; } declare class PackageBoundaryRule implements ArchRule { name: string; description: string; evaluate(graph: DependencyGraph, config: ArchGuardConfig): RuleResult; } declare class ObjectBoundaryRule implements ArchRule { name: string; description: string; evaluate(graph: DependencyGraph, config: ArchGuardConfig): RuleResult; } /** * Determines if a dependency from sourcePackage to targetPackage is allowed, * considering both layer rules and explicit package-level dependencies. */ declare function isDependencyAllowed(sourcePackageName: string, targetPackageName: string, config: ArchGuardConfig, layerAllowed: Map>, packageAllowed: Map>): boolean; export { LayerDependencyRule, PackageBoundaryRule, ObjectBoundaryRule, isDependencyAllowed }; //# sourceMappingURL=rule-engine.d.ts.map