@minimaltech/node-infra 0.5.8-17 → 0.5.8-19

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.
@@ -3,9 +3,9 @@ export * from './database';
3
3
  export * from './logger';
4
4
  export * from './network';
5
5
  export * from './queue';
6
+ export * from './redis';
6
7
  export * from './storage';
7
8
  export * from './testing';
8
9
  export * from './worker-thread';
9
10
  export * from './application-environment.helper';
10
11
  export * from './cron.helper';
11
- export * from './redis.helper';
@@ -19,10 +19,10 @@ __exportStar(require("./database"), exports);
19
19
  __exportStar(require("./logger"), exports);
20
20
  __exportStar(require("./network"), exports);
21
21
  __exportStar(require("./queue"), exports);
22
+ __exportStar(require("./redis"), exports);
22
23
  __exportStar(require("./storage"), exports);
23
24
  __exportStar(require("./testing"), exports);
24
25
  __exportStar(require("./worker-thread"), exports);
25
26
  __exportStar(require("./application-environment.helper"), exports);
26
27
  __exportStar(require("./cron.helper"), exports);
27
- __exportStar(require("./redis.helper"), exports);
28
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,6CAA2B;AAC3B,2CAAyB;AACzB,4CAA0B;AAC1B,0CAAwB;AACxB,4CAA0B;AAC1B,4CAA0B;AAC1B,kDAAgC;AAEhC,mEAAiD;AACjD,gDAA8B;AAC9B,iDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,6CAA2B;AAC3B,2CAAyB;AACzB,4CAA0B;AAC1B,0CAAwB;AACxB,0CAAwB;AACxB,4CAA0B;AAC1B,4CAA0B;AAC1B,kDAAgC;AAEhC,mEAAiD;AACjD,gDAA8B"}
@@ -1,45 +1,6 @@
1
- import { BaseHelper } from '../base/base.helper';
2
- import { Cluster, ClusterOptions, Redis } from 'ioredis';
3
- export interface IRedisHelperProps {
4
- name: string;
5
- host: string;
6
- port: string | number;
7
- user?: string;
8
- password: string;
9
- database?: number;
10
- autoConnect?: boolean;
11
- maxRetry?: number;
12
- }
13
- export interface IRedisClusterHelperProps {
14
- name: string;
15
- nodes: Array<Pick<IRedisHelperProps, 'host' | 'port'> & {
16
- password?: string;
17
- }>;
18
- clusterOptions?: ClusterOptions;
19
- }
20
- export interface IRedisHelperCallbacks {
21
- onInitialized?: (opts: {
22
- name: string;
23
- helper: DefaultRedisHelper;
24
- }) => void;
25
- onConnected?: (opts: {
26
- name: string;
27
- helper: DefaultRedisHelper;
28
- }) => void;
29
- onReady?: (opts: {
30
- name: string;
31
- helper: DefaultRedisHelper;
32
- }) => void;
33
- onError?: (opts: {
34
- name: string;
35
- helper: DefaultRedisHelper;
36
- error: any;
37
- }) => void;
38
- }
39
- export interface IRedisHelperOptions extends IRedisHelperProps, IRedisHelperCallbacks {
40
- }
41
- export interface IRedisClusterHelperOptions extends IRedisClusterHelperProps, IRedisHelperCallbacks {
42
- }
1
+ import { BaseHelper } from '../../base/base.helper';
2
+ import { Cluster, Redis } from 'ioredis';
3
+ import { IRedisHelperCallbacks } from './types';
43
4
  export declare class DefaultRedisHelper extends BaseHelper {
44
5
  client: Redis | Cluster;
45
6
  name: string;
@@ -171,11 +132,3 @@ export declare class DefaultRedisHelper extends BaseHelper {
171
132
  topic: string;
172
133
  }): void;
173
134
  }
