diff --git a/packages/engine.io-client/lib/socket.ts b/packages/engine.io-client/lib/socket.ts index 645a43622e..3449a0ecd7 100644 --- a/packages/engine.io-client/lib/socket.ts +++ b/packages/engine.io-client/lib/socket.ts @@ -1167,7 +1167,7 @@ export class Socket extends SocketWithUpgrade { constructor(uri?: string, opts?: SocketOptions); constructor(opts: SocketOptions); constructor(uri?: string | SocketOptions, opts: SocketOptions = {}) { - const o = typeof uri === "object" ? uri : opts; + const o = typeof uri === "object" ? { ...uri } : { ...opts }; if ( !o.transports || diff --git a/packages/engine.io-client/test/socket.js b/packages/engine.io-client/test/socket.js index 9e87e36170..440491005b 100644 --- a/packages/engine.io-client/test/socket.js +++ b/packages/engine.io-client/test/socket.js @@ -23,6 +23,14 @@ describe("Socket", function () { }); }); + it("should not mutate the options object", () => { + const options = { transports: ["websocket", "polling"] }; + const originalTransports = [...options.transports]; + const socket = new Socket(options); + expect(options.transports).to.eql(originalTransports); + socket.close(); + }); + it("throws an error when no transports are available", (done) => { const socket = new Socket({ transports: [] }); let errorMessage = "";