@eggjs/redis 3.0.0 → 4.0.0-beta.26

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 +169 -124
  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/{commonjs/config → config}/config.default.d.ts +2 -2
  7. package/dist/{esm/config → config}/config.default.js +1 -1
  8. package/dist/index.d.ts +1 -0
  9. package/dist/{esm/index.js → index.js} +2 -2
  10. package/dist/{commonjs/lib → lib}/redis.d.ts +2 -2
  11. package/dist/lib/redis.js +76 -0
  12. package/dist/types.d.ts +14 -0
  13. package/dist/{esm/types.js → types.js} +1 -1
  14. package/package.json +49 -69
  15. package/dist/commonjs/agent.d.ts +0 -2
  16. package/dist/commonjs/agent.js +0 -5
  17. package/dist/commonjs/app.d.ts +0 -2
  18. package/dist/commonjs/app.js +0 -5
  19. package/dist/commonjs/config/config.default.js +0 -55
  20. package/dist/commonjs/index.d.ts +0 -1
  21. package/dist/commonjs/index.js +0 -4
  22. package/dist/commonjs/lib/redis.js +0 -87
  23. package/dist/commonjs/package.json +0 -3
  24. package/dist/commonjs/types.d.ts +0 -11
  25. package/dist/commonjs/types.js +0 -3
  26. package/dist/esm/agent.d.ts +0 -2
  27. package/dist/esm/agent.js +0 -3
  28. package/dist/esm/app.d.ts +0 -2
  29. package/dist/esm/app.js +0 -3
  30. package/dist/esm/config/config.default.d.ts +0 -59
  31. package/dist/esm/index.d.ts +0 -1
  32. package/dist/esm/lib/redis.d.ts +0 -6
  33. package/dist/esm/lib/redis.js +0 -80
  34. package/dist/esm/package.json +0 -3
  35. package/dist/esm/types.d.ts +0 -11
  36. package/dist/package.json +0 -4
  37. package/src/agent.ts +0 -3
  38. package/src/app.ts +0 -3
  39. package/src/config/config.default.ts +0 -111
  40. package/src/index.ts +0 -1
  41. package/src/lib/redis.ts +0 -92
  42. package/src/types.ts +0 -14
  43. package/src/typings/index.d.ts +0 -4
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,69 +33,83 @@ 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,
51
+ ```ts
52
+ import { defineConfig } from 'egg';
53
+
54
+ export default defineConfig({
55
+ redis: {
56
+ client: {
57
+ port: 6379, // Redis port
58
+ host: '127.0.0.1', // Redis host
59
+ password: 'auth',
60
+ db: 0,
61
+ },
56
62
  },
57
- }
63
+ });
58
64
  ```
59
65
 
60
66
  **Multi Clients**
61
67
 
62
- ```javascript
63
- config.redis = {
64
- clients: {
65
- foo: { // instanceName. See below
66
- port: 6379, // Redis port
67
- host: '127.0.0.1', // Redis host
68
- password: 'auth',
69
- db: 0,
70
- },
71
- bar: {
72
- port: 6379,
73
- host: '127.0.0.1',
74
- password: 'auth',
75
- db: 1,
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
+ },
76
87
  },
77
- }
78
- }
88
+ },
89
+ });
79
90
  ```
80
91
 
81
92
  **Sentinel**
82
93
 
83
- ```javascript
84
- config.redis = {
85
- client: {
94
+ ```ts
95
+ import { defineConfig } from 'egg';
96
+
97
+ export default defineConfig({
98
+ redis: {
99
+ client: {
86
100
  // Sentinel instances
87
101
  sentinels: [
88
102
  {
89
- port: 26379, // Sentinel port
90
- host: '127.0.0.1', // Sentinel host
103
+ port: 26379, // Sentinel port
104
+ host: '127.0.0.1', // Sentinel host
91
105
  },
92
106
  // other sentinel instance config
93
107
  ],
94
- name: 'mymaster', // Master name
108
+ name: 'mymaster', // Master name
95
109
  password: 'auth',
96
- db: 0
110
+ db: 0,
97
111
  },
98
- }
112
+ };
99
113
  ```
100
114
 
101
115
  **No password**
@@ -122,71 +136,78 @@ See [ioredis API Documentation](https://github.com/redis/ioredis#basic-usage) fo
122
136
  `@eggjs/redis` using `ioredis@5` now, if you want to use other version of iovalkey or ioredis,
123
137
  you can pass the instance by `config.redis.Redis`:
124
138
 
125
- ```js
126
- // config/config.default.js
127
- config.redis = {
128
- Redis: require('ioredis'), // customize ioredis version, only set when you needed
129
- client: {
130
- port: 6379, // Redis port
131
- host: '127.0.0.1', // Redis host
132
- password: 'auth',
133
- 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
+ },
134
153
  },
135
- }
154
+ });
136
155
  ```
137
156
 
138
157
  **weakDependent**
139
158
 
140
- ```javascript
141
- config.redis = {
142
- client: {
143
- port: 6379, // Redis port
144
- host: '127.0.0.1', // Redis host
145
- password: 'auth',
146
- db: 0,
147
- 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
+ },
148
171
  },
