@eggjs/redis 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -49,12 +49,12 @@ Configure redis information in `${app_root}/config/config.default.js`:
49
49
  ```javascript
50
50
  config.redis = {
51
51
  client: {
52
- port: 6379, // Redis port
53
- host: '127.0.0.1', // Redis host
52
+ port: 6379, // Redis port
53
+ host: '127.0.0.1', // Redis host
54
54
  password: 'auth',
55
55
  db: 0,
56
56
  },
57
- }
57
+ };
58
58
  ```
59
59
 
60
60
  **Multi Clients**
@@ -62,9 +62,10 @@ config.redis = {
62
62
  ```javascript
63
63
  config.redis = {
64
64
  clients: {
65
- foo: { // instanceName. See below
66
- port: 6379, // Redis port
67
- host: '127.0.0.1', // Redis host
65
+ foo: {
66
+ // instanceName. See below
67
+ port: 6379, // Redis port
68
+ host: '127.0.0.1', // Redis host
68
69
  password: 'auth',
69
70
  db: 0,
70
71
  },
@@ -74,8 +75,8 @@ config.redis = {
74
75
  password: 'auth',
75
76
  db: 1,
76
77
  },
77
- }
78
- }
78
+ },
79
+ };
79
80
  ```
80
81
 
81
82
  **Sentinel**
@@ -86,16 +87,16 @@ config.redis = {
86
87
  // Sentinel instances
87
88
  sentinels: [
88
89
  {
89
- port: 26379, // Sentinel port
90
- host: '127.0.0.1', // Sentinel host
90
+ port: 26379, // Sentinel port
91
+ host: '127.0.0.1', // Sentinel host
91
92
  },
92
93
  // other sentinel instance config
93
94
  ],
94
- name: 'mymaster', // Master name
95
+ name: 'mymaster', // Master name
95
96
  password: 'auth',
96
- db: 0
97
+ db: 0,
97
98
  },
98
- }
99
+ };
99
100
  ```
100
101
 
101
102
  **No password**
@@ -127,12 +128,12 @@ you can pass the instance by `config.redis.Redis`:
127
128
  config.redis = {
128
129
  Redis: require('ioredis'), // customize ioredis version, only set when you needed
129
130
  client: {
130
- port: 6379, // Redis port
131
- host: '127.0.0.1', // Redis host
131
+ port: 6379, // Redis port
132
+ host: '127.0.0.1', // Redis host
132
133
  password: 'auth',
133
134
  db: 0,
134
135
  },
135
- }
136
+ };
136
137
  ```
137
138
 
138
139
  **weakDependent**
