rsxjs
Version:
Resilience Extensions for JS.
39 lines (38 loc) • 1.22 kB
TypeScript
/**
* @file src/types.ts
* @copyright 2018-present Karim Alibhai. All rights reserved.
*/
export declare type AsyncFunction<T> = (...args: any[]) => Promise<T>;
export declare type SyncFunction<T> = (...args: any[]) => T;
export declare type Callback = (err: Error | null, ...args: any[]) => void;
export interface LinkedNode<T> {
prev?: LinkedNode<T>;
next?: LinkedNode<T>;
value: T;
}
export interface Deferred<T> {
promise: Promise<T>;
resolve: (value: T | PromiseLike<T>) => void;
reject: (err: Error) => void;
}
export declare function defer<T>(): Deferred<T>;
/**
* Use simple empty timer to ensure that in a locked state,
* the event loop stays alive.
*/
export declare abstract class Referred {
private _ref?;
protected ref(): void;
protected unref(): void;
}
/**
* Simple abstract class that defines how a lock should work.
* Generic shape for both mutexes and semaphores.
*/
export declare type ReleaseLock = (() => void) | (() => Promise<void>);
export declare abstract class Lock extends Referred {
protected requests: (Deferred<ReleaseLock> & {
unlock: ReleaseLock;
})[];
abstract lock(failWithoutLock: boolean): Promise<ReleaseLock>;
}