import { Analyzer } from "./types.mjs"; import { DefinedAnalyzer } from "./define.mjs"; interface AnalyzerVariants { sql?: Analyzer; rows?: Analyzer; } interface AnalyzerRegistryInit { /** * Preferred for in-tree composition: pass `DefinedAnalyzer[]` directly so * SQL/row variants can never drift apart from their `defineAnalyzer` site. */ defined?: readonly DefinedAnalyzer[]; /** Flat-array path retained for narrow tree-shaken registry composition. */ rows?: readonly Analyzer[]; /** Flat-array path retained for narrow tree-shaken registry composition. */ sql?: readonly Analyzer[]; } interface AnalyzerRegistry { listAnalyzerIds: () => readonly string[]; getAnalyzerVariants: (id: string) => AnalyzerVariants | undefined; resolveAnalyzer: (id: string, sourceSupportsSql: boolean) => Analyzer | undefined; listAnalyzersFor: (sourceSupportsSql: boolean) => readonly Analyzer[]; listAnalyzerIdsFor: (source: { executeSql?: unknown; }) => readonly string[]; } /** * Build an immutable registry from collections of row / SQL analyzers. * No global state; call this once per logical use (typically at startup * or per-request in a worker). */ declare function createAnalyzerRegistry(init?: AnalyzerRegistryInit): AnalyzerRegistry; export { AnalyzerRegistry, AnalyzerRegistryInit, AnalyzerVariants, createAnalyzerRegistry };