UNPKG

rsxjs

Version:

Resilience Extensions for JS.

39 lines (38 loc) 1.22 kB
/** * @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>; }