Files
apollo/types/options.d.ts
T
2019-09-20 00:10:50 +02:00

92 lines
3.1 KiB
TypeScript

import Vue from 'vue'
import {
WatchQueryOptions,
OperationVariables,
MutationOptions,
SubscriptionOptions,
SubscribeToMoreOptions,
ObservableQuery,
NetworkStatus,
ApolloQueryResult,
ApolloError
} from 'apollo-client'
import { FetchResult } from 'apollo-link'
import { ServerError, ServerParseError } from 'apollo-link-http-common'
import { DocumentNode, GraphQLError } 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?: ((context: any) => any) | boolean
client?: string
deep?: boolean
subscribeToMore?: VueApolloSubscribeToMoreOptions<Result, Variables> | VueApolloSubscribeToMoreOptions<Result, Variables>[]
}
/* 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 }