ts-cache-mongoose 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -114,3 +114,8 @@ const books = await Book.aggregate([
114
114
  }
115
115
  ]).cache('1 minute').exec()
116
116
  ```
117
+
118
+ ## Check my other projects
119
+
120
+ - [ts-migrate-mongoose](https://github.com/ilovepixelart/ts-migrate-mongoose) - Migration framework for mongoose
121
+ - [ts-patch-mongoose](https://github.com/ilovepixelart/ts-patch-mongoose) - Patch history & events plugin for mongoose
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const lodash_1 = tslib_1.__importDefault(require("lodash"));
5
3
  const key_1 = require("../key");
6
4
  function extendQuery(mongoose, cache) {
7
5
  const mongooseExec = mongoose.Aggregate.prototype.exec;
@@ -19,7 +17,7 @@ function extendQuery(mongoose, cache) {
19
17
  return this;
20
18
  };
21
19
  mongoose.Aggregate.prototype.exec = async function () {
22
- if (!lodash_1.default.has(this, '_ttl')) {
20
+ if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
23
21
  return mongooseExec.apply(this);
24
22
  }
25
23
  const key = this.getCacheKey();
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/extend/aggregate.ts"],"names":[],"mappings":";;;AAAA,4DAAsB;AAKtB,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,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"}
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,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const lodash_1 = tslib_1.__importDefault(require("lodash"));
5
3
  const key_1 = require("../key");
6
4
  function extendQuery(mongoose, cache) {
7
5
  const mongooseExec = mongoose.Query.prototype.exec;
@@ -35,7 +33,7 @@ function extendQuery(mongoose, cache) {
35
33
  return this;
36
34
  };
37
35
  mongoose.Query.prototype.exec = async function () {
38
- if (!lodash_1.default.has(this, '_ttl')) {
36
+ if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
39
37
  return mongooseExec.apply(this);
40
38
  }
41
39
  const key = this.getCacheKey();
@@ -48,15 +46,19 @@ function extendQuery(mongoose, cache) {
48
46
  console.error(err);
49
47
  });
50
48
  if (resultCache) {
51
- if (isCount || isDistinct || mongooseOptions.lean) {
49
+ if (isCount || isDistinct) {
52
50
  return resultCache;
53
51
  }
54
52
  const constructor = mongoose.model(model);
55
- if (lodash_1.default.isArray(resultCache)) {
56
- return resultCache.map((item) => constructor.hydrate(item));
53
+ if (Array.isArray(resultCache)) {
54
+ return resultCache.map((item) => {
55
+ const hydrated = constructor.hydrate(item);
56
+ return mongooseOptions.lean ? hydrated.toObject() : hydrated;
57
+ });
57
58
  }
58
59
  else {
59
- return constructor.hydrate(resultCache);
60
+ const hydrated = constructor.hydrate(resultCache);
61
+ return mongooseOptions.lean ? hydrated.toObject() : hydrated;
60
62
  }
61
63
  }
62
64
  const result = await mongooseExec.call(this);
@@ -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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"}
@@ -1 +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"}
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/extend/aggregate.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,CA+C3E"}
@@ -1 +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,CA+E3E"}
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,4 +1,3 @@
1
- import _ from 'lodash';
2
1
  import { getKey } from '../key';
3
2
  export default function extendQuery(mongoose, cache) {
4
3
  const mongooseExec = mongoose.Aggregate.prototype.exec;
@@ -16,7 +15,7 @@ export default function extendQuery(mongoose, cache) {
16
15
  return this;
17
16
  };
18
17
  mongoose.Aggregate.prototype.exec = async function () {
19
- if (!_.has(this, '_ttl')) {
18
+ if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
20
19
  return mongooseExec.apply(this);
21
20
  }
22
21
  const key = this.getCacheKey();
@@ -1 +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,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,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"}
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,4 +1,3 @@
1
- import _ from 'lodash';
2
1
  import { getKey } from '../key';
3
2
  export default function extendQuery(mongoose, cache) {
4
3
  const mongooseExec = mongoose.Query.prototype.exec;
@@ -32,7 +31,7 @@ export default function extendQuery(mongoose, cache) {
32
31
  return this;
33
32
  };
34
33
  mongoose.Query.prototype.exec = async function () {
35
- if (!_.has(this, '_ttl')) {
34
+ if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
36
35
  return mongooseExec.apply(this);
37
36
  }
38
37
  const key = this.getCacheKey();
@@ -45,15 +44,19 @@ export default function extendQuery(mongoose, cache) {
45
44
  console.error(err);
46
45
  });
47
46
  if (resultCache) {
48
- if (isCount || isDistinct || mongooseOptions.lean) {
47
+ if (isCount || isDistinct) {
49
48
  return resultCache;
50
49
  }
51
50
  const constructor = mongoose.model(model);
52
- if (_.isArray(resultCache)) {
53
- return resultCache.map((item) => constructor.hydrate(item));
51
+ if (Array.isArray(resultCache)) {
52
+ return resultCache.map((item) => {
53
+ const hydrated = constructor.hydrate(item);
54
+ return mongooseOptions.lean ? hydrated.toObject() : hydrated;
55
+ });
54
56
  }
55
57
  else {
56
- return constructor.hydrate(resultCache);
58
+ const hydrated = constructor.hydrate(resultCache);
59
+ return mongooseOptions.lean ? hydrated.toObject() : hydrated;
57
60
  }
58
61
  }
59
62
  const result = await mongooseExec.call(this);
@@ -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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"}
@@ -1 +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"}
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/extend/aggregate.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,CA+C3E"}
@@ -1 +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,CA+E3E"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-cache-mongoose",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Cache plugin for mongoose Queries and Aggregate (in-memory, redis)",
5
5
  "author": "Alex Eagle",
6
6
  "license": "MIT",
@@ -32,7 +32,8 @@
32
32
  "store",
33
33
  "memory",
34
34
  "ttl",
35
- "query"
35
+ "query",
36
+ "aggregate"
36
37
  ],
37
38
  "engines": {
38
39
  "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -71,27 +72,25 @@
71
72
  "build": "npm run clean && npm run build:cjs && npm run build:esm",
72
73
  "build:cjs": "tsc -p config/tsconfig.cjs.json",
73
74
  "build:esm": "tsc -p config/tsconfig.esm.json && mv ./dist/esm/plugin.js ./dist/esm/plugin.mjs",
74
- "release": "npm install && npm run lint && npm run build && np"
75
+ "release": "npm run lint && npm run build && np"
75
76
  },
76
77
  "dependencies": {
77
78
  "ioredis": "5.3.2",
78
- "lodash": "4.17.21",
79
79
  "ms": "2.1.3",
80
80
  "sort-keys": "4.2.0"
81
81
  },
82
82
  "devDependencies": {
83
83
  "@shelf/jest-mongodb": "4.1.7",
84
84
  "@swc/cli": "0.1.62",
85
- "@swc/core": "1.3.55",
85
+ "@swc/core": "1.3.56",
86
86
  "@swc/helpers": "0.5.1",
87
87
  "@swc/jest": "0.2.26",
88
88
  "@swc/register": "0.1.10",
89
89
  "@types/jest": "29.5.1",
90
- "@types/lodash": "4.14.194",
91
90
  "@types/ms": "^0.7.31",
92
- "@types/node": "18.16.2",
93
- "@typescript-eslint/eslint-plugin": "5.59.1",
94
- "@typescript-eslint/parser": "5.59.1",
91
+ "@types/node": "18.16.3",
92
+ "@typescript-eslint/eslint-plugin": "5.59.2",
93
+ "@typescript-eslint/parser": "5.59.2",
95
94
  "eslint": "8.39.0",
96
95
  "eslint-config-standard": "17.0.0",
97
96
  "eslint-plugin-import": "2.27.5",
@@ -1,5 +1,3 @@
1
- import _ from 'lodash'
2
-
3
1
  import type { Mongoose } from 'mongoose'
4
2
  import type Cache from '../cache/Cache'
5
3
 
@@ -30,7 +28,7 @@ export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
30
28
 
31
29
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
32
30
  mongoose.Aggregate.prototype.exec = async function () {
33
- if (!_.has(this, '_ttl')) {
31
+ if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
34
32
  return mongooseExec.apply(this)
35
33
  }
36
34
 
@@ -1,5 +1,3 @@
1
- import _ from 'lodash'
2
-
3
1
  import type { Mongoose } from 'mongoose'
4
2
  import type Cache from '../cache/Cache'
5
3
 
@@ -48,7 +46,7 @@ export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
48
46
 
49
47
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
50
48
  mongoose.Query.prototype.exec = async function () {
51
- if (!_.has(this, '_ttl')) {
49
+ if (!Object.prototype.hasOwnProperty.call(this, '_ttl')) {
52
50
  return mongooseExec.apply(this)
53
51
  }
54
52
 
@@ -65,15 +63,20 @@ export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
65
63
  })
66
64
 
67
65
  if (resultCache) {
68
- if (isCount || isDistinct || mongooseOptions.lean) {
66
+ if (isCount || isDistinct) {
69
67
  return resultCache
70
68
  }
71
69
 
72
- const constructor = mongoose.model(model)
73
- if (_.isArray(resultCache)) {
74
- return resultCache.map((item) => constructor.hydrate(item) as Record<string, unknown>)
70
+ const constructor = mongoose.model<unknown>(model)
71
+
72
+ if (Array.isArray(resultCache)) {
73
+ return resultCache.map((item) => {
74
+ const hydrated = constructor.hydrate(item)
75
+ return mongooseOptions.lean ? hydrated.toObject() : hydrated
76
+ })
75
77
  } else {
76
- return constructor.hydrate(resultCache) as Record<string, unknown>
78
+ const hydrated = constructor.hydrate(resultCache)
79
+ return mongooseOptions.lean ? hydrated.toObject() : hydrated
77
80
  }
78
81
  }
79
82
 
@@ -13,7 +13,7 @@ describe('cache redis', () => {
13
13
  host: 'localhost',
14
14
  port: 6379
15
15
  },
16
- defaultTTL: '6 minutes'
16
+ defaultTTL: '10 seconds'
17
17
  })
18
18
 
19
19
  beforeAll(async () => {
@@ -69,9 +69,9 @@ describe('cache redis', () => {
69
69
  role: 'admin'
70
70
  })
71
71
 
72
- const cache1 = await User.findById(user._id).cache('1 minute', 'custom-key-1').exec()
72
+ const cache1 = await User.findById(user._id).cache('30 seconds', 'custom-key-1').exec()
73
73
  await User.findOneAndUpdate({ _id: user._id }, { name: 'John Doe 2' })
74
- const cache2 = await User.findById(user._id).cache('1 minute', 'custom-key-1').exec()
74
+ const cache2 = await User.findById(user._id).cache('30 seconds', 'custom-key-1').exec()
75
75
 
76
76
  expect(cache1).not.toBeNull()
77
77
  expect(cache2).not.toBeNull()
@@ -85,10 +85,10 @@ describe('cache redis', () => {
85
85
  role: 'admin'
86
86
  })
87
87
 
88
- const cache1 = await User.findById(user._id).cache('1 minute', 'custom-key-2').exec()
88
+ const cache1 = await User.findById(user._id).cache('30 seconds', 'custom-key-2').exec()
89
89
  await User.updateOne({ _id: user._id }, { name: 'Steve' })
90
90
  await cache.clear('custom-key-2')
91
- const cache2 = await User.findById(user._id).cache('1 minute', 'custom-key-2').exec()
91
+ const cache2 = await User.findById(user._id).cache('30 seconds', 'custom-key-2').exec()
92
92
 
93
93
  expect(cache1).not.toBeNull()
94
94
  expect(cache2).not.toBeNull()
@@ -144,14 +144,14 @@ describe('cache redis', () => {
144
144
  const cache1 = await User.aggregate([
145
145
  { $match: { role: 'admin' } },
146
146
  { $group: { _id: '$role', count: { $sum: 1 } } }
147
- ]).cache('1 minute')
147
+ ]).cache('30 seconds')
148
148
 
149
149
  await User.create({ name: 'Mark', role: 'admin' })
150
150
 
151
151
  const cache2 = await User.aggregate([
152
152
  { $match: { role: 'admin' } },
153
153
  { $group: { _id: '$role', count: { $sum: 1 } } }
154
- ]).cache('1 minute')
154
+ ]).cache('30 seconds')
155
155
 
156
156
  expect(cache1).not.toBeNull()
157
157
  expect(cache2).not.toBeNull()
@@ -168,14 +168,14 @@ describe('cache redis', () => {
168
168
  const cache1 = await User.aggregate([
169
169
  { $match: { role: 'admin' } },
170
170
  { $group: { _id: '$role', count: { $sum: 1 } } }
171
- ]).cache('1 minute', 'aggregate-custom-key')
171
+ ]).cache('30 seconds', 'aggregate-custom-key')
172
172
 
173
173
  await User.create({ name: 'Mark', role: 'admin' })
174
174
 
175
175
  const cache2 = await User.aggregate([
176
176
  { $match: { role: 'admin' } },
177
177
  { $group: { _id: '$role', count: { $sum: 1 } } }
178
- ]).cache('1 minute', 'aggregate-custom-key')
178
+ ]).cache('30 seconds', 'aggregate-custom-key')
179
179
 
180
180
  // Don't use cache key
181
181
  const cache3 = await User.aggregate([
@@ -197,9 +197,9 @@ describe('cache redis', () => {
197
197
  { name: 'Alice', role: 'user' }
198
198
  ])
199
199
 
200
- const cache1 = await User.find({ role: 'admin' }).lean().cache('1 minute')
200
+ const cache1 = await User.find({ role: 'admin' }).lean().cache('30 seconds')
201
201
  await User.create({ name: 'Mark', role: 'admin' })
202
- const cache2 = await User.find({ role: 'admin' }).lean().cache('1 minute')
202
+ const cache2 = await User.find({ role: 'admin' }).lean().cache('30 seconds')
203
203
 
204
204
  expect(cache1).not.toBeNull()
205
205
  expect(cache2).not.toBeNull()
@@ -213,20 +213,55 @@ describe('cache redis', () => {
213
213
  { name: 'Andy', role: 'user' }
214
214
  ])
215
215
 
216
- const cache1 = await User.find({ name: /^J/ }).cache('1 minute')
216
+ const cache1 = await User.find({ name: /^J/ }).cache('30 seconds')
217
217
  await User.create({ name: 'Jenifer', role: 'admin' })
218
- const cache2 = await User.find({ name: /^J/ }).cache('1 minute')
218
+ const cache2 = await User.find({ name: /^J/ }).cache('30 seconds')
219
219
 
220
220
  expect(cache1).not.toBeNull()
221
221
  expect(cache2).not.toBeNull()
222
222
  expect(cache1?.length).toEqual(cache2?.length)
223
223
 
224
- const cache3 = await User.find({ name: /^A/ }).cache('1 hour')
224
+ const cache3 = await User.find({ name: /^A/ }).cache('30 seconds')
225
225
  await User.create({ name: 'Alex', role: 'admin' })
226
- const cache4 = await User.find({ name: /^A/ }).cache('1 hour')
226
+ const cache4 = await User.find({ name: /^A/ }).cache('30 seconds')
227
227
 
228
228
  expect(cache3).not.toBeNull()
229
229
  expect(cache4).not.toBeNull()
230
230
  expect(cache3?.length).toEqual(cache4?.length)
231
231
  })
232
+
233
+ it('should findOne', async () => {
234
+ await User.create([
235
+ { name: 'C', role: 'admin' },
236
+ { name: 'V', role: 'user' },
237
+ { name: 'G', role: 'user' }
238
+ ])
239
+
240
+ const cache1 = await User.findOne({ name: 'G' }).lean().cache('30 seconds').exec()
241
+ expect(cache1).not.toBeNull()
242
+ expect(cache1?._id instanceof mongoose.Types.ObjectId).toBeTruthy()
243
+ expect(cache1).toHaveProperty('name', 'G')
244
+
245
+ const cache2 = await User.findOne({ name: 'G' }).lean().cache('30 seconds').exec()
246
+ expect(cache2).not.toBeNull()
247
+ expect(cache2?._id instanceof mongoose.Types.ObjectId).toBeTruthy()
248
+ expect(cache2).toHaveProperty('name', 'G')
249
+ expect(cache1).toEqual(cache2)
250
+
251
+ const cache3 = await User.findOne({ name: 'G' }).lean().cache('30 seconds').exec()
252
+ expect(cache3).not.toBeNull()
253
+ expect(cache3).toHaveProperty('name', 'G')
254
+ expect(cache2).toEqual(cache3)
255
+
256
+ const cache4 = await User.findOne({ name: 'V' }).lean().cache('30 seconds').exec()
257
+ expect(cache4).not.toBeNull()
258
+ expect(cache4).toHaveProperty('name', 'V')
259
+ expect(cache3).not.toEqual(cache4)
260
+
261
+ const cache5 = await User.findOne({ name: 'O' }).lean().cache('30 seconds').exec()
262
+ const cache6 = await User.findOne({ name: 'O' }).lean().cache('30 seconds').exec()
263
+ expect(cache5).toBeNull()
264
+ expect(cache6).toBeNull()
265
+ expect(cache5).toEqual(cache6)
266
+ })
232
267
  })
@@ -82,4 +82,20 @@ describe('generateHash()', () => {
82
82
  expect(hash1).not.toEqual(hash3)
83
83
  expect(hash3).not.toEqual(hash4)
84
84
  })
85
+
86
+ it('should test dates', async () => {
87
+ const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
88
+ const date = new Date()
89
+ const hash1 = getKey({
90
+ name: 'John Doe',
91
+ date: { $lte: date }
92
+ })
93
+ await wait(50)
94
+ const date2 = new Date()
95
+ const hash2 = getKey({
96
+ name: 'John Doe',
97
+ date: { $lte: date2 }
98
+ })
99
+ expect(hash1).not.toEqual(hash2)
100
+ })
85
101
  })