import type { EventData, EventPublisher, SubscribeTopicDescriptor, Subscription, TopicDescriptor } from './events'; import type { PluginExports } from './plugin-exports'; import type { RicosServices } from './services'; import type { INotifier } from './uploadServicesTypes'; /** * Orchestrates subdomian aggregate lifecycle and dependencies * * Responsibilities: * - instantiate subdomain aggregates, injecting relevant dependencies * - register events of any EventSources * - subscribe any PolicySubscribers * - finalize subdomain aggregates * - expose RicosServices * * @export * @interface Orchestrator */ export interface Orchestrator { getServices(): RicosServices; setUpdateServiceDom(setErrorNotifier: () => INotifier, setFileInput: () => HTMLInputElement): void; getPluginExports(): Partial; } /** * Provides event publishers to event sources * * @export * @interface PublisherProvider * @template T */ export interface PublisherProvider { byTopic(key: T[number]): EventPublisher; } /** * Admits publishing of certain topics. Allows event registration in orchestrated manner. * * @export * @interface EventSource * @template T */ export interface EventSource { topicsToPublish: T; publishers: PublisherProvider; } export type Subscriptor = (handler: (topic: TopicDescriptor, data: EventData) => void) => Subscription; /** * Provides subscriptor to event subscriber * * @export * @interface SubscriptionProvider * @template T */ export interface SubscriptorProvider { byTopic(key: T[number]): { subscribe: Subscriptor; }; } /** * Admits subscribing to certain topics * * @export * @interface PolicySubscriber * @template T */ export interface PolicySubscriber { id: string; topicsToSubscribe: T; subscriptors: SubscriptorProvider; } //# sourceMappingURL=orchestration.d.ts.map