| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 'use strict';/* eslint-disable  class-methods-use-this,  func-names*/const sockjs = require('sockjs');const BaseServer = require('./BaseServer');// Workaround for sockjs@~0.3.19// sockjs will remove Origin header, however Origin header is required for checking host.// See https://github.com/webpack/webpack-dev-server/issues/1604 for more information{  const SockjsSession = require('sockjs/lib/transport').Session;  const decorateConnection = SockjsSession.prototype.decorateConnection;  SockjsSession.prototype.decorateConnection = function(req) {    decorateConnection.call(this, req);    const connection = this.connection;    if (      connection.headers &&      !('origin' in connection.headers) &&      'origin' in req.headers    ) {      connection.headers.origin = req.headers.origin;    }  };}module.exports = class SockJSServer extends BaseServer {  // options has: error (function), debug (function), server (http/s server), path (string)  constructor(server) {    super(server);    this.socket = sockjs.createServer({      // Use provided up-to-date sockjs-client      sockjs_url: '/__webpack_dev_server__/sockjs.bundle.js',      // Limit useless logs      log: (severity, line) => {        if (severity === 'error') {          this.server.log.error(line);        } else {          this.server.log.debug(line);        }      },    });    this.socket.installHandlers(this.server.listeningApp, {      prefix: this.server.sockPath,    });  }  send(connection, message) {    // prevent cases where the server is trying to send data while connection is closing    if (connection.readyState !== 1) {      return;    }    connection.write(message);  }  close(connection) {    connection.close();  }  // f should be passed the resulting connection and the connection headers  onConnection(f) {    this.socket.on('connection', (connection) => {      f(connection, connection ? connection.headers : null);    });  }  onConnectionClose(connection, f) {    connection.on('close', f);  }};
 |