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;
}>;