export interface Constructor { new(...args: any[]): T; prototype: T; } export type PromiseOrValue = T | PromiseLike; export type Factory = (...args: any[]) => T; export type Predicate = (x: T) => boolean; export type MatchingMemberKeys = { [K in keyof T]: T[K] extends U ? K : never}[keyof T]; export type NotMatchingMemberKeys = { [K in keyof T]: T[K] extends U ? never : K}[keyof T]; export type ExtractMembers = Pick>; export type ExcludeMembers = Pick>; export interface MapOf { [key: string]: T; } export interface IDestroyable { destroy(): void; } export interface IRemovable { remove(): void; } /** * Interface for the cancellation token. Cancellation token is * a marker indicating that the cancellation was requested, it * is up to the operation to decide whether to interrupt or * to complete its execution. * * This interface defines several methods of interaction with * the cancellation i.e. either to poll its status or to react * through the callback. */ export interface ICancellation { /** * Throws an exception if the cancellation has been requested, * otherwise does nothing. */ throwIfRequested(): void; /** * Checks whether the cancellation is requested. * @returns true is the cancellation has been requested, * otherwise returns false. */ isRequested(): boolean; /** * Checks the ability of the token to be signaled. * * @returns true if the token is able to request * the cancellation, false otherwise. */ isSupported(): boolean; /** * Registers the callback to be called when the cancellation * is requested. * * @param cb The callback which receives the reason of the * cancellation. * @returns The subscription, after the operation is completed * it should unregister the callback to free resources by * calling the `destroy()` method of the subscription. */ register(cb: (e: any) => void): IDestroyable; } /** * Интерфейс поддерживающий асинхронную активацию */ export interface IActivatable { /** * @returns Boolean indicates the current state */ isActive(): boolean; /** * Starts the component activation * @param ct cancellation token for this operation */ activate(ct?: ICancellation): Promise; /** * Starts the component deactivation * @param ct cancellation token for this operation */ deactivate(ct?: ICancellation): Promise; /** * Sets the activation controller for this component * @param controller The activation controller * * Activation controller checks whether this component * can be activated and manages the active state of it. */ setActivationController(controller: IActivationController): void; /** Indicates whether this component has an activation controller */ hasActivationController(): boolean; /** * Gets the current activation controller for this component */ getActivationController(): IActivationController; } export interface IActivationController { activating(component: IActivatable, ct?: ICancellation): Promise; activated(component: IActivatable, ct?: ICancellation): Promise; deactivating(component: IActivatable, ct?: ICancellation): Promise; deactivated(component: IActivatable, ct?: ICancellation): Promise; deactivate(ct?: ICancellation): Promise; activate(component: IActivatable, ct?: ICancellation): Promise; hasActive(): boolean; getActive(): IActivatable; } export interface IAsyncComponent { getCompletion(): Promise; } export interface ICancellable { cancel(reason?: any): void; } export interface IObservable { on(next: (x: T) => void, error?: (e: any) => void, complete?: () => void): IDestroyable; next(ct?: ICancellation): Promise; } export interface IObserver { next(event: T): void; error(e: any): void; complete(): void; } export interface TextWriter { write(obj: any): void; write(format: string, ...args: any[]): void; writeLine(obj?: any): void; writeLine(format: string, ...args: any[]): void; writeValue(value: any, spec?: string): void; }