@@ -9,8 +9,12 @@ import {
99 DecorateAcknowledgementsWithTimeoutAndMultipleResponses ,
1010 AllButLast ,
1111 Last ,
12- FirstArg ,
13- SecondArg ,
12+ DecorateAcknowledgementsWithMultipleResponses ,
13+ DecorateAcknowledgements ,
14+ RemoveAcknowledgements ,
15+ EventNamesWithAck ,
16+ FirstNonErrorArg ,
17+ EventNamesWithoutAck ,
1418} from "./typed-events" ;
1519import type { Client } from "./client" ;
1620import debugModule from "debug" ;
@@ -117,7 +121,7 @@ export class Namespace<
117121 SocketData = any
118122> extends StrictEventEmitter <
119123 ServerSideEvents ,
120- EmitEvents ,
124+ RemoveAcknowledgements < EmitEvents > ,
121125 NamespaceReservedEventsMap <
122126 ListenEvents ,
123127 EmitEvents ,
@@ -252,7 +256,10 @@ export class Namespace<
252256 * @return a new {@link BroadcastOperator} instance for chaining
253257 */
254258 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 ) ;
256263 }
257264
258265 /**
@@ -268,7 +275,10 @@ export class Namespace<
268275 * @return a new {@link BroadcastOperator} instance for chaining
269276 */
270277 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 ) ;
272282 }
273283
274284 /**
@@ -290,9 +300,10 @@ export class Namespace<
290300 * @return a new {@link BroadcastOperator} instance for chaining
291301 */
292302 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 ) ;
296307 }
297308
298309 /**
@@ -430,7 +441,7 @@ export class Namespace<
430441 *
431442 * @return Always true
432443 */
433- public emit < Ev extends EventNames < EmitEvents > > (
444+ public emit < Ev extends EventNamesWithoutAck < EmitEvents > > (
434445 ev : Ev ,
435446 ...args : EventParams < EmitEvents , Ev >
436447 ) : boolean {
@@ -440,30 +451,6 @@ export class Namespace<
440451 ) ;
441452 }
442453
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-
467454 /**
468455 * Sends a `message` event to all clients.
469456 *
@@ -482,7 +469,9 @@ export class Namespace<
482469 * @return self
483470 */
484471 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 ) ;
486475 return this ;
487476 }
488477
@@ -492,7 +481,9 @@ export class Namespace<
492481 * @return self
493482 */
494483 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 ) ;
496487 return this ;
497488 }
498489
@@ -557,10 +548,10 @@ export class Namespace<
557548 *
558549 * @return a Promise that will be fulfilled when all servers have acknowledged the event
559550 */
560- public serverSideEmitWithAck < Ev extends EventNames < ServerSideEvents > > (
551+ public serverSideEmitWithAck < Ev extends EventNamesWithAck < ServerSideEvents > > (
561552 ev : Ev ,
562553 ...args : AllButLast < EventParams < ServerSideEvents , Ev > >
563- ) : Promise < FirstArg < Last < EventParams < ServerSideEvents , Ev > > > [ ] > {
554+ ) : Promise < FirstNonErrorArg < Last < EventParams < ServerSideEvents , Ev > > > [ ] > {
564555 return new Promise ( ( resolve , reject ) => {
565556 args . push ( ( err , responses ) => {
566557 if ( err ) {
@@ -612,9 +603,10 @@ export class Namespace<
612603 * @return self
613604 */
614605 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 ) ;
618610 }
619611
620612 /**
@@ -630,7 +622,10 @@ export class Namespace<
630622 * @return self
631623 */
632624 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 ;
634629 }
635630
636631 /**
@@ -645,7 +640,10 @@ export class Namespace<
645640 * @return a new {@link BroadcastOperator} instance for chaining
646641 */
647642 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 ;
649647 }
650648
651649 /**
@@ -664,10 +662,18 @@ export class Namespace<
664662 *
665663 * @param timeout
666664 */
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 ) ;
671677 }
672678
673679 /**
0 commit comments