diff --git a/redlock/redlock-tests.ts b/redlock/redlock-tests.ts
index 8c05f6441e..309f687fbb 100644
--- a/redlock/redlock-tests.ts
+++ b/redlock/redlock-tests.ts
@@ -1,103 +1,49 @@
///
-import Redlock = require('redlock');
+import * as Redlock from 'redlock';
+import * as Promise from 'bluebird';
+import {RedisClient} from 'redis';
-import NodeifyCallback = RedlockTypes.NodeifyCallback;
-import Lock = RedlockTypes.Lock;
-import RedlockOptions = RedlockTypes.RedlockOptions;
+import Lock = Redlock.Lock;
namespace RedlockTest {
- // constructor
- {
- let redlock: Redlock;
- let client: any;
- let options: RedlockOptions;
- redlock = new Redlock([client]);
- redlock = new Redlock([client], options);
- }
+
+ let redlock: Redlock;
+ let client: RedisClient;
+ let lock: Lock;
+
+ redlock = new Redlock([client]);
+ redlock = new Redlock([client], {
+ driftFactor: 0.1,
+ retryCount: 2,
+ retryDelay: 3
+ });
+
+ redlock.acquire('resource', 30).then((lock: Lock) => {});
+ redlock.acquire('resource', 30, (err: any, lock: Lock) => {});
+ redlock.lock('resource', 30).then((lock: Lock) => {});
+ redlock.lock('resource', 30, (err: any, lock: Lock) => {});
- // acquire, lock
- {
- let redlock: Redlock;
- let resource: string;
- let ttl: number;
- let callback: NodeifyCallback;
- let result: Promise;
- result = redlock.acquire(resource, ttl);
- result = redlock.acquire(resource, ttl, callback);
- result = redlock.lock(resource, ttl);
- result = redlock.lock(resource, ttl, callback);
- }
+ // There is currently no way to test the disposer as the bluebird typings does not
+ // expose the .using method.
+ // promise.using(redlock.disposer('resource', 30), (lock: Lock) => {});
+
+ redlock.release(lock);
+ redlock.release(lock, (err: any) => {});
+ redlock.unlock(lock);
+ redlock.unlock(lock, (err: any) => {});
- // disposer
- {
- let redlock: Redlock;
- let resource: string;
- let ttl: number;
- let result: any;
- result = redlock.acquire(resource, ttl);
- }
-
- // release, unlock
- {
- let redlock: Redlock;
- let lock: Lock;
- let callback: NodeifyCallback;
- let result: Promise;
- result = redlock.release(lock);
- result = redlock.release(lock, callback);
- result = redlock.unlock(lock);
- result = redlock.unlock(lock, callback);
- }
-
- // extend
- {
- let redlock: Redlock;
- let lock: Lock;
- let ttl: number;
- let callback: NodeifyCallback;
- let result: Promise;
- result = redlock.extend(lock, ttl);
- result = redlock.extend(lock, ttl, callback);
- }
-
- // _lock
- {
- let redlock: Redlock;
- let resource: string;
- let value: string;
- let ttl: number;
- let callback: NodeifyCallback;
- let result: Promise;
- result = redlock._lock(resource, value, ttl);
- result = redlock._lock(resource, value, ttl, callback);
- }
-
- // _random
- {
- let redlock: Redlock;
- let result: string;
- result = redlock._random();
- }
+ redlock.extend(lock, 30).then((lock: Lock) => {});
+ redlock.extend(lock, 30, (err: any, lock: Lock) => {});
}
namespace LockTest {
- // unlock
- {
- let lock: Lock;
- let callback: NodeifyCallback;
- let result: Promise;
- result = lock.unlock();
- result = lock.unlock(callback);
- }
-
- // extend
- {
- let lock: Lock;
- let ttl: number;
- let callback: NodeifyCallback;
- let result: Promise;
- result = lock.extend(ttl);
- result = lock.extend(ttl, callback);
- }
+
+ let lock: Lock;
+
+ lock.unlock();
+ lock.unlock((err) => {});
+
+ lock.extend(30).then((lock: Lock) => {});
+ lock.extend(30, (err: any, lock: Lock) => {});
}
diff --git a/redlock/redlock.d.ts b/redlock/redlock.d.ts
index 6db97b9f9e..94ee8f3c7a 100644
--- a/redlock/redlock.d.ts
+++ b/redlock/redlock.d.ts
@@ -4,59 +4,61 @@
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
///
+///
-declare namespace RedlockTypes {
- interface LockError extends Error {}
- interface NodeifyCallback {
- (err: any, value?: T): void;
+declare module "redlock" {
+
+ import * as redis from 'redis';
+ import * as Promise from 'bluebird';
+
+ namespace Redlock {
+
+ interface Callback {
+ (err: any, value?: T): void;
+ }
+
+ interface Lock {
+
+ redlock: Redlock;
+ resource: string;
+ value: any;
+ expiration: number;
+
+ unlock(callback?: Callback): Promise;
+
+ extend(ttl: number, callback?: Callback): Promise;
+ }
+
+ interface Options {
+ driftFactor?: number;
+ retryCount?: number;
+ retryDelay?: number;
+ }
+
+ interface LockError extends Error {}
}
-
- interface Lock {
- redlock: Redlock;
- resource: string;
- value: any;
- expiration: number;
-
- unlock(callback?: NodeifyCallback): Promise;
-
- extend(ttl: number, callback?: NodeifyCallback): Promise;
- }
-
- interface RedlockOptions {
- driftFactor?: number;
- retryCount?: number;
- retryDelay?: number;
- }
-
+
class Redlock {
- LockError: LockError;
driftFactor: number;
retryCount: number;
retryDelay: number;
- servers: any[]; // array of redis.RedisClient
+ servers: redis.RedisClient[];
- constructor(clients: any[], options?: RedlockOptions);
+ constructor(clients: any[], options?: Redlock.Options);
- acquire(resource: string, ttl: number, callback?: NodeifyCallback): Promise;
- lock(resource: string, ttl: number, callback?: NodeifyCallback): Promise;
+ acquire(resource: string, ttl: number, callback?: Redlock.Callback): Promise;
+ lock(resource: string, ttl: number, callback?: Redlock.Callback): Promise;
- disposer(resource: string, ttl: number): any; // return bluebird.Disposer
+ disposer(resource: string, ttl: number, errorHandler?: Redlock.Callback): any; // bluebird Disposer
- release(lock: Lock, callback?: NodeifyCallback): Promise;
- unlock(lock: Lock, callback?: NodeifyCallback): Promise;
+ release(lock: Redlock.Lock, callback?: Redlock.Callback): Promise;
+ unlock(lock: Redlock.Lock, callback?: Redlock.Callback): Promise;
- extend(lock: Lock, ttl: number, callback?: NodeifyCallback): Promise;
-
- _lock(resource: string, value: string, ttl: number, callback?: NodeifyCallback): Promise;
-
- _random(): string;
+ extend(lock: Redlock.Lock, ttl: number, callback?: Redlock.Callback): Promise;
}
-}
-
-declare module "redlock" {
- import Redlock = RedlockTypes.Redlock;
+
export = Redlock;
}