diff --git a/lib/connect-utils.js b/lib/connect-utils.js index 4ef366920..5dd949304 100644 --- a/lib/connect-utils.js +++ b/lib/connect-utils.js @@ -51,16 +51,8 @@ var connectUtils = { var socket = options.get("socket"); var template = fs.readFileSync(config.templates.connector, "utf-8"); - var connectionUrl = require("url").parse(socket.get("namespace")); var url = connectUtils.getConnectionUrl(options); - /** - * If namespace is a URL, just return it - */ - if (connectionUrl.host && connectionUrl.protocol) { - url = "'%s'".replace("%s", socket.get("namespace")); - } - template = template .replace("%path%", socket.get("path")) .replace("%url%", url); @@ -69,6 +61,12 @@ var connectUtils = { }, getConnectionUrl: function (options) { + var socketOpts = options.get('socket').toJS(); + + if (!socketOpts.namespace.match(/^\//)) { + socketOpts.namespace = "/" + socketOpts.namespace; + } + var protocol = ""; var withHostnamePort = "'{protocol}' + location.hostname + ':{port}{ns}'"; // var withHost = "'{protocol}' + location.host + '{ns}'"; // @@ -82,17 +80,18 @@ var connectUtils = { string = withHostnamePort; } - var socketOpts = options.get('socket'); - - if (socketOpts.has('domain')) { + if (socketOpts.domain) { string = withDomain; + if (typeof socketOpts.domain === "function") { + socketOpts.domain = socketOpts.domain.call(null, options); + } } return string .replace("{protocol}", protocol) .replace("{port}", options.get("port")) - .replace("{domain}", socketOpts.get("domain")) - .replace("{ns}", socketOpts.get("namespace")); + .replace("{domain}", socketOpts.domain) + .replace("{ns}", socketOpts.namespace); }, /** * @param {Object} [options] diff --git a/test/specs/utils/utils.connect.js b/test/specs/utils/utils.connect.js index affc82103..b208e6a28 100644 --- a/test/specs/utils/utils.connect.js +++ b/test/specs/utils/utils.connect.js @@ -89,4 +89,35 @@ describe("Connection utils", function () { var actual = utils.socketConnector(options); assert.include(actual, "___browserSync___.io('localhost:3000/browser-sync', ___browserSync___.socketConfig);"); }); + it("should allow setting of the socket domain + namespace", function () { + var options = merge({ + port: 3000, + server: "test/fixtures", + mode: "server", + socket: { + namespace: 'shane', + domain: 'localhost:3000' + } + }); + var actual = utils.socketConnector(options); + assert.include(actual, "___browserSync___.io('localhost:3000/shane', ___browserSync___.socketConfig);"); + }); + it("should allow setting of the socket domain (fn)+ namespace", function () { + var options = merge({ + port: 3000, + server: "test/fixtures", + mode: "server", + urls: { + local: 'http://localhost:3002' + }, + socket: { + namespace: 'shane', + domain: function (options) { + return options.getIn(['urls', 'local']); + } + } + }); + var actual = utils.socketConnector(options); + assert.include(actual, "___browserSync___.io('http://localhost:3002/shane', ___browserSync___.socketConfig);"); + }); });