ts-cache-mongoose 0.0.4 → 0.0.6
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 +5 -3
- package/dist/cjs/extend/aggregate.js +2 -2
- package/dist/cjs/extend/aggregate.js.map +1 -1
- package/dist/cjs/extend/query.js +8 -2
- package/dist/cjs/extend/query.js.map +1 -1
- package/dist/cjs/{crypto.js → key.js} +1 -1
- package/dist/cjs/key.js.map +1 -0
- package/dist/cjs/types/extend/query.d.ts.map +1 -1
- package/dist/{esm/types/crypto.d.ts → cjs/types/key.d.ts} +1 -1
- package/dist/cjs/types/key.d.ts.map +1 -0
- package/dist/esm/extend/aggregate.js +1 -1
- package/dist/esm/extend/aggregate.js.map +1 -1
- package/dist/esm/extend/query.js +7 -1
- package/dist/esm/extend/query.js.map +1 -1
- package/dist/esm/{crypto.js → key.js} +1 -1
- package/dist/esm/key.js.map +1 -0
- package/dist/esm/types/extend/query.d.ts.map +1 -1
- package/dist/{cjs/types/crypto.d.ts → esm/types/key.d.ts} +1 -1
- package/dist/esm/types/key.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/extend/aggregate.ts +1 -1
- package/src/extend/query.ts +8 -1
- package/tests/cache-memory.test.ts +56 -0
- package/tests/crypto.test.ts +1 -1
- package/tests/interfaces/IUser.ts +1 -0
- package/tests/schemas/UserSchema.ts +3 -0
- package/dist/cjs/crypto.js.map +0 -1
- package/dist/cjs/types/crypto.d.ts.map +0 -1
- package/dist/esm/crypto.js.map +0 -1
- package/dist/esm/types/crypto.d.ts.map +0 -1
- /package/src/{crypto.ts → key.ts} +0 -0
package/README.md
CHANGED
|
@@ -21,8 +21,9 @@ ts-cache-mongoose is a plugin for mongoose
|
|
|
21
21
|
\
|
|
22
22
|
Caching queries is a good way to improve performance of your application
|
|
23
23
|
\
|
|
24
|
-
This is initial prerelease of the plugin, so it may contain bugs
|
|
25
|
-
|
|
24
|
+
⚠️ This is initial prerelease of the plugin, so it may contain bugs
|
|
25
|
+
\
|
|
26
|
+
🛠️ Work in progress...
|
|
26
27
|
|
|
27
28
|
## Features
|
|
28
29
|
|
|
@@ -33,7 +34,8 @@ Work in progress...
|
|
|
33
34
|
- [x] Cache key generation
|
|
34
35
|
- [x] Cache key prefix
|
|
35
36
|
- [x] Query caching support
|
|
36
|
-
- [
|
|
37
|
+
- [x] Aggregate caching support
|
|
38
|
+
- [ ] More tests
|
|
37
39
|
|
|
38
40
|
## Installation
|
|
39
41
|
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
5
|
-
const
|
|
5
|
+
const key_1 = require("../key");
|
|
6
6
|
function extendQuery(mongoose, cache) {
|
|
7
7
|
const mongooseExec = mongoose.Aggregate.prototype.exec;
|
|
8
8
|
mongoose.Aggregate.prototype.getCacheKey = function () {
|
|
9
|
-
return (0,
|
|
9
|
+
return (0, key_1.getKey)({
|
|
10
10
|
pipeline: this.pipeline()
|
|
11
11
|
});
|
|
12
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/extend/aggregate.ts"],"names":[],"mappings":";;;AAAA,4DAAsB;AAKtB,
|
|
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"}
|
package/dist/cjs/extend/query.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
5
|
-
const
|
|
5
|
+
const key_1 = require("../key");
|
|
6
6
|
function extendQuery(mongoose, cache) {
|
|
7
7
|
const mongooseExec = mongoose.Query.prototype.exec;
|
|
8
8
|
mongoose.Query.prototype.getCacheKey = function () {
|
|
@@ -24,7 +24,7 @@ function extendQuery(mongoose, cache) {
|
|
|
24
24
|
_distinct: this._distinct,
|
|
25
25
|
_conditions: this._conditions
|
|
26
26
|
};
|
|
27
|
-
return (0,
|
|
27
|
+
return (0, key_1.getKey)(data);
|
|
28
28
|
};
|
|
29
29
|
mongoose.Query.prototype.getCacheTTL = function () {
|
|
30
30
|
return this._ttl;
|
|
@@ -40,11 +40,17 @@ function extendQuery(mongoose, cache) {
|
|
|
40
40
|
}
|
|
41
41
|
const key = this.getCacheKey();
|
|
42
42
|
const ttl = this.getCacheTTL();
|
|
43
|
+
const mongooseOptions = this.mongooseOptions();
|
|
44
|
+
const isCount = this.op?.includes('count');
|
|
45
|
+
const isDistinct = this.op === 'distinct';
|
|
43
46
|
const model = this.model.modelName;
|
|
44
47
|
const resultCache = await cache.get(key).catch((err) => {
|
|
45
48
|
console.error(err);
|
|
46
49
|
});
|
|
47
50
|
if (resultCache) {
|
|
51
|
+
if (isCount || isDistinct || mongooseOptions.lean) {
|
|
52
|
+
return resultCache;
|
|
53
|
+
}
|
|
48
54
|
const constructor = mongoose.model(model);
|
|
49
55
|
if (lodash_1.default.isArray(resultCache)) {
|
|
50
56
|
return resultCache.map((item) => constructor.hydrate(item));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/extend/query.ts"],"names":[],"mappings":";;;AAAA,4DAAsB;AAKtB,
|
|
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":"key.js","sourceRoot":"","sources":["../../src/key.ts"],"names":[],"mappings":";;;;AAAA,mCAAmC;AACnC,kEAAgC;AAEhC,SAAgB,MAAM,CAAE,IAAyD;IAC/E,MAAM,SAAS,GAAG,IAAA,mBAAQ,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAY,EAAE,EAAE;QACjE,OAAO,GAAG,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClD,CAAC,CAAC,CAAA;IACF,OAAO,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC;AAND,wBAMC"}
|
|
@@ -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,
|
|
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,2 +1,2 @@
|
|
|
1
1
|
export declare function getKey(data: Record<string, unknown>[] | Record<string, unknown>): string;
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../../src/key.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,CAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAMzF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
|
-
import { getKey } from '../
|
|
2
|
+
import { getKey } from '../key';
|
|
3
3
|
export default function extendQuery(mongoose, cache) {
|
|
4
4
|
const mongooseExec = mongoose.Aggregate.prototype.exec;
|
|
5
5
|
mongoose.Aggregate.prototype.getCacheKey = function () {
|
|
@@ -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,
|
|
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"}
|
package/dist/esm/extend/query.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
|
-
import { getKey } from '../
|
|
2
|
+
import { getKey } from '../key';
|
|
3
3
|
export default function extendQuery(mongoose, cache) {
|
|
4
4
|
const mongooseExec = mongoose.Query.prototype.exec;
|
|
5
5
|
mongoose.Query.prototype.getCacheKey = function () {
|
|
@@ -37,11 +37,17 @@ export default function extendQuery(mongoose, cache) {
|
|
|
37
37
|
}
|
|
38
38
|
const key = this.getCacheKey();
|
|
39
39
|
const ttl = this.getCacheTTL();
|
|
40
|
+
const mongooseOptions = this.mongooseOptions();
|
|
41
|
+
const isCount = this.op?.includes('count');
|
|
42
|
+
const isDistinct = this.op === 'distinct';
|
|
40
43
|
const model = this.model.modelName;
|
|
41
44
|
const resultCache = await cache.get(key).catch((err) => {
|
|
42
45
|
console.error(err);
|
|
43
46
|
});
|
|
44
47
|
if (resultCache) {
|
|
48
|
+
if (isCount || isDistinct || mongooseOptions.lean) {
|
|
49
|
+
return resultCache;
|
|
50
|
+
}
|
|
45
51
|
const constructor = mongoose.model(model);
|
|
46
52
|
if (_.isArray(resultCache)) {
|
|
47
53
|
return resultCache.map((item) => constructor.hydrate(item));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/extend/query.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAA;AAKtB,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
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":"key.js","sourceRoot":"","sources":["../../src/key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,MAAM,CAAE,IAAyD;IAC/E,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAY,EAAE,EAAE;QACjE,OAAO,GAAG,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClD,CAAC,CAAC,CAAA;IACF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC"}
|
|
@@ -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,
|
|
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,2 +1,2 @@
|
|
|
1
1
|
export declare function getKey(data: Record<string, unknown>[] | Record<string, unknown>): string;
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../../src/key.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,CAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAMzF"}
|
package/package.json
CHANGED
package/src/extend/aggregate.ts
CHANGED
|
@@ -3,7 +3,7 @@ import _ from 'lodash'
|
|
|
3
3
|
import type { Mongoose } from 'mongoose'
|
|
4
4
|
import type Cache from '../cache/Cache'
|
|
5
5
|
|
|
6
|
-
import { getKey } from '../
|
|
6
|
+
import { getKey } from '../key'
|
|
7
7
|
|
|
8
8
|
export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
|
|
9
9
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
package/src/extend/query.ts
CHANGED
|
@@ -3,7 +3,7 @@ import _ from 'lodash'
|
|
|
3
3
|
import type { Mongoose } from 'mongoose'
|
|
4
4
|
import type Cache from '../cache/Cache'
|
|
5
5
|
|
|
6
|
-
import { getKey } from '../
|
|
6
|
+
import { getKey } from '../key'
|
|
7
7
|
|
|
8
8
|
export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
|
|
9
9
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
@@ -54,7 +54,10 @@ export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
|
|
|
54
54
|
|
|
55
55
|
const key = this.getCacheKey()
|
|
56
56
|
const ttl = this.getCacheTTL()
|
|
57
|
+
const mongooseOptions = this.mongooseOptions()
|
|
57
58
|
|
|
59
|
+
const isCount = this.op?.includes('count')
|
|
60
|
+
const isDistinct = this.op === 'distinct'
|
|
58
61
|
const model = this.model.modelName
|
|
59
62
|
|
|
60
63
|
const resultCache = await cache.get(key).catch((err) => {
|
|
@@ -62,6 +65,10 @@ export default function extendQuery (mongoose: Mongoose, cache: Cache): void {
|
|
|
62
65
|
})
|
|
63
66
|
|
|
64
67
|
if (resultCache) {
|
|
68
|
+
if (isCount || isDistinct || mongooseOptions.lean) {
|
|
69
|
+
return resultCache
|
|
70
|
+
}
|
|
71
|
+
|
|
65
72
|
const constructor = mongoose.model(model)
|
|
66
73
|
if (_.isArray(resultCache)) {
|
|
67
74
|
return resultCache.map((item) => constructor.hydrate(item) as Record<string, unknown>)
|
|
@@ -115,4 +115,60 @@ describe('CacheMongoose', () => {
|
|
|
115
115
|
expect(cache1?.[0].count).toEqual(cache2?.[0].count)
|
|
116
116
|
})
|
|
117
117
|
})
|
|
118
|
+
|
|
119
|
+
describe('memory scenarios with ttl', () => {
|
|
120
|
+
const users = [
|
|
121
|
+
{ name: 'John', age: 30, role: 'admin' },
|
|
122
|
+
{ name: 'Alice', age: 25, role: 'user' },
|
|
123
|
+
{ name: 'Bob', age: 35, role: 'user' }
|
|
124
|
+
]
|
|
125
|
+
|
|
126
|
+
beforeEach(async () => {
|
|
127
|
+
// Delete all users before each test
|
|
128
|
+
await User.deleteMany()
|
|
129
|
+
|
|
130
|
+
// Create new users
|
|
131
|
+
await User.create(users)
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
it('findById', async () => {
|
|
135
|
+
const john = await User.create({ name: 'John', age: 30, role: 'admin' })
|
|
136
|
+
const user = await User.findById(john._id).cache('1 minute').exec()
|
|
137
|
+
const cachedUser = await User.findById(john._id).cache('1 minute').exec()
|
|
138
|
+
|
|
139
|
+
expect(user).toEqual(cachedUser)
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
it('findOne', async () => {
|
|
143
|
+
const user = await User.findOne({ name: 'John', age: 30, role: 'admin' }).cache('1 minute').exec()
|
|
144
|
+
await User.create({ name: 'Steve', age: 30, role: 'admin' })
|
|
145
|
+
const cachedUser = await User.findOne({ name: 'John', age: 30, role: 'admin' }).cache('1 minute').exec()
|
|
146
|
+
|
|
147
|
+
expect(user).toEqual(cachedUser)
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
it('find', async () => {
|
|
151
|
+
const users = await User.find({ age: { $gte: 30 } }).cache('1 minute').exec()
|
|
152
|
+
await User.create({ name: 'Steve', age: 30, role: 'admin' })
|
|
153
|
+
const cachedUsers = await User.find({ age: { $gte: 30 } }).cache('1 minute').exec()
|
|
154
|
+
|
|
155
|
+
expect(users).toEqual(cachedUsers)
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
it('count', async () => {
|
|
159
|
+
const count = await User.count({ age: { $gte: 30 } }).cache('1 minute').exec()
|
|
160
|
+
await User.create({ name: 'Steve', age: 30, role: 'admin' })
|
|
161
|
+
const cachedCount = await User.count({ age: { $gte: 30 } }).cache('1 minute').exec()
|
|
162
|
+
|
|
163
|
+
expect(count).toEqual(cachedCount)
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
it('distinct', async () => {
|
|
167
|
+
const emails = await User.distinct('name').cache('1 minute').exec()
|
|
168
|
+
await User.create({ name: 'Steve', age: 30, role: 'admin' })
|
|
169
|
+
const cachedEmails = await User.distinct('name').cache('1 minute').exec()
|
|
170
|
+
|
|
171
|
+
expect(emails).toEqual(cachedEmails)
|
|
172
|
+
})
|
|
173
|
+
})
|
|
118
174
|
})
|
package/tests/crypto.test.ts
CHANGED
package/dist/cjs/crypto.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":";;;;AAAA,mCAAmC;AACnC,kEAAgC;AAEhC,SAAgB,MAAM,CAAE,IAAyD;IAC/E,MAAM,SAAS,GAAG,IAAA,mBAAQ,EAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAY,EAAE,EAAE;QACjE,OAAO,GAAG,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClD,CAAC,CAAC,CAAA;IACF,OAAO,IAAA,mBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC;AAND,wBAMC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/crypto.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,CAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAMzF"}
|
package/dist/esm/crypto.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,MAAM,CAAE,IAAyD;IAC/E,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAY,EAAE,EAAE;QACjE,OAAO,GAAG,YAAY,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClD,CAAC,CAAC,CAAA;IACF,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC3D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../../src/crypto.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,CAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAMzF"}
|
|
File without changes
|