Skip to content

Commit 3ee5349

Browse files
committed
[api] Convert the isServer and maxPayload parameters to options
To simplify the API before exporting the `PerMessageDeflate` class, reduce the number of positional parameters in the constructor by moving `isServer` and `maxPayload` into the options object.
1 parent 91707b4 commit 3ee5349

5 files changed

Lines changed: 68 additions & 56 deletions

File tree

lib/permessage-deflate.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ class PerMessageDeflate {
3737
* acknowledge disabling of client context takeover
3838
* @param {Number} [options.concurrencyLimit=10] The number of concurrent
3939
* calls to zlib
40+
* @param {Boolean} [options.isServer=false] Create the instance in either
41+
* server or client mode
42+
* @param {Number} [options.maxPayload=0] The maximum allowed message length
4043
* @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the
4144
* use of a custom server window size
4245
* @param {Boolean} [options.serverNoContextTakeover=false] Request/accept
@@ -47,16 +50,13 @@ class PerMessageDeflate {
4750
* deflate
4851
* @param {Object} [options.zlibInflateOptions] Options to pass to zlib on
4952
* inflate
50-
* @param {Boolean} [isServer=false] Create the instance in either server or
51-
* client mode
52-
* @param {Number} [maxPayload=0] The maximum allowed message length
5353
*/
54-
constructor(options, isServer, maxPayload) {
55-
this._maxPayload = maxPayload | 0;
54+
constructor(options) {
5655
this._options = options || {};
5756
this._threshold =
5857
this._options.threshold !== undefined ? this._options.threshold : 1024;
59-
this._isServer = !!isServer;
58+
this._maxPayload = this._options.maxPayload | 0;
59+
this._isServer = !!this._options.isServer;
6060
this._deflate = null;
6161
this._inflate = null;
6262

lib/websocket-server.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -293,11 +293,11 @@ class WebSocketServer extends EventEmitter {
293293
this.options.perMessageDeflate &&
294294
secWebSocketExtensions !== undefined
295295
) {
296-
const perMessageDeflate = new PerMessageDeflate(
297-
this.options.perMessageDeflate,
298-
true,
299-
this.options.maxPayload
300-
);
296+
const perMessageDeflate = new PerMessageDeflate({
297+
...this.options.perMessageDeflate,
298+
isServer: true,
299+
maxPayload: this.options.maxPayload
300+
});
301301

302302
try {
303303
const offers = extension.parse(secWebSocketExtensions);

lib/websocket.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -755,11 +755,11 @@ function initAsClient(websocket, address, protocols, options) {
755755
opts.timeout = opts.handshakeTimeout;
756756

757757
if (opts.perMessageDeflate) {
758-
perMessageDeflate = new PerMessageDeflate(
759-
opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},
760-
false,
761-
opts.maxPayload
762-
);
758+
perMessageDeflate = new PerMessageDeflate({
759+
...opts.perMessageDeflate,
760+
isServer: false,
761+
maxPayload: opts.maxPayload
762+
});
763763
opts.headers['Sec-WebSocket-Extensions'] = format({
764764
[PerMessageDeflate.extensionName]: perMessageDeflate.offer()
765765
});

test/permessage-deflate.test.js

Lines changed: 44 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,13 @@ describe('PerMessageDeflate', () => {
101101

102102
describe('As server', () => {
103103
it('accepts an offer with no parameters', () => {
104-
const perMessageDeflate = new PerMessageDeflate({}, true);
104+
const perMessageDeflate = new PerMessageDeflate({ isServer: true });
105105

106106
assert.deepStrictEqual(perMessageDeflate.accept([{}]), {});
107107
});
108108

109109
it('accepts an offer with parameters', () => {
110-
const perMessageDeflate = new PerMessageDeflate({}, true);
110+
const perMessageDeflate = new PerMessageDeflate({ isServer: true });
111111
const extensions = extension.parse(
112112
'permessage-deflate; server_no_context_takeover; ' +
113113
'client_no_context_takeover; server_max_window_bits=10; ' +
@@ -127,15 +127,13 @@ describe('PerMessageDeflate', () => {
127127
});
128128

129129
it('prefers the configuration options', () => {
130-
const perMessageDeflate = new PerMessageDeflate(
131-
{
132-
serverNoContextTakeover: true,
133-
clientNoContextTakeover: true,
134-
serverMaxWindowBits: 12,
135-
clientMaxWindowBits: 11
136-
},
137-
true
138-
);
130+
const perMessageDeflate = new PerMessageDeflate({
131+
serverNoContextTakeover: true,
132+
clientNoContextTakeover: true,
133+
serverMaxWindowBits: 12,
134+
clientMaxWindowBits: 11,
135+
isServer: true
136+
});
139137
const extensions = extension.parse(
140138
'permessage-deflate; server_max_window_bits=14; client_max_window_bits=13'
141139
);
@@ -153,10 +151,10 @@ describe('PerMessageDeflate', () => {
153151
});
154152

155153
it('accepts the first supported offer', () => {
156-
const perMessageDeflate = new PerMessageDeflate(
157-
{ serverMaxWindowBits: 11 },
158-
true
159-
);
154+
const perMessageDeflate = new PerMessageDeflate({
155+
isServer: true,
156+
serverMaxWindowBits: 11
157+
});
160158
const extensions = extension.parse(
161159
'permessage-deflate; server_max_window_bits=10, permessage-deflate'
162160
);
@@ -171,10 +169,10 @@ describe('PerMessageDeflate', () => {
171169
});
172170

173171
it('throws an error if server_no_context_takeover is unsupported', () => {
174-
const perMessageDeflate = new PerMessageDeflate(
175-
{ serverNoContextTakeover: false },
176-
true
177-
);
172+
const perMessageDeflate = new PerMessageDeflate({
173+
isServer: true,
174+
serverNoContextTakeover: false
175+
});
178176
const extensions = extension.parse(
179177
'permessage-deflate; server_no_context_takeover'
180178
);
@@ -186,10 +184,10 @@ describe('PerMessageDeflate', () => {
186184
});
187185

188186
it('throws an error if server_max_window_bits is unsupported', () => {
189-
const perMessageDeflate = new PerMessageDeflate(
190-
{ serverMaxWindowBits: false },
191-
true
192-
);
187+
const perMessageDeflate = new PerMessageDeflate({
188+
isServer: true,
189+
serverMaxWindowBits: false
190+
});
193191
const extensions = extension.parse(
194192
'permessage-deflate; server_max_window_bits=10'
195193
);
@@ -201,10 +199,10 @@ describe('PerMessageDeflate', () => {
201199
});
202200

203201
it('throws an error if server_max_window_bits is less than configuration', () => {
204-
const perMessageDeflate = new PerMessageDeflate(
205-
{ serverMaxWindowBits: 11 },
206-
true
207-
);
202+
const perMessageDeflate = new PerMessageDeflate({
203+
isServer: true,
204+
serverMaxWindowBits: 11
205+
});
208206
const extensions = extension.parse(
209207
'permessage-deflate; server_max_window_bits=10'
210208
);
@@ -216,10 +214,10 @@ describe('PerMessageDeflate', () => {
216214
});
217215

218216
it('throws an error if client_max_window_bits is unsupported on client', () => {
219-
const perMessageDeflate = new PerMessageDeflate(
220-
{ clientMaxWindowBits: 10 },
221-
true
222-
);
217+
const perMessageDeflate = new PerMessageDeflate({
218+
isServer: true,
219+
clientMaxWindowBits: 10
220+
});
223221
const extensions = extension.parse('permessage-deflate');
224222

225223
assert.throws(
@@ -229,7 +227,7 @@ describe('PerMessageDeflate', () => {
229227
});
230228

231229
it('throws an error if client_max_window_bits has an invalid value', () => {
232-
const perMessageDeflate = new PerMessageDeflate({}, true);
230+
const perMessageDeflate = new PerMessageDeflate({ isServer: true });
233231

234232
const extensions = extension.parse(
235233
'permessage-deflate; client_max_window_bits=16'
@@ -388,8 +386,10 @@ describe('PerMessageDeflate', () => {
388386

389387
it('works with the negotiated parameters', (done) => {
390388
const perMessageDeflate = new PerMessageDeflate({
391-
memLevel: 5,
392-
level: 9
389+
zlibDeflateOptions: {
390+
memLevel: 5,
391+
level: 9
392+
}
393393
});
394394
const extensions = extension.parse(
395395
'permessage-deflate; server_no_context_takeover; ' +
@@ -518,7 +518,7 @@ describe('PerMessageDeflate', () => {
518518
});
519519

520520
it("doesn't use contex takeover if not allowed", (done) => {
521-
const perMessageDeflate = new PerMessageDeflate({}, true);
521+
const perMessageDeflate = new PerMessageDeflate({ isServer: true });
522522
const extensions = extension.parse(
523523
'permessage-deflate;server_no_context_takeover'
524524
);
@@ -549,7 +549,7 @@ describe('PerMessageDeflate', () => {
549549
});
550550

551551
it('uses contex takeover if allowed', (done) => {
552-
const perMessageDeflate = new PerMessageDeflate({}, true);
552+
const perMessageDeflate = new PerMessageDeflate({ isServer: true });
553553
const extensions = extension.parse('permessage-deflate');
554554
const buf = Buffer.from('foofoo');
555555

@@ -591,7 +591,10 @@ describe('PerMessageDeflate', () => {
591591
});
592592

593593
it('calls the callback when `maxPayload` is exceeded (1/2)', (done) => {
594-
const perMessageDeflate = new PerMessageDeflate({}, false, 25);
594+
const perMessageDeflate = new PerMessageDeflate({
595+
isServer: false,
596+
maxPayload: 25
597+
});
595598
const buf = Buffer.alloc(50, 'A');
596599

597600
perMessageDeflate.accept([{}]);
@@ -609,7 +612,10 @@ describe('PerMessageDeflate', () => {
609612
it('calls the callback when `maxPayload` is exceeded (2/2)', (done) => {
610613
// A copy of the previous test but with a larger input. See
611614
// https://github.com/websockets/ws/pull/2285.
612-
const perMessageDeflate = new PerMessageDeflate({}, false, 25);
615+
const perMessageDeflate = new PerMessageDeflate({
616+
isServer: false,
617+
maxPayload: 25
618+
});
613619
const buf = Buffer.alloc(1024 * 1024, 'A');
614620

615621
perMessageDeflate.accept([{}]);

test/receiver.test.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -922,7 +922,10 @@ describe('Receiver', () => {
922922
});
923923

924924
it('emits an error if the message length exceeds `maxPayload`', (done) => {
925-
const perMessageDeflate = new PerMessageDeflate({}, false, 25);
925+
const perMessageDeflate = new PerMessageDeflate({
926+
isServer: false,
927+
maxPayload: 25
928+
});
926929
perMessageDeflate.accept([{}]);
927930

928931
const receiver = new Receiver({
@@ -949,7 +952,10 @@ describe('Receiver', () => {
949952
});
950953

951954
it('emits an error if the sum of fragment lengths exceeds `maxPayload`', (done) => {
952-
const perMessageDeflate = new PerMessageDeflate({}, false, 25);
955+
const perMessageDeflate = new PerMessageDeflate({
956+
isServer: false,
957+
maxPayload: 25
958+
});
953959
perMessageDeflate.accept([{}]);
954960

955961
const receiver = new Receiver({

0 commit comments

Comments
 (0)