/** * Plugin registry for indexing and retrieving plugin capabilities. * * @remarks * The registry provides a central place to register plugins and look up their * capabilities by fully-qualified ID, file extension, or format type. */ import type { ChangeDetectorPlugin, InputProcessorDefinition, PolicyDefinition, ReporterDefinition, ValidatorDefinition } from './plugin-types'; /** * Result of looking up a capability with its plugin context. * * @alpha */ export interface ResolvedCapability { /** * The plugin ID that provides this capability. */ readonly pluginId: string; /** * The capability definition. */ readonly definition: T; /** * The fully-qualified ID (`pluginId:capabilityId`). */ readonly qualifiedId: string; } /** * Options for registering a plugin. * * @alpha */ export interface RegisterOptions { /** * If true, overwrites existing capabilities with the same fully-qualified ID. * Defaults to false (first-registered wins). */ readonly force?: boolean; } /** * Logger interface for registry operations. * * @alpha */ export interface RegistryLogger { /** * Log warning messages (e.g., ID conflicts). */ warn(message: string): void; /** * Log debug messages. */ debug?(message: string): void; } /** * Options for creating a plugin registry. * * @alpha */ export interface PluginRegistryOptions { /** * Custom logger for registry operations. */ readonly logger?: RegistryLogger; } /** * A registry for indexing and retrieving plugin capabilities. * * @remarks * The registry indexes capabilities by: * - Fully-qualified ID (`pluginId:capabilityId`) * - File extension (for input processors) * - Output format (for reporters) * * Shorthand IDs are supported when unambiguous (e.g., `typescript` instead of `typescript:default`). * * @alpha */ export interface PluginRegistry { /** * All registered plugins. */ readonly plugins: ReadonlyMap; /** * Register a plugin and index its capabilities. * * @param plugin - The plugin to register * @param options - Registration options * @throws If plugin ID is already registered (unless force is true) */ register(plugin: ChangeDetectorPlugin, options?: RegisterOptions): void; /** * Unregister a plugin and remove its capabilities from the index. * * @param pluginId - The ID of the plugin to unregister * @returns True if the plugin was found and removed */ unregister(pluginId: string): boolean; /** * Get an input processor by ID. * * @remarks * Supports both fully-qualified IDs (`graphql:schema`) and shorthand IDs (`graphql`) * when the plugin has only one input processor. * * @param id - Fully-qualified or shorthand ID * @returns The resolved capability or undefined if not found */ getInputProcessor(id: string): ResolvedCapability | undefined; /** * Get a policy by ID. * * @param id - Fully-qualified or shorthand ID * @returns The resolved capability or undefined if not found */ getPolicy(id: string): ResolvedCapability | undefined; /** * Get a reporter by ID. * * @param id - Fully-qualified or shorthand ID * @returns The resolved capability or undefined if not found */ getReporter(id: string): ResolvedCapability | undefined; /** * Get a validator by ID. * * @param id - Fully-qualified or shorthand ID * @returns The resolved capability or undefined if not found */ getValidator(id: string): ResolvedCapability | undefined; /** * Find input processors that handle a specific file extension. * * @param extension - File extension including dot (e.g., '.ts', '.graphql') * @returns Array of resolved capabilities that handle this extension */ findInputProcessorsForExtension(extension: string): ReadonlyArray>; /** * Find reporters that produce a specific output format. * * @param format - Output format ('text', 'markdown', 'json', 'html', 'custom') * @returns Array of resolved capabilities that produce this format */ findReportersForFormat(format: string): ReadonlyArray>; /** * List all registered input processors. * * @returns Array of all input processor capabilities with plugin context */ listInputProcessors(): ReadonlyArray>; /** * List all registered policies. * * @returns Array of all policy capabilities with plugin context */ listPolicies(): ReadonlyArray>; /** * List all registered reporters. * * @returns Array of all reporter capabilities with plugin context */ listReporters(): ReadonlyArray>; /** * List all registered validators. * * @returns Array of all validator capabilities with plugin context */ listValidators(): ReadonlyArray>; /** * Clear all registered plugins and capabilities. */ clear(): void; } /** * Creates a new plugin registry. * * @param options - Registry options * @returns A new plugin registry instance * * @example * ```typescript * const registry = createPluginRegistry(); * * registry.register(myPlugin); * * const processor = registry.getInputProcessor('typescript:default'); * const processors = registry.findInputProcessorsForExtension('.ts'); * ``` * * @alpha */ export declare function createPluginRegistry(options?: PluginRegistryOptions): PluginRegistry; //# sourceMappingURL=plugin-registry.d.ts.map