@jsnw/nestjs-ioredis 2.1.0 → 2.3.0
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/dist/index.cjs +38 -9
- package/dist/index.d.cts +6 -1
- package/package.json +2 -1
package/dist/index.cjs
CHANGED
|
@@ -124,17 +124,17 @@ var RedisLock = class {
|
|
|
124
124
|
return this.acquireLockPromise;
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
127
|
+
* @param {number} ttlSec
|
|
128
|
+
* @return {Promise<boolean>}
|
|
129
|
+
*/
|
|
130
|
+
async renew(ttlSec) {
|
|
131
|
+
return await this.redis.renewLockAtomic(this.locksHashKey, this.name, this.value, ttlSec) === 1;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
127
134
|
* @return {Promise<void>}
|
|
128
135
|
*/
|
|
129
136
|
async release() {
|
|
130
|
-
|
|
131
|
-
if redis.call("hget", KEYS[1], ARGV[1]) == ARGV[2]
|
|
132
|
-
then
|
|
133
|
-
return redis.call("hdel", KEYS[1], ARGV[1])
|
|
134
|
-
else
|
|
135
|
-
return 0
|
|
136
|
-
end
|
|
137
|
-
`, 1, this.locksHashKey, this.name, this.value);
|
|
137
|
+
return this.redis.releaseLockAtomic(this.locksHashKey, this.name, this.value);
|
|
138
138
|
}
|
|
139
139
|
};
|
|
140
140
|
//#endregion
|
|
@@ -225,10 +225,39 @@ let RedisCoreModule = _RedisCoreModule = class RedisCoreModule {
|
|
|
225
225
|
static createRedisProvider() {
|
|
226
226
|
return {
|
|
227
227
|
provide: ioredis.default,
|
|
228
|
-
useFactory: (options) => new ioredis.default(options),
|
|
228
|
+
useFactory: (options) => _RedisCoreModule.extendRedisWithCommands(new ioredis.default(options)),
|
|
229
229
|
inject: [REDIS_OPTIONS_TOKEN]
|
|
230
230
|
};
|
|
231
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* @param {Redis} redis
|
|
234
|
+
* @private
|
|
235
|
+
*/
|
|
236
|
+
static extendRedisWithCommands(redis) {
|
|
237
|
+
redis.defineCommand("releaseLockAtomic", {
|
|
238
|
+
numberOfKeys: 1,
|
|
239
|
+
lua: dedent.default`
|
|
240
|
+
if redis.call("hget", KEYS[1], ARGV[1]) == ARGV[2]
|
|
241
|
+
then
|
|
242
|
+
return redis.call("hdel", KEYS[1], ARGV[1])
|
|
243
|
+
else
|
|
244
|
+
return 0
|
|
245
|
+
end
|
|
246
|
+
`
|
|
247
|
+
});
|
|
248
|
+
redis.defineCommand("renewLockAtomic", {
|
|
249
|
+
numberOfKeys: 1,
|
|
250
|
+
lua: dedent.default`
|
|
251
|
+
if redis.call("hget", KEYS[1], ARGV[1]) == ARGV[2]
|
|
252
|
+
then
|
|
253
|
+
redis.call("hexpire", KEYS[1], ARGV[3], "XX", "FIELDS", 1, ARGV[1])
|
|
254
|
+
return 1
|
|
255
|
+
else
|
|
256
|
+
return 0
|
|
257
|
+
end
|
|
258
|
+
`
|
|
259
|
+
});
|
|
260
|
+
}
|
|
232
261
|
};
|
|
233
262
|
RedisCoreModule = _RedisCoreModule = __decorate([(0, _nestjs_common.Global)(), (0, _nestjs_common.Module)({})], RedisCoreModule);
|
|
234
263
|
//#endregion
|
package/dist/index.d.cts
CHANGED
|
@@ -50,10 +50,15 @@ declare class RedisLock {
|
|
|
50
50
|
* @return {Promise<boolean>}
|
|
51
51
|
*/
|
|
52
52
|
acquire(ttlMs: number): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* @param {number} ttlSec
|
|
55
|
+
* @return {Promise<boolean>}
|
|
56
|
+
*/
|
|
57
|
+
renew(ttlSec: number): Promise<boolean>;
|
|
53
58
|
/**
|
|
54
59
|
* @return {Promise<void>}
|
|
55
60
|
*/
|
|
56
|
-
release(): Promise<
|
|
61
|
+
release(): Promise<number>;
|
|
57
62
|
}
|
|
58
63
|
//#endregion
|
|
59
64
|
//#region src/redis-lock.factory.d.ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsnw/nestjs-ioredis",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "NestJS module for integrating Redis",
|
|
5
5
|
"exports": {
|
|
6
6
|
"require": {
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@nestjs/common": "^11.1.27",
|
|
42
|
+
"@types/node": "^26.0.1",
|
|
42
43
|
"ioredis": "^5.11.1",
|
|
43
44
|
"tsdown": "^0.22.3",
|
|
44
45
|
"typescript": "^5.9.3"
|