@common-stack/cache-api-server 0.4.1 → 0.4.5

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 CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [0.4.5](https://github.com/cdmbase/common-stack/compare/v0.4.4...v0.4.5) (2022-12-18)
7
+
8
+ **Note:** Version bump only for package @common-stack/cache-api-server
9
+
10
+ ## [0.4.3](https://github.com/cdmbase/common-stack/compare/v0.4.2...v0.4.3) (2022-12-13)
11
+
12
+ **Note:** Version bump only for package @common-stack/cache-api-server
13
+
6
14
  ## [0.4.1](https://github.com/cdmbase/common-stack/compare/v0.2.34...v0.4.1) (2022-12-09)
7
15
 
8
16
  **Note:** Version bump only for package @common-stack/cache-api-server
@@ -1,4 +1,3 @@
1
- import * as envalid from 'envalid';
2
1
  export interface IConfig {
3
2
  NODE_ENV: string;
4
3
  REDIS_URL: string;
@@ -8,4 +7,4 @@ export interface IConfig {
8
7
  REDIS_CLUSTER_ENABLED?: boolean;
9
8
  REDIS_CLUSTER_URL?: any;
10
9
  }
11
- export declare const config: Readonly<IConfig & envalid.CleanedEnvAccessors>;
10
+ export declare const config: Readonly<IConfig & import("envalid").CleanedEnvAccessors>;
@@ -1,9 +1,9 @@
1
- import * as IORedis from 'ioredis';
1
+ import { ClusterNode, ClusterOptions, RedisOptions } from 'ioredis';
2
2
  import { ICacheEngine } from '../interfaces';
3
3
  export declare class Redis implements ICacheEngine {
4
4
  private client;
5
5
  private getAsync;
6
- constructor(options: IORedis.RedisOptions | IORedis.ClusterOptions, isCluster?: boolean, clusterNodes?: IORedis.ClusterNode[]);
6
+ constructor(options: RedisOptions | ClusterOptions, isCluster?: boolean, clusterNodes?: ClusterNode[]);
7
7
  set(key: string, data: any): Promise<any>;
8
8
  get(key: string): Promise<any>;
9
9
  drop(key: string): Promise<boolean>;
package/lib/index.js CHANGED
@@ -11,16 +11,15 @@
11
11
 
12
12
  Object.defineProperty(exports, "__esModule", ({ value: true }));
13
13
  exports.config = void 0;
14
- const envalid = __webpack_require__(/*! envalid */ "envalid");
15
- const { str, email, json, num, bool } = envalid;
16
- exports.config = envalid.cleanEnv(process.env, {
17
- REDIS_URL: str(),
18
- REDIS_SENTINEL_ENABLED: bool({ devDefault: false }),
19
- REDIS_SENTINEL_NAME: str({ default: 'mymaster' }),
20
- REDIS_CLUSTER_ENABLED: bool({ default: false }),
21
- REDIS_CLUSTER_URL: json({ desc: "Send cluster nodes as array of host and port object. ex: [{ host: 'node1', port: 6678}]" }),
22
- REDIS_CACHE_MAX_AGE_in_sec: num({ default: 2592000, desc: 'Max. age in seconds. Default is 30 days' }),
23
- NODE_ENV: str({ choices: ['production', 'test', 'staging', 'development'], default: 'production' }),
14
+ const envalid_1 = __webpack_require__(/*! envalid */ "envalid");
15
+ exports.config = (0, envalid_1.cleanEnv)(process.env, {
16
+ REDIS_URL: (0, envalid_1.str)(),
17
+ REDIS_SENTINEL_ENABLED: (0, envalid_1.bool)({ devDefault: false }),
18
+ REDIS_SENTINEL_NAME: (0, envalid_1.str)({ default: 'mymaster' }),
19
+ REDIS_CLUSTER_ENABLED: (0, envalid_1.bool)({ default: false }),
20
+ REDIS_CLUSTER_URL: (0, envalid_1.json)({ desc: "Send cluster nodes as array of host and port object. ex: [{ host: 'node1', port: 6678}]" }),
21
+ REDIS_CACHE_MAX_AGE_in_sec: (0, envalid_1.num)({ default: 2592000, desc: 'Max. age in seconds. Default is 30 days' }),
22
+ NODE_ENV: (0, envalid_1.str)({ choices: ['production', 'test', 'staging', 'development'], default: 'production' }),
24
23
  });
25
24
 
26
25
 
@@ -145,31 +144,30 @@ exports.moduleFunc = moduleFunc;
145
144
  Object.defineProperty(exports, "__esModule", ({ value: true }));
146
145
  exports.Redis = void 0;
147
146
  const IORedis = __webpack_require__(/*! ioredis */ "ioredis");
148
- const { promisify } = __webpack_require__(/*! util */ "util");
147
+ const ioredis_1 = __webpack_require__(/*! ioredis */ "ioredis");
149
148
  class Redis {
150
149
  constructor(options, isCluster, clusterNodes) {
151
150
  if (isCluster) {
152
- this.client = new IORedis.Cluster(clusterNodes, options);
151
+ this.client = new ioredis_1.Cluster(clusterNodes, options);
153
152
  }
154
153
  else {
155
154
  this.client = new IORedis(options);
156
155
  }
157
- this.getAsync = promisify(this.client.get).bind(this.client);
158
156
  }
159
157
  async set(key, data) {
160
158
  if (data.maxAge) {
161
- this.client.set(key, JSON.stringify(data), 'EX', data.maxAge);
159
+ await this.client.set(key, JSON.stringify(data), 'EX', data.maxAge);
162
160
  return data;
163
161
  }
164
- this.client.set(key, JSON.stringify(data));
162
+ await this.client.set(key, JSON.stringify(data));
165
163
  return data;
166
164
  }
167
165
  async get(key) {
168
- const cacheString = await this.getAsync(key);
166
+ const cacheString = await this.client.get(key);
169
167
  return JSON.parse(cacheString);
170
168
  }
171
169
  async drop(key) {
172
- this.client.del(key);
170
+ await this.client.del(key);
173
171
  return true;
174
172
  }
175
173
  async invalidate(keys) {
@@ -205,8 +203,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
205
203
  };
206
204
  Object.defineProperty(exports, "__esModule", ({ value: true }));
207
205
  exports.Cache = void 0;
208
- const module_1 = __webpack_require__(/*! ./module */ "./src/module.ts");
209
206
  const server_core_1 = __webpack_require__(/*! @common-stack/server-core */ "@common-stack/server-core");
207
+ const module_1 = __webpack_require__(/*! ./module */ "./src/module.ts");
210
208
  __exportStar(__webpack_require__(/*! ./constants */ "./src/constants.ts"), exports);
211
209
  var services_1 = __webpack_require__(/*! ./services */ "./src/services/index.ts");
212
210
  Object.defineProperty(exports, "Cache", ({ enumerable: true, get: function () { return services_1.Cache; } }));
@@ -247,10 +245,10 @@ exports["default"] = new server_core_1.Feature({
247
245
 
248
246
  Object.defineProperty(exports, "__esModule", ({ value: true }));
249
247
  exports.Cache = void 0;
250
- const ioredis_engine_1 = __webpack_require__(/*! ../engines/ioredis-engine */ "./src/engines/ioredis-engine.ts");
248
+ const url = __webpack_require__(/*! url */ "url");
251
249
  const server_1 = __webpack_require__(/*! @cdm-logger/server */ "@cdm-logger/server");
250
+ const ioredis_engine_1 = __webpack_require__(/*! ../engines/ioredis-engine */ "./src/engines/ioredis-engine.ts");
252
251
  const config_1 = __webpack_require__(/*! ../config */ "./src/config/index.ts");
253
- const url = __webpack_require__(/*! url */ "url");
254
252
  class Cache {
255
253
  constructor(engine, logger) {
256
254
  this.engine = engine;
@@ -435,16 +433,6 @@ module.exports = require("ioredis");
435
433
 
436
434
  module.exports = require("url");
437
435
 
438
- /***/ }),
439
-
440
- /***/ "util":
441
- /*!***********************!*\
442
- !*** external "util" ***!
443
- \***********************/
444
- /***/ ((module) => {
445
-
446
- module.exports = require("util");
447
-
448
436
  /***/ })
449
437
 
450
438
  /******/ });
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","mappings":"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","sources":["webpack://@common-stack/cache-api-server/./src/config/env-config.ts","webpack://@common-stack/cache-api-server/./src/config/index.ts","webpack://@common-stack/cache-api-server/./src/constants.ts","webpack://@common-stack/cache-api-server/./src/containers/index.ts","webpack://@common-stack/cache-api-server/./src/containers/module.ts","webpack://@common-stack/cache-api-server/./src/engines/ioredis-engine.ts","webpack://@common-stack/cache-api-server/./src/index.ts","webpack://@common-stack/cache-api-server/./src/module.ts","webpack://@common-stack/cache-api-server/./src/services/cache-service.ts","webpack://@common-stack/cache-api-server/./src/services/index.ts","webpack://@common-stack/cache-api-server/external commonjs \"@cdm-logger/server\"","webpack://@common-stack/cache-api-server/external commonjs \"@common-stack/server-core\"","webpack://@common-stack/cache-api-server/external commonjs \"envalid\"","webpack://@common-stack/cache-api-server/external commonjs \"inversify\"","webpack://@common-stack/cache-api-server/external commonjs \"ioredis\"","webpack://@common-stack/cache-api-server/external commonjs \"url\"","webpack://@common-stack/cache-api-server/external commonjs \"util\"","webpack://@common-stack/cache-api-server/webpack/bootstrap","webpack://@common-stack/cache-api-server/webpack/before-startup","webpack://@common-stack/cache-api-server/webpack/startup","webpack://@common-stack/cache-api-server/webpack/after-startup"],"sourcesContent":["import * as envalid from 'envalid';\nconst { str, email, json, num, bool } = envalid;\n\nexport interface IConfig {\n NODE_ENV: string;\n REDIS_URL: string;\n REDIS_CACHE_MAX_AGE_in_sec: number;\n REDIS_SENTINEL_ENABLED: boolean;\n REDIS_SENTINEL_NAME?: string;\n REDIS_CLUSTER_ENABLED?: boolean;\n REDIS_CLUSTER_URL?: any;\n}\n\nexport const config = envalid.cleanEnv<IConfig>(process.env, {\n REDIS_URL: str(),\n REDIS_SENTINEL_ENABLED: bool({ devDefault: false }),\n REDIS_SENTINEL_NAME: str({ default: 'mymaster' }),\n REDIS_CLUSTER_ENABLED: bool({ default: false }),\n REDIS_CLUSTER_URL: json({ desc: \"Send cluster nodes as array of host and port object. ex: [{ host: 'node1', port: 6678}]\" }),\n REDIS_CACHE_MAX_AGE_in_sec: num({ default: 2592000, desc: 'Max. age in seconds. Default is 30 days' }),\n NODE_ENV: str({ choices: ['production', 'test', 'staging', 'development'], default: 'production' }),\n});\n\n","export * from './env-config';\n","export enum Types {\n CacheEngine = 'CacheEngine',\n CacheService = 'CacheService',\n}\n","export * from './module';\n","import { ContainerModule, interfaces } from 'inversify';\n\nimport { Cache } from '../services';\nimport { Types } from '../constants';\nimport { Redis } from '../engines/ioredis-engine';\nimport { ICacheEngine, ICacheService } from '../interfaces';\nimport { CdmLogger } from '@cdm-logger/core';\n\nexport const moduleFunc: (settings: any, pubsub) => interfaces.ContainerModule =\n (settings: any) => new ContainerModule((bind: interfaces.Bind) => {\n\n /**\n *\n * @returns: () => cache;\n */\n bind<interfaces.Factory<Cache>>(Types.CacheService).toFactory<Cache>((context: interfaces.Context) => {\n return () => {\n // TODO: to make it singleton we need to check if Cache already exist then return same.\n const cacheEngine = context.container.get<ICacheEngine>(Types.CacheEngine);\n const logger = context.container.get<CdmLogger.ILogger>('Logger');\n const cache = new Cache(cacheEngine, logger);\n return cache;\n };\n }).whenTargetIsDefault();\n\n bind<ICacheEngine>(Types.CacheEngine)\n .toConstantValue(new Redis(settings.redisConnection))\n // .inSingletonScope()\n .whenTargetIsDefault();\n });\n\n","import * as IORedis from 'ioredis';\nimport { ICacheEngine } from '../interfaces';\nconst { promisify } = require('util');\n\nexport class Redis implements ICacheEngine {\n private client: IORedis.Redis | IORedis.Cluster;\n private getAsync;\n\n constructor(options: IORedis.RedisOptions | IORedis.ClusterOptions, isCluster?: boolean, clusterNodes?: IORedis.ClusterNode[]) {\n if (isCluster) {\n this.client = new IORedis.Cluster(clusterNodes, options);\n } else {\n this.client = new IORedis(options);\n }\n this.getAsync = promisify(this.client.get).bind(this.client);\n }\n\n public async set(key: string, data: any) {\n if (data.maxAge) {\n this.client.set(key, JSON.stringify(data), 'EX', data.maxAge);\n return data;\n }\n this.client.set(key, JSON.stringify(data));\n return data;\n }\n\n public async get(key: string) {\n const cacheString = await this.getAsync(key);\n return JSON.parse(cacheString);\n }\n\n public async drop(key: string) {\n this.client.del(key);\n return true;\n }\n\n public async invalidate(keys?: string[]) {\n (keys || []).forEach(key => this.client.del(key));\n return true;\n }\n}\n","import module from './module';\nimport { Feature } from '@common-stack/server-core';\n\nexport * from './constants';\nexport { Cache } from './services';\nexport default new Feature(module);\n\n","import * as _ from 'lodash';\nimport { interfaces } from 'inversify';\nimport { Feature } from '@common-stack/server-core';\n\nimport { Types } from './constants';\nimport { moduleFunc } from './containers';\n\nconst createServiceFunc = (container: interfaces.Container) => ({\n cache: container.get(Types.CacheService),\n});\n\nexport default new Feature({\n schema: [],\n createServiceFunc,\n createContainerFunc: [moduleFunc],\n});\n","import * as _ from 'lodash';\nimport { CdmLogger } from '@cdm-logger/core';\n\nimport { Types } from '../constants';\nimport { ICacheService, ICacheEngine, ICacheOptions, ICacheSetOptions } from '../interfaces';\nimport { create } from 'domain';\nimport { Redis } from '../engines/ioredis-engine';\nimport { logger as cdmLogger } from '@cdm-logger/server';\nimport { config } from '../config';\nimport * as url from 'url';\n\nexport class Cache implements ICacheService {\n private static DEFAULT_SCOPE = 'cde_cache';\n private static instance: Cache;\n\n private logger: CdmLogger.ILogger;\n private engine: ICacheEngine;\n\n constructor(\n engine: ICacheEngine,\n logger?: CdmLogger.ILogger,\n ) {\n this.engine = engine;\n if (logger) {\n this.logger = logger.child(this.constructor.name);\n } else {\n this.logger = cdmLogger.child(this.constructor.name);\n }\n }\n\n public static get Instance() {\n if (this.instance) {\n return this.instance;\n }\n const { port, hostname } = url.parse(config.REDIS_URL) as { port: any, hostname: string };\n let options;\n let client;\n if (config.REDIS_SENTINEL_ENABLED) {\n options = {\n sentinels: [{ host: hostname, port }],\n name: config.REDIS_SENTINEL_NAME,\n };\n client = new Redis(options);\n } else if (config.REDIS_CLUSTER_ENABLED) {\n options = {};\n client = new Redis(options, true, config.REDIS_CLUSTER_URL);\n } else {\n options = { host: hostname, port };\n client = new Redis(options);\n }\n this.instance = new this(client);\n return this.instance;\n }\n\n private key(key: string, scope?: string) {\n return `${scope || Cache.DEFAULT_SCOPE}.${key}`;\n }\n\n private isExpired(createdAt: number, maxAge: number) {\n const now = parseInt(`${Date.now() / 1000}`, null);\n return now - createdAt > maxAge;\n }\n\n private getOptions(opts: ICacheOptions) {\n return Object.assign(this.defaults, opts || {});\n }\n\n get defaults() {\n return {\n scope: Cache.DEFAULT_SCOPE,\n maxAge: config.REDIS_CACHE_MAX_AGE_in_sec,\n createdAt: parseInt(`${Date.now() / 1000}`, null),\n };\n }\n\n public async set(key: string, payload: any, options?: ICacheSetOptions) {\n const opts = this.getOptions(options);\n const cache = Object.assign({}, { payload }, opts);\n\n const path = this.key(key, opts.scope);\n const result = this.engine.set(path, cache);\n\n return payload;\n }\n\n public async get(key: string, options?: ICacheOptions) {\n const opts = this.getOptions(options);\n const path = this.key(key, opts.scope);\n const cache = await this.engine.get(path);\n\n if (cache == null) {\n return null;\n }\n\n if (this.isExpired(cache.createdAt, cache.maxAge)) {\n this.engine.drop(path);\n return null;\n } else {\n return opts.parse\n ? cache.payload\n : cache.payload; // not really doing anything here\n }\n }\n\n public async drop(key, options?: ICacheOptions) {\n const opts = this.getOptions(options);\n const path = this.key(key, opts.scope);\n\n const ok = this.engine.drop(path);\n return true;\n }\n\n public async invalidate(keys, options?: ICacheOptions) {\n if (keys.length <= 0) {\n return this.engine.invalidate();\n } else {\n const opts = this.getOptions(options);\n const paths = keys.map(key => this.key(key, opts.scope));\n\n return this.engine.invalidate(paths);\n }\n }\n}\n","export * from './cache-service';\n","module.exports = require(\"@cdm-logger/server\");","module.exports = require(\"@common-stack/server-core\");","module.exports = require(\"envalid\");","module.exports = require(\"inversify\");","module.exports = require(\"ioredis\");","module.exports = require(\"url\");","module.exports = require(\"util\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/index.ts\");\n",""],"names":[],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":";;;;;;;;;;;;;AAAA,gEAAyD;AAY5C,cAAM,GAAG,sBAAQ,EAAU,OAAO,CAAC,GAAG,EAAE;IACjD,SAAS,EAAE,iBAAG,GAAE;IAChB,sBAAsB,EAAE,kBAAI,EAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACnD,mBAAmB,EAAE,iBAAG,EAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACjD,qBAAqB,EAAE,kBAAI,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/C,iBAAiB,EAAE,kBAAI,EAAC,EAAE,IAAI,EAAE,yFAAyF,EAAE,CAAC;IAC5H,0BAA0B,EAAE,iBAAG,EAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,yCAAyC,EAAE,CAAC;IACtG,QAAQ,EAAE,iBAAG,EAAC,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;CACtG,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpBH,6FAA6B;;;;;;;;;;;;;;ACA7B,IAAY,KAGX;AAHD,WAAY,KAAK;IACb,oCAA2B;IAC3B,sCAA6B;AACjC,CAAC,EAHW,KAAK,GAAL,aAAK,KAAL,aAAK,QAGhB;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHD,yFAAyB;;;;;;;;;;;;;;ACAzB,sEAAwD;AAExD,qFAAoC;AACpC,kFAAqC;AACrC,iHAAkD;AAG3C,MAAM,UAAU,GACnB,CAAC,QAAa,EAAE,EAAE,CAAC,IAAI,2BAAe,CAAC,CAAC,IAAqB,EAAE,EAAE;IAE7D;;;OAGG;IACH,IAAI,CAA4B,iBAAK,CAAC,YAAY,CAAC,CAAC,SAAS,CAAQ,CAAC,OAA2B,EAAE,EAAE;QACjG,OAAO,GAAG,EAAE;YACR,wFAAwF;YACxF,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAe,iBAAK,CAAC,WAAW,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAoB,QAAQ,CAAC,CAAC;YAClE,MAAM,KAAK,GAAG,IAAI,gBAAK,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;IACN,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC;IAEzB,IAAI,CAAe,iBAAK,CAAC,WAAW,CAAC;SAChC,eAAe,CAAC,IAAI,sBAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACrD,sBAAsB;SACrB,mBAAmB,EAAE,CAAC;AAC/B,CAAC,CAAC,CAAC;AArBM,kBAAU,cAqBhB;;;;;;;;;;;;;;AC5BP,8DAAmC;AACnC,gEAAsG;AAGtG,MAAa,KAAK;IAId,YAAY,OAAsC,EAAE,SAAmB,EAAE,YAA4B;QACjG,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;SACpD;aAAM;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;SACtC;IACL,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAAS;QACnC,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;SACf;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW;QACxB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,GAAW;QACzB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,IAAe;QACnC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAnCD,sBAmCC;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvCD,wGAAoD;AACpD,wEAA8B;AAE9B,oFAA4B;AAC5B,kFAAmC;AAA1B,uGAAK;AACd,qBAAe,IAAI,qBAAO,CAAC,gBAAM,CAAC,CAAC;;;;;;;;;;;;;ACHnC,wGAAoD;AAEpD,iFAAoC;AACpC,0FAA0C;AAE1C,MAAM,iBAAiB,GAAG,CAAC,SAA+B,EAAE,EAAE,CAAC,CAAC;IAC5D,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,iBAAK,CAAC,YAAY,CAAC;CAC3C,CAAC,CAAC;AAEH,qBAAe,IAAI,qBAAO,CAAC;IACvB,MAAM,EAAE,EAAE;IACV,iBAAiB;IACjB,mBAAmB,EAAE,CAAC,uBAAU,CAAC;CACpC,CAAC,CAAC;;;;;;;;;;;;;;ACdH,kDAA2B;AAE3B,qFAAyD;AAEzD,iHAAkD;AAClD,+EAAmC;AAEnC,MAAa,KAAK;IAOd,YACI,MAAoB,EACpB,MAA0B;QAE1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACrD;aAAM;YACH,IAAI,CAAC,MAAM,GAAG,eAAS,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SACxD;IACL,CAAC;IAEM,MAAM,KAAK,QAAQ;QACtB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO,IAAI,CAAC,QAAQ,CAAC;SACxB;QACD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,eAAM,CAAC,SAAS,CAAoC,CAAC;QAC1F,IAAI,OAAO,CAAC;QACZ,IAAI,MAAM,CAAC;QACX,IAAI,eAAM,CAAC,sBAAsB,EAAE;YAC/B,OAAO,GAAG;gBACN,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACrC,IAAI,EAAE,eAAM,CAAC,mBAAmB;aACnC,CAAC;YACF,MAAM,GAAG,IAAI,sBAAK,CAAC,OAAO,CAAC,CAAC;SAC/B;aAAM,IAAI,eAAM,CAAC,qBAAqB,EAAE;YACrC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,IAAI,sBAAK,CAAC,OAAO,EAAE,IAAI,EAAE,eAAM,CAAC,iBAAiB,CAAC,CAAC;SAC/D;aAAM;YACH,OAAO,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YACnC,MAAM,GAAG,IAAI,sBAAK,CAAC,OAAO,CAAC,CAAC;SAC/B;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEO,GAAG,CAAC,GAAW,EAAE,KAAc;QACnC,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,aAAa,IAAI,GAAG,EAAE,CAAC;IACpD,CAAC;IAEO,SAAS,CAAC,SAAiB,EAAE,MAAc;QAC/C,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO,GAAG,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,CAAC;IAEO,UAAU,CAAC,IAAmB;QAClC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,IAAI,QAAQ;QACR,OAAO;YACH,KAAK,EAAE,KAAK,CAAC,aAAa;YAC1B,MAAM,EAAE,eAAM,CAAC,0BAA0B;YACzC,SAAS,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC;SACpD,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,OAAY,EAAE,OAA0B;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE5C,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,OAAuB;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE1C,IAAI,KAAK,IAAI,IAAI,EAAE;YACf,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;YAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;SACf;aAAM;YACH,OAAO,IAAI,CAAC,KAAK;gBACb,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,iCAAiC;SACzD;IACL,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAuB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,OAAuB;QACjD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YAClB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;SACnC;aAAM;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAEzD,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACxC;IACL,CAAC;;AA9GL,sBA+GC;AA9GkB,mBAAa,GAAG,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;ACT/C,qGAAgC;;;;;;;;;;;ACAhC;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;;;;;ACAA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;UEtBA;UACA;UACA;UACA","sources":["webpack://@common-stack/cache-api-server/./src/config/env-config.ts","webpack://@common-stack/cache-api-server/./src/config/index.ts","webpack://@common-stack/cache-api-server/./src/constants.ts","webpack://@common-stack/cache-api-server/./src/containers/index.ts","webpack://@common-stack/cache-api-server/./src/containers/module.ts","webpack://@common-stack/cache-api-server/./src/engines/ioredis-engine.ts","webpack://@common-stack/cache-api-server/./src/index.ts","webpack://@common-stack/cache-api-server/./src/module.ts","webpack://@common-stack/cache-api-server/./src/services/cache-service.ts","webpack://@common-stack/cache-api-server/./src/services/index.ts","webpack://@common-stack/cache-api-server/external commonjs \"@cdm-logger/server\"","webpack://@common-stack/cache-api-server/external commonjs \"@common-stack/server-core\"","webpack://@common-stack/cache-api-server/external commonjs \"envalid\"","webpack://@common-stack/cache-api-server/external commonjs \"inversify\"","webpack://@common-stack/cache-api-server/external commonjs \"ioredis\"","webpack://@common-stack/cache-api-server/external commonjs \"url\"","webpack://@common-stack/cache-api-server/webpack/bootstrap","webpack://@common-stack/cache-api-server/webpack/before-startup","webpack://@common-stack/cache-api-server/webpack/startup","webpack://@common-stack/cache-api-server/webpack/after-startup"],"sourcesContent":["import { str, cleanEnv, json, num, bool } from 'envalid';\n\nexport interface IConfig {\n NODE_ENV: string;\n REDIS_URL: string;\n REDIS_CACHE_MAX_AGE_in_sec: number;\n REDIS_SENTINEL_ENABLED: boolean;\n REDIS_SENTINEL_NAME?: string;\n REDIS_CLUSTER_ENABLED?: boolean;\n REDIS_CLUSTER_URL?: any;\n}\n\nexport const config = cleanEnv<IConfig>(process.env, {\n REDIS_URL: str(),\n REDIS_SENTINEL_ENABLED: bool({ devDefault: false }),\n REDIS_SENTINEL_NAME: str({ default: 'mymaster' }),\n REDIS_CLUSTER_ENABLED: bool({ default: false }),\n REDIS_CLUSTER_URL: json({ desc: \"Send cluster nodes as array of host and port object. ex: [{ host: 'node1', port: 6678}]\" }),\n REDIS_CACHE_MAX_AGE_in_sec: num({ default: 2592000, desc: 'Max. age in seconds. Default is 30 days' }),\n NODE_ENV: str({ choices: ['production', 'test', 'staging', 'development'], default: 'production' }),\n});\n\n","export * from './env-config';\n","export enum Types {\n CacheEngine = 'CacheEngine',\n CacheService = 'CacheService',\n}\n","export * from './module';\n","import { ContainerModule, interfaces } from 'inversify';\nimport { CdmLogger } from '@cdm-logger/core';\nimport { Cache } from '../services';\nimport { Types } from '../constants';\nimport { Redis } from '../engines/ioredis-engine';\nimport { ICacheEngine } from '../interfaces';\n\nexport const moduleFunc: (settings: any, pubsub) => interfaces.ContainerModule =\n (settings: any) => new ContainerModule((bind: interfaces.Bind) => {\n\n /**\n *\n * @returns: () => cache;\n */\n bind<interfaces.Factory<Cache>>(Types.CacheService).toFactory<Cache>((context: interfaces.Context) => {\n return () => {\n // TODO: to make it singleton we need to check if Cache already exist then return same.\n const cacheEngine = context.container.get<ICacheEngine>(Types.CacheEngine);\n const logger = context.container.get<CdmLogger.ILogger>('Logger');\n const cache = new Cache(cacheEngine, logger);\n return cache;\n };\n }).whenTargetIsDefault();\n\n bind<ICacheEngine>(Types.CacheEngine)\n .toConstantValue(new Redis(settings.redisConnection))\n // .inSingletonScope()\n .whenTargetIsDefault();\n });\n\n","import * as IORedis from 'ioredis';\nimport { Cluster, ClusterNode, ClusterOptions, Redis as RedisInterface, RedisOptions } from 'ioredis';\nimport { ICacheEngine } from '../interfaces';\n\nexport class Redis implements ICacheEngine {\n private client: RedisInterface | Cluster;\n private getAsync;\n\n constructor(options: RedisOptions | ClusterOptions, isCluster?: boolean, clusterNodes?: ClusterNode[]) {\n if (isCluster) {\n this.client = new Cluster(clusterNodes, options);\n } else {\n this.client = new IORedis(options);\n }\n }\n\n public async set(key: string, data: any) {\n if (data.maxAge) {\n await this.client.set(key, JSON.stringify(data), 'EX', data.maxAge);\n return data;\n }\n await this.client.set(key, JSON.stringify(data));\n return data;\n }\n\n public async get(key: string) {\n const cacheString = await this.client.get(key);\n return JSON.parse(cacheString);\n }\n\n public async drop(key: string) {\n await this.client.del(key);\n return true;\n }\n\n public async invalidate(keys?: string[]) {\n (keys || []).forEach(key => this.client.del(key));\n return true;\n }\n}\n","import { Feature } from '@common-stack/server-core';\nimport module from './module';\n\nexport * from './constants';\nexport { Cache } from './services';\nexport default new Feature(module);\n\n","import * as _ from 'lodash';\nimport { interfaces } from 'inversify';\nimport { Feature } from '@common-stack/server-core';\n\nimport { Types } from './constants';\nimport { moduleFunc } from './containers';\n\nconst createServiceFunc = (container: interfaces.Container) => ({\n cache: container.get(Types.CacheService),\n});\n\nexport default new Feature({\n schema: [],\n createServiceFunc,\n createContainerFunc: [moduleFunc],\n});\n","import * as _ from 'lodash';\nimport * as url from 'url';\nimport { CdmLogger } from '@cdm-logger/core';\nimport { logger as cdmLogger } from '@cdm-logger/server';\nimport { ICacheService, ICacheEngine, ICacheOptions, ICacheSetOptions } from '../interfaces';\nimport { Redis } from '../engines/ioredis-engine';\nimport { config } from '../config';\n\nexport class Cache implements ICacheService {\n private static DEFAULT_SCOPE = 'cde_cache';\n private static instance: Cache;\n\n private logger: CdmLogger.ILogger;\n private engine: ICacheEngine;\n\n constructor(\n engine: ICacheEngine,\n logger?: CdmLogger.ILogger,\n ) {\n this.engine = engine;\n if (logger) {\n this.logger = logger.child(this.constructor.name);\n } else {\n this.logger = cdmLogger.child(this.constructor.name);\n }\n }\n\n public static get Instance() {\n if (this.instance) {\n return this.instance;\n }\n const { port, hostname } = url.parse(config.REDIS_URL) as { port: any, hostname: string };\n let options;\n let client;\n if (config.REDIS_SENTINEL_ENABLED) {\n options = {\n sentinels: [{ host: hostname, port }],\n name: config.REDIS_SENTINEL_NAME,\n };\n client = new Redis(options);\n } else if (config.REDIS_CLUSTER_ENABLED) {\n options = {};\n client = new Redis(options, true, config.REDIS_CLUSTER_URL);\n } else {\n options = { host: hostname, port };\n client = new Redis(options);\n }\n this.instance = new this(client);\n return this.instance;\n }\n\n private key(key: string, scope?: string) {\n return `${scope || Cache.DEFAULT_SCOPE}.${key}`;\n }\n\n private isExpired(createdAt: number, maxAge: number) {\n const now = parseInt(`${Date.now() / 1000}`, null);\n return now - createdAt > maxAge;\n }\n\n private getOptions(opts: ICacheOptions) {\n return Object.assign(this.defaults, opts || {});\n }\n\n get defaults() {\n return {\n scope: Cache.DEFAULT_SCOPE,\n maxAge: config.REDIS_CACHE_MAX_AGE_in_sec,\n createdAt: parseInt(`${Date.now() / 1000}`, null),\n };\n }\n\n public async set(key: string, payload: any, options?: ICacheSetOptions) {\n const opts = this.getOptions(options);\n const cache = Object.assign({}, { payload }, opts);\n\n const path = this.key(key, opts.scope);\n const result = this.engine.set(path, cache);\n\n return payload;\n }\n\n public async get(key: string, options?: ICacheOptions) {\n const opts = this.getOptions(options);\n const path = this.key(key, opts.scope);\n const cache = await this.engine.get(path);\n\n if (cache == null) {\n return null;\n }\n\n if (this.isExpired(cache.createdAt, cache.maxAge)) {\n this.engine.drop(path);\n return null;\n } else {\n return opts.parse\n ? cache.payload\n : cache.payload; // not really doing anything here\n }\n }\n\n public async drop(key, options?: ICacheOptions) {\n const opts = this.getOptions(options);\n const path = this.key(key, opts.scope);\n\n const ok = this.engine.drop(path);\n return true;\n }\n\n public async invalidate(keys, options?: ICacheOptions) {\n if (keys.length <= 0) {\n return this.engine.invalidate();\n } else {\n const opts = this.getOptions(options);\n const paths = keys.map(key => this.key(key, opts.scope));\n\n return this.engine.invalidate(paths);\n }\n }\n}\n","export * from './cache-service';\n","module.exports = require(\"@cdm-logger/server\");","module.exports = require(\"@common-stack/server-core\");","module.exports = require(\"envalid\");","module.exports = require(\"inversify\");","module.exports = require(\"ioredis\");","module.exports = require(\"url\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/index.ts\");\n",""],"names":[],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@common-stack/cache-api-server",
3
- "version": "0.4.1",
3
+ "version": "0.4.5",
4
4
  "description": "Sample core for higher packages to depend on",
5
5
  "license": "ISC",
6
6
  "author": "CDMBase LLC",
@@ -20,38 +20,16 @@
20
20
  "test:watch": "npm test -- --watch",
21
21
  "watch": "npm run build:lib:watch"
22
22
  },
23
- "jest": {
24
- "moduleFileExtensions": [
25
- "ts",
26
- "tsx",
27
- "js",
28
- "json"
29
- ],
30
- "modulePaths": [
31
- "node_modules"
32
- ],
33
- "roots": [
34
- "src"
35
- ],
36
- "testEnvironment": "node",
37
- "testRegex": "/__tests__/.*test*\\.(ts|tsx|js)$",
38
- "transform": {
39
- "\\.(ts|tsx)$": "<rootDir>/../../node_modules/ts-jest/preprocessor.js"
40
- }
41
- },
42
23
  "dependencies": {
43
- "@common-stack/server-core": "0.4.1",
44
- "nodemailer": "^4.6.7",
45
- "query-string": "^6.1.0",
46
- "underscore": "^1.9.1"
24
+ "@common-stack/server-core": "0.4.3"
47
25
  },
48
26
  "peerDependencies": {
49
- "ioredis": ">=4.0.0"
27
+ "ioredis": ">=5.0.0"
50
28
  },
51
29
  "publishConfig": {
52
30
  "access": "public"
53
31
  },
54
- "gitHead": "1a36a13aa4bb8151460b3b1c636e7cd29852be5d",
32
+ "gitHead": "5f66e95323f22ea617b0053cc3d3bbafa11529e0",
55
33
  "typescript": {
56
34
  "definition": "lib/index.d.ts"
57
35
  }
@@ -1,5 +1,4 @@
1
- import * as envalid from 'envalid';
2
- const { str, email, json, num, bool } = envalid;
1
+ import { str, cleanEnv, json, num, bool } from 'envalid';
3
2
 
4
3
  export interface IConfig {
5
4
  NODE_ENV: string;
@@ -11,7 +10,7 @@ export interface IConfig {
11
10
  REDIS_CLUSTER_URL?: any;
12
11
  }
13
12
 
14
- export const config = envalid.cleanEnv<IConfig>(process.env, {
13
+ export const config = cleanEnv<IConfig>(process.env, {
15
14
  REDIS_URL: str(),
16
15
  REDIS_SENTINEL_ENABLED: bool({ devDefault: false }),
17
16
  REDIS_SENTINEL_NAME: str({ default: 'mymaster' }),
@@ -1,10 +1,9 @@
1
1
  import { ContainerModule, interfaces } from 'inversify';
2
-
2
+ import { CdmLogger } from '@cdm-logger/core';
3
3
  import { Cache } from '../services';
4
4
  import { Types } from '../constants';
5
5
  import { Redis } from '../engines/ioredis-engine';
6
- import { ICacheEngine, ICacheService } from '../interfaces';
7
- import { CdmLogger } from '@cdm-logger/core';
6
+ import { ICacheEngine } from '../interfaces';
8
7
 
9
8
  export const moduleFunc: (settings: any, pubsub) => interfaces.ContainerModule =
10
9
  (settings: any) => new ContainerModule((bind: interfaces.Bind) => {
@@ -1,36 +1,35 @@
1
1
  import * as IORedis from 'ioredis';
2
+ import { Cluster, ClusterNode, ClusterOptions, Redis as RedisInterface, RedisOptions } from 'ioredis';
2
3
  import { ICacheEngine } from '../interfaces';
3
- const { promisify } = require('util');
4
4
 
5
5
  export class Redis implements ICacheEngine {
6
- private client: IORedis.Redis | IORedis.Cluster;
6
+ private client: RedisInterface | Cluster;
7
7
  private getAsync;
8
8
 
9
- constructor(options: IORedis.RedisOptions | IORedis.ClusterOptions, isCluster?: boolean, clusterNodes?: IORedis.ClusterNode[]) {
9
+ constructor(options: RedisOptions | ClusterOptions, isCluster?: boolean, clusterNodes?: ClusterNode[]) {
10
10
  if (isCluster) {
11
- this.client = new IORedis.Cluster(clusterNodes, options);
11
+ this.client = new Cluster(clusterNodes, options);
12
12
  } else {
13
13
  this.client = new IORedis(options);
14
14
  }
15
- this.getAsync = promisify(this.client.get).bind(this.client);
16
15
  }
17
16
 
18
17
  public async set(key: string, data: any) {
19
18
  if (data.maxAge) {
20
- this.client.set(key, JSON.stringify(data), 'EX', data.maxAge);
19
+ await this.client.set(key, JSON.stringify(data), 'EX', data.maxAge);
21
20
  return data;
22
21
  }
23
- this.client.set(key, JSON.stringify(data));
22
+ await this.client.set(key, JSON.stringify(data));
24
23
  return data;
25
24
  }
26
25
 
27
26
  public async get(key: string) {
28
- const cacheString = await this.getAsync(key);
27
+ const cacheString = await this.client.get(key);
29
28
  return JSON.parse(cacheString);
30
29
  }
31
30
 
32
31
  public async drop(key: string) {
33
- this.client.del(key);
32
+ await this.client.del(key);
34
33
  return true;
35
34
  }
36
35
 
package/src/index.ts CHANGED
@@ -1,5 +1,5 @@
1
- import module from './module';
2
1
  import { Feature } from '@common-stack/server-core';
2
+ import module from './module';
3
3
 
4
4
  export * from './constants';
5
5
  export { Cache } from './services';
@@ -1,13 +1,10 @@
1
1
  import * as _ from 'lodash';
2
+ import * as url from 'url';
2
3
  import { CdmLogger } from '@cdm-logger/core';
3
-
4
- import { Types } from '../constants';
4
+ import { logger as cdmLogger } from '@cdm-logger/server';
5
5
  import { ICacheService, ICacheEngine, ICacheOptions, ICacheSetOptions } from '../interfaces';
6
- import { create } from 'domain';
7
6
  import { Redis } from '../engines/ioredis-engine';
8
- import { logger as cdmLogger } from '@cdm-logger/server';
9
7
  import { config } from '../config';
10
- import * as url from 'url';
11
8
 
12
9
  export class Cache implements ICacheService {
13
10
  private static DEFAULT_SCOPE = 'cde_cache';
package/tsconfig.json CHANGED
@@ -17,4 +17,4 @@
17
17
  "dist",
18
18
  "webpack.config.js"
19
19
  ]
20
- }
20
+ }
@@ -1,37 +0,0 @@
1
- import * as NodeRedis from 'redis';
2
- import { ICacheEngine } from '../interfaces';
3
- const { promisify } = require('util');
4
-
5
- export class Redis implements ICacheEngine {
6
- private client: NodeRedis.RedisClient;
7
- private getAsync;
8
-
9
- constructor(options: NodeRedis.ClientOpts) {
10
- this.client = NodeRedis.createClient(options);
11
- this.getAsync = promisify(this.client.get).bind(this.client);
12
- }
13
-
14
- public async set(key: string, data: any) {
15
- if (data.maxAge) {
16
- this.client.set(key, JSON.stringify(data), 'EX', data.maxAge);
17
- return data;
18
- }
19
- this.client.set(key, JSON.stringify(data));
20
- return data;
21
- }
22
-
23
- public async get(key: string) {
24
- const cacheString = await this.getAsync(key);
25
- return JSON.parse(cacheString);
26
- }
27
-
28
- public async drop(key: string) {
29
- this.client.del(key);
30
- return true;
31
- }
32
-
33
- public async invalidate(keys?: string[]) {
34
- (keys || []).forEach(key => this.client.del(key));
35
- return true;
36
- }
37
- }