ioredis-streams 0.0.8 → 1.0.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/dist/index.d.ts +28 -5
- package/dist/index.js +73 -6
- package/dist/index.js.map +1 -1
- package/package.json +2 -3
- package/src/index.ts +90 -26
package/dist/index.d.ts
CHANGED
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
import loggerFactory from '@log4js-node/log4js-api';
|
|
2
|
-
import Redis from 'ioredis';
|
|
2
|
+
import Redis, { Cluster } from 'ioredis';
|
|
3
3
|
export declare const getExistingRedisClient: (config?: {
|
|
4
4
|
host: string;
|
|
5
5
|
port: number;
|
|
6
|
-
}
|
|
6
|
+
}[] | {
|
|
7
|
+
host: string;
|
|
8
|
+
port: number;
|
|
9
|
+
}) => Redis | Cluster;
|
|
7
10
|
export declare const getNewRedisClient: (config?: {
|
|
8
11
|
host: string;
|
|
9
12
|
port: number;
|
|
10
|
-
}
|
|
13
|
+
}[] | {
|
|
14
|
+
host: string;
|
|
15
|
+
port: number;
|
|
16
|
+
}) => Redis | Cluster;
|
|
11
17
|
export interface IEvent<T> {
|
|
12
18
|
time: number;
|
|
13
19
|
name: string;
|
|
14
20
|
v: string;
|
|
15
21
|
data: T;
|
|
16
22
|
}
|
|
23
|
+
export interface IWaitEvent<T> extends IEvent<T> {
|
|
24
|
+
wait: {
|
|
25
|
+
source: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
17
28
|
export declare class RedisStreams {
|
|
18
29
|
protected peerName: string;
|
|
19
30
|
protected groups: Map<string, Map<string, StreamGroupConsumer>>;
|
|
@@ -72,11 +83,14 @@ export declare type ConsumerGroup = {
|
|
|
72
83
|
declare type NamedEvent<T, N extends string> = IEvent<T> & {
|
|
73
84
|
name: N;
|
|
74
85
|
};
|
|
86
|
+
declare type NamedWaitEvent<T, N extends string> = IWaitEvent<T> & {
|
|
87
|
+
name: N;
|
|
88
|
+
};
|
|
75
89
|
declare type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
|
|
76
90
|
declare type DataOfHandler<T> = T extends (...args: any[]) => IEvent<infer R> ? R : any;
|
|
77
91
|
declare type ArgsOf<T> = T extends (...args: infer Args) => any ? Args : never;
|
|
78
92
|
declare type AllowedFactories<T> = {
|
|
79
|
-
[name in (keyof T
|
|
93
|
+
[name in (keyof T)]: (...args: any[]) => IEvent<DataOfHandler<T[name]>>;
|
|
80
94
|
};
|
|
81
95
|
export declare type NamedEventHandler<E = IEvent<any>> = (id: string, event: E) => Promise<void>;
|
|
82
96
|
export declare type ConsumeFunctions = {
|
|
@@ -92,9 +106,18 @@ declare type WithTypedHandlers<T> = PromisifiedFunctionsMap<T> & {
|
|
|
92
106
|
handle: HandleFunction<T>;
|
|
93
107
|
} & Omit<StreamGroupConsumer, 'handle'>;
|
|
94
108
|
declare type PromisifiedFunctionsMap<T> = {
|
|
95
|
-
[func in keyof T]: (...args: ArgsOf<T[func]>) =>
|
|
109
|
+
[func in keyof T]: (...args: ArgsOf<T[func]>) => ReturnType<T[func]> extends {
|
|
110
|
+
wait: {
|
|
111
|
+
source: string;
|
|
112
|
+
};
|
|
113
|
+
} ? {
|
|
114
|
+
wait: (timeout: number) => Promise<void>;
|
|
115
|
+
} : Promise<void>;
|
|
96
116
|
};
|
|
97
117
|
export declare const event: <N extends string>(name: N, v?: string) => {
|
|
98
118
|
of: <T>() => { [K in N]: (data: T, time?: number | undefined) => NamedEvent<T, N>; };
|
|
99
119
|
};
|
|
120
|
+
export declare const eventWithReply: <N extends string>(name: N, source: string, v?: string) => {
|
|
121
|
+
of: <T>() => { [K in N]: (data: T, time?: number | undefined) => NamedWaitEvent<T, N>; };
|
|
122
|
+
};
|
|
100
123
|
export {};
|
package/dist/index.js
CHANGED
|
@@ -3,11 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.event = exports.RedisStreams = exports.getNewRedisClient = exports.getExistingRedisClient = void 0;
|
|
6
|
+
exports.eventWithReply = exports.event = exports.RedisStreams = exports.getNewRedisClient = exports.getExistingRedisClient = void 0;
|
|
7
7
|
const log4js_api_1 = __importDefault(require("@log4js-node/log4js-api"));
|
|
8
8
|
const ioredis_1 = __importDefault(require("ioredis"));
|
|
9
9
|
const redisHost = process.env.REDIS_HOST;
|
|
10
10
|
const redisPort = parseInt(process.env.REDIS_PORT || '0');
|
|
11
|
+
const redisCluster = process.env.REDIS_CLUSTER || undefined;
|
|
11
12
|
const getDefaultRedisConfigs = () => {
|
|
12
13
|
if (!redisHost || redisHost === '') {
|
|
13
14
|
throw new Error('No redis connection provided (REDIS_HOST) ...');
|
|
@@ -15,6 +16,12 @@ const getDefaultRedisConfigs = () => {
|
|
|
15
16
|
if (!redisPort || redisPort === 0) {
|
|
16
17
|
throw new Error('No redis connection provided (REDIS_PORT) ...');
|
|
17
18
|
}
|
|
19
|
+
if (redisCluster) {
|
|
20
|
+
return redisCluster
|
|
21
|
+
.split(',')
|
|
22
|
+
.map(x => x.split(':'))
|
|
23
|
+
.map(([host, port]) => ({ host, port: parseInt(port) }));
|
|
24
|
+
}
|
|
18
25
|
return {
|
|
19
26
|
host: process.env.REDIS_HOST || '',
|
|
20
27
|
port: parseInt(process.env.REDIS_PORT || '0')
|
|
@@ -23,13 +30,20 @@ const getDefaultRedisConfigs = () => {
|
|
|
23
30
|
let _redisClient;
|
|
24
31
|
const getExistingRedisClient = (config = getDefaultRedisConfigs()) => {
|
|
25
32
|
if (!_redisClient) {
|
|
26
|
-
|
|
33
|
+
if (config instanceof Array) {
|
|
34
|
+
_redisClient = new ioredis_1.default.Cluster(config);
|
|
35
|
+
}
|
|
27
36
|
}
|
|
28
37
|
return _redisClient;
|
|
29
38
|
};
|
|
30
39
|
exports.getExistingRedisClient = getExistingRedisClient;
|
|
31
40
|
const getNewRedisClient = (config = getDefaultRedisConfigs()) => {
|
|
32
|
-
|
|
41
|
+
if (config instanceof Array) {
|
|
42
|
+
return new ioredis_1.default.Cluster(config);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
return new ioredis_1.default(config);
|
|
46
|
+
}
|
|
33
47
|
};
|
|
34
48
|
exports.getNewRedisClient = getNewRedisClient;
|
|
35
49
|
class RedisStreams {
|
|
@@ -136,7 +150,44 @@ class RedisStreams {
|
|
|
136
150
|
};
|
|
137
151
|
};
|
|
138
152
|
const produce = async (...events) => {
|
|
139
|
-
|
|
153
|
+
if (events.length === 1 && events[0]['wait']) {
|
|
154
|
+
const pipeline = this.doProduce(this.getProducerRedis().pipeline(), streamName, readyConfigs.maxLen, ...events);
|
|
155
|
+
return {
|
|
156
|
+
wait: async (timeout) => {
|
|
157
|
+
const redis = this.getConsumerRedis();
|
|
158
|
+
const channel = events[0].name + '_' + events[0].time;
|
|
159
|
+
let id;
|
|
160
|
+
const cleanup = () => {
|
|
161
|
+
redis.unsubscribe(channel);
|
|
162
|
+
redis.disconnect();
|
|
163
|
+
if (id)
|
|
164
|
+
clearTimeout(id);
|
|
165
|
+
};
|
|
166
|
+
try {
|
|
167
|
+
await new Promise(async (resolve, reject) => {
|
|
168
|
+
id = setTimeout(() => reject(new Error('Timeout')), timeout);
|
|
169
|
+
await redis.subscribe(channel);
|
|
170
|
+
redis.on('message', (data) => {
|
|
171
|
+
try {
|
|
172
|
+
const eventObj = JSON.parse(data);
|
|
173
|
+
if (eventObj && eventObj.source === events?.[0]?.['wait']?.['source'])
|
|
174
|
+
resolve(eventObj);
|
|
175
|
+
}
|
|
176
|
+
catch (err) { }
|
|
177
|
+
});
|
|
178
|
+
await pipeline.exec();
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
cleanup();
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
await this.doProduce(this.getProducerRedis().pipeline(), streamName, readyConfigs.maxLen, ...events).exec();
|
|
189
|
+
}
|
|
190
|
+
return;
|
|
140
191
|
};
|
|
141
192
|
const newStream = {
|
|
142
193
|
consume,
|
|
@@ -227,6 +278,9 @@ class StreamConsumer {
|
|
|
227
278
|
}
|
|
228
279
|
catch (err) {
|
|
229
280
|
this.logger.error('Error while tryReading', err);
|
|
281
|
+
if (err && typeof err.message === 'string' && err.message.includes('NOGROUP')) {
|
|
282
|
+
await this.init();
|
|
283
|
+
}
|
|
230
284
|
}
|
|
231
285
|
}
|
|
232
286
|
}
|
|
@@ -258,7 +312,7 @@ class StreamConsumer {
|
|
|
258
312
|
return true;
|
|
259
313
|
}
|
|
260
314
|
async doRead() {
|
|
261
|
-
const streamsEntries = await this.redis.xreadgroup('GROUP', this.config.groupName, this.config.peerName, 'BLOCK', this.config.readBlockTime, '
|
|
315
|
+
const streamsEntries = await this.redis.xreadgroup('GROUP', this.config.groupName, this.config.peerName, 'COUNT', 5, 'BLOCK', this.config.readBlockTime, 'STREAMS', this.config.streamName, this.checkBacklog ? this.lastReadId : '>');
|
|
262
316
|
if (!streamsEntries || streamsEntries.length === 0) {
|
|
263
317
|
this.checkBacklog = false;
|
|
264
318
|
return false;
|
|
@@ -357,7 +411,8 @@ class ConsumerBuffer {
|
|
|
357
411
|
}
|
|
358
412
|
const augmentEvents = (events, stream) => {
|
|
359
413
|
return Object.keys(events).reduce((p, c) => {
|
|
360
|
-
|
|
414
|
+
const factory = events[c];
|
|
415
|
+
p[c] = async (...args) => stream.produce(factory(...args));
|
|
361
416
|
return p;
|
|
362
417
|
}, { ...events, ...stream });
|
|
363
418
|
};
|
|
@@ -371,4 +426,16 @@ const event = (name, v = '1.0.0') => {
|
|
|
371
426
|
};
|
|
372
427
|
};
|
|
373
428
|
exports.event = event;
|
|
429
|
+
const eventWithReply = (name, source, v = '1.0.0') => {
|
|
430
|
+
return {
|
|
431
|
+
of: () => {
|
|
432
|
+
return {
|
|
433
|
+
[name]: (data, time = Date.now()) => ({
|
|
434
|
+
name, v, data, time, wait: { source }
|
|
435
|
+
})
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
};
|
|
439
|
+
};
|
|
440
|
+
exports.eventWithReply = eventWithReply;
|
|
374
441
|
//# 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":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ioredis-streams",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"author": "Zaid Al-Omari",
|
|
@@ -21,11 +21,10 @@
|
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@log4js-node/log4js-api": "^1.0.2",
|
|
24
|
-
"ioredis": "^
|
|
24
|
+
"ioredis": "^5.3.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/chai": "^4.2.3",
|
|
28
|
-
"@types/ioredis": "^4.28.5",
|
|
29
28
|
"@types/mocha": "^5.2.7",
|
|
30
29
|
"@types/node": "^10.12.2",
|
|
31
30
|
"@types/sinon": "^7.5.0",
|
package/src/index.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import loggerFactory from '@log4js-node/log4js-api';
|
|
2
|
-
import Redis from 'ioredis';
|
|
2
|
+
import Redis, { ChainableCommander, Cluster, Pipeline } from 'ioredis';
|
|
3
3
|
|
|
4
4
|
const redisHost = process.env.REDIS_HOST;
|
|
5
5
|
const redisPort = parseInt(process.env.REDIS_PORT || '0');
|
|
6
|
+
const redisCluster = process.env.REDIS_CLUSTER || undefined;
|
|
7
|
+
|
|
6
8
|
const getDefaultRedisConfigs = () => {
|
|
7
9
|
if (!redisHost || redisHost === '') {
|
|
8
10
|
throw new Error('No redis connection provided (REDIS_HOST) ...')
|
|
@@ -10,28 +12,34 @@ const getDefaultRedisConfigs = () => {
|
|
|
10
12
|
if (!redisPort || redisPort === 0) {
|
|
11
13
|
throw new Error('No redis connection provided (REDIS_PORT) ...')
|
|
12
14
|
}
|
|
15
|
+
if (redisCluster) {
|
|
16
|
+
return redisCluster
|
|
17
|
+
.split(',')
|
|
18
|
+
.map(x => x.split(':'))
|
|
19
|
+
.map(([host, port]) => ({ host, port: parseInt(port) }))
|
|
20
|
+
}
|
|
13
21
|
return {
|
|
14
22
|
host: process.env.REDIS_HOST || '',
|
|
15
23
|
port: parseInt(process.env.REDIS_PORT || '0')
|
|
16
24
|
}
|
|
17
25
|
}
|
|
18
26
|
|
|
19
|
-
let _redisClient: Redis
|
|
20
|
-
export const getExistingRedisClient = (config
|
|
21
|
-
host: string,
|
|
22
|
-
port: number
|
|
23
|
-
} = getDefaultRedisConfigs()) => {
|
|
27
|
+
let _redisClient: Redis | Cluster;
|
|
28
|
+
export const getExistingRedisClient = (config = getDefaultRedisConfigs()) => {
|
|
24
29
|
if (!_redisClient) {
|
|
25
|
-
|
|
30
|
+
if (config instanceof Array) {
|
|
31
|
+
_redisClient = new Redis.Cluster(config);
|
|
32
|
+
}
|
|
26
33
|
}
|
|
27
34
|
return _redisClient;
|
|
28
35
|
};
|
|
29
36
|
|
|
30
|
-
export const getNewRedisClient = (config
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
37
|
+
export const getNewRedisClient = (config = getDefaultRedisConfigs()) => {
|
|
38
|
+
if (config instanceof Array) {
|
|
39
|
+
return new Redis.Cluster(config);
|
|
40
|
+
} else {
|
|
41
|
+
return new Redis(config);
|
|
42
|
+
}
|
|
35
43
|
};
|
|
36
44
|
|
|
37
45
|
export interface IEvent<T> {
|
|
@@ -41,6 +49,10 @@ export interface IEvent<T> {
|
|
|
41
49
|
data: T;
|
|
42
50
|
}
|
|
43
51
|
|
|
52
|
+
export interface IWaitEvent<T> extends IEvent<T> {
|
|
53
|
+
wait: { source: string };
|
|
54
|
+
}
|
|
55
|
+
|
|
44
56
|
export class RedisStreams {
|
|
45
57
|
|
|
46
58
|
protected groups: Map<string, Map<string, StreamGroupConsumer>> = new Map();
|
|
@@ -148,8 +160,40 @@ export class RedisStreams {
|
|
|
148
160
|
}
|
|
149
161
|
}
|
|
150
162
|
}
|
|
151
|
-
const produce = async <T>(...events: IEvent<T>[]) => {
|
|
152
|
-
|
|
163
|
+
const produce = async <T>(...events: (IEvent<T> | IWaitEvent<T>)[]) => {
|
|
164
|
+
if (events.length === 1 && events[0]['wait']) {
|
|
165
|
+
const pipeline = this.doProduce(this.getProducerRedis().pipeline(), streamName, readyConfigs.maxLen, ...events);
|
|
166
|
+
return {
|
|
167
|
+
wait: async (timeout: number) => {
|
|
168
|
+
const redis = this.getConsumerRedis();
|
|
169
|
+
const channel = events[0].name + '_' + events[0].time;
|
|
170
|
+
let id: NodeJS.Timeout | undefined;
|
|
171
|
+
const cleanup = () => {
|
|
172
|
+
redis.unsubscribe(channel);
|
|
173
|
+
redis.disconnect();
|
|
174
|
+
if (id) clearTimeout(id);
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
await new Promise<any>(async (resolve, reject) => {
|
|
178
|
+
id = setTimeout(() => reject(new Error('Timeout')), timeout);
|
|
179
|
+
await redis.subscribe(channel);
|
|
180
|
+
redis.on('message', (data) => {
|
|
181
|
+
try {
|
|
182
|
+
const eventObj = JSON.parse(data);
|
|
183
|
+
if (eventObj && eventObj.source === events?.[0]?.['wait']?.['source']) resolve(eventObj);
|
|
184
|
+
} catch (err) { }
|
|
185
|
+
});
|
|
186
|
+
await pipeline.exec();
|
|
187
|
+
});
|
|
188
|
+
} finally {
|
|
189
|
+
cleanup();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
} else {
|
|
194
|
+
await this.doProduce(this.getProducerRedis().pipeline(), streamName, readyConfigs.maxLen, ...events).exec();
|
|
195
|
+
}
|
|
196
|
+
return;
|
|
153
197
|
}
|
|
154
198
|
|
|
155
199
|
const newStream = <StreamGroupConsumer>{
|
|
@@ -162,13 +206,13 @@ export class RedisStreams {
|
|
|
162
206
|
return newStream;
|
|
163
207
|
}
|
|
164
208
|
|
|
165
|
-
private _currentPipeline:
|
|
209
|
+
private _currentPipeline: ChainableCommander | undefined;
|
|
166
210
|
private getRedisPipeline() {
|
|
167
211
|
if (!this._currentPipeline) this._currentPipeline = this.getProducerRedis().multi();
|
|
168
212
|
return this._currentPipeline;
|
|
169
213
|
}
|
|
170
214
|
|
|
171
|
-
private doProduce<T>(redis:
|
|
215
|
+
private doProduce<T>(redis: ChainableCommander, stream: string, maxLen?: number, ...events: IEvent<T>[]) {
|
|
172
216
|
if (events.length === 0) return redis;
|
|
173
217
|
for (const one of events) {
|
|
174
218
|
const eventString = JSON.stringify(one);
|
|
@@ -194,7 +238,7 @@ class StreamConsumer {
|
|
|
194
238
|
private buffer: ConsumerBuffer;
|
|
195
239
|
|
|
196
240
|
constructor(
|
|
197
|
-
protected redis: Redis
|
|
241
|
+
protected redis: Redis | Cluster,
|
|
198
242
|
protected processEvent: EventProccessor,
|
|
199
243
|
protected config: ConsumerConfigs) {
|
|
200
244
|
|
|
@@ -247,8 +291,11 @@ class StreamConsumer {
|
|
|
247
291
|
if (claimedAnything && !this.disposing) continue;
|
|
248
292
|
const dataAvaliable = await this.doRead();
|
|
249
293
|
if (dataAvaliable && !this.disposing) continue;
|
|
250
|
-
} catch (err) {
|
|
294
|
+
} catch (err: any) {
|
|
251
295
|
this.logger.error('Error while tryReading', err);
|
|
296
|
+
if (err && typeof err.message === 'string' && err.message.includes('NOGROUP')) {
|
|
297
|
+
await this.init()
|
|
298
|
+
}
|
|
252
299
|
}
|
|
253
300
|
}
|
|
254
301
|
}
|
|
@@ -256,7 +303,7 @@ class StreamConsumer {
|
|
|
256
303
|
lastTimePendingCheck = 0;
|
|
257
304
|
private async doClaim() {
|
|
258
305
|
if (this.lastTimePendingCheck + this.config.claimIdleTime >= Date.now()) return false;
|
|
259
|
-
const result: ([string, string, number, number])[] = await this.redis.xpending(
|
|
306
|
+
const result: ([string, string, number, number])[] = <[string, string, number, number][]>await this.redis.xpending(
|
|
260
307
|
this.config.streamName,
|
|
261
308
|
this.config.groupName,
|
|
262
309
|
'IDLE', this.config.claimIdleTime,
|
|
@@ -266,7 +313,7 @@ class StreamConsumer {
|
|
|
266
313
|
if (!result.length) return false;
|
|
267
314
|
|
|
268
315
|
const toBeClaimedMessages = result.map(([id]) => id);
|
|
269
|
-
const streamsEntries = await this.redis.xclaim(
|
|
316
|
+
const streamsEntries = <[string, string[]][]>await this.redis.xclaim(
|
|
270
317
|
this.config.streamName,
|
|
271
318
|
this.config.groupName,
|
|
272
319
|
this.config.peerName,
|
|
@@ -295,11 +342,11 @@ class StreamConsumer {
|
|
|
295
342
|
}
|
|
296
343
|
|
|
297
344
|
protected async doRead() {
|
|
298
|
-
const streamsEntries = await this.redis.xreadgroup(
|
|
345
|
+
const streamsEntries = <[string, [string, string[]][]][]>await this.redis.xreadgroup(
|
|
299
346
|
'GROUP', this.config.groupName,
|
|
300
347
|
this.config.peerName,
|
|
301
|
-
'BLOCK', this.config.readBlockTime,
|
|
302
348
|
'COUNT', 5,
|
|
349
|
+
'BLOCK', this.config.readBlockTime,
|
|
303
350
|
'STREAMS', this.config.streamName,
|
|
304
351
|
this.checkBacklog ? this.lastReadId : '>'
|
|
305
352
|
);
|
|
@@ -410,9 +457,10 @@ class ConsumerBuffer {
|
|
|
410
457
|
}
|
|
411
458
|
}
|
|
412
459
|
|
|
413
|
-
const augmentEvents = <T>(events: T, stream: StreamGroupConsumer) => {
|
|
460
|
+
const augmentEvents = <T extends AllowedFactories<R>, R>(events: T, stream: StreamGroupConsumer) => {
|
|
414
461
|
return Object.keys(events).reduce((p, c) => {
|
|
415
|
-
|
|
462
|
+
const factory = events[c as keyof T];
|
|
463
|
+
p[c] = async (...args: any[]) => stream.produce(factory(...args))
|
|
416
464
|
return p;
|
|
417
465
|
}, { ...events, ...stream })
|
|
418
466
|
}
|
|
@@ -473,11 +521,12 @@ export type ConsumerGroup = {
|
|
|
473
521
|
}
|
|
474
522
|
|
|
475
523
|
type NamedEvent<T, N extends string> = IEvent<T> & { name: N };
|
|
524
|
+
type NamedWaitEvent<T, N extends string> = IWaitEvent<T> & { name: N };
|
|
476
525
|
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
|
|
477
526
|
type DataOfHandler<T> = T extends (...args: any[]) => IEvent<infer R> ? R : any;
|
|
478
527
|
type ArgsOf<T> = T extends (...args: infer Args) => any ? Args : never;
|
|
479
528
|
|
|
480
|
-
type AllowedFactories<T> = { [name in (keyof T
|
|
529
|
+
type AllowedFactories<T> = { [name in (keyof T)]: (...args: any[]) => IEvent<DataOfHandler<T[name]>> };
|
|
481
530
|
export type NamedEventHandler<E = IEvent<any>> = (id: string, event: E) => Promise<void>;
|
|
482
531
|
|
|
483
532
|
export type ConsumeFunctions = {
|
|
@@ -497,7 +546,7 @@ type WithTypedHandlers<T> = PromisifiedFunctionsMap<T> & {
|
|
|
497
546
|
|
|
498
547
|
|
|
499
548
|
type PromisifiedFunctionsMap<T> = {
|
|
500
|
-
[func in keyof T]: (...args: ArgsOf<T[func]>) => Promise<void>
|
|
549
|
+
[func in keyof T]: (...args: ArgsOf<T[func]>) => ReturnType<T[func]> extends { wait: { source: string } } ? { wait: (timeout: number) => Promise<void> } : Promise<void>
|
|
501
550
|
};
|
|
502
551
|
|
|
503
552
|
export const event = <N extends string>(name: N, v = '1.0.0') => {
|
|
@@ -512,3 +561,18 @@ export const event = <N extends string>(name: N, v = '1.0.0') => {
|
|
|
512
561
|
}
|
|
513
562
|
}
|
|
514
563
|
}
|
|
564
|
+
|
|
565
|
+
export const eventWithReply = <N extends string>(name: N, source: string, v = '1.0.0') => {
|
|
566
|
+
type ReturnType<T, N extends string> = {
|
|
567
|
+
[K in N]: (data: T, time?: number) => NamedWaitEvent<T, N>;
|
|
568
|
+
};
|
|
569
|
+
return {
|
|
570
|
+
of: <T>() => {
|
|
571
|
+
return {
|
|
572
|
+
[name]: (data: T, time = Date.now()) => (<IWaitEvent<T>>{
|
|
573
|
+
name, v, data, time, wait: { source }
|
|
574
|
+
})
|
|
575
|
+
} as ReturnType<T, N>
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
}
|