/** * Provider registry for backlog provider management. * * Manages provider instances with lazy instantiation and caching. * Provides methods to get providers by name and detect providers from references. * * @example * ```typescript * import { ProviderRegistry } from './registry.js'; * import type { SpecKitConfig } from '../config.js'; * * const registry = new ProviderRegistry(config); * * // Get default provider * const provider = registry.getProvider(); * * // Get specific provider * const github = registry.getProvider('github'); * * // Detect provider from reference * const detected = registry.detectProvider('PROJ-123'); * // => 'jira' * ``` */ import type { BacklogProvider, BacklogProviderName } from './types.js'; import type { SpecKitConfig } from '../config.js'; /** * Factory function type for creating provider instances. */ export type ProviderFactory = (config: SpecKitConfig) => BacklogProvider; /** * Register a provider factory. * * Called by provider modules to register themselves. * * @param name - Provider name * @param factory - Factory function to create provider instances */ export declare function registerProviderFactory(name: BacklogProviderName, factory: ProviderFactory): void; /** * Provider registry for managing BacklogProvider instances. * * Features: * - Lazy instantiation of providers * - Instance caching per provider type * - Automatic fallback to default provider * - Provider detection from ticket references */ export declare class ProviderRegistry { private readonly config; private readonly providers; /** * Create a new provider registry. * * @param config - SpecKit configuration containing provider settings */ constructor(config: SpecKitConfig); /** * Get or create a provider instance by name. * * Returns cached instance if available, otherwise creates and caches a new one. * Falls back to configured default provider if name not specified. * * @param name - Provider name (defaults to configured default) * @returns BacklogProvider instance * @throws Error if provider type is not registered * * @example * ```typescript * // Get default provider * const provider = registry.getProvider(); * * // Get specific provider * const github = registry.getProvider('github'); * ``` */ getProvider(name?: BacklogProviderName): BacklogProvider; /** * Detect provider from a ticket reference string. * * Uses the detectTicketRef utility to parse the input and extract * the provider type. Returns null if the reference format is ambiguous * or invalid. * * @param ref - Ticket reference string (URL or shorthand) * @returns Provider name if detected, null if ambiguous or invalid * * @example * ```typescript * registry.detectProvider('https://github.com/owner/repo/issues/123'); * // => 'github' * * registry.detectProvider('PROJ-123'); * // => 'jira' * * registry.detectProvider('#123'); * // => 'github' (uses default) * ``` */ detectProvider(ref: string): BacklogProviderName | null; /** * Get the default provider from configuration. * * @returns Default provider name */ getDefaultProvider(): BacklogProviderName; /** * Check if a provider is registered. * * @param name - Provider name to check * @returns True if provider factory is registered */ hasProvider(name: BacklogProviderName): boolean; /** * Get list of all registered provider names. * * @returns Array of registered provider names */ getRegisteredProviders(): BacklogProviderName[]; } //# sourceMappingURL=registry.d.ts.map