ts-cache-mongoose 0.0.1 → 0.0.2

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 (62) hide show
  1. package/README.md +58 -2
  2. package/dist/cjs/cache/Cache.js +17 -12
  3. package/dist/cjs/cache/Cache.js.map +1 -1
  4. package/dist/cjs/cache/engine/MemoryCacheEngine.js +3 -0
  5. package/dist/cjs/cache/engine/MemoryCacheEngine.js.map +1 -1
  6. package/dist/cjs/cache/engine/RedisCacheEngine.js +8 -2
  7. package/dist/cjs/cache/engine/RedisCacheEngine.js.map +1 -1
  8. package/dist/cjs/interfaces/{ICacheMongooseOptions.js → ICacheOptions.js} +1 -1
  9. package/dist/cjs/interfaces/ICacheOptions.js.map +1 -0
  10. package/dist/cjs/plugin.js +13 -9
  11. package/dist/cjs/plugin.js.map +1 -1
  12. package/dist/cjs/types/cache/Cache.d.ts +7 -5
  13. package/dist/cjs/types/cache/Cache.d.ts.map +1 -1
  14. package/dist/cjs/types/cache/engine/MemoryCacheEngine.d.ts +1 -0
  15. package/dist/cjs/types/cache/engine/MemoryCacheEngine.d.ts.map +1 -1
  16. package/dist/cjs/types/cache/engine/RedisCacheEngine.d.ts +3 -1
  17. package/dist/cjs/types/cache/engine/RedisCacheEngine.d.ts.map +1 -1
  18. package/dist/cjs/types/interfaces/ICacheEngine.d.ts +1 -0
  19. package/dist/cjs/types/interfaces/ICacheEngine.d.ts.map +1 -1
  20. package/dist/cjs/types/interfaces/ICacheOptions.d.ts +8 -0
  21. package/dist/cjs/types/interfaces/ICacheOptions.d.ts.map +1 -0
  22. package/dist/cjs/types/plugin.d.ts +8 -6
  23. package/dist/cjs/types/plugin.d.ts.map +1 -1
  24. package/dist/esm/cache/Cache.js +17 -11
  25. package/dist/esm/cache/Cache.js.map +1 -1
  26. package/dist/esm/cache/engine/MemoryCacheEngine.js +3 -0
  27. package/dist/esm/cache/engine/MemoryCacheEngine.js.map +1 -1
  28. package/dist/esm/cache/engine/RedisCacheEngine.js +8 -2
  29. package/dist/esm/cache/engine/RedisCacheEngine.js.map +1 -1
  30. package/dist/esm/interfaces/ICacheOptions.js +2 -0
  31. package/dist/esm/interfaces/ICacheOptions.js.map +1 -0
  32. package/dist/esm/plugin.js.map +1 -1
  33. package/dist/esm/plugin.mjs +13 -9
  34. package/dist/esm/types/cache/Cache.d.ts +7 -5
  35. package/dist/esm/types/cache/Cache.d.ts.map +1 -1
  36. package/dist/esm/types/cache/engine/MemoryCacheEngine.d.ts +1 -0
  37. package/dist/esm/types/cache/engine/MemoryCacheEngine.d.ts.map +1 -1
  38. package/dist/esm/types/cache/engine/RedisCacheEngine.d.ts +3 -1
  39. package/dist/esm/types/cache/engine/RedisCacheEngine.d.ts.map +1 -1
  40. package/dist/esm/types/interfaces/ICacheEngine.d.ts +1 -0
  41. package/dist/esm/types/interfaces/ICacheEngine.d.ts.map +1 -1
  42. package/dist/esm/types/interfaces/ICacheOptions.d.ts +8 -0
  43. package/dist/esm/types/interfaces/ICacheOptions.d.ts.map +1 -0
  44. package/dist/esm/types/plugin.d.ts +8 -6
  45. package/dist/esm/types/plugin.d.ts.map +1 -1
  46. package/package.json +6 -7
  47. package/src/cache/Cache.ts +24 -14
  48. package/src/cache/engine/MemoryCacheEngine.ts +5 -0
  49. package/src/cache/engine/RedisCacheEngine.ts +10 -4
  50. package/src/interfaces/ICacheEngine.ts +1 -0
  51. package/src/interfaces/ICacheOptions.ts +9 -0
  52. package/src/plugin.ts +19 -13
  53. package/tests/cache-options.test.ts +80 -0
  54. package/tests/cache.test.ts +112 -15
  55. package/dist/cjs/interfaces/ICacheMongooseOptions.js.map +0 -1
  56. package/dist/cjs/types/interfaces/ICacheMongooseOptions.d.ts +0 -10
  57. package/dist/cjs/types/interfaces/ICacheMongooseOptions.d.ts.map +0 -1
  58. package/dist/esm/interfaces/ICacheMongooseOptions.js +0 -2
  59. package/dist/esm/interfaces/ICacheMongooseOptions.js.map +0 -1
  60. package/dist/esm/types/interfaces/ICacheMongooseOptions.d.ts +0 -10
  61. package/dist/esm/types/interfaces/ICacheMongooseOptions.d.ts.map +0 -1
  62. package/src/interfaces/ICacheMongooseOptions.ts +0 -10
