@@ -9,8 +9,12 @@ import {
9
9
DecorateAcknowledgementsWithTimeoutAndMultipleResponses ,
10
10
AllButLast ,
11
11
Last ,
12
- FirstArg ,
13
- SecondArg ,
12
+ DecorateAcknowledgementsWithMultipleResponses ,
13
+ DecorateAcknowledgements ,
14
+ RemoveAcknowledgements ,
15
+ EventNamesWithAck ,
16
+ FirstNonErrorArg ,
17
+ EventNamesWithoutAck ,
14
18
} from "./typed-events" ;
15
19
import type { Client } from "./client" ;
16
20
import debugModule from "debug" ;
@@ -117,7 +121,7 @@ export class Namespace<
117
121
SocketData = any
118
122
> extends StrictEventEmitter <
119
123
ServerSideEvents ,
120
- EmitEvents ,
124
+ RemoveAcknowledgements < EmitEvents > ,
121
125
NamespaceReservedEventsMap <
122
126
ListenEvents ,
123
127
EmitEvents ,
@@ -252,7 +256,10 @@ export class Namespace<
252
256
* @return a new {@link BroadcastOperator} instance for chaining
253
257
*/
254
258
public to ( room : Room | Room [ ] ) {
255
- return new BroadcastOperator < EmitEvents , SocketData > ( this . adapter ) . to ( room ) ;
259
+ return new BroadcastOperator <
260
+ DecorateAcknowledgementsWithMultipleResponses < EmitEvents > ,
261
+ SocketData
262
+ > ( this . adapter ) . to ( room ) ;
256
263
}
257
264
258
265
/**
@@ -268,7 +275,10 @@ export class Namespace<
268
275
* @return a new {@link BroadcastOperator} instance for chaining
269
276
*/
270
277
public in ( room : Room | Room [ ] ) {
271
- return new BroadcastOperator < EmitEvents , SocketData > ( this . adapter ) . in ( room ) ;
278
+ return new BroadcastOperator <
279
+ DecorateAcknowledgementsWithMultipleResponses < EmitEvents > ,
280
+ SocketData
281
+ > ( this . adapter ) . in ( room ) ;
272
282
}
273
283
274
284
/**
@@ -290,9 +300,10 @@ export class Namespace<
290
300
* @return a new {@link BroadcastOperator} instance for chaining
291
301
*/
292
302
public except ( room : Room | Room [ ] ) {
293
- return new BroadcastOperator < EmitEvents , SocketData > ( this . adapter ) . except (
294
- room
295
- ) ;
303
+ return new BroadcastOperator <
304
+ DecorateAcknowledgementsWithMultipleResponses < EmitEvents > ,
305
+ SocketData
306
+ > ( this . adapter ) . except ( room ) ;
296
307
}
297
308
298
309
/**
@@ -430,7 +441,7 @@ export class Namespace<
430
441
*
431
442
* @return Always true
432
443
*/
433
- public emit < Ev extends EventNames < EmitEvents > > (
444
+ public emit < Ev extends EventNamesWithoutAck < EmitEvents > > (
434
445
ev : Ev ,
435
446
...args : EventParams < EmitEvents , Ev >
436
447
) : boolean {
@@ -440,30 +451,6 @@ export class Namespace<
440
451
) ;
441
452
}
442
453
443
- /**
444
- * Emits an event and waits for an acknowledgement from all clients.
445
- *
446
- * @example
447
- * const myNamespace = io.of("/my-namespace");
448
- *
449
- * try {
450
- * const responses = await myNamespace.timeout(1000).emitWithAck("some-event");
451
- * console.log(responses); // one response per client
452
- * } catch (e) {
453
- * // some clients did not acknowledge the event in the given delay
454
- * }
455
- *
456
- * @return a Promise that will be fulfilled when all clients have acknowledged the event
457
- */
458
- public emitWithAck < Ev extends EventNames < EmitEvents > > (
459
- ev : Ev ,
460
- ...args : AllButLast < EventParams < EmitEvents , Ev > >
461
- ) : Promise < SecondArg < Last < EventParams < EmitEvents , Ev > > > > {
462
- return new BroadcastOperator < EmitEvents , SocketData > (
463
- this . adapter
464
- ) . emitWithAck ( ev , ...args ) ;
465
- }
466
-
467
454
/**
468
455
* Sends a `message` event to all clients.
469
456
*
@@ -482,7 +469,9 @@ export class Namespace<
482
469
* @return self
483
470
*/
484
471
public send ( ...args : EventParams < EmitEvents , "message" > ) : this {
485
- this . emit ( "message" , ...args ) ;
472
+ // This type-cast is needed because EmitEvents likely doesn't have `message` as a key.
473
+ // if you specify the EmitEvents, the type of args will be never.
474
+ this . emit ( "message" as any , ...args ) ;
486
475
return this ;
487
476
}
488
477
@@ -492,7 +481,9 @@ export class Namespace<
492
481
* @return self
493
482
*/
494
483
public write ( ...args : EventParams < EmitEvents , "message" > ) : this {
495
- this . emit ( "message" , ...args ) ;
484
+ // This type-cast is needed because EmitEvents likely doesn't have `message` as a key.
485
+ // if you specify the EmitEvents, the type of args will be never.
486
+ this . emit ( "message" as any , ...args ) ;
496
487
return this ;
497
488
}
498
489
@@ -557,10 +548,10 @@ export class Namespace<
557
548
*
558
549
* @return a Promise that will be fulfilled when all servers have acknowledged the event
559
550
*/
560
- public serverSideEmitWithAck < Ev extends EventNames < ServerSideEvents > > (
551
+ public serverSideEmitWithAck < Ev extends EventNamesWithAck < ServerSideEvents > > (
561
552
ev : Ev ,
562
553
...args : AllButLast < EventParams < ServerSideEvents , Ev > >
563
- ) : Promise < FirstArg < Last < EventParams < ServerSideEvents , Ev > > > [ ] > {
554
+ ) : Promise < FirstNonErrorArg < Last < EventParams < ServerSideEvents , Ev > > > [ ] > {
564
555
return new Promise ( ( resolve , reject ) => {
565
556
args . push ( ( err , responses ) => {
566
557
if ( err ) {
@@ -612,9 +603,10 @@ export class Namespace<
612
603
* @return self
613
604
*/
614
605
public compress ( compress : boolean ) {
615
- return new BroadcastOperator < EmitEvents , SocketData > ( this . adapter ) . compress (
616
- compress
617
- ) ;
606
+ return new BroadcastOperator <
607
+ DecorateAcknowledgementsWithMultipleResponses < EmitEvents > ,
608
+ SocketData
609
+ > ( this . adapter ) . compress ( compress ) ;
618
610
}
619
611
620
612
/**
@@ -630,7 +622,10 @@ export class Namespace<
630
622
* @return self
631
623
*/
632
624
public get volatile ( ) {
633
- return new BroadcastOperator < EmitEvents , SocketData > ( this . adapter ) . volatile ;
625
+ return new BroadcastOperator <
626
+ DecorateAcknowledgementsWithMultipleResponses < EmitEvents > ,
627
+ SocketData
628
+ > ( this . adapter ) . volatile ;
634
629
}
635
630
636
631
/**
@@ -645,7 +640,10 @@ export class Namespace<
645
640
* @return a new {@link BroadcastOperator} instance for chaining
646
641
*/
647
642
public get local ( ) {
648
- return new BroadcastOperator < EmitEvents , SocketData > ( this . adapter ) . local ;
643
+ return new BroadcastOperator <
644
+ DecorateAcknowledgementsWithMultipleResponses < EmitEvents > ,
645
+ SocketData
646
+ > ( this . adapter ) . local ;
649
647
}
650
648
651
649
/**
@@ -664,10 +662,18 @@ export class Namespace<
664
662
*
665
663
* @param timeout
666
664
*/
667
- public timeout ( timeout : number ) {
668
- return new BroadcastOperator < EmitEvents , SocketData > ( this . adapter ) . timeout (
669
- timeout
670
- ) ;
665
+ public timeout (
666
+ timeout : number
667
+ ) : BroadcastOperator <
668
+ DecorateAcknowledgements <
669
+ DecorateAcknowledgementsWithMultipleResponses < EmitEvents >
670
+ > ,
671
+ SocketData
672
+ > {
673
+ return new BroadcastOperator <
674
+ DecorateAcknowledgementsWithMultipleResponses < EmitEvents > ,
675
+ SocketData
676
+ > ( this . adapter ) . timeout ( timeout ) ;
671
677
}
672
678
673
679
/**
0 commit comments