UNPKG

@graphql-mesh/apollo-link

Version:
52 lines (47 loc) 1.82 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); const core = require('@apollo/client/core'); const utils = require('@graphql-tools/utils'); const graphql = require('graphql'); const ROOT_VALUE = {}; function createMeshApolloRequestHandler(options) { return function meshApolloRequestHandler(operation) { const operationAst = graphql.getOperationAST(operation.query, operation.operationName); if (!operationAst) { throw new Error('GraphQL operation not found'); } const operationFn = operationAst.operation === 'subscription' ? options.subscribe : options.execute; return new core.Observable(observer => { Promise.resolve() .then(async () => { const results = await operationFn(operation.query, operation.variables, operation.getContext(), ROOT_VALUE, operation.operationName); if (utils.isAsyncIterable(results)) { for await (const result of results) { if (observer.closed) { return; } observer.next(result); } observer.complete(); } else { if (!observer.closed) { observer.next(results); observer.complete(); } } }) .catch(error => { if (!observer.closed) { observer.error(error); } }); }); }; } class MeshApolloLink extends core.ApolloLink { constructor(options) { super(createMeshApolloRequestHandler(options)); } } exports.MeshApolloLink = MeshApolloLink;