@zendesk/laika
Version:
Test, mock, intercept and modify Apollo Client's operations — in both browser and unit tests!
25 lines • 1.07 kB
JavaScript
import { ApolloLink, Observable } from '@apollo/client/core';
/**
* Creates a lazy-loadable Apollo Link.
* Useful when you want to use a given Apollo Link in a production environment conditionally,
* i.e. only load it when necessary.
* @param linkPromise A Promise to an Apollo Link to wrap.
*/
export const createLazyLoadableLink = (linkPromise) => new ApolloLink((operation, forward) => {
const linkObservable = new Observable((observer) => {
void linkPromise.then((link) => {
observer.next(link);
observer.complete();
}, (error) => {
observer.error(error);
});
});
return linkObservable.flatMap((link) => {
const actualLinkObservable = link === null || link === void 0 ? void 0 : link.request(operation, forward);
if (!actualLinkObservable) {
throw new Error(`LazyLoadableLink: Incorrect linkPromise provided or it's request function returned null`);
}
return actualLinkObservable;
});
});
//# sourceMappingURL=createLazyLoadableLink.js.map