@@ -7,7 +7,11 @@ import path = require("path");
77import engine = require( "engine.io" ) ;
88import { Client } from "./client" ;
99import { EventEmitter } from "events" ;
10- import { ExtendedError , Namespace } from "./namespace" ;
10+ import {
11+ ExtendedError ,
12+ Namespace ,
13+ NamespaceReservedEventsMap ,
14+ } from "./namespace" ;
1115import { ParentNamespace } from "./parent-namespace" ;
1216import { Adapter , Room , SocketId } from "socket.io-adapter" ;
1317import * as parser from "socket.io-parser" ;
@@ -17,6 +21,12 @@ import { Socket } from "./socket";
1721import type { CookieSerializeOptions } from "cookie" ;
1822import type { CorsOptions } from "cors" ;
1923import type { BroadcastOperator , RemoteSocket } from "./broadcast-operator" ;
24+ import {
25+ EventsMap ,
26+ DefaultEventsMap ,
27+ EventParams ,
28+ StrictEventEmitter ,
29+ } from "./typed-events" ;
2030
2131const debug = debugModule ( "socket.io:server" ) ;
2232
@@ -156,8 +166,15 @@ interface ServerOptions extends EngineAttachOptions {
156166 connectTimeout : number ;
157167}
158168
159- export class Server extends EventEmitter {
160- public readonly sockets : Namespace ;
169+ export class Server <
170+ ListenEvents extends EventsMap = DefaultEventsMap ,
171+ EmitEvents extends EventsMap = ListenEvents
172+ > extends StrictEventEmitter <
173+ { } ,
174+ EmitEvents ,
175+ NamespaceReservedEventsMap < ListenEvents , EmitEvents >
176+ > {
177+ public readonly sockets : Namespace < ListenEvents , EmitEvents > ;
161178
162179 /** @private */
163180 readonly _parser : typeof parser ;
@@ -167,8 +184,11 @@ export class Server extends EventEmitter {
167184 /**
168185 * @private
169186 */
170- _nsps : Map < string , Namespace > = new Map ( ) ;
171- private parentNsps : Map < ParentNspNameMatchFn , ParentNamespace > = new Map ( ) ;
187+ _nsps : Map < string , Namespace < ListenEvents , EmitEvents > > = new Map ( ) ;
188+ private parentNsps : Map <
189+ ParentNspNameMatchFn ,
190+ ParentNamespace < ListenEvents , EmitEvents >
191+ > = new Map ( ) ;
172192 private _adapter ?: typeof Adapter ;
173193 private _serveClient : boolean ;
174194 private opts : Partial < EngineOptions > ;
@@ -248,7 +268,7 @@ export class Server extends EventEmitter {
248268 _checkNamespace (
249269 name : string ,
250270 auth : { [ key : string ] : any } ,
251- fn : ( nsp : Namespace | false ) => void
271+ fn : ( nsp : Namespace < ListenEvents , EmitEvents > | false ) => void
252272 ) : void {
253273 if ( this . parentNsps . size === 0 ) return fn ( false ) ;
254274
@@ -557,8 +577,8 @@ export class Server extends EventEmitter {
557577 */
558578 public of (
559579 name : string | RegExp | ParentNspNameMatchFn ,
560- fn ?: ( socket : Socket ) => void
561- ) : Namespace {
580+ fn ?: ( socket : Socket < ListenEvents , EmitEvents > ) => void
581+ ) : Namespace < ListenEvents , EmitEvents > {
562582 if ( typeof name === "function" || name instanceof RegExp ) {
563583 const parentNsp = new ParentNamespace ( this ) ;
564584 debug ( "initializing parent namespace %s" , parentNsp . name ) ;
@@ -616,7 +636,10 @@ export class Server extends EventEmitter {
616636 * @public
617637 */
618638 public use (
619- fn : ( socket : Socket , next : ( err ?: ExtendedError ) => void ) => void
639+ fn : (
640+ socket : Socket < ListenEvents , EmitEvents > ,
641+ next : ( err ?: ExtendedError ) => void
642+ ) => void
620643 ) : this {
621644 this . sockets . use ( fn ) ;
622645 return this ;
@@ -629,7 +652,7 @@ export class Server extends EventEmitter {
629652 * @return self
630653 * @public
631654 */
632- public to ( room : Room | Room [ ] ) : BroadcastOperator {
655+ public to ( room : Room | Room [ ] ) : BroadcastOperator < EmitEvents > {
633656 return this . sockets . to ( room ) ;
634657 }
635658
@@ -640,7 +663,7 @@ export class Server extends EventEmitter {
640663 * @return self
641664 * @public
642665 */
643- public in ( room : Room | Room [ ] ) : BroadcastOperator {
666+ public in ( room : Room | Room [ ] ) : BroadcastOperator < EmitEvents > {
644667 return this . sockets . in ( room ) ;
645668 }
646669
@@ -651,7 +674,7 @@ export class Server extends EventEmitter {
651674 * @return self
652675 * @public
653676 */
654- public except ( name : Room | Room [ ] ) : Server {
677+ public except ( name : Room | Room [ ] ) : Server < ListenEvents , EmitEvents > {
655678 this . sockets . except ( name ) ;
656679 return this ;
657680 }
@@ -662,7 +685,7 @@ export class Server extends EventEmitter {
662685 * @return self
663686 * @public
664687 */
665- public send ( ...args : readonly any [ ] ) : this {
688+ public send ( ...args : EventParams < EmitEvents , "message" > ) : this {
666689 this . sockets . emit ( "message" , ...args ) ;
667690 return this ;
668691 }
@@ -673,7 +696,7 @@ export class Server extends EventEmitter {
673696 * @return self
674697 * @public
675698 */
676- public write ( ...args : readonly any [ ] ) : this {
699+ public write ( ...args : EventParams < EmitEvents , "message" > ) : this {
677700 this . sockets . emit ( "message" , ...args ) ;
678701 return this ;
679702 }
@@ -694,7 +717,7 @@ export class Server extends EventEmitter {
694717 * @return self
695718 * @public
696719 */
697- public compress ( compress : boolean ) : BroadcastOperator {
720+ public compress ( compress : boolean ) : BroadcastOperator < EmitEvents > {
698721 return this . sockets . compress ( compress ) ;
699722 }
700723
@@ -706,7 +729,7 @@ export class Server extends EventEmitter {
706729 * @return self
707730 * @public
708731 */
709- public get volatile ( ) : BroadcastOperator {
732+ public get volatile ( ) : BroadcastOperator < EmitEvents > {
710733 return this . sockets . volatile ;
711734 }
712735
@@ -716,7 +739,7 @@ export class Server extends EventEmitter {
716739 * @return self
717740 * @public
718741 */
719- public get local ( ) : BroadcastOperator {
742+ public get local ( ) : BroadcastOperator < EmitEvents > {
720743 return this . sockets . local ;
721744 }
722745
@@ -725,7 +748,7 @@ export class Server extends EventEmitter {
725748 *
726749 * @public
727750 */
728- public fetchSockets ( ) : Promise < RemoteSocket [ ] > {
751+ public fetchSockets ( ) : Promise < RemoteSocket < EmitEvents > [ ] > {
729752 return this . sockets . fetchSockets ( ) ;
730753 }
731754
0 commit comments