express-memorize 1.3.0 → 2.0.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/CHANGELOG.md +12 -0
- package/README.md +204 -66
- package/dist/MemorizeStore.d.ts +29 -7
- package/dist/MemorizeStore.d.ts.map +1 -1
- package/dist/MemorizeStore.js +78 -7
- package/dist/MemorizeStore.js.map +1 -1
- package/dist/adapters/express.d.ts +25 -0
- package/dist/adapters/express.d.ts.map +1 -0
- package/dist/adapters/express.js +62 -0
- package/dist/adapters/express.js.map +1 -0
- package/dist/adapters/fetch.d.ts +45 -0
- package/dist/adapters/fetch.d.ts.map +1 -0
- package/dist/adapters/fetch.js +72 -0
- package/dist/adapters/fetch.js.map +1 -0
- package/dist/adapters/hono.d.ts +34 -0
- package/dist/adapters/hono.d.ts.map +1 -0
- package/dist/adapters/hono.js +63 -0
- package/dist/adapters/hono.js.map +1 -0
- package/dist/adapters/nestjs.d.ts +84 -0
- package/dist/adapters/nestjs.d.ts.map +1 -0
- package/dist/adapters/nestjs.js +194 -0
- package/dist/adapters/nestjs.js.map +1 -0
- package/dist/domain/CacheEntry.d.ts +4 -0
- package/dist/domain/CacheEntry.d.ts.map +1 -1
- package/dist/domain/Memorize.d.ts +99 -4
- package/dist/domain/Memorize.d.ts.map +1 -1
- package/dist/domain/MemorizeCallOptions.d.ts +2 -2
- package/dist/domain/MemorizeEvent.d.ts +2 -1
- package/dist/domain/MemorizeEvent.d.ts.map +1 -1
- package/dist/domain/MemorizeEventType.d.ts +3 -1
- package/dist/domain/MemorizeEventType.d.ts.map +1 -1
- package/dist/domain/MemorizeEventType.js +2 -0
- package/dist/domain/MemorizeEventType.js.map +1 -1
- package/dist/domain/MemorizeEvictEvent.d.ts +18 -0
- package/dist/domain/MemorizeEvictEvent.d.ts.map +1 -0
- package/dist/domain/MemorizeEvictEvent.js +3 -0
- package/dist/domain/MemorizeEvictEvent.js.map +1 -0
- package/dist/domain/MemorizeOptions.d.ts +12 -0
- package/dist/domain/MemorizeOptions.d.ts.map +1 -1
- package/dist/domain/MemorizeSetEvent.d.ts +2 -0
- package/dist/domain/MemorizeSetEvent.d.ts.map +1 -1
- package/dist/domain/MemorizeStats.d.ts +12 -0
- package/dist/domain/MemorizeStats.d.ts.map +1 -0
- package/dist/domain/MemorizeStats.js +3 -0
- package/dist/domain/MemorizeStats.js.map +1 -0
- package/dist/domain/index.d.ts +2 -0
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/memorize.d.ts +19 -16
- package/dist/memorize.d.ts.map +1 -1
- package/dist/memorize.js +51 -45
- package/dist/memorize.js.map +1 -1
- package/package.json +46 -12
package/dist/memorize.js
CHANGED
|
@@ -2,38 +2,42 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.memorize = memorize;
|
|
4
4
|
const MemorizeStore_1 = require("./MemorizeStore");
|
|
5
|
+
const express_1 = require("./adapters/express");
|
|
5
6
|
/**
|
|
6
|
-
* Creates an in-memory cache
|
|
7
|
+
* Creates an in-memory cache instance.
|
|
7
8
|
*
|
|
8
|
-
* Returns a {@link Memorize} instance that can be used as
|
|
9
|
-
* a
|
|
10
|
-
* same underlying store.
|
|
9
|
+
* Returns a {@link Memorize} instance that can be used as Express middleware,
|
|
10
|
+
* as a direct service-level cache, or as a cache management API — all sharing
|
|
11
|
+
* the same underlying store.
|
|
11
12
|
*
|
|
12
|
-
* **Only `GET` requests
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* **HTTP middleware:** Only `GET` requests with a `2xx` status code are cached.
|
|
14
|
+
* The cache key is `req.originalUrl`, which includes the query string.
|
|
15
|
+
*
|
|
16
|
+
* **Direct cache:** Use {@link Memorize.set}, {@link Memorize.getValue}, and
|
|
17
|
+
* {@link Memorize.remember} to cache arbitrary values from services, workers,
|
|
18
|
+
* or any non-HTTP code.
|
|
15
19
|
*
|
|
16
20
|
* @param options - Global configuration for the cache instance.
|
|
17
21
|
*
|
|
18
|
-
* @example
|
|
22
|
+
* @example Express middleware
|
|
19
23
|
* ```ts
|
|
20
24
|
* const cache = memorize({ ttl: 30_000 });
|
|
21
25
|
*
|
|
22
|
-
* app.get('/users', cache(),
|
|
23
|
-
*
|
|
24
|
-
* });
|
|
26
|
+
* app.get('/users', cache.express(), handler);
|
|
27
|
+
* app.get('/users', cache(), handler); // backwards-compatible alias
|
|
25
28
|
* ```
|
|
26
29
|
*
|
|
27
|
-
* @example
|
|
30
|
+
* @example Service-level caching
|
|
28
31
|
* ```ts
|
|
29
|
-
* const cache = memorize({ ttl:
|
|
30
|
-
*
|
|
32
|
+
* const cache = memorize({ ttl: 30_000 });
|
|
33
|
+
*
|
|
34
|
+
* const users = await cache.remember('users:list', () => userService.findAll());
|
|
35
|
+
* cache.set('config', appConfig);
|
|
36
|
+
* const config = cache.getValue<AppConfig>('config');
|
|
31
37
|
* ```
|
|
32
38
|
*
|
|
33
39
|
* @example Cache invalidation
|
|
34
40
|
* ```ts
|
|
35
|
-
* const cache = memorize({ ttl: 30_000 });
|
|
36
|
-
*
|
|
37
41
|
* app.post('/users', (req, res) => {
|
|
38
42
|
* users.push(req.body);
|
|
39
43
|
* cache.delete('/users');
|
|
@@ -50,36 +54,34 @@ const MemorizeStore_1 = require("./MemorizeStore");
|
|
|
50
54
|
* ```
|
|
51
55
|
*/
|
|
52
56
|
function memorize(options = {}) {
|
|
53
|
-
const { ttl } = options;
|
|
54
|
-
const store = new MemorizeStore_1.MemorizeStore();
|
|
57
|
+
const { ttl, maxEntries } = options;
|
|
58
|
+
const store = new MemorizeStore_1.MemorizeStore(maxEntries);
|
|
59
|
+
const expressMiddleware = (0, express_1.createExpressMiddleware)(store, ttl);
|
|
55
60
|
const cache = function (callOptions) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
};
|
|
81
|
-
next();
|
|
82
|
-
};
|
|
61
|
+
return expressMiddleware(callOptions);
|
|
62
|
+
};
|
|
63
|
+
cache.express = (callOptions) => expressMiddleware(callOptions);
|
|
64
|
+
cache.set = (key, value, entryTtl) => {
|
|
65
|
+
store.set(key, { body: JSON.stringify(value), statusCode: 200, contentType: 'application/json' }, entryTtl !== null && entryTtl !== void 0 ? entryTtl : ttl);
|
|
66
|
+
};
|
|
67
|
+
cache.getValue = (key) => {
|
|
68
|
+
const info = store.get(key);
|
|
69
|
+
if (!info)
|
|
70
|
+
return undefined;
|
|
71
|
+
try {
|
|
72
|
+
return JSON.parse(info.body);
|
|
73
|
+
}
|
|
74
|
+
catch (_a) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
cache.remember = async (key, factory, rememberTtl) => {
|
|
79
|
+
const existing = cache.getValue(key);
|
|
80
|
+
if (existing !== undefined)
|
|
81
|
+
return existing;
|
|
82
|
+
const value = await factory();
|
|
83
|
+
cache.set(key, value, rememberTtl);
|
|
84
|
+
return value;
|
|
83
85
|
};
|
|
84
86
|
cache.get = (key) => store.get(key);
|
|
85
87
|
cache.getAll = () => store.getAll();
|
|
@@ -87,6 +89,10 @@ function memorize(options = {}) {
|
|
|
87
89
|
cache.deleteMatching = (pattern) => store.deleteMatching(pattern);
|
|
88
90
|
cache.clear = () => store.clear();
|
|
89
91
|
cache.on = store.on.bind(store);
|
|
92
|
+
cache.size = () => store.size();
|
|
93
|
+
cache.byteSize = () => store.byteSize();
|
|
94
|
+
cache.getStats = () => store.getStats();
|
|
95
|
+
cache._store = store;
|
|
90
96
|
return cache;
|
|
91
97
|
}
|
|
92
98
|
//# sourceMappingURL=memorize.js.map
|
package/dist/memorize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memorize.js","sourceRoot":"","sources":["../src/memorize.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"memorize.js","sourceRoot":"","sources":["../src/memorize.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "express-memorize",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "In-memory cache middleware for Express.js. Caches GET responses with optional TTL — zero dependencies, fully typed.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./express": {
|
|
14
|
+
"types": "./dist/adapters/express.d.ts",
|
|
15
|
+
"default": "./dist/adapters/express.js"
|
|
16
|
+
},
|
|
17
|
+
"./hono": {
|
|
18
|
+
"types": "./dist/adapters/hono.d.ts",
|
|
19
|
+
"default": "./dist/adapters/hono.js"
|
|
20
|
+
},
|
|
21
|
+
"./nestjs": {
|
|
22
|
+
"types": "./dist/adapters/nestjs.d.ts",
|
|
23
|
+
"default": "./dist/adapters/nestjs.js"
|
|
24
|
+
},
|
|
25
|
+
"./fetch": {
|
|
26
|
+
"types": "./dist/adapters/fetch.d.ts",
|
|
27
|
+
"default": "./dist/adapters/fetch.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
7
30
|
"homepage": "https://github.com/ElJijuna/express-memorize#readme",
|
|
8
31
|
"repository": {
|
|
9
32
|
"type": "git",
|
|
@@ -25,16 +48,6 @@
|
|
|
25
48
|
"docs": "typedoc",
|
|
26
49
|
"docs:watch": "typedoc --watch"
|
|
27
50
|
},
|
|
28
|
-
"jest": {
|
|
29
|
-
"preset": "ts-jest",
|
|
30
|
-
"testEnvironment": "node",
|
|
31
|
-
"testMatch": [
|
|
32
|
-
"**/__tests__/**/*.test.ts"
|
|
33
|
-
],
|
|
34
|
-
"fakeTimers": {
|
|
35
|
-
"enableGlobally": false
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
51
|
"keywords": [
|
|
39
52
|
"express",
|
|
40
53
|
"middleware",
|
|
@@ -47,13 +60,34 @@
|
|
|
47
60
|
],
|
|
48
61
|
"license": "MIT",
|
|
49
62
|
"peerDependencies": {
|
|
50
|
-
"
|
|
63
|
+
"@nestjs/common": ">=9.0.0",
|
|
64
|
+
"@nestjs/core": ">=9.0.0",
|
|
65
|
+
"express": ">=4.0.0",
|
|
66
|
+
"hono": ">=4.0.0",
|
|
67
|
+
"rxjs": ">=7.0.0"
|
|
68
|
+
},
|
|
69
|
+
"peerDependenciesMeta": {
|
|
70
|
+
"@nestjs/common": {
|
|
71
|
+
"optional": true
|
|
72
|
+
},
|
|
73
|
+
"@nestjs/core": {
|
|
74
|
+
"optional": true
|
|
75
|
+
},
|
|
76
|
+
"hono": {
|
|
77
|
+
"optional": true
|
|
78
|
+
},
|
|
79
|
+
"rxjs": {
|
|
80
|
+
"optional": true
|
|
81
|
+
}
|
|
51
82
|
},
|
|
52
83
|
"devDependencies": {
|
|
84
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
53
85
|
"@types/express": "^4.17.21",
|
|
54
86
|
"@types/jest": "^29.0.0",
|
|
55
87
|
"@types/node": "^20.0.0",
|
|
88
|
+
"hono": "^4.12.16",
|
|
56
89
|
"jest": "^29.0.0",
|
|
90
|
+
"semantic-release": "^24.2.9",
|
|
57
91
|
"ts-jest": "^29.0.0",
|
|
58
92
|
"typedoc": "^0.28.18",
|
|
59
93
|
"typedoc-material-theme": "^1.4.1",
|