d; }, headers: function headers() { return req.headers; }, on: function on(name, listener) { // We need to attach listeners for data only on data event, which sets the // request to flowing mode. if (name === 'data' && !attached) { req.on('error', function (err) { return emitter.emit('error', err); }); req.on('end', function () { return emitter.emit('end'); }); req.on('data', function (data) { // force cast the data to a string // this is because we only deal with string data on http requests so far emitter.emit('data', '' + data); }); attached = true; } emitter.on(name, listener); } }; } function recastHTTPRes(res) { return { setHeader: function setHeader(header, value) { return res.setHeader(header, value); }, writeHead: function writeHead(status, headers) { return res.writeHead(status, headers); }, end: function end(body) { return res.end(body); } }; } function createWrappedHTTPServer() { var server = http.createServer(); var emitter = createSafeEmitter(); server.on('error', function (err) { return emitter.emit('error', err); }); server.on('request', function (req, res) { return emitter.emit('request', recastHTTPReq(req), recastHTTPRes(res)); }); var recast = _objectSpread({ address: function address() { return server.address(); }, listening: function listening() { return server.listening; }, listen: function listen(port, host, callback) { return server.listen(port, host, callback); }, instanceId: nextInstanceId }, emitter); origInstanceMap.set(nextInstanceId, server); nextInstanceId += 1; return recast; } module.exports = { ws: { Server: createWrappedWSServer }, http: { createServer: createWrappedHTTPServer } };