UNPKG

rxdb-server

Version:
127 lines (126 loc) 3.55 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.RxServerAdapterExpress = exports.HTTP_SERVER_BY_EXPRESS = void 0; var _express = _interopRequireDefault(require("express")); var _cors = _interopRequireDefault(require("cors")); var _core = require("rxdb/plugins/core"); var HTTP_SERVER_BY_EXPRESS = exports.HTTP_SERVER_BY_EXPRESS = new WeakMap(); var RxServerAdapterExpress = exports.RxServerAdapterExpress = { async create() { var app = (0, _express.default)(); app.use(_express.default.json()); return app; }, setCors(serverApp, path, cors) { serverApp.use('/' + path + '/*splat', (0, _cors.default)({ origin: cors, // some legacy browsers (IE11, various SmartTVs) choke on 204 optionsSuccessStatus: 200, credentials: true })); }, getRequestBody(req) { return req.body; }, getRequestHeaders(req) { return req.headers; }, getRequestQuery(req) { return req.query; }, onRequestClose(req, fn) { req.on('close', () => { fn(); }); }, setResponseHeader(res, k, v) { res.setHeader(k, v); }, responseWrite(res, data) { res.write(data); }, endResponseJson(res, data) { res.json(data); }, endResponse(res) { res.end(); }, async closeConnection(response, code, message) { var responseWrite = { code, error: true, message }; response.status(code); response.set("Connection", "close"); await response.write(JSON.stringify(responseWrite)); response.end(); }, setSSEHeaders(res) { res.writeHead(200, { /** * Use exact these headers to make is less likely * for people to have problems. * @link https://www.youtube.com/watch?v=0PcMuYGJPzM */ 'Content-Type': 'text/event-stream; charset=utf-8', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache', /** * @link https://github.com/pubkey/rxdb-server/pull/58 */ 'access-control-allow-credentials': 'true', /** * Required for nginx * @link https://stackoverflow.com/q/61029079/3443137 */ 'X-Accel-Buffering': 'no' }); res.flushHeaders(); }, get(serverApp, path, handler) { serverApp.get(path, handler); }, post(serverApp, path, handler) { serverApp.post(path, handler); }, all(serverApp, path, handler) { serverApp.all(path, handler); }, async listen(serverApp, port, hostname) { var httpServer = await new Promise((res, rej) => { var ret = (0, _core.ensureNotFalsy)(serverApp).listen(port, hostname, () => { res(ret); }); }); HTTP_SERVER_BY_EXPRESS.set(serverApp, httpServer); }, async close(serverApp) { var httpServer = (0, _core.getFromMapOrThrow)(HTTP_SERVER_BY_EXPRESS, serverApp); await new Promise((res, rej) => { httpServer.close(err => { if (err) { rej(err); } else { res(); } }); /** * By default it will await all ongoing connections * before it closes. So we have to close it directly. * @link https://stackoverflow.com/a/36830072/3443137 */ setImmediate(() => httpServer.emit('close')); }); }, async closeAllConnections(serverApp) { var httpServer = HTTP_SERVER_BY_EXPRESS.get(serverApp); if (httpServer) { await httpServer.closeAllConnections(); } } }; //# sourceMappingURL=index.js.map