@@ -140,13 +141,13 @@ config.redis = {
140
141
  ```javascript
141
142
  config.redis = {
142
143
  client: {
143
- port: 6379, // Redis port
144
- host: '127.0.0.1', // Redis host
144
+ port: 6379, // Redis port
145
+ host: '127.0.0.1', // Redis host
145
146
  password: 'auth',
146
147
  db: 0,
147
148
  weakDependent: true, // the redis instance won't block app start
148
149
  },
149
- }
150
+ };
150
151
  ```
151
152
 
152
153
  ## Usage
@@ -233,6 +234,26 @@ module.exports = app => {
233
234
  };
234
235
  ```
235
236
 
237
+ ## For the local dev
238
+
239
+ Run docker compose to start test redis service
240
+
241
+ ```bash
242
+ docker compose -f docker-compose.yml up -d
243
+ ```
244
+
245
+ Run the unit tests
246
+
247
+ ```bash
248
+ npm test
249
+ ```
250
+
251
+ Stop test redis service
252
+
253
+ ```bash
254
+ docker compose -f docker-compose.yml down
255
+ ```
256
+
236
257
  ## Questions & Suggestions
237
258
 
238
259
  Please open an issue [here](https://github.com/eggjs/egg/issues).
@@ -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;
@@ -30,19 +30,19 @@ function createClient(options, app) {
30
30
  let client;
31
31
  if ('cluster' in options && options.cluster === true) {
32
32
  const config = options;
33
- (0, node_assert_1.default)(config.nodes && config.nodes.length !== 0, '[@eggjs/redis] cluster nodes configuration is required when use cluster redis');
34
- config.nodes.forEach(client => {
33
+ (0, node_assert_1.default)(config.nodes && config.nodes.length > 0, '[@eggjs/redis] cluster nodes configuration is required when use cluster redis');
34
+ for (const client of config.nodes) {
35
35
  (0, node_assert_1.default)(client.host && client.port, `[@eggjs/redis] 'host: ${client.host}', 'port: ${client.port}' are required on config`);
36
- });
36
+ }
37
37
  app.coreLogger.info('[@eggjs/redis] cluster connecting');
38
38
  client = new RedisClass.Cluster(config.nodes, config);
39
39
  }
40
40
  else if ('sentinels' in options && options.sentinels) {
41
41
  const config = options;
42
- (0, node_assert_1.default)(config.sentinels && config.sentinels.length !== 0, '[@eggjs/redis] sentinels configuration is required when use redis sentinel');
43
- config.sentinels.forEach(sentinel => {
42
+ (0, node_assert_1.default)(config.sentinels && config.sentinels.length > 0, '[@eggjs/redis] sentinels configuration is required when use redis sentinel');
43
+ for (const sentinel of config.sentinels) {
44
44
  (0, node_assert_1.default)(sentinel.host && sentinel.port, `[@eggjs/redis] 'host: ${sentinel.host}', 'port: ${sentinel.port}' are required on config`);
45
- });
45
+ }
46
46
  const mask = config.password ? '***' : config.password;
47
47
  (0, node_assert_1.default)(config.name && config.password !== undefined && config.db !== undefined, `[@eggjs/redis] 'name of master: ${config.name}', 'password: ${mask}', 'db: ${config.db}' are required on config`);
48
48
  app.coreLogger.info('[@eggjs/redis] sentinel connecting start');
@@ -51,7 +51,11 @@ function createClient(options, app) {
51
51
  else {
52
52
  const config = options;
53
53
  const mask = config.password ? '***' : config.password;
54
- (0, node_assert_1.default)((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`);
54
+ (0, node_assert_1.default)((config.host &&
55
+ config.port &&
56
+ config.password !== undefined &&
57
+ config.db !== undefined) ||
58
+ config.path, `[@eggjs/redis] 'host: ${config.host}', 'port: ${config.port}', 'password: ${mask}', 'db: ${config.db}' or 'path:${config.path}' are required on config`);
55
59
  if (config.host) {
56
60
  app.coreLogger.info('[@eggjs/redis] server connecting redis://:***@%s:%s/%s', config.host, config.port, config.db);
57
61
  }
@@ -76,12 +80,9 @@ function createClient(options, app) {
76
80
  });
77
81
  return;
78
82
  }
79
- await Promise.race([
80
- (0, node_events_1.once)(client, 'ready'),
81
- (0, node_events_1.once)(client, 'error'),
82
- ]);
83
+ await Promise.race([(0, node_events_1.once)(client, 'ready'), (0, node_events_1.once)(client, 'error')]);
83
84
  app.coreLogger.info(`[@eggjs/redis] instance[${index}] status OK, client ready`);
84
85
  }, `[@eggjs/redis] instance[${index}] start check`);
85
86
  return client;
