/
linkToSubscriber.ts
25 lines (23 loc) · 952 Bytes
/
linkToSubscriber.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import { ApolloLink, execute } from '@apollo/client/link/core';
import { Observable } from '@apollo/client/utilities';
import { Subscriber, ExecutionParams, ExecutionResult, observableToAsyncIterable } from '@graphql-tools/utils';
export const linkToSubscriber =
(link: ApolloLink): Subscriber =>
async <TReturn, TArgs, TContext>(
params: ExecutionParams<TArgs, TContext>
): Promise<ExecutionResult<TReturn> | AsyncIterableIterator<ExecutionResult<TReturn>>> => {
const { document, variables, extensions, context, info, operationName } = params;
return observableToAsyncIterable<ExecutionResult<TReturn>>(
execute(link, {
query: document,
variables,
context: {
graphqlContext: context,
graphqlResolveInfo: info,
clientAwareness: {},
},
extensions,
operationName,
}) as Observable<ExecutionResult<TReturn>>
)[Symbol.asyncIterator]();
};