UNPKG

@shopify/react-graphql

Version:

Tools for creating type-safe and asynchronous GraphQL components for React

54 lines (43 loc) 1.26 kB
'use strict'; 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;