index.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. "use strict";
  2. var enableDestroy = require("server-destroy");
  3. var _ = require("../lodash.custom");
  4. /**
  5. * Browsersync server
  6. * Three available modes: Snippet, Server or Proxy
  7. */
  8. module.exports.plugin = function (bs) {
  9. var debug = bs.debug;
  10. var proxy = bs.options.get("proxy");
  11. var type = bs.options.get("mode");
  12. var bsServer = createServer(bs);
  13. if (type === "server" || type === "snippet") {
  14. debug("Static Server running ({magenta:%s}) ...", bs.options.get("scheme"));
  15. }
  16. if (proxy) {
  17. debug("Proxy running, proxing: {magenta:%s}", proxy.get("target"));
  18. }
  19. if (bsServer) {
  20. /**
  21. * Allow server to be destroyed gracefully
  22. */
  23. enableDestroy(bsServer.server);
  24. /**
  25. * Listen on the available port
  26. */
  27. bsServer.server.listen(bs.options.get("port"), bs.options.get("listen"));
  28. /**
  29. * Hack to deal with https://github.com/socketio/socket.io/issues/1602#issuecomment-224270022
  30. */
  31. bs.registerCleanupTask(function () {
  32. if (bs.io && bs.io.sockets) {
  33. setCloseReceived(bs.io.sockets);
  34. }
  35. if (bs.ui && bs.ui.socket) {
  36. setCloseReceived(bs.ui.socket);
  37. }
  38. });
  39. /**
  40. * Destroy the server on cleanup
  41. */
  42. bs.registerCleanupTask(function () {
  43. bsServer.server.destroy();
  44. });
  45. }
  46. function setCloseReceived(io) {
  47. Object.keys(io.sockets).forEach(function (key) {
  48. _.set(io.sockets[key], "conn.transport.socket._closeReceived", true);
  49. });
  50. }
  51. debug("Running mode: %s", type.toUpperCase());
  52. return {
  53. server: bsServer.server,
  54. app: bsServer.app
  55. };
  56. };
  57. /**
  58. * Launch the server for serving the client JS plus static files
  59. * @param {BrowserSync} bs
  60. * @returns {{staticServer: (http.Server), proxyServer: (http.Server)}}
  61. */
  62. function createServer(bs) {
  63. var proxy = bs.options.get("proxy");
  64. var server = bs.options.get("server");
  65. if (!proxy && !server) {
  66. return require("./snippet-server")(bs);
  67. }
  68. if (proxy) {
  69. return require("./proxy-server")(bs);
  70. }
  71. if (server) {
  72. return require("./static-server")(bs);
  73. }
  74. }
  75. module.exports.createServer = createServer;
  76. //# sourceMappingURL=index.js.map