package/README.md CHANGED
@@ -20,7 +20,63 @@ Patch history (audit log) & events plugin for mongoose
20
20
  ts-cache-mongoose is a plugin for mongoose
21
21
  \
22
22
  Caching queries is a good way to improve performance of your application
23
-
23
+ \
24
24
  This is initial prerelease of the plugin, so it may contain bugs
25
- I will be glad to receive your feedback and suggestions
26
25
  Work in progress...
26
+
27
+ ## Features
28
+
29
+ - [x] Memory caching
30
+ - [x] Redis caching
31
+ - [x] Cache expiration
32
+ - [x] Cache invalidation
33
+ - [x] Cache key generation
34
+ - [x] Cache key prefix
35
+ - [x] Query caching support
36
+ - [ ] Aggregate caching support
37
+
38
+ ## Installation
39
+
40
+ ```bash
41
+ npm install ts-cache-mongoose
42
+ yard add ts-cache-mongoose
43
+ ```
44
+
45
+ - This plugin requires mongoose `>=6.6.x || 7.x` to be installed as a peer dependency
46
+
47
+ ```bash
48
+ # For mongoose 6
49
+ npm install mongoose@legacy
50
+ yarn add mongoose mongoose@legacy
51
+ # For mongoose 7
52
+ npm install mongoose@latest
53
+ yarn add mongoose@latest
54
+ ```
55
+
56
+ ## Usage
57
+
58
+ ```typescript
59
+ // On your application startup
60
+ import mongoose from 'mongoose'
61
+ import cache from 'ts-cache-mongoose'
62
+
63
+ // In memory example
64
+ const cache = cache.init(mongoose, {
65
+ engine: 'memory',
66
+ })
67
+
68
+ // Redis example
69
+ const cache = cache.init(mongoose, {
70
+ engine: 'redis',
71
+ engineOptions: {
72
+ host: 'localhost',
73
+ port: 6379,
74
+ },
75
+ })
76
+
77
+ mongoose.connect('mongodb://localhost:27017/my-database')
78
+
79
+ // Somewhere in your code
80
+ const User = await User.findById(user._id).cache('1 minute').exec()
81
+ const Book = await Book.findById(user._id).cache('30 seconds').exec()
82
+ ```
@@ -1,21 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.engines = void 0;
4
3
  const tslib_1 = require("tslib");
5
4
  const ms_1 = tslib_1.__importDefault(require("ms"));
6
5
  const MemoryCacheEngine_1 = tslib_1.__importDefault(require("./engine/MemoryCacheEngine"));
7
6
  const RedisCacheEngine_1 = tslib_1.__importDefault(require("./engine/RedisCacheEngine"));
8
- exports.engines = ['memory', 'redis'];
9
- class Cache {
10
- constructor(engineName, defaultTTL) {
11
- if (!exports.engines.includes(engineName)) {
12
- throw new Error(`Invalid engine name: ${engineName}`);
7
+ class CacheEngine {
8
+ constructor(cacheOptions) {
9
+ this.engines = ['memory', 'redis'];
10
+ if (!this.engines.includes(cacheOptions.engine)) {
11
+ throw new Error(`Invalid engine name: ${cacheOptions.engine}`);
13
12
  }
14
- this.defaultTTL = (0, ms_1.default)(defaultTTL);
15
- if (engineName === 'redis') {
16
- this.engine = new RedisCacheEngine_1.default();
13
+ if (cacheOptions.engine === 'redis' && !cacheOptions.engineOptions) {
14
+ throw new Error(`Engine options are required for ${cacheOptions.engine} engine`);
17
15
  }
18
- else {
16
+ this.defaultTTL = (0, ms_1.default)(cacheOptions.defaultTTL ?? '1 minute');
17
+ if (cacheOptions.engine === 'redis' && cacheOptions.engineOptions) {
18
+ this.engine = new RedisCacheEngine_1.default(cacheOptions.engineOptions);
19
+ }
20
+ if (cacheOptions.engine === 'memory') {
19
21
  this.engine = new MemoryCacheEngine_1.default();
20
22
  }
21
23
  }
@@ -23,7 +25,7 @@ class Cache {
23
25
  return await this.engine.get(key);
24
26
  }
25
27
  async set(key, value, ttl) {
26
- const actualTTL = ttl ?? this.defaultTTL;
28
+ const actualTTL = ttl ? (0, ms_1.default)(ttl) : this.defaultTTL;
27
29
  return await this.engine.set(key, value, actualTTL);
28
30
  }
29
31
  async del(key) {
@@ -32,6 +34,9 @@ class Cache {
32
34
  async clear() {
33
35
  return await this.engine.clear();
34
36
  }
37
+ async close() {
38
+ return await this.engine.close();
39
+ }
35
40
  }
36
- exports.default = Cache;
41
+ exports.default = CacheEngine;
37
42
  //# sourceMappingURL=Cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":";;;;AAAA,oDAAmB;AAInB,2FAA0D;AAC1D,yFAAwD;AAE3C,QAAA,OAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAA;AAEnD,MAAM,KAAK;IAIT,YAAa,UAA8B,EAAE,UAAkB;QAC7D,IAAI,CAAC,eAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAA;SACtD;QAED,IAAI,CAAC,UAAU,GAAG,IAAA,YAAE,EAAC,UAAU,CAAC,CAAA;QAEhC,IAAI,UAAU,KAAK,OAAO,EAAE;YAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,0BAAgB,EAAE,CAAA;SACrC;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,IAAI,2BAAiB,EAAE,CAAA;SACtC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,KAA0D,EAAE,GAAY;QAC9F,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,CAAA;QACxC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAClC,CAAC;CACF;AAED,kBAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":";;;AAAA,oDAAmB;AAKnB,2FAA0D;AAC1D,yFAAwD;AAExD,MAAM,WAAW;IAKf,YAAa,YAA2B;QAFvB,YAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAA;QAGrD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;YAC/C,MAAM,IAAI,KAAK,CAAC,wBAAwB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;SAC/D;QAED,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YAClE,MAAM,IAAI,KAAK,CAAC,mCAAmC,YAAY,CAAC,MAAM,SAAS,CAAC,CAAA;SACjF;QAED,IAAI,CAAC,UAAU,GAAG,IAAA,YAAE,EAAC,YAAY,CAAC,UAAU,IAAI,UAAU,CAAC,CAAA;QAE3D,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,YAAY,CAAC,aAAa,EAAE;YACjE,IAAI,CAAC,MAAM,GAAG,IAAI,0BAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;SAC/D;QAED,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ,EAAE;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,2BAAiB,EAAE,CAAA;SACtC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,KAA0D,EAAE,GAAY;QAC9F,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,YAAE,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAA;QACjD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAClC,CAAC;CACF;AAED,kBAAe,WAAW,CAAA"}
@@ -7,6 +7,7 @@ class MemoryCacheEngine {
7
7
  get(key) {
8
8
  const item = this.cache[key];
9
9
  if (!item || item.expiresAt < Date.now()) {
10
+ this.del(key);
10
11
  return undefined;
11
12
  }
12
13
  return item.value;
@@ -20,6 +21,8 @@ class MemoryCacheEngine {
20
21
  clear() {
21
22
  this.cache = {};
22
23
  }
24
+ close() {
25
+ }
23
26
  }
24
27
  exports.default = MemoryCacheEngine;
25
28
  //# sourceMappingURL=MemoryCacheEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/MemoryCacheEngine.ts"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB;IAGrB;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,GAAG,CAAE,GAAW;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;YACxC,OAAO,SAAS,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,GAAG,CAAE,GAAW,EAAE,KAA0D,EAAE,GAAG,GAAG,QAAQ;QAC1F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;IAC1D,CAAC;IAED,GAAG,CAAE,GAAW;QAEd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;CACF;AAED,kBAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"MemoryCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/MemoryCacheEngine.ts"],"names":[],"mappings":";;AAEA,MAAM,iBAAiB;IAGrB;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,GAAG,CAAE,GAAW;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;YACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACb,OAAO,SAAS,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,GAAG,CAAE,GAAW,EAAE,KAA0D,EAAE,GAAG,GAAG,QAAQ;QAC1F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;IAC1D,CAAC;IAED,GAAG,CAAE,GAAW;QAEd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,KAAK;IAEL,CAAC;CACF;AAED,kBAAe,iBAAiB,CAAA"}
@@ -3,8 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const ioredis_1 = tslib_1.__importDefault(require("ioredis"));
5
5
  class RedisCacheEngine {
6
- constructor() {
7
- this.client = new ioredis_1.default();
6
+ constructor(options) {
7
+ if (!options.keyPrefix) {
8
+ options.keyPrefix = 'cache-mongoose:';
9
+ }
10
+ this.client = new ioredis_1.default(options);
8
11
  }
9
12
  async get(key) {
10
13
  const value = await this.client.get(key);
@@ -23,6 +26,9 @@ class RedisCacheEngine {
23
26
  async clear() {
24
27
  await this.client.flushdb();
25
28
  }
29
+ async close() {
30
+ await this.client.quit();
31
+ }
26
32
  }
27
33
  exports.default = RedisCacheEngine;
28
34
  //# sourceMappingURL=RedisCacheEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RedisCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":";;;AAAA,8DAA6B;AAM7B,MAAM,gBAAgB;IAGpB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAO,EAAE,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAiE,CAAA;IAC1F,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,KAAc,EAAE,GAAG,GAAG,QAAQ;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,eAAe,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IAC7B,CAAC;CACF;AAED,kBAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"RedisCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":";;;AAAA,8DAA6B;AAK7B,MAAM,gBAAgB;IAGpB,YAAa,OAAqB;QAChC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACtB,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAA;SACtC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAO,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAiE,CAAA;IAC1F,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,KAAc,EAAE,GAAG,GAAG,QAAQ;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,eAAe,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF;AAED,kBAAe,gBAAgB,CAAA"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=ICacheMongooseOptions.js.map
3
+ //# sourceMappingURL=ICacheOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICacheOptions.js","sourceRoot":"","sources":["../../../src/interfaces/ICacheOptions.ts"],"names":[],"mappings":""}
@@ -2,18 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const lodash_1 = tslib_1.__importDefault(require("lodash"));
5
- const ms_1 = tslib_1.__importDefault(require("ms"));
6
5
  const Cache_1 = tslib_1.__importDefault(require("./cache/Cache"));
7
6
  const crypto_1 = require("./crypto");
8
7
  class CacheMongoose {
9
8
  constructor() {
10
9
  }
11
- static init(mongoose, cacheMongooseOptions) {
10
+ static init(mongoose, cacheOptions) {
12
11
  if (typeof mongoose.Model.hydrate !== 'function')
13
12
  throw new Error('Cache is only compatible with versions of mongoose that implement the `model.hydrate` method');
14
13
  if (!this.instance) {
15
14
  this.instance = new CacheMongoose();
16
- this.instance.cache = new Cache_1.default(cacheMongooseOptions.engine, cacheMongooseOptions.defaultTTL = '1 minute');
15
+ this.instance.cache = new Cache_1.default(cacheOptions);
16
+ this.instance.cacheOptions = cacheOptions;
17
17
  const cache = this.instance.cache;
18
18
  const mongooseExec = mongoose.Query.prototype.exec;
19
19
  mongoose.Query.prototype.getCacheKey = function () {
@@ -40,12 +40,12 @@ class CacheMongoose {
40
40
  return this._ttl;
41
41
  };
42
42
  mongoose.Query.prototype.cache = function (ttl, customKey) {
43
- this._ttl = (0, ms_1.default)(ttl ?? '1 minute');
43
+ this._ttl = ttl;
44
44
  this._key = customKey;
45
45
  return this;
46
46
  };
47
47
  mongoose.Query.prototype.exec = async function () {
48
- if (!lodash_1.default.has(this, '_ttl')) {
48
+ if (!this._ttl) {
49
49
  return mongooseExec.apply(this);
50
50
  }
51
51
  const key = this.getCacheKey();
@@ -70,12 +70,16 @@ class CacheMongoose {
70
70
  }
71
71
  return this.instance;
72
72
  }
73
- async clearCache(customKey) {
73
+ async clear(customKey) {
74
74
  if (!customKey) {
75
- await this.cache.clear();
76
- return;
75
+ return this.cache.clear();
76
+ }
77
+ return this.cache.del(customKey);
78
+ }
79
+ async close() {
80
+ if (this.cacheOptions.engine === 'redis') {
81
+ await this.cache.close();
77
82
  }
78
- await this.cache.del(customKey);
79
83
  }
80
84
  }
81
85
  exports.default = CacheMongoose;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
- export declare const engines: readonly ["memory", "redis"];
2
- declare class Cache {
1
+ import type ICacheOptions from '../interfaces/ICacheOptions';
2
+ declare class CacheEngine {
3
3
  private engine;
4
4
  private defaultTTL;
5
- constructor(engineName: 'memory' | 'redis', defaultTTL: string);
5
+ private readonly engines;
6
+ constructor(cacheOptions: ICacheOptions);
6
7
  get(key: string): Promise<Record<string, unknown> | Record<string, unknown>[] | undefined>;
7
- set(key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: number): Promise<void>;
8
+ set(key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: string): Promise<void>;
8
9
  del(key: string): Promise<void>;
9
10
  clear(): Promise<void>;
11
+ close(): Promise<void>;
10
12
  }
11
- export default Cache;
13
+ export default CacheEngine;
12
14
  //# sourceMappingURL=Cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../../src/cache/Cache.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,OAAO,8BAA+B,CAAA;AAEnD,cAAM,KAAK;IACT,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAQ;gBAEb,UAAU,EAAE,QAAQ,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM;IAczD,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAI3F,GAAG,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1G,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAG9B;AAED,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../../src/cache/Cache.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,aAAa,MAAM,6BAA6B,CAAA;AAK5D,cAAM,WAAW;IACf,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;gBAE1C,YAAY,EAAE,aAAa;IAoBlC,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAI3F,GAAG,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1G,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAIvB,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAG9B;AAED,eAAe,WAAW,CAAA"}
@@ -6,6 +6,7 @@ declare class MemoryCacheEngine implements ICacheEngine {
6
6
  set(key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: number): void;
7
7
  del(key: string): void;
8
8
  clear(): void;
9
+ close(): void;
9
10
  }
10
11
  export default MemoryCacheEngine;
11
12
  //# sourceMappingURL=MemoryCacheEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryCacheEngine.d.ts","sourceRoot":"","sources":["../../../../../src/cache/engine/MemoryCacheEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAA;AAE7D,cAAM,iBAAkB,YAAW,YAAY;IAC7C,OAAO,CAAC,KAAK,CAA+G;;IAM5H,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS;IAQlF,GAAG,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,SAAW,GAAG,IAAI;IAInG,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKvB,KAAK,IAAK,IAAI;CAGf;AAED,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"MemoryCacheEngine.d.ts","sourceRoot":"","sources":["../../../../../src/cache/engine/MemoryCacheEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAA;AAE7D,cAAM,iBAAkB,YAAW,YAAY;IAC7C,OAAO,CAAC,KAAK,CAA+G;;IAM5H,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS;IASlF,GAAG,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,SAAW,GAAG,IAAI;IAInG,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKvB,KAAK,IAAK,IAAI;IAId,KAAK,IAAK,IAAI;CAGf;AAED,eAAe,iBAAiB,CAAA"}
@@ -1,11 +1,13 @@
1
+ import type { RedisOptions } from 'ioredis';
1
2
  import type ICacheEngine from '../../interfaces/ICacheEngine';
2
3
  declare class RedisCacheEngine implements ICacheEngine {
3
4
  private client;
4
- constructor();
5
+ constructor(options: RedisOptions);
5
6
  get(key: string): Promise<Record<string, unknown> | Record<string, unknown>[] | undefined>;
6
7
  set(key: string, value: unknown, ttl?: number): Promise<void>;
7
8
  del(key: string): Promise<void>;
8
9
  clear(): Promise<void>;
10
+ close(): Promise<void>;
9
11
  }
10
12
  export default RedisCacheEngine;
11
13
  //# sourceMappingURL=RedisCacheEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RedisCacheEngine.d.ts","sourceRoot":"","sources":["../../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAA;AAE7D,cAAM,gBAAiB,YAAW,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAO;;IAMf,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAQ3F,GAAG,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,SAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAG9B;AAED,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"RedisCacheEngine.d.ts","sourceRoot":"","sources":["../../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAA;AAE7D,cAAM,gBAAiB,YAAW,YAAY;IAC5C,OAAO,CAAC,MAAM,CAAO;gBAER,OAAO,EAAE,YAAY;IAO5B,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAQ3F,GAAG,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,SAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAIvB,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAG9B;AAED,eAAe,gBAAgB,CAAA"}
@@ -3,6 +3,7 @@ interface ICacheEngine {
3
3
  set: (key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: number) => Promise<void> | void;
4
4
  del: (key: string) => Promise<void> | void;
5
5
  clear: () => Promise<void> | void;
6
+ close: () => Promise<void> | void;
6
7
  }
7
8
  export default ICacheEngine;
8
9
  //# sourceMappingURL=ICacheEngine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ICacheEngine.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/ICacheEngine.ts"],"names":[],"mappings":"AAAA,UAAU,YAAY;IACpB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAAA;IAChK,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACpH,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC1C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAClC;AAED,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"ICacheEngine.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/ICacheEngine.ts"],"names":[],"mappings":"AAAA,UAAU,YAAY;IACpB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,SAAS,CAAA;IAChK,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACpH,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC1C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACjC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAClC;AAED,eAAe,YAAY,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { RedisOptions } from 'ioredis';
2
+ interface ICacheOptions {
3
+ engine: 'memory' | 'redis';
4
+ engineOptions?: RedisOptions;
5
+ defaultTTL?: string;
6
+ }
7
+ export default ICacheOptions;
8
+ //# sourceMappingURL=ICacheOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICacheOptions.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/ICacheOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,UAAU,aAAa;IACrB,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,eAAe,aAAa,CAAA"}
@@ -1,12 +1,12 @@
1
1
  import type { Mongoose } from 'mongoose';
2
- import type ICacheMongooseOptions from './interfaces/ICacheMongooseOptions';
2
+ import type ICacheOptions from './interfaces/ICacheOptions';
3
3
  declare module 'mongoose' {
4
4
  interface Query<ResultType, DocType, THelpers, RawDocType> {
5
- cache: (this: Query<ResultType, DocType, THelpers, RawDocType>, ttl?: string) => this;
5
+ cache: (this: Query<ResultType, DocType, THelpers, RawDocType>, ttl?: string, customKey?: string) => this;
6
6
  _key?: string;
7
7
  getCacheKey: (this: Query<ResultType, DocType, THelpers, RawDocType>) => string;
8
- _ttl: number;
9
- getCacheTTL: (this: Query<ResultType, DocType, THelpers, RawDocType>) => number;
8
+ _ttl?: string;
9
+ getCacheTTL: (this: Query<ResultType, DocType, THelpers, RawDocType>) => string | undefined;
10
10
  op?: string;
11
11
  _fields?: unknown;
12
12
  _path?: unknown;
@@ -16,9 +16,11 @@ declare module 'mongoose' {
16
16
  declare class CacheMongoose {
17
17
  private static instance;
18
18
  private cache;
19
+ private cacheOptions;
19
20
  private constructor();
20
- static init(mongoose: Mongoose, cacheMongooseOptions: ICacheMongooseOptions): CacheMongoose;
21
- clearCache(customKey: string): Promise<void>;
21
+ static init(mongoose: Mongoose, cacheOptions: ICacheOptions): CacheMongoose;
22
+ clear(customKey?: string): Promise<void>;
23
+ close(): Promise<void>;
22
24
  }
23
25
  export default CacheMongoose;
24
26
  //# sourceMappingURL=plugin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugin.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,qBAAqB,MAAM,oCAAoC,CAAA;AAG3E,OAAO,QAAQ,UAAU,CAAC;IACxB,UAAU,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU;QACvD,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;QACrF,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,MAAM,CAAA;QAC/E,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,MAAM,CAAA;QAC/E,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,SAAS,CAAC,EAAE,OAAO,CAAA;KACpB;CACF;AAED,cAAM,aAAa;IAEjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2B;IAClD,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO;WAKO,IAAI,CAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,qBAAqB,GAAG,aAAa;IAgFtF,UAAU,CAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO3D;AAED,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAG3D,OAAO,QAAQ,UAAU,CAAC;IACxB,UAAU,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU;QACvD,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;QACzG,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,MAAM,CAAA;QAC/E,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,MAAM,GAAG,SAAS,CAAA;QAC3F,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,SAAS,CAAC,EAAE,OAAO,CAAA;KACpB;CACF;AAED,cAAM,aAAa;IAEjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2B;IAClD,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO;WAKO,IAAI,CAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,GAAG,aAAa;IAiFtE,KAAK,CAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAKrC;AAED,eAAe,aAAa,CAAA"}
@@ -1,17 +1,20 @@
1
1
  import ms from 'ms';
2
2
  import MemoryCacheEngine from './engine/MemoryCacheEngine';
3
3
  import RedisCacheEngine from './engine/RedisCacheEngine';
4
- export const engines = ['memory', 'redis'];
5
- class Cache {
6
- constructor(engineName, defaultTTL) {
7
- if (!engines.includes(engineName)) {
8
- throw new Error(`Invalid engine name: ${engineName}`);
4
+ class CacheEngine {
5
+ constructor(cacheOptions) {
6
+ this.engines = ['memory', 'redis'];
7
+ if (!this.engines.includes(cacheOptions.engine)) {
8
+ throw new Error(`Invalid engine name: ${cacheOptions.engine}`);
9
9
  }
10
- this.defaultTTL = ms(defaultTTL);
11
- if (engineName === 'redis') {
12
- this.engine = new RedisCacheEngine();
10
+ if (cacheOptions.engine === 'redis' && !cacheOptions.engineOptions) {
11
+ throw new Error(`Engine options are required for ${cacheOptions.engine} engine`);
13
12
  }
14
- else {
13
+ this.defaultTTL = ms(cacheOptions.defaultTTL ?? '1 minute');
14
+ if (cacheOptions.engine === 'redis' && cacheOptions.engineOptions) {
15
+ this.engine = new RedisCacheEngine(cacheOptions.engineOptions);
16
+ }
17
+ if (cacheOptions.engine === 'memory') {
15
18
  this.engine = new MemoryCacheEngine();
16
19
  }
17
20
  }
@@ -19,7 +22,7 @@ class Cache {
19
22
  return await this.engine.get(key);
20
23
  }
21
24
  async set(key, value, ttl) {
22
- const actualTTL = ttl ?? this.defaultTTL;
25
+ const actualTTL = ttl ? ms(ttl) : this.defaultTTL;
23
26
  return await this.engine.set(key, value, actualTTL);
24
27
  }
25
28
  async del(key) {
@@ -28,6 +31,9 @@ class Cache {
28
31
  async clear() {
29
32
  return await this.engine.clear();
30
33
  }
34
+ async close() {
35
+ return await this.engine.close();
36
+ }
31
37
  }
32
- export default Cache;
38
+ export default CacheEngine;
33
39
  //# sourceMappingURL=Cache.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AAInB,OAAO,iBAAiB,MAAM,4BAA4B,CAAA;AAC1D,OAAO,gBAAgB,MAAM,2BAA2B,CAAA;AAExD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAA;AAEnD,MAAM,KAAK;IAIT,YAAa,UAA8B,EAAE,UAAkB;QAC7D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAA;SACtD;QAED,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,CAAA;QAEhC,IAAI,UAAU,KAAK,OAAO,EAAE;YAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAA;SACrC;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAA;SACtC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,KAA0D,EAAE,GAAY;QAC9F,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,CAAA;QACxC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAClC,CAAC;CACF;AAED,eAAe,KAAK,CAAA"}
1
+ {"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AAKnB,OAAO,iBAAiB,MAAM,4BAA4B,CAAA;AAC1D,OAAO,gBAAgB,MAAM,2BAA2B,CAAA;AAExD,MAAM,WAAW;IAKf,YAAa,YAA2B;QAFvB,YAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAA;QAGrD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;YAC/C,MAAM,IAAI,KAAK,CAAC,wBAAwB,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;SAC/D;QAED,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;YAClE,MAAM,IAAI,KAAK,CAAC,mCAAmC,YAAY,CAAC,MAAM,SAAS,CAAC,CAAA;SACjF;QAED,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,IAAI,UAAU,CAAC,CAAA;QAE3D,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,YAAY,CAAC,aAAa,EAAE;YACjE,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAgB,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;SAC/D;QAED,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ,EAAE;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAA;SACtC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,KAA0D,EAAE,GAAY;QAC9F,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAA;QACjD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IACrD,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAClC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAClC,CAAC;CACF;AAED,eAAe,WAAW,CAAA"}
@@ -5,6 +5,7 @@ class MemoryCacheEngine {
5
5
  get(key) {
6
6
  const item = this.cache[key];
7
7
  if (!item || item.expiresAt < Date.now()) {
8
+ this.del(key);
8
9
  return undefined;
9
10
  }
10
11
  return item.value;
@@ -18,6 +19,8 @@ class MemoryCacheEngine {
18
19
  clear() {
19
20
  this.cache = {};
20
21
  }
22
+ close() {
23
+ }
21
24
  }
22
25
  export default MemoryCacheEngine;
23
26
  //# sourceMappingURL=MemoryCacheEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/MemoryCacheEngine.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB;IAGrB;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,GAAG,CAAE,GAAW;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;YACxC,OAAO,SAAS,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,GAAG,CAAE,GAAW,EAAE,KAA0D,EAAE,GAAG,GAAG,QAAQ;QAC1F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;IAC1D,CAAC;IAED,GAAG,CAAE,GAAW;QAEd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;CACF;AAED,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"MemoryCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/MemoryCacheEngine.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB;IAGrB;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,GAAG,CAAE,GAAW;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;YACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACb,OAAO,SAAS,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,GAAG,CAAE,GAAW,EAAE,KAA0D,EAAE,GAAG,GAAG,QAAQ;QAC1F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAA;IAC1D,CAAC;IAED,GAAG,CAAE,GAAW;QAEd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,KAAK;IAEL,CAAC;CACF;AAED,eAAe,iBAAiB,CAAA"}
@@ -1,7 +1,10 @@
1
1
  import IORedis from 'ioredis';
2
2
  class RedisCacheEngine {
3
- constructor() {
4
- this.client = new IORedis();
3
+ constructor(options) {
4
+ if (!options.keyPrefix) {
5
+ options.keyPrefix = 'cache-mongoose:';
6
+ }
7
+ this.client = new IORedis(options);
5
8
  }
6
9
  async get(key) {
7
10
  const value = await this.client.get(key);
@@ -20,6 +23,9 @@ class RedisCacheEngine {
20
23
  async clear() {
21
24
  await this.client.flushdb();
22
25
  }
26
+ async close() {
27
+ await this.client.quit();
28
+ }
23
29
  }
24
30
  export default RedisCacheEngine;
25
31
  //# sourceMappingURL=RedisCacheEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RedisCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAM7B,MAAM,gBAAgB;IAGpB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,EAAE,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAiE,CAAA;IAC1F,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,KAAc,EAAE,GAAG,GAAG,QAAQ;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,eAAe,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IAC7B,CAAC;CACF;AAED,eAAe,gBAAgB,CAAA"}
1
+ {"version":3,"file":"RedisCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAK7B,MAAM,gBAAgB;IAGpB,YAAa,OAAqB;QAChC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACtB,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAA;SACtC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,SAAS,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAiE,CAAA;IAC1F,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,KAAc,EAAE,GAAG,GAAG,QAAQ;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,eAAe,CAAC,CAAA;IACtE,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF;AAED,eAAe,gBAAgB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ICacheOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICacheOptions.js","sourceRoot":"","sources":["../../../src/interfaces/ICacheOptions.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import _ from 'lodash';
2
- import ms from 'ms';
3
2
  import Cache from './cache/Cache';
4
3
  import { getKey } from './crypto';
5
4
  class CacheMongoose {
6
5
  constructor() {
7
6
  }
8
- static init(mongoose, cacheMongooseOptions) {
7
+ static init(mongoose, cacheOptions) {
9
8
  if (typeof mongoose.Model.hydrate !== 'function')
10
9
  throw new Error('Cache is only compatible with versions of mongoose that implement the `model.hydrate` method');
11
10
  if (!this.instance) {
12
11
  this.instance = new CacheMongoose();
13
- this.instance.cache = new Cache(cacheMongooseOptions.engine, cacheMongooseOptions.defaultTTL = '1 minute');
12
+ this.instance.cache = new Cache(cacheOptions);
13
+ this.instance.cacheOptions = cacheOptions;
14
14
  const cache = this.instance.cache;
15
15
  const mongooseExec = mongoose.Query.prototype.exec;
16
16
  mongoose.Query.prototype.getCacheKey = function () {
@@ -37,12 +37,12 @@ class CacheMongoose {
37
37
  return this._ttl;
38
38
  };
39
39
  mongoose.Query.prototype.cache = function (ttl, customKey) {
40
- this._ttl = ms(ttl ?? '1 minute');
40
+ this._ttl = ttl;
41
41
  this._key = customKey;
42
42
  return this;
43
43
  };
44
44
  mongoose.Query.prototype.exec = async function () {
45
- if (!_.has(this, '_ttl')) {
45
+ if (!this._ttl) {
46
46
  return mongooseExec.apply(this);
47
47
  }
48
48
  const key = this.getCacheKey();
@@ -67,12 +67,16 @@ class CacheMongoose {
67
67
  }
68
68
  return this.instance;
69
69
  }
70
- async clearCache(customKey) {
70
+ async clear(customKey) {
71
71
  if (!customKey) {
72
- await this.cache.clear();
73
- return;
72
+ return this.cache.clear();
73
+ }
74
+ return this.cache.del(customKey);
75
+ }
76
+ async close() {
77
+ if (this.cacheOptions.engine === 'redis') {
78
+ await this.cache.close();
74
79
  }
75
- await this.cache.del(customKey);
76
80
  }
77
81
  }
78
82
  export default CacheMongoose;