ts-cache-mongoose 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +5 -3
  2. package/dist/cjs/crypto.js +7 -20
  3. package/dist/cjs/crypto.js.map +1 -1
  4. package/dist/cjs/extend/aggregate.js +41 -0
  5. package/dist/cjs/extend/aggregate.js.map +1 -0
  6. package/dist/cjs/extend/query.js +64 -0
  7. package/dist/cjs/extend/query.js.map +1 -0
  8. package/dist/cjs/plugin.js +10 -61
  9. package/dist/cjs/plugin.js.map +1 -1
  10. package/dist/cjs/types/crypto.d.ts +0 -1
  11. package/dist/cjs/types/crypto.d.ts.map +1 -1
  12. package/dist/cjs/types/extend/aggregate.d.ts +4 -0
  13. package/dist/cjs/types/extend/aggregate.d.ts.map +1 -0
  14. package/dist/cjs/types/extend/query.d.ts +4 -0
  15. package/dist/cjs/types/extend/query.d.ts.map +1 -0
  16. package/dist/cjs/types/plugin.d.ts +9 -2
  17. package/dist/cjs/types/plugin.d.ts.map +1 -1
  18. package/dist/esm/crypto.js +6 -18
  19. package/dist/esm/crypto.js.map +1 -1
  20. package/dist/esm/extend/aggregate.js +37 -0
  21. package/dist/esm/extend/aggregate.js.map +1 -0
  22. package/dist/esm/extend/query.js +60 -0
  23. package/dist/esm/extend/query.js.map +1 -0
  24. package/dist/esm/plugin.js.map +1 -1
  25. package/dist/esm/plugin.mjs +10 -61
  26. package/dist/esm/types/crypto.d.ts +0 -1
  27. package/dist/esm/types/crypto.d.ts.map +1 -1
  28. package/dist/esm/types/extend/aggregate.d.ts +4 -0
  29. package/dist/esm/types/extend/aggregate.d.ts.map +1 -0
  30. package/dist/esm/types/extend/query.d.ts +4 -0
  31. package/dist/esm/types/extend/query.d.ts.map +1 -0
  32. package/dist/esm/types/plugin.d.ts +9 -2
  33. package/dist/esm/types/plugin.d.ts.map +1 -1
  34. package/package.json +5 -4
  35. package/src/crypto.ts +6 -23
  36. package/src/extend/aggregate.ts +55 -0
  37. package/src/extend/query.ts +80 -0
  38. package/src/plugin.ts +20 -79
  39. package/tests/cache-memory.test.ts +118 -0
  40. package/tests/{cache.test.ts → cache-redis.test.ts} +41 -28
  41. package/tests/crypto.test.ts +33 -8
package/README.md CHANGED
@@ -21,8 +21,9 @@ 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
- This is initial prerelease of the plugin, so it may contain bugs
25
- Work in progress...
24
+ ⚠️ This is initial prerelease of the plugin, so it may contain bugs
25
+ \
26
+ 🛠️ Work in progress...
26
27
 
27
28
  ## Features
28
29
 
@@ -33,7 +34,8 @@ Work in progress...
33
34
  - [x] Cache key generation
34
35
  - [x] Cache key prefix
35
36
  - [x] Query caching support
36
- - [ ] Aggregate caching support
37
+ - [x] Aggregate caching support
38
+ - [ ] More tests
37
39
 
38
40
  ## Installation
39
41
 
@@ -1,28 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getKey = exports.sortDeep = void 0;
3
+ exports.getKey = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const lodash_1 = tslib_1.__importDefault(require("lodash"));
6
5
  const crypto_1 = require("crypto");
7
- function sortDeep(data) {
8
- if (lodash_1.default.isObjectLike(data) && lodash_1.default.isArray(data)) {
9
- return data.map(sortDeep);
10
- }
11
- if (lodash_1.default.isObjectLike(data) && !lodash_1.default.isArray(data)) {
12
- const sortedKeys = lodash_1.default.keys(data).sort((a, b) => a.localeCompare(b));
13
- const sortedObj = {};
14
- sortedKeys.forEach((key) => {
15
- sortedObj[key] = sortDeep(data[key]);
16
- });
17
- return sortedObj;
18
- }
19
- return data;
20
- }
21
- exports.sortDeep = sortDeep;
6
+ const sort_keys_1 = tslib_1.__importDefault(require("sort-keys"));
22
7
  function getKey(data) {
23
- const sortedObj = sortDeep(data);
24
- const sortedStr = JSON.stringify(sortedObj);
25
- return (0, crypto_1.createHash)('sha256').update(sortedStr).digest('hex');
8
+ const sortedObj = (0, sort_keys_1.default)(data, { deep: true });
9
+ const sortedStr = JSON.stringify(sortedObj, (_key, val) => {
10
+ return val instanceof RegExp ? String(val) : val;
11
+ });
12
+ return (0, crypto_1.createHash)('sha1').update(sortedStr).digest('hex');
26
13
  }
27
14
  exports.getKey = getKey;
28
15
  //# sourceMappingURL=crypto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":";;;;AAAA,4DAAsB;AACtB,mCAAmC;AAEnC,SAAgB,QAAQ,CAAE,IAAyD;IACjF,IAAI,gBAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,gBAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;KAC1B;IAED,IAAI,gBAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC5C,MAAM,UAAU,GAAG,gBAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QAClE,MAAM,SAAS,GAA4B,EAAE,CAAA;QAE7C,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAwD,CAAC,CAAA;QAC7F,CAAC,CAAC,CAAA;QAEF,OAAO,SAAS,CAAA;KACjB;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAjBD,4BAiBC;AAED,SAAgB,MAAM,CAAE,IAAyD;IAC/E,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IAC3C,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC7D,CAAC;AAJD,wBAIC"}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":";;;;AAAA,mCAAmC;AACnC,kEAAgC;AAEhC,SAAgB,MAAM,CAAE,IAAyD;IAC/E,MAAM,SAAS,GAAG,IAAA,mBAAQ,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAY,EAAE,EAAE;QACjE,OAAO,GAAG,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClD,CAAC,CAAC,CAAA;IACF,OAAO,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC;AAND,wBAMC"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
5
+ const crypto_1 = require("../crypto");
6
+ function extendQuery(mongoose, cache) {
7
+ const mongooseExec = mongoose.Aggregate.prototype.exec;
8
+ mongoose.Aggregate.prototype.getCacheKey = function () {
9
+ return (0, crypto_1.getKey)({
10
+ pipeline: this.pipeline()
11
+ });
12
+ };
13
+ mongoose.Aggregate.prototype.getCacheTTL = function () {
14
+ return this._ttl;
15
+ };
16
+ mongoose.Aggregate.prototype.cache = function (ttl, customKey) {
17
+ this._ttl = ttl;
18
+ this._key = customKey;
19
+ return this;
20
+ };
21
+ mongoose.Aggregate.prototype.exec = async function () {
22
+ if (!lodash_1.default.has(this, '_ttl')) {
23
+ return mongooseExec.apply(this);
24
+ }
25
+ const key = this.getCacheKey();
26
+ const ttl = this.getCacheTTL();
27
+ const resultCache = await cache.get(key).catch((err) => {
28
+ console.error(err);
29
+ });
30
+ if (resultCache) {
31
+ return resultCache;
32
+ }
33
+ const result = await mongooseExec.call(this);
34
+ cache.set(key, result, ttl).catch((err) => {
35
+ console.error(err);
36
+ });
37
+ return result;
38
+ };
39
+ }
40
+ exports.default = extendQuery;
41
+ //# sourceMappingURL=aggregate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/extend/aggregate.ts"],"names":[],"mappings":";;;AAAA,4DAAsB;AAKtB,sCAAkC;AAElC,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,eAAM,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,gBAAC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YACxB,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"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
5
+ const crypto_1 = require("../crypto");
6
+ function extendQuery(mongoose, cache) {
7
+ const mongooseExec = mongoose.Query.prototype.exec;
8
+ mongoose.Query.prototype.getCacheKey = function () {
9
+ if (this._key)
10
+ return this._key;
11
+ const filter = this.getFilter();
12
+ const update = this.getUpdate();
13
+ const options = this.getOptions();
14
+ const mongooseOptions = this.mongooseOptions();
15
+ const data = {
16
+ model: this.model.modelName,
17
+ op: this.op,
18
+ filter,
19
+ update,
20
+ options,
21
+ mongooseOptions,
22
+ _path: this._path,
23
+ _fields: this._fields,
24
+ _distinct: this._distinct,
25
+ _conditions: this._conditions
26
+ };
27
+ return (0, crypto_1.getKey)(data);
28
+ };
29
+ mongoose.Query.prototype.getCacheTTL = function () {
30
+ return this._ttl;
31
+ };
32
+ mongoose.Query.prototype.cache = function (ttl, customKey) {
33
+ this._ttl = ttl;
34
+ this._key = customKey;
35
+ return this;
36
+ };
37
+ mongoose.Query.prototype.exec = async function () {
38
+ if (!lodash_1.default.has(this, '_ttl')) {
39
+ return mongooseExec.apply(this);
40
+ }
41
+ const key = this.getCacheKey();
42
+ const ttl = this.getCacheTTL();
43
+ const model = this.model.modelName;
44
+ const resultCache = await cache.get(key).catch((err) => {
45
+ console.error(err);
46
+ });
47
+ if (resultCache) {
48
+ const constructor = mongoose.model(model);
49
+ if (lodash_1.default.isArray(resultCache)) {
50
+ return resultCache.map((item) => constructor.hydrate(item));
51
+ }
52
+ else {
53
+ return constructor.hydrate(resultCache);
54
+ }
55
+ }
56
+ const result = await mongooseExec.call(this);
57
+ cache.set(key, result, ttl).catch((err) => {
58
+ console.error(err);
59
+ });
60
+ return result;
61
+ };
62
+ }
63
+ exports.default = extendQuery;
64
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/extend/query.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- const lodash_1 = tslib_1.__importDefault(require("lodash"));
5
4
  const Cache_1 = tslib_1.__importDefault(require("./cache/Cache"));
6
- const crypto_1 = require("./crypto");
5
+ const query_1 = tslib_1.__importDefault(require("./extend/query"));
6
+ const aggregate_1 = tslib_1.__importDefault(require("./extend/aggregate"));
7
7
  class CacheMongoose {
8
8
  constructor() {
9
9
  }
@@ -13,73 +13,22 @@ class CacheMongoose {
13
13
  if (!this.instance) {
14
14
  this.instance = new CacheMongoose();
15
15
  this.instance.cache = new Cache_1.default(cacheOptions);
16
- this.instance.cacheOptions = cacheOptions;
17
16
  const cache = this.instance.cache;
18
- const mongooseExec = mongoose.Query.prototype.exec;
19
- mongoose.Query.prototype.getCacheKey = function () {
20
- if (this._key)
21
- return this._key;
22
- const filter = this.getFilter();
23
- const update = this.getUpdate();
24
- const options = this.getOptions();
25
- const data = {
26
- model: this.model.modelName,
27
- op: this.op,
28
- filter,
29
- update,
30
- skip: options.skip,
31
- limit: options.limit,
32
- sort: options.sort,
33
- _fields: this._fields,
34
- _path: this._path,
35
- _distinct: this._distinct
36
- };
37
- return (0, crypto_1.getKey)(data);
38
- };
39
- mongoose.Query.prototype.getCacheTTL = function () {
40
- return this._ttl;
41
- };
42
- mongoose.Query.prototype.cache = function (ttl, customKey) {
43
- this._ttl = ttl;
44
- this._key = customKey;
45
- return this;
46
- };
47
- mongoose.Query.prototype.exec = async function () {
48
- if (!this._ttl) {
49
- return mongooseExec.apply(this);
50
- }
51
- const key = this.getCacheKey();
52
- const ttl = this.getCacheTTL();
53
- const model = this.model.modelName;
54
- const resultCache = await cache.get(key);
55
- if (resultCache) {
56
- const constructor = mongoose.model(model);
57
- if (lodash_1.default.isArray(resultCache)) {
58
- return resultCache.map((item) => constructor.hydrate(item));
59
- }
60
- else {
61
- return constructor.hydrate(resultCache);
62
- }
63
- }
64
- const result = await mongooseExec.call(this);
65
- cache.set(key, result, ttl).catch((err) => {
66
- console.error(err);
67
- });
68
- return result;
69
- };
17
+ (0, query_1.default)(mongoose, cache);
18
+ (0, aggregate_1.default)(mongoose, cache);
70
19
  }
71
20
  return this.instance;
72
21
  }
73
22
  async clear(customKey) {
74
- if (!customKey) {
75
- return this.cache.clear();
23
+ if (customKey) {
24
+ await this.cache.del(customKey);
25
+ }
26
+ else {
27
+ await this.cache.clear();
76
28
  }
77
- return this.cache.del(customKey);
78
29
  }
79
30
  async close() {
80
- if (this.cacheOptions.engine === 'redis') {
81
- await this.cache.close();
82
- }
31
+ await this.cache.close();
83
32
  }
84
33
  }
85
34
  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":";;;AAAA,kEAAiC;AAKjC,mEAAwC;AACxC,2EAAgD;AAyBhD,MAAM,aAAa;IAKjB;IAEA,CAAC;IAEM,MAAM,CAAC,IAAI,CAAE,QAAkB,EAAE,YAA2B;QACjE,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAA;QACjK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;YACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,eAAK,CAAC,YAAY,CAAC,CAAA;YAE7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA;YAEjC,IAAA,eAAW,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC5B,IAAA,mBAAe,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;SACjC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAE,SAAkB;QACpC,IAAI,SAAS,EAAE;YACb,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;SAChC;aAAM;YACL,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;SACzB;IACH,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;CACF;AAED,kBAAe,aAAa,CAAA"}
@@ -1,3 +1,2 @@
1
- export declare function sortDeep(data: Record<string, unknown>[] | Record<string, unknown>): unknown;
2
1
  export declare function getKey(data: Record<string, unknown>[] | Record<string, unknown>): string;
3
2
  //# sourceMappingURL=crypto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/crypto.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAiB5F;AAED,wBAAgB,MAAM,CAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAIzF"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/crypto.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,CAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAMzF"}
@@ -0,0 +1,4 @@
1
+ import type { Mongoose } from 'mongoose';
2
+ import type Cache from '../cache/Cache';
3
+ export default function extendQuery(mongoose: Mongoose, cache: Cache): void;
4
+ //# sourceMappingURL=aggregate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/extend/aggregate.ts"],"names":[],"mappings":"AAEA,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,CA+C3E"}
@@ -0,0 +1,4 @@
1
+ import type { Mongoose } from 'mongoose';
2
+ import type Cache from '../cache/Cache';
3
+ export default function extendQuery(mongoose: Mongoose, cache: Cache): void;
4
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../src/extend/query.ts"],"names":[],"mappings":"AAEA,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,CAwE3E"}
@@ -8,15 +8,22 @@ declare module 'mongoose' {
8
8
  _ttl?: string;
9
9
  getCacheTTL: (this: Query<ResultType, DocType, THelpers, RawDocType>) => string | undefined;
10
10
  op?: string;
11
- _fields?: unknown;
12
11
  _path?: unknown;
12
+ _fields?: unknown;
13
13
  _distinct?: unknown;
14
+ _conditions?: unknown;
15
+ }
16
+ interface Aggregate<ResultType> {
17
+ cache: (this: Aggregate<ResultType>, ttl?: string, customKey?: string) => this;
18
+ _key?: string;
19
+ getCacheKey: (this: Aggregate<ResultType>) => string;
20
+ _ttl?: string;
21
+ getCacheTTL: (this: Aggregate<ResultType>) => string | undefined;
14
22
  }
15
23
  }
16
24
  declare class CacheMongoose {
17
25
  private static instance;
18
26
  private cache;
19
- private cacheOptions;
20
27
  private constructor();
21
28
  static init(mongoose: Mongoose, cacheOptions: ICacheOptions): CacheMongoose;
22
29
  clear(customKey?: string): Promise<void>;
@@ -1 +1 @@
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
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAK3D,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,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,OAAO,CAAC,EAAE,OAAO,CAAA;QACjB,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,WAAW,CAAC,EAAE,OAAO,CAAA;KACtB;IAED,UAAU,SAAS,CAAC,UAAU;QAC5B,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;QAC9E,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,MAAM,CAAA;QACpD,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,KAAK,MAAM,GAAG,SAAS,CAAA;KACjE;CACF;AAED,cAAM,aAAa;IAEjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA2B;IAClD,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO;WAIO,IAAI,CAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,GAAG,aAAa;IAetE,KAAK,CAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAGrC;AAED,eAAe,aAAa,CAAA"}
@@ -1,22 +1,10 @@
1
- import _ from 'lodash';
2
1
  import { createHash } from 'crypto';
3
- export function sortDeep(data) {
4
- if (_.isObjectLike(data) && _.isArray(data)) {
5
- return data.map(sortDeep);
6
- }
7
- if (_.isObjectLike(data) && !_.isArray(data)) {
8
- const sortedKeys = _.keys(data).sort((a, b) => a.localeCompare(b));
9
- const sortedObj = {};
10
- sortedKeys.forEach((key) => {
11
- sortedObj[key] = sortDeep(data[key]);
12
- });
13
- return sortedObj;
14
- }
15
- return data;
16
- }
2
+ import sortKeys from 'sort-keys';
17
3
  export function getKey(data) {
18
- const sortedObj = sortDeep(data);
19
- const sortedStr = JSON.stringify(sortedObj);
20
- return createHash('sha256').update(sortedStr).digest('hex');
4
+ const sortedObj = sortKeys(data, { deep: true });
5
+ const sortedStr = JSON.stringify(sortedObj, (_key, val) => {
6
+ return val instanceof RegExp ? String(val) : val;
7
+ });
8
+ return createHash('sha1').update(sortedStr).digest('hex');
21
9
  }
22
10
  //# sourceMappingURL=crypto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAA;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAEnC,MAAM,UAAU,QAAQ,CAAE,IAAyD;IACjF,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;KAC1B;IAED,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC5C,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QAClE,MAAM,SAAS,GAA4B,EAAE,CAAA;QAE7C,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAwD,CAAC,CAAA;QAC7F,CAAC,CAAC,CAAA;QAEF,OAAO,SAAS,CAAA;KACjB;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,MAAM,CAAE,IAAyD;IAC/E,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IAC3C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC7D,CAAC"}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,MAAM,CAAE,IAAyD;IAC/E,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAY,EAAE,EAAE;QACjE,OAAO,GAAG,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClD,CAAC,CAAC,CAAA;IACF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC"}
@@ -0,0 +1,37 @@
1
+ import _ from 'lodash';
2
+ import { getKey } from '../crypto';
3
+ export default function extendQuery(mongoose, cache) {
4
+ const mongooseExec = mongoose.Aggregate.prototype.exec;
5
+ mongoose.Aggregate.prototype.getCacheKey = function () {
6
+ return getKey({
7
+ pipeline: this.pipeline()
8
+ });
9
+ };
10
+ mongoose.Aggregate.prototype.getCacheTTL = function () {
11
+ return this._ttl;
12
+ };
13
+ mongoose.Aggregate.prototype.cache = function (ttl, customKey) {
14
+ this._ttl = ttl;
15
+ this._key = customKey;
16
+ return this;
17
+ };
18
+ mongoose.Aggregate.prototype.exec = async function () {
19
+ if (!_.has(this, '_ttl')) {
20
+ return mongooseExec.apply(this);
21
+ }
22
+ const key = this.getCacheKey();
23
+ const ttl = this.getCacheTTL();
24
+ const resultCache = await cache.get(key).catch((err) => {
25
+ console.error(err);
26
+ });
27
+ if (resultCache) {
28
+ return resultCache;
29
+ }
30
+ const result = await mongooseExec.call(this);
31
+ cache.set(key, result, ttl).catch((err) => {
32
+ console.error(err);
33
+ });
34
+ return result;
35
+ };
36
+ }
37
+ //# sourceMappingURL=aggregate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/extend/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAA;AAKtB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAElC,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,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YACxB,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"}
@@ -0,0 +1,60 @@
1
+ import _ from 'lodash';
2
+ import { getKey } from '../crypto';
3
+ export default function extendQuery(mongoose, cache) {
4
+ const mongooseExec = mongoose.Query.prototype.exec;
5
+ mongoose.Query.prototype.getCacheKey = function () {
6
+ if (this._key)
7
+ return this._key;
8
+ const filter = this.getFilter();
9
+ const update = this.getUpdate();
10
+ const options = this.getOptions();
11
+ const mongooseOptions = this.mongooseOptions();
12
+ const data = {
13
+ model: this.model.modelName,
14
+ op: this.op,
15
+ filter,
16
+ update,
17
+ options,
18
+ mongooseOptions,
19
+ _path: this._path,
20
+ _fields: this._fields,
21
+ _distinct: this._distinct,
22
+ _conditions: this._conditions
23
+ };
24
+ return getKey(data);
25
+ };
26
+ mongoose.Query.prototype.getCacheTTL = function () {
27
+ return this._ttl;
28
+ };
29
+ mongoose.Query.prototype.cache = function (ttl, customKey) {
30
+ this._ttl = ttl;
31
+ this._key = customKey;
32
+ return this;
33
+ };
34
+ mongoose.Query.prototype.exec = async function () {
35
+ if (!_.has(this, '_ttl')) {
36
+ return mongooseExec.apply(this);
37
+ }
38
+ const key = this.getCacheKey();
39
+ const ttl = this.getCacheTTL();
40
+ const model = this.model.modelName;
41
+ const resultCache = await cache.get(key).catch((err) => {
42
+ console.error(err);
43
+ });
44
+ if (resultCache) {
45
+ const constructor = mongoose.model(model);
46
+ if (_.isArray(resultCache)) {
47
+ return resultCache.map((item) => constructor.hydrate(item));
48
+ }
49
+ else {
50
+ return constructor.hydrate(resultCache);
51
+ }
52
+ }
53
+ const result = await mongooseExec.call(this);
54
+ cache.set(key, result, ttl).catch((err) => {
55
+ console.error(err);
56
+ });
57
+ return result;
58
+ };
59
+ }
60
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/extend/query.ts"],"names":[],"mappings":"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"}
@@ -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":"AAAA,OAAO,KAAK,MAAM,eAAe,CAAA;AAKjC,OAAO,WAAW,MAAM,gBAAgB,CAAA;AACxC,OAAO,eAAe,MAAM,oBAAoB,CAAA;AAyBhD,MAAM,aAAa;IAKjB;IAEA,CAAC;IAEM,MAAM,CAAC,IAAI,CAAE,QAAkB,EAAE,YAA2B;QACjE,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAA;QACjK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAA;YACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;YAE7C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAA;YAEjC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC5B,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;SACjC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAE,SAAkB;QACpC,IAAI,SAAS,EAAE;YACb,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;SAChC;aAAM;YACL,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;SACzB;IACH,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;CACF;AAED,eAAe,aAAa,CAAA"}
@@ -1,6 +1,6 @@
1
- import _ from 'lodash';
2
1
  import Cache from './cache/Cache';
3
- import { getKey } from './crypto';
2
+ import extendQuery from './extend/query';
3
+ import extendAggregate from './extend/aggregate';
4
4
  class CacheMongoose {
5
5
  constructor() {
6
6
  }
@@ -10,73 +10,22 @@ class CacheMongoose {
10
10
  if (!this.instance) {
11
11
  this.instance = new CacheMongoose();
12
12
  this.instance.cache = new Cache(cacheOptions);
13
- this.instance.cacheOptions = cacheOptions;
14
13
  const cache = this.instance.cache;
15
- const mongooseExec = mongoose.Query.prototype.exec;
16
- mongoose.Query.prototype.getCacheKey = function () {
17
- if (this._key)
18
- return this._key;
19
- const filter = this.getFilter();
20
- const update = this.getUpdate();
21
- const options = this.getOptions();
22
- const data = {
23
- model: this.model.modelName,
24
- op: this.op,
25
- filter,
26
- update,
27
- skip: options.skip,
28
- limit: options.limit,
29
- sort: options.sort,
30
- _fields: this._fields,
31
- _path: this._path,
32
- _distinct: this._distinct
33
- };
34
- return getKey(data);
35
- };
36
- mongoose.Query.prototype.getCacheTTL = function () {
37
- return this._ttl;
38
- };
39
- mongoose.Query.prototype.cache = function (ttl, customKey) {
40
- this._ttl = ttl;
41
- this._key = customKey;
42
- return this;
43
- };
44
- mongoose.Query.prototype.exec = async function () {
45
- if (!this._ttl) {
46
- return mongooseExec.apply(this);
47
- }
48
- const key = this.getCacheKey();
49
- const ttl = this.getCacheTTL();
50
- const model = this.model.modelName;
51
- const resultCache = await cache.get(key);
52
- if (resultCache) {
53
- const constructor = mongoose.model(model);
54
- if (_.isArray(resultCache)) {
55
- return resultCache.map((item) => constructor.hydrate(item));
56
- }
57
- else {
58
- return constructor.hydrate(resultCache);
59
- }
60
- }
61
- const result = await mongooseExec.call(this);
62
- cache.set(key, result, ttl).catch((err) => {
63
- console.error(err);
64
- });
65
- return result;
66
- };
14
+ extendQuery(mongoose, cache);
15
+ extendAggregate(mongoose, cache);
67
16
  }
68
17
  return this.instance;
69
18
  }
70
19
  async clear(customKey) {
71
- if (!customKey) {
72
- return this.cache.clear();
20
+ if (customKey) {
21
+ await this.cache.del(customKey);
22
+ }
23
+ else {
24
+ await this.cache.clear();
73
25
  }
74
- return this.cache.del(customKey);
75
26
  }
76
27
  async close() {
77
- if (this.cacheOptions.engine === 'redis') {
78
- await this.cache.close();
79
- }
28
+ await this.cache.close();
80
29
  }
81
30
  }
82
31
  export default CacheMongoose;
@@ -1,3 +1,2 @@
1
- export declare function sortDeep(data: Record<string, unknown>[] | Record<string, unknown>): unknown;
2
1
  export declare function getKey(data: Record<string, unknown>[] | Record<string, unknown>): string;
3
2
  //# sourceMappingURL=crypto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/crypto.ts"],"names":[],"mappings":"AAGA,wBAAgB,QAAQ,CAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAiB5F;AAED,wBAAgB,MAAM,CAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAIzF"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/crypto.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,CAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAMzF"}
@@ -0,0 +1,4 @@
1
+ import type { Mongoose } from 'mongoose';
2
+ import type Cache from '../cache/Cache';
3
+ export default function extendQuery(mongoose: Mongoose, cache: Cache): void;
4
+ //# sourceMappingURL=aggregate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/extend/aggregate.ts"],"names":[],"mappings":"AAEA,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,CA+C3E"}
@@ -0,0 +1,4 @@
1
+ import type { Mongoose } from 'mongoose';
2
+ import type Cache from '../cache/Cache';
3
+ export default function extendQuery(mongoose: Mongoose, cache: Cache): void;
4
+ //# sourceMappingURL=query.d.ts.map