X-Git-Url: https://git.josue.xyz/?p=VSoRC%2F.git;a=blobdiff_plain;f=node_modules%2Fexpress-ws%2Flib%2Findex.js;fp=node_modules%2Fexpress-ws%2Flib%2Findex.js;h=8e3e696016762cbd58d51efbfb36ef26f7668fd5;hp=0000000000000000000000000000000000000000;hb=2b1de44527123fab80901384e0f374367500ced8;hpb=e79e4a5a87f3e84f7c1777f10a954453a69bf540 diff --git a/node_modules/express-ws/lib/index.js b/node_modules/express-ws/lib/index.js new file mode 100644 index 0000000..8e3e696 --- /dev/null +++ b/node_modules/express-ws/lib/index.js @@ -0,0 +1,110 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = expressWs; + +var _http = require('http'); + +var _http2 = _interopRequireDefault(_http); + +var _express = require('express'); + +var _express2 = _interopRequireDefault(_express); + +var _ws = require('ws'); + +var _ws2 = _interopRequireDefault(_ws); + +var _websocketUrl = require('./websocket-url'); + +var _websocketUrl2 = _interopRequireDefault(_websocketUrl); + +var _addWsMethod = require('./add-ws-method'); + +var _addWsMethod2 = _interopRequireDefault(_addWsMethod); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function expressWs(app, httpServer) { + var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var server = httpServer; + + if (server === null || server === undefined) { + /* No HTTP server was explicitly provided, create one for our Express application. */ + server = _http2.default.createServer(app); + + app.listen = function serverListen() { + var _server; + + return (_server = server).listen.apply(_server, arguments); + }; + } + + /* Make our custom `.ws` method available directly on the Express application. You should + * really be using Routers, though. */ + (0, _addWsMethod2.default)(app); + + /* Monkeypatch our custom `.ws` method into Express' Router prototype. This makes it possible, + * when using the standard Express Router, to use the `.ws` method without any further calls + * to `makeRouter`. When using a custom router, the use of `makeRouter` may still be necessary. + * + * This approach works, because Express does a strange mixin hack - the Router factory + * function is simultaneously the prototype that gets assigned to the resulting Router + * object. */ + if (!options.leaveRouterUntouched) { + (0, _addWsMethod2.default)(_express2.default.Router); + } + + // allow caller to pass in options to WebSocketServer constructor + var wsOptions = options.wsOptions || {}; + wsOptions.server = server; + var wsServer = new _ws2.default.Server(wsOptions); + + wsServer.on('connection', function (socket, request) { + if ('upgradeReq' in socket) { + request = socket.upgradeReq; + } + + request.ws = socket; + request.wsHandled = false; + + /* By setting this fake `.url` on the request, we ensure that it will end up in the fake + * `.get` handler that we defined above - where the wrapper will then unpack the `.ws` + * property, indicate that the WebSocket has been handled, and call the actual handler. */ + request.url = (0, _websocketUrl2.default)(request.url); + + var dummyResponse = new _http2.default.ServerResponse(request); + + dummyResponse.writeHead = function writeHead(statusCode) { + if (statusCode > 200) { + /* Something in the middleware chain signalled an error. */ + dummyResponse._header = ''; + socket.close(); + } + }; + + app.handle(request, dummyResponse, function () { + if (!request.wsHandled) { + /* There was no matching WebSocket-specific route for this request. We'll close + * the connection, as no endpoint was able to handle the request anyway... */ + socket.close(); + } + }); + }); + + return { + app: app, + getWss: function getWss() { + return wsServer; + }, + applyTo: function applyTo(router) { + (0, _addWsMethod2.default)(router); + } + }; +} /* This module does a lot of monkeypatching, but unfortunately that appears to be the only way to + * accomplish this kind of stuff in Express. + * + * Here be dragons. */ \ No newline at end of file