You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.3 KiB
76 lines
2.3 KiB
"use strict"; |
|
var enableDestroy = require("server-destroy"); |
|
var _ = require("../lodash.custom"); |
|
/** |
|
* Browsersync server |
|
* Three available modes: Snippet, Server or Proxy |
|
*/ |
|
module.exports.plugin = function (bs) { |
|
var debug = bs.debug; |
|
var proxy = bs.options.get("proxy"); |
|
var type = bs.options.get("mode"); |
|
var bsServer = createServer(bs); |
|
if (type === "server" || type === "snippet") { |
|
debug("Static Server running ({magenta:%s}) ...", bs.options.get("scheme")); |
|
} |
|
if (proxy) { |
|
debug("Proxy running, proxing: {magenta:%s}", proxy.get("target")); |
|
} |
|
if (bsServer) { |
|
/** |
|
* Allow server to be destroyed gracefully |
|
*/ |
|
enableDestroy(bsServer.server); |
|
/** |
|
* Listen on the available port |
|
*/ |
|
bsServer.server.listen(bs.options.get("port"), bs.options.get("listen")); |
|
/** |
|
* Hack to deal with https://github.com/socketio/socket.io/issues/1602#issuecomment-224270022 |
|
*/ |
|
bs.registerCleanupTask(function () { |
|
if (bs.io && bs.io.sockets) { |
|
setCloseReceived(bs.io.sockets); |
|
} |
|
if (bs.ui && bs.ui.socket) { |
|
setCloseReceived(bs.ui.socket); |
|
} |
|
}); |
|
/** |
|
* Destroy the server on cleanup |
|
*/ |
|
bs.registerCleanupTask(function () { |
|
bsServer.server.destroy(); |
|
}); |
|
} |
|
function setCloseReceived(io) { |
|
Object.keys(io.sockets).forEach(function (key) { |
|
_.set(io.sockets[key], "conn.transport.socket._closeReceived", true); |
|
}); |
|
} |
|
debug("Running mode: %s", type.toUpperCase()); |
|
return { |
|
server: bsServer.server, |
|
app: bsServer.app |
|
}; |
|
}; |
|
/** |
|
* Launch the server for serving the client JS plus static files |
|
* @param {BrowserSync} bs |
|
* @returns {{staticServer: (http.Server), proxyServer: (http.Server)}} |
|
*/ |
|
function createServer(bs) { |
|
var proxy = bs.options.get("proxy"); |
|
var server = bs.options.get("server"); |
|
if (!proxy && !server) { |
|
return require("./snippet-server")(bs); |
|
} |
|
if (proxy) { |
|
return require("./proxy-server")(bs); |
|
} |
|
if (server) { |
|
return require("./static-server")(bs); |
|
} |
|
} |
|
module.exports.createServer = createServer; |
|
//# sourceMappingURL=index.js.map
|