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.
- package/README.md +2 -0
- package/dist/cjs/cache/Cache.js.map +1 -1
- package/dist/cjs/cache/engine/MemoryCacheEngine.js.map +1 -1
- package/dist/cjs/cache/engine/RedisCacheEngine.js +13 -1
- package/dist/cjs/cache/engine/RedisCacheEngine.js.map +1 -1
- package/dist/cjs/extend/aggregate.js +3 -3
- package/dist/cjs/extend/aggregate.js.map +1 -1
- package/dist/cjs/extend/query.js +6 -8
- package/dist/cjs/extend/query.js.map +1 -1
- package/dist/cjs/interfaces/IData.js +3 -0
- package/dist/cjs/interfaces/IData.js.map +1 -0
- package/dist/cjs/types/cache/Cache.d.ts +2 -1
- package/dist/cjs/types/cache/Cache.d.ts.map +1 -1
- package/dist/cjs/types/cache/engine/MemoryCacheEngine.d.ts +3 -2
- package/dist/cjs/types/cache/engine/MemoryCacheEngine.d.ts.map +1 -1
- package/dist/cjs/types/cache/engine/RedisCacheEngine.d.ts +2 -1
- package/dist/cjs/types/cache/engine/RedisCacheEngine.d.ts.map +1 -1
- package/dist/cjs/types/extend/query.d.ts.map +1 -1
- package/dist/cjs/types/interfaces/ICacheEngine.d.ts +3 -2
- package/dist/cjs/types/interfaces/ICacheEngine.d.ts.map +1 -1
- package/dist/cjs/types/interfaces/IData.d.ts +3 -0
- package/dist/cjs/types/interfaces/IData.d.ts.map +1 -0
- package/dist/esm/cache/Cache.js.map +1 -1
- package/dist/esm/cache/engine/MemoryCacheEngine.js.map +1 -1
- package/dist/esm/cache/engine/RedisCacheEngine.js +13 -1
- package/dist/esm/cache/engine/RedisCacheEngine.js.map +1 -1
- package/dist/esm/extend/aggregate.js +3 -3
- package/dist/esm/extend/aggregate.js.map +1 -1
- package/dist/esm/extend/query.js +6 -8
- package/dist/esm/extend/query.js.map +1 -1
- package/dist/esm/interfaces/IData.js +2 -0
- package/dist/esm/interfaces/IData.js.map +1 -0
- package/dist/esm/types/cache/Cache.d.ts +2 -1
- package/dist/esm/types/cache/Cache.d.ts.map +1 -1
- package/dist/esm/types/cache/engine/MemoryCacheEngine.d.ts +3 -2
- package/dist/esm/types/cache/engine/MemoryCacheEngine.d.ts.map +1 -1
- package/dist/esm/types/cache/engine/RedisCacheEngine.d.ts +2 -1
- package/dist/esm/types/cache/engine/RedisCacheEngine.d.ts.map +1 -1
- package/dist/esm/types/extend/query.d.ts.map +1 -1
- package/dist/esm/types/interfaces/ICacheEngine.d.ts +3 -2
- package/dist/esm/types/interfaces/ICacheEngine.d.ts.map +1 -1
- package/dist/esm/types/interfaces/IData.d.ts +3 -0
- package/dist/esm/types/interfaces/IData.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/cache/Cache.ts +2 -1
- package/src/cache/engine/MemoryCacheEngine.ts +4 -3
- package/src/cache/engine/RedisCacheEngine.ts +14 -2
- package/src/extend/aggregate.ts +3 -3
- package/src/extend/query.ts +7 -9
- package/src/interfaces/ICacheEngine.ts +4 -2
- package/src/interfaces/IData.ts +3 -0
- package/tests/cache-memory.test.ts +9 -3
- package/tests/cache-redis.test.ts +52 -5
- package/tests/interfaces/IStory.ts +8 -0
- package/tests/interfaces/IUser.ts +4 -0
- package/tests/models/Story.ts +4 -0
- package/tests/models/User.ts +4 -0
- package/tests/schemas/StorySchema.ts +18 -0
- 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;
|
|
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":";;
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/cjs/extend/query.js
CHANGED
|
@@ -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
|
-
|
|
56
|
-
return mongooseOptions.lean ? hydrated.toObject() : hydrated;
|
|
55
|
+
return constructor.hydrate(item);
|
|
57
56
|
});
|
|
58
57
|
}
|
|
59
58
|
else {
|
|
60
|
-
|
|
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":";;AAGA,gCAA+B;AAE/B,SAAwB,WAAW,CAAE,QAAkB,EAAE,KAAY;IAEnE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAA;IAGlD,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG;QACrC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI,CAAA;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAE9C,MAAM,IAAI,GAA4B;YACpC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC3B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM;YACN,MAAM;YACN,OAAO;YACP,eAAe;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAA;QAED,OAAO,IAAA,YAAM,EAAC,IAAI,CAAC,CAAA;IACrB,CAAC,CAAA;IAGD,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG;QACrC,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC,CAAA;IAGD,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAY,EAAE,SAAkB;QACzE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAGD,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/extend/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -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<
|
|
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":"
|
|
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):
|
|
6
|
-
set(key: string, value:
|
|
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,
|
|
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<
|
|
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":"
|
|
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,
|
|
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<
|
|
3
|
-
set: (key: string, value:
|
|
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,
|
|
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 @@
|
|
|
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;
|
|
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":"
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/esm/extend/query.js
CHANGED
|
@@ -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
|
-
|
|
54
|
-
return mongooseOptions.lean ? hydrated.toObject() : hydrated;
|
|
53
|
+
return constructor.hydrate(item);
|
|
55
54
|
});
|
|
56
55
|
}
|
|
57
56
|
else {
|
|
58
|
-
|
|
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":"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,KAAK,CAAC,SAAS,CAAC,IAAI,CAAA;IAGlD,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG;QACrC,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,IAAI,CAAA;QAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QACjC,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAE9C,MAAM,IAAI,GAA4B;YACpC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;YAC3B,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,MAAM;YACN,MAAM;YACN,OAAO;YACP,eAAe;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAA;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;IACrB,CAAC,CAAA;IAGD,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG;QACrC,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC,CAAA;IAGD,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,GAAY,EAAE,SAAkB;QACzE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAA;QACf,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IAGD,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/extend/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -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<
|
|
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":"
|
|
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):
|
|
6
|
-
set(key: string, value:
|
|
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,
|
|
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<
|
|
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":"
|
|
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,
|
|
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<
|
|
3
|
-
set: (key: string, value:
|
|
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,
|
|
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 @@
|
|
|
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
package/src/cache/Cache.ts
CHANGED
|
@@ -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<
|
|
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:
|
|
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):
|
|
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:
|
|
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<
|
|
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
|
|
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> {
|
package/src/extend/aggregate.ts
CHANGED
|
@@ -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
|
|
package/src/extend/query.ts
CHANGED
|
@@ -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
|
-
|
|
75
|
-
return mongooseOptions.lean ? hydrated.toObject() : hydrated
|
|
74
|
+
return constructor.hydrate(item)
|
|
76
75
|
})
|
|
77
76
|
} else {
|
|
78
|
-
|
|
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<
|
|
3
|
-
set: (key: string, value:
|
|
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
|
|
@@ -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).
|
|
162
|
+
expect(users).toHaveLength(cachedUsers.length)
|
|
157
163
|
})
|
|
158
164
|
|
|
159
165
|
it('count', async () => {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import mongoose
|
|
2
|
-
import
|
|
1
|
+
import mongoose from 'mongoose'
|
|
2
|
+
import plugin from '../src/plugin'
|
|
3
3
|
|
|
4
|
-
import
|
|
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 =
|
|
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
|
})
|
|
@@ -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,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
|