export interface MutexInterface { acquire(priority?: number): Promise; runExclusive( callback: MutexInterface.Worker, priority?: number ): Promise; waitForUnlock(priority?: number): Promise; isLocked(): boolean; release(): void; cancel(): void; } export namespace MutexInterface { export interface Releaser { (): void; } export interface Worker { (): Promise | T; } }