import { Binding, Context, ContextView } from '@loopback/context'; import { LifeCycleObserver } from './lifecycle'; /** * A group of life cycle observers */ export type LifeCycleObserverGroup = { /** * Observer group name */ group: string; /** * Bindings for observers within the group */ bindings: Readonly>[]; }; export type LifeCycleObserverOptions = { /** * Control the order of observer groups for notifications. For example, * with `['datasource', 'server']`, the observers in `datasource` group are * notified before those in `server` group during `start`. Please note that * observers are notified in the reverse order during `stop`. */ orderedGroups: string[]; /** * Override and disable lifecycle observer groups. This setting applies to * both ordered groups (i.e. those defined in `orderedGroups`) and unordered * groups. */ disabledGroups?: string[]; /** * Notify observers of the same group in parallel, default to `true` */ parallel?: boolean; }; export declare const DEFAULT_ORDERED_GROUPS: string[]; /** * A context-based registry for life cycle observers */ export declare class LifeCycleObserverRegistry implements LifeCycleObserver { protected readonly context: Context; protected readonly observersView: ContextView; protected readonly options: LifeCycleObserverOptions; constructor(context: Context, observersView: ContextView, options?: LifeCycleObserverOptions); setOrderedGroups(groups: string[]): void; /** * Get observer groups ordered by the group */ getObserverGroupsByOrder(): LifeCycleObserverGroup[]; /** * Get the group for a given life cycle observer binding * @param binding - Life cycle observer binding */ protected getObserverGroup(binding: Readonly>): string; /** * Sort the life cycle observer bindings so that we can start/stop them * in the right order. By default, we can start other observers before servers * and stop them in the reverse order * @param bindings - Life cycle observer bindings */ protected sortObserverBindingsByGroup(bindings: Readonly>[]): LifeCycleObserverGroup[]; /** * Notify an observer group of the given event * @param group - A group of bindings for life cycle observers * @param event - Event name */ protected notifyObservers(observers: LifeCycleObserver[], bindings: Readonly>[], event: keyof LifeCycleObserver): Promise; /** * Invoke an observer for the given event * @param observer - A life cycle observer * @param event - Event name */ protected invokeObserver(observer: LifeCycleObserver, event: keyof LifeCycleObserver): Promise; /** * Emit events to the observer groups * @param events - Event names * @param groups - Observer groups */ protected notifyGroups(events: (keyof LifeCycleObserver)[], groups: LifeCycleObserverGroup[], reverse?: boolean): Promise; /** * Notify all life cycle observers by group of `init` */ init(): Promise; /** * Notify all life cycle observers by group of `start` */ start(): Promise; /** * Notify all life cycle observers by group of `stop` */ stop(): Promise; }