86
87
  }
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlZGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhEQUFpQztBQUNqQyw2Q0FBbUM7QUFDbkMscUNBQWdDO0FBSWhDLE1BQWEsU0FBUztJQUNTO0lBQTdCLFlBQTZCLEdBQVk7UUFBWixRQUFHLEdBQUgsR0FBRyxDQUFTO1FBQ3ZDLFFBQVE7SUFDVixDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkQsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUQsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7Q0FDRjtBQVpELDhCQVlDO0FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsU0FBUyxZQUFZLENBQUMsT0FBaUQsRUFBRSxHQUFZO0lBQ25GLE1BQU0sVUFBVSxHQUFpQixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksZUFBSyxDQUFDO0lBQ2pFLElBQUksTUFBTSxDQUFDO0lBRVgsSUFBSSxTQUFTLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsT0FBOEIsQ0FBQztRQUM5QyxJQUFBLHFCQUFNLEVBQUMsTUFB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
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlZGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhEQUFpQztBQUNqQyw2Q0FBbUM7QUFFbkMscUNBQWdDO0FBT2hDLE1BQWEsU0FBUztJQUNTO0lBQTdCLFlBQTZCLEdBQVk7UUFBWixRQUFHLEdBQUgsR0FBRyxDQUFTO1FBQ3ZDLFFBQVE7SUFDVixDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3JCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkQsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUQsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7Q0FDRjtBQVpELDhCQVlDO0FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsU0FBUyxZQUFZLENBQ25CLE9BQWlELEVBQ2pELEdBQVk7SUFFWixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksZUFBSyxDQUFDO0lBQ25ELElBQUksTUFBTSxDQUFDO0lBRVgsSUFBSSxTQUFTLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDckQsTUFBTSxNQUFNLEdBQUcsT0FBOEIsQ0FBQztRQUM5QyxJQUFBLHFCQUFNLEVBQ0osTUFB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
@@ -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;
@@ -23,19 +23,19 @@ function createClient(options, app) {
23
23
  let client;
24
24
  if ('cluster' in options && options.cluster === true) {
25
25
  const config = options;
26
- assert(config.nodes && config.nodes.length !== 0, '[@eggjs/redis] cluster nodes configuration is required when use cluster redis');
27
- config.nodes.forEach(client => {
26
+ assert(config.nodes && config.nodes.length > 0, '[@eggjs/redis] cluster nodes configuration is required when use cluster redis');
27
+ for (const client of config.nodes) {
28
28
  assert(client.host && client.port, `[@eggjs/redis] 'host: ${client.host}', 'port: ${client.port}' are required on config`);
29
- });
29
+ }
30
30
  app.coreLogger.info('[@eggjs/redis] cluster connecting');
31
31
  client = new RedisClass.Cluster(config.nodes, config);
32
32
  }
33
33
  else if ('sentinels' in options && options.sentinels) {
34
34
  const config = options;
35
- assert(config.sentinels && config.sentinels.length !== 0, '[@eggjs/redis] sentinels configuration is required when use redis sentinel');
36
- config.sentinels.forEach(sentinel => {
35
+ assert(config.sentinels && config.sentinels.length > 0, '[@eggjs/redis] sentinels configuration is required when use redis sentinel');
36
+ for (const sentinel of config.sentinels) {
37
37
  assert(sentinel.host && sentinel.port, `[@eggjs/redis] 'host: ${sentinel.host}', 'port: ${sentinel.port}' are required on config`);
38
- });
38
+ }
39
39
  const mask = config.password ? '***' : config.password;
40
40
  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`);
41
41
  app.coreLogger.info('[@eggjs/redis] sentinel connecting start');
@@ -44,7 +44,11 @@ function createClient(options, app) {
44
44
  else {
45
45
  const config = options;
46
46
  const mask = config.password ? '***' : config.password;
47
- 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
+ assert((config.host &&
48
+ config.port &&
49
+ config.password !== undefined &&
50
+ config.db !== undefined) ||
51
+ config.path, `[@eggjs/redis] 'host: ${config.host}', 'port: ${config.port}', 'password: ${mask}', 'db: ${config.db}' or 'path:${config.path}' are required on config`);
48
52
  if (config.host) {
49
53
  app.coreLogger.info('[@eggjs/redis] server connecting redis://:***@%s:%s/%s', config.host, config.port, config.db);
50
54
  }
@@ -69,12 +73,9 @@ function createClient(options, app) {
69
73
  });
70
74
  return;
71
75
  }
72
- await Promise.race([
73
- once(client, 'ready'),
74
- once(client, 'error'),
75
- ]);
76
+ await Promise.race([once(client, 'ready'), once(client, 'error')]);
76
77
  app.coreLogger.info(`[@eggjs/redis] instance[${index}] status OK, client ready`);
77
78
  }, `[@eggjs/redis] instance[${index}] start check`);
78
79
  return client;
79
80
  }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlZGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFJaEMsTUFBTSxPQUFPLFNBQVM7SUFDUztJQUE3QixZQUE2QixHQUFZO1FBQVosUUFBRyxHQUFILEdBQUcsQ0FBUztRQUN2QyxRQUFRO0lBQ1YsQ0FBQztJQUNELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNyQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssYUFBYSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFELEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxTQUFTLFlBQVksQ0FBQyxPQUFpRCxFQUFFLEdBQVk7SUFDbkYsTUFBTSxVQUFVLEdBQWlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7SUFDakUsSUFBSSxNQUFNLENBQUM7SUFFWCxJQUFJLFNBQVMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUs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
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlZGlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFPaEMsTUFBTSxPQUFPLFNBQVM7SUFDUztJQUE3QixZQUE2QixHQUFZO1FBQVosUUFBRyxHQUFILEdBQUcsQ0FBUztRQUN2QyxRQUFRO0lBQ1YsQ0FBQztJQUNELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNyQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssYUFBYSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZELEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFELEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxTQUFTLFlBQVksQ0FDbkIsT0FBaUQsRUFDakQsR0FBWTtJQUVaLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUM7SUFDbkQsSUFBSSxNQUFNLENBQUM7SUFFWCxJQUFJLFNBQVMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FBRyxPQUE4QixDQUFDO1FBQzlDLE1BQU0sQ0FDSixNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDdkMsK0VBQStFLENBQ2hGLENBQUM7UUFFRixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQ0osTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxFQUMxQix5QkFBeUIsTUFBTSxDQUFDLElBQUksYUFBYSxNQUFNLENBQUMsSUFBSSwwQkFBMEIsQ0FDdkYsQ0FBQztRQUNKLENBQUM7UUFDRCxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO1NBQU0sSUFBSSxXQUFXLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxPQUE2QixDQUFDO1FBQzdDLE1BQU0sQ0FDSixNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDL0MsNEVBQTRFLENBQzdFLENBQUM7UUFFRixLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQ0osUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxFQUM5Qix5QkFBeUIsUUFBUSxDQUFDLElBQUksYUFBYSxRQUFRLENBQUMsSUFBSSwwQkFBMEIsQ0FDM0YsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDdkQsTUFBTSxDQUNKLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQ3ZFLG1DQUFtQyxNQUFNLENBQUMsSUFBSSxpQkFBaUIsSUFBSSxXQUFXLE1BQU0sQ0FBQyxFQUFFLDBCQUEwQixDQUNsSCxDQUFDO1FBRUYsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUNoRSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLE1BQU0sR0FBRyxPQUE2QixDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN2RCxNQUFNLENBQ0osQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUNWLE1BQU0sQ0FBQyxJQUFJO1lBQ1gsTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTO1lBQzdCLE1BQU0sQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLEVBQ2IseUJBQXlCLE1BQU0sQ0FBQyxJQUFJLGFBQWEsTUFBTSxDQUFDLElBQUksaUJBQWlCLElBQUksV0FBVyxNQUFNLENBQUMsRUFBRSxjQUFjLE1BQU0sQ0FBQyxJQUFJLDBCQUEwQixDQUN6SixDQUFDO1FBQ0YsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2pCLHdEQUF3RCxFQUN4RCxNQUFNLENBQUMsSUFBSSxFQUNYLE1BQU0sQ0FBQyxJQUFJLEVBQ1gsTUFBTSxDQUFDLEVBQUUsQ0FDVixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDakIscUNBQXFDLEVBQ3JDLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUN0QixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQ3hCLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRTtRQUN2QixHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3RCxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVILE1BQU0sS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQ3RCLEdBQUcsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDM0MsSUFBSSxlQUFlLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4RCxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDakIsMkJBQTJCLEtBQUssK0NBQStDLENBQ2hGLENBQUM7WUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ3hCLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLDJCQUEyQixLQUFLLGFBQWEsQ0FBQyxDQUFDO1lBQ3JFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUNqQiwyQkFBMkIsS0FBSywyQkFBMkIsQ0FDNUQsQ0FBQztJQUNKLENBQUMsRUFBRSwyQkFBMkIsS0FBSyxlQUFlLENBQUMsQ0FBQztJQUVwRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIn0=
package/dist/package.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "@eggjs/redis",
3
- "version": "3.0.0"
3
+ "version": "3.1.0"
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/redis",
3
- "version": "3.0.0",
3
+ "version": "3.1.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -35,19 +35,21 @@
35
35
  "node": ">= 18.19.0"
36
36
  },
37
37
  "dependencies": {
38
- "@eggjs/core": "^6.3.0",
38
+ "@eggjs/core": "^6.4.1",
39
39
  "ioredis": "^5.4.2"
40
40
  },
41
41
  "devDependencies": {
42
- "@arethetypeswrong/cli": "^0.17.1",
42
+ "@arethetypeswrong/cli": "^0.17.4",
43
43
  "@eggjs/bin": "7",
44
44
  "@eggjs/mock": "^6.0.5",
45
45
  "@eggjs/tsconfig": "1",
46
46
  "@types/mocha": "10",
47
47
  "@types/node": "22",
48
- "egg": "^4.0.3",
49
- "eslint": "8",
50
- "eslint-config-egg": "14",
48
+ "egg": "4",
49
+ "husky": "^9.1.7",
50
+ "lint-staged": "^15.5.0",
51
+ "oxlint": "^0.16.2",
52
+ "prettier": "^3.5.3",
51
53
  "rimraf": "6",
52
54
  "snap-shot-it": "^7.9.10",
53
55
  "tshy": "3",
@@ -55,14 +57,22 @@
55
57
  "typescript": "5"
56
58
  },
57
59
  "scripts": {
58
- "lint": "eslint --cache src test --ext .ts",
60
+ "lint": "oxlint",
59
61
  "pretest": "npm run clean && npm run lint -- --fix",
60
62
  "test": "egg-bin test",
61
63
  "preci": "npm run clean && npm run lint",
62
64
  "ci": "egg-bin cov",
63
65
  "postci": "npm run prepublishOnly && npm run clean",
64
66
  "clean": "rimraf dist",
65
- "prepublishOnly": "tshy && tshy-after && attw --pack"
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
+ ]
66
76
  },
67
77
  "type": "module",
68
78
  "tshy": {
@@ -1,4 +1,4 @@
1
- import type { RedisOptions, ClusterOptions } from 'ioredis';
1
+ import type { RedisOptions, ClusterOptions, Redis } from 'ioredis';
2
2
 
3
3
  export interface RedisClientOptions extends RedisOptions {
4
4
  /**
@@ -54,7 +54,7 @@ export interface RedisConfig {
54
54
  *
55
55
  * Default to `undefined`, which means using the built-in ioredis
56
56
  */
57
- Redis?: any;
57
+ Redis?: typeof Redis;
58
58
  }
59
59
 
60
60
  export default {
package/src/lib/redis.ts CHANGED
@@ -1,8 +1,12 @@
1
1
  import assert from 'node:assert';
2
2
  import { once } from 'node:events';
3
+
3
4
  import { Redis } from 'ioredis';
4
5
  import type { ILifecycleBoot, EggCore } from '@eggjs/core';
5
- import type { RedisClusterOptions, RedisClientOptions } from '../config/config.default.js';
6
+ import type {
7
+ RedisClusterOptions,
8
+ RedisClientOptions,
9
+ } from '../config/config.default.js';
6
10
 
7
11
  export class RedisBoot implements ILifecycleBoot {
8
12
  constructor(private readonly app: EggCore) {
@@ -19,48 +23,76 @@ export class RedisBoot implements ILifecycleBoot {
19
23
  }
20
24
 
21
25
  let count = 0;
22
- function createClient(options: RedisClusterOptions | RedisClientOptions, app: EggCore) {
23
- const RedisClass: typeof Redis = app.config.redis.Redis ?? Redis;
26
+ function createClient(
27
+ options: RedisClusterOptions | RedisClientOptions,
28
+ app: EggCore
29
+ ) {
30
+ const RedisClass = app.config.redis.Redis ?? Redis;
24
31
  let client;
25
32
 
26
33
  if ('cluster' in options && options.cluster === true) {
27
34
  const config = options as RedisClusterOptions;
28
- assert(config.nodes && config.nodes.length !== 0, '[@eggjs/redis] cluster nodes configuration is required when use cluster redis');
35
+ assert(
36
+ config.nodes && config.nodes.length > 0,
37
+ '[@eggjs/redis] cluster nodes configuration is required when use cluster redis'
38
+ );
29
39
 
30
- config.nodes.forEach(client => {
31
- assert(client.host && client.port, `[@eggjs/redis] 'host: ${client.host}', 'port: ${client.port}' are required on config`);
32
- });
40
+ for (const client of config.nodes) {
41
+ assert(
42
+ client.host && client.port,
43
+ `[@eggjs/redis] 'host: ${client.host}', 'port: ${client.port}' are required on config`
44
+ );
45
+ }
33
46
  app.coreLogger.info('[@eggjs/redis] cluster connecting');
34
- client = new RedisClass.Cluster(config.nodes, config as any);
47
+ client = new RedisClass.Cluster(config.nodes, config);
35
48
  } else if ('sentinels' in options && options.sentinels) {
36
49
  const config = options as RedisClientOptions;
37
- assert(config.sentinels && config.sentinels.length !== 0, '[@eggjs/redis] sentinels configuration is required when use redis sentinel');
50
+ assert(
51
+ config.sentinels && config.sentinels.length > 0,
52
+ '[@eggjs/redis] sentinels configuration is required when use redis sentinel'
53
+ );
38
54
 
39
- config.sentinels.forEach(sentinel => {
40
- assert(sentinel.host && sentinel.port,
41
- `[@eggjs/redis] 'host: ${sentinel.host}', 'port: ${sentinel.port}' are required on config`);
42
- });
55
+ for (const sentinel of config.sentinels) {
56
+ assert(
57
+ sentinel.host && sentinel.port,
58
+ `[@eggjs/redis] 'host: ${sentinel.host}', 'port: ${sentinel.port}' are required on config`
59
+ );
60
+ }
43
61
 
44
62
  const mask = config.password ? '***' : config.password;
45
- assert(config.name && config.password !== undefined && config.db !== undefined,
46
- `[@eggjs/redis] 'name of master: ${config.name}', 'password: ${mask}', 'db: ${config.db}' are required on config`);
63
+ assert(
64
+ config.name && config.password !== undefined && config.db !== undefined,
65
+ `[@eggjs/redis] 'name of master: ${config.name}', 'password: ${mask}', 'db: ${config.db}' are required on config`
66
+ );
47
67
 
48
68
  app.coreLogger.info('[@eggjs/redis] sentinel connecting start');
49
- client = new RedisClass(config as any);
69
+ client = new RedisClass(config);
50
70
  } else {
51
71
  const config = options as RedisClientOptions;
52
72
  const mask = config.password ? '***' : config.password;
53
- assert((config.host && config.port && config.password !== undefined && config.db !== undefined) || config.path,
54
- `[@eggjs/redis] 'host: ${config.host}', 'port: ${config.port}', 'password: ${mask}', 'db: ${config.db}' or 'path:${config.path}' are required on config`);
73
+ assert(
74
+ (config.host &&
75
+ config.port &&
76
+ config.password !== undefined &&
77
+ config.db !== undefined) ||
78
+ config.path,
79
+ `[@eggjs/redis] 'host: ${config.host}', 'port: ${config.port}', 'password: ${mask}', 'db: ${config.db}' or 'path:${config.path}' are required on config`
80
+ );
55
81
  if (config.host) {
56
- app.coreLogger.info('[@eggjs/redis] server connecting redis://:***@%s:%s/%s',
57
- config.host, config.port, config.db);
82
+ app.coreLogger.info(
83
+ '[@eggjs/redis] server connecting redis://:***@%s:%s/%s',
84
+ config.host,
85
+ config.port,
86
+ config.db
87
+ );
58
88
  } else {
59
- app.coreLogger.info('[@eggjs/redis] server connecting %s',
60
- config.path || config);
89
+ app.coreLogger.info(
90
+ '[@eggjs/redis] server connecting %s',
91
+ config.path || config
92
+ );
61
93
  }
62
94
 
63
- client = new RedisClass(config as any);
95
+ client = new RedisClass(config);
64
96
  }
65
97
 
66
98
  client.on('connect', () => {
@@ -74,18 +106,19 @@ function createClient(options: RedisClusterOptions | RedisClientOptions, app: Eg
74
106
  const index = count++;
75
107
  app.lifecycle.registerBeforeStart(async () => {
76
108
  if ('weakDependent' in options && options.weakDependent) {
77
- app.coreLogger.info(`[@eggjs/redis] instance[${index}] is weak dependent and won't block app start`);
109
+ app.coreLogger.info(
110
+ `[@eggjs/redis] instance[${index}] is weak dependent and won't block app start`
111
+ );
78
112
  client.once('ready', () => {
79
113
  app.coreLogger.info(`[@eggjs/redis] instance[${index}] status OK`);
80
114
  });
81
115
  return;
82
116
  }
83
117
 
84
- await Promise.race([
85
- once(client, 'ready'),
86
- once(client, 'error'),
87
- ]);
88
- app.coreLogger.info(`[@eggjs/redis] instance[${index}] status OK, client ready`);
118
+ await Promise.race([once(client, 'ready'), once(client, 'error')]);
119
+ app.coreLogger.info(
120
+ `[@eggjs/redis] instance[${index}] status OK, client ready`
121
+ );
89
122
  }, `[@eggjs/redis] instance[${index}] start check`);
90
123
 
91
124
  return client;