@anchan828/nest-redlock 0.0.3 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/redis-redlock.mock-service.d.ts +11 -0
- package/dist/redis-redlock.mock-service.js +31 -0
- package/dist/redis-redlock.module.js +10 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -108,6 +108,16 @@ export class ExampleService {
|
|
|
108
108
|
}
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
+
## Using the RedisRedlockService mock
|
|
112
|
+
|
|
113
|
+
If you do not want to use Redis in your Unit tests, define the mock class as RedisRedlockService.
|
|
114
|
+
|
|
115
|
+
```ts
|
|
116
|
+
const app = await Test.createTestingModule({
|
|
117
|
+
providers: [TestService, { provide: RedisRedlockService, useClass: MockRedisRedlockService }],
|
|
118
|
+
}).compile();
|
|
119
|
+
```
|
|
120
|
+
|
|
111
121
|
## Troubleshooting
|
|
112
122
|
|
|
113
123
|
### Nest can't resolve dependencies of the XXX. Please make sure that the "@redisRedlockService" property is available in the current context.
|
|
@@ -128,6 +138,16 @@ import Redis from "ioredis";
|
|
|
128
138
|
export class AppModule {}
|
|
129
139
|
```
|
|
130
140
|
|
|
141
|
+
#### What should I do with Unit tests, I don't want to use Redis.
|
|
142
|
+
|
|
143
|
+
Use `MockRedisRedlockService` class. Register MockRedisRedlockService with the provider as RedisRedlockService.
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
const app = await Test.createTestingModule({
|
|
147
|
+
providers: [TestService, { provide: RedisRedlockService, useClass: MockRedisRedlockService }],
|
|
148
|
+
}).compile();
|
|
149
|
+
```
|
|
150
|
+
|
|
131
151
|
## License
|
|
132
152
|
|
|
133
153
|
[MIT](LICENSE)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { RedisRedlock } from "./redis-redlock.decorator";
|
|
2
2
|
export { GenerateResourceFunc, RedisRedlockModuleOptions } from "./redis-redlock.interface";
|
|
3
|
+
export { MockRedisRedlockService } from "./redis-redlock.mock-service";
|
|
3
4
|
export { RedisRedlockModule } from "./redis-redlock.module";
|
|
4
5
|
export { RedisRedlockService } from "./redis-redlock.service";
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RedisRedlockService = exports.RedisRedlockModule = exports.RedisRedlock = void 0;
|
|
3
|
+
exports.RedisRedlockService = exports.RedisRedlockModule = exports.MockRedisRedlockService = exports.RedisRedlock = void 0;
|
|
4
4
|
var redis_redlock_decorator_1 = require("./redis-redlock.decorator");
|
|
5
5
|
Object.defineProperty(exports, "RedisRedlock", { enumerable: true, get: function () { return redis_redlock_decorator_1.RedisRedlock; } });
|
|
6
|
+
var redis_redlock_mock_service_1 = require("./redis-redlock.mock-service");
|
|
7
|
+
Object.defineProperty(exports, "MockRedisRedlockService", { enumerable: true, get: function () { return redis_redlock_mock_service_1.MockRedisRedlockService; } });
|
|
6
8
|
var redis_redlock_module_1 = require("./redis-redlock.module");
|
|
7
9
|
Object.defineProperty(exports, "RedisRedlockModule", { enumerable: true, get: function () { return redis_redlock_module_1.RedisRedlockModule; } });
|
|
8
10
|
var redis_redlock_service_1 = require("./redis-redlock.service");
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ExecutionResult, Lock, RedlockAbortSignal, Settings } from "redlock";
|
|
3
|
+
import { EventEmitter } from "stream";
|
|
4
|
+
export declare class MockRedisRedlockService extends EventEmitter {
|
|
5
|
+
quit(): Promise<void>;
|
|
6
|
+
acquire(resources: string[], duration: number, settings?: Partial<Settings> | undefined): Promise<Lock>;
|
|
7
|
+
release(lock: Lock, settings?: Partial<Settings> | undefined): Promise<ExecutionResult>;
|
|
8
|
+
extend(existing: Lock, duration: number, settings?: Partial<Settings> | undefined): Promise<Lock>;
|
|
9
|
+
using<T>(resources: string[], duration: number, settings: Partial<Settings>, routine?: ((signal: RedlockAbortSignal) => Promise<T>) | undefined): Promise<T>;
|
|
10
|
+
using<T>(resources: string[], duration: number, routine: (signal: RedlockAbortSignal) => Promise<T>): Promise<T>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MockRedisRedlockService = void 0;
|
|
4
|
+
const stream_1 = require("stream");
|
|
5
|
+
class MockRedisRedlockService extends stream_1.EventEmitter {
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
7
|
+
async quit() { }
|
|
8
|
+
async acquire(resources, duration, settings) {
|
|
9
|
+
return createLockMock();
|
|
10
|
+
}
|
|
11
|
+
async release(lock, settings) {
|
|
12
|
+
return { attempts: [] };
|
|
13
|
+
}
|
|
14
|
+
async extend(existing, duration, settings) {
|
|
15
|
+
return createLockMock();
|
|
16
|
+
}
|
|
17
|
+
async using(resources, duration, settingsOrRoutine, routine) {
|
|
18
|
+
const routineFunc = typeof settingsOrRoutine === "function" ? settingsOrRoutine : routine;
|
|
19
|
+
return await routineFunc?.({ aborted: false });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.MockRedisRedlockService = MockRedisRedlockService;
|
|
23
|
+
function createLockMock() {
|
|
24
|
+
let lock;
|
|
25
|
+
// eslint-disable-next-line prefer-const
|
|
26
|
+
lock = {
|
|
27
|
+
release: async () => ({ attempts: [] }),
|
|
28
|
+
extend: async (duration) => lock,
|
|
29
|
+
};
|
|
30
|
+
return lock;
|
|
31
|
+
}
|
|
@@ -23,7 +23,16 @@ let RedisRedlockModule = class RedisRedlockModule extends redis_redlock_module_d
|
|
|
23
23
|
}
|
|
24
24
|
async onModuleDestroy() {
|
|
25
25
|
for (const client of this.options.clients) {
|
|
26
|
-
|
|
26
|
+
switch (client.status) {
|
|
27
|
+
case "end":
|
|
28
|
+
continue;
|
|
29
|
+
case "ready":
|
|
30
|
+
await client.quit();
|
|
31
|
+
break;
|
|
32
|
+
default:
|
|
33
|
+
client.disconnect();
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
27
36
|
}
|
|
28
37
|
}
|
|
29
38
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anchan828/nest-redlock",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.6",
|
|
4
4
|
"description": "This is a [Nest](https://github.com/nestjs/nest) implementation of the redlock algorithm for distributed redis locks.",
|
|
5
5
|
"homepage": "https://github.com/anchan828/nest-redlock#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -22,6 +22,9 @@
|
|
|
22
22
|
"lint:fix": "npm run lint -- --fix",
|
|
23
23
|
"test": "jest --coverage --runInBand"
|
|
24
24
|
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"redlock": "^5.0.0-beta.2"
|
|
27
|
+
},
|
|
25
28
|
"devDependencies": {
|
|
26
29
|
"@commitlint/cli": "17.0.3",
|
|
27
30
|
"@commitlint/config-conventional": "17.0.3",
|
|
@@ -42,7 +45,6 @@
|
|
|
42
45
|
"jest": "28.1.3",
|
|
43
46
|
"lint-staged": "13.0.3",
|
|
44
47
|
"prettier": "2.7.1",
|
|
45
|
-
"redlock": "5.0.0-beta.2",
|
|
46
48
|
"reflect-metadata": "0.1.13",
|
|
47
49
|
"rxjs": "7.5.6",
|
|
48
50
|
"supertest": "6.2.4",
|