@mhbdev/redis 0.2.1 → 0.2.3
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/CHANGELOG.md +12 -0
- package/dist/bullmq/adapter.d.ts +2 -0
- package/dist/bullmq/adapter.d.ts.map +1 -1
- package/dist/bullmq/adapter.js +13 -3
- package/dist/bullmq/adapter.js.map +1 -1
- package/dist/cache/cache.d.ts.map +1 -1
- package/dist/cache/cache.js +12 -2
- package/dist/cache/cache.js.map +1 -1
- package/dist/core/codec.d.ts.map +1 -1
- package/dist/core/codec.js +5 -1
- package/dist/core/codec.js.map +1 -1
- package/dist/core/executor.d.ts +1 -1
- package/dist/core/executor.d.ts.map +1 -1
- package/dist/core/executor.js +22 -3
- package/dist/core/executor.js.map +1 -1
- package/dist/core/hooks.d.ts +5 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +23 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/ioredis/executor.d.ts +2 -2
- package/dist/ioredis/executor.d.ts.map +1 -1
- package/dist/ioredis/executor.js +6 -6
- package/dist/ioredis/executor.js.map +1 -1
- package/dist/ioredis/pubsub.d.ts +1 -0
- package/dist/ioredis/pubsub.d.ts.map +1 -1
- package/dist/ioredis/pubsub.js +40 -12
- package/dist/ioredis/pubsub.js.map +1 -1
- package/dist/locks/locks.d.ts.map +1 -1
- package/dist/locks/locks.js +14 -4
- package/dist/locks/locks.js.map +1 -1
- package/dist/node/client.d.ts.map +1 -1
- package/dist/node/client.js +28 -20
- package/dist/node/client.js.map +1 -1
- package/dist/node/pool.d.ts +8 -2
- package/dist/node/pool.d.ts.map +1 -1
- package/dist/node/pool.js +53 -27
- package/dist/node/pool.js.map +1 -1
- package/dist/node/pubsub.d.ts.map +1 -1
- package/dist/node/pubsub.js +37 -5
- package/dist/node/pubsub.js.map +1 -1
- package/dist/pubsub/pubsub.d.ts.map +1 -1
- package/dist/pubsub/pubsub.js +9 -1
- package/dist/pubsub/pubsub.js.map +1 -1
- package/dist/queue/index.d.ts +1 -1
- package/dist/queue/index.d.ts.map +1 -1
- package/dist/queue/index.js.map +1 -1
- package/dist/queue/queue.d.ts +20 -0
- package/dist/queue/queue.d.ts.map +1 -1
- package/dist/queue/queue.js +216 -73
- package/dist/queue/queue.js.map +1 -1
- package/dist/rate-limit/contracts.d.ts +1 -0
- package/dist/rate-limit/contracts.d.ts.map +1 -1
- package/dist/rate-limit/contracts.js +59 -26
- package/dist/rate-limit/contracts.js.map +1 -1
- package/docs/adapters.md +3 -1
- package/docs/queues.md +16 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Correct delayed stream reply parsing and add safe metadata-only queue lifecycle hooks.
|
|
8
|
+
|
|
9
|
+
## 0.2.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Harden Redis queue processing, rate-limit behavior, request cancellation, and client adapter lifecycle handling.
|
|
14
|
+
|
|
3
15
|
## 0.2.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/bullmq/adapter.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/bullmq/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,KAAK,EACX,cAAc,EACd,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,eAAe;IAC/B,GAAG,CACF,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,QAAQ,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GACvE,OAAO,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/bullmq/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,KAAK,EACX,cAAc,EACd,QAAQ,EACR,WAAW,EACX,kBAAkB,EAClB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,eAAe;IAC/B,GAAG,CACF,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,QAAQ,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GACvE,OAAO,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAChC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAAG,CACjC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,EAChD,OAAO,CAAC,EAAE,kBAAkB,KACxB,gBAAgB,CAAC;AAEtB,qBAAa,kBAAkB,CAAC,CAAC;IAI/B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,YACkB,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,QAAQ,CAAC;QAClC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;KACpC,CAAC,EAWF;IAED,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IAEhC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAY3E;IAED,MAAM,CACL,OAAO,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EAC5C,aAAa,GAAE,kBAAuB,GACpC,mBAAmB,CAWrB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,OAAO,CAAC,SAAS;CASjB;AAED,qBAAa,mBAAoB,YAAW,WAAW;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,gBAAgB,EAAI;IAEzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;CACD;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EACzC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACpC,CAAC,GACA,kBAAkB,CAAC,CAAC,CAAC,CAEvB"}
|
package/dist/bullmq/adapter.js
CHANGED
|
@@ -9,11 +9,21 @@ export class BullMqQueueAdapter {
|
|
|
9
9
|
this.options = options;
|
|
10
10
|
this.jobName = options.jobName ?? "job";
|
|
11
11
|
this.codec = options.codec ?? jsonCodec();
|
|
12
|
+
if (!this.jobName.trim())
|
|
13
|
+
throw new RedisConfigurationError("BullMQ job name is required");
|
|
14
|
+
if (options.maxAttempts !== undefined &&
|
|
15
|
+
(!Number.isSafeInteger(options.maxAttempts) || options.maxAttempts <= 0))
|
|
16
|
+
throw new RedisConfigurationError("BullMQ max attempts must be positive");
|
|
12
17
|
}
|
|
13
18
|
codec;
|
|
14
19
|
async enqueue(data, enqueueOptions = {}) {
|
|
20
|
+
const delay = enqueueOptions.delayMs ?? 0;
|
|
21
|
+
if (!Number.isSafeInteger(delay) || delay < 0)
|
|
22
|
+
throw new RedisConfigurationError("BullMQ delay must be a non-negative integer");
|
|
23
|
+
if (enqueueOptions.jobId !== undefined && !enqueueOptions.jobId.trim())
|
|
24
|
+
throw new RedisConfigurationError("BullMQ job ID is required when provided");
|
|
15
25
|
const job = await this.queue.add(this.jobName, this.codec.encode(data), {
|
|
16
|
-
delay
|
|
26
|
+
delay,
|
|
17
27
|
jobId: enqueueOptions.jobId,
|
|
18
28
|
attempts: this.options.maxAttempts,
|
|
19
29
|
});
|
|
@@ -33,8 +43,8 @@ export class BullMqQueueAdapter {
|
|
|
33
43
|
return {
|
|
34
44
|
id: String(job.id ?? crypto.randomUUID()),
|
|
35
45
|
data: this.codec.decode(encoded),
|
|
36
|
-
attempts: 0,
|
|
37
|
-
enqueuedAt: Date.now(),
|
|
46
|
+
attempts: job.attemptsMade ?? 0,
|
|
47
|
+
enqueuedAt: job.timestamp ?? Date.now(),
|
|
38
48
|
};
|
|
39
49
|
}
|
|
40
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/bullmq/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/bullmq/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC3C,KAAK,EAAE,aAAa,CAAC;IACrB,sFAAsF;IACtF,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,qBAAa,UAAU,CAAC,CAAC;IAKZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IAErE,YAA6B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC3C,KAAK,EAAE,aAAa,CAAC;IACrB,sFAAsF;IACtF,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,qBAAa,UAAU,CAAC,CAAC;IAKZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IAErE,YAA6B,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAUzD;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAS7C;IAEK,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBhF;IAEK,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1C;IAEK,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1C;IAEK,QAAQ,CACb,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,OAAO,GAAE,eAAoB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAiBZ;IAED,OAAO,CAAC,GAAG;CASX;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAE3E;AAED,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,oBAAc,CAAC"}
|
package/dist/cache/cache.js
CHANGED
|
@@ -9,8 +9,11 @@ export class RedisCache {
|
|
|
9
9
|
this.options = options;
|
|
10
10
|
this.prefix = options.prefix ?? "mhbdev:cache";
|
|
11
11
|
this.codec = options.codec ?? jsonCodec();
|
|
12
|
-
if (!this.prefix.trim())
|
|
12
|
+
if (!this.prefix.trim() || this.prefix.includes("\n"))
|
|
13
13
|
throw new RedisConfigurationError("Cache prefix is required");
|
|
14
|
+
if (options.maxKeyLength !== undefined &&
|
|
15
|
+
(!Number.isSafeInteger(options.maxKeyLength) || options.maxKeyLength <= 0))
|
|
16
|
+
throw new RedisConfigurationError("Cache max key length must be positive");
|
|
14
17
|
}
|
|
15
18
|
async get(key) {
|
|
16
19
|
const value = await this.options.redis.execute(["GET", this.key(key)]);
|
|
@@ -26,6 +29,8 @@ export class RedisCache {
|
|
|
26
29
|
}
|
|
27
30
|
}
|
|
28
31
|
async set(key, value, options = {}) {
|
|
32
|
+
if (options.onlyIfAbsent && options.onlyIfPresent)
|
|
33
|
+
throw new RedisConfigurationError("Cache set cannot require both onlyIfAbsent and onlyIfPresent");
|
|
29
34
|
const encoded = this.codec.encode(value);
|
|
30
35
|
const command = ["SET", this.key(key), encoded];
|
|
31
36
|
if (options.ttlMs !== undefined) {
|
|
@@ -55,7 +60,12 @@ export class RedisCache {
|
|
|
55
60
|
return (await pending);
|
|
56
61
|
const operation = factory()
|
|
57
62
|
.then(async (value) => {
|
|
58
|
-
await this.set(key, value, options);
|
|
63
|
+
const stored = await this.set(key, value, options);
|
|
64
|
+
if (!stored && options.onlyIfAbsent) {
|
|
65
|
+
const winner = await this.get(key);
|
|
66
|
+
if (winner !== undefined)
|
|
67
|
+
return winner;
|
|
68
|
+
}
|
|
59
69
|
return value;
|
|
60
70
|
})
|
|
61
71
|
.finally(() => this.pending.delete(key));
|
package/dist/cache/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAiBrF,MAAM,OAAO,UAAU;IAKO,OAAO;IAJnB,MAAM,CAAS;IACf,KAAK,CAAgB;IACrB,OAAO,GAAG,IAAI,GAAG,EAAkC,CAAC;IAErE,YAA6B,OAA6B;uBAA7B,OAAO;QACnC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,SAAS,EAAK,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/core/codec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/core/codec.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU,CAAC,CAAC;IAC5B,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;CACzB;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,OAAK,UAAU,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/core/codec.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU,CAAC,CAAC;IAC5B,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,CAAC;CACzB;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,OAAK,UAAU,CAAC,CAAC,CAmB1C,CAAC;AAEH,eAAO,MAAM,WAAW,EAAE,UAAU,CAAC,MAAM,CAG1C,CAAC"}
|
package/dist/core/codec.js
CHANGED
|
@@ -2,7 +2,11 @@ import { RedisSerializationError } from "./errors.js";
|
|
|
2
2
|
export const jsonCodec = () => ({
|
|
3
3
|
encode(value) {
|
|
4
4
|
try {
|
|
5
|
-
|
|
5
|
+
const encoded = JSON.stringify(value);
|
|
6
|
+
if (encoded === undefined) {
|
|
7
|
+
throw new TypeError("Value is not JSON-serializable");
|
|
8
|
+
}
|
|
9
|
+
return encoded;
|
|
6
10
|
}
|
|
7
11
|
catch (error) {
|
|
8
12
|
throw new RedisSerializationError("Unable to encode Redis value", error);
|
package/dist/core/codec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/core/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAOtD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAqB,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/core/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAOtD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAqB,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,OAAO,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,uBAAuB,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC;IACF,CAAC;IACD,MAAM,CAAC,KAAK;QACX,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,uBAAuB,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC;IACF,CAAC;CACD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAuB;IAC9C,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;IACxB,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;CACxB,CAAC"}
|
package/dist/core/executor.d.ts
CHANGED
|
@@ -24,5 +24,5 @@ export type RedisHooks = Readonly<{
|
|
|
24
24
|
}>;
|
|
25
25
|
export type RedisConnectionState = "idle" | "connecting" | "ready" | "closed" | "error";
|
|
26
26
|
export declare function assertPositiveInteger(value: number, name: string): void;
|
|
27
|
-
export declare function withTimeout<T>(operation: (signal: AbortSignal) => Promise<T>, timeoutMs: number, message?: string): Promise<T>;
|
|
27
|
+
export declare function withTimeout<T>(operation: (signal: AbortSignal) => Promise<T>, timeoutMs: number, message?: string, externalSignal?: AbortSignal): Promise<T>;
|
|
28
28
|
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/core/executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/core/executor.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,YAAY,GAAG,SAAS,MAAM,EAAE,CAAC;AAC7C,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AACrE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACzC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,WAAW,aAAa;IAC7B,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACvF,IAAI,CAAC,CAAC,GAAG,OAAO,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAAC;CACd;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACrD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;CACtD,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAIvE;AAED,wBAAsB,WAAW,CAAC,CAAC,EAClC,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9C,SAAS,EAAE,MAAM,EACjB,OAAO,SAA8B,EACrC,cAAc,CAAC,EAAE,WAAW,GAC1B,OAAO,CAAC,CAAC,CAAC,CAmCZ"}
|
package/dist/core/executor.js
CHANGED
|
@@ -1,16 +1,33 @@
|
|
|
1
|
-
import { RedisConfigurationError, RedisTimeoutError } from "./errors.js";
|
|
1
|
+
import { RedisConfigurationError, RedisRequestAbortedError, RedisTimeoutError, } from "./errors.js";
|
|
2
2
|
export function assertPositiveInteger(value, name) {
|
|
3
3
|
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
4
4
|
throw new RedisConfigurationError(`${name} must be a positive integer`);
|
|
5
5
|
}
|
|
6
6
|
}
|
|
7
|
-
export async function withTimeout(operation, timeoutMs, message = "Redis operation timed out") {
|
|
7
|
+
export async function withTimeout(operation, timeoutMs, message = "Redis operation timed out", externalSignal) {
|
|
8
8
|
assertPositiveInteger(timeoutMs, "Redis timeout");
|
|
9
|
+
if (externalSignal?.aborted)
|
|
10
|
+
throw new RedisRequestAbortedError(externalSignal.reason);
|
|
9
11
|
const controller = new AbortController();
|
|
12
|
+
const signal = externalSignal
|
|
13
|
+
? AbortSignal.any([controller.signal, externalSignal])
|
|
14
|
+
: controller.signal;
|
|
10
15
|
let timer;
|
|
16
|
+
let abortHandler;
|
|
11
17
|
try {
|
|
12
18
|
return await Promise.race([
|
|
13
|
-
operation(
|
|
19
|
+
operation(signal),
|
|
20
|
+
...(externalSignal
|
|
21
|
+
? [
|
|
22
|
+
new Promise((_, reject) => {
|
|
23
|
+
abortHandler = () => {
|
|
24
|
+
controller.abort(externalSignal.reason);
|
|
25
|
+
reject(new RedisRequestAbortedError(externalSignal.reason));
|
|
26
|
+
};
|
|
27
|
+
externalSignal.addEventListener("abort", abortHandler, { once: true });
|
|
28
|
+
}),
|
|
29
|
+
]
|
|
30
|
+
: []),
|
|
14
31
|
new Promise((_, reject) => {
|
|
15
32
|
timer = setTimeout(() => {
|
|
16
33
|
controller.abort();
|
|
@@ -22,6 +39,8 @@ export async function withTimeout(operation, timeoutMs, message = "Redis operati
|
|
|
22
39
|
finally {
|
|
23
40
|
if (timer)
|
|
24
41
|
clearTimeout(timer);
|
|
42
|
+
if (externalSignal && abortHandler)
|
|
43
|
+
externalSignal.removeEventListener("abort", abortHandler);
|
|
25
44
|
}
|
|
26
45
|
}
|
|
27
46
|
//# sourceMappingURL=executor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/core/executor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/core/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GACjB,MAAM,aAAa,CAAC;AAkCrB,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,IAAY;IAChE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,uBAAuB,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IACzE,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,SAA8C,EAC9C,SAAiB,EACjB,OAAO,GAAG,2BAA2B,EACrC,cAA4B;IAE5B,qBAAqB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAClD,IAAI,cAAc,EAAE,OAAO;QAAE,MAAM,IAAI,wBAAwB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACvF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,cAAc;QAC5B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACtD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;IACrB,IAAI,KAAgD,CAAC;IACrD,IAAI,YAAsC,CAAC;IAC3C,IAAI,CAAC;QACJ,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACzB,SAAS,CAAC,MAAM,CAAC;YACjB,GAAG,CAAC,cAAc;gBACjB,CAAC,CAAC;oBACA,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;wBAC5B,YAAY,GAAG,GAAG,EAAE;4BACnB,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;4BACxC,MAAM,CAAC,IAAI,wBAAwB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC7D,CAAC,CAAC;wBACF,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;oBACxE,CAAC,CAAC;iBACF;gBACF,CAAC,CAAC,EAAE,CAAC;YACN,IAAI,OAAO,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC5B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBACvB,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;gBACxC,CAAC,EAAE,SAAS,CAAC,CAAC;YACf,CAAC,CAAC;SACF,CAAC,CAAC;IACJ,CAAC;YAAS,CAAC;QACV,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,cAAc,IAAI,YAAY;YACjC,cAAc,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC5D,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type RedisErrorHook = (error: Error) => void;
|
|
2
|
+
export declare function notifyHook<Arguments extends readonly unknown[]>(hook: ((...args: Arguments) => void) | undefined, onError: RedisErrorHook | undefined, ...args: Arguments): void;
|
|
3
|
+
/** Error observers are isolated so monitoring code cannot interrupt Redis work. */
|
|
4
|
+
export declare function notifyError(hook: RedisErrorHook | undefined, error: unknown): void;
|
|
5
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAEpD,wBAAgB,UAAU,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,EAC9D,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,EAChD,OAAO,EAAE,cAAc,GAAG,SAAS,EACnC,GAAG,IAAI,EAAE,SAAS,GAChB,IAAI,CAON;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAOlF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { asError } from "./errors.js";
|
|
2
|
+
export function notifyHook(hook, onError, ...args) {
|
|
3
|
+
if (!hook)
|
|
4
|
+
return;
|
|
5
|
+
try {
|
|
6
|
+
hook(...args);
|
|
7
|
+
}
|
|
8
|
+
catch (error) {
|
|
9
|
+
notifyError(onError, error);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/** Error observers are isolated so monitoring code cannot interrupt Redis work. */
|
|
13
|
+
export function notifyError(hook, error) {
|
|
14
|
+
if (!hook)
|
|
15
|
+
return;
|
|
16
|
+
try {
|
|
17
|
+
hook(asError(error));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// Error hooks are terminal observers and must not create unhandled failures.
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/core/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAItC,MAAM,UAAU,UAAU,CACzB,IAAgD,EAChD,OAAmC,EACnC,GAAG,IAAe;IAElB,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC;QACJ,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;AACF,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,WAAW,CAAC,IAAgC,EAAE,KAAc;IAC3E,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,IAAI,CAAC;QACJ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACR,6EAA6E;IAC9E,CAAC;AACF,CAAC"}
|
|
@@ -20,8 +20,8 @@ export declare class IoredisExecutor implements RedisConnection {
|
|
|
20
20
|
constructor(client: IoredisClientLike, options?: IoredisExecutorOptions);
|
|
21
21
|
get isReady(): boolean;
|
|
22
22
|
connect(): Promise<void>;
|
|
23
|
-
execute<T = unknown>(command: RedisCommand,
|
|
24
|
-
eval<T = unknown>(script: string, options: RedisScriptOptions,
|
|
23
|
+
execute<T = unknown>(command: RedisCommand, options?: RedisCommandOptions): Promise<T>;
|
|
24
|
+
eval<T = unknown>(script: string, options: RedisScriptOptions, request?: RedisCommandOptions): Promise<T>;
|
|
25
25
|
ping(): Promise<void>;
|
|
26
26
|
close(): Promise<void>;
|
|
27
27
|
private run;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/ioredis/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,UAAU,EAEV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACX,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,UAAU,CAAC,IAAI,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,GAAG,SAAS,CAAC;CAC5D,CAAC,CAAC;AAEH,qBAAa,eAAgB,YAAW,eAAe;IAIrD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,YACkB,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,sBAA2B,EAGrD;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAI7B;IAEK,OAAO,CAAC,CAAC,GAAG,OAAO,EACxB,OAAO,EAAE,YAAY,EACrB,
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/ioredis/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,UAAU,EAEV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACX,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,iBAAiB;IACjC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtF,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,UAAU,CAAC,IAAI,IAAI,CAAC;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gFAAgF;IAChF,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,UAAU,GAAG,SAAS,CAAC;CAC5D,CAAC,CAAC;AAEH,qBAAa,eAAgB,YAAW,eAAe;IAIrD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,YACkB,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,sBAA2B,EAGrD;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAI7B;IAEK,OAAO,CAAC,CAAC,GAAG,OAAO,EACxB,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAKZ;IAEK,IAAI,CAAC,CAAC,GAAG,OAAO,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAWZ;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;YAEa,GAAG;CAejB;AAED,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,iBAAiB,EACzB,OAAO,CAAC,EAAE,sBAAsB,GAC9B,eAAe,CAEjB"}
|
package/dist/ioredis/executor.js
CHANGED
|
@@ -17,11 +17,11 @@ export class IoredisExecutor {
|
|
|
17
17
|
throw new RedisClientStateError("The ioredis client has ended");
|
|
18
18
|
await this.run(() => this.client.ping());
|
|
19
19
|
}
|
|
20
|
-
async execute(command,
|
|
21
|
-
return this.run(() => this.client.call(command[0] ?? "", ...command.slice(1)));
|
|
20
|
+
async execute(command, options) {
|
|
21
|
+
return this.run(() => this.client.call(command[0] ?? "", ...command.slice(1)), options?.signal);
|
|
22
22
|
}
|
|
23
|
-
async eval(script, options,
|
|
24
|
-
return this.run(() => this.client.eval(script, options.keys?.length ?? 0, ...(options.keys ?? []), ...(options.arguments ?? [])));
|
|
23
|
+
async eval(script, options, request) {
|
|
24
|
+
return this.run(() => this.client.eval(script, options.keys?.length ?? 0, ...(options.keys ?? []), ...(options.arguments ?? [])), request?.signal);
|
|
25
25
|
}
|
|
26
26
|
async ping() {
|
|
27
27
|
await this.run(() => this.client.ping());
|
|
@@ -32,9 +32,9 @@ export class IoredisExecutor {
|
|
|
32
32
|
else
|
|
33
33
|
this.client.disconnect?.();
|
|
34
34
|
}
|
|
35
|
-
async run(operation) {
|
|
35
|
+
async run(operation, signal) {
|
|
36
36
|
try {
|
|
37
|
-
return await withTimeout(operation, this.commandTimeoutMs);
|
|
37
|
+
return await withTimeout(() => operation(), this.commandTimeoutMs, "Redis command timed out", signal);
|
|
38
38
|
}
|
|
39
39
|
catch (error) {
|
|
40
40
|
const normalized = this.options.normalizeError?.(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/ioredis/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,qBAAqB,EACrB,UAAU,EACV,qBAAqB,GACrB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAiBlD,MAAM,OAAO,eAAe;IAIT,MAAM;IACN,OAAO;IAJR,gBAAgB,CAAS;IAE1C,YACkB,MAAyB,EACzB,OAAO,GAA2B,EAAE;sBADpC,MAAM;uBACN,OAAO;QAExB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK;YAChD,MAAM,IAAI,qBAAqB,CAAC,8BAA8B,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,OAAO,CACZ,OAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/ioredis/executor.ts"],"names":[],"mappings":"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"}
|
package/dist/ioredis/pubsub.d.ts
CHANGED
|
@@ -12,5 +12,6 @@ export interface IoredisPubSubClientLike {
|
|
|
12
12
|
export declare function createIoredisPubSubTransport(options: Readonly<{
|
|
13
13
|
publisher: IoredisPubSubClientLike;
|
|
14
14
|
subscriber?: IoredisPubSubClientLike;
|
|
15
|
+
onError?: (error: Error) => void;
|
|
15
16
|
}>): RedisSubscriptionTransport;
|
|
16
17
|
//# sourceMappingURL=pubsub.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../../src/ioredis/pubsub.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../../src/ioredis/pubsub.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAEzE,MAAM,WAAW,uBAAuB;IACvC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IACjF,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IACnF,SAAS,CAAC,IAAI,uBAAuB,CAAC;IACtC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,UAAU,CAAC,IAAI,IAAI,CAAC;CACpB;AAED,wBAAgB,4BAA4B,CAC3C,OAAO,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,uBAAuB,CAAC;IACnC,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC,CAAC,GACA,0BAA0B,CAiE5B"}
|
package/dist/ioredis/pubsub.js
CHANGED
|
@@ -1,17 +1,36 @@
|
|
|
1
|
-
import { RedisConfigurationError } from "../core/errors.js";
|
|
1
|
+
import { RedisClientStateError, RedisConfigurationError } from "../core/errors.js";
|
|
2
|
+
import { notifyError } from "../core/hooks.js";
|
|
2
3
|
export function createIoredisPubSubTransport(options) {
|
|
3
4
|
const subscriber = options.subscriber ?? options.publisher.duplicate?.();
|
|
5
|
+
const ownsSubscriber = options.subscriber === undefined;
|
|
4
6
|
if (!subscriber)
|
|
5
7
|
throw new RedisConfigurationError("An ioredis subscriber or duplicate() method is required");
|
|
6
8
|
const listeners = new Map();
|
|
9
|
+
let closed = false;
|
|
7
10
|
const onMessage = (channel, message) => {
|
|
8
|
-
for (const listener of listeners.get(channel) ?? [])
|
|
9
|
-
|
|
11
|
+
for (const listener of listeners.get(channel) ?? []) {
|
|
12
|
+
try {
|
|
13
|
+
void Promise.resolve(listener(message)).catch((error) => notifyError(options.onError, error));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
notifyError(options.onError, error);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
10
19
|
};
|
|
11
20
|
subscriber.on("message", onMessage);
|
|
12
21
|
return {
|
|
13
|
-
publish
|
|
22
|
+
async publish(channel, message) {
|
|
23
|
+
if (closed)
|
|
24
|
+
throw new RedisClientStateError("The pub/sub transport has been closed");
|
|
25
|
+
if (!channel.trim())
|
|
26
|
+
throw new RedisConfigurationError("Pub/sub channel is required");
|
|
27
|
+
return options.publisher.publish(channel, message);
|
|
28
|
+
},
|
|
14
29
|
async subscribe(channel, handler) {
|
|
30
|
+
if (closed)
|
|
31
|
+
throw new RedisClientStateError("The pub/sub transport has been closed");
|
|
32
|
+
if (!channel.trim())
|
|
33
|
+
throw new RedisConfigurationError("Pub/sub channel is required");
|
|
15
34
|
let channelListeners = listeners.get(channel);
|
|
16
35
|
if (!channelListeners) {
|
|
17
36
|
channelListeners = new Set();
|
|
@@ -28,14 +47,23 @@ export function createIoredisPubSubTransport(options) {
|
|
|
28
47
|
};
|
|
29
48
|
},
|
|
30
49
|
async close() {
|
|
31
|
-
if (
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
50
|
+
if (closed)
|
|
51
|
+
return;
|
|
52
|
+
closed = true;
|
|
53
|
+
const channels = [...listeners.keys()];
|
|
54
|
+
subscriber.off?.("message", onMessage);
|
|
55
|
+
listeners.clear();
|
|
56
|
+
try {
|
|
57
|
+
await Promise.all(channels.map((channel) => subscriber.unsubscribe(channel)));
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
if (ownsSubscriber) {
|
|
61
|
+
if (subscriber.quit)
|
|
62
|
+
await subscriber.quit();
|
|
63
|
+
else
|
|
64
|
+
subscriber.disconnect?.();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
39
67
|
},
|
|
40
68
|
};
|
|
41
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/ioredis/pubsub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../src/ioredis/pubsub.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../src/locks/locks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACvC,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED,qBAAa,gBAAgB;IAIhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,YAA6B,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../src/locks/locks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACvC,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED,qBAAa,gBAAgB;IAIhB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,YAA6B,OAAO,EAAE,gBAAgB,EAOrD;IAEK,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAoB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA+CrF;IAEK,QAAQ,CAAC,CAAC,EACf,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,EAChD,KAAK,SAAoB,GACvB,OAAO,CAAC,CAAC,CAAC,CAQZ;CACD;AAKD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAE7E;AAED,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,0BAAoB,CAAC"}
|
package/dist/locks/locks.js
CHANGED
|
@@ -8,10 +8,14 @@ export class RedisLockManager {
|
|
|
8
8
|
this.options = options;
|
|
9
9
|
this.prefix = options.prefix ?? "mhbdev:lock";
|
|
10
10
|
this.defaultTtlMs = options.defaultTtlMs ?? 30_000;
|
|
11
|
+
if (!this.prefix.trim() || this.prefix.includes("\n"))
|
|
12
|
+
throw new RedisLockError("Lock prefix is invalid");
|
|
13
|
+
if (!Number.isSafeInteger(this.defaultTtlMs) || this.defaultTtlMs <= 0)
|
|
14
|
+
throw new RedisLockError("Lock TTL must be positive");
|
|
11
15
|
}
|
|
12
16
|
async acquire(name, ttlMs = this.defaultTtlMs) {
|
|
13
|
-
if (!name.trim())
|
|
14
|
-
throw new RedisLockError("Lock name is
|
|
17
|
+
if (!name.trim() || name.includes("\n") || name.length > 512)
|
|
18
|
+
throw new RedisLockError("Lock name is invalid");
|
|
15
19
|
if (!Number.isSafeInteger(ttlMs) || ttlMs <= 0)
|
|
16
20
|
throw new RedisLockError("Lock TTL must be positive");
|
|
17
21
|
const key = `${this.prefix}:${name}`;
|
|
@@ -27,11 +31,14 @@ export class RedisLockManager {
|
|
|
27
31
|
if (result !== "OK")
|
|
28
32
|
return null;
|
|
29
33
|
const createdAt = Date.now();
|
|
34
|
+
let expiresAt = createdAt + ttlMs;
|
|
30
35
|
let released = false;
|
|
31
36
|
return {
|
|
32
37
|
key,
|
|
33
38
|
token,
|
|
34
|
-
expiresAt
|
|
39
|
+
get expiresAt() {
|
|
40
|
+
return expiresAt;
|
|
41
|
+
},
|
|
35
42
|
release: async () => {
|
|
36
43
|
if (released)
|
|
37
44
|
return false;
|
|
@@ -51,7 +58,10 @@ export class RedisLockManager {
|
|
|
51
58
|
keys: [key],
|
|
52
59
|
arguments: [token, String(nextTtlMs)],
|
|
53
60
|
});
|
|
54
|
-
|
|
61
|
+
if (result !== 1)
|
|
62
|
+
return false;
|
|
63
|
+
expiresAt = Date.now() + nextTtlMs;
|
|
64
|
+
return true;
|
|
55
65
|
},
|
|
56
66
|
};
|
|
57
67
|
}
|
package/dist/locks/locks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locks.js","sourceRoot":"","sources":["../../src/locks/locks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAiBnD,MAAM,OAAO,gBAAgB;IAIC,OAAO;IAHnB,MAAM,CAAS;IACf,YAAY,CAAS;IAEtC,YAA6B,OAAyB;uBAAzB,OAAO;QACnC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"locks.js","sourceRoot":"","sources":["../../src/locks/locks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/node/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,kBAAkB,IAAI,gBAAgB,EAC3C,KAAK,eAAe,EACpB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/node/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,kBAAkB,IAAI,gBAAgB,EAC3C,KAAK,eAAe,EACpB,MAAM,OAAO,CAAC;AAUf,OAAO,EAEN,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,kBAAkB,EAEvB,MAAM,qBAAqB,CAAC;AAI7B,KAAK,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,MAAM,MAAM,eAAe,GAAG,eAAe,CAC5C,WAAW,EACX,WAAW,EACX,WAAW,EACX,CAAC,EACD,WAAW,CACX,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,qBAAqB,CAAC,CAAC;IACtE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC,CAAC;AAEH,qBAAa,WAAY,YAAW,eAAe;IAClD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAmBrB;IACH,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,MAAM,CAAS;IAEvB,YAAY,OAAO,EAAE,kBAAkB,EAwBtC;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,OAAO,CAAC,YAAY;IAoCpB,OAAO,CAAC,aAAa;IAMf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAgC7B;IAEK,OAAO,CAAC,CAAC,GAAG,OAAO,EACxB,OAAO,EAAE,YAAY,EACrB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GACpC,OAAO,CAAC,CAAC,CAAC,CAqBZ;YAEa,WAAW;IAanB,IAAI,CAAC,CAAC,GAAG,OAAO,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GACpC,OAAO,CAAC,CAAC,CAAC,CASZ;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1B;IAED,GAAG,IAAI,eAAe,CAErB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAY3B;CACD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAE1E;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,CAAC,EACtC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAC3C,OAAO,CAAC,CAAC,CAAC,CAQZ"}
|