/** * Normalized graph context for architecture lint rules (visitor pattern). */ import type { IrStructuralFinding } from './ir-structural.js'; /** Re-export shared predicates (structural + lint use the same HTTP/datastore semantics). */ export { isHttpLikeType, isDbLikeType, isQueueLikeNodeType } from './graphPredicates.js'; export type ParsedLintGraph = { nodeById: Map>; edges: unknown[]; adj: Map; outDegree: Map; /** In-degree per node id (built once; use instead of recomputing per rule). */ inDegree: Map; }; export type BuildParsedLintGraphResult = ParsedLintGraph | { findings: IrStructuralFinding[]; }; export declare function edgeEndpoints(e: Record): { from: string; to: string; }; export declare function nodeType(n: Record): string; export declare function looksLikeHealthUrl(url: string): boolean; /** * When true, the edge is treated as **async** for IR-LINT-SYNC-CHAIN-001 (excluded from sync depth). * Convention: `edge.config` / `edge.metadata` may set `async: true`, `protocol: async|message|queue|event`, or channel-like `kind`. * Top-level `edge.kind` is merged into `metadata` during normalization; raw edges still pass `rec.kind` here. * If `graph` is provided, edges **to** queue/topic-like nodes are treated as async even without edge metadata. */ export declare function edgeRepresentsAsyncBoundary(e: Record, graph?: ParsedLintGraph): boolean; /** Adjacency for sync-only dependency depth (omits edges marked async). */ export declare function buildSyncAdjacencyForLint(g: ParsedLintGraph): Map; /** * Build a parsed graph for lint visitors. * On failure (invalid IR root, empty graph, etc.) returns `{ findings }` with IR-STRUCT-* errors instead of `null`. */ export declare function buildParsedLintGraph(ir: unknown): BuildParsedLintGraphResult; /** Type guard: successful parse vs structural blockers. */ export declare function isParsedLintGraph(r: BuildParsedLintGraphResult): r is ParsedLintGraph; //# sourceMappingURL=lint-graph.d.ts.map