174
- export declare class RedisHelper extends DefaultRedisHelper {
175
- constructor(opts: IRedisHelperOptions);
176
- getClient(): Redis;
177
- }
178
- export declare class RedisClusterHelper extends DefaultRedisHelper {
179
- constructor(opts: IRedisClusterHelperOptions);
180
- getClient(): Cluster;
181
- }
@@ -12,10 +12,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.RedisClusterHelper = exports.RedisHelper = exports.DefaultRedisHelper = void 0;
16
- const base_helper_1 = require("../base/base.helper");
17
- const utilities_1 = require("../utilities");
18
- const ioredis_1 = require("ioredis");
15
+ exports.DefaultRedisHelper = void 0;
16
+ const base_helper_1 = require("../../base/base.helper");
17
+ const utilities_1 = require("../../utilities");
19
18
  const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
20
19
  const node_zlib_1 = __importDefault(require("node:zlib"));
21
20
  // -----------------------------------------------------------------------------------------------
@@ -324,49 +323,4 @@ class DefaultRedisHelper extends base_helper_1.BaseHelper {
324
323
  }
325
324
  }
326
325
  exports.DefaultRedisHelper = DefaultRedisHelper;
327
- // -----------------------------------------------------------------------------------------------
328
- class RedisHelper extends DefaultRedisHelper {
329
- constructor(opts) {
330
- const { name, host, port, password,
331
- // Optional
332
- database = 0, autoConnect = true, maxRetry = 0, } = opts;
333
- super(Object.assign(Object.assign({}, opts), { scope: RedisHelper.name, identifier: name, client: new ioredis_1.Redis({
334
- name,
335
- host,
336
- port: (0, utilities_1.int)(port),
337
- password,
338
- db: database,
339
- lazyConnect: !autoConnect,
340
- showFriendlyErrorStack: true,
341
- retryStrategy: (attemptCounter) => {
342
- if (maxRetry > -1 && attemptCounter > maxRetry) {
343
- return undefined;
344
- }
345
- const strategy = Math.max(Math.min(attemptCounter * 2000, 5000), 1000);
346
- return strategy;
347
- },
348
- maxRetriesPerRequest: null,
349
- }) }));
350
- }
351
- getClient() {
352
- return this.client;
353
- }
354
- }
355
- exports.RedisHelper = RedisHelper;
356
- // -----------------------------------------------------------------------------------------------
357
- class RedisClusterHelper extends DefaultRedisHelper {
358
- constructor(opts) {
359
- super(Object.assign(Object.assign({}, opts), { scope: RedisClusterHelper.name, identifier: opts.name, client: new ioredis_1.Cluster(opts.nodes.map(node => {
360
- return {
361
- host: node.host,
362
- port: (0, utilities_1.int)(node.port),
363
- password: node.password,
364
- };
365
- }), opts.clusterOptions) }));
366
- }
367
- getClient() {
368
- return this.client;
369
- }
370
- }
371
- exports.RedisClusterHelper = RedisClusterHelper;
372
- //# sourceMappingURL=redis.helper.js.map
326
+ //# sourceMappingURL=default.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.helper.js","sourceRoot":"","sources":["../../../src/helpers/redis/default.helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,oDAAgD;AAChD,2CAAuC;AAEvC,6DAAqC;AACrC,0DAA6B;AAG7B,kGAAkG;AAClG,MAAa,kBAAmB,SAAQ,wBAAU;IAIhD,YACE,IAA4F;QAE5F,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE1B,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAE9D,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC3E,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;YAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QAEH,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,eAAe,GAAkC;gBACrD,OAAO;gBACP,cAAc;gBACd,YAAY;aACb,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,+DAA+D,EAC/D,IAAI,CAAC,MAAM,CAAC,MAAM,CACnB,CAAC;gBAEF,OAAO,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,CAAC,MAAM;iBACR,OAAO,EAAE;iBACT,IAAI,CAAC,GAAG,EAAE;gBACT,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;YAC1C,CAAC,CAAC;iBACD,KAAK,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,UAAU;QACR,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9C,MAAM,eAAe,GAAkC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACxE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,kEAAkE,EAClE,IAAI,CAAC,MAAM,CAAC,MAAM,CACnB,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO;YACT,CAAC;YAED,IAAI,CAAC,MAAM;iBACR,IAAI,EAAE;iBACN,IAAI,CAAC,EAAE,CAAC,EAAE;gBACT,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;YACvB,CAAC,CAAC;iBACD,KAAK,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IAC9E,GAAG,CAAC,IAA6D;;YACrE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC;YAEtD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAEvC,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAA,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,GAAG,aAAa,UAAU,EAAE,CAAC,CAAC;QACnE,CAAC;KAAA;IAED,oFAAoF;IAC9E,GAAG,CAAC,IAAyD;;YACjE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;KAAA;IAED,oFAAoF;IACpF,GAAG,CAAC,IAA6B;QAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,oFAAoF;IACpF,SAAS,CAAC,IAAqB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,oFAAoF;IACpF,UAAU,CAAC,IAA6B;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,oFAAoF;IACpF,SAAS,CAAC,IAAqB;QAC7B,OAAO,IAAI,CAAC,GAAG,iCACV,IAAI,KACP,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IACjD,CAAC;IACL,CAAC;IAED,oFAAoF;IACpF,UAAU,CAAC,IAA6B;QACtC,OAAO,IAAI,CAAC,IAAI,iCACX,IAAI,KACP,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IACjD,CAAC;IACL,CAAC;IAED,oFAAoF;IAC9E,IAAI,CAAC,IAA6D;;YACtE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YAED,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;YACrC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAE9C,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAA,EAAE,CAAC;gBAClB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;YAC1C,OAAO,EAAE,CAAC;QACZ,CAAC;KAAA;IAED,oFAAoF;IACpF,IAAI,CAAC,IAA6D;QAChE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,oFAAoF;IAC9E,OAAO,CAAC,IAAwD;;YACpE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;KAAA;IAED,oFAAoF;IACpF,OAAO,CAAC,IAAwD;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,oFAAoF;IAC9E,IAAI,CAAC,IAAiF;;YAC1F,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;YAClC,MAAM,UAAU,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;gBACjD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;gBAC1B,uCAAY,OAAO,KAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAG;YACtD,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnC,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAA,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;QACrD,CAAC;KAAA;IAED,oFAAoF;IACpF,IAAI,CAAC,IAAiF;QACpF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,oFAAoF;IAC9E,IAAI,CAAC,IAAiE;;YAC1E,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAA,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;KAAA;IAED,oFAAoF;IACpF,IAAI,CAAC,IAAiE;QACpE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,oFAAoF;IAC9E,IAAI,CAAC,IAAqB;;YAC9B,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACtD,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChD,OAAO,WAAW,CAAC;QACrB,CAAC;KAAA;IAED,oFAAoF;IACpF,IAAI,CAAU,IAA6C;QACzD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,oFAAoF;IACpF,IAAI,CAAU,IAAoC;QAChD,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAI,UAAU,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,oFAAoF;IACpF,OAAO,CAAC,IAAoC;QAC1C,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAS,UAAU,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,oFAAoF;IACpF,iBAAiB,CAAC,IAAkD;QAClE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,oFAAoF;IACpF,aAAa,CAAC,IAAkD;QAC9D,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,oFAAoF;IACpF,KAAK,CAAU,IAA6C;QAC1D,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,oFAAoF;IACpF,IAAI,CAAU,IAAmC;QAC/C,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAI,aAAa,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,oFAAoF;IACpF,OAAO,CAAU,OAAe,EAAE,UAA4C;QAC5E,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAe,CAAC;QACjD,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAe,CAAC;IAC7D,CAAC;IAED,oFAAoF;IAC9E,OAAO,CAAU,IAAkE;;YACvF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;YAEtD,MAAM,WAAW,GAAG,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAA,iBAAO,EAAC,KAAK,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,CAAA,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,OAAO;YACT,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBAC1D,OAAO;YACT,CAAC;YAED,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACtB,IAAI,MAAM,CAAC;gBAEX,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,GAAG,mBAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;gBAChD,CAAC;gBAED,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC5C,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;KAAA;IAED,oFAAoF;IACpF,SAAS,CAAC,IAAuB;QAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAEvB,IAAI,CAAC,KAAK,IAAI,IAAA,iBAAO,EAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAA,oBAAQ,EAAC;oBACb,UAAU,EAAE,GAAG;oBACf,OAAO,EAAE,6CAA6C,KAAK,EAAE;iBAC9D,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,mEAAmE,EACnE,KAAK,EACL,KAAK,CACN,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA1XD,gDA0XC"}
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export * from './default.helper';
3
+ export * from './redis-cluster.helper';
4
+ export * from './redis.helper';
@@ -0,0 +1,21 @@
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("./types"), exports);
18
+ __exportStar(require("./default.helper"), exports);
19
+ __exportStar(require("./redis-cluster.helper"), exports);
20
+ __exportStar(require("./redis.helper"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/redis/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AAExB,mDAAiC;AACjC,yDAAuC;AACvC,iDAA+B"}
@@ -0,0 +1,7 @@
1
+ import { Cluster } from 'ioredis';
2
+ import { DefaultRedisHelper } from './default.helper';
3
+ import { IRedisClusterHelperOptions } from './types';
4
+ export declare class RedisClusterHelper extends DefaultRedisHelper {
5
+ constructor(opts: IRedisClusterHelperOptions);
6
+ getClient(): Cluster;
7
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedisClusterHelper = void 0;
4
+ const utilities_1 = require("../../utilities");
5
+ const ioredis_1 = require("ioredis");
6
+ const default_helper_1 = require("./default.helper");
7
+ class RedisClusterHelper extends default_helper_1.DefaultRedisHelper {
8
+ constructor(opts) {
9
+ super(Object.assign(Object.assign({}, opts), { scope: RedisClusterHelper.name, identifier: opts.name, client: new ioredis_1.Cluster(opts.nodes.map(node => {
10
+ return {
11
+ host: node.host,
12
+ port: (0, utilities_1.int)(node.port),
13
+ password: node.password,
14
+ };
15
+ }), opts.clusterOptions) }));
16
+ }
17
+ getClient() {
18
+ return this.client;
19
+ }
20
+ }
21
+ exports.RedisClusterHelper = RedisClusterHelper;
22
+ //# sourceMappingURL=redis-cluster.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-cluster.helper.js","sourceRoot":"","sources":["../../../src/helpers/redis/redis-cluster.helper.ts"],"names":[],"mappings":";;;AAAA,2CAAkC;AAClC,qCAAkC;AAClC,qDAAsD;AAGtD,MAAa,kBAAmB,SAAQ,mCAAkB;IACxD,YAAY,IAAgC;QAC1C,KAAK,iCACA,IAAI,KACP,KAAK,EAAE,kBAAkB,CAAC,IAAI,EAC9B,UAAU,EAAE,IAAI,CAAC,IAAI,EACrB,MAAM,EAAE,IAAI,iBAAO,CACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACpB,OAAO;oBACL,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAA,eAAG,EAAC,IAAI,CAAC,IAAI,CAAC;oBACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACxB,CAAC;YACJ,CAAC,CAAC,EACF,IAAI,CAAC,cAAc,CACpB,IACD,CAAC;IACL,CAAC;IAEQ,SAAS;QAChB,OAAO,IAAI,CAAC,MAAiB,CAAC;IAChC,CAAC;CACF;AAtBD,gDAsBC"}
@@ -0,0 +1,7 @@
1
+ import Redis from 'ioredis';
2
+ import { DefaultRedisHelper } from './default.helper';
3
+ import { IRedisHelperOptions } from './types';
4
+ export declare class RedisHelper extends DefaultRedisHelper {
5
+ constructor(opts: IRedisHelperOptions);
6
+ getClient(): Redis;
7
+ }
@@ -0,0 +1,38 @@
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.RedisHelper = void 0;
7
+ const parse_utility_1 = require("../../utilities/parse.utility");
8
+ const ioredis_1 = __importDefault(require("ioredis"));
9
+ const default_helper_1 = require("./default.helper");
10
+ class RedisHelper extends default_helper_1.DefaultRedisHelper {
11
+ constructor(opts) {
12
+ const { name, host, port, password,
13
+ // Optional
14
+ database = 0, autoConnect = true, maxRetry = 0, } = opts;
15
+ super(Object.assign(Object.assign({}, opts), { scope: RedisHelper.name, identifier: name, client: new ioredis_1.default({
16
+ name,
17
+ host,
18
+ port: (0, parse_utility_1.int)(port),
19
+ password,
20
+ db: database,
21
+ lazyConnect: !autoConnect,
22
+ showFriendlyErrorStack: true,
23
+ retryStrategy: (attemptCounter) => {
24
+ if (maxRetry > -1 && attemptCounter > maxRetry) {
25
+ return undefined;
26
+ }
27
+ const strategy = Math.max(Math.min(attemptCounter * 2000, 5000), 1000);
28
+ return strategy;
29
+ },
30
+ maxRetriesPerRequest: null,
31
+ }) }));
32
+ }
33
+ getClient() {
34
+ return this.client;
35
+ }
36
+ }
37
+ exports.RedisHelper = RedisHelper;
38
+ //# sourceMappingURL=redis.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.helper.js","sourceRoot":"","sources":["../../../src/helpers/redis/redis.helper.ts"],"names":[],"mappings":";;;;;;AAAA,6DAAgD;AAChD,sDAA4B;AAC5B,qDAAsD;AAGtD,MAAa,WAAY,SAAQ,mCAAkB;IACjD,YAAY,IAAyB;QACnC,MAAM,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ;QAER,WAAW;QACX,QAAQ,GAAG,CAAC,EACZ,WAAW,GAAG,IAAI,EAClB,QAAQ,GAAG,CAAC,GACb,GAAG,IAAI,CAAC;QAET,KAAK,iCACA,IAAI,KACP,KAAK,EAAE,WAAW,CAAC,IAAI,EACvB,UAAU,EAAE,IAAI,EAChB,MAAM,EAAE,IAAI,iBAAK,CAAC;gBAChB,IAAI;gBACJ,IAAI;gBACJ,IAAI,EAAE,IAAA,mBAAG,EAAC,IAAI,CAAC;gBACf,QAAQ;gBACR,EAAE,EAAE,QAAQ;gBACZ,WAAW,EAAE,CAAC,WAAW;gBACzB,sBAAsB,EAAE,IAAI;gBAC5B,aAAa,EAAE,CAAC,cAAsB,EAAE,EAAE;oBACxC,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,cAAc,GAAG,QAAQ,EAAE,CAAC;wBAC/C,OAAO,SAAS,CAAC;oBACnB,CAAC;oBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;oBACvE,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBACD,oBAAoB,EAAE,IAAI;aAC3B,CAAC,IACF,CAAC;IACL,CAAC;IAEQ,SAAS;QAChB,OAAO,IAAI,CAAC,MAAe,CAAC;IAC9B,CAAC;CACF;AA1CD,kCA0CC"}
@@ -0,0 +1,42 @@
1
+ import { BaseHelper } from '../../base/base.helper';
2
+ import { ClusterOptions } from 'ioredis';
3
+ export interface IRedisHelperProps {
4
+ name: string;
5
+ host: string;
6
+ port: string | number;
7
+ user?: string;
8
+ password: string;
9
+ database?: number;
10
+ autoConnect?: boolean;
11
+ maxRetry?: number;
12
+ }
13
+ export interface IRedisClusterHelperProps {
14
+ name: string;
15
+ nodes: Array<Pick<IRedisHelperProps, 'host' | 'port'> & {
16
+ password?: string;
17
+ }>;
18
+ clusterOptions?: ClusterOptions;
19
+ }
20
+ export interface IRedisHelperCallbacks {
21
+ onInitialized?: (opts: {
22
+ name: string;
23
+ helper: BaseHelper;
24
+ }) => void;
25
+ onConnected?: (opts: {
26
+ name: string;
27
+ helper: BaseHelper;
28
+ }) => void;
29
+ onReady?: (opts: {
30
+ name: string;
31
+ helper: BaseHelper;
32
+ }) => void;
33
+ onError?: (opts: {
34
+ name: string;
35
+ helper: BaseHelper;
36
+ error: any;
37
+ }) => void;
38
+ }
39
+ export interface IRedisHelperOptions extends IRedisHelperProps, IRedisHelperCallbacks {
40
+ }
41
+ export interface IRedisClusterHelperOptions extends IRedisClusterHelperProps, IRedisHelperCallbacks {
42
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/helpers/redis/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@minimaltech/node-infra",
3
- "version": "0.5.8-17",
4
- "description": "Minimal Technology NodeJS Infrastructure - Loopback 4 Framework",
3
+ "version": "0.5.8-19",
4
+ "description": "Minimal Technology - NodeJS Infrastructure - Loopback 4 Framework",
5
5
  "keywords": [
6
6
  "web",
7
7
  "restful",
@@ -52,13 +52,13 @@
52
52
  },
53
53
  "repository": {
54
54
  "type": "git",
55
- "url": "git+https://github.com/phatnt199/node-infra.git"
55
+ "url": "git+https://github.com/phatnt199/aether.git"
56
56
  },
57
57
  "author": "Minimal Technology <developer@miminaltek.com>",
58
58
  "bugs": {
59
- "url": "https://github.com/phatnt199/node-infra/issues"
59
+ "url": "https://github.com/phatnt199/aether/issues"
60
60
  },
61
- "homepage": "https://github.com/phatnt199/node-infra/wiki",
61
+ "homepage": "https://github.com/phatnt199/aether/wiki",
62
62
  "license": "MIT",
63
63
  "files": [
64
64
  "README.md",
@@ -115,7 +115,6 @@
115
115
  },
116
116
  "devDependencies": {
117
117
  "@loopback/build": "^12.0.4",
118
- "@loopback/testlab": "^8.0.4",
119
118
  "@minimaltech/eslint-node": "^0.2.1",
120
119
  "@types/express": "4.17.21",
121
120
  "@types/jsonwebtoken": "^9.0.10",
@@ -124,13 +123,12 @@
124
123
  "@types/multer": "^2.0.0",
125
124
  "@types/node": "^22.18.6",
126
125
  "eslint": "^9.36.0",
127
- "husky": "^9.1.7",
128
126
  "prettier": "^3.6.2",
129
127
  "source-map-support": "^0.5.21",
130
128
  "ts-node": "^10.9.2",
131
129
  "tsc-alias": "^1.8.16",
132
130
  "tsconfig-paths": "^4.2.0",
133
- "typescript": "5.8.3"
131
+ "typescript": "^5.8.3"
134
132
  },
135
133
  "scripts": {
136
134
  "build": "sh ./scripts/build.sh",
@@ -149,7 +147,7 @@
149
147
  "rebuild:preminor": "sh ./scripts/rebuild.sh preminor",
150
148
  "rebuild:prepatch": "sh ./scripts/rebuild.sh prepatch",
151
149
  "rebuild:prerelease": "sh ./scripts/rebuild.sh prerelease",
152
- "pretest:dev": "pnpm run rebuild",
153
- "test:dev": "NODE_ENV=development mocha -r dotenv-flow/config -r source-map-support/register --timeout 60000 --exit dist/__tests__/index.js"
150
+ "pretest:develop": "pnpm run rebuild",
151
+ "test:develop": "NODE_ENV=development mocha -r dotenv-flow/config -r source-map-support/register --timeout 60000 --exit dist/__tests__/index.js"
154
152
  }
155
153
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"redis.helper.js","sourceRoot":"","sources":["../../src/helpers/redis.helper.ts"],"names":[],"mappings":"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"}