Skip to content

Commit 085d1de

Browse files
feat: allow to pass an array to io.to(...)
In some cases it is necessary to pass an array of rooms instead of a single room. New syntax: ``` io.to(["room1", "room2"]).except(["room3"]).emit(...); socket.to(["room1", "room2"]).except(["room3"]).emit(...); ``` Related: #3048
1 parent ac9e8ca commit 085d1de

File tree

5 files changed

+28
-17
lines changed

5 files changed

+28
-17
lines changed

lib/broadcast-operator.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,16 @@ export class BroadcastOperator {
1818
* @return a new BroadcastOperator instance
1919
* @public
2020
*/
21-
public to(room: Room): BroadcastOperator {
21+
public to(room: Room | Room[]): BroadcastOperator {
22+
const rooms = new Set(this.rooms);
23+
if (Array.isArray(room)) {
24+
room.forEach((r) => rooms.add(r));
25+
} else {
26+
rooms.add(room);
27+
}
2228
return new BroadcastOperator(
2329
this.adapter,
24-
new Set([...this.rooms, room]),
30+
rooms,
2531
this.exceptRooms,
2632
this.flags
2733
);
@@ -34,7 +40,7 @@ export class BroadcastOperator {
3440
* @return a new BroadcastOperator instance
3541
* @public
3642
*/
37-
public in(room: Room): BroadcastOperator {
43+
public in(room: Room | Room[]): BroadcastOperator {
3844
return this.to(room);
3945
}
4046

@@ -45,11 +51,17 @@ export class BroadcastOperator {
4551
* @return a new BroadcastOperator instance
4652
* @public
4753
*/
48-
public except(room: Room): BroadcastOperator {
54+
public except(room: Room | Room[]): BroadcastOperator {
55+
const exceptRooms = new Set(this.exceptRooms);
56+
if (Array.isArray(room)) {
57+
room.forEach((r) => exceptRooms.add(r));
58+
} else {
59+
exceptRooms.add(room);
60+
}
4961
return new BroadcastOperator(
5062
this.adapter,
5163
this.rooms,
52-
new Set([...this.exceptRooms, room]),
64+
exceptRooms,
5365
this.flags
5466
);
5567
}

lib/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ export class Server extends EventEmitter {
629629
* @return self
630630
* @public
631631
*/
632-
public to(room: Room): BroadcastOperator {
632+
public to(room: Room | Room[]): BroadcastOperator {
633633
return this.sockets.to(room);
634634
}
635635

@@ -640,7 +640,7 @@ export class Server extends EventEmitter {
640640
* @return self
641641
* @public
642642
*/
643-
public in(room: Room): BroadcastOperator {
643+
public in(room: Room | Room[]): BroadcastOperator {
644644
return this.sockets.in(room);
645645
}
646646

@@ -651,7 +651,7 @@ export class Server extends EventEmitter {
651651
* @return self
652652
* @public
653653
*/
654-
public except(name: Room): Server {
654+
public except(name: Room | Room[]): Server {
655655
this.sockets.except(name);
656656
return this;
657657
}

lib/namespace.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ export class Namespace extends EventEmitter {
100100
* @return self
101101
* @public
102102
*/
103-
public to(room: Room): BroadcastOperator {
103+
public to(room: Room | Room[]): BroadcastOperator {
104104
return new BroadcastOperator(this.adapter).to(room);
105105
}
106106

@@ -111,7 +111,7 @@ export class Namespace extends EventEmitter {
111111
* @return self
112112
* @public
113113
*/
114-
public in(room: Room): BroadcastOperator {
114+
public in(room: Room | Room[]): BroadcastOperator {
115115
return new BroadcastOperator(this.adapter).in(room);
116116
}
117117

@@ -122,7 +122,7 @@ export class Namespace extends EventEmitter {
122122
* @return self
123123
* @public
124124
*/
125-
public except(room: Room): BroadcastOperator {
125+
public except(room: Room | Room[]): BroadcastOperator {
126126
return new BroadcastOperator(this.adapter).except(room);
127127
}
128128

lib/socket.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ export class Socket extends EventEmitter {
175175
* @return self
176176
* @public
177177
*/
178-
public to(room: Room): BroadcastOperator {
178+
public to(room: Room | Room[]): BroadcastOperator {
179179
return this.newBroadcastOperator().to(room);
180180
}
181181

@@ -186,7 +186,7 @@ export class Socket extends EventEmitter {
186186
* @return self
187187
* @public
188188
*/
189-
public in(room: Room): BroadcastOperator {
189+
public in(room: Room | Room[]): BroadcastOperator {
190190
return this.newBroadcastOperator().in(room);
191191
}
192192

@@ -197,7 +197,7 @@ export class Socket extends EventEmitter {
197197
* @return self
198198
* @public
199199
*/
200-
public except(room: Room): BroadcastOperator {
200+
public except(room: Room | Room[]): BroadcastOperator {
201201
return this.newBroadcastOperator().except(room);
202202
}
203203

test/socket.io.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ describe("socket.io", () => {
392392

393393
it("should return an immutable broadcast operator", () => {
394394
const sio = new Server();
395-
const operator = sio.local.to("room1").to("room2").except("room3");
395+
const operator = sio.local.to(["room1", "room2"]).except("room3");
396396
operator.compress(true).emit("hello");
397397
operator.volatile.emit("hello");
398398
operator.to("room4").emit("hello");
@@ -2362,8 +2362,7 @@ describe("socket.io", () => {
23622362
sio.on("connection", (socket: Socket) => {
23632363
const operator = socket.local
23642364
.compress(false)
2365-
.to("room1")
2366-
.to("room2")
2365+
.to(["room1", "room2"])
23672366
.except("room3");
23682367
operator.compress(true).emit("hello");
23692368
operator.volatile.emit("hello");

0 commit comments

Comments
 (0)