import type { ApolloClient, ApolloQueryResult, FetchResult, MutationOptions, Observable, ObservableQuery, OperationVariables, QueryOptions, SubscriptionOptions, WatchQueryOptions, } from '@apollo/client/core/index.js' import type { ApolloProvider } from './apollo-provider' import type { VueApolloQueryDefinition, VueApolloSubscriptionDefinition, } from './options' interface SmartApollo { skip: boolean refresh: () => void start: () => void stop: () => void } type PickedObservableQuery = Pick export interface SmartQuery extends SmartApollo, PickedObservableQuery { loading: boolean } export type SmartSubscription = SmartApollo interface ClientOptions { client?: string } interface ApolloClientMethods { query: (options: QueryOptions & ClientOptions) => Promise> watchQuery: (options: WatchQueryOptions & ClientOptions) => ObservableQuery mutate: (options: MutationOptions & ClientOptions) => Promise> subscribe: (options: SubscriptionOptions & ClientOptions) => Observable> } export interface DollarApollo extends ApolloClientMethods { readonly vm: V readonly queries: Record> readonly subscriptions: Record> readonly provider: ApolloProvider readonly loading: boolean // writeonly not yet implemented in TypeScript: https://github.com/Microsoft/TypeScript/issues/21759 /* writeonly */ skipAllQueries: boolean /* writeonly */ skipAllSubscriptions: boolean /* writeonly */ skipAll: boolean getClient: () => ApolloClient addSmartQuery: (key: string, options: VueApolloQueryDefinition) => SmartQuery addSmartSubscription: (key: string, options: VueApolloSubscriptionDefinition) => SmartSubscription }