UNPKG

5.08 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var fragmentType_template_1 = require("./fragmentType.template");
4exports.withApolloTemplate = function (queries, mutations) {
5 return "import ApolloClient, { QueryOptions, OperationVariables, MutationOptions, ObservableQuery } from 'apollo-client';\n import { execute } from 'apollo-link';\n import { OperationDefinitionNode, DocumentNode } from 'graphql';\n import gql from 'graphql-tag';\n\n\n export type AbortableQueryWithArgs<T, A> = {\n $args(args: A): AbortableQuery<T>;\n $abort(): void;\n };\n\n export type AbortableQueryWithOptionalArgs<T, A> = {\n $fetch(): Promise<T>;\n $args(args: A): AbortableQuery<T>;\n $abort(): void;\n };\n \n export type AbortableQuery<T> = {\n $fetch(): Promise<T>;\n $abort(): void;\n };\n export interface FragmentableQueryWithArgs<T, A> {\n $fragment(fragment: string | DocumentNode): AbortableQueryWithArgs<T, A>;\n }\n export interface FragmentableQueryWithOptionalArgs<T, A> {\n $fragment(fragment: string | DocumentNode): AbortableQueryWithOptionalArgs<T, A>;\n }\n export interface FragmentableQuery<T> {\n $fragment(fragment: string | DocumentNode): AbortableQuery<T>;\n }\n \n export type AbortableMutationWithArgs<T, A> = {\n $args(args: A): AbortableMutation<T>;\n $abort(): void;\n };\n\n export type AbortableMutationWithOptionalArgs<T, A> = {\n $post(): Promise<T>;\n $args(args: A): AbortableMutation<T>;\n $abort(): void;\n };\n \n export type AbortableMutation<T> = {\n $post(): Promise<T>;\n $abort(): void;\n };\n \n export interface FragmentableMutationWithArgs<T, A> {\n $fragment(fragment: string | DocumentNode): AbortableMutationWithArgs<T, A>;\n }\n export interface FragmentableMutationWithOptionalArgs<T, A> {\n $fragment(fragment: string | DocumentNode): AbortableMutationWithOptionalArgs<T, A>;\n }\n export interface FragmentableMutation<T> {\n $fragment(fragment: string | DocumentNode): AbortableMutation<T>;\n }\n \n \n " + fragmentType_template_1.guessFragmentTypeTemplate + "\n \n export const apiProvider = (apolloClient: ApolloClient<any>) => {\n const abortableQuery = <T, A = null>(\n query: DocumentNode,\n args: boolean\n ): A extends null ? AbortableQuery<T> : AbortableQueryWithArgs<T, A> => {\n let observableQuery: ZenObservable.Subscription;\n const parsedQuery = query.definitions[0] as OperationDefinitionNode;\n const queryName = parsedQuery.name.value;\n let variables: { [x: string]: any } = {};\n \n function $abort() {\n if (observableQuery && !observableQuery.closed) {\n observableQuery.unsubscribe();\n }\n }\n async function $fetch() {\n return new Promise<T>((resolve, reject) => {\n observableQuery = execute(apolloClient.link, {\n query,\n variables,\n }).subscribe({\n next: ({ data, errors }) => {\n if (errors) {\n reject(errors);\n } else {\n resolve(data[queryName]);\n }\n },\n error: error => reject(error),\n });\n });\n }\n function $args(args) {\n variables = args;\n return {\n $abort,\n $fetch,\n };\n }\n if (args) {\n return {\n $abort,\n $args,\n } as any;\n } else {\n return {\n $abort,\n $fetch,\n } as any;\n }\n };\n const abortableMutation = <T, A = null>(\n mutation: DocumentNode,\n args: boolean\n ): AbortableMutationWithArgs<T, A> => {\n let observableQuery: ZenObservable.Subscription;\n const parsedQuery = mutation.definitions[0] as OperationDefinitionNode;\n const mutationName = parsedQuery.name.value;\n let variables: { [x: string]: any } = {};\n \n function $abort() {\n if (observableQuery && !observableQuery.closed) {\n observableQuery.unsubscribe();\n }\n }\n async function $post() {\n return new Promise<T>((resolve, reject) => {\n observableQuery = execute(apolloClient.link, {\n query: mutation,\n variables,\n }).subscribe({\n next: ({ data, errors }) => {\n if (errors) {\n reject(errors);\n } else {\n resolve(data[mutationName]);\n }\n },\n error: error => reject(error),\n });\n });\n }\n function $args(args) {\n variables = args;\n return {\n $abort,\n $post,\n };\n }\n if (args) {\n return {\n $abort,\n $args,\n } as any;\n } else {\n return {\n $abort,\n $post,\n } as any;\n }\n };\n\n return {\n " + queries.join('\n') + "\n " + mutations.join('\n') + "\n }\n };\n\n ";
6};