149
- }
172
+ });
150
173
  ```
151
174
 
152
175
  ## Usage
153
176
 
154
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.
155
178
 
156
- ```js
157
- // app/controller/home.js
158
-
159
- module.exports = app => {
160
- return class HomeController extends app.Controller {
161
- async index() {
162
- const { ctx, app } = this;
163
- // set
164
- await app.redis.set('foo', 'bar');
165
- // get
166
- ctx.body = await app.redis.get('foo');
167
- }
168
- };
169
- };
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
+ }
170
193
  ```
171
194
 
172
195
  ### Multi Clients
173
196
 
174
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.
175
198
 
176
- ```js
177
- // app/controller/home.js
178
-
179
- module.exports = app => {
180
- return class HomeController extends app.Controller {
181
- async index() {
182
- const { ctx, app } = this;
183
- // set
184
- await app.redis.get('instance1').set('foo', 'bar');
185
- // get
186
- ctx.body = await app.redis.get('instance1').get('foo');
187
- }
188
- };
189
- };
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
+ }
190
211
  ```
191
212
 
192
213
  ### Clients Depend on Redis Cluster
@@ -195,42 +216,66 @@ Before you start to use Redis Cluster, please checkout the [document](https://re
195
216
 
196
217
  In controller, you also can use `app.redis` to get the redis instance based on Redis Cluster.
197
218
 
198
- ```js
199
- // app/config/config.default.js
200
- exports.redis = {
201
- client: {
202
- cluster: true,
203
- nodes: [
204
- {
205
- host: '127.0.0.1',
206
- port: '6379',
207
- family: 'user',
208
- password: 'password',
209
- db: 'db',
210
- },
211
- {
212
- host: '127.0.0.1',
213
- port: '6380',
214
- family: 'user',
215
- password: 'password',
216
- db: 'db',
217
- },
218
- ],
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
+ },
219
244
  },
220
- };
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
+ }
259
+ ```
221
260
 
222
- // app/controller/home.js
223
- module.exports = app => {
224
- return class HomeController extends app.Controller {
225
- async index() {
226
- const { ctx, app } = this;
227
- // set
228
- await app.redis.set('foo', 'bar');
229
- // get
230
- ctx.body = await app.redis.get('foo');
231
- }
232
- };
233
- };
261
+ ## For the local dev
262
+
263
+ Run docker compose to start test redis service
264
+
265
+ ```bash
266
+ docker compose -f docker-compose.yml up -d
267
+ ```
268
+
269
+ Run the unit tests
270
+
271
+ ```bash
272
+ pnpm test
273
+ ```
274
+
275
+ Stop test redis service
276
+
277
+ ```bash
278
+ docker compose -f docker-compose.yml down
234
279
  ```
235
280
 
236
281
  ## Questions & Suggestions
@@ -243,6 +288,6 @@ Please open an issue [here](https://github.com/eggjs/egg/issues).
243
288
 
244
289
  ## Contributors
245
290
 
246
- [![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)
247
292
 
248
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==
@@ -1,4 +1,4 @@
1
- import type { RedisOptions, ClusterOptions } from 'ioredis';
1
+ import type { RedisOptions, ClusterOptions, Redis } from 'ioredis';
2
2
  export interface RedisClientOptions extends RedisOptions {
3
3
  /**
4
4
  * Whether to enable weakDependent mode, the redis client start will not block the application start
@@ -51,7 +51,7 @@ export interface RedisConfig {
51
51
  *
52
52
  * Default to `undefined`, which means using the built-in ioredis
53
53
  */
54
- Redis?: any;
54
+ Redis?: typeof Redis;
55
55
  }
56
56
  declare const _default: {
57
57
  redis: RedisConfig;
@@ -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