@pyramation/postgraphile
Version:
A GraphQL schema created by reflection over a PostgreSQL schema 🐘 (previously known as PostGraphQL)
62 lines • 4.53 kB
JavaScript
;
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==