UNPKG

@graphql-tools/executor-apollo-link

Version:

A set of utils for faster development of GraphQL tools

49 lines (48 loc) 1.83 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExecutorLink = void 0; const tslib_1 = require("tslib"); const apolloImport = tslib_1.__importStar(require("@apollo/client")); const utils_1 = require("@graphql-tools/utils"); const apollo = (_a = apolloImport === null || apolloImport === void 0 ? void 0 : apolloImport.default) !== null && _a !== void 0 ? _a : apolloImport; function createApolloRequestHandler(executor) { return function ApolloRequestHandler(operation) { return new apollo.Observable(observer => { const executionRequest = { document: operation.query, variables: operation.variables, operationName: operation.operationName, extensions: operation.extensions, context: operation.getContext(), }; Promise.resolve(executor(executionRequest)) .then(async (results) => { if ((0, utils_1.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 ExecutorLink extends apollo.ApolloLink { constructor(executor) { super(createApolloRequestHandler(executor)); } } exports.ExecutorLink = ExecutorLink;