UNPKG

@pyramation/postgraphile

Version:

A GraphQL schema created by reflection over a PostgreSQL schema 🐘 (previously known as PostGraphQL)

62 lines 4.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* tslint:disable:no-any */ const stream_1 = require("stream"); function setupServerSentEvents(req, res, options) { const { _emitter } = options; // Making sure these options are set. req.socket.setTimeout(0); req.socket.setNoDelay(true); req.socket.setKeepAlive(true); // Set headers for Server-Sent Events. res.statusCode = 200; res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); if (req.httpVersionMajor >= 2) { // NOOP } else { res.setHeader('Connection', 'keep-alive'); } const koaCtx = req['_koaCtx']; const isKoa = !!koaCtx; const stream = isKoa ? new stream_1.PassThrough() : null; if (isKoa) { koaCtx.response.body = stream; koaCtx.compress = false; } const sse = (str) => { if (isKoa) { stream.write(str); } else { res.write(str); // support running within the compression middleware. // https://github.com/expressjs/compression#server-sent-events if (typeof res.flushHeaders === 'function') res.flushHeaders(); } }; // Notify client that connection is open. sse('event: open\n\n'); // Setup listeners. const schemaChangedCb = () => sse('event: change\ndata: schema\n\n'); if (options.watchPg) _emitter.on('schemas:changed', schemaChangedCb); // Clean up when connection closes. const cleanup = () => { if (stream) { stream.end(); } else { res.end(); } _emitter.removeListener('schemas:changed', schemaChangedCb); }; req.on('close', cleanup); req.on('finish', cleanup); req.on('error', cleanup); _emitter.on('test:close', cleanup); } exports.default = setupServerSentEvents; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBTZXJ2ZXJTZW50RXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Bvc3RncmFwaGlsZS9odHRwL3NldHVwU2VydmVyU2VudEV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJCQUEyQjtBQUMzQixtQ0FBcUM7QUFJckMsU0FBd0IscUJBQXFCLENBQzNDLEdBQW9CLEVBQ3BCLEdBQW1CLEVBQ25CLE9BQW9DO0lBRXBDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFN0IscUNBQXFDO0lBQ3JDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTlCLHNDQUFzQztJQUN0QyxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUNyQixHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25ELEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLElBQUksR0FBRyxDQUFDLGdCQUFnQixJQUFJLENBQUMsRUFBRTtRQUM3QixPQUFPO0tBQ1I7U0FBTTtRQUNMLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQzNDO0lBQ0QsTUFBTSxNQUFNLEdBQUksR0FBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxvQkFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNoRCxJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUM5QixNQUFNLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztLQUN6QjtJQUVELE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7UUFDMUIsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCO2FBQU07WUFDTCxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRWYscURBQXFEO1lBQ3JELDhEQUE4RDtZQUM5RCxJQUFJLE9BQVEsR0FBVyxDQUFDLFlBQVksS0FBSyxVQUFVO2dCQUFHLEdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNsRjtJQUNILENBQUMsQ0FBQztJQUVGLHlDQUF5QztJQUN6QyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUV2QixtQkFBbUI7SUFDbkIsTUFBTSxlQUFlLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFFckUsSUFBSSxPQUFPLENBQUMsT0FBTztRQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFckUsbUNBQW1DO0lBQ25DLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtRQUNuQixJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUNkO2FBQU07WUFDTCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDWDtRQUNELFFBQVEsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDO0lBQ0YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQTlERCx3Q0E4REMifQ==