@shopify/react-graphql
Version:
Tools for creating type-safe and asynchronous GraphQL components for React
54 lines (43 loc) • 1.26 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var apolloLink = require('apollo-link');
function createSsrExtractableLink() {
return new SsrExtractableLink();
}
class SsrExtractableLink extends apolloLink.ApolloLink {
constructor(...args) {
super(...args);
this.operations = new Set();
}
resolveAll(then) {
if (this.operations.size > 0) {
return Promise.all([...this.operations]).then(then);
}
return then();
}
request(operation, nextLink) {
if (nextLink == null) {
throw new Error('SsrExtractableLink must not be the last link in the chain.');
}
let operationDone;
const promise = new Promise(resolve => {
operationDone = () => {
this.operations.delete(promise);
resolve();
};
});
this.operations.add(promise);
return new apolloLink.Observable(observer => {
return nextLink(operation).subscribe({
complete() {
observer.complete();
operationDone();
},
next: observer.next.bind(observer),
error: observer.next.bind(observer)
});
});
}
}
exports.SsrExtractableLink = SsrExtractableLink;
exports.createSsrExtractableLink = createSsrExtractableLink;