import { ReactNode, ComponentType, FC } from 'react'; import { ProviderDefinition, ProviderOrchestratorConfig } from './types'; export { DefaultLoadingFallback, DefaultErrorFallback } from './default-components'; export type { LoadingFallbackProps, ErrorFallbackProps } from './default-components'; /** * Implementation of the provider orchestrator. * * @example * ```tsx * const orchestrator = new ProviderOrchestratorImpl({ * providers: [ * { * id: 'theme', * Component: ThemeProvider, * dependencies: [], * props: { defaultTheme: 'light' }, * }, * { * id: 'auth', * Component: AuthProvider, * dependencies: ['theme'], * }, * { * id: 'feature-flags', * Component: FeatureFlagProvider, * dependencies: ['auth'], * condition: () => !isTestEnvironment(), * }, * ], * }); * * function App() { * const ProviderTree = orchestrator.getProviderTree(); * return ( * * * * ); * } * ``` */ export declare class ProviderOrchestratorImpl { /** Configuration */ private readonly config; /** Provider registry */ private readonly providers; /** Cached provider tree */ private cachedTree; /** Tree invalidation flag */ private isTreeInvalid; /** * Creates a new provider orchestrator. * @param config - Configuration options */ constructor(config?: Partial); /** * Registers a provider. * @param definition - Provider definition */ registerProvider(definition: ProviderDefinition): void; /** * Unregisters a provider. * @param id - Provider ID */ unregisterProvider(id: string): void; /** * Updates a provider's props. * @param id - Provider ID * @param props - New props */ updateProviderProps(id: string, props: Record): void; /** * Enables a provider. * @param id - Provider ID */ enableProvider(id: string): void; /** * Disables a provider. * @param id - Provider ID */ disableProvider(id: string): void; /** * Gets the composed provider tree component. * @returns Provider tree component */ getProviderTree(): ComponentType<{ children: ReactNode; }>; /** * Gets provider order (for debugging). * @returns Array of provider IDs in order */ getProviderOrder(): string[]; /** * Gets registered provider IDs. * @returns Array of provider IDs */ getProviderIds(): string[]; /** * Checks if a provider is registered. * @param id - Provider ID */ hasProvider(id: string): boolean; /** * Checks if a provider is enabled. * @param id - Provider ID */ isProviderEnabled(id: string): boolean; } /** * Props for OrchestratedProviders component. */ export interface OrchestratedProvidersProps { /** Provider definitions */ providers: ProviderDefinition[]; /** Error boundary component */ errorBoundary?: ComponentType<{ children: ReactNode; }>; /** Loading component */ loadingComponent?: ComponentType; /** Children to render */ children: ReactNode; /** Callback when all providers are ready */ onReady?: () => void; } /** * Component that orchestrates multiple providers. * * @example * ```tsx * function App() { * return ( * console.log('All providers ready')} * > * * * ); * } * ``` */ export declare const OrchestratedProviders: FC; /** * Gets the global provider orchestrator. * @param config - Optional configuration */ export declare function getProviderOrchestrator(config?: Partial): ProviderOrchestratorImpl; /** * Sets the global provider orchestrator. * @param orchestrator - Orchestrator instance */ export declare function setProviderOrchestrator(orchestrator: ProviderOrchestratorImpl): void; /** * Resets the global provider orchestrator. */ export declare function resetProviderOrchestrator(): void; /** * Registers a provider with the global orchestrator. */ export declare function registerProvider(definition: ProviderDefinition): void; /** * Gets the global provider tree component. */ export declare function getGlobalProviderTree(): ComponentType<{ children: ReactNode; }>;