@venizia/ignis-helpers 0.0.8 → 0.0.9-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.
Files changed (78) hide show
  1. package/README.md +18 -18
  2. package/dist/modules/queue/bullmq/helper.d.ts +3 -3
  3. package/dist/modules/queue/bullmq/helper.d.ts.map +1 -1
  4. package/dist/modules/redis/base/abstract.helper.d.ts +223 -0
  5. package/dist/modules/redis/base/abstract.helper.d.ts.map +1 -0
  6. package/dist/modules/redis/base/abstract.helper.js +433 -0
  7. package/dist/modules/redis/base/abstract.helper.js.map +1 -0
  8. package/dist/modules/redis/base/index.d.ts +2 -0
  9. package/dist/modules/redis/base/index.d.ts.map +1 -0
  10. package/dist/modules/redis/base/index.js +18 -0
  11. package/dist/modules/redis/base/index.js.map +1 -0
  12. package/dist/modules/redis/cluster/cluster.helper.d.ts +11 -0
  13. package/dist/modules/redis/cluster/cluster.helper.d.ts.map +1 -0
  14. package/dist/modules/redis/{cluster.helper.js → cluster/cluster.helper.js} +3 -3
  15. package/dist/modules/redis/cluster/cluster.helper.js.map +1 -0
  16. package/dist/modules/redis/cluster/index.d.ts +2 -0
  17. package/dist/modules/redis/cluster/index.d.ts.map +1 -0
  18. package/dist/modules/redis/cluster/index.js +18 -0
  19. package/dist/modules/redis/cluster/index.js.map +1 -0
  20. package/dist/modules/redis/common/constants.d.ts +17 -0
  21. package/dist/modules/redis/common/constants.d.ts.map +1 -0
  22. package/dist/modules/redis/common/constants.js +23 -0
  23. package/dist/modules/redis/common/constants.js.map +1 -0
  24. package/dist/modules/redis/common/index.d.ts +4 -0
  25. package/dist/modules/redis/common/index.d.ts.map +1 -0
  26. package/dist/modules/redis/common/index.js +20 -0
  27. package/dist/modules/redis/common/index.js.map +1 -0
  28. package/dist/modules/redis/common/interfaces.d.ts +223 -0
  29. package/dist/modules/redis/common/interfaces.d.ts.map +1 -0
  30. package/dist/modules/redis/common/interfaces.js +3 -0
  31. package/dist/modules/redis/common/interfaces.js.map +1 -0
  32. package/dist/modules/redis/common/types.d.ts +65 -0
  33. package/dist/modules/redis/common/types.d.ts.map +1 -0
  34. package/dist/modules/redis/common/types.js.map +1 -0
  35. package/dist/modules/redis/factory.d.ts +22 -0
  36. package/dist/modules/redis/factory.d.ts.map +1 -0
  37. package/dist/modules/redis/factory.js +25 -0
  38. package/dist/modules/redis/factory.js.map +1 -0
  39. package/dist/modules/redis/index.d.ts +6 -4
  40. package/dist/modules/redis/index.d.ts.map +1 -1
  41. package/dist/modules/redis/index.js +6 -4
  42. package/dist/modules/redis/index.js.map +1 -1
  43. package/dist/modules/redis/sentinel/index.d.ts +2 -0
  44. package/dist/modules/redis/sentinel/index.d.ts.map +1 -0
  45. package/dist/modules/redis/sentinel/index.js +18 -0
  46. package/dist/modules/redis/sentinel/index.js.map +1 -0
  47. package/dist/modules/redis/sentinel/sentinel.helper.d.ts +8 -0
  48. package/dist/modules/redis/sentinel/sentinel.helper.d.ts.map +1 -0
  49. package/dist/modules/redis/sentinel/sentinel.helper.js +41 -0
  50. package/dist/modules/redis/sentinel/sentinel.helper.js.map +1 -0
  51. package/dist/modules/redis/single/index.d.ts +2 -0
  52. package/dist/modules/redis/single/index.d.ts.map +1 -0
  53. package/dist/modules/redis/single/index.js +18 -0
  54. package/dist/modules/redis/single/index.js.map +1 -0
  55. package/dist/modules/redis/single/single.helper.d.ts +8 -0
  56. package/dist/modules/redis/single/single.helper.d.ts.map +1 -0
  57. package/dist/modules/redis/single/single.helper.js +33 -0
  58. package/dist/modules/redis/single/single.helper.js.map +1 -0
  59. package/dist/modules/socket/socket-io/common/types.d.ts +2 -2
  60. package/dist/modules/socket/socket-io/common/types.d.ts.map +1 -1
  61. package/dist/modules/socket/websocket/common/types.d.ts +3 -3
  62. package/dist/modules/socket/websocket/common/types.d.ts.map +1 -1
  63. package/package.json +1 -1
  64. package/dist/modules/redis/cluster.helper.d.ts +0 -11
  65. package/dist/modules/redis/cluster.helper.d.ts.map +0 -1
  66. package/dist/modules/redis/cluster.helper.js.map +0 -1
  67. package/dist/modules/redis/default.helper.d.ts +0 -138
  68. package/dist/modules/redis/default.helper.d.ts.map +0 -1
  69. package/dist/modules/redis/default.helper.js +0 -320
  70. package/dist/modules/redis/default.helper.js.map +0 -1
  71. package/dist/modules/redis/single.helper.d.ts +0 -8
  72. package/dist/modules/redis/single.helper.d.ts.map +0 -1
  73. package/dist/modules/redis/single.helper.js +0 -41
  74. package/dist/modules/redis/single.helper.js.map +0 -1
  75. package/dist/modules/redis/types.d.ts +0 -44
  76. package/dist/modules/redis/types.d.ts.map +0 -1
  77. package/dist/modules/redis/types.js.map +0 -1
  78. /package/dist/modules/redis/{types.js → common/types.js} +0 -0
@@ -0,0 +1,433 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AbstractRedisHelper = void 0;
7
+ const base_1 = require("../../../modules/base");
8
+ const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
9
+ const node_zlib_1 = __importDefault(require("node:zlib"));
10
+ class AbstractRedisHelper extends base_1.BaseHelper {
11
+ constructor(opts) {
12
+ super({ scope: opts.scope, identifier: opts.identifier });
13
+ this.name = opts.identifier;
14
+ this.client = opts.client;
15
+ const { onInitialized, onConnected, onReady, onError } = opts;
16
+ const emitter = this.client;
17
+ emitter.on('connect', () => {
18
+ this.logger.for('connect').info('Redis CONNECTED | Name: %s', this.name);
19
+ onConnected?.({ name: this.name, helper: this });
20
+ });
21
+ emitter.on('ready', () => {
22
+ this.logger.for('ready').info('Redis READY | Name: %s', this.name);
23
+ onReady?.({ name: this.name, helper: this });
24
+ });
25
+ emitter.on('error', (error) => {
26
+ this.logger.for('error').error('Redis ERROR | Name: %s | Error: %s', this.name, error);
27
+ onError?.({ name: this.name, helper: this, error });
28
+ });
29
+ emitter.on('reconnecting', () => {
30
+ this.logger.for('reconnecting').warn('Redis client RECONNECTING | Name: %s', this.name);
31
+ });
32
+ onInitialized?.({ name: this.name, helper: this });
33
+ }
34
+ static buildRetryStrategy(opts) {
35
+ const { maxRetry } = opts;
36
+ return (attemptCounter) => {
37
+ if (maxRetry > -1 && attemptCounter > maxRetry) {
38
+ return undefined;
39
+ }
40
+ return Math.max(Math.min(attemptCounter * 2000, 5000), 1000);
41
+ };
42
+ }
43
+ static buildDefaultOpts(opts) {
44
+ return {
45
+ showFriendlyErrorStack: true,
46
+ maxRetriesPerRequest: null,
47
+ retryStrategy: AbstractRedisHelper.buildRetryStrategy({ maxRetry: opts.maxRetry }),
48
+ };
49
+ }
50
+ // ---------------------------------------------------------------------------
51
+ // Connection lifecycle (IRedisConnection)
52
+ // ---------------------------------------------------------------------------
53
+ getClient() {
54
+ return this.client;
55
+ }
56
+ duplicateClient() {
57
+ return this.client.duplicate();
58
+ }
59
+ ping() {
60
+ return this.client.ping();
61
+ }
62
+ connect() {
63
+ return new Promise((resolve, reject) => {
64
+ const invalidStatuses = [
65
+ 'ready',
66
+ 'reconnecting',
67
+ 'connecting',
68
+ ];
69
+ if (invalidStatuses.includes(this.client.status)) {
70
+ this.logger
71
+ .for(this.connect.name)
72
+ .info('status: %s | Invalid redis status to invoke connect', this.client.status);
73
+ resolve(false);
74
+ return;
75
+ }
76
+ this.client
77
+ .connect()
78
+ .then(() => {
79
+ resolve(this.client.status === 'ready');
80
+ })
81
+ .catch(reject);
82
+ });
83
+ }
84
+ disconnect() {
85
+ return new Promise((resolve, reject) => {
86
+ const invalidStatuses = ['end', 'close'];
87
+ if (invalidStatuses.includes(this.client.status)) {
88
+ this.logger
89
+ .for(this.disconnect.name)
90
+ .info('status: %s | Invalid redis status to invoke disconnect', this.client.status);
91
+ resolve(false);
92
+ return;
93
+ }
94
+ this.client
95
+ .quit()
96
+ .then(rs => {
97
+ resolve(rs === 'OK');
98
+ })
99
+ .catch(reject);
100
+ });
101
+ }
102
+ // ---------------------------------------------------------------------------
103
+ // Key lifecycle + counters (IRedisKey)
104
+ // ---------------------------------------------------------------------------
105
+ exists(opts) {
106
+ const { keys } = opts;
107
+ if (!keys.length) {
108
+ return Promise.resolve(0);
109
+ }
110
+ return this.client.exists(...keys);
111
+ }
112
+ async expire(opts) {
113
+ const { key, seconds } = opts;
114
+ const result = await this.client.expire(key, seconds);
115
+ return result === 1;
116
+ }
117
+ async expireAt(opts) {
118
+ const { key, atEpochSeconds } = opts;
119
+ const result = await this.client.expireat(key, atEpochSeconds);
120
+ return result === 1;
121
+ }
122
+ ttl(opts) {
123
+ const { key } = opts;
124
+ return this.client.ttl(key);
125
+ }
126
+ async persist(opts) {
127
+ const { key } = opts;
128
+ const result = await this.client.persist(key);
129
+ return result === 1;
130
+ }
131
+ incr(opts) {
132
+ const { key } = opts;
133
+ return this.client.incr(key);
134
+ }
135
+ decr(opts) {
136
+ const { key } = opts;
137
+ return this.client.decr(key);
138
+ }
139
+ incrBy(opts) {
140
+ const { key, value } = opts;
141
+ return this.client.incrby(key, value);
142
+ }
143
+ decrBy(opts) {
144
+ const { key, value } = opts;
145
+ return this.client.decrby(key, value);
146
+ }
147
+ // ---------------------------------------------------------------------------
148
+ // Key-value (IRedisKeyValue)
149
+ // ---------------------------------------------------------------------------
150
+ async set(opts) {
151
+ const { key, value, options } = opts;
152
+ const serialized = JSON.stringify(value);
153
+ if (typeof options?.expiresIn === 'number' && options.expiresIn > 0) {
154
+ await this.client.set(key, serialized, 'PX', options.expiresIn);
155
+ }
156
+ else {
157
+ await this.client.set(key, serialized);
158
+ }
159
+ if (!options?.log) {
160
+ return;
161
+ }
162
+ this.logger.for(this.set.name).info('Set key: %s | value: %s', key, serialized);
163
+ }
164
+ async get(opts) {
165
+ const { key, transform } = opts;
166
+ const value = await this.client.get(key);
167
+ if (!value) {
168
+ return null;
169
+ }
170
+ return transform ? transform(value) : value;
171
+ }
172
+ del(opts) {
173
+ const { keys } = opts;
174
+ if (!keys.length) {
175
+ return Promise.resolve(0);
176
+ }
177
+ return this.client.del(keys);
178
+ }
179
+ getString(opts) {
180
+ return this.get(opts);
181
+ }
182
+ getStrings(opts) {
183
+ return this.mGet(opts);
184
+ }
185
+ getObject(opts) {
186
+ return this.get({
187
+ ...opts,
188
+ transform: (el) => JSON.parse(el),
189
+ });
190
+ }
191
+ getObjects(opts) {
192
+ return this.mGet({
193
+ ...opts,
194
+ transform: (el) => JSON.parse(el),
195
+ });
196
+ }
197
+ async mSet(opts) {
198
+ const { payload, options } = opts;
199
+ if (!payload.length) {
200
+ return;
201
+ }
202
+ const serialized = payload.reduce((current, el) => {
203
+ const { key, value } = el;
204
+ return { ...current, [key]: JSON.stringify(value) };
205
+ }, {});
206
+ await this.client.mset(serialized);
207
+ if (!options?.log) {
208
+ return;
209
+ }
210
+ this.logger.for(this.mSet.name).info('Payload: %j', serialized);
211
+ }
212
+ async mGet(opts) {
213
+ const { keys, transform } = opts;
214
+ if (!keys.length) {
215
+ return [];
216
+ }
217
+ const values = await this.client.mget(keys);
218
+ if (!values?.length) {
219
+ return [];
220
+ }
221
+ return values.map(el => (el ? (transform ? transform(el) : el) : null));
222
+ }
223
+ keys(opts) {
224
+ const { key } = opts;
225
+ return this.client.keys(key);
226
+ }
227
+ // ---------------------------------------------------------------------------
228
+ // Hash operations (IRedisHash)
229
+ // ---------------------------------------------------------------------------
230
+ async hSet(opts) {
231
+ const { key, value, options } = opts;
232
+ const result = await this.client.hset(key, value);
233
+ if (!options?.log) {
234
+ return result;
235
+ }
236
+ this.logger.for(this.hSet.name).info('Result: %j', result);
237
+ return result;
238
+ }
239
+ async hGetAll(opts) {
240
+ const { key, transform } = opts;
241
+ const value = await this.client.hgetall(key);
242
+ if (!transform || !value) {
243
+ return value;
244
+ }
245
+ return transform(value);
246
+ }
247
+ hGet(opts) {
248
+ const { key, field } = opts;
249
+ return this.client.hget(key, field);
250
+ }
251
+ hDel(opts) {
252
+ const { key, fields } = opts;
253
+ if (!fields.length) {
254
+ return Promise.resolve(0);
255
+ }
256
+ return this.client.hdel(key, ...fields);
257
+ }
258
+ async hExists(opts) {
259
+ const { key, field } = opts;
260
+ const result = await this.client.hexists(key, field);
261
+ return result === 1;
262
+ }
263
+ hKeys(opts) {
264
+ const { key } = opts;
265
+ return this.client.hkeys(key);
266
+ }
267
+ hVals(opts) {
268
+ const { key } = opts;
269
+ return this.client.hvals(key);
270
+ }
271
+ hIncrBy(opts) {
272
+ const { key, field, value } = opts;
273
+ return this.client.hincrby(key, field, value);
274
+ }
275
+ hLen(opts) {
276
+ const { key } = opts;
277
+ return this.client.hlen(key);
278
+ }
279
+ // ---------------------------------------------------------------------------
280
+ // Set operations (IRedisSet)
281
+ // ---------------------------------------------------------------------------
282
+ sAdd(opts) {
283
+ const { key, members } = opts;
284
+ if (!members.length) {
285
+ return Promise.resolve(0);
286
+ }
287
+ return this.client.sadd(key, ...members);
288
+ }
289
+ sRem(opts) {
290
+ const { key, members } = opts;
291
+ if (!members.length) {
292
+ return Promise.resolve(0);
293
+ }
294
+ return this.client.srem(key, ...members);
295
+ }
296
+ sMembers(opts) {
297
+ const { key } = opts;
298
+ return this.client.smembers(key);
299
+ }
300
+ async sIsMember(opts) {
301
+ const { key, member } = opts;
302
+ const result = await this.client.sismember(key, member);
303
+ return result === 1;
304
+ }
305
+ sCard(opts) {
306
+ const { key } = opts;
307
+ return this.client.scard(key);
308
+ }
309
+ // ---------------------------------------------------------------------------
310
+ // List operations (IRedisList)
311
+ // ---------------------------------------------------------------------------
312
+ lPush(opts) {
313
+ const { key, values } = opts;
314
+ if (!values.length) {
315
+ return Promise.resolve(0);
316
+ }
317
+ return this.client.lpush(key, ...values);
318
+ }
319
+ rPush(opts) {
320
+ const { key, values } = opts;
321
+ if (!values.length) {
322
+ return Promise.resolve(0);
323
+ }
324
+ return this.client.rpush(key, ...values);
325
+ }
326
+ lPop(opts) {
327
+ const { key } = opts;
328
+ return this.client.lpop(key);
329
+ }
330
+ rPop(opts) {
331
+ const { key } = opts;
332
+ return this.client.rpop(key);
333
+ }
334
+ lRange(opts) {
335
+ const { key, start, stop } = opts;
336
+ return this.client.lrange(key, start, stop);
337
+ }
338
+ lLen(opts) {
339
+ const { key } = opts;
340
+ return this.client.llen(key);
341
+ }
342
+ // ---------------------------------------------------------------------------
343
+ // RedisJSON (IRedisJson)
344
+ // ---------------------------------------------------------------------------
345
+ jSet(opts) {
346
+ const { key, path, value } = opts;
347
+ return this.execute('JSON.SET', [key, path, JSON.stringify(value)]);
348
+ }
349
+ jGet(opts) {
350
+ const { key, path = '$' } = opts;
351
+ return this.execute('JSON.GET', [key, path]);
352
+ }
353
+ jDelete(opts) {
354
+ const { key, path = '$' } = opts;
355
+ return this.execute('JSON.DEL', [key, path]);
356
+ }
357
+ jNumberIncreaseBy(opts) {
358
+ const { key, path, value } = opts;
359
+ return this.execute('JSON.NUMINCRBY', [key, path, value]);
360
+ }
361
+ jStringAppend(opts) {
362
+ const { key, path, value } = opts;
363
+ return this.execute('JSON.STRAPPEND', [key, path, value]);
364
+ }
365
+ jPush(opts) {
366
+ const { key, path, value } = opts;
367
+ return this.execute('JSON.ARRAPPEND', [key, path, JSON.stringify(value)]);
368
+ }
369
+ jPop(opts) {
370
+ const { key, path } = opts;
371
+ return this.execute('JSON.ARRPOP', [key, path]);
372
+ }
373
+ // ---------------------------------------------------------------------------
374
+ // Raw command (IRedisCommand)
375
+ // ---------------------------------------------------------------------------
376
+ execute(command, parameters) {
377
+ if (!parameters?.length) {
378
+ return this.client.call(command);
379
+ }
380
+ return this.client.call(command, parameters);
381
+ }
382
+ // ---------------------------------------------------------------------------
383
+ // Pub/Sub (IRedisPubSub)
384
+ // ---------------------------------------------------------------------------
385
+ async publish(opts) {
386
+ const logger = this.logger.for(this.publish.name);
387
+ const { topics, payload, useCompress = false } = opts;
388
+ const validTopics = topics?.filter(topic => !(0, isEmpty_1.default)(topic));
389
+ if (!validTopics?.length) {
390
+ logger.error('No topic(s) to publish!');
391
+ return;
392
+ }
393
+ if (!payload) {
394
+ logger.error('Invalid payload to publish!');
395
+ return;
396
+ }
397
+ const message = Buffer.from(JSON.stringify(payload));
398
+ const packet = useCompress ? node_zlib_1.default.deflateSync(message) : message;
399
+ await Promise.all(validTopics.map(topic => this.client.publish(topic, packet)));
400
+ }
401
+ subscribe(opts) {
402
+ const logger = this.logger.for(this.subscribe.name);
403
+ const { topic } = opts;
404
+ if (!topic || (0, isEmpty_1.default)(topic)) {
405
+ logger.error('No topic to subscribe!');
406
+ return;
407
+ }
408
+ this.client.subscribe(topic, (error, count) => {
409
+ if (error) {
410
+ logger.error('Failed to subscribe to topic: %s | Error: %s', topic, error);
411
+ return;
412
+ }
413
+ logger.info('Subscribed to %s channel(s). Listening to channel: %s', count, topic);
414
+ });
415
+ }
416
+ unsubscribe(opts) {
417
+ const logger = this.logger.for(this.unsubscribe.name);
418
+ const { topic } = opts;
419
+ if (!topic || (0, isEmpty_1.default)(topic)) {
420
+ logger.error('No topic to unsubscribe!');
421
+ return;
422
+ }
423
+ this.client.unsubscribe(topic, (error, count) => {
424
+ if (error) {
425
+ logger.error('Failed to unsubscribe from topic: %s | Error: %s', topic, error);
426
+ return;
427
+ }
428
+ logger.info('Unsubscribed from %s channel(s).', count);
429
+ });
430
+ }
431
+ }
432
+ exports.AbstractRedisHelper = AbstractRedisHelper;
433
+ //# sourceMappingURL=abstract.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract.helper.js","sourceRoot":"","sources":["../../../../src/modules/redis/base/abstract.helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './abstract.helper';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/redis/base/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./abstract.helper"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/redis/base/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC"}
@@ -0,0 +1,11 @@
1
+ import { Cluster } from 'ioredis';
2
+ import { AbstractRedisHelper } from './../base';
3
+ import { IRedisClusterHelperOptions } from './../common';
4
+ export declare class RedisClusterHelper extends AbstractRedisHelper<Cluster> {
5
+ private startupNodes;
6
+ private clusterOpts?;
7
+ constructor(opts: IRedisClusterHelperOptions);
8
+ getClient(): Cluster;
9
+ duplicateClient(): Cluster;
10
+ }
11
+ //# sourceMappingURL=cluster.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster.helper.d.ts","sourceRoot":"","sources":["../../../../src/modules/redis/cluster/cluster.helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAuB,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,qBAAa,kBAAmB,SAAQ,mBAAmB,CAAC,OAAO,CAAC;IAClE,OAAO,CAAC,YAAY,CAA2D;IAC/E,OAAO,CAAC,WAAW,CAAC,CAAiB;gBAEzB,IAAI,EAAE,0BAA0B;IAkBnC,SAAS,IACM,OAAO;IAGtB,eAAe,IAAI,OAAO;CAGpC"}
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RedisClusterHelper = void 0;
4
- const utilities_1 = require("../../utilities");
4
+ const utilities_1 = require("../../../utilities");
5
5
  const ioredis_1 = require("ioredis");
6
- const default_helper_1 = require("./default.helper");
7
- class RedisClusterHelper extends default_helper_1.DefaultRedisHelper {
6
+ const base_1 = require("./../base");
7
+ class RedisClusterHelper extends base_1.AbstractRedisHelper {
8
8
  constructor(opts) {
9
9
  const startupNodes = opts.nodes.map(node => ({
10
10
  host: node.host,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster.helper.js","sourceRoot":"","sources":["../../../../src/modules/redis/cluster/cluster.helper.ts"],"names":[],"mappings":";;;AAAA,2CAAkC;AAClC,qCAAuD;AACvD,oCAAgD;AAGhD,MAAa,kBAAmB,SAAQ,0BAA4B;IAIlE,YAAY,IAAgC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAA,eAAG,EAAC,IAAI,CAAC,IAAI,CAAC;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC,CAAC;QAEJ,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,KAAK,EAAE,kBAAkB,CAAC,IAAI;YAC9B,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,MAAM,EAAE,IAAI,iBAAO,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC;SACvD,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;IACzC,CAAC;IAEQ,SAAS;QAChB,OAAO,IAAI,CAAC,MAAiB,CAAC;IAChC,CAAC;IAEQ,eAAe;QACtB,OAAO,IAAI,iBAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;CACF;AA7BD,gDA6BC"}
@@ -0,0 +1,2 @@
1
+ export * from './cluster.helper';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/redis/cluster/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./cluster.helper"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/redis/cluster/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC"}
@@ -0,0 +1,17 @@
1
+ import type { TConstValue } from '../../../common/types';
2
+ export declare class RedisModes {
3
+ static readonly SINGLE = "single";
4
+ static readonly CLUSTER = "cluster";
5
+ static readonly SENTINEL = "sentinel";
6
+ static readonly SCHEME_SET: Set<string>;
7
+ static isValid(scheme: string): scheme is TRedisMode;
8
+ }
9
+ export type TRedisMode = TConstValue<typeof RedisModes>;
10
+ export declare class RedisSentinelRoles {
11
+ static readonly MASTER = "master";
12
+ static readonly SLAVE = "slave";
13
+ static readonly ROLE_SET: Set<string>;
14
+ static isValid(role: string): role is TRedisSentinelRole;
15
+ }
16
+ export type TRedisSentinelRole = TConstValue<typeof RedisSentinelRoles>;
17
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/modules/redis/common/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,qBAAa,UAAU;IACrB,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAa;IACpC,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAc;IAEtC,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAuD;IAEjF,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,UAAU;CAGrD;AAED,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,UAAU,CAAC,CAAC;AAExD,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAY;IAClC,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW;IAEhC,MAAM,CAAC,QAAQ,CAAC,QAAQ,cAAsC;IAE9D,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,kBAAkB;CAGzD;AAED,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedisSentinelRoles = exports.RedisModes = void 0;
4
+ class RedisModes {
5
+ static { this.SINGLE = 'single'; }
6
+ static { this.CLUSTER = 'cluster'; }
7
+ static { this.SENTINEL = 'sentinel'; }
8
+ static { this.SCHEME_SET = new Set([this.SINGLE, this.CLUSTER, this.SENTINEL]); }
9
+ static isValid(scheme) {
10
+ return this.SCHEME_SET.has(scheme);
11
+ }
12
+ }
13
+ exports.RedisModes = RedisModes;
14
+ class RedisSentinelRoles {
15
+ static { this.MASTER = 'master'; }
16
+ static { this.SLAVE = 'slave'; }
17
+ static { this.ROLE_SET = new Set([this.MASTER, this.SLAVE]); }
18
+ static isValid(role) {
19
+ return this.ROLE_SET.has(role);
20
+ }
21
+ }
22
+ exports.RedisSentinelRoles = RedisSentinelRoles;
23
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/modules/redis/common/constants.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;aACL,WAAM,GAAG,QAAQ,CAAC;aAClB,YAAO,GAAG,SAAS,CAAC;aACpB,aAAQ,GAAG,UAAU,CAAC;aAEtB,eAAU,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEjF,MAAM,CAAC,OAAO,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;;AATH,gCAUC;AAID,MAAa,kBAAkB;aACb,WAAM,GAAG,QAAQ,CAAC;aAClB,UAAK,GAAG,OAAO,CAAC;aAEhB,aAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAE9D,MAAM,CAAC,OAAO,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;;AARH,gDASC"}
@@ -0,0 +1,4 @@
1
+ export * from './constants';
2
+ export * from './interfaces';
3
+ export * from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/redis/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./constants"), exports);
18
+ __exportStar(require("./interfaces"), exports);
19
+ __exportStar(require("./types"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/redis/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,+CAA6B;AAC7B,0CAAwB"}