Skip to content

Commit 1e938f1

Browse files
committed
[major] Use an options object instead of positional arguments
Make the `Receiver` constructor take a single options object argument instead of multiple positional arguments.
1 parent 7f0b5c4 commit 1e938f1

File tree

4 files changed

+74
-62
lines changed

4 files changed

+74
-62
lines changed

bench/parser.benchmark.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,11 @@ const binaryFrame3 = createBinaryFrame(200 * 1024);
3636
const binaryFrame4 = createBinaryFrame(1024 * 1024);
3737

3838
const suite = new benchmark.Suite();
39-
const receiver = new Receiver('nodebuffer', {}, true);
39+
const receiver = new Receiver({
40+
binaryType: 'nodebuffer',
41+
extensions: {},
42+
isServer: true
43+
});
4044

4145
suite.add('ping frame (5 bytes payload)', {
4246
defer: true,

lib/receiver.js

+12-10
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,22 @@ class Receiver extends Writable {
2828
/**
2929
* Creates a Receiver instance.
3030
*
31-
* @param {String} [binaryType=nodebuffer] The type for binary data
32-
* @param {Object} [extensions] An object containing the negotiated extensions
33-
* @param {Boolean} [isServer=false] Specifies whether to operate in client or
34-
* server mode
35-
* @param {Number} [maxPayload=0] The maximum allowed message length
31+
* @param {Object} [options] Options object
32+
* @param {String} [options.binaryType=nodebuffer] The type for binary data
33+
* @param {Object} [options.extensions] An object containing the negotiated
34+
* extensions
35+
* @param {Boolean} [options.isServer=false] Specifies whether to operate in
36+
* client or server mode
37+
* @param {Number} [options.maxPayload=0] The maximum allowed message length
3638
*/
37-
constructor(binaryType, extensions, isServer, maxPayload) {
39+
constructor(options = {}) {
3840
super();
3941

40-
this._binaryType = binaryType || BINARY_TYPES[0];
42+
this._binaryType = options.binaryType || BINARY_TYPES[0];
43+
this._extensions = options.extensions || {};
44+
this._isServer = !!options.isServer;
45+
this._maxPayload = options.maxPayload | 0;
4146
this[kWebSocket] = undefined;
42-
this._extensions = extensions || {};
43-
this._isServer = !!isServer;
44-
this._maxPayload = maxPayload | 0;
4547

4648
this._bufferedBytes = 0;
4749
this._buffers = [];

lib/websocket.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,12 @@ class WebSocket extends EventEmitter {
184184
* @private
185185
*/
186186
setSocket(socket, head, maxPayload) {
187-
const receiver = new Receiver(
188-
this.binaryType,
189-
this._extensions,
190-
this._isServer,
187+
const receiver = new Receiver({
188+
binaryType: this.binaryType,
189+
extensions: this._extensions,
190+
isServer: this._isServer,
191191
maxPayload
192-
);
192+
});
193193

194194
this._sender = new Sender(socket, this._extensions);
195195
this._receiver = receiver;

test/receiver.test.js

+52-46
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ describe('Receiver', () => {
4747
});
4848

4949
it('parses a masked text message', (done) => {
50-
const receiver = new Receiver(undefined, {}, true);
50+
const receiver = new Receiver({ isServer: true });
5151

5252
receiver.on('message', (data, isBinary) => {
5353
assert.deepStrictEqual(data, Buffer.from('5:::{"name":"echo"}'));
@@ -61,7 +61,7 @@ describe('Receiver', () => {
6161
});
6262

6363
it('parses a masked text message longer than 125 B', (done) => {
64-
const receiver = new Receiver(undefined, {}, true);
64+
const receiver = new Receiver({ isServer: true });
6565
const msg = Buffer.from('A'.repeat(200));
6666

6767
const list = Sender.frame(msg, {
@@ -85,7 +85,7 @@ describe('Receiver', () => {
8585
});
8686

8787
it('parses a really long masked text message', (done) => {
88-
const receiver = new Receiver(undefined, {}, true);
88+
const receiver = new Receiver({ isServer: true });
8989
const msg = Buffer.from('A'.repeat(64 * 1024));
9090

9191
const list = Sender.frame(msg, {
@@ -108,7 +108,7 @@ describe('Receiver', () => {
108108
});
109109

110110
it('parses a 300 B fragmented masked text message', (done) => {
111-
const receiver = new Receiver(undefined, {}, true);
111+
const receiver = new Receiver({ isServer: true });
112112
const msg = Buffer.from('A'.repeat(300));
113113

114114
const fragment1 = msg.slice(0, 150);
@@ -142,7 +142,7 @@ describe('Receiver', () => {
142142
});
143143

144144
it('parses a ping message', (done) => {
145-
const receiver = new Receiver(undefined, {}, true);
145+
const receiver = new Receiver({ isServer: true });
146146
const msg = Buffer.from('Hello');
147147

148148
const list = Sender.frame(msg, {
@@ -175,7 +175,7 @@ describe('Receiver', () => {
175175
});
176176

177177
it('parses a 300 B fragmented masked text message with a ping in the middle (1/2)', (done) => {
178-
const receiver = new Receiver(undefined, {}, true);
178+
const receiver = new Receiver({ isServer: true });
179179
const msg = Buffer.from('A'.repeat(300));
180180
const pingMessage = Buffer.from('Hello');
181181

@@ -225,7 +225,7 @@ describe('Receiver', () => {
225225
});
226226

227227
it('parses a 300 B fragmented masked text message with a ping in the middle (2/2)', (done) => {
228-
const receiver = new Receiver(undefined, {}, true);
228+
const receiver = new Receiver({ isServer: true });
229229
const msg = Buffer.from('A'.repeat(300));
230230
const pingMessage = Buffer.from('Hello');
231231

@@ -285,7 +285,7 @@ describe('Receiver', () => {
285285
});
286286

287287
it('parses a 100 B masked binary message', (done) => {
288-
const receiver = new Receiver(undefined, {}, true);
288+
const receiver = new Receiver({ isServer: true });
289289
const msg = crypto.randomBytes(100);
290290

291291
const list = Sender.frame(msg, {
@@ -308,7 +308,7 @@ describe('Receiver', () => {
308308
});
309309

310310
it('parses a 256 B masked binary message', (done) => {
311-
const receiver = new Receiver(undefined, {}, true);
311+
const receiver = new Receiver({ isServer: true });
312312
const msg = crypto.randomBytes(256);
313313

314314
const list = Sender.frame(msg, {
@@ -331,7 +331,7 @@ describe('Receiver', () => {
331331
});
332332

333333
it('parses a 200 KiB masked binary message', (done) => {
334-
const receiver = new Receiver(undefined, {}, true);
334+
const receiver = new Receiver({ isServer: true });
335335
const msg = crypto.randomBytes(200 * 1024);
336336

337337
const list = Sender.frame(msg, {
@@ -380,8 +380,10 @@ describe('Receiver', () => {
380380
const perMessageDeflate = new PerMessageDeflate();
381381
perMessageDeflate.accept([{}]);
382382

383-
const receiver = new Receiver(undefined, {
384-
'permessage-deflate': perMessageDeflate
383+
const receiver = new Receiver({
384+
extensions: {
385+
'permessage-deflate': perMessageDeflate
386+
}
385387
});
386388
const buf = Buffer.from('Hello');
387389

@@ -403,8 +405,10 @@ describe('Receiver', () => {
403405
const perMessageDeflate = new PerMessageDeflate();
404406
perMessageDeflate.accept([{}]);
405407

406-
const receiver = new Receiver(undefined, {
407-
'permessage-deflate': perMessageDeflate
408+
const receiver = new Receiver({
409+
extensions: {
410+
'permessage-deflate': perMessageDeflate
411+
}
408412
});
409413
const buf1 = Buffer.from('foo');
410414
const buf2 = Buffer.from('bar');
@@ -451,7 +455,7 @@ describe('Receiver', () => {
451455
});
452456

453457
it('resets `totalPayloadLength` only on final frame (unfragmented)', (done) => {
454-
const receiver = new Receiver(undefined, {}, false, 10);
458+
const receiver = new Receiver({ maxPayload: 10 });
455459

456460
receiver.on('message', (data, isBinary) => {
457461
assert.strictEqual(receiver._totalPayloadLength, 0);
@@ -465,7 +469,7 @@ describe('Receiver', () => {
465469
});
466470

467471
it('resets `totalPayloadLength` only on final frame (fragmented)', (done) => {
468-
const receiver = new Receiver(undefined, {}, false, 10);
472+
const receiver = new Receiver({ maxPayload: 10 });
469473

470474
receiver.on('message', (data, isBinary) => {
471475
assert.strictEqual(receiver._totalPayloadLength, 0);
@@ -481,7 +485,7 @@ describe('Receiver', () => {
481485
});
482486

483487
it('resets `totalPayloadLength` only on final frame (fragmented + ping)', (done) => {
484-
const receiver = new Receiver(undefined, {}, false, 10);
488+
const receiver = new Receiver({ maxPayload: 10 });
485489
let data;
486490

487491
receiver.on('ping', (buf) => {
@@ -506,8 +510,10 @@ describe('Receiver', () => {
506510
const perMessageDeflate = new PerMessageDeflate();
507511
perMessageDeflate.accept([{}]);
508512

509-
const receiver = new Receiver(undefined, {
510-
'permessage-deflate': perMessageDeflate
513+
const receiver = new Receiver({
514+
extensions: {
515+
'permessage-deflate': perMessageDeflate
516+
}
511517
});
512518
const results = [];
513519
const push = results.push.bind(results);
@@ -549,8 +555,10 @@ describe('Receiver', () => {
549555
const perMessageDeflate = new PerMessageDeflate();
550556
perMessageDeflate.accept([{}]);
551557

552-
const receiver = new Receiver(undefined, {
553-
'permessage-deflate': perMessageDeflate
558+
const receiver = new Receiver({
559+
extensions: {
560+
'permessage-deflate': perMessageDeflate
561+
}
554562
});
555563

556564
receiver.on('error', (err) => {
@@ -675,8 +683,10 @@ describe('Receiver', () => {
675683
const perMessageDeflate = new PerMessageDeflate();
676684
perMessageDeflate.accept([{}]);
677685

678-
const receiver = new Receiver(undefined, {
679-
'permessage-deflate': perMessageDeflate
686+
const receiver = new Receiver({
687+
extensions: {
688+
'permessage-deflate': perMessageDeflate
689+
}
680690
});
681691

682692
receiver.on('error', (err) => {
@@ -711,7 +721,7 @@ describe('Receiver', () => {
711721
});
712722

713723
it('emits an error if a frame has the MASK bit off (server mode)', (done) => {
714-
const receiver = new Receiver(undefined, {}, true);
724+
const receiver = new Receiver({ isServer: true });
715725

716726
receiver.on('error', (err) => {
717727
assert.ok(err instanceof RangeError);
@@ -728,7 +738,7 @@ describe('Receiver', () => {
728738
});
729739

730740
it('emits an error if a frame has the MASK bit on (client mode)', (done) => {
731-
const receiver = new Receiver(undefined, {}, false);
741+
const receiver = new Receiver();
732742

733743
receiver.on('error', (err) => {
734744
assert.ok(err instanceof RangeError);
@@ -806,8 +816,10 @@ describe('Receiver', () => {
806816
const perMessageDeflate = new PerMessageDeflate();
807817
perMessageDeflate.accept([{}]);
808818

809-
const receiver = new Receiver(undefined, {
810-
'permessage-deflate': perMessageDeflate
819+
const receiver = new Receiver({
820+
extensions: {
821+
'permessage-deflate': perMessageDeflate
822+
}
811823
});
812824
const buf = Buffer.from([0xce, 0xba, 0xe1, 0xbd]);
813825

@@ -884,7 +896,7 @@ describe('Receiver', () => {
884896
});
885897

886898
it('emits an error if a frame payload length is bigger than `maxPayload`', (done) => {
887-
const receiver = new Receiver(undefined, {}, true, 20 * 1024);
899+
const receiver = new Receiver({ isServer: true, maxPayload: 20 * 1024 });
888900
const msg = crypto.randomBytes(200 * 1024);
889901

890902
const list = Sender.frame(msg, {
@@ -912,14 +924,11 @@ describe('Receiver', () => {
912924
const perMessageDeflate = new PerMessageDeflate({}, false, 25);
913925
perMessageDeflate.accept([{}]);
914926

915-
const receiver = new Receiver(
916-
undefined,
917-
{
918-
'permessage-deflate': perMessageDeflate
919-
},
920-
false,
921-
25
922-
);
927+
const receiver = new Receiver({
928+
extensions: { 'permessage-deflate': perMessageDeflate },
929+
isServer: false,
930+
maxPayload: 25
931+
});
923932
const buf = Buffer.from('A'.repeat(50));
924933

925934
receiver.on('error', (err) => {
@@ -942,14 +951,11 @@ describe('Receiver', () => {
942951
const perMessageDeflate = new PerMessageDeflate({}, false, 25);
943952
perMessageDeflate.accept([{}]);
944953

945-
const receiver = new Receiver(
946-
undefined,
947-
{
948-
'permessage-deflate': perMessageDeflate
949-
},
950-
false,
951-
25
952-
);
954+
const receiver = new Receiver({
955+
extensions: { 'permessage-deflate': perMessageDeflate },
956+
isServer: false,
957+
maxPayload: 25
958+
});
953959
const buf = Buffer.from('A'.repeat(15));
954960

955961
receiver.on('error', (err) => {
@@ -1002,7 +1008,7 @@ describe('Receiver', () => {
10021008
});
10031009

10041010
it("honors the 'arraybuffer' binary type", (done) => {
1005-
const receiver = new Receiver('arraybuffer');
1011+
const receiver = new Receiver({ binaryType: 'arraybuffer' });
10061012
const frags = [
10071013
crypto.randomBytes(19221),
10081014
crypto.randomBytes(954),
@@ -1028,7 +1034,7 @@ describe('Receiver', () => {
10281034
});
10291035

10301036
it("honors the 'fragments' binary type", (done) => {
1031-
const receiver = new Receiver('fragments');
1037+
const receiver = new Receiver({ binaryType: 'fragments' });
10321038
const frags = [
10331039
crypto.randomBytes(17),
10341040
crypto.randomBytes(419872),

0 commit comments

Comments
 (0)