UNPKG

@malagu/core

Version:
54 lines 2.02 kB
import { MaybePromise } from '../utils/prioritizeable'; import { Deferred } from '../utils/promise-util'; import { Event } from '../utils/event'; import { Emitter } from '../utils/emitter'; import { Logger } from '../logger/logger-protocol'; export declare const ApplicationLifecycle: unique symbol; export declare const Application: unique symbol; export declare const ApplicationStateService: unique symbol; export declare const ApplicationProps: unique symbol; export interface ApplicationProps extends Record<string, any> { } export interface ApplicationLifecycle<T extends Application> { initialize?(): void; onStart?(app: T): MaybePromise<void>; onStop?(app: T): void; } export interface Application { start(): Promise<void>; stop(): Promise<void>; } export declare abstract class AbstractApplication implements Application { protected readonly lifecycles: ApplicationLifecycle<Application>[]; abstract start(): Promise<void>; abstract stop(): Promise<void>; protected readonly logger: Logger; /** * Initialize and start the frontend application. */ protected doStart(): Promise<void>; /** * Stop the frontend application lifecycle. */ protected doStop(): void; } export declare type ApplicationState = 'init' | 'started' | 'ready' | 'stoped'; export interface ApplicationStateService<T extends string> { state: T; readonly onStateChanged: Event<T>; reachedState(state: T): Promise<void>; reachedAnyState(...states: T[]): Promise<void>; } export declare abstract class AbstractApplicationStateService<T extends string> implements ApplicationStateService<T> { private _state; protected deferred: { [state: string]: Deferred<void>; }; protected readonly stateChanged: Emitter<T>; get state(): T; set state(state: T); get onStateChanged(): Event<T>; reachedState(state: T): Promise<void>; reachedAnyState(...states: T[]): Promise<void>; } //# sourceMappingURL=application-protocol.d.ts.map