@malagu/core
Version:
54 lines • 2.02 kB
TypeScript
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