@mrjasonroy/cache-components-cache-handler 16.1.6 → 16.2.9
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/dist/data-cache/factory.d.ts.map +1 -1
- package/dist/data-cache/factory.js +3 -22
- package/dist/data-cache/factory.js.map +1 -1
- package/dist/data-cache/ioredis-adapter.d.ts +46 -0
- package/dist/data-cache/ioredis-adapter.d.ts.map +1 -0
- package/dist/data-cache/ioredis-adapter.js +46 -0
- package/dist/data-cache/ioredis-adapter.js.map +1 -0
- package/dist/data-cache/redis.d.ts +3 -3
- package/dist/data-cache/redis.d.ts.map +1 -1
- package/dist/data-cache/redis.js +28 -24
- package/dist/data-cache/redis.js.map +1 -1
- package/dist/handlers/memory.d.ts.map +1 -1
- package/dist/handlers/memory.js +3 -2
- package/dist/handlers/memory.js.map +1 -1
- package/dist/handlers/redis.d.ts +30 -4
- package/dist/handlers/redis.d.ts.map +1 -1
- package/dist/handlers/redis.js +75 -11
- package/dist/handlers/redis.js.map +1 -1
- package/dist/helpers/serialization.d.ts +20 -0
- package/dist/helpers/serialization.d.ts.map +1 -0
- package/dist/helpers/serialization.js +55 -0
- package/dist/helpers/serialization.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +17 -6
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/data-cache/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/data-cache/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAiBnD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,IAAI,EAAE,gBAAgB,CAAC;IAEvB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,gBAAgB,CAiFjF"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Automatically configures handlers based on type and environment variables
|
|
4
4
|
*/
|
|
5
5
|
import { createRequire } from "node:module";
|
|
6
|
+
import { createIoredisAdapter } from "./ioredis-adapter.js";
|
|
6
7
|
import { createMemoryDataCacheHandler } from "./memory.js";
|
|
7
8
|
import { createRedisDataCacheHandler } from "./redis.js";
|
|
8
9
|
const nodeRequire = createRequire(import.meta.url);
|
|
@@ -17,26 +18,6 @@ function loadIoredis(type) {
|
|
|
17
18
|
throw new Error(`ioredis is required for ${type} cache handler. Install it with: npm install ioredis`);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Create adapter for ioredis (lowercase methods) to match RedisClient interface (camelCase)
|
|
22
|
-
*/
|
|
23
|
-
function createRedisAdapter(redis) {
|
|
24
|
-
return {
|
|
25
|
-
get: (key) => redis.get(key),
|
|
26
|
-
set: (key, value, exFlag, ttl) => {
|
|
27
|
-
if (exFlag === "EX" && typeof ttl === "number") {
|
|
28
|
-
return redis.set(key, value, "EX", ttl);
|
|
29
|
-
}
|
|
30
|
-
return redis.set(key, value);
|
|
31
|
-
},
|
|
32
|
-
del: (...keys) => redis.del(...keys),
|
|
33
|
-
exists: (...keys) => redis.exists(...keys),
|
|
34
|
-
ttl: (key) => redis.ttl(key),
|
|
35
|
-
hGet: (key, field) => redis.hget(key, field),
|
|
36
|
-
hSet: (key, field, value) => redis.hset(key, field, value),
|
|
37
|
-
hGetAll: (key) => redis.hgetall(key),
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
21
|
/**
|
|
41
22
|
* Create a cache handler with zero configuration
|
|
42
23
|
*
|
|
@@ -73,7 +54,7 @@ export function createCacheHandler(options) {
|
|
|
73
54
|
...(tlsEnabled ? { tls: {} } : {}),
|
|
74
55
|
})
|
|
75
56
|
: new Redis(url);
|
|
76
|
-
const redisAdapter =
|
|
57
|
+
const redisAdapter = createIoredisAdapter(redis);
|
|
77
58
|
return createRedisDataCacheHandler({
|
|
78
59
|
redis: redisAdapter,
|
|
79
60
|
keyPrefix: options.keyPrefix,
|
|
@@ -103,7 +84,7 @@ export function createCacheHandler(options) {
|
|
|
103
84
|
return Math.min(times * 200, 2000);
|
|
104
85
|
},
|
|
105
86
|
});
|
|
106
|
-
const redisAdapter =
|
|
87
|
+
const redisAdapter = createIoredisAdapter(redis);
|
|
107
88
|
return createRedisDataCacheHandler({
|
|
108
89
|
redis: redisAdapter,
|
|
109
90
|
keyPrefix: options.keyPrefix,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/data-cache/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/data-cache/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { RedisClient } from "./redis.js";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal structural type for an ioredis-compatible client.
|
|
4
|
+
*
|
|
5
|
+
* Only the methods the data cache handler relies on are declared, so consumers
|
|
6
|
+
* don't need ioredis' types in scope to call {@link createIoredisAdapter}. Both
|
|
7
|
+
* ioredis `Redis` and `Cluster` instances satisfy this shape.
|
|
8
|
+
*/
|
|
9
|
+
export interface IoredisLike {
|
|
10
|
+
get(key: string): Promise<string | null>;
|
|
11
|
+
set(key: string, value: string, ...args: unknown[]): Promise<unknown>;
|
|
12
|
+
del(...keys: string[]): Promise<number>;
|
|
13
|
+
exists(...keys: string[]): Promise<number>;
|
|
14
|
+
ttl(key: string): Promise<number>;
|
|
15
|
+
hget(key: string, field: string): Promise<string | null>;
|
|
16
|
+
hset(key: string, field: string, value: string): Promise<unknown>;
|
|
17
|
+
hgetall(key: string): Promise<Record<string, string>>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Wrap an ioredis client so it satisfies the node-redis-style {@link RedisClient}
|
|
21
|
+
* contract expected by `createRedisDataCacheHandler`.
|
|
22
|
+
*
|
|
23
|
+
* The data cache handler issues node-redis-style SET options
|
|
24
|
+
* (`set(key, value, { EX: seconds })`). ioredis instead expects positional
|
|
25
|
+
* arguments (`set(key, value, "EX", seconds)`), so this adapter translates the
|
|
26
|
+
* option object. Passing a raw ioredis client without this translation makes
|
|
27
|
+
* Redis reject the SET with `ERR syntax error`, silently breaking TTLs and
|
|
28
|
+
* caching.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* import Redis from "ioredis";
|
|
33
|
+
* import {
|
|
34
|
+
* createIoredisAdapter,
|
|
35
|
+
* createRedisDataCacheHandler,
|
|
36
|
+
* } from "@mrjasonroy/cache-components-cache-handler";
|
|
37
|
+
*
|
|
38
|
+
* const client = new Redis(process.env.REDIS_URL);
|
|
39
|
+
*
|
|
40
|
+
* export default createRedisDataCacheHandler({
|
|
41
|
+
* redis: createIoredisAdapter(client),
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function createIoredisAdapter(redis: IoredisLike): RedisClient;
|
|
46
|
+
//# sourceMappingURL=ioredis-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ioredis-adapter.d.ts","sourceRoot":"","sources":["../../src/data-cache/ioredis-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAkBpE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap an ioredis client so it satisfies the node-redis-style {@link RedisClient}
|
|
3
|
+
* contract expected by `createRedisDataCacheHandler`.
|
|
4
|
+
*
|
|
5
|
+
* The data cache handler issues node-redis-style SET options
|
|
6
|
+
* (`set(key, value, { EX: seconds })`). ioredis instead expects positional
|
|
7
|
+
* arguments (`set(key, value, "EX", seconds)`), so this adapter translates the
|
|
8
|
+
* option object. Passing a raw ioredis client without this translation makes
|
|
9
|
+
* Redis reject the SET with `ERR syntax error`, silently breaking TTLs and
|
|
10
|
+
* caching.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import Redis from "ioredis";
|
|
15
|
+
* import {
|
|
16
|
+
* createIoredisAdapter,
|
|
17
|
+
* createRedisDataCacheHandler,
|
|
18
|
+
* } from "@mrjasonroy/cache-components-cache-handler";
|
|
19
|
+
*
|
|
20
|
+
* const client = new Redis(process.env.REDIS_URL);
|
|
21
|
+
*
|
|
22
|
+
* export default createRedisDataCacheHandler({
|
|
23
|
+
* redis: createIoredisAdapter(client),
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function createIoredisAdapter(redis) {
|
|
28
|
+
return {
|
|
29
|
+
get: (key) => redis.get(key),
|
|
30
|
+
set: (key, value, ...args) => {
|
|
31
|
+
// node-redis style: set(key, value, { EX: seconds }) -> ioredis "EX", seconds
|
|
32
|
+
const opts = args[0];
|
|
33
|
+
if (opts && typeof opts === "object" && typeof opts.EX === "number") {
|
|
34
|
+
return redis.set(key, value, "EX", opts.EX);
|
|
35
|
+
}
|
|
36
|
+
return redis.set(key, value);
|
|
37
|
+
},
|
|
38
|
+
del: (...keys) => redis.del(...keys),
|
|
39
|
+
exists: (...keys) => redis.exists(...keys),
|
|
40
|
+
ttl: (key) => redis.ttl(key),
|
|
41
|
+
hGet: (key, field) => redis.hget(key, field),
|
|
42
|
+
hSet: (key, field, value) => redis.hset(key, field, value),
|
|
43
|
+
hGetAll: (key) => redis.hgetall(key),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ioredis-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ioredis-adapter.js","sourceRoot":"","sources":["../../src/data-cache/ioredis-adapter.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAkB;IACrD,OAAO;QACL,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;YAC3B,8EAA8E;YAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAgC,CAAC;YACpD,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBACpE,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACpC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAC1C,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;QAC5C,IAAI,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC;QAC1D,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import type { DataCacheHandler } from "./types.js";
|
|
9
9
|
export interface RedisDataCacheHandlerOptions {
|
|
10
10
|
/**
|
|
11
|
-
* Redis client instance (
|
|
11
|
+
* Redis client instance (node-redis)
|
|
12
12
|
*/
|
|
13
13
|
redis: RedisClient;
|
|
14
14
|
/**
|
|
@@ -34,8 +34,8 @@ export interface RedisDataCacheHandlerOptions {
|
|
|
34
34
|
defaultTTL?: number;
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
|
-
* Redis client interface (
|
|
38
|
-
* Uses
|
|
37
|
+
* Redis client interface (node-redis compatible)
|
|
38
|
+
* Uses node-redis-style SET with options object: set(key, value, { EX: seconds })
|
|
39
39
|
*/
|
|
40
40
|
export interface RedisClient {
|
|
41
41
|
get(key: string): Promise<string | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/data-cache/redis.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAkB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,KAAK,EAAE,WAAW,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD;AAmDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/data-cache/redis.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAkB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,KAAK,EAAE,WAAW,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACvD;AAmDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,gBAAgB,CA2MlB"}
|
package/dist/data-cache/redis.js
CHANGED
|
@@ -135,24 +135,24 @@ export function createRedisDataCacheHandler(options) {
|
|
|
135
135
|
await redis.del(key);
|
|
136
136
|
return undefined;
|
|
137
137
|
}
|
|
138
|
-
// Check tag
|
|
138
|
+
// Check tag invalidation. A revalidation only affects entries created
|
|
139
|
+
// *before* the event — `stale` records when the tag was revalidated, so
|
|
140
|
+
// entries cached afterward stay valid (this is what makes a tag
|
|
141
|
+
// re-cacheable after `revalidateTag(tag, "max")`). `expired`, when set,
|
|
142
|
+
// is the hard-deletion deadline; before it, the entry is served stale.
|
|
139
143
|
let revalidate = entry.revalidate;
|
|
140
144
|
for (const tag of entry.tags) {
|
|
141
145
|
const tagData = await redis.hGetAll(getTagKey(tag));
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
146
|
+
const revalidatedAt = tagData.stale ? Number.parseInt(tagData.stale, 10) : 0;
|
|
147
|
+
const expireAt = tagData.expired ? Number.parseInt(tagData.expired, 10) : 0;
|
|
148
|
+
if (revalidatedAt && revalidatedAt > entry.timestamp) {
|
|
149
|
+
if (expireAt && Date.now() >= expireAt) {
|
|
145
150
|
log?.("get", cacheKey, "had expired tag", tag);
|
|
146
151
|
await redis.del(key);
|
|
147
152
|
return undefined;
|
|
148
153
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
const stale = Number.parseInt(tagData.stale, 10);
|
|
152
|
-
if (stale > entry.timestamp) {
|
|
153
|
-
log?.("get", cacheKey, "had stale tag", tag);
|
|
154
|
-
revalidate = -1;
|
|
155
|
-
}
|
|
154
|
+
log?.("get", cacheKey, "had stale tag", tag);
|
|
155
|
+
revalidate = -1;
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
158
|
// Tee the stream
|
|
@@ -183,7 +183,7 @@ export function createRedisDataCacheHandler(options) {
|
|
|
183
183
|
// Calculate TTL (use expire time or default)
|
|
184
184
|
const ttl = entry.expire < 4294967294 ? entry.expire : defaultTTL;
|
|
185
185
|
// Store in Redis with TTL
|
|
186
|
-
await redis.set(key, JSON.stringify(serialized),
|
|
186
|
+
await redis.set(key, JSON.stringify(serialized), { EX: Math.ceil(ttl) });
|
|
187
187
|
log?.("set", cacheKey, "done", { ttl });
|
|
188
188
|
}
|
|
189
189
|
catch (error) {
|
|
@@ -197,8 +197,11 @@ export function createRedisDataCacheHandler(options) {
|
|
|
197
197
|
},
|
|
198
198
|
async getExpiration(tags) {
|
|
199
199
|
try {
|
|
200
|
+
// Per the Next.js contract, this returns the maximum timestamp of a
|
|
201
|
+
// revalidate *event* for the tags (when they were last revalidated),
|
|
202
|
+
// not a future deadline.
|
|
200
203
|
const expirations = await Promise.all(tags.map(async (tag) => {
|
|
201
|
-
const data = await redis.hGet(getTagKey(tag), "
|
|
204
|
+
const data = await redis.hGet(getTagKey(tag), "stale");
|
|
202
205
|
return data ? Number.parseInt(data, 10) : 0;
|
|
203
206
|
}));
|
|
204
207
|
const expiration = Math.max(...expirations, 0);
|
|
@@ -216,19 +219,20 @@ export function createRedisDataCacheHandler(options) {
|
|
|
216
219
|
log?.("updateTags", { tags, timestamp: now, durations });
|
|
217
220
|
await Promise.all(tags.map(async (tag) => {
|
|
218
221
|
const key = getTagKey(tag);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
const expired = now + durations.expire * 1000;
|
|
225
|
-
await redis.hSet(key, "expired", expired.toString());
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
// Immediate expiration (default behavior)
|
|
222
|
+
// Always record the revalidation event time. Entries created before
|
|
223
|
+
// `now` are affected; entries cached afterward remain valid.
|
|
224
|
+
await redis.hSet(key, "stale", now.toString());
|
|
225
|
+
if (!durations) {
|
|
226
|
+
// No durations -> immediate hard expiration.
|
|
230
227
|
await redis.hSet(key, "expired", now.toString());
|
|
231
228
|
}
|
|
229
|
+
else if (durations.expire !== undefined) {
|
|
230
|
+
// Hard-expire affected entries once the expire window elapses;
|
|
231
|
+
// until then they are served stale.
|
|
232
|
+
const expired = now + durations.expire * 1000;
|
|
233
|
+
await redis.hSet(key, "expired", expired.toString());
|
|
234
|
+
}
|
|
235
|
+
// `durations` without `expire` -> stale only, no hard deadline.
|
|
232
236
|
}));
|
|
233
237
|
}
|
|
234
238
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/data-cache/redis.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/data-cache/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/handlers/memory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/handlers/memory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EAEnB,UAAU,EACX,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACrD,SAAgB,IAAI,eAAe;IAEnC,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;gBAEzB,OAAO,GAAE,yBAA8B;IAQ7C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAsCnF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCjF,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACH,QAAQ;;;;;CAOT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,kBAAkB,CAEhG"}
|
package/dist/handlers/memory.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { isImplicitTag } from "../helpers/is-implicit-tag.js";
|
|
2
2
|
import { calculateLifespan, isExpired } from "../helpers/lifespan.js";
|
|
3
|
+
import { jsonReplacer } from "../helpers/serialization.js";
|
|
3
4
|
/**
|
|
4
5
|
* In-memory LRU cache handler for Next.js 16+
|
|
5
6
|
* Suitable for development and single-instance deployments
|
|
@@ -64,8 +65,8 @@ export class MemoryCacheHandler {
|
|
|
64
65
|
};
|
|
65
66
|
}
|
|
66
67
|
async set(key, value, context) {
|
|
67
|
-
// Calculate size of the entry
|
|
68
|
-
const size = JSON.stringify(value).length;
|
|
68
|
+
// Calculate size of the entry (use replacer to account for Map/Buffer)
|
|
69
|
+
const size = JSON.stringify(value, jsonReplacer).length;
|
|
69
70
|
// Check if entry exceeds max size
|
|
70
71
|
if (size > this.maxItemSizeBytes) {
|
|
71
72
|
// Skip storing oversized entries
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/handlers/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/handlers/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/handlers/redis.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { type RedisOptions } from "ioredis";
|
|
1
|
+
import Redis, { type RedisOptions } from "ioredis";
|
|
2
2
|
import type { CacheHandler, CacheHandlerContext, CacheHandlerGetMeta, CacheHandlerGetResult, CacheHandlerOptions, CacheValue } from "../types.js";
|
|
3
3
|
export interface RedisCacheHandlerOptions extends CacheHandlerOptions {
|
|
4
4
|
/**
|
|
5
|
-
* Redis connection
|
|
6
|
-
* Can be
|
|
5
|
+
* Redis connection configuration or existing client (ioredis)
|
|
6
|
+
* Can be:
|
|
7
|
+
* - A Redis client instance (ioredis)
|
|
8
|
+
* - A URL string
|
|
9
|
+
* - A RedisOptions object
|
|
7
10
|
*/
|
|
8
|
-
redis?: string | RedisOptions;
|
|
11
|
+
redis?: Redis | string | RedisOptions;
|
|
9
12
|
/**
|
|
10
13
|
* Key prefix for all cache entries
|
|
11
14
|
* @default "nextjs:cache:"
|
|
@@ -42,6 +45,7 @@ export interface RedisCacheHandlerOptions extends CacheHandlerOptions {
|
|
|
42
45
|
* // In cache-handler.mjs or data-cache-handler.mjs
|
|
43
46
|
* import { RedisCacheHandler } from "@mrjasonroy/cache-components-cache-handler/handlers/redis";
|
|
44
47
|
*
|
|
48
|
+
* // Option 1: Pass a Redis URL or config
|
|
45
49
|
* export default class NextCacheHandler extends RedisCacheHandler {
|
|
46
50
|
* constructor(options) {
|
|
47
51
|
* super({
|
|
@@ -52,6 +56,26 @@ export interface RedisCacheHandlerOptions extends CacheHandlerOptions {
|
|
|
52
56
|
* });
|
|
53
57
|
* }
|
|
54
58
|
* }
|
|
59
|
+
*
|
|
60
|
+
* // Option 2: Pass an existing Redis client instance
|
|
61
|
+
* import Redis from "ioredis";
|
|
62
|
+
*
|
|
63
|
+
* const redisClient = new Redis({
|
|
64
|
+
* host: "localhost",
|
|
65
|
+
* port: 6379,
|
|
66
|
+
* // ... other options
|
|
67
|
+
* });
|
|
68
|
+
*
|
|
69
|
+
* export default class NextCacheHandler extends RedisCacheHandler {
|
|
70
|
+
* constructor(options) {
|
|
71
|
+
* super({
|
|
72
|
+
* ...options,
|
|
73
|
+
* redis: redisClient, // Pass existing client
|
|
74
|
+
* keyPrefix: "nextjs:cache:",
|
|
75
|
+
* defaultTTL: 3600
|
|
76
|
+
* });
|
|
77
|
+
* }
|
|
78
|
+
* }
|
|
55
79
|
* ```
|
|
56
80
|
*/
|
|
57
81
|
export declare class RedisCacheHandler implements CacheHandler {
|
|
@@ -61,6 +85,7 @@ export declare class RedisCacheHandler implements CacheHandler {
|
|
|
61
85
|
private readonly tagPrefix;
|
|
62
86
|
private readonly defaultTTL?;
|
|
63
87
|
private readonly debug;
|
|
88
|
+
private readonly didCreateClient;
|
|
64
89
|
constructor(options?: RedisCacheHandlerOptions);
|
|
65
90
|
private log;
|
|
66
91
|
private getCacheKey;
|
|
@@ -74,6 +99,7 @@ export declare class RedisCacheHandler implements CacheHandler {
|
|
|
74
99
|
/**
|
|
75
100
|
* Close the Redis connection
|
|
76
101
|
* Call this when shutting down your application
|
|
102
|
+
* Note: Only closes connections created by this handler, not shared clients
|
|
77
103
|
*/
|
|
78
104
|
close(): Promise<void>;
|
|
79
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/handlers/redis.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/handlers/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAGnD,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EAEnB,UAAU,EACX,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,YAAY,CAAC;IAEtC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,SAAgB,IAAI,WAAW;IAE/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;gBAE9B,OAAO,GAAE,wBAA6B;IAiDlD,OAAO,CAAC,GAAG;IAMX,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IAIX,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAmEnF,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DjF,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BlF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUxC;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B"}
|
package/dist/handlers/redis.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Redis from "ioredis";
|
|
2
2
|
import { calculateLifespan, isExpired } from "../helpers/lifespan.js";
|
|
3
|
+
import { jsonReplacer, jsonReviver } from "../helpers/serialization.js";
|
|
3
4
|
/**
|
|
4
5
|
* Redis cache handler for Next.js 16+ with Cache Components support
|
|
5
6
|
*
|
|
@@ -15,6 +16,7 @@ import { calculateLifespan, isExpired } from "../helpers/lifespan.js";
|
|
|
15
16
|
* // In cache-handler.mjs or data-cache-handler.mjs
|
|
16
17
|
* import { RedisCacheHandler } from "@mrjasonroy/cache-components-cache-handler/handlers/redis";
|
|
17
18
|
*
|
|
19
|
+
* // Option 1: Pass a Redis URL or config
|
|
18
20
|
* export default class NextCacheHandler extends RedisCacheHandler {
|
|
19
21
|
* constructor(options) {
|
|
20
22
|
* super({
|
|
@@ -25,6 +27,26 @@ import { calculateLifespan, isExpired } from "../helpers/lifespan.js";
|
|
|
25
27
|
* });
|
|
26
28
|
* }
|
|
27
29
|
* }
|
|
30
|
+
*
|
|
31
|
+
* // Option 2: Pass an existing Redis client instance
|
|
32
|
+
* import Redis from "ioredis";
|
|
33
|
+
*
|
|
34
|
+
* const redisClient = new Redis({
|
|
35
|
+
* host: "localhost",
|
|
36
|
+
* port: 6379,
|
|
37
|
+
* // ... other options
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* export default class NextCacheHandler extends RedisCacheHandler {
|
|
41
|
+
* constructor(options) {
|
|
42
|
+
* super({
|
|
43
|
+
* ...options,
|
|
44
|
+
* redis: redisClient, // Pass existing client
|
|
45
|
+
* keyPrefix: "nextjs:cache:",
|
|
46
|
+
* defaultTTL: 3600
|
|
47
|
+
* });
|
|
48
|
+
* }
|
|
49
|
+
* }
|
|
28
50
|
* ```
|
|
29
51
|
*/
|
|
30
52
|
export class RedisCacheHandler {
|
|
@@ -34,22 +56,45 @@ export class RedisCacheHandler {
|
|
|
34
56
|
tagPrefix;
|
|
35
57
|
defaultTTL;
|
|
36
58
|
debug;
|
|
59
|
+
didCreateClient;
|
|
37
60
|
constructor(options = {}) {
|
|
38
|
-
// Initialize Redis connection
|
|
39
|
-
|
|
61
|
+
// Initialize Redis connection - detect existing client via duck typing
|
|
62
|
+
// (instanceof can break across package versions or bundler setups)
|
|
63
|
+
if (options.redis &&
|
|
64
|
+
typeof options.redis === "object" &&
|
|
65
|
+
typeof options.redis.get === "function" &&
|
|
66
|
+
typeof options.redis.set === "function" &&
|
|
67
|
+
typeof options.redis.del === "function" &&
|
|
68
|
+
typeof options.redis.pipeline === "function" &&
|
|
69
|
+
typeof options.redis.on === "function") {
|
|
70
|
+
this.redis = options.redis;
|
|
71
|
+
this.didCreateClient = false;
|
|
72
|
+
}
|
|
73
|
+
else if (typeof options.redis === "string") {
|
|
40
74
|
this.redis = new Redis(options.redis);
|
|
75
|
+
this.didCreateClient = true;
|
|
41
76
|
}
|
|
42
77
|
else {
|
|
43
78
|
this.redis = new Redis(options.redis || {});
|
|
79
|
+
this.didCreateClient = true;
|
|
44
80
|
}
|
|
45
81
|
this.keyPrefix = options.keyPrefix ?? "nextjs:cache:";
|
|
46
82
|
this.tagPrefix = options.tagPrefix ?? "nextjs:tags:";
|
|
47
83
|
this.defaultTTL = options.defaultTTL;
|
|
48
84
|
this.debug = options.debug ?? false;
|
|
49
|
-
//
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
85
|
+
// Attach error listener for clients we created; for external clients,
|
|
86
|
+
// add a defensive listener only if the caller forgot to add one
|
|
87
|
+
// (an EventEmitter with no error listener will crash the process)
|
|
88
|
+
if (this.didCreateClient) {
|
|
89
|
+
this.redis.on("error", (err) => {
|
|
90
|
+
console.error("[RedisCacheHandler] Redis connection error:", err);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
else if (this.redis.listenerCount("error") === 0) {
|
|
94
|
+
this.redis.on("error", (err) => {
|
|
95
|
+
console.error("[RedisCacheHandler] Redis connection error (shared client):", err);
|
|
96
|
+
});
|
|
97
|
+
}
|
|
53
98
|
if (this.debug) {
|
|
54
99
|
console.log("[RedisCacheHandler] Initialized", {
|
|
55
100
|
keyPrefix: this.keyPrefix,
|
|
@@ -79,8 +124,8 @@ export class RedisCacheHandler {
|
|
|
79
124
|
this.log("GET", cacheKey, "MISS");
|
|
80
125
|
return null;
|
|
81
126
|
}
|
|
82
|
-
// Parse the stored entry
|
|
83
|
-
const entry = JSON.parse(data);
|
|
127
|
+
// Parse the stored entry (reviver restores Map/Buffer instances)
|
|
128
|
+
const entry = JSON.parse(data, jsonReviver);
|
|
84
129
|
// Check if expired based on lifespan
|
|
85
130
|
if (entry.lifespan && isExpired(entry.lifespan)) {
|
|
86
131
|
this.log("GET", cacheKey, "EXPIRED");
|
|
@@ -99,6 +144,18 @@ export class RedisCacheHandler {
|
|
|
99
144
|
return null;
|
|
100
145
|
}
|
|
101
146
|
}
|
|
147
|
+
// Invalidate old APP_PAGE entries where segmentData was stored as a
|
|
148
|
+
// plain object (pre-fix serialization). Next.js expects a Map and would
|
|
149
|
+
// crash on .get() if we returned a plain object.
|
|
150
|
+
if (entry.value &&
|
|
151
|
+
entry.value.kind === "APP_PAGE" &&
|
|
152
|
+
entry.value.segmentData !== undefined &&
|
|
153
|
+
entry.value.segmentData !== null &&
|
|
154
|
+
!(entry.value.segmentData instanceof Map)) {
|
|
155
|
+
this.log("GET", cacheKey, "STALE (old APP_PAGE format without Map serialization)");
|
|
156
|
+
await this.delete(key);
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
102
159
|
this.log("GET", cacheKey, "HIT");
|
|
103
160
|
// Return the cache handler result with value and metadata
|
|
104
161
|
return {
|
|
@@ -124,7 +181,7 @@ export class RedisCacheHandler {
|
|
|
124
181
|
tags,
|
|
125
182
|
value,
|
|
126
183
|
};
|
|
127
|
-
const serialized = JSON.stringify(entry);
|
|
184
|
+
const serialized = JSON.stringify(entry, jsonReplacer);
|
|
128
185
|
// Determine TTL for Redis
|
|
129
186
|
let ttl;
|
|
130
187
|
if (lifespan?.expireAt) {
|
|
@@ -201,11 +258,18 @@ export class RedisCacheHandler {
|
|
|
201
258
|
/**
|
|
202
259
|
* Close the Redis connection
|
|
203
260
|
* Call this when shutting down your application
|
|
261
|
+
* Note: Only closes connections created by this handler, not shared clients
|
|
204
262
|
*/
|
|
205
263
|
async close() {
|
|
206
264
|
try {
|
|
207
|
-
|
|
208
|
-
this.
|
|
265
|
+
// Only close if we created the client
|
|
266
|
+
if (this.didCreateClient) {
|
|
267
|
+
await this.redis.quit();
|
|
268
|
+
this.log("Connection closed");
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
this.log("Skipping close (using shared client)");
|
|
272
|
+
}
|
|
209
273
|
}
|
|
210
274
|
catch (error) {
|
|
211
275
|
console.error("[RedisCacheHandler] close error:", error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/handlers/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/handlers/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AA8CxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,OAAO,iBAAiB;IACZ,IAAI,GAAG,OAAO,CAAC;IAEvB,KAAK,CAAQ;IACJ,SAAS,CAAS;IAClB,SAAS,CAAS;IAClB,UAAU,CAAU;IACpB,KAAK,CAAU;IACf,eAAe,CAAU;IAE1C,YAAY,UAAoC,EAAE;QAChD,uEAAuE;QACvE,mEAAmE;QACnE,IACE,OAAO,CAAC,KAAK;YACb,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;YACjC,OAAQ,OAAO,CAAC,KAAe,CAAC,GAAG,KAAK,UAAU;YAClD,OAAQ,OAAO,CAAC,KAAe,CAAC,GAAG,KAAK,UAAU;YAClD,OAAQ,OAAO,CAAC,KAAe,CAAC,GAAG,KAAK,UAAU;YAClD,OAAQ,OAAO,CAAC,KAAe,CAAC,QAAQ,KAAK,UAAU;YACvD,OAAQ,OAAO,CAAC,KAAe,CAAC,EAAE,KAAK,UAAU,EACjD,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAc,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/B,CAAC;aAAM,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAE,OAAO,CAAC,KAAsB,IAAI,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,eAAe,CAAC;QACtD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,cAAc,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QAEpC,sEAAsE;QACtE,gEAAgE;QAChE,kEAAkE;QAClE,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC7B,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC7B,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,GAAG,CAAC,CAAC;YACpF,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE;gBAC7C,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,GAAG,IAAe;QAC5B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,IAAI,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,GAAW;QAC7B,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;IACnC,CAAC;IAEO,SAAS,CAAC,GAAW;QAC3B,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAA0B;QAC/C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAE1B,uBAAuB;YACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE5C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAClC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,iEAAiE;YACjE,MAAM,KAAK,GAAsB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAE/D,qCAAqC;YACrC,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACrC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,+DAA+D;YAC/D,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC;YAE/D,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAEnD,uEAAuE;gBACvE,IAAI,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;oBACzE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,yBAAyB,EAAE,GAAG,CAAC,CAAC;oBAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,oEAAoE;YACpE,wEAAwE;YACxE,iDAAiD;YACjD,IACE,KAAK,CAAC,KAAK;gBACV,KAAK,CAAC,KAAiC,CAAC,IAAI,KAAK,UAAU;gBAC3D,KAAK,CAAC,KAAiC,CAAC,WAAW,KAAK,SAAS;gBACjE,KAAK,CAAC,KAAiC,CAAC,WAAW,KAAK,IAAI;gBAC7D,CAAC,CAAE,KAAK,CAAC,KAAiC,CAAC,WAAW,YAAY,GAAG,CAAC,EACtE,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,uDAAuD,CAAC,CAAC;gBACnF,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YAEjC,0DAA0D;YAC1D,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,YAAY;aACrC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAiB,EAAE,OAA6B;QACrE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAEvC,6BAA6B;YAC7B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACzE,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;YAEjC,MAAM,KAAK,GAAsB;gBAC/B,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;gBACxB,QAAQ;gBACR,IAAI;gBACJ,KAAK;aACN,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAEvD,0BAA0B;YAC1B,IAAI,GAAuB,CAAC;YAC5B,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC;gBACvB,yBAAyB;gBACzB,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;gBACzD,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;oBACb,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC;oBACpD,OAAO;gBACT,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;gBAClD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAG,GAAG,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,8CAA8C;YAC9C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAEvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;oBACnC,kDAAkD;oBAClD,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAC1C,uDAAuD;oBACvD,IAAI,GAAG,EAAE,CAAC;wBACR,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,OAAO,EAAE,GAAG,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;gBAED,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,QAAuC;QACtE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAEnC,+BAA+B;YAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YAE/B,iDAAiD;YACjD,MAAM,UAAU,GAAG,GAAG,MAAM,OAAO,CAAC;YACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAExD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAEvC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;gBAED,2BAA2B;gBAC3B,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAEzB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,EAAE,WAAW,SAAS,CAAC,MAAM,UAAU,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC;YACH,sCAAsC;YACtC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON serialization helpers for cache values containing Map and Buffer instances.
|
|
3
|
+
*
|
|
4
|
+
* Next.js 16 APP_PAGE entries store `segmentData` as a Map<string, Buffer>
|
|
5
|
+
* and `rscData` as a Buffer. Plain JSON.stringify converts Maps to `{}` and
|
|
6
|
+
* loses Buffer identity, so custom replacer/reviver functions are needed.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Custom JSON replacer that serializes Map and Buffer instances.
|
|
10
|
+
* - Maps become `{ __serialized_type: "Map", entries: [...] }`
|
|
11
|
+
* - Buffers become `{ __serialized_type: "Buffer", data: "<base64>" }`
|
|
12
|
+
*/
|
|
13
|
+
export declare function jsonReplacer(_key: string, value: unknown): unknown;
|
|
14
|
+
/**
|
|
15
|
+
* Custom JSON reviver that restores Map and Buffer instances.
|
|
16
|
+
* Also handles backward-compat with Node's native Buffer JSON
|
|
17
|
+
* representation `{ type: "Buffer", data: [byte, ...] }`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function jsonReviver(_key: string, value: unknown): unknown;
|
|
20
|
+
//# sourceMappingURL=serialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../src/helpers/serialization.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAclE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CA4BjE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON serialization helpers for cache values containing Map and Buffer instances.
|
|
3
|
+
*
|
|
4
|
+
* Next.js 16 APP_PAGE entries store `segmentData` as a Map<string, Buffer>
|
|
5
|
+
* and `rscData` as a Buffer. Plain JSON.stringify converts Maps to `{}` and
|
|
6
|
+
* loses Buffer identity, so custom replacer/reviver functions are needed.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Custom JSON replacer that serializes Map and Buffer instances.
|
|
10
|
+
* - Maps become `{ __serialized_type: "Map", entries: [...] }`
|
|
11
|
+
* - Buffers become `{ __serialized_type: "Buffer", data: "<base64>" }`
|
|
12
|
+
*/
|
|
13
|
+
export function jsonReplacer(_key, value) {
|
|
14
|
+
if (value instanceof Map) {
|
|
15
|
+
return {
|
|
16
|
+
__serialized_type: "Map",
|
|
17
|
+
entries: Array.from(value.entries()),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (Buffer.isBuffer(value)) {
|
|
21
|
+
return {
|
|
22
|
+
__serialized_type: "Buffer",
|
|
23
|
+
data: value.toString("base64"),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Custom JSON reviver that restores Map and Buffer instances.
|
|
30
|
+
* Also handles backward-compat with Node's native Buffer JSON
|
|
31
|
+
* representation `{ type: "Buffer", data: [byte, ...] }`.
|
|
32
|
+
*/
|
|
33
|
+
export function jsonReviver(_key, value) {
|
|
34
|
+
if (value && typeof value === "object") {
|
|
35
|
+
const obj = value;
|
|
36
|
+
if (obj.__serialized_type === "Map" &&
|
|
37
|
+
Array.isArray(obj.entries) &&
|
|
38
|
+
obj.entries.every((e) => Array.isArray(e) && e.length === 2)) {
|
|
39
|
+
return new Map(obj.entries);
|
|
40
|
+
}
|
|
41
|
+
if (obj.__serialized_type === "Buffer" && typeof obj.data === "string") {
|
|
42
|
+
return Buffer.from(obj.data, "base64");
|
|
43
|
+
}
|
|
44
|
+
// Backward compat: Node's Buffer.toJSON() format.
|
|
45
|
+
// Guard with number[] check to avoid false-positives on user data
|
|
46
|
+
// that happens to have { type: "Buffer", data: [...] } shape.
|
|
47
|
+
if (obj.type === "Buffer" &&
|
|
48
|
+
Array.isArray(obj.data) &&
|
|
49
|
+
obj.data.every((n) => typeof n === "number")) {
|
|
50
|
+
return Buffer.from(obj.data);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../src/helpers/serialization.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,KAAc;IACvD,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,OAAO;YACL,iBAAiB,EAAE,KAAK;YACxB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;SACrC,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,iBAAiB,EAAE,QAAQ;YAC3B,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;SAC/B,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAc;IACtD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,KAAgC,CAAC;QAE7C,IACE,GAAG,CAAC,iBAAiB,KAAK,KAAK;YAC/B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAC1B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAC5D,CAAC;YACD,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,OAA+B,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,GAAG,CAAC,iBAAiB,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,kDAAkD;QAClD,kEAAkE;QAClE,8DAA8D;QAC9D,IACE,GAAG,CAAC,IAAI,KAAK,QAAQ;YACrB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAC5C,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAgB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export { createMemoryCacheHandler, MemoryCacheHandler, type MemoryCacheHandlerOp
|
|
|
7
7
|
export { RedisCacheHandler, type RedisCacheHandlerOptions, } from "./handlers/redis.js";
|
|
8
8
|
export { bufferToString, stringToBuffer } from "./helpers/buffer.js";
|
|
9
9
|
export { isImplicitTag } from "./helpers/is-implicit-tag.js";
|
|
10
|
+
export { jsonReplacer, jsonReviver } from "./helpers/serialization.js";
|
|
10
11
|
export { calculateLifespan, isExpired } from "./helpers/lifespan.js";
|
|
11
12
|
export { type CacheHandlerConfig, createCacheConfig, createCacheConfigWithProfiles, } from "./helpers/next-config.js";
|
|
12
13
|
export type { CacheHandler, CacheHandlerContext, CacheHandlerGetMeta, CacheHandlerOptions, CacheHandlerValue, CacheValue, LifespanParameters, } from "./types.js";
|
|
@@ -14,5 +15,6 @@ export { IMPLICIT_TAG_PREFIX } from "./types.js";
|
|
|
14
15
|
export { type CacheHandlerOptions as DataCacheHandlerOptions, type CacheHandlerType, createCacheHandler, } from "./data-cache/factory.js";
|
|
15
16
|
export { createMemoryDataCacheHandler, type MemoryDataCacheHandlerOptions, } from "./data-cache/memory.js";
|
|
16
17
|
export { createRedisDataCacheHandler, type RedisClient, type RedisDataCacheHandlerOptions, } from "./data-cache/redis.js";
|
|
18
|
+
export { createIoredisAdapter, type IoredisLike, } from "./data-cache/ioredis-adapter.js";
|
|
17
19
|
export type { DataCacheEntry, DataCacheHandler, Timestamp, } from "./data-cache/types.js";
|
|
18
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,KAAK,kBAAkB,EACvB,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAOjD,OAAO,EACL,KAAK,mBAAmB,IAAI,uBAAuB,EACnD,KAAK,gBAAgB,EACrB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,4BAA4B,EAC5B,KAAK,6BAA6B,GACnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,2BAA2B,EAC3B,KAAK,WAAW,EAChB,KAAK,4BAA4B,GAClC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EACL,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,KAAK,kBAAkB,EACvB,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAOjD,OAAO,EACL,KAAK,mBAAmB,IAAI,uBAAuB,EACnD,KAAK,gBAAgB,EACrB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,4BAA4B,EAC5B,KAAK,6BAA6B,GACnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,2BAA2B,EAC3B,KAAK,WAAW,EAChB,KAAK,4BAA4B,GAClC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,oBAAoB,EACpB,KAAK,WAAW,GACjB,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,SAAS,GACV,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ export { RedisCacheHandler, } from "./handlers/redis.js";
|
|
|
12
12
|
export { bufferToString, stringToBuffer } from "./helpers/buffer.js";
|
|
13
13
|
// Helpers
|
|
14
14
|
export { isImplicitTag } from "./helpers/is-implicit-tag.js";
|
|
15
|
+
export { jsonReplacer, jsonReviver } from "./helpers/serialization.js";
|
|
15
16
|
export { calculateLifespan, isExpired } from "./helpers/lifespan.js";
|
|
16
17
|
export { createCacheConfig, createCacheConfigWithProfiles, } from "./helpers/next-config.js";
|
|
17
18
|
export { IMPLICIT_TAG_PREFIX } from "./types.js";
|
|
@@ -23,4 +24,6 @@ export { createCacheHandler, } from "./data-cache/factory.js";
|
|
|
23
24
|
// Advanced: Direct handler creation
|
|
24
25
|
export { createMemoryDataCacheHandler, } from "./data-cache/memory.js";
|
|
25
26
|
export { createRedisDataCacheHandler, } from "./data-cache/redis.js";
|
|
27
|
+
// Adapter for using an ioredis client with the node-redis-style data cache handler
|
|
28
|
+
export { createIoredisAdapter, } from "./data-cache/ioredis-adapter.js";
|
|
26
29
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gFAAgF;AAChF,2DAA2D;AAC3D,gFAAgF;AAEhF,OAAO,EACL,gBAAgB,EAEhB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,WAAW;AACX,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,GAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAEL,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAWlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,gFAAgF;AAChF,kDAAkD;AAClD,gFAAgF;AAEhF,oCAAoC;AACpC,OAAO,EAGL,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,oCAAoC;AACpC,OAAO,EACL,4BAA4B,GAE7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,2BAA2B,GAG5B,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,gFAAgF;AAChF,2DAA2D;AAC3D,gFAAgF;AAEhF,OAAO,EACL,gBAAgB,EAEhB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,WAAW;AACX,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iBAAiB,GAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrE,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAEL,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,0BAA0B,CAAC;AAWlC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,gFAAgF;AAChF,kDAAkD;AAClD,gFAAgF;AAEhF,oCAAoC;AACpC,OAAO,EAGL,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,oCAAoC;AACpC,OAAO,EACL,4BAA4B,GAE7B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,2BAA2B,GAG5B,MAAM,uBAAuB,CAAC;AAC/B,mFAAmF;AACnF,OAAO,EACL,oBAAoB,GAErB,MAAM,iCAAiC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -10,13 +10,20 @@ export declare const IMPLICIT_TAG_PREFIX = "_N_T_";
|
|
|
10
10
|
* Cache entry value types supported by Next.js
|
|
11
11
|
*/
|
|
12
12
|
export type CacheValue = {
|
|
13
|
-
kind: "
|
|
13
|
+
kind: "APP_PAGE";
|
|
14
14
|
html: string;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
rscData: Buffer | undefined;
|
|
16
|
+
headers: Record<string, string | string[]> | undefined;
|
|
17
|
+
postponed: string | undefined;
|
|
18
|
+
status: number | undefined;
|
|
19
|
+
segmentData: Map<string, Buffer> | undefined;
|
|
18
20
|
} | {
|
|
19
|
-
kind: "
|
|
21
|
+
kind: "APP_ROUTE";
|
|
22
|
+
body: Buffer;
|
|
23
|
+
status: number;
|
|
24
|
+
headers: Record<string, string | string[]>;
|
|
25
|
+
} | {
|
|
26
|
+
kind: "PAGES";
|
|
20
27
|
html: string;
|
|
21
28
|
pageData: Record<string, unknown>;
|
|
22
29
|
status?: number;
|
|
@@ -30,9 +37,13 @@ export type CacheValue = {
|
|
|
30
37
|
url: string;
|
|
31
38
|
};
|
|
32
39
|
revalidate: number | false;
|
|
40
|
+
} | {
|
|
41
|
+
kind: "REDIRECT";
|
|
42
|
+
props: Record<string, unknown>;
|
|
33
43
|
} | {
|
|
34
44
|
kind: "IMAGE";
|
|
35
45
|
etag: string;
|
|
46
|
+
upstreamEtag: string;
|
|
36
47
|
buffer: Buffer;
|
|
37
48
|
extension: string;
|
|
38
49
|
isMiss?: boolean;
|
|
@@ -122,7 +133,7 @@ export interface CacheHandlerGetMeta {
|
|
|
122
133
|
*/
|
|
123
134
|
export interface CacheHandlerGetResult {
|
|
124
135
|
/**
|
|
125
|
-
* The actual cache value (
|
|
136
|
+
* The actual cache value (APP_PAGE, APP_ROUTE, PAGES, FETCH, REDIRECT, or IMAGE)
|
|
126
137
|
*/
|
|
127
138
|
value: CacheValue | null;
|
|
128
139
|
/**
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED