ts-cache-mongoose 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/cache/Cache.js.map +1 -1
  3. package/dist/cjs/cache/engine/MemoryCacheEngine.js.map +1 -1
  4. package/dist/cjs/cache/engine/RedisCacheEngine.js +13 -1
  5. package/dist/cjs/cache/engine/RedisCacheEngine.js.map +1 -1
  6. package/dist/cjs/extend/aggregate.js +3 -3
  7. package/dist/cjs/extend/aggregate.js.map +1 -1
  8. package/dist/cjs/extend/query.js +6 -8
  9. package/dist/cjs/extend/query.js.map +1 -1
  10. package/dist/cjs/interfaces/IData.js +3 -0
  11. package/dist/cjs/interfaces/IData.js.map +1 -0
  12. package/dist/cjs/types/cache/Cache.d.ts +2 -1
  13. package/dist/cjs/types/cache/Cache.d.ts.map +1 -1
  14. package/dist/cjs/types/cache/engine/MemoryCacheEngine.d.ts +3 -2
  15. package/dist/cjs/types/cache/engine/MemoryCacheEngine.d.ts.map +1 -1
  16. package/dist/cjs/types/cache/engine/RedisCacheEngine.d.ts +2 -1
  17. package/dist/cjs/types/cache/engine/RedisCacheEngine.d.ts.map +1 -1
  18. package/dist/cjs/types/extend/query.d.ts.map +1 -1
  19. package/dist/cjs/types/interfaces/ICacheEngine.d.ts +3 -2
  20. package/dist/cjs/types/interfaces/ICacheEngine.d.ts.map +1 -1
  21. package/dist/cjs/types/interfaces/IData.d.ts +3 -0
  22. package/dist/cjs/types/interfaces/IData.d.ts.map +1 -0
  23. package/dist/esm/cache/Cache.js.map +1 -1
  24. package/dist/esm/cache/engine/MemoryCacheEngine.js.map +1 -1
  25. package/dist/esm/cache/engine/RedisCacheEngine.js +13 -1
  26. package/dist/esm/cache/engine/RedisCacheEngine.js.map +1 -1
  27. package/dist/esm/extend/aggregate.js +3 -3
  28. package/dist/esm/extend/aggregate.js.map +1 -1
  29. package/dist/esm/extend/query.js +6 -8
  30. package/dist/esm/extend/query.js.map +1 -1
  31. package/dist/esm/interfaces/IData.js +2 -0
  32. package/dist/esm/interfaces/IData.js.map +1 -0
  33. package/dist/esm/types/cache/Cache.d.ts +2 -1
  34. package/dist/esm/types/cache/Cache.d.ts.map +1 -1
  35. package/dist/esm/types/cache/engine/MemoryCacheEngine.d.ts +3 -2
  36. package/dist/esm/types/cache/engine/MemoryCacheEngine.d.ts.map +1 -1
  37. package/dist/esm/types/cache/engine/RedisCacheEngine.d.ts +2 -1
  38. package/dist/esm/types/cache/engine/RedisCacheEngine.d.ts.map +1 -1
  39. package/dist/esm/types/extend/query.d.ts.map +1 -1
  40. package/dist/esm/types/interfaces/ICacheEngine.d.ts +3 -2
  41. package/dist/esm/types/interfaces/ICacheEngine.d.ts.map +1 -1
  42. package/dist/esm/types/interfaces/IData.d.ts +3 -0
  43. package/dist/esm/types/interfaces/IData.d.ts.map +1 -0
  44. package/package.json +1 -1
  45. package/src/cache/Cache.ts +2 -1
  46. package/src/cache/engine/MemoryCacheEngine.ts +4 -3
  47. package/src/cache/engine/RedisCacheEngine.ts +14 -2
  48. package/src/extend/aggregate.ts +3 -3
  49. package/src/extend/query.ts +7 -9
  50. package/src/interfaces/ICacheEngine.ts +4 -2
  51. package/src/interfaces/IData.ts +3 -0
  52. package/tests/cache-memory.test.ts +9 -3
  53. package/tests/cache-redis.test.ts +52 -5
  54. package/tests/interfaces/IStory.ts +8 -0
  55. package/tests/interfaces/IUser.ts +4 -0
  56. package/tests/models/Story.ts +4 -0
  57. package/tests/models/User.ts +4 -0
  58. package/tests/schemas/StorySchema.ts +18 -0
  59. package/tests/schemas/UserSchema.ts +6 -0
package/README.md CHANGED
@@ -70,11 +70,13 @@ import cache from 'ts-cache-mongoose'
70
70
 
71
71
  // In-memory example
72
72
  const cache = cache.init(mongoose, {
73
+ defaultTTL: '60 seconds',
73
74
  engine: 'memory',
74
75
  })
75
76
 
76
77
  // Redis example
77
78
  const cache = cache.init(mongoose, {
79
+ defaultTTL: '60 seconds',
78
80
  engine: 'redis',
79
81
  engineOptions: {
80
82
  host: 'localhost',
@@ -1 +1 @@
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,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,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,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;CACF;AAED,kBAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":";;;AAAA,oDAAmB;AAMnB,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,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,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,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;CACF;AAED,kBAAe,WAAW,CAAA"}
@@ -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,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"}
1
+ {"version":3,"file":"MemoryCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/MemoryCacheEngine.ts"],"names":[],"mappings":";;AAGA,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,KAAY,EAAE,GAAG,GAAG,QAAQ;QAC5C,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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const ioredis_1 = tslib_1.__importDefault(require("ioredis"));
5
+ const mongoose_1 = require("mongoose");
5
6
  class RedisCacheEngine {
6
7
  constructor(options) {
7
8
  if (!options.keyPrefix) {
@@ -14,7 +15,18 @@ class RedisCacheEngine {
14
15
  if (value === null) {
15
16
  return undefined;
16
17
  }
17
- return JSON.parse(value);
18
+ return JSON.parse(value, (_key, value) => {
19
+ if (typeof value === 'string') {
20
+ const dateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
21
+ if (dateRegex.test(value)) {
22
+ return new Date(value);
23
+ }
24
+ else if (mongoose_1.Types.ObjectId.isValid(value)) {
25
+ return new mongoose_1.Types.ObjectId(value);
26
+ }
27
+ }
28
+ return value;
29
+ });
18
30
  }
19
31
  async set(key, value, ttl = Infinity) {
20
32
  const serializedValue = JSON.stringify(value);
@@ -1 +1 @@
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
+ {"version":3,"file":"RedisCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":";;;AAAA,8DAA6B;AAC7B,uCAAgC;AAMhC,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,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,MAAM,SAAS,GAAG,+CAA+C,CAAA;gBACjE,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBACzB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;iBACvB;qBAAM,IAAI,gBAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACxC,OAAO,IAAI,gBAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;iBACjC;aACF;YACD,OAAO,KAAgB,CAAA;QACzB,CAAC,CAAiE,CAAA;IACpE,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"}
@@ -16,9 +16,9 @@ function extendQuery(mongoose, cache) {
16
16
  this._key = customKey;
17
17
  return this;
18
18
  };
19
- mongoose.Aggregate.prototype.exec = async function () {
19
+ mongoose.Aggregate.prototype.exec = async function (...args) {
20
20
  if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
21
- return mongooseExec.apply(this);
21
+ return mongooseExec.apply(this, args);
22
22
  }
23
23
  const key = this.getCacheKey();
24
24
  const ttl = this.getCacheTTL();
@@ -29,7 +29,7 @@ function extendQuery(mongoose, cache) {
29
29
  return resultCache;
30
30
  }
31
31
  const result = await mongooseExec.call(this);
32
- cache.set(key, result, ttl).catch((err) => {
32
+ await cache.set(key, result, ttl).catch((err) => {
33
33
  console.error(err);
34
34
  });
35
35
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/extend/aggregate.ts"],"names":[],"mappings":";;AAGA,gCAA+B;AAE/B,SAAwB,WAAW,CAAE,QAAkB,EAAE,KAAY;IAEnE,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAA;IAGtD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG;QACzC,OAAO,IAAA,YAAM,EAAC;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;SAC1B,CAAC,CAAA;IACJ,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG;QACzC,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAY,EAAE,SAAkB;QAC7E,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK;QACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YACvD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;SAChC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAE9B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACrD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,IAAI,WAAW,EAAE;YACf,OAAO,WAAW,CAAA;SACnB;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAwD,CAAA;QACnG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACxC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AA/CD,8BA+CC"}
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/extend/aggregate.ts"],"names":[],"mappings":";;AAGA,gCAA+B;AAE/B,SAAwB,WAAW,CAAE,QAAkB,EAAE,KAAY;IAEnE,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAA;IAGtD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG;QACzC,OAAO,IAAA,YAAM,EAAC;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;SAC1B,CAAC,CAAA;IACJ,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG;QACzC,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAY,EAAE,SAAkB;QAC7E,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,WAAW,GAAG,IAAQ;QAC7D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YACvD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SACtC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAE9B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACrD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,IAAI,WAAW,EAAE;YACf,OAAO,WAAW,CAAA;SACnB;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAwD,CAAA;QACnG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC;AA/CD,8BA+CC"}
@@ -32,9 +32,9 @@ function extendQuery(mongoose, cache) {
32
32
  this._key = customKey;
33
33
  return this;
34
34
  };
35
- mongoose.Query.prototype.exec = async function () {
35
+ mongoose.Query.prototype.exec = async function (...args) {
36
36
  if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
37
- return mongooseExec.apply(this);
37
+ return mongooseExec.apply(this, args);
38
38
  }
39
39
  const key = this.getCacheKey();
40
40
  const ttl = this.getCacheTTL();
@@ -46,23 +46,21 @@ function extendQuery(mongoose, cache) {
46
46
  console.error(err);
47
47
  });
48
48
  if (resultCache) {
49
- if (isCount || isDistinct) {
49
+ if (isCount || isDistinct || mongooseOptions.lean) {
50
50
  return resultCache;
51
51
  }
52
52
  const constructor = mongoose.model(model);
53
53
  if (Array.isArray(resultCache)) {
54
54
  return resultCache.map((item) => {
55
- const hydrated = constructor.hydrate(item);
56
- return mongooseOptions.lean ? hydrated.toObject() : hydrated;
55
+ return constructor.hydrate(item);
57
56
  });
58
57
  }
59
58
  else {
60
- const hydrated = constructor.hydrate(resultCache);
61
- return mongooseOptions.lean ? hydrated.toObject() : hydrated;
59
+ return constructor.hydrate(resultCache);
62
60
  }
63
61
  }
64
62
  const result = await mongooseExec.call(this);
65
- cache.set(key, result, ttl).catch((err) => {
63
+ await cache.set(key, result, ttl).catch((err) => {
66
64
  console.error(err);
67
65
  });
68
66
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/extend/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/extend/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IData.js","sourceRoot":"","sources":["../../../src/interfaces/IData.ts"],"names":[],"mappings":""}
@@ -1,10 +1,11 @@
1
+ import type IData from '../interfaces/IData';
1
2
  import type ICacheOptions from '../interfaces/ICacheOptions';
2
3
  declare class CacheEngine {
3
4
  private engine;
4
5
  private defaultTTL;
5
6
  private readonly engines;
6
7
  constructor(cacheOptions: ICacheOptions);
7
- get(key: string): Promise<Record<string, unknown> | Record<string, unknown>[] | undefined>;
8
+ get(key: string): Promise<IData>;
8
9
  set(key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: string): Promise<void>;
9
10
  del(key: string): Promise<void>;
10
11
  clear(): Promise<void>;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../../src/cache/Cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAE5C,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,KAAK,CAAC;IAIjC,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"}
@@ -1,9 +1,10 @@
1
+ import type IData from '../../interfaces/IData';
1
2
  import type ICacheEngine from '../../interfaces/ICacheEngine';
2
3
  declare class MemoryCacheEngine implements ICacheEngine {
3
4
  private cache;
4
5
  constructor();
5
- get(key: string): Record<string, unknown> | Record<string, unknown>[] | undefined;
6
- set(key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: number): void;
6
+ get(key: string): IData;
7
+ set(key: string, value: IData, ttl?: number): void;
7
8
  del(key: string): void;
8
9
  clear(): void;
9
10
  close(): void;
@@ -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;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
+ {"version":3,"file":"MemoryCacheEngine.d.ts","sourceRoot":"","sources":["../../../../../src/cache/engine/MemoryCacheEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAA;AAC/C,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAA;AAE7D,cAAM,iBAAkB,YAAW,YAAY;IAC7C,OAAO,CAAC,KAAK,CAAiE;;IAM9E,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,KAAK;IASxB,GAAG,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,SAAW,GAAG,IAAI;IAIrD,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKvB,KAAK,IAAK,IAAI;IAId,KAAK,IAAK,IAAI;CAGf;AAED,eAAe,iBAAiB,CAAA"}
@@ -1,9 +1,10 @@
1
1
  import type { RedisOptions } from 'ioredis';
2
+ import type IData from '../../interfaces/IData';
2
3
  import type ICacheEngine from '../../interfaces/ICacheEngine';
3
4
  declare class RedisCacheEngine implements ICacheEngine {
4
5
  private client;
5
6
  constructor(options: RedisOptions);
6
- get(key: string): Promise<Record<string, unknown> | Record<string, unknown>[] | undefined>;
7
+ get(key: string): Promise<IData>;
7
8
  set(key: string, value: unknown, ttl?: number): Promise<void>;
8
9
  del(key: string): Promise<void>;
9
10
  clear(): Promise<void>;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"RedisCacheEngine.d.ts","sourceRoot":"","sources":["../../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAA;AAC/C,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,KAAK,CAAC;IAkBjC,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/extend/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAIvC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAoF3E"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/extend/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAIvC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAkF3E"}
@@ -1,6 +1,7 @@
1
+ import type IData from './IData';
1
2
  interface ICacheEngine {
2
- get: (key: string) => Promise<Record<string, unknown> | Record<string, unknown>[] | undefined> | Record<string, unknown> | Record<string, unknown>[] | undefined;
3
- set: (key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: number) => Promise<void> | void;
3
+ get: (key: string) => Promise<IData> | IData;
4
+ set: (key: string, value: IData, ttl?: number) => Promise<void> | void;
4
5
  del: (key: string) => Promise<void> | void;
5
6
  clear: () => Promise<void> | void;
6
7
  close: () => Promise<void> | void;
@@ -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;IACjC,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,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAEhC,UAAU,YAAY;IACpB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;IAC5C,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACtE,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,3 @@
1
+ type IData = Record<string, unknown> | Record<string, unknown>[] | unknown[] | number | undefined;
2
+ export default IData;
3
+ //# sourceMappingURL=IData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IData.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/IData.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,GAAG,SAAS,CAAA;AAEjG,eAAe,KAAK,CAAA"}
@@ -1 +1 @@
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,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,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,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;CACF;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../../src/cache/Cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AAMnB,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,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,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,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,GAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;CACF;AAED,eAAe,WAAW,CAAA"}
@@ -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,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
+ {"version":3,"file":"MemoryCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/MemoryCacheEngine.ts"],"names":[],"mappings":"AAGA,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,KAAY,EAAE,GAAG,GAAG,QAAQ;QAC5C,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,4 +1,5 @@
1
1
  import IORedis from 'ioredis';
2
+ import { Types } from 'mongoose';
2
3
  class RedisCacheEngine {
3
4
  constructor(options) {
4
5
  if (!options.keyPrefix) {
@@ -11,7 +12,18 @@ class RedisCacheEngine {
11
12
  if (value === null) {
12
13
  return undefined;
13
14
  }
14
- return JSON.parse(value);
15
+ return JSON.parse(value, (_key, value) => {
16
+ if (typeof value === 'string') {
17
+ const dateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
18
+ if (dateRegex.test(value)) {
19
+ return new Date(value);
20
+ }
21
+ else if (Types.ObjectId.isValid(value)) {
22
+ return new Types.ObjectId(value);
23
+ }
24
+ }
25
+ return value;
26
+ });
15
27
  }
16
28
  async set(key, value, ttl = Infinity) {
17
29
  const serializedValue = JSON.stringify(value);
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"RedisCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAMhC,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,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,MAAM,SAAS,GAAG,+CAA+C,CAAA;gBACjE,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBACzB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;iBACvB;qBAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACxC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;iBACjC;aACF;YACD,OAAO,KAAgB,CAAA;QACzB,CAAC,CAAiE,CAAA;IACpE,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"}
@@ -14,9 +14,9 @@ export default function extendQuery(mongoose, cache) {
14
14
  this._key = customKey;
15
15
  return this;
16
16
  };
17
- mongoose.Aggregate.prototype.exec = async function () {
17
+ mongoose.Aggregate.prototype.exec = async function (...args) {
18
18
  if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
19
- return mongooseExec.apply(this);
19
+ return mongooseExec.apply(this, args);
20
20
  }
21
21
  const key = this.getCacheKey();
22
22
  const ttl = this.getCacheTTL();
@@ -27,7 +27,7 @@ export default function extendQuery(mongoose, cache) {
27
27
  return resultCache;
28
28
  }
29
29
  const result = await mongooseExec.call(this);
30
- cache.set(key, result, ttl).catch((err) => {
30
+ await cache.set(key, result, ttl).catch((err) => {
31
31
  console.error(err);
32
32
  });
33
33
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/extend/aggregate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,QAAkB,EAAE,KAAY;IAEnE,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAA;IAGtD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG;QACzC,OAAO,MAAM,CAAC;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;SAC1B,CAAC,CAAA;IACJ,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG;QACzC,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAY,EAAE,SAAkB;QAC7E,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK;QACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YACvD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;SAChC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAE9B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACrD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,IAAI,WAAW,EAAE;YACf,OAAO,WAAW,CAAA;SACnB;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAwD,CAAA;QACnG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACxC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/extend/aggregate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,QAAkB,EAAE,KAAY;IAEnE,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAA;IAGtD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG;QACzC,OAAO,MAAM,CAAC;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;SAC1B,CAAC,CAAA;IACJ,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG;QACzC,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAY,EAAE,SAAkB;QAC7E,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAGD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,WAAW,GAAG,IAAQ;QAC7D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YACvD,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;SACtC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QAE9B,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACrD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,IAAI,WAAW,EAAE;YACf,OAAO,WAAW,CAAA;SACnB;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAwD,CAAA;QACnG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC"}
@@ -30,9 +30,9 @@ export default function extendQuery(mongoose, cache) {
30
30
  this._key = customKey;
31
31
  return this;
32
32
  };
33
- mongoose.Query.prototype.exec = async function () {
33
+ mongoose.Query.prototype.exec = async function (...args) {
34
34
  if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
35
- return mongooseExec.apply(this);
35
+ return mongooseExec.apply(this, args);
36
36
  }
37
37
  const key = this.getCacheKey();
38
38
  const ttl = this.getCacheTTL();
@@ -44,23 +44,21 @@ export default function extendQuery(mongoose, cache) {
44
44
  console.error(err);
45
45
  });
46
46
  if (resultCache) {
47
- if (isCount || isDistinct) {
47
+ if (isCount || isDistinct || mongooseOptions.lean) {
48
48
  return resultCache;
49
49
  }
50
50
  const constructor = mongoose.model(model);
51
51
  if (Array.isArray(resultCache)) {
52
52
  return resultCache.map((item) => {
53
- const hydrated = constructor.hydrate(item);
54
- return mongooseOptions.lean ? hydrated.toObject() : hydrated;
53
+ return constructor.hydrate(item);
55
54
  });
56
55
  }
57
56
  else {
58
- const hydrated = constructor.hydrate(resultCache);
59
- return mongooseOptions.lean ? hydrated.toObject() : hydrated;
57
+ return constructor.hydrate(resultCache);
60
58
  }
61
59
  }
62
60
  const result = await mongooseExec.call(this);
63
- cache.set(key, result, ttl).catch((err) => {
61
+ await cache.set(key, result, ttl).catch((err) => {
64
62
  console.error(err);
65
63
  });
66
64
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/extend/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/extend/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IData.js","sourceRoot":"","sources":["../../../src/interfaces/IData.ts"],"names":[],"mappings":""}
@@ -1,10 +1,11 @@
1
+ import type IData from '../interfaces/IData';
1
2
  import type ICacheOptions from '../interfaces/ICacheOptions';
2
3
  declare class CacheEngine {
3
4
  private engine;
4
5
  private defaultTTL;
5
6
  private readonly engines;
6
7
  constructor(cacheOptions: ICacheOptions);
7
- get(key: string): Promise<Record<string, unknown> | Record<string, unknown>[] | undefined>;
8
+ get(key: string): Promise<IData>;
8
9
  set(key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: string): Promise<void>;
9
10
  del(key: string): Promise<void>;
10
11
  clear(): Promise<void>;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../../../src/cache/Cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAE5C,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,KAAK,CAAC;IAIjC,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"}
@@ -1,9 +1,10 @@
1
+ import type IData from '../../interfaces/IData';
1
2
  import type ICacheEngine from '../../interfaces/ICacheEngine';
2
3
  declare class MemoryCacheEngine implements ICacheEngine {
3
4
  private cache;
4
5
  constructor();
5
- get(key: string): Record<string, unknown> | Record<string, unknown>[] | undefined;
6
- set(key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: number): void;
6
+ get(key: string): IData;
7
+ set(key: string, value: IData, ttl?: number): void;
7
8
  del(key: string): void;
8
9
  clear(): void;
9
10
  close(): void;
@@ -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;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
+ {"version":3,"file":"MemoryCacheEngine.d.ts","sourceRoot":"","sources":["../../../../../src/cache/engine/MemoryCacheEngine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAA;AAC/C,OAAO,KAAK,YAAY,MAAM,+BAA+B,CAAA;AAE7D,cAAM,iBAAkB,YAAW,YAAY;IAC7C,OAAO,CAAC,KAAK,CAAiE;;IAM9E,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,KAAK;IASxB,GAAG,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,SAAW,GAAG,IAAI;IAIrD,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKvB,KAAK,IAAK,IAAI;IAId,KAAK,IAAK,IAAI;CAGf;AAED,eAAe,iBAAiB,CAAA"}
@@ -1,9 +1,10 @@
1
1
  import type { RedisOptions } from 'ioredis';
2
+ import type IData from '../../interfaces/IData';
2
3
  import type ICacheEngine from '../../interfaces/ICacheEngine';
3
4
  declare class RedisCacheEngine implements ICacheEngine {
4
5
  private client;
5
6
  constructor(options: RedisOptions);
6
- get(key: string): Promise<Record<string, unknown> | Record<string, unknown>[] | undefined>;
7
+ get(key: string): Promise<IData>;
7
8
  set(key: string, value: unknown, ttl?: number): Promise<void>;
8
9
  del(key: string): Promise<void>;
9
10
  clear(): Promise<void>;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"RedisCacheEngine.d.ts","sourceRoot":"","sources":["../../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAA;AAC/C,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,KAAK,CAAC;IAkBjC,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/extend/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAIvC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAoF3E"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/extend/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAIvC,MAAM,CAAC,OAAO,UAAU,WAAW,CAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAkF3E"}
@@ -1,6 +1,7 @@
1
+ import type IData from './IData';
1
2
  interface ICacheEngine {
2
- get: (key: string) => Promise<Record<string, unknown> | Record<string, unknown>[] | undefined> | Record<string, unknown> | Record<string, unknown>[] | undefined;
3
- set: (key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: number) => Promise<void> | void;
3
+ get: (key: string) => Promise<IData> | IData;
4
+ set: (key: string, value: IData, ttl?: number) => Promise<void> | void;
4
5
  del: (key: string) => Promise<void> | void;
5
6
  clear: () => Promise<void> | void;
6
7
  close: () => Promise<void> | void;
@@ -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;IACjC,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,OAAO,KAAK,KAAK,MAAM,SAAS,CAAA;AAEhC,UAAU,YAAY;IACpB,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;IAC5C,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACtE,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,3 @@
1
+ type IData = Record<string, unknown> | Record<string, unknown>[] | unknown[] | number | undefined;
2
+ export default IData;
3
+ //# sourceMappingURL=IData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IData.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/IData.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,GAAG,SAAS,CAAA;AAEjG,eAAe,KAAK,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-cache-mongoose",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Cache plugin for mongoose Queries and Aggregate (in-memory, redis)",
5
5
  "author": "Alex Eagle",
6
6
  "license": "MIT",
@@ -1,5 +1,6 @@
1
1
  import ms from 'ms'
2
2
 
3
+ import type IData from '../interfaces/IData'
3
4
  import type ICacheEngine from '../interfaces/ICacheEngine'
4
5
  import type ICacheOptions from '../interfaces/ICacheOptions'
5
6
 
@@ -31,7 +32,7 @@ class CacheEngine {
31
32
  }
32
33
  }
33
34
 
34
- async get (key: string): Promise<Record<string, unknown> | Record<string, unknown>[] | undefined> {
35
+ async get (key: string): Promise<IData> {
35
36
  return this.engine.get(key)
36
37
  }
37
38
 
@@ -1,13 +1,14 @@
1
+ import type IData from '../../interfaces/IData'
1
2
  import type ICacheEngine from '../../interfaces/ICacheEngine'
2
3
 
3
4
  class MemoryCacheEngine implements ICacheEngine {
4
- private cache: Record<string, { value: Record<string, unknown> | Record<string, unknown>[], expiresAt: number } | undefined>
5
+ private cache: Record<string, { value: IData, expiresAt: number } | undefined>
5
6
 
6
7
  constructor () {
7
8
  this.cache = {}
8
9
  }
9
10
 
10
- get (key: string): Record<string, unknown> | Record<string, unknown>[] | undefined {
11
+ get (key: string): IData {
11
12
  const item = this.cache[key]
12
13
  if (!item || item.expiresAt < Date.now()) {
13
14
  this.del(key)
@@ -16,7 +17,7 @@ class MemoryCacheEngine implements ICacheEngine {
16
17
  return item.value
17
18
  }
18
19
 
19
- set (key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl = Infinity): void {
20
+ set (key: string, value: IData, ttl = Infinity): void {
20
21
  this.cache[key] = { value, expiresAt: Date.now() + ttl }
21
22
  }
22
23
 
@@ -1,6 +1,8 @@
1
1
  import IORedis from 'ioredis'
2
+ import { Types } from 'mongoose'
2
3
 
3
4
  import type { Redis, RedisOptions } from 'ioredis'
5
+ import type IData from '../../interfaces/IData'
4
6
  import type ICacheEngine from '../../interfaces/ICacheEngine'
5
7
 
6
8
  class RedisCacheEngine implements ICacheEngine {
@@ -13,12 +15,22 @@ class RedisCacheEngine implements ICacheEngine {
13
15
  this.client = new IORedis(options)
14
16
  }
15
17
 
16
- async get (key: string): Promise<Record<string, unknown> | Record<string, unknown>[] | undefined> {
18
+ async get (key: string): Promise<IData> {
17
19
  const value = await this.client.get(key)
18
20
  if (value === null) {
19
21
  return undefined
20
22
  }
21
- return JSON.parse(value) as Promise<Record<string, unknown> | Record<string, unknown>[]>
23
+ return JSON.parse(value, (_key, value) => {
24
+ if (typeof value === 'string') {
25
+ const dateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/
26
+ if (dateRegex.test(value)) {
27
+ return new Date(value)
28
+ } else if (Types.ObjectId.isValid(value)) {
29
+ return new Types.ObjectId(value)
30
+ }
31
+ }
32
+ return value as unknown
33
+ }) as Promise<Record<string, unknown> | Record<string, unknown>[]>
22
34
  }
23
35
 
24
36
  async set (key: string, value: unknown, ttl = Infinity): Promise<void> {
@@ -27,9 +27,9 @@ export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
27
27
  }
28
28
 
29
29
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
30
- mongoose.Aggregate.prototype.exec = async function () {
30
+ mongoose.Aggregate.prototype.exec = async function (...args: []) {
31
31
  if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
32
- return mongooseExec.apply(this)
32
+ return mongooseExec.apply(this, args)
33
33
  }
34
34
 
35
35
  const key = this.getCacheKey()
@@ -44,7 +44,7 @@ export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
44
44
  }
45
45
 
46
46
  const result = await mongooseExec.call(this) as Record<string, unknown>[] | Record<string, unknown>
47
- cache.set(key, result, ttl).catch((err) => {
47
+ await cache.set(key, result, ttl).catch((err) => {
48
48
  console.error(err)
49
49
  })
50
50
 
@@ -44,10 +44,10 @@ export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
44
44
  return this
45
45
  }
46
46
 
47
- // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
48
- mongoose.Query.prototype.exec = async function () {
47
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type, sonarjs/cognitive-complexity
48
+ mongoose.Query.prototype.exec = async function (...args: []) {
49
49
  if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
50
- return mongooseExec.apply(this)
50
+ return mongooseExec.apply(this, args)
51
51
  }
52
52
 
53
53
  const key = this.getCacheKey()
@@ -63,7 +63,7 @@ export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
63
63
  })
64
64
 
65
65
  if (resultCache) {
66
- if (isCount || isDistinct) {
66
+ if (isCount || isDistinct || mongooseOptions.lean) {
67
67
  return resultCache
68
68
  }
69
69
 
@@ -71,17 +71,15 @@ export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
71
71
 
72
72
  if (Array.isArray(resultCache)) {
73
73
  return resultCache.map((item) => {
74
- const hydrated = constructor.hydrate(item)
75
- return mongooseOptions.lean ? hydrated.toObject() : hydrated
74
+ return constructor.hydrate(item)
76
75
  })
77
76
  } else {
78
- const hydrated = constructor.hydrate(resultCache)
79
- return mongooseOptions.lean ? hydrated.toObject() : hydrated
77
+ return constructor.hydrate(resultCache)
80
78
  }
81
79
  }
82
80
 
83
81
  const result = await mongooseExec.call(this) as Record<string, unknown>[] | Record<string, unknown>
84
- cache.set(key, result, ttl).catch((err) => {
82
+ await cache.set(key, result, ttl).catch((err) => {
85
83
  console.error(err)
86
84
  })
87
85
 
@@ -1,6 +1,8 @@
1
+ import type IData from './IData'
2
+
1
3
  interface ICacheEngine {
2
- get: (key: string) => Promise<Record<string, unknown> | Record<string, unknown>[] | undefined> | Record<string, unknown> | Record<string, unknown>[] | undefined
3
- set: (key: string, value: Record<string, unknown> | Record<string, unknown>[], ttl?: number) => Promise<void> | void
4
+ get: (key: string) => Promise<IData> | IData
5
+ set: (key: string, value: IData, ttl?: number) => Promise<void> | void
4
6
  del: (key: string) => Promise<void> | void
5
7
  clear: () => Promise<void> | void
6
8
  close: () => Promise<void> | void
@@ -0,0 +1,3 @@
1
+ type IData = Record<string, unknown> | Record<string, unknown>[] | unknown[] | number | undefined
2
+
3
+ export default IData
@@ -137,7 +137,10 @@ describe('CacheMongoose', () => {
137
137
  const user = await User.findById(john._id).cache('1 minute').exec()
138
138
  const cachedUser = await User.findById(john._id).cache('1 minute').exec()
139
139
 
140
- expect(user).toEqual(cachedUser)
140
+ expect(user?._id).toEqual(cachedUser?._id)
141
+ expect(user?.name).toEqual(cachedUser?.name)
142
+ expect(user?.createdAt).toEqual(cachedUser?.createdAt)
143
+ expect(user?.updatedAt).toEqual(cachedUser?.updatedAt)
141
144
  })
142
145
 
143
146
  it('findOne', async () => {
@@ -145,7 +148,10 @@ describe('CacheMongoose', () => {
145
148
  await User.create({ name: 'Steve', age: 30, role: 'admin' })
146
149
  const cachedUser = await User.findOne({ name: 'John', age: 30, role: 'admin' }).cache('1 minute').exec()
147
150
 
148
- expect(user).toEqual(cachedUser)
151
+ expect(user?._id).toEqual(cachedUser?._id)
152
+ expect(user?.name).toEqual(cachedUser?.name)
153
+ expect(user?.createdAt).toEqual(cachedUser?.createdAt)
154
+ expect(user?.updatedAt).toEqual(cachedUser?.updatedAt)
149
155
  })
150
156
 
151
157
  it('find', async () => {
@@ -153,7 +159,7 @@ describe('CacheMongoose', () => {
153
159
  await User.create({ name: 'Steve', age: 30, role: 'admin' })
154
160
  const cachedUsers = await User.find({ age: { $gte: 30 } }).cache('1 minute').exec()
155
161
 
156
- expect(users).toEqual(cachedUsers)
162
+ expect(users).toHaveLength(cachedUsers.length)
157
163
  })
158
164
 
159
165
  it('count', async () => {
@@ -1,13 +1,13 @@
1
- import mongoose, { model } from 'mongoose'
2
- import CacheMongoose from '../src/plugin'
1
+ import mongoose from 'mongoose'
2
+ import plugin from '../src/plugin'
3
3
 
4
- import UserSchema from './schemas/UserSchema'
4
+ import User from './models/User'
5
+ import Story from './models/Story'
5
6
 
6
7
  describe('cache redis', () => {
7
8
  const uri = `${globalThis.__MONGO_URI__}${globalThis.__MONGO_DB_NAME__}`
8
- const User = model('User', UserSchema)
9
9
 
10
- const cache = CacheMongoose.init(mongoose, {
10
+ const cache = plugin.init(mongoose, {
11
11
  engine: 'redis',
12
12
  engineOptions: {
13
13
  host: 'localhost',
@@ -28,6 +28,7 @@ describe('cache redis', () => {
28
28
 
29
29
  beforeEach(async () => {
30
30
  await mongoose.connection.collection('users').deleteMany({})
31
+ await mongoose.connection.collection('stories').deleteMany({})
31
32
  })
32
33
 
33
34
  it('should use cache', async () => {
@@ -264,4 +265,50 @@ describe('cache redis', () => {
264
265
  expect(cache6).toBeNull()
265
266
  expect(cache5).toEqual(cache6)
266
267
  })
268
+
269
+ it('should distinct("_id") and distinct("role") and distinct("createdAt")', async () => {
270
+ await User.create({ name: 'i', role: 'admin' })
271
+ await User.create({ name: 'p', role: 'user' })
272
+ await User.create({ name: 'm', role: 'user' })
273
+
274
+ const cache1 = await User.distinct('_id').cache('30 seconds').exec()
275
+ expect(cache1).not.toBeNull()
276
+ expect(cache1?.length).toBe(3)
277
+
278
+ const cache2 = await User.distinct('_id').cache('30 seconds').exec()
279
+ expect(cache2).not.toBeNull()
280
+ expect(cache2?.length).toBe(3)
281
+
282
+ const cache4 = await User.distinct('role').cache('30 seconds').exec()
283
+ expect(cache4).not.toBeNull()
284
+ expect(cache4?.length).toBe(2)
285
+
286
+ const cache5 = await User.distinct('role').cache('30 seconds').exec()
287
+ expect(cache5).not.toBeNull()
288
+ expect(cache5?.length).toBe(2)
289
+
290
+ const cache6 = await User.distinct('createdAt').cache('30 seconds').exec()
291
+ expect(cache6).not.toBeNull()
292
+ expect(cache6?.length).toBe(3)
293
+ const cache7 = await User.distinct('createdAt').cache('30 seconds').exec()
294
+
295
+ expect(cache1).toEqual(cache2)
296
+ expect(cache4).toEqual(cache5)
297
+ expect(cache6).toEqual(cache7)
298
+ })
299
+
300
+ it('should test exceptions', async () => {
301
+ const user = await User.create({ name: 'i', role: 'admin' })
302
+ const story1 = await Story.create({ title: '1', userId: user._id })
303
+ const story2 = await Story.create({ title: '2', userId: user._id })
304
+
305
+ const cache1 = await User.findOne({ name: 'i' }).populate({ path: 'stories' }).lean().cache('30 seconds').exec()
306
+ const cache2 = await User.findOne({ name: 'i' }).populate({ path: 'stories' }).lean().cache('30 seconds').exec()
307
+ expect(cache1).not.toBeNull()
308
+ expect(cache1?.stories).not.toBeNull()
309
+ expect(cache1?.stories?.length).toBe(2)
310
+ expect(cache1?.stories?.[0]._id).toEqual(story1._id)
311
+ expect(cache1?.stories?.[1]._id).toEqual(story2._id)
312
+ expect(cache1).toEqual(cache2)
313
+ })
267
314
  })
@@ -0,0 +1,8 @@
1
+ import type { Types } from 'mongoose'
2
+
3
+ interface IStory {
4
+ userId: Types.ObjectId
5
+ title: string
6
+ }
7
+
8
+ export default IStory
@@ -1,9 +1,13 @@
1
+ import type { HydratedDocument } from 'mongoose'
2
+ import type IStory from './IStory'
3
+
1
4
  interface IUser {
2
5
  name: string
3
6
  role: string
4
7
  age?: number
5
8
  createdAt?: Date
6
9
  updatedAt?: Date
10
+ stories?: HydratedDocument<IStory>[]
7
11
  }
8
12
 
9
13
  export default IUser
@@ -0,0 +1,4 @@
1
+ import { model } from 'mongoose'
2
+ import StorySchema from '../schemas/StorySchema'
3
+
4
+ export default model('Story', StorySchema)
@@ -0,0 +1,4 @@
1
+ import { model } from 'mongoose'
2
+ import UserSchema from '../schemas/UserSchema'
3
+
4
+ export default model('User', UserSchema)
@@ -0,0 +1,18 @@
1
+ import { Schema } from 'mongoose'
2
+
3
+ import type IStory from '../interfaces/IStory'
4
+
5
+ const UserSchema = new Schema<IStory>({
6
+ userId: {
7
+ type: Schema.Types.ObjectId,
8
+ ref: 'User',
9
+ required: true,
10
+ index: true
11
+ },
12
+ title: {
13
+ type: String,
14
+ required: true
15
+ }
16
+ }, { timestamps: true })
17
+
18
+ export default UserSchema
@@ -16,4 +16,10 @@ const UserSchema = new Schema<IUser>({
16
16
  }
17
17
  }, { timestamps: true })
18
18
 
19
+ UserSchema.virtual('stories', {
20
+ ref: 'Story',
21
+ localField: '_id',
22
+ foreignField: 'userId'
23
+ })
24
+
19
25
  export default UserSchema