From 0ee8de320a45cb6a87d644a9a2dbc7d043d9283a Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Sat, 2 Jan 2016 00:01:53 +0100 Subject: [PATCH 1/4] Fix ws in browser --- lib/transports/websocket.js | 7 +++---- test/support/env.js | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/transports/websocket.js b/lib/transports/websocket.js index f2784658..56097bfd 100644 --- a/lib/transports/websocket.js +++ b/lib/transports/websocket.js @@ -8,6 +8,7 @@ var parseqs = require('parseqs'); var inherit = require('component-inherit'); var yeast = require('yeast'); var debug = require('debug')('engine.io-client:websocket'); +var isBrowserWebSocket = global.WebSocket || global.MozWebSocket; /** * Get either the `WebSocket` or `MozWebSocket` globals @@ -15,7 +16,7 @@ var debug = require('debug')('engine.io-client:websocket'); * exposed by `ws` for Node environment. */ -var WebSocket = typeof window !== 'undefined' ? (window.WebSocket || window.MozWebSocket) : require('ws'); +var WebSocket = isBrowserWebSocket || require('ws'); /** * Module exports. @@ -91,7 +92,7 @@ WS.prototype.doOpen = function(){ opts.headers = this.extraHeaders; } - this.ws = new WebSocket(uri, protocols, opts); + this.ws = isBrowserWebSocket ? new WebSocket(uri) : new WebSocket(uri, protocols, opts); if (this.ws.binaryType === undefined) { this.supportsBinary = false; @@ -158,8 +159,6 @@ WS.prototype.write = function(packets){ var self = this; this.writable = false; - var isBrowserWebSocket = global.WebSocket && this.ws instanceof global.WebSocket; - // encodePacket efficient as it uses WS framing // no need for encodePayload var total = packets.length; diff --git a/test/support/env.js b/test/support/env.js index ce1408c8..31b346f8 100644 --- a/test/support/env.js +++ b/test/support/env.js @@ -3,7 +3,7 @@ // support in browsers and in node.js // some tests do not yet work in both exports.browser = !!global.window; -exports.wsSupport = !!require('ws'); +exports.wsSupport = !!((global.window && (window.WebSocket || window.MozWebSocket)) || require('ws')); var userAgent = global.navigator ? navigator.userAgent : ''; exports.isOldSimulator = ~userAgent.indexOf('iPhone OS 4') || ~userAgent.indexOf('iPhone OS 5'); From 298250c1330323efda52088ebab55c44cffc771f Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Sun, 3 Jan 2016 22:22:11 +0100 Subject: [PATCH 2/4] Change variable name from isBrowserWebSocket to BrowserWebSocket --- lib/transports/websocket.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/transports/websocket.js b/lib/transports/websocket.js index 56097bfd..5a16e4d0 100644 --- a/lib/transports/websocket.js +++ b/lib/transports/websocket.js @@ -8,7 +8,7 @@ var parseqs = require('parseqs'); var inherit = require('component-inherit'); var yeast = require('yeast'); var debug = require('debug')('engine.io-client:websocket'); -var isBrowserWebSocket = global.WebSocket || global.MozWebSocket; +var BrowserWebSocket = global.WebSocket || global.MozWebSocket; /** * Get either the `WebSocket` or `MozWebSocket` globals @@ -16,7 +16,7 @@ var isBrowserWebSocket = global.WebSocket || global.MozWebSocket; * exposed by `ws` for Node environment. */ -var WebSocket = isBrowserWebSocket || require('ws'); +var WebSocket = BrowserWebSocket || require('ws'); /** * Module exports. @@ -92,7 +92,7 @@ WS.prototype.doOpen = function(){ opts.headers = this.extraHeaders; } - this.ws = isBrowserWebSocket ? new WebSocket(uri) : new WebSocket(uri, protocols, opts); + this.ws = BrowserWebSocket ? new WebSocket(uri) : new WebSocket(uri, protocols, opts); if (this.ws.binaryType === undefined) { this.supportsBinary = false; @@ -165,7 +165,7 @@ WS.prototype.write = function(packets){ for (var i = 0, l = total; i < l; i++) { (function(packet) { parser.encodePacket(packet, self.supportsBinary, function(data) { - if (!isBrowserWebSocket) { + if (!BrowserWebSocket) { // always create a new object (GH-437) var opts = {}; if (packet.options) { @@ -184,7 +184,7 @@ WS.prototype.write = function(packets){ //have a chance of informing us about it yet, in that case send will //throw an error try { - if (isBrowserWebSocket) { + if (BrowserWebSocket) { // TypeError is thrown when passing the second argument on Safari self.ws.send(data); } else { From 9c449675cbf65514f2a73b7ef8dce49409a4ba7c Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Sun, 3 Jan 2016 22:23:48 +0100 Subject: [PATCH 3/4] Fix tests in IE < 10 (WebSocket not supported) --- lib/transports/websocket.js | 2 +- test/support/env.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/transports/websocket.js b/lib/transports/websocket.js index 5a16e4d0..2f0e45ee 100644 --- a/lib/transports/websocket.js +++ b/lib/transports/websocket.js @@ -16,7 +16,7 @@ var BrowserWebSocket = global.WebSocket || global.MozWebSocket; * exposed by `ws` for Node environment. */ -var WebSocket = BrowserWebSocket || require('ws'); +var WebSocket = BrowserWebSocket || (typeof window !== 'undefined' ? null : require('ws')); /** * Module exports. diff --git a/test/support/env.js b/test/support/env.js index 31b346f8..3551fa45 100644 --- a/test/support/env.js +++ b/test/support/env.js @@ -3,7 +3,7 @@ // support in browsers and in node.js // some tests do not yet work in both exports.browser = !!global.window; -exports.wsSupport = !!((global.window && (window.WebSocket || window.MozWebSocket)) || require('ws')); +exports.wsSupport = !!(!global.window || window.WebSocket || window.MozWebSocket); var userAgent = global.navigator ? navigator.userAgent : ''; exports.isOldSimulator = ~userAgent.indexOf('iPhone OS 4') || ~userAgent.indexOf('iPhone OS 5'); From deb9805f3422cae3829b8bf1ca6029993ef5544d Mon Sep 17 00:00:00 2001 From: Damien Arrachequesne Date: Sun, 3 Jan 2016 23:19:52 +0100 Subject: [PATCH 4/4] Make browserify ignore ws instead of excluding now dev dependencies --- .zuul.yml | 3 +-- README.md | 2 +- support/browserify.js | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.zuul.yml b/.zuul.yml index 6cf6dad7..e38b404b 100644 --- a/.zuul.yml +++ b/.zuul.yml @@ -5,5 +5,4 @@ tunnel: authtoken: 6Aw8vTgcG5EvXdQywVvbh_3fMxvd4Q7dcL2caAHAFjV proto: tcp browserify: - - exclude: bufferutil - - exclude: utf-8-validate + - ignore: ws diff --git a/README.md b/README.md index 2cdcbecb..19d31491 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Engine.IO is a commonjs module, which means you can include it by using 1. build your app bundle ```bash - $ browserify app.js > bundle.js + $ browserify app.js -i ws > bundle.js ``` 1. include on your page diff --git a/support/browserify.js b/support/browserify.js index ad976a4c..9126a9db 100644 --- a/support/browserify.js +++ b/support/browserify.js @@ -28,8 +28,7 @@ function build(fn){ insertGlobalVars: { global: glob }, standalone: 'eio' }) - .exclude('bufferutil') - .exclude('utf-8-validate') + .ignore('ws') .bundle(); bundle.on('error', function (err) {