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 +9 -6
- package/dist/cjs/cache/engine/RedisCacheEngine.js +2 -2
- package/dist/cjs/cache/engine/RedisCacheEngine.js.map +1 -1
- package/dist/esm/cache/engine/RedisCacheEngine.js +2 -2
- package/dist/esm/cache/engine/RedisCacheEngine.js.map +1 -1
- package/package.json +13 -13
- package/src/cache/engine/RedisCacheEngine.ts +2 -2
- package/tests/cache-memory.test.ts +2 -2
- package/tests/cache-redis.test.ts +12 -0
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": "
|
|
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
|
|
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@
|
|
58
|
-
yarn add mongoose mongoose@
|
|
57
|
+
npm install mongoose@6.12.2
|
|
58
|
+
yarn add mongoose mongoose@6.12.2
|
|
59
59
|
# For mongoose 7
|
|
60
|
-
npm install mongoose@
|
|
61
|
-
yarn add mongoose@
|
|
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.
|
|
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,
|
|
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.
|
|
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,
|
|
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.
|
|
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.
|
|
86
|
-
"@swc/helpers": "0.5.
|
|
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.
|
|
90
|
-
"@types/ms": "0.7.
|
|
91
|
-
"@types/node": "
|
|
92
|
-
"@typescript-eslint/eslint-plugin": "6.
|
|
93
|
-
"@typescript-eslint/parser": "6.
|
|
94
|
-
"eslint": "8.
|
|
95
|
-
"eslint-plugin-jest": "27.
|
|
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.
|
|
97
|
+
"eslint-plugin-sonarjs": "0.23.0",
|
|
98
98
|
"jest": "29.7.0",
|
|
99
99
|
"merge": "2.1.1",
|
|
100
|
-
"mongoose": "
|
|
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 <
|
|
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 (
|
|
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.
|
|
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.
|
|
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
|
})
|