@eggjs/redis 3.1.0 → 4.0.0-beta.27

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.
Files changed (43) hide show
  1. package/README.md +144 -120
  2. package/dist/agent.d.ts +2 -0
  3. package/dist/agent.js +3 -0
  4. package/dist/app.d.ts +2 -0
  5. package/dist/app.js +3 -0
  6. package/dist/{esm/config → config}/config.default.js +1 -1
  7. package/dist/index.d.ts +1 -0
  8. package/dist/{esm/index.js → index.js} +2 -2
  9. package/dist/{commonjs/lib → lib}/redis.d.ts +2 -2
  10. package/dist/lib/redis.js +76 -0
  11. package/dist/types.d.ts +14 -0
  12. package/dist/{esm/types.js → types.js} +1 -1
  13. package/package.json +48 -79
  14. package/dist/commonjs/agent.d.ts +0 -2
  15. package/dist/commonjs/agent.js +0 -5
  16. package/dist/commonjs/app.d.ts +0 -2
  17. package/dist/commonjs/app.js +0 -5
  18. package/dist/commonjs/config/config.default.js +0 -55
  19. package/dist/commonjs/index.d.ts +0 -1
  20. package/dist/commonjs/index.js +0 -4
  21. package/dist/commonjs/lib/redis.js +0 -88
  22. package/dist/commonjs/package.json +0 -3
  23. package/dist/commonjs/types.d.ts +0 -11
  24. package/dist/commonjs/types.js +0 -3
  25. package/dist/esm/agent.d.ts +0 -2
  26. package/dist/esm/agent.js +0 -3
  27. package/dist/esm/app.d.ts +0 -2
  28. package/dist/esm/app.js +0 -3
  29. package/dist/esm/config/config.default.d.ts +0 -59
  30. package/dist/esm/index.d.ts +0 -1
  31. package/dist/esm/lib/redis.d.ts +0 -6
  32. package/dist/esm/lib/redis.js +0 -81
  33. package/dist/esm/package.json +0 -3
  34. package/dist/esm/types.d.ts +0 -11
  35. package/dist/package.json +0 -4
  36. package/src/agent.ts +0 -3
  37. package/src/app.ts +0 -3
  38. package/src/config/config.default.ts +0 -111
  39. package/src/index.ts +0 -1
  40. package/src/lib/redis.ts +0 -125
  41. package/src/types.ts +0 -14
  42. package/src/typings/index.d.ts +0 -4
  43. /package/dist/{commonjs/config → config}/config.default.d.ts +0 -0
package/README.md CHANGED
@@ -1,8 +1,6 @@
1
1
  # @eggjs/redis
2
2
 
3
3
  [![NPM version][npm-image]][npm-url]
4
- [![Node.js CI](https://github.com/eggjs/redis/actions/workflows/nodejs.yml/badge.svg)](https://github.com/eggjs/redis/actions/workflows/nodejs.yml)
5
- [![Test coverage][codecov-image]][codecov-url]
6
4
  [![Known Vulnerabilities][snyk-image]][snyk-url]
7
5
  [![npm download][download-image]][download-url]
8
6
  [![Node.js Version](https://img.shields.io/node/v/@eggjs/redis.svg?style=flat)](https://nodejs.org/en/download/)
@@ -11,8 +9,6 @@
11
9
 
12
10
  [npm-image]: https://img.shields.io/npm/v/@eggjs/redis.svg?style=flat-square
13
11
  [npm-url]: https://npmjs.org/package/@eggjs/redis
14
- [codecov-image]: https://codecov.io/gh/eggjs/redis/branch/master/graph/badge.svg
15
- [codecov-url]: https://codecov.io/gh/eggjs/redis
16
12
  [snyk-image]: https://snyk.io/test/npm/@eggjs/redis/badge.svg?style=flat-square
17
13
  [snyk-url]: https://snyk.io/test/npm/@eggjs/redis
18
14
  [download-image]: https://img.shields.io/npm/dm/@eggjs/redis.svg?style=flat-square
@@ -20,6 +16,10 @@
20
16
 
21
17
  Valkey / Redis client (support [redis protocol](https://redis.io/docs/latest/develop/reference/protocol-spec/)) based on iovalkey for egg framework
22
18
 
19
+ ## Version Notes
20
+
21
+ `@eggjs/redis` only supports `egg@4` now, if you are using `egg@3` or `egg@2`, you should use [`egg-redis`](https://github.com/eggjs/redis/tree/2.x).
22
+
23
23
  ## Install
24
24
 
25
25
  ```bash
@@ -33,57 +33,70 @@ If you want to know specific usage, you should refer to the document of [ioredis
33
33
 
34
34
  ## Configuration
35
35
 
36
- Change `${app_root}/config/plugin.js` to enable redis plugin:
36
+ Change `${app_root}/config/plugin.ts` to enable redis plugin:
37
37
 
38
- ```js
39
- exports.redis = {
40
- enable: true,
41
- package: '@eggjs/redis',
38
+ ```ts
39
+ export default {
40
+ redis: {
41
+ enable: true,
42
+ package: '@eggjs/redis',
43
+ },
42
44
  };
43
45
  ```
44
46
 
45
- Configure redis information in `${app_root}/config/config.default.js`:
47
+ Configure redis information in `${app_root}/config/config.default.ts`:
46
48
 
47
49
  **Single Client**
48
50
 
49
- ```javascript
50
- config.redis = {
51
- client: {
52
- port: 6379, // Redis port
53
- host: '127.0.0.1', // Redis host
54
- password: 'auth',
55
- db: 0,
56
- },
57
- };
58
- ```
59
-
60
- **Multi Clients**
51
+ ```ts
52
+ import { defineConfig } from 'egg';
61
53
 
62
- ```javascript
63
- config.redis = {
64
- clients: {
65
- foo: {
66
- // instanceName. See below
54
+ export default defineConfig({
55
+ redis: {
56
+ client: {
67
57
  port: 6379, // Redis port
68
58
  host: '127.0.0.1', // Redis host
69
59
  password: 'auth',
70
60
  db: 0,
71
61
  },
72
- bar: {
73
- port: 6379,
74
- host: '127.0.0.1',
75
- password: 'auth',
76
- db: 1,
62
+ },
63
+ });
64
+ ```
65
+
66
+ **Multi Clients**
67
+
68
+ ```ts
69
+ import { defineConfig } from 'egg';
70
+
71
+ export default defineConfig({
72
+ redis: {
73
+ clients: {
74
+ foo: {
75
+ // instanceName. See below
76
+ port: 6379, // Redis port
77
+ host: '127.0.0.1', // Redis host
78
+ password: 'auth',
79
+ db: 0,
80
+ },
81
+ bar: {
82
+ port: 6379,
83
+ host: '127.0.0.1',
84
+ password: 'auth',
85
+ db: 1,
86
+ },
77
87
  },
78
88
  },
79
- };
89
+ });
80
90
  ```
81
91
 
82
92
  **Sentinel**
83
93
 
84
- ```javascript
85
- config.redis = {
86
- client: {
94
+ ```ts
95
+ import { defineConfig } from 'egg';
96
+
97
+ export default defineConfig({
98
+ redis: {
99
+ client: {
87
100
  // Sentinel instances
88
101
  sentinels: [
89
102
  {
@@ -123,71 +136,78 @@ See [ioredis API Documentation](https://github.com/redis/ioredis#basic-usage) fo
123
136
  `@eggjs/redis` using `ioredis@5` now, if you want to use other version of iovalkey or ioredis,
124
137
  you can pass the instance by `config.redis.Redis`:
125
138
 
126
- ```js
127
- // config/config.default.js
128
- config.redis = {
129
- Redis: require('ioredis'), // customize ioredis version, only set when you needed
130
- client: {
131
- port: 6379, // Redis port
132
- host: '127.0.0.1', // Redis host
133
- password: 'auth',
134
- db: 0,
139
+ ```ts
140
+ // config/config.default.ts
141
+
142
+ import { defineConfig } from 'egg';
143
+
144
+ export default defineConfig({
145
+ redis: {
146
+ Redis: require('ioredis'), // customize ioredis version, only set when you needed
147
+ client: {
148
+ port: 6379, // Redis port
149
+ host: '127.0.0.1', // Redis host
150
+ password: 'auth',
151
+ db: 0,
152
+ },
135
153
  },
136
- };
154
+ });
137
155
  ```
138
156
 
139
157
  **weakDependent**
140
158
 
141
- ```javascript
142
- config.redis = {
143
- client: {
144
- port: 6379, // Redis port
145
- host: '127.0.0.1', // Redis host
146
- password: 'auth',
147
- db: 0,
148
- weakDependent: true, // the redis instance won't block app start
159
+ ```ts
160
+ import { defineConfig } from 'egg';
161
+
162
+ export default defineConfig({
163
+ redis: {
164
+ client: {
165
+ port: 6379, // Redis port
166
+ host: '127.0.0.1', // Redis host
167
+ password: 'auth',
168
+ db: 0,
169
+ weakDependent: true, // the redis instance won't block app start
170
+ },
149
171
  },
150
- };
172
+ });
151
173
  ```
152
174
 
153
175
  ## Usage
154
176
 
155
177
  In controller, you can use `app.redis` to get the redis instance, check [ioredis](https://github.com/redis/ioredis#basic-usage) to see how to use.
156
178
 
157
- ```js
158
- // app/controller/home.js
159
-
160
- module.exports = app => {
161
- return class HomeController extends app.Controller {
162
- async index() {
163
- const { ctx, app } = this;
164
- // set
165
- await app.redis.set('foo', 'bar');
166
- // get
167
- ctx.body = await app.redis.get('foo');
168
- }
169
- };
170
- };
179
+ ```ts
180
+ // app/controller/home.ts
181
+
182
+ import { Controller } from 'egg';
183
+
184
+ export default class HomeController extends Controller {
185
+ async index() {
186
+ const { ctx, app } = this;
187
+ // set
188
+ await app.redis.set('foo', 'bar');
189
+ // get
190
+ ctx.body = await app.redis.get('foo');
191
+ }
192
+ }
171
193
  ```
172
194
 
173
195
  ### Multi Clients
174
196
 
175
197
  If your Configure with multi clients, you can use `app.redis.get(instanceName)` to get the specific redis instance and use it like above.
176
198
 
177
- ```js
178
- // app/controller/home.js
179
-
180
- module.exports = app => {
181
- return class HomeController extends app.Controller {
182
- async index() {
183
- const { ctx, app } = this;
184
- // set
185
- await app.redis.get('instance1').set('foo', 'bar');
186
- // get
187
- ctx.body = await app.redis.get('instance1').get('foo');
188
- }
189
- };
190
- };
199
+ ```ts
200
+ // app/controller/home.ts
201
+
202
+ export default class HomeController extends Controller {
203
+ async index() {
204
+ const { ctx, app } = this;
205
+ // set
206
+ await app.redis.getSingletonInstance('instance1').set('foo', 'bar');
207
+ // get
208
+ ctx.body = await app.redis.getSingletonInstance('instance1').get('foo');
209
+ }
210
+ }
191
211
  ```
192
212
 
193
213
  ### Clients Depend on Redis Cluster
@@ -196,42 +216,46 @@ Before you start to use Redis Cluster, please checkout the [document](https://re
196
216
 
197
217
  In controller, you also can use `app.redis` to get the redis instance based on Redis Cluster.
198
218
 
199
- ```js
200
- // app/config/config.default.js
201
- exports.redis = {
202
- client: {
203
- cluster: true,
204
- nodes: [
205
- {
206
- host: '127.0.0.1',
207
- port: '6379',
208
- family: 'user',
209
- password: 'password',
210
- db: 'db',
211
- },
212
- {
213
- host: '127.0.0.1',
214
- port: '6380',
215
- family: 'user',
216
- password: 'password',
217
- db: 'db',
218
- },
219
- ],
219
+ ```ts
220
+ // app/config/config.default.ts
221
+ import { defineConfig } from 'egg';
222
+
223
+ export default defineConfig({
224
+ redis: {
225
+ client: {
226
+ cluster: true,
227
+ nodes: [
228
+ {
229
+ host: '127.0.0.1',
230
+ port: '6379',
231
+ family: 'user',
232
+ password: 'password',
233
+ db: 'db',
234
+ },
235
+ {
236
+ host: '127.0.0.1',
237
+ port: '6380',
238
+ family: 'user',
239
+ password: 'password',
240
+ db: 'db',
241
+ },
242
+ ],
243
+ },
220
244
  },
221
- };
222
-
223
- // app/controller/home.js
224
- module.exports = app => {
225
- return class HomeController extends app.Controller {
226
- async index() {
227
- const { ctx, app } = this;
228
- // set
229
- await app.redis.set('foo', 'bar');
230
- // get
231
- ctx.body = await app.redis.get('foo');
232
- }
233
- };
234
- };
245
+ });
246
+
247
+ // app/controller/home.ts
248
+ import { Controller } from 'egg';
249
+
250
+ export default class HomeController extends Controller {
251
+ async index() {
252
+ const { ctx, app } = this;
253
+ // set
254
+ await app.redis.set('foo', 'bar');
255
+ // get
256
+ ctx.body = await app.redis.get('foo');
257
+ }
258
+ }
235
259
  ```
236
260
 
237
261
  ## For the local dev
@@ -245,7 +269,7 @@ docker compose -f docker-compose.yml up -d
245
269
  Run the unit tests
246
270
 
247
271
  ```bash
248
- npm test
272
+ pnpm test
249
273
  ```
250
274
 
251
275
  Stop test redis service
@@ -264,6 +288,6 @@ Please open an issue [here](https://github.com/eggjs/egg/issues).
264
288
 
265
289
  ## Contributors
266
290
 
267
- [![Contributors](https://contrib.rocks/image?repo=eggjs/redis)](https://github.com/eggjs/redis/graphs/contributors)
291
+ [![Contributors](https://contrib.rocks/image?repo=eggjs/egg)](https://github.com/eggjs/egg/graphs/contributors)
268
292
 
269
293
  Made with [contributors-img](https://contrib.rocks).
@@ -0,0 +1,2 @@
1
+ import { RedisBoot } from './lib/redis.ts';
2
+ export default RedisBoot;
package/dist/agent.js ADDED
@@ -0,0 +1,3 @@
1
+ import { RedisBoot } from "./lib/redis.js";
2
+ export default RedisBoot;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLGVBQWUsU0FBUyxDQUFDIn0=
package/dist/app.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { RedisBoot } from './lib/redis.ts';
2
+ export default RedisBoot;
package/dist/app.js ADDED
@@ -0,0 +1,3 @@
1
+ import { RedisBoot } from "./lib/redis.js";
2
+ export default RedisBoot;
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsZUFBZSxTQUFTLENBQUMifQ==
@@ -50,4 +50,4 @@ export default {
50
50
  // },
51
51
  },
52
52
  };
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJEQSxlQUFlO0lBQ2IsS0FBSyxFQUFFO1FBQ0wsT0FBTyxFQUFFLEVBQUU7UUFDWCxHQUFHLEVBQUUsSUFBSTtRQUNULEtBQUssRUFBRSxLQUFLO1FBQ1osa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixlQUFlO1FBQ2YsWUFBWTtRQUNaLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsb0JBQW9CO1FBQ3BCLDBCQUEwQjtRQUMxQixjQUFjO1FBQ2QsS0FBSztRQUNMLEVBQUU7UUFDRixnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixjQUFjO1FBQ2Qsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsNEJBQTRCO1FBQzVCLGdCQUFnQjtRQUNoQixTQUFTO1FBQ1Qsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsNEJBQTRCO1FBQzVCLGdCQUFnQjtRQUNoQixPQUFPO1FBQ1AsTUFBTTtRQUNOLEVBQUU7UUFDRixjQUFjO1FBQ2QsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLHNCQUFzQjtRQUN0Qiw0QkFBNEI7UUFDNUIsZ0JBQWdCO1FBQ2hCLE9BQU87UUFDUCxpQkFBaUI7UUFDakIsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsNEJBQTRCO1FBQzVCLGdCQUFnQjtRQUNoQixPQUFPO1FBQ1AsS0FBSztLQUNTO0NBQ2pCLENBQUMifQ==
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTJEQSxlQUFlO0lBQ2IsS0FBSyxFQUFFO1FBQ0wsT0FBTyxFQUFFLEVBQUU7UUFDWCxHQUFHLEVBQUUsSUFBSTtRQUNULEtBQUssRUFBRSxLQUFLO1FBQ1osa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixlQUFlO1FBQ2YsWUFBWTtRQUNaLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsb0JBQW9CO1FBQ3BCLDBCQUEwQjtRQUMxQixjQUFjO1FBQ2QsS0FBSztRQUNMLEVBQUU7UUFDRixnQkFBZ0I7UUFDaEIsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixjQUFjO1FBQ2Qsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsNEJBQTRCO1FBQzVCLGdCQUFnQjtRQUNoQixTQUFTO1FBQ1Qsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsNEJBQTRCO1FBQzVCLGdCQUFnQjtRQUNoQixPQUFPO1FBQ1AsTUFBTTtRQUNOLEVBQUU7UUFDRixjQUFjO1FBQ2QsYUFBYTtRQUNiLGlCQUFpQjtRQUNqQixvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLHNCQUFzQjtRQUN0Qiw0QkFBNEI7UUFDNUIsZ0JBQWdCO1FBQ2hCLE9BQU87UUFDUCxpQkFBaUI7UUFDakIsb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixzQkFBc0I7UUFDdEIsNEJBQTRCO1FBQzVCLGdCQUFnQjtRQUNoQixPQUFPO1FBQ1AsS0FBSztLQUNTO0NBQ2pCLENBQUMifQ==
@@ -0,0 +1 @@
1
+ import './types.ts';
@@ -1,2 +1,2 @@
1
- import './types.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUMifQ==
1
+ import "./types.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUMifQ==
@@ -1,6 +1,6 @@
1
- import type { ILifecycleBoot, EggCore } from '@eggjs/core';
1
+ import type { ILifecycleBoot, EggApplicationCore } from 'egg';
2
2
  export declare class RedisBoot implements ILifecycleBoot {
3
3
  private readonly app;
4
- constructor(app: EggCore);
4
+ constructor(app: EggApplicationCore);
5
5
  didLoad(): Promise<void>;
6
6
  }
@@ -0,0 +1,76 @@
1
+ import assert from 'node:assert';
2
+ import { once } from 'node:events';
3
+ import { Redis } from 'ioredis';
4
+ export class RedisBoot {
5
+ app;
6
+ constructor(app) {
7
+ this.app = app;
8
+ }
9
+ async didLoad() {
10
+ const app = this.app;
11
+ if (app.type === 'application' && app.config.redis.app) {
12
+ app.addSingleton('redis', createClient);
13
+ }
14
+ else if (app.type === 'agent' && app.config.redis.agent) {
15
+ app.addSingleton('redis', createClient);
16
+ }
17
+ }
18
+ }
19
+ let count = 0;
20
+ function createClient(options, app) {
21
+ const RedisClass = app.config.redis.Redis ?? Redis;
22
+ let client;
23
+ if ('cluster' in options && options.cluster === true) {
24
+ const config = options;
25
+ assert(config.nodes && config.nodes.length > 0, '[@eggjs/redis] cluster nodes configuration is required when use cluster redis');
26
+ for (const client of config.nodes) {
27
+ assert(client.host && client.port, `[@eggjs/redis] 'host: ${client.host}', 'port: ${client.port}' are required on config`);
28
+ }
29
+ app.coreLogger.info('[@eggjs/redis] cluster connecting');
30
+ client = new RedisClass.Cluster(config.nodes, config);
31
+ }
32
+ else if ('sentinels' in options && options.sentinels) {
33
+ const config = options;
34
+ assert(config.sentinels && config.sentinels.length > 0, '[@eggjs/redis] sentinels configuration is required when use redis sentinel');
35
+ for (const sentinel of config.sentinels) {
36
+ assert(sentinel.host && sentinel.port, `[@eggjs/redis] 'host: ${sentinel.host}', 'port: ${sentinel.port}' are required on config`);
37
+ }
38
+ const mask = config.password ? '***' : config.password;
39
+ assert(config.name && config.password !== undefined && config.db !== undefined, `[@eggjs/redis] 'name of master: ${config.name}', 'password: ${mask}', 'db: ${config.db}' are required on config`);
40
+ app.coreLogger.info('[@eggjs/redis] sentinel connecting start');
41
+ client = new RedisClass(config);
42
+ }
43
+ else {
44
+ const config = options;
45
+ const mask = config.password ? '***' : config.password;
46
+ assert((config.host && config.port && config.password !== undefined && config.db !== undefined) || config.path, `[@eggjs/redis] 'host: ${config.host}', 'port: ${config.port}', 'password: ${mask}', 'db: ${config.db}' or 'path:${config.path}' are required on config`);
47
+ if (config.host) {
48
+ app.coreLogger.info('[@eggjs/redis] server connecting redis://:***@%s:%s/%s', config.host, config.port, config.db);
49
+ }
50
+ else {
51
+ app.coreLogger.info('[@eggjs/redis] server connecting %s', config.path || config);
52
+ }
53
+ client = new RedisClass(config);
54
+ }
55
+ client.on('connect', () => {
56
+ app.coreLogger.info('[@eggjs/redis] client connect success');
57
+ });
58
+ client.on('error', err => {
59
+ app.coreLogger.error('[@eggjs/redis] client error: %s', err);
60
+ app.coreLogger.error(err);
61
+ });
62
+ const index = count++;
63
+ app.lifecycle.registerBeforeStart(async () => {
64
+ if ('weakDependent' in options && options.weakDependent) {
65
+ app.coreLogger.info(`[@eggjs/redis] instance[${index}] is weak dependent and won't block app start`);
66
+ client.once('ready', () => {
67
+ app.coreLogger.info(`[@eggjs/redis] instance[${index}] status OK`);
68
+ });
69
+ return;
70
+ }
71
+ await Promise.race([once(client, 'ready'), once(client, 'error')]);
72
+ app.coreLogger.info(`[@eggjs/redis] instance[${index}] status OK, client ready`);
73
+ }, `[@eggjs/redis] instance[${index}] start check`);
74
+ return client;
75
+ }
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3JlZGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFLaEMsTUFBTSxPQUFPLFNBQVM7SUFDSCxHQUFHLENBQXFCO0lBRXpDLFlBQVksR0FBdUI7UUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNyQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssYUFBYSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFELEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxTQUFTLFlBQVksQ0FBQyxPQUFpRCxFQUFFLEdBQXVCO0lBQzlGLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7SUFDbkQsSUFBSSxNQUFNLENBQUM7SUFFWCxJQUFJLFNBQVMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxJ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
@@ -0,0 +1,14 @@
1
+ import type { Singleton } from 'egg';
2
+ import type { Redis } from 'ioredis';
3
+ import type { RedisConfig } from './config/config.default.ts';
4
+ declare module 'egg' {
5
+ interface EggAppConfig {
6
+ /**
7
+ * Redis plugin config
8
+ */
9
+ redis: RedisConfig;
10
+ }
11
+ interface EggApplicationCore {
12
+ redis: Redis & Singleton<Redis>;
13
+ }
14
+ }
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
package/package.json CHANGED
@@ -1,18 +1,26 @@
1
1
  {
2
2
  "name": "@eggjs/redis",
3
- "version": "3.1.0",
4
- "publishConfig": {
5
- "access": "public"
6
- },
3
+ "version": "4.0.0-beta.27",
7
4
  "description": "Valkey / Redis plugin for egg",
5
+ "type": "module",
8
6
  "eggPlugin": {
9
- "name": "redis",
10
- "exports": {
11
- "import": "./dist/esm",
12
- "require": "./dist/commonjs",
13
- "typescript": "./src"
14
- }
7
+ "name": "redis"
15
8
  },
9
+ "exports": {
10
+ ".": "./dist/index.js",
11
+ "./agent": "./dist/agent.js",
12
+ "./app": "./dist/app.js",
13
+ "./config/config.default": "./dist/config/config.default.js",
14
+ "./lib/redis": "./dist/lib/redis.js",
15
+ "./types": "./dist/types.js",
16
+ "./package.json": "./package.json"
17
+ },
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "files": [
22
+ "dist"
23
+ ],
16
24
  "keywords": [
17
25
  "egg",
18
26
  "eggPlugin",
@@ -21,84 +29,45 @@
21
29
  "Valkey",
22
30
  "database"
23
31
  ],
24
- "repository": {
25
- "type": "git",
26
- "url": "git+https://github.com/eggjs/redis.git"
27
- },
32
+ "license": "MIT",
33
+ "homepage": "https://github.com/eggjs/egg/tree/next/plugins/redis",
28
34
  "bugs": {
29
35
  "url": "https://github.com/eggjs/egg/issues"
30
36
  },
31
- "homepage": "https://github.com/eggjs/redis#readme",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/eggjs/egg.git",
40
+ "directory": "plugins/redis"
41
+ },
32
42
  "author": "jtyjty99999",
33
- "license": "MIT",
34
43
  "engines": {
35
- "node": ">= 18.19.0"
44
+ "node": ">= 22.18.0"
36
45
  },
37
46
  "dependencies": {
38
- "@eggjs/core": "^6.4.1",
39
47
  "ioredis": "^5.4.2"
40
48
  },
49
+ "peerDependencies": {
50
+ "egg": "4.1.0-beta.27"
51
+ },
41
52
  "devDependencies": {
42
- "@arethetypeswrong/cli": "^0.17.4",
43
- "@eggjs/bin": "7",
44
- "@eggjs/mock": "^6.0.5",
45
- "@eggjs/tsconfig": "1",
46
- "@types/mocha": "10",
47
- "@types/node": "22",
48
- "egg": "4",
49
- "husky": "^9.1.7",
50
- "lint-staged": "^15.5.0",
51
- "oxlint": "^0.16.2",
52
- "prettier": "^3.5.3",
53
- "rimraf": "6",
54
- "snap-shot-it": "^7.9.10",
55
- "tshy": "3",
56
- "tshy-after": "1",
57
- "typescript": "5"
53
+ "@types/node": "^24.6.2",
54
+ "detect-port": "^2.1.0",
55
+ "oxlint": "^1.19.0",
56
+ "rimraf": "^6.0.1",
57
+ "tsdown": "^0.15.4",
58
+ "typescript": "^5.9.3",
59
+ "vitest": "4.0.0-beta.16",
60
+ "@eggjs/mock": "7.0.0-beta.27",
61
+ "@eggjs/tsconfig": "3.1.0-beta.27",
62
+ "egg": "4.1.0-beta.27"
58
63
  },
64
+ "main": "./dist/index.js",
65
+ "module": "./dist/index.js",
66
+ "types": "./dist/index.d.ts",
59
67
  "scripts": {
60
- "lint": "oxlint",
61
- "pretest": "npm run clean && npm run lint -- --fix",
62
- "test": "egg-bin test",
63
- "preci": "npm run clean && npm run lint",
64
- "ci": "egg-bin cov",
65
- "postci": "npm run prepublishOnly && npm run clean",
66
- "clean": "rimraf dist",
67
- "prepublishOnly": "tshy && tshy-after && attw --pack",
68
- "prepare": "husky"
69
- },
70
- "lint-staged": {
71
- "*": "prettier --write --ignore-unknown --cache",
72
- "*.{ts,js,json,md,yml}": [
73
- "prettier --ignore-unknown --write",
74
- "oxlint --fix"
75
- ]
76
- },
77
- "type": "module",
78
- "tshy": {
79
- "exports": {
80
- ".": "./src/index.ts",
81
- "./package.json": "./package.json"
82
- }
83
- },
84
- "exports": {
85
- ".": {
86
- "import": {
87
- "types": "./dist/esm/index.d.ts",
88
- "default": "./dist/esm/index.js"
89
- },
90
- "require": {
91
- "types": "./dist/commonjs/index.d.ts",
92
- "default": "./dist/commonjs/index.js"
93
- }
94
- },
95
- "./package.json": "./package.json"
96
- },
97
- "files": [
98
- "dist",
99
- "src"
100
- ],
101
- "types": "./dist/commonjs/index.d.ts",
102
- "main": "./dist/commonjs/index.js",
103
- "module": "./dist/esm/index.js"
104
- }
68
+ "build": "tsdown && rimraf dist *.tsbuildinfo && tsc -p tsconfig.build.json",
69
+ "typecheck": "tsc --noEmit",
70
+ "lint": "oxlint --type-aware",
71
+ "test": "vitest run"
72
+ }
73
+ }