@graphql-mesh/serve-runtime
Version:
42 lines (41 loc) • 1.86 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.useCompleteSubscriptionsOnSchemaChange = useCompleteSubscriptionsOnSchemaChange;
const graphql_yoga_1 = require("graphql-yoga");
function useCompleteSubscriptionsOnSchemaChange() {
const activeSubs = [];
return {
onSchemaChange() {
while (activeSubs.length) {
activeSubs.pop()?.();
}
},
onSubscribe() {
return {
onSubscribeResult({ result, setResult }) {
if ((0, graphql_yoga_1.isAsyncIterable)(result)) {
setResult(graphql_yoga_1.Repeater.race([
result,
new graphql_yoga_1.Repeater((_push, stop) => {
function complete() {
stop((0, graphql_yoga_1.createGraphQLError)('subscription has been closed due to a schema reload', {
extensions: {
code: 'SUBSCRIPTION_SCHEMA_RELOAD',
},
}));
}
activeSubs.push(complete);
// eslint-disable-next-line @typescript-eslint/no-floating-promises
stop.then(() => {
// eslint-disable-next-line @typescript-eslint/no-floating-promises
result.return?.();
activeSubs.splice(activeSubs.indexOf(complete), 1);
});
}),
]));
}
},
};
},
};
}
;