express-memorize 2.1.0 → 2.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/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # [2.3.0](https://github.com/ElJijuna/express-memorize/compare/v2.2.0...v2.3.0) (2026-05-18)
2
+
3
+
4
+ ### Features
5
+
6
+ * add pluggable serializer option with node:v8 support and benchmark suite ([6b86a3e](https://github.com/ElJijuna/express-memorize/commit/6b86a3eebffc0f513261e6fd657904ad4daab911)), closes [#19](https://github.com/ElJijuna/express-memorize/issues/19)
7
+
8
+ # [2.2.0](https://github.com/ElJijuna/express-memorize/compare/v2.1.0...v2.2.0) (2026-05-11)
9
+
10
+
11
+ ### Features
12
+
13
+ * **fastify:** add Fastify cache adapter (Closes [#9](https://github.com/ElJijuna/express-memorize/issues/9)) ([9b940cd](https://github.com/ElJijuna/express-memorize/commit/9b940cdc4a15c27d17264a497c29d32bde09e523))
14
+ * **koa:** add Koa cache adapter (Closes [#8](https://github.com/ElJijuna/express-memorize/issues/8)) ([39673fc](https://github.com/ElJijuna/express-memorize/commit/39673fcd92b5cb5d57560adb982cf1d4b85d4eb5))
15
+
1
16
  # [2.1.0](https://github.com/ElJijuna/express-memorize/compare/v2.0.0...v2.1.0) (2026-05-11)
2
17
 
3
18
 
package/README.md CHANGED
@@ -9,20 +9,30 @@
9
9
  </p>
10
10
 
11
11
  <p align="center">
12
- In-memory HTTP cache for <strong>Express, NestJS, Hono, Fetch API</strong>, and more.<br/>
12
+ In-memory HTTP cache for <strong>Express, Fastify, Koa, NestJS, Hono, Fetch API</strong>, and more.<br/>
13
13
  Caches <code>GET</code> responses with optional TTL — zero dependencies, fully typed.
14
14
  </p>
15
15
 
16
+ <p align="center">
17
+ <a href="#express"><img src="https://img.shields.io/badge/Express-000000?logo=express&logoColor=white" alt="Express adapter" /></a>
18
+ <a href="#fastify"><img src="https://img.shields.io/badge/Fastify-000000?logo=fastify&logoColor=white" alt="Fastify adapter" /></a>
19
+ <a href="#koa"><img src="https://img.shields.io/badge/Koa-33333D?logo=koa&logoColor=white" alt="Koa adapter" /></a>
20
+ <a href="#nestjs"><img src="https://img.shields.io/badge/NestJS-E0234E?logo=nestjs&logoColor=white" alt="NestJS adapter" /></a>
21
+ <a href="#hono"><img src="https://img.shields.io/badge/Hono-E36002?logo=hono&logoColor=white" alt="Hono adapter" /></a>
22
+ <a href="#fetch-api--serverless"><img src="https://img.shields.io/badge/Fetch%20API-F7DF1E?logo=javascript&logoColor=black" alt="Fetch API adapter" /></a>
23
+ </p>
24
+
16
25
  ---
17
26
 
18
27
  ## Features
19
28
 
20
29
  - Caches `GET` responses automatically when status code is `2xx`
21
- - Works with **Express**, **NestJS**, **Hono**, **Fetch API / serverless**, and direct service-level usage
30
+ - Works with **Express**, **Fastify**, **Koa**, **NestJS**, **Hono**, **Fetch API / serverless**, and direct service-level usage
22
31
  - Per-route TTL override and `noCache` bypass
23
32
  - **`maxEntries` cap with LRU eviction** to bound memory usage
24
33
  - **Size metrics**: `size()`, `byteSize()`, `getStats()`
25
34
  - **Service-level cache**: `remember()`, `set()`, `getValue()`
35
+ - **Pluggable serializer**: `'auto'` (node:v8 when available, else JSON), `'json'`, `'v8'`, or custom
26
36
  - Event hooks: `set`, `delete`, `expire`, `evict`
27
37
  - Cache inspection and invalidation API (`get`, `getAll`, `delete`, `deleteMatching`, `clear`)
28
38
  - Hit counter per cache entry
@@ -38,6 +48,8 @@ npm install express-memorize
38
48
  Adapters for non-Express runtimes are optional — install only what you need:
39
49
 
40
50
  ```bash
51
+ npm install fastify # only if using the Fastify adapter
52
+ npm install koa @koa/router # only if using the Koa adapter
41
53
  npm install hono # only if using the Hono adapter
42
54
  npm install @nestjs/common @nestjs/core rxjs # only if using the NestJS adapter
43
55
  ```
@@ -61,6 +73,43 @@ app.get('/users', cache(), async (req, res) => {
61
73
  app.listen(3000);
62
74
  ```
63
75
 
76
+ ### Fastify
77
+
78
+ ```typescript
79
+ import Fastify from 'fastify';
80
+ import { memorize } from 'express-memorize';
81
+ import { createFastifyPlugin } from 'express-memorize/fastify';
82
+
83
+ const app = Fastify();
84
+ const cache = memorize({ ttl: 30_000 });
85
+
86
+ await app.register(createFastifyPlugin(cache));
87
+
88
+ app.get('/users', async () => {
89
+ return usersService.findAll();
90
+ });
91
+ ```
92
+
93
+ ### Koa
94
+
95
+ ```typescript
96
+ import Koa from 'koa';
97
+ import Router from '@koa/router';
98
+ import { memorize } from 'express-memorize';
99
+ import { createKoaMiddleware } from 'express-memorize/koa';
100
+
101
+ const app = new Koa();
102
+ const router = new Router();
103
+ const cache = memorize({ ttl: 30_000 });
104
+
105
+ router.get('/users', createKoaMiddleware(cache), async (ctx) => {
106
+ ctx.body = await usersService.findAll();
107
+ });
108
+
109
+ app.use(router.routes());
110
+ app.use(router.allowedMethods());
111
+ ```
112
+
64
113
  ### Hono
65
114
 
66
115
  ```typescript
@@ -137,6 +186,49 @@ cache.set('config', appConfig);
137
186
  const config = cache.getValue<AppConfig>('config');
138
187
  ```
139
188
 
189
+ ### Serializer
190
+
191
+ The `serializer` option controls how values passed to `set()` / `getValue()` / `remember()` are stored internally. It does **not** affect HTTP middleware caching — adapters store response bodies as-is.
192
+
193
+ | Value | Serializes to | Handles `Date`, `Map`, `Set`, `Buffer` | Runtime |
194
+ |-------|--------------|----------------------------------------|---------|
195
+ | `'auto'` *(default)* | Buffer (v8) or string (JSON) | Yes — when `node:v8` is available | Any |
196
+ | `'json'` | string | No | Any (edge runtimes, human-readable) |
197
+ | `'v8'` | Buffer | Yes | Node.js / Bun — throws at construction otherwise |
198
+ | Custom object | user-defined | user-defined | Any |
199
+
200
+ ```typescript
201
+ // auto (default): uses node:v8 when available, falls back to JSON silently
202
+ const cache = memorize();
203
+
204
+ // Always JSON — useful for edge runtimes or when you need human-readable bodies
205
+ const cache = memorize({ serializer: 'json' });
206
+
207
+ // Always v8 — throws at construction if node:v8 is not available
208
+ const cache = memorize({ serializer: 'v8' });
209
+
210
+ // Custom serializer — bring your own (MessagePack, CBOR, etc.)
211
+ import { pack, unpack } from 'msgpackr';
212
+ const cache = memorize({
213
+ serializer: {
214
+ serialize: (v) => Buffer.from(pack(v)),
215
+ deserialize: (d) => unpack(d as Buffer),
216
+ },
217
+ });
218
+ ```
219
+
220
+ With `'v8'` or `'auto'`, `set()` correctly round-trips types that JSON cannot represent:
221
+
222
+ ```typescript
223
+ const cache = memorize({ serializer: 'v8', ttl: Infinity });
224
+
225
+ cache.set('created', new Date());
226
+ cache.getValue<Date>('created'); // Date instance preserved
227
+
228
+ cache.set('roles', new Set(['admin', 'editor']));
229
+ cache.getValue<Set<string>>('roles'); // Set instance preserved
230
+ ```
231
+
140
232
  ---
141
233
 
142
234
  ## Usage
@@ -166,6 +258,65 @@ app.get('/live-feed', cache({ noCache: true }), handler);
166
258
  // Sets X-Cache: BYPASS, never reads or writes the cache
167
259
  ```
168
260
 
261
+ ### Fastify route-level usage
262
+
263
+ ```typescript
264
+ import { createFastifyPreHandler } from 'express-memorize/fastify';
265
+
266
+ app.get(
267
+ '/users',
268
+ {
269
+ preHandler: createFastifyPreHandler(cache, { ttl: 10_000 }),
270
+ },
271
+ async () => usersService.findAll(),
272
+ );
273
+ ```
274
+
275
+ ### GraphQL caching
276
+
277
+ GraphQL is not a simple route-level caching problem. A single `POST /graphql`
278
+ endpoint can execute different operations, use variables, depend on the current
279
+ viewer, and return partial data with errors. For now, the recommended strategy
280
+ is **service-level caching** with `remember()` inside resolvers or the services
281
+ they call.
282
+
283
+ ```typescript
284
+ const cache = memorize({ ttl: 30_000 });
285
+
286
+ const resolvers = {
287
+ Query: {
288
+ user: (_parent, args, context) => {
289
+ const viewerScope = context.user ? `user:${context.user.id}` : 'anonymous';
290
+ return cache.remember(
291
+ `graphql:${viewerScope}:user:${args.id}`,
292
+ () => usersService.findVisibleById(args.id, context.user),
293
+ );
294
+ },
295
+ },
296
+ Mutation: {
297
+ updateUser: async (_parent, args) => {
298
+ const user = await usersService.update(args.id, args.input);
299
+ cache.deleteMatching(`graphql:*:user:${args.id}`);
300
+ return user;
301
+ },
302
+ },
303
+ };
304
+ ```
305
+
306
+ **GraphQL cache key rules:**
307
+
308
+ - Include every input that can change the result: operation name, normalized query or field name, variables, locale, feature flags, and any relevant authorization scope.
309
+ - Do not share cached data across users unless the resolver result is genuinely public.
310
+ - Keep mutation invalidation explicit with `delete()` or `deleteMatching()`; automatic invalidation is too schema-specific for a generic adapter.
311
+ - Avoid caching responses that contain GraphQL errors unless your application has a deliberate policy for partial data.
312
+ - Prefer resolver or service-level caching for expensive data fetches. Operation-level caching may be considered later for public, query-only workloads with strict keying rules.
313
+
314
+ There is currently no dedicated GraphQL adapter. If one is added later, the
315
+ first practical target should be **Apollo Server**, because its plugin lifecycle
316
+ can cache complete operation responses without coupling the core package entry
317
+ point to GraphQL. NestJS GraphQL, Mercurius, and Yoga integrations should stay
318
+ separate implementation issues unless a shared GraphQL abstraction emerges.
319
+
169
320
  ### NestJS decorators
170
321
 
171
322
  Use `MemorizeInterceptor` on a controller or globally, then configure caching at the controller or method level.
@@ -296,6 +447,7 @@ Creates a cache instance. Returns a `Memorize` object.
296
447
  |--------|------|---------|-------------|
297
448
  | `ttl` | `number` | `60_000` | Time-to-live in milliseconds. Pass `Infinity` for no expiry. |
298
449
  | `maxEntries` | `number` | `undefined` | Maximum number of entries. LRU eviction when reached. |
450
+ | `serializer` | `'auto' \| 'json' \| 'v8' \| Serializer` | `'auto'` | Serializer for `set()` / `getValue()`. `'auto'` uses `node:v8` when available, falls back to JSON. Does not affect HTTP middleware caching. |
299
451
 
300
452
  ### `cache(options?)` / `cache.express(options?)`
301
453
 
@@ -333,6 +485,8 @@ Returns an Express `RequestHandler`. `cache()` is a backwards-compatible alias f
333
485
  |-------------|--------|-----------|
334
486
  | `express-memorize` | `memorize` | Core factory |
335
487
  | `express-memorize/express` | `createExpressAdapter(cache, options?)` | Express |
488
+ | `express-memorize/fastify` | `createFastifyPlugin(cache, options?)`, `createFastifyPreHandler(cache, options?)` | Fastify |
489
+ | `express-memorize/koa` | `createKoaMiddleware(cache, options?)` | Koa |
336
490
  | `express-memorize/nestjs` | `MemorizeModule`, `MemorizeInterceptor`, decorators | NestJS |
337
491
  | `express-memorize/hono` | `createHonoMiddleware(cache, options?)` | Hono |
338
492
  | `express-memorize/fetch` | `cacheFetchHandler(cache, handler, options?)` | Fetch API / Serverless |
@@ -0,0 +1,40 @@
1
+ import type { FastifyPluginCallback, FastifyRequest, preHandlerHookHandler } from 'fastify';
2
+ import type { Memorize } from '../domain/Memorize';
3
+ export interface FastifyAdapterOptions {
4
+ /** Time-to-live in milliseconds. Defaults to the global TTL. */
5
+ ttl?: number;
6
+ /** Skip caching for this route. Sets `X-Cache: BYPASS`. */
7
+ noCache?: boolean;
8
+ /** Custom cache key extractor. Defaults to `request.url`. */
9
+ key?: (request: FastifyRequest) => string;
10
+ }
11
+ /**
12
+ * Creates a Fastify plugin that caches `GET` route responses with a `2xx`
13
+ * status code.
14
+ *
15
+ * Requires `fastify` to be installed as an optional peer dependency.
16
+ *
17
+ * @param cache - The {@link Memorize} instance to use as the backing store.
18
+ * @param options - Optional plugin-level options.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import Fastify from 'fastify';
23
+ * import { memorize } from 'express-memorize';
24
+ * import { createFastifyPlugin } from 'express-memorize/fastify';
25
+ *
26
+ * const app = Fastify();
27
+ * const cache = memorize({ ttl: 30_000 });
28
+ *
29
+ * await app.register(createFastifyPlugin(cache));
30
+ * ```
31
+ */
32
+ export declare function createFastifyPlugin(cache: Memorize, options?: FastifyAdapterOptions): FastifyPluginCallback;
33
+ /**
34
+ * Creates a route-level Fastify `preHandler` that caches `GET` responses.
35
+ *
36
+ * Use this when only selected routes should be cached, or when a route needs a
37
+ * TTL, `noCache`, or key override.
38
+ */
39
+ export declare function createFastifyPreHandler(cache: Memorize, options?: FastifyAdapterOptions): preHandlerHookHandler;
40
+ //# sourceMappingURL=fastify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.d.ts","sourceRoot":"","sources":["../../src/adapters/fastify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EAErB,cAAc,EACd,qBAAqB,EACtB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,MAAM,CAAC;CAC3C;AAmBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,EACf,OAAO,CAAC,EAAE,qBAAqB,GAC9B,qBAAqB,CAavB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,EACf,OAAO,CAAC,EAAE,qBAAqB,GAC9B,qBAAqB,CAkDvB"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createFastifyPlugin = createFastifyPlugin;
4
+ exports.createFastifyPreHandler = createFastifyPreHandler;
5
+ function serializePayload(payload) {
6
+ if (typeof payload === 'string' ||
7
+ Buffer.isBuffer(payload) ||
8
+ payload instanceof ArrayBuffer ||
9
+ ArrayBuffer.isView(payload)) {
10
+ return { body: payload };
11
+ }
12
+ if (payload === undefined) {
13
+ return { body: '' };
14
+ }
15
+ return { body: JSON.stringify(payload), contentType: 'application/json; charset=utf-8' };
16
+ }
17
+ /**
18
+ * Creates a Fastify plugin that caches `GET` route responses with a `2xx`
19
+ * status code.
20
+ *
21
+ * Requires `fastify` to be installed as an optional peer dependency.
22
+ *
23
+ * @param cache - The {@link Memorize} instance to use as the backing store.
24
+ * @param options - Optional plugin-level options.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * import Fastify from 'fastify';
29
+ * import { memorize } from 'express-memorize';
30
+ * import { createFastifyPlugin } from 'express-memorize/fastify';
31
+ *
32
+ * const app = Fastify();
33
+ * const cache = memorize({ ttl: 30_000 });
34
+ *
35
+ * await app.register(createFastifyPlugin(cache));
36
+ * ```
37
+ */
38
+ function createFastifyPlugin(cache, options) {
39
+ const plugin = function memorizeFastifyPlugin(fastify, _pluginOptions, done) {
40
+ fastify.addHook('preHandler', createFastifyPreHandler(cache, options));
41
+ done();
42
+ };
43
+ Object.defineProperties(plugin, {
44
+ [Symbol.for('skip-override')]: { value: true },
45
+ [Symbol.for('fastify.display-name')]: { value: 'express-memorize-fastify' },
46
+ [Symbol.for('plugin-meta')]: { value: { name: 'express-memorize-fastify' } },
47
+ });
48
+ return plugin;
49
+ }
50
+ /**
51
+ * Creates a route-level Fastify `preHandler` that caches `GET` responses.
52
+ *
53
+ * Use this when only selected routes should be cached, or when a route needs a
54
+ * TTL, `noCache`, or key override.
55
+ */
56
+ function createFastifyPreHandler(cache, options) {
57
+ return function memorizeFastifyPreHandler(request, reply, done) {
58
+ if (request.method !== 'GET') {
59
+ done();
60
+ return;
61
+ }
62
+ if (options === null || options === void 0 ? void 0 : options.noCache) {
63
+ reply.header('X-Cache', 'BYPASS');
64
+ done();
65
+ return;
66
+ }
67
+ const key = (options === null || options === void 0 ? void 0 : options.key) ? options.key(request) : request.url;
68
+ const cached = cache._store.getRaw(key);
69
+ if (cached) {
70
+ reply
71
+ .header('X-Cache', 'HIT')
72
+ .type(cached.contentType)
73
+ .code(cached.statusCode)
74
+ .send(cached.body);
75
+ return;
76
+ }
77
+ const originalSend = reply.send.bind(reply);
78
+ reply.send = function sendWithCache(payload) {
79
+ var _a, _b, _c, _d;
80
+ const statusCode = reply.statusCode;
81
+ if (statusCode >= 200 && statusCode < 300) {
82
+ const ttl = (_a = options === null || options === void 0 ? void 0 : options.ttl) !== null && _a !== void 0 ? _a : cache._ttl;
83
+ const serialized = serializePayload(payload);
84
+ const contentType = (_d = (_c = (_b = reply.getHeader('content-type')) === null || _b === void 0 ? void 0 : _b.toString()) !== null && _c !== void 0 ? _c : serialized.contentType) !== null && _d !== void 0 ? _d : 'application/octet-stream';
85
+ cache._store.set(key, { body: serialized.body, statusCode, contentType }, ttl);
86
+ }
87
+ reply.header('X-Cache', 'MISS');
88
+ return originalSend(payload);
89
+ };
90
+ done();
91
+ };
92
+ }
93
+ //# sourceMappingURL=fastify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fastify.js","sourceRoot":"","sources":["../../src/adapters/fastify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { Context, Middleware } from 'koa';
2
+ import type { Memorize } from '../domain/Memorize';
3
+ export interface KoaAdapterOptions {
4
+ /** Time-to-live in milliseconds. Defaults to the global TTL. */
5
+ ttl?: number;
6
+ /** Skip caching for this route. Sets `X-Cache: BYPASS`. */
7
+ noCache?: boolean;
8
+ /** Custom cache key extractor. Defaults to `ctx.originalUrl ?? ctx.url`. */
9
+ key?: (ctx: Context) => string;
10
+ }
11
+ /**
12
+ * Creates Koa middleware that caches `GET` responses with a `2xx` status code.
13
+ *
14
+ * Requires `koa` to be installed as an optional peer dependency.
15
+ *
16
+ * @param cache - The {@link Memorize} instance to use as the backing store.
17
+ * @param options - Optional per-route options.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import Koa from 'koa';
22
+ * import Router from '@koa/router';
23
+ * import { memorize } from 'express-memorize';
24
+ * import { createKoaMiddleware } from 'express-memorize/koa';
25
+ *
26
+ * const app = new Koa();
27
+ * const router = new Router();
28
+ * const cache = memorize({ ttl: 30_000 });
29
+ *
30
+ * router.get('/users', createKoaMiddleware(cache), async (ctx) => {
31
+ * ctx.body = await usersService.findAll();
32
+ * });
33
+ * ```
34
+ */
35
+ export declare function createKoaMiddleware(cache: Memorize, options?: KoaAdapterOptions): Middleware;
36
+ //# sourceMappingURL=koa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"koa.d.ts","sourceRoot":"","sources":["../../src/adapters/koa.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4EAA4E;IAC5E,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;CAChC;AAsBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,EACf,OAAO,CAAC,EAAE,iBAAiB,GAC1B,UAAU,CAoCZ"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createKoaMiddleware = createKoaMiddleware;
4
+ function defaultKey(ctx) {
5
+ var _a;
6
+ return (_a = ctx.originalUrl) !== null && _a !== void 0 ? _a : ctx.url;
7
+ }
8
+ function inferContentType(body) {
9
+ if (Buffer.isBuffer(body) || body instanceof ArrayBuffer || ArrayBuffer.isView(body)) {
10
+ return 'application/octet-stream';
11
+ }
12
+ if (typeof body === 'string') {
13
+ return 'text/plain';
14
+ }
15
+ if (body === undefined || body === null) {
16
+ return 'application/octet-stream';
17
+ }
18
+ return 'application/json';
19
+ }
20
+ /**
21
+ * Creates Koa middleware that caches `GET` responses with a `2xx` status code.
22
+ *
23
+ * Requires `koa` to be installed as an optional peer dependency.
24
+ *
25
+ * @param cache - The {@link Memorize} instance to use as the backing store.
26
+ * @param options - Optional per-route options.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import Koa from 'koa';
31
+ * import Router from '@koa/router';
32
+ * import { memorize } from 'express-memorize';
33
+ * import { createKoaMiddleware } from 'express-memorize/koa';
34
+ *
35
+ * const app = new Koa();
36
+ * const router = new Router();
37
+ * const cache = memorize({ ttl: 30_000 });
38
+ *
39
+ * router.get('/users', createKoaMiddleware(cache), async (ctx) => {
40
+ * ctx.body = await usersService.findAll();
41
+ * });
42
+ * ```
43
+ */
44
+ function createKoaMiddleware(cache, options) {
45
+ return async function memorizeKoaMiddleware(ctx, next) {
46
+ var _a;
47
+ if (ctx.method !== 'GET') {
48
+ await next();
49
+ return;
50
+ }
51
+ if (options === null || options === void 0 ? void 0 : options.noCache) {
52
+ ctx.set('X-Cache', 'BYPASS');
53
+ await next();
54
+ return;
55
+ }
56
+ const key = (options === null || options === void 0 ? void 0 : options.key) ? options.key(ctx) : defaultKey(ctx);
57
+ const cached = cache._store.getRaw(key);
58
+ if (cached) {
59
+ ctx.set('X-Cache', 'HIT');
60
+ ctx.status = cached.statusCode;
61
+ ctx.type = cached.contentType;
62
+ ctx.body = cached.body;
63
+ return;
64
+ }
65
+ await next();
66
+ if (ctx.status >= 200 && ctx.status < 300) {
67
+ const contentType = ctx.response.type || inferContentType(ctx.body);
68
+ cache._store.set(key, { body: ctx.body, statusCode: ctx.status, contentType }, (_a = options === null || options === void 0 ? void 0 : options.ttl) !== null && _a !== void 0 ? _a : cache._ttl);
69
+ ctx.set('X-Cache', 'MISS');
70
+ }
71
+ };
72
+ }
73
+ //# sourceMappingURL=koa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"koa.js","sourceRoot":"","sources":["../../src/adapters/koa.ts"],"names":[],"mappings":";;AAwDA,kDAuCC;AAnFD,SAAS,UAAU,CAAC,GAAY;;IAC9B,OAAO,MAAA,GAAG,CAAC,WAAW,mCAAI,GAAG,CAAC,GAAG,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACrF,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAED,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,mBAAmB,CACjC,KAAe,EACf,OAA2B;IAE3B,OAAO,KAAK,UAAU,qBAAqB,CAAC,GAAY,EAAE,IAAI;;QAC5D,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,EAAE,CAAC;YACrB,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7B,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,EAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,MAAM,EAAE,CAAC;YACX,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1B,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;YAC/B,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;YAC9B,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACvB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;QAEb,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC1C,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpE,KAAK,CAAC,MAAM,CAAC,GAAG,CACd,GAAG,EACH,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,EACvD,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,mCAAI,KAAK,CAAC,IAAI,CAC3B,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -162,7 +162,7 @@ class MemorizeInterceptor {
162
162
  return cacheObservable(next.handle(), (value) => {
163
163
  if (value === undefined || response.headersSent)
164
164
  return;
165
- this.cache.set(key, value, ttl);
165
+ this.cache._store.set(key, { body: value, statusCode: 200, contentType: 'application/json' }, ttl !== null && ttl !== void 0 ? ttl : this.cache._ttl);
166
166
  });
167
167
  }
168
168
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nestjs.js","sourceRoot":"","sources":["../../src/adapters/nestjs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nestjs.js","sourceRoot":"","sources":["../../src/adapters/nestjs.ts"],"names":[],"mappings":"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"}
@@ -239,5 +239,11 @@ export interface Memorize {
239
239
  * @internal
240
240
  */
241
241
  _store: MemorizeStore;
242
+ /**
243
+ * Global TTL configured through `memorize({ ttl })`. Intended for use by
244
+ * framework adapters only.
245
+ * @internal
246
+ */
247
+ _ttl?: number;
242
248
  }
243
249
  //# sourceMappingURL=Memorize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Memorize.d.ts","sourceRoot":"","sources":["../../src/domain/Memorize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Memorize.d.ts","sourceRoot":"","sources":["../../src/domain/Memorize.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { SerializerOption } from '../serializer';
1
2
  /**
2
3
  * Options passed to the {@link memorize} factory.
3
4
  *
@@ -25,5 +26,21 @@ export interface MemorizeOptions {
25
26
  * ```
26
27
  */
27
28
  maxEntries?: number;
29
+ /**
30
+ * Serializer used by {@link Memorize.set} and {@link Memorize.getValue}.
31
+ *
32
+ * - `'auto'` (default) — uses `node:v8` when available, falls back to JSON silently.
33
+ * - `'json'` — always uses `JSON.stringify` / `JSON.parse` (edge-runtime safe, human-readable).
34
+ * - `'v8'` — always uses `node:v8`; throws at construction if not available.
35
+ * - Custom object — `{ serialize(v): string | Buffer; deserialize(d): unknown }`.
36
+ *
37
+ * HTTP middleware caching (Express, Hono, Fastify, etc.) is not affected by this option.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const cache = memorize({ serializer: 'v8' }); // opt-in to faster v8 serialization
42
+ * ```
43
+ */
44
+ serializer?: SerializerOption;
28
45
  }
29
46
  //# sourceMappingURL=MemorizeOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemorizeOptions.d.ts","sourceRoot":"","sources":["../../src/domain/MemorizeOptions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"MemorizeOptions.d.ts","sourceRoot":"","sources":["../../src/domain/MemorizeOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B"}
@@ -1,6 +1,7 @@
1
1
  import { Memorize } from './domain/Memorize';
2
2
  import { MemorizeOptions } from './domain/MemorizeOptions';
3
3
  import { MemorizeCallOptions } from './domain/MemorizeCallOptions';
4
+ export type { Serializer, SerializerOption } from './serializer';
4
5
  export type { Memorize, MemorizeOptions, MemorizeCallOptions };
5
6
  /**
6
7
  * Creates an in-memory cache instance.
@@ -1 +1 @@
1
- {"version":3,"file":"memorize.d.ts","sourceRoot":"","sources":["../src/memorize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGnE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CA6ChE"}
1
+ {"version":3,"file":"memorize.d.ts","sourceRoot":"","sources":["../src/memorize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGnE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEjE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CAiDhE"}
package/dist/memorize.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.memorize = memorize;
4
4
  const MemorizeStore_1 = require("./MemorizeStore");
5
5
  const express_1 = require("./adapters/express");
6
+ const serializer_1 = require("./serializer");
6
7
  /**
7
8
  * Creates an in-memory cache instance.
8
9
  *
@@ -54,22 +55,25 @@ const express_1 = require("./adapters/express");
54
55
  * ```
55
56
  */
56
57
  function memorize(options = {}) {
57
- const { ttl, maxEntries } = options;
58
+ const { ttl, maxEntries, serializer: serializerOption } = options;
58
59
  const store = new MemorizeStore_1.MemorizeStore(maxEntries);
60
+ const serializer = (0, serializer_1.createSerializer)(serializerOption);
59
61
  const expressMiddleware = (0, express_1.createExpressMiddleware)(store, ttl);
60
62
  const cache = function (callOptions) {
61
63
  return expressMiddleware(callOptions);
62
64
  };
63
65
  cache.express = (callOptions) => expressMiddleware(callOptions);
64
66
  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);
67
+ const body = serializer.serialize(value);
68
+ const contentType = Buffer.isBuffer(body) ? 'application/octet-stream' : 'application/json';
69
+ store.set(key, { body, statusCode: 200, contentType }, entryTtl !== null && entryTtl !== void 0 ? entryTtl : ttl);
66
70
  };
67
71
  cache.getValue = (key) => {
68
72
  const info = store.get(key);
69
73
  if (!info)
70
74
  return undefined;
71
75
  try {
72
- return JSON.parse(info.body);
76
+ return serializer.deserialize(info.body);
73
77
  }
74
78
  catch (_a) {
75
79
  return undefined;
@@ -93,6 +97,7 @@ function memorize(options = {}) {
93
97
  cache.byteSize = () => store.byteSize();
94
98
  cache.getStats = () => store.getStats();
95
99
  cache._store = store;
100
+ cache._ttl = ttl;
96
101
  return cache;
97
102
  }
98
103
  //# sourceMappingURL=memorize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memorize.js","sourceRoot":"","sources":["../src/memorize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memorize.js","sourceRoot":"","sources":["../src/memorize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface Serializer {
2
+ serialize(value: unknown): string | Buffer;
3
+ deserialize(data: string | Buffer): unknown;
4
+ }
5
+ export type SerializerOption = 'json' | 'v8' | 'auto' | Serializer;
6
+ export declare function createSerializer(option?: SerializerOption): Serializer;
7
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAC3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC7C;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC;AAqBnE,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,gBAAyB,GAAG,UAAU,CAU9E"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSerializer = createSerializer;
4
+ const jsonSerializer = {
5
+ serialize: (v) => JSON.stringify(v),
6
+ deserialize: (d) => JSON.parse(d),
7
+ };
8
+ function tryV8() {
9
+ try {
10
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
11
+ const v8 = require('node:v8');
12
+ return {
13
+ serialize: (v) => v8.serialize(v),
14
+ deserialize: (data) => v8.deserialize(Buffer.isBuffer(data) ? data : Buffer.from(data, 'binary')),
15
+ };
16
+ }
17
+ catch (_a) {
18
+ return null;
19
+ }
20
+ }
21
+ function createSerializer(option = 'auto') {
22
+ var _a;
23
+ if (typeof option === 'object')
24
+ return option;
25
+ if (option === 'json')
26
+ return jsonSerializer;
27
+ if (option === 'v8') {
28
+ const s = tryV8();
29
+ if (!s)
30
+ throw new Error('[express-memorize] node:v8 is not available in this runtime');
31
+ return s;
32
+ }
33
+ // 'auto': v8 si está disponible, JSON como fallback
34
+ return (_a = tryV8()) !== null && _a !== void 0 ? _a : jsonSerializer;
35
+ }
36
+ //# sourceMappingURL=serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":";;AA0BA,4CAUC;AA7BD,MAAM,cAAc,GAAe;IACjC,SAAS,EAAI,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACrC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAW,CAAC;CAC5C,CAAC;AAEF,SAAS,KAAK;IACZ,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAC;QAC1D,OAAO;YACL,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;YACjC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAc,EAAE,QAAQ,CAAC,CAAC;SACvF,CAAC;IACJ,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,SAA2B,MAAM;;IAChE,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC;IAC7C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACvF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,oDAAoD;IACpD,OAAO,MAAA,KAAK,EAAE,mCAAI,cAAc,CAAC;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "express-memorize",
3
- "version": "2.1.0",
3
+ "version": "2.3.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",
@@ -18,6 +18,14 @@
18
18
  "types": "./dist/adapters/hono.d.ts",
19
19
  "default": "./dist/adapters/hono.js"
20
20
  },
21
+ "./fastify": {
22
+ "types": "./dist/adapters/fastify.d.ts",
23
+ "default": "./dist/adapters/fastify.js"
24
+ },
25
+ "./koa": {
26
+ "types": "./dist/adapters/koa.d.ts",
27
+ "default": "./dist/adapters/koa.js"
28
+ },
21
29
  "./nestjs": {
22
30
  "types": "./dist/adapters/nestjs.d.ts",
23
31
  "default": "./dist/adapters/nestjs.js"
@@ -45,6 +53,7 @@
45
53
  "test": "jest",
46
54
  "test:watch": "jest --watch",
47
55
  "prepublishOnly": "npm test && npm run build",
56
+ "bench": "tsx bench/index.ts",
48
57
  "docs": "typedoc",
49
58
  "docs:watch": "typedoc --watch"
50
59
  },
@@ -60,35 +69,53 @@
60
69
  ],
61
70
  "license": "MIT",
62
71
  "peerDependencies": {
72
+ "@koa/router": ">=10.0.0",
63
73
  "@nestjs/common": ">=9.0.0",
64
74
  "@nestjs/core": ">=9.0.0",
65
75
  "express": ">=4.0.0",
76
+ "fastify": ">=4.0.0",
66
77
  "hono": ">=4.0.0",
78
+ "koa": ">=2.0.0",
67
79
  "rxjs": ">=7.0.0"
68
80
  },
69
81
  "peerDependenciesMeta": {
82
+ "@koa/router": {
83
+ "optional": true
84
+ },
70
85
  "@nestjs/common": {
71
86
  "optional": true
72
87
  },
73
88
  "@nestjs/core": {
74
89
  "optional": true
75
90
  },
91
+ "fastify": {
92
+ "optional": true
93
+ },
76
94
  "hono": {
77
95
  "optional": true
78
96
  },
97
+ "koa": {
98
+ "optional": true
99
+ },
79
100
  "rxjs": {
80
101
  "optional": true
81
102
  }
82
103
  },
83
104
  "devDependencies": {
105
+ "@koa/router": "^15.5.0",
84
106
  "@semantic-release/changelog": "^6.0.3",
85
107
  "@types/express": "^4.17.21",
86
108
  "@types/jest": "^29.0.0",
109
+ "@types/koa": "^3.0.2",
87
110
  "@types/node": "^20.0.0",
111
+ "fastify": "^5.6.2",
88
112
  "hono": "^4.12.16",
89
113
  "jest": "^29.0.0",
114
+ "koa": "^3.2.0",
90
115
  "semantic-release": "^24.2.9",
116
+ "tinybench": "^6.0.2",
91
117
  "ts-jest": "^29.0.0",
118
+ "tsx": "^4.22.1",
92
119
  "typedoc": "^0.28.18",
93
120
  "typedoc-material-theme": "^1.4.1",
94
121
  "typescript": "^5.0.0"