UNPKG

@vue/apollo-option

Version:

Use Apollo and GraphQL with Vue.js using the `apollo` option

88 lines (71 loc) 3 kB
import type { ApolloError, ApolloQueryResult, OperationVariables, SubscribeToMoreOptions, SubscriptionOptions, WatchQueryOptions, } from '@apollo/client/core/index.js' import type { DocumentNode } from 'graphql' // import { DeepApplyThisType } from './utils' /* Component options */ export interface AllVueApolloComponentSpecialOptions { $skip: boolean $skipAllQueries: boolean $skipAllSubscriptions: boolean $deep: boolean $client: string $loadingKey: string $watchLoading: WatchLoading $error: ErrorHandler $query: Partial<VueApolloQueryDefinition> $subscribe: VueApolloSubscriptionProperty } export type VueApolloComponentSpecialOptions = Partial<AllVueApolloComponentSpecialOptions> interface PrivateVueApolloComponentOptions extends VueApolloComponentSpecialOptions { [key: string]: VueApolloQueryProperty | VueApolloComponentSpecialOptions[keyof VueApolloComponentSpecialOptions] } // DeepApplyThisType is buggy: https://github.com/microsoft/TypeScript/issues/33392 // export type VueApolloComponentOptions<Instance> = DeepApplyThisType<PrivateVueApolloComponentOptions, Instance> export type VueApolloComponentOptions<Instance> = PrivateVueApolloComponentOptions & ThisType<Instance> /* Special component options */ export type WatchLoading = (isLoading: boolean, countModifier: number) => void export type ErrorHandler = (error: ApolloError) => void /* Query */ type QueryVariables<Variables = OperationVariables> = (() => Variables) | Variables export type VueApolloQueryProperty = DocumentNode | VueApolloQueryDefinition | (() => VueApolloQueryDefinition | null) // exclude query prop because it causes type incorrectly error type WatchQueryOptionsWithoutQuery = Omit<WatchQueryOptions, 'query'> export interface VueApolloQueryDefinition<Result = any, Variables = OperationVariables> extends WatchQueryOptionsWithoutQuery { query: DocumentNode | (() => DocumentNode | null) variables?: QueryVariables<Variables> update?: (data: Result) => any result?: (result: ApolloQueryResult<Result>, key: string) => void error?: ErrorHandler manual?: boolean loadingKey?: string watchLoading?: WatchLoading skip?: (() => boolean) | boolean prefetch?: boolean client?: string deep?: boolean subscribeToMore?: VueApolloSubscribeToMoreOptions<Result, Variables> | VueApolloSubscribeToMoreOptions<Result, Variables>[] throttle?: number debounce?: number } /* Subscriptions */ export interface VueApolloSubscribeToMoreOptions<Result = any, Variables = OperationVariables> extends Omit<SubscribeToMoreOptions<Result, Variables>, 'variables'> { variables?: QueryVariables<Variables> } export interface VueApolloSubscriptionDefinition<Variables = OperationVariables> extends Omit<SubscriptionOptions<Variables>, 'variables'> { variables?: QueryVariables<Variables> client?: string } export type VueApolloSubscriptionProperty = VueApolloSubscriptionDefinition | { [key: string]: VueApolloSubscriptionDefinition }