Skip to content

Commit a18f2bb

Browse files
Refactor onCreation hook to be async (caching-tools#168)
1 parent 82ee6d9 commit a18f2bb

15 files changed

+577
-556
lines changed

.changeset/plenty-cameras-sparkle.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'cache-handler-docs': patch
3+
'@neshca/cache-handler': patch
4+
---
5+
6+
Add async onCreation hook and async Handlers

apps/cache-testing/cache-handler-redis-stack.js

+20-36
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,27 @@ if (!process.env.REDIS_URL) {
99
const PREFIX = 'JSON:';
1010
const CONNECT_TIMEOUT_MS = 5 * 50 * 1000;
1111

12-
function createRedisClient(url) {
13-
const client = createClient({
14-
url,
15-
name: `cache-handler:${PREFIX}${process.env.PORT ?? process.pid}`,
16-
socket: {
17-
connectTimeout: CONNECT_TIMEOUT_MS,
18-
},
12+
const client = createClient({
13+
url: process.env.REDIS_URL,
14+
name: `cache-handler:${PREFIX}${process.env.PORT ?? process.pid}`,
15+
socket: {
16+
connectTimeout: CONNECT_TIMEOUT_MS,
17+
},
18+
});
19+
20+
client.on('error', (error) => {
21+
console.error('Redis error:', error.message);
22+
});
23+
24+
IncrementalCache.onCreation(async (options) => {
25+
await client.connect();
26+
27+
const handler = createHandler({
28+
client,
29+
keyPrefix: PREFIX,
1930
});
2031

21-
client.on('error', (error) => {
22-
console.error('Redis error:', error.message);
23-
});
24-
25-
return client;
26-
}
27-
28-
async function connect(client) {
29-
try {
30-
await client.connect();
31-
} catch (error) {
32-
console.error('Redis connection error:', error.message);
33-
}
34-
}
35-
36-
if (process.env.SERVER_STARTED) {
37-
const client = createRedisClient(process.env.REDIS_URL);
38-
39-
connect(client).then(() => {
40-
console.log('Redis connected');
41-
});
42-
43-
IncrementalCache.onCreation(
44-
createHandler({
45-
client,
46-
keyPrefix: PREFIX,
47-
}),
48-
);
49-
}
32+
return handler(options);
33+
});
5034

5135
module.exports = IncrementalCache;

apps/cache-testing/cache-handler-redis-strings.js

+20-36
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,27 @@ if (!process.env.REDIS_URL) {
99
const PREFIX = 'string:';
1010
const CONNECT_TIMEOUT_MS = 5 * 50 * 1000;
1111

12-
function createRedisClient(url) {
13-
const client = createClient({
14-
url,
15-
name: `cache-handler:${PREFIX}${process.env.PORT ?? process.pid}`,
16-
socket: {
17-
connectTimeout: CONNECT_TIMEOUT_MS,
18-
},
12+
const client = createClient({
13+
url: process.env.REDIS_URL,
14+
name: `cache-handler:${PREFIX}${process.env.PORT ?? process.pid}`,
15+
socket: {
16+
connectTimeout: CONNECT_TIMEOUT_MS,
17+
},
18+
});
19+
20+
client.on('error', (error) => {
21+
console.error('Redis error:', error.message);
22+
});
23+
24+
IncrementalCache.onCreation(async (options) => {
25+
await client.connect();
26+
27+
const handler = createHandler({
28+
client,
29+
keyPrefix: PREFIX,
1930
});
2031

21-
client.on('error', (error) => {
22-
console.error('Redis error:', error.message);
23-
});
24-
25-
return client;
26-
}
27-
28-
async function connect(client) {
29-
try {
30-
await client.connect();
31-
} catch (error) {
32-
console.error('Redis connection error:', error.message);
33-
}
34-
}
35-
36-
if (process.env.SERVER_STARTED) {
37-
const client = createRedisClient(process.env.REDIS_URL);
38-
39-
connect(client).then(() => {
40-
console.log('Redis connected');
41-
});
42-
43-
IncrementalCache.onCreation(
44-
createHandler({
45-
client,
46-
keyPrefix: PREFIX,
47-
}),
48-
);
49-
}
32+
return handler(options);
33+
});
5034

5135
module.exports = IncrementalCache;

apps/cache-testing/cache-handler-server.js

+14-6
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,20 @@ const { createHandler } = require('@neshca/cache-handler/server');
33

44
const baseUrl = process.env.REMOTE_CACHE_SERVER_BASE_URL ?? 'http://localhost:8080';
55

6-
if (process.env.SERVER_STARTED) {
7-
IncrementalCache.onCreation(
8-
createHandler({
9-
baseUrl,
10-
}),
11-
);
6+
async function wait(ms) {
7+
return new Promise((resolve) => {
8+
setTimeout(resolve, ms);
9+
});
1210
}
1311

12+
IncrementalCache.onCreation(async (options) => {
13+
await wait(100);
14+
15+
const handler = createHandler({
16+
baseUrl,
17+
});
18+
19+
return handler(options);
20+
});
21+
1422
module.exports = IncrementalCache;

apps/cache-testing/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
},
1717
"dependencies": {
1818
"lru-cache": "10.1.0",
19-
"next": "14.0.4-canary.6",
19+
"next": "14.0.4-canary.9",
2020
"react": "18.2.0",
2121
"react-dom": "18.2.0",
2222
"undici": "5.27.2"
@@ -25,7 +25,7 @@
2525
"@neshca/cache-handler": "*",
2626
"@neshca/json-replacer-reviver": "*",
2727
"@neshca/tsconfig": "*",
28-
"@next/eslint-plugin-next": "14.0.4-canary.6",
28+
"@next/eslint-plugin-next": "14.0.4-canary.9",
2929
"@playwright/test": "1.40.0",
3030
"@types/node": "20.9.4",
3131
"@types/react": "18.2.38",

docs/cache-handler-docs/src/pages/redis-stack-custom.mdx

+12-32
Original file line numberDiff line numberDiff line change
@@ -21,41 +21,21 @@ let localTagsManifest = {
2121

2222
const TAGS_MANIFEST_KEY = 'sharedTagsManifest';
2323

24-
function createRedisClient(url) {
25-
const client = createClient({
26-
url,
27-
});
28-
29-
client.on('error', (error) => {
30-
console.error('Redis error:', error.message);
31-
});
24+
const client = createClient({
25+
url: process.env.REDIS_URL ?? 'redis://localhost:6379',
26+
});
3227

33-
return client;
34-
}
35-
36-
async function connectAndSetManifest(client) {
37-
try {
38-
await client.connect();
39-
} catch (error) {
40-
console.error('Redis connection error:', error.message);
41-
}
42-
43-
try {
44-
await client.json.set(TAGS_MANIFEST_KEY, '.', localTagsManifest, {
45-
NX: true,
46-
});
47-
} catch (error) {
48-
console.error('Redis set tagsManifest error:', error.message);
49-
}
50-
}
51-
52-
const client = createRedisClient(process.env.REDIS_URL ?? 'redis://localhost:6379');
53-
54-
connectAndSetManifest(client).then(() => {
55-
console.log('Redis connected');
28+
client.on('error', (error) => {
29+
console.error('Redis error:', error.message);
5630
});
5731

58-
IncrementalCache.onCreation(() => {
32+
IncrementalCache.onCreation(async () => {
33+
await client.connect();
34+
35+
await client.json.set(TAGS_MANIFEST_KEY, '.', localTagsManifest, {
36+
NX: true,
37+
});
38+
5939
return {
6040
cache: {
6141
async get(key) {

docs/cache-handler-docs/src/pages/redis-stack.mdx

+13-26
Original file line numberDiff line numberDiff line change
@@ -14,38 +14,25 @@ const { IncrementalCache } = require('@neshca/cache-handler');
1414
const { createHandler } = require('@neshca/cache-handler/redis-stack');
1515
const { createClient } = require('redis');
1616

17-
function createRedisClient(url) {
18-
const client = createClient({
19-
url,
20-
});
21-
22-
client.on('error', (error) => {
23-
console.error('Redis error:', error.message);
24-
});
17+
const client = createClient({
18+
url: process.env.REDIS_URL ?? 'redis://localhost:6379',
19+
});
2520

26-
return client;
27-
}
21+
client.on('error', (error) => {
22+
console.error('Redis error:', error.message);
23+
});
2824

29-
async function connect(client) {
30-
try {
31-
await client.connect();
32-
} catch (error) {
33-
console.error('Redis connection error:', error.message);
34-
}
35-
}
25+
IncrementalCache.onCreation(async (options) => {
26+
await client.connect();
3627

37-
const client = createRedisClient(process.env.REDIS_URL ?? 'redis://localhost:6379');
28+
const handler = createHandler({
29+
client,
30+
keyPrefix: PREFIX,
31+
});
3832

39-
connect(client).then(() => {
40-
console.log('Redis connected');
33+
return handler(options);
4134
});
4235

43-
IncrementalCache.onCreation(
44-
createHandler({
45-
client,
46-
}),
47-
);
48-
4936
module.exports = IncrementalCache;
5037
```
5138

docs/cache-handler-docs/src/pages/redis-strings-custom.mdx

+10-26
Original file line numberDiff line numberDiff line change
@@ -28,32 +28,16 @@ const localTagsManifest = {
2828

2929
const TAGS_MANIFEST_KEY = 'sharedTagsManifest';
3030

31-
function createRedisClient(url) {
32-
const client = createClient({
33-
url,
34-
});
35-
36-
client.on('error', (error) => {
37-
console.error('Redis error:', error.message);
38-
});
39-
40-
return client;
41-
}
42-
43-
async function connect(client) {
44-
try {
45-
await client.connect();
46-
} catch (error) {
47-
console.error('Redis connection error:', error.message);
48-
}
49-
}
50-
51-
IncrementalCache.onCreation(() => {
52-
const client = createRedisClient(process.env.REDIS_URL ?? 'redis://localhost:6379');
53-
54-
connect(client).then(() => {
55-
console.log('Redis connected');
56-
});
31+
const client = createClient({
32+
url: process.env.REDIS_URL ?? 'redis://localhost:6379',
33+
});
34+
35+
client.on('error', (error) => {
36+
console.error('Redis error:', error.message);
37+
});
38+
39+
IncrementalCache.onCreation(async () => {
40+
await client.connect();
5741

5842
return {
5943
cache: {

docs/cache-handler-docs/src/pages/redis-strings.mdx

+13-26
Original file line numberDiff line numberDiff line change
@@ -14,38 +14,25 @@ const { IncrementalCache } = require('@neshca/cache-handler');
1414
const { createHandler } = require('@neshca/cache-handler/redis-strings');
1515
const { createClient } = require('redis');
1616

17-
function createRedisClient(url) {
18-
const client = createClient({
19-
url,
20-
});
21-
22-
client.on('error', (error) => {
23-
console.error('Redis error:', error.message);
24-
});
17+
const client = createClient({
18+
url: process.env.REDIS_URL ?? 'redis://localhost:6379',
19+
});
2520

26-
return client;
27-
}
21+
client.on('error', (error) => {
22+
console.error('Redis error:', error.message);
23+
});
2824

29-
async function connect(client) {
30-
try {
31-
await client.connect();
32-
} catch (error) {
33-
console.error('Redis connection error:', error.message);
34-
}
35-
}
25+
IncrementalCache.onCreation(async (options) => {
26+
await client.connect();
3627

37-
const client = createRedisClient(process.env.REDIS_URL ?? 'redis://localhost:6379');
28+
const handler = createHandler({
29+
client,
30+
keyPrefix: PREFIX,
31+
});
3832

39-
connect(client).then(() => {
40-
console.log('Redis connected');
33+
return handler(options);
4134
});
4235

43-
IncrementalCache.onCreation(
44-
createHandler({
45-
client,
46-
}),
47-
);
48-
4936
module.exports = IncrementalCache;
5037
```
5138

docs/cache-handler-docs/theme.config.jsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ export default {
5252
banner: {
5353
key: '0.5.1-release',
5454
text: (
55-
<a href={`${process.env.NEXT_PUBLIC_BASE_URL}/server`}>🎉 Version 0.5.1 is out. Check out HTTP Handler</a>
55+
<a href={`${process.env.NEXT_PUBLIC_BASE_URL}/redis-stack`}>
56+
🎉 Version 0.5.2 is out. onCreation now accepts async functions!
57+
</a>
5658
),
5759
},
5860
};

0 commit comments

Comments
 (0)