ts-cache-mongoose 1.2.0 → 1.3.0

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
@@ -26,7 +26,7 @@ Caching queries is a good way to improve performance of your application
26
26
  ```json
27
27
  {
28
28
  "node": "16.x || 18.x || 20.x",
29
- "mongoose": ">=6.6.x || 7.x",
29
+ "mongoose": "6.6.x || 7.x || 8.x",
30
30
  }
31
31
  ```
32
32
 
@@ -50,15 +50,18 @@ npm install ts-cache-mongoose
50
50
  yarn add ts-cache-mongoose
51
51
  ```
52
52
 
53
- - This plugin requires mongoose `>=6.6.x || 7.x` to be installed as a peer dependency
53
+ - This plugin requires mongoose `6.6.x || 7.x || 8.x` to be installed as a peer dependency
54
54
 
55
55
  ```bash
56
56
  # For mongoose 6
57
- npm install mongoose@legacy
58
- yarn add mongoose mongoose@legacy
57
+ npm install mongoose@6.12.2
58
+ yarn add mongoose mongoose@6.12.2
59
59
  # For mongoose 7
60
- npm install mongoose@latest
61
- yarn add mongoose@latest
60
+ npm install mongoose@7.6.4
61
+ yarn add mongoose@7.6.4
62
+ # For mongoose 8
63
+ npm install mongoose@8.0.0
64
+ yarn add mongoose@8.0.0
62
65
  ```
63
66
 
64
67
  ## Example
@@ -2,7 +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
+ const mongoose_1 = tslib_1.__importStar(require("mongoose"));
6
6
  class RedisCacheEngine {
7
7
  constructor(options) {
8
8
  if (!options.keyPrefix) {
@@ -21,7 +21,7 @@ class RedisCacheEngine {
21
21
  if (dateRegex.test(value)) {
22
22
  return new Date(value);
23
23
  }
24
- else if (mongoose_1.Types.ObjectId.isValid(value)) {
24
+ else if (mongoose_1.default.isObjectIdOrHexString(value)) {
25
25
  return new mongoose_1.Types.ObjectId(value);
26
26
  }
27
27
  }
@@ -1 +1 @@
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,CAAC,EAAE,KAAK,EAAE,EAAE;YACpC,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"}
1
+ {"version":3,"file":"RedisCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":";;;AAAA,8DAA6B;AAC7B,6DAA0C;AAM1C,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,CAAC,EAAE,KAAK,EAAE,EAAE;YACpC,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,kBAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;oBAChD,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"}
@@ -2,7 +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
+ const mongoose_1 = tslib_1.__importStar(require("mongoose"));
6
6
  class RedisCacheEngine {
7
7
  constructor(options) {
8
8
  if (!options.keyPrefix) {
@@ -21,7 +21,7 @@ class RedisCacheEngine {
21
21
  if (dateRegex.test(value)) {
22
22
  return new Date(value);
23
23
  }
24
- else if (mongoose_1.Types.ObjectId.isValid(value)) {
24
+ else if (mongoose_1.default.isObjectIdOrHexString(value)) {
25
25
  return new mongoose_1.Types.ObjectId(value);
26
26
  }
27
27
  }
@@ -1 +1 @@
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,CAAC,EAAE,KAAK,EAAE,EAAE;YACpC,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"}
1
+ {"version":3,"file":"RedisCacheEngine.js","sourceRoot":"","sources":["../../../../src/cache/engine/RedisCacheEngine.ts"],"names":[],"mappings":";;;AAAA,8DAA6B;AAC7B,6DAA0C;AAM1C,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,CAAC,EAAE,KAAK,EAAE,EAAE;YACpC,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,kBAAQ,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE;oBAChD,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-cache-mongoose",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Cache plugin for mongoose Queries and Aggregate (in-memory, redis)",
5
5
  "author": "Alex Eagle",
6
6
  "license": "MIT",
@@ -82,26 +82,26 @@
82
82
  "devDependencies": {
83
83
  "@shelf/jest-mongodb": "4.1.7",
84
84
  "@swc/cli": "0.1.62",
85
- "@swc/core": "1.3.91",
86
- "@swc/helpers": "0.5.2",
85
+ "@swc/core": "1.3.96",
86
+ "@swc/helpers": "0.5.3",
87
87
  "@swc/jest": "0.2.29",
88
88
  "@swc/register": "0.1.10",
89
- "@types/jest": "29.5.5",
90
- "@types/ms": "0.7.32",
91
- "@types/node": "18",
92
- "@typescript-eslint/eslint-plugin": "6.7.3",
93
- "@typescript-eslint/parser": "6.7.3",
94
- "eslint": "8.50.0",
95
- "eslint-plugin-jest": "27.4.2",
89
+ "@types/jest": "29.5.7",
90
+ "@types/ms": "0.7.33",
91
+ "@types/node": "20",
92
+ "@typescript-eslint/eslint-plugin": "6.9.1",
93
+ "@typescript-eslint/parser": "6.9.1",
94
+ "eslint": "8.53.0",
95
+ "eslint-plugin-jest": "27.6.0",
96
96
  "eslint-plugin-jest-formatting": "3.1.0",
97
- "eslint-plugin-sonarjs": "0.21.0",
97
+ "eslint-plugin-sonarjs": "0.23.0",
98
98
  "jest": "29.7.0",
99
99
  "merge": "2.1.1",
100
- "mongoose": "6.12.0",
100
+ "mongoose": "latest",
101
101
  "open-cli": "7.2.0",
102
102
  "typescript": "5.2.2"
103
103
  },
104
104
  "peerDependencies": {
105
- "mongoose": ">=6.6.0 < 8"
105
+ "mongoose": ">=6.6.0 < 9"
106
106
  }
107
107
  }
@@ -1,5 +1,5 @@
1
1
  import IORedis from 'ioredis'
2
- import { Types } from 'mongoose'
2
+ import mongoose, { Types } from 'mongoose'
3
3
 
4
4
  import type { Redis, RedisOptions } from 'ioredis'
5
5
  import type IData from '../../interfaces/IData'
@@ -25,7 +25,7 @@ class RedisCacheEngine implements ICacheEngine {
25
25
  const dateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/
26
26
  if (dateRegex.test(value)) {
27
27
  return new Date(value)
28
- } else if (Types.ObjectId.isValid(value)) {
28
+ } else if (mongoose.isObjectIdOrHexString(value)) {
29
29
  return new Types.ObjectId(value)
30
30
  }
31
31
  }
@@ -185,9 +185,9 @@ describe('CacheMongoose', () => {
185
185
  })
186
186
 
187
187
  it('count', async () => {
188
- const count = await User.count({ age: { $gte: 30 } }).cache('1 minute').exec()
188
+ const count = await User.countDocuments({ age: { $gte: 30 } }).cache('1 minute').exec()
189
189
  await User.create({ name: 'Steve', age: 30, role: 'admin' })
190
- const cachedCount = await User.count({ age: { $gte: 30 } }).cache('1 minute').exec()
190
+ const cachedCount = await User.countDocuments({ age: { $gte: 30 } }).cache('1 minute').exec()
191
191
 
192
192
  expect(count).toEqual(cachedCount)
193
193
  })
@@ -311,4 +311,16 @@ describe('cache redis', () => {
311
311
  expect(cache1?.stories?.[1]._id).toEqual(story2._id)
312
312
  expect(cache1).toEqual(cache2)
313
313
  })
314
+
315
+ it('should not misclassify certain fields as objectIds', async () => {
316
+ // ObjectId.isValid will return true for multiple scenarios.
317
+ // A string being a potentially valid objectId should not be the
318
+ // determining factor on wether or not deserialize it as objectId.
319
+ await User.create({ name: '12CharString', role: 'admin' })
320
+ const miss = await User.find({ name: '12CharString' }).lean().cache('30 seconds')
321
+ const hit = await User.find({ name: '12CharString' }).lean().cache('30 seconds')
322
+ expect(miss).not.toBeNull()
323
+ expect(hit).not.toBeNull()
324
+ expect(hit).toEqual(miss)
325
+ })
314
326
  })