export interface SemaphoreInterface { acquire( weight?: number, priority?: number ): Promise<[number, SemaphoreInterface.Releaser]>; runExclusive( callback: SemaphoreInterface.Worker, weight?: number, priority?: number ): Promise; waitForUnlock(weight?: number, priority?: number): Promise; isLocked(): boolean; getValue(): number; setValue(value: number): void; release(weight?: number): void; cancel(): void; } export namespace SemaphoreInterface { export interface Releaser { (): void; } export interface Worker { (value: number): Promise | T; } }