{"version":3,"sources":["../src/core/networkStatus.ts","../src/util/Observable.ts","../src/util/arrays.ts","../src/errors/ApolloError.ts","../src/core/types.ts","../src/core/ObservableQuery.ts","../src/data/mutations.ts","../src/data/queries.ts","../src/util/capitalizeFirstLetter.ts","../src/core/LocalState.ts","../src/util/observables.ts","../src/core/QueryManager.ts","../src/data/store.ts","../src/version.ts","../src/ApolloClient.ts"],"names":["LinkObservable"],"mappings":"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","sourcesContent":["/**\n * The current status of a query’s execution in our system.\n */\nexport enum NetworkStatus {\n /**\n * The query has never been run before and the query is now currently running. A query will still\n * have this network status even if a partial data result was returned from the cache, but a\n * query was dispatched anyway.\n */\n loading = 1,\n\n /**\n * If `setVariables` was called and a query was fired because of that then the network status\n * will be `setVariables` until the result of that query comes back.\n */\n setVariables = 2,\n\n /**\n * Indicates that `fetchMore` was called on this query and that the query created is currently in\n * flight.\n */\n fetchMore = 3,\n\n /**\n * Similar to the `setVariables` network status. It means that `refetch` was called on a query\n * and the refetch request is currently in flight.\n */\n refetch = 4,\n\n /**\n * Indicates that a polling query is currently in flight. So for example if you are polling a\n * query every 10 seconds then the network status will switch to `poll` every 10 seconds whenever\n * a poll request has been sent but not resolved.\n */\n poll = 6,\n\n /**\n * No request is in flight for this query, and no errors happened. Everything is OK.\n */\n ready = 7,\n\n /**\n * No request is in flight for this query, but one or more errors were detected.\n */\n error = 8,\n}\n\n/**\n * Returns true if there is currently a network request in flight according to a given network\n * status.\n */\nexport function isNetworkRequestInFlight(\n networkStatus: NetworkStatus,\n): boolean {\n return networkStatus < 7;\n}\n","// This simplified polyfill attempts to follow the ECMAScript Observable proposal.\n// See https://github.com/zenparsing/es-observable\nimport { Observable as LinkObservable } from 'apollo-link';\n\nexport type Subscription = ZenObservable.Subscription;\nexport type Observer = ZenObservable.Observer;\n\nimport $$observable from 'symbol-observable';\n\n// rxjs interopt\nexport class Observable extends LinkObservable {\n public [$$observable]() {\n return this;\n }\n\n public ['@@observable' as any]() {\n return this;\n }\n}\n","export function isNonEmptyArray(value?: ArrayLike): value is Array {\n return Array.isArray(value) && value.length > 0;\n}\n","import { GraphQLError } from 'graphql';\nimport { isNonEmptyArray } from '../util/arrays';\n\nexport function isApolloError(err: Error): err is ApolloError {\n return err.hasOwnProperty('graphQLErrors');\n}\n\n// Sets the error message on this error according to the\n// the GraphQL and network errors that are present.\n// If the error message has already been set through the\n// constructor or otherwise, this function is a nop.\nconst generateErrorMessage = (err: ApolloError) => {\n let message = '';\n // If we have GraphQL errors present, add that to the error message.\n if (isNonEmptyArray(err.graphQLErrors)) {\n err.graphQLErrors.forEach((graphQLError: GraphQLError) => {\n const errorMessage = graphQLError\n ? graphQLError.message\n : 'Error message not found.';\n message += `GraphQL error: ${errorMessage}\\n`;\n });\n }\n\n if (err.networkError) {\n message += 'Network error: ' + err.networkError.message + '\\n';\n }\n\n // strip newline from the end of the message\n message = message.replace(/\\n$/, '');\n return message;\n};\n\nexport class ApolloError extends Error {\n public message: string;\n public graphQLErrors: ReadonlyArray;\n public networkError: Error | null;\n\n // An object that can be used to provide some additional information\n // about an error, e.g. specifying the type of error this is. Used\n // internally within Apollo Client.\n public extraInfo: any;\n\n // Constructs an instance of ApolloError given a GraphQLError\n // or a network error. Note that one of these has to be a valid\n // value or the constructed error will be meaningless.\n constructor({\n graphQLErrors,\n networkError,\n errorMessage,\n extraInfo,\n }: {\n graphQLErrors?: ReadonlyArray;\n networkError?: Error | null;\n errorMessage?: string;\n extraInfo?: any;\n }) {\n super(errorMessage);\n this.graphQLErrors = graphQLErrors || [];\n this.networkError = networkError || null;\n\n if (!errorMessage) {\n this.message = generateErrorMessage(this);\n } else {\n this.message = errorMessage;\n }\n\n this.extraInfo = extraInfo;\n\n // We're not using `Object.setPrototypeOf` here as it isn't fully\n // supported on Android (see issue #3236).\n (this as any).__proto__ = ApolloError.prototype;\n }\n}\n","import { FetchResult } from 'apollo-link';\nimport { DocumentNode, GraphQLError } from 'graphql';\n\nimport { QueryStoreValue } from '../data/queries';\nimport { NetworkStatus } from './networkStatus';\nimport { Resolver } from './LocalState';\n\nexport type QueryListener = (\n queryStoreValue: QueryStoreValue,\n newData?: any,\n forceResolvers?: boolean,\n) => void;\n\nexport type OperationVariables = { [key: string]: any };\n\nexport type PureQueryOptions = {\n query: DocumentNode;\n variables?: { [key: string]: any };\n context?: any;\n};\n\nexport type ApolloQueryResult = {\n data: T;\n errors?: ReadonlyArray;\n loading: boolean;\n networkStatus: NetworkStatus;\n stale: boolean;\n};\n\nexport enum FetchType {\n normal = 1,\n refetch = 2,\n poll = 3,\n}\n\n// This is part of the public API, people write these functions in `updateQueries`.\nexport type MutationQueryReducer = (\n previousResult: Record,\n options: {\n mutationResult: FetchResult;\n queryName: string | undefined;\n queryVariables: Record;\n },\n) => Record;\n\nexport type MutationQueryReducersMap = {\n [queryName: string]: MutationQueryReducer;\n};\n\nexport interface Resolvers {\n [key: string]: {\n [ field: string ]: Resolver;\n };\n}\n","import {\n isEqual,\n tryFunctionOrLogError,\n cloneDeep,\n getOperationDefinition,\n} from 'apollo-utilities';\nimport { GraphQLError } from 'graphql';\nimport { NetworkStatus, isNetworkRequestInFlight } from './networkStatus';\nimport { Observable, Observer, Subscription } from '../util/Observable';\nimport { ApolloError } from '../errors/ApolloError';\nimport { QueryManager } from './QueryManager';\nimport { ApolloQueryResult, FetchType, OperationVariables } from './types';\nimport {\n WatchQueryOptions,\n FetchMoreQueryOptions,\n SubscribeToMoreOptions,\n ErrorPolicy,\n} from './watchQueryOptions';\n\nimport { QueryStoreValue } from '../data/queries';\n\nimport { invariant, InvariantError } from 'ts-invariant';\nimport { isNonEmptyArray } from '../util/arrays';\n\n// XXX remove in the next breaking semver change (3.0)\n// Deprecated, use ApolloCurrentQueryResult\nexport type ApolloCurrentResult = {\n data: T | {};\n errors?: ReadonlyArray;\n loading: boolean;\n networkStatus: NetworkStatus;\n error?: ApolloError;\n partial?: boolean;\n};\n\nexport type ApolloCurrentQueryResult = {\n data: T | undefined;\n errors?: ReadonlyArray;\n loading: boolean;\n networkStatus: NetworkStatus;\n error?: ApolloError;\n partial?: boolean;\n stale?: boolean;\n};\n\nexport interface FetchMoreOptions<\n TData = any,\n TVariables = OperationVariables\n> {\n updateQuery: (\n previousQueryResult: TData,\n options: {\n fetchMoreResult?: TData;\n variables?: TVariables;\n },\n ) => TData;\n}\n\nexport interface UpdateQueryOptions {\n variables?: TVariables;\n}\n\nexport const hasError = (\n storeValue: QueryStoreValue,\n policy: ErrorPolicy = 'none',\n) => storeValue && (\n storeValue.networkError ||\n (policy === 'none' && isNonEmptyArray(storeValue.graphQLErrors))\n);\n\nexport class ObservableQuery<\n TData = any,\n TVariables = OperationVariables\n> extends Observable> {\n public options: WatchQueryOptions;\n public readonly queryId: string;\n public readonly queryName?: string;\n /**\n *\n * The current value of the variables for this query. Can change.\n */\n public variables: TVariables;\n\n private shouldSubscribe: boolean;\n private isTornDown: boolean;\n private queryManager: QueryManager;\n private observers = new Set>>();\n private subscriptions = new Set();\n\n private lastResult: ApolloQueryResult;\n private lastResultSnapshot: ApolloQueryResult;\n private lastError: ApolloError;\n\n constructor({\n queryManager,\n options,\n shouldSubscribe = true,\n }: {\n queryManager: QueryManager;\n options: WatchQueryOptions;\n shouldSubscribe?: boolean;\n }) {\n super((observer: Observer>) =>\n this.onSubscribe(observer),\n );\n\n // active state\n this.isTornDown = false;\n\n // query information\n this.options = options;\n this.variables = options.variables || ({} as TVariables);\n this.queryId = queryManager.generateQueryId();\n this.shouldSubscribe = shouldSubscribe;\n\n const opDef = getOperationDefinition(options.query);\n this.queryName = opDef && opDef.name && opDef.name.value;\n\n // related classes\n this.queryManager = queryManager;\n }\n\n public result(): Promise> {\n return new Promise((resolve, reject) => {\n const observer: Observer> = {\n next: (result: ApolloQueryResult) => {\n resolve(result);\n\n // Stop the query within the QueryManager if we can before\n // this function returns.\n //\n // We do this in order to prevent observers piling up within\n // the QueryManager. Notice that we only fully unsubscribe\n // from the subscription in a setTimeout(..., 0) call. This call can\n // actually be handled by the browser at a much later time. If queries\n // are fired in the meantime, observers that should have been removed\n // from the QueryManager will continue to fire, causing an unnecessary\n // performance hit.\n this.observers.delete(observer);\n if (!this.observers.size) {\n this.queryManager.removeQuery(this.queryId);\n }\n\n setTimeout(() => {\n subscription.unsubscribe();\n }, 0);\n },\n error: reject,\n };\n const subscription = this.subscribe(observer);\n });\n }\n\n // XXX remove in the next breaking semver change (3.0)\n // Deprecated, use getCurrentResult()\n public currentResult(): ApolloCurrentResult {\n const result = this.getCurrentResult() as ApolloCurrentResult;\n if (result.data === undefined) {\n result.data = {};\n }\n return result;\n }\n\n /**\n * Return the result of the query from the local cache as well as some fetching status\n * `loading` and `networkStatus` allow to know if a request is in flight\n * `partial` lets you know if the result from the local cache is complete or partial\n * @return {data: Object, error: ApolloError, loading: boolean, networkStatus: number, partial: boolean}\n */\n public getCurrentResult(): ApolloCurrentQueryResult {\n if (this.isTornDown) {\n const { lastResult } = this;\n return {\n data: !this.lastError && lastResult && lastResult.data || void 0,\n error: this.lastError,\n loading: false,\n networkStatus: NetworkStatus.error,\n };\n }\n\n const { data, partial } = this.queryManager.getCurrentQueryResult(this);\n const queryStoreValue = this.queryManager.queryStore.get(this.queryId);\n let result: ApolloQueryResult;\n\n const { fetchPolicy } = this.options;\n\n const isNetworkFetchPolicy =\n fetchPolicy === 'network-only' ||\n fetchPolicy === 'no-cache';\n\n if (queryStoreValue) {\n const { networkStatus } = queryStoreValue;\n\n if (hasError(queryStoreValue, this.options.errorPolicy)) {\n return {\n data: void 0,\n loading: false,\n networkStatus,\n error: new ApolloError({\n graphQLErrors: queryStoreValue.graphQLErrors,\n networkError: queryStoreValue.networkError,\n }),\n };\n }\n\n // Variables might have been added dynamically at query time, when\n // using `@client @export(as: \"varname\")` for example. When this happens,\n // the variables have been updated in the query store, but not updated on\n // the original `ObservableQuery`. We'll update the observable query\n // variables here to match, so retrieving from the cache doesn't fail.\n if (queryStoreValue.variables) {\n this.options.variables = {\n ...this.options.variables,\n ...(queryStoreValue.variables as TVariables),\n };\n this.variables = this.options.variables;\n }\n\n result = {\n data,\n loading: isNetworkRequestInFlight(networkStatus),\n networkStatus,\n } as ApolloQueryResult;\n\n if (queryStoreValue.graphQLErrors && this.options.errorPolicy === 'all') {\n result.errors = queryStoreValue.graphQLErrors;\n }\n\n } else {\n // We need to be careful about the loading state we show to the user, to try\n // and be vaguely in line with what the user would have seen from .subscribe()\n // but to still provide useful information synchronously when the query\n // will not end up hitting the server.\n // See more: https://github.com/apollostack/apollo-client/issues/707\n // Basically: is there a query in flight right now (modolo the next tick)?\n const loading = isNetworkFetchPolicy ||\n (partial && fetchPolicy !== 'cache-only');\n\n result = {\n data,\n loading,\n networkStatus: loading ? NetworkStatus.loading : NetworkStatus.ready,\n } as ApolloQueryResult;\n }\n\n if (!partial) {\n this.updateLastResult({ ...result, stale: false });\n }\n\n return { ...result, partial };\n }\n\n // Compares newResult to the snapshot we took of this.lastResult when it was\n // first received.\n public isDifferentFromLastResult(newResult: ApolloQueryResult) {\n const { lastResultSnapshot: snapshot } = this;\n return !(\n snapshot &&\n newResult &&\n snapshot.networkStatus === newResult.networkStatus &&\n snapshot.stale === newResult.stale &&\n isEqual(snapshot.data, newResult.data)\n );\n }\n\n // Returns the last result that observer.next was called with. This is not the same as\n // getCurrentResult! If you're not sure which you need, then you probably need getCurrentResult.\n public getLastResult(): ApolloQueryResult {\n return this.lastResult;\n }\n\n public getLastError(): ApolloError {\n return this.lastError;\n }\n\n public resetLastResults(): void {\n delete this.lastResult;\n delete this.lastResultSnapshot;\n delete this.lastError;\n this.isTornDown = false;\n }\n\n public resetQueryStoreErrors() {\n const queryStore = this.queryManager.queryStore.get(this.queryId);\n if (queryStore) {\n queryStore.networkError = null;\n queryStore.graphQLErrors = [];\n }\n }\n\n /**\n * Update the variables of this observable query, and fetch the new results.\n * This method should be preferred over `setVariables` in most use cases.\n *\n * @param variables: The new set of variables. If there are missing variables,\n * the previous values of those variables will be used.\n */\n public refetch(variables?: TVariables): Promise> {\n let { fetchPolicy } = this.options;\n // early return if trying to read from cache during refetch\n if (fetchPolicy === 'cache-only') {\n return Promise.reject(new InvariantError(\n 'cache-only fetchPolicy option should not be used together with query refetch.',\n ));\n }\n\n // Unless the provided fetchPolicy always consults the network\n // (no-cache, network-only, or cache-and-network), override it with\n // network-only to force the refetch for this fetchQuery call.\n if (fetchPolicy !== 'no-cache' &&\n fetchPolicy !== 'cache-and-network') {\n fetchPolicy = 'network-only';\n }\n\n if (!isEqual(this.variables, variables)) {\n // update observable variables\n this.variables = {\n ...this.variables,\n ...variables,\n };\n }\n\n if (!isEqual(this.options.variables, this.variables)) {\n // Update the existing options with new variables\n this.options.variables = {\n ...this.options.variables,\n ...this.variables,\n };\n }\n\n return this.queryManager.fetchQuery(\n this.queryId,\n { ...this.options, fetchPolicy },\n FetchType.refetch,\n ) as Promise>;\n }\n\n public fetchMore(\n fetchMoreOptions: FetchMoreQueryOptions &\n FetchMoreOptions,\n ): Promise> {\n // early return if no update Query\n invariant(\n fetchMoreOptions.updateQuery,\n 'updateQuery option is required. This function defines how to update the query data with the new results.',\n );\n\n const combinedOptions = {\n ...(fetchMoreOptions.query ? fetchMoreOptions : {\n ...this.options,\n ...fetchMoreOptions,\n variables: {\n ...this.variables,\n ...fetchMoreOptions.variables,\n },\n }),\n fetchPolicy: 'network-only',\n } as WatchQueryOptions;\n\n const qid = this.queryManager.generateQueryId();\n\n return this.queryManager\n .fetchQuery(\n qid,\n combinedOptions,\n FetchType.normal,\n this.queryId,\n )\n .then(\n fetchMoreResult => {\n this.updateQuery((previousResult: any) =>\n fetchMoreOptions.updateQuery(previousResult, {\n fetchMoreResult: fetchMoreResult.data as TData,\n variables: combinedOptions.variables as TVariables,\n }),\n );\n this.queryManager.stopQuery(qid);\n return fetchMoreResult as ApolloQueryResult;\n },\n error => {\n this.queryManager.stopQuery(qid);\n throw error;\n },\n );\n }\n\n // XXX the subscription variables are separate from the query variables.\n // if you want to update subscription variables, right now you have to do that separately,\n // and you can only do it by stopping the subscription and then subscribing again with new variables.\n public subscribeToMore<\n TSubscriptionData = TData,\n TSubscriptionVariables = TVariables\n >(\n options: SubscribeToMoreOptions<\n TData,\n TSubscriptionVariables,\n TSubscriptionData\n >,\n ) {\n const subscription = this.queryManager\n .startGraphQLSubscription({\n query: options.document,\n variables: options.variables,\n })\n .subscribe({\n next: (subscriptionData: { data: TSubscriptionData }) => {\n const { updateQuery } = options;\n if (updateQuery) {\n this.updateQuery(\n (previous, { variables }) =>\n updateQuery(previous, {\n subscriptionData,\n variables,\n }),\n );\n }\n },\n error: (err: any) => {\n if (options.onError) {\n options.onError(err);\n return;\n }\n invariant.error('Unhandled GraphQL subscription error', err);\n },\n });\n\n this.subscriptions.add(subscription);\n\n return () => {\n if (this.subscriptions.delete(subscription)) {\n subscription.unsubscribe();\n }\n };\n }\n\n // Note: if the query is not active (there are no subscribers), the promise\n // will return null immediately.\n public setOptions(\n opts: WatchQueryOptions,\n ): Promise | void> {\n const { fetchPolicy: oldFetchPolicy } = this.options;\n this.options = {\n ...this.options,\n ...opts,\n } as WatchQueryOptions;\n\n if (opts.pollInterval) {\n this.startPolling(opts.pollInterval);\n } else if (opts.pollInterval === 0) {\n this.stopPolling();\n }\n\n const { fetchPolicy } = opts;\n\n return this.setVariables(\n this.options.variables as TVariables,\n // Try to fetch the query if fetchPolicy changed from either cache-only\n // or standby to something else, or changed to network-only.\n oldFetchPolicy !== fetchPolicy && (\n oldFetchPolicy === 'cache-only' ||\n oldFetchPolicy === 'standby' ||\n fetchPolicy === 'network-only'\n ),\n opts.fetchResults,\n );\n }\n\n /**\n * This is for *internal* use only. Most users should instead use `refetch`\n * in order to be properly notified of results even when they come from cache.\n *\n * Update the variables of this observable query, and fetch the new results\n * if they've changed. If you want to force new results, use `refetch`.\n *\n * Note: the `next` callback will *not* fire if the variables have not changed\n * or if the result is coming from cache.\n *\n * Note: the promise will return the old results immediately if the variables\n * have not changed.\n *\n * Note: the promise will return null immediately if the query is not active\n * (there are no subscribers).\n *\n * @private\n *\n * @param variables: The new set of variables. If there are missing variables,\n * the previous values of those variables will be used.\n *\n * @param tryFetch: Try and fetch new results even if the variables haven't\n * changed (we may still just hit the store, but if there's nothing in there\n * this will refetch)\n *\n * @param fetchResults: Option to ignore fetching results when updating variables\n */\n public setVariables(\n variables: TVariables,\n tryFetch: boolean = false,\n fetchResults = true,\n ): Promise | void> {\n // since setVariables restarts the subscription, we reset the tornDown status\n this.isTornDown = false;\n\n variables = variables || this.variables;\n\n if (!tryFetch && isEqual(variables, this.variables)) {\n // If we have no observers, then we don't actually want to make a network\n // request. As soon as someone observes the query, the request will kick\n // off. For now, we just store any changes. (See #1077)\n return this.observers.size && fetchResults\n ? this.result()\n : Promise.resolve();\n }\n\n this.variables = this.options.variables = variables;\n\n // See comment above\n if (!this.observers.size) {\n return Promise.resolve();\n }\n\n // Use the same options as before, but with new variables\n return this.queryManager.fetchQuery(\n this.queryId,\n this.options,\n ) as Promise>;\n }\n\n public updateQuery(\n mapFn: (\n previousQueryResult: TData,\n options: UpdateQueryOptions,\n ) => TData,\n ): void {\n const { queryManager } = this;\n const {\n previousResult,\n variables,\n document,\n } = queryManager.getQueryWithPreviousResult(\n this.queryId,\n );\n\n const newResult = tryFunctionOrLogError(() =>\n mapFn(previousResult, { variables }),\n );\n\n if (newResult) {\n queryManager.dataStore.markUpdateQueryResult(\n document,\n variables,\n newResult,\n );\n queryManager.broadcastQueries();\n }\n }\n\n public stopPolling() {\n this.queryManager.stopPollingQuery(this.queryId);\n this.options.pollInterval = undefined;\n }\n\n public startPolling(pollInterval: number) {\n assertNotCacheFirstOrOnly(this);\n this.options.pollInterval = pollInterval;\n this.queryManager.startPollingQuery(this.options, this.queryId);\n }\n\n private updateLastResult(newResult: ApolloQueryResult) {\n const previousResult = this.lastResult;\n this.lastResult = newResult;\n this.lastResultSnapshot = this.queryManager.assumeImmutableResults\n ? newResult\n : cloneDeep(newResult);\n return previousResult;\n }\n\n private onSubscribe(observer: Observer>) {\n // Zen Observable has its own error function, so in order to log correctly\n // we need to provide a custom error callback.\n try {\n var subObserver = (observer as any)._subscription._observer;\n if (subObserver && !subObserver.error) {\n subObserver.error = defaultSubscriptionObserverErrorCallback;\n }\n } catch {}\n\n const first = !this.observers.size;\n this.observers.add(observer);\n\n // Deliver initial result\n if (observer.next && this.lastResult) observer.next(this.lastResult);\n if (observer.error && this.lastError) observer.error(this.lastError);\n\n // setup the query if it hasn't been done before\n if (first) {\n this.setUpQuery();\n }\n\n return () => {\n if (this.observers.delete(observer) && !this.observers.size) {\n this.tearDownQuery();\n }\n };\n }\n\n private setUpQuery() {\n const { queryManager, queryId } = this;\n\n if (this.shouldSubscribe) {\n queryManager.addObservableQuery(queryId, this);\n }\n\n if (this.options.pollInterval) {\n assertNotCacheFirstOrOnly(this);\n queryManager.startPollingQuery(this.options, queryId);\n }\n\n const onError = (error: ApolloError) => {\n // Since we don't get the current result on errors, only the error, we\n // must mirror the updates that occur in QueryStore.markQueryError here\n this.updateLastResult({\n ...this.lastResult,\n errors: error.graphQLErrors,\n networkStatus: NetworkStatus.error,\n loading: false,\n });\n iterateObserversSafely(this.observers, 'error', this.lastError = error);\n };\n\n queryManager.observeQuery(queryId, this.options, {\n next: (result: ApolloQueryResult) => {\n if (this.lastError || this.isDifferentFromLastResult(result)) {\n const previousResult = this.updateLastResult(result);\n const { query, variables, fetchPolicy } = this.options;\n\n // Before calling `next` on each observer, we need to first see if\n // the query is using `@client @export` directives, and update\n // any variables that might have changed. If `@export` variables have\n // changed, and the query is calling against both local and remote\n // data, a refetch is needed to pull in new data, using the\n // updated `@export` variables.\n if (queryManager.transform(query).hasClientExports) {\n queryManager.getLocalState().addExportedVariables(\n query,\n variables,\n ).then((variables: TVariables) => {\n const previousVariables = this.variables;\n this.variables = this.options.variables = variables;\n if (\n !result.loading &&\n previousResult &&\n fetchPolicy !== 'cache-only' &&\n queryManager.transform(query).serverQuery &&\n !isEqual(previousVariables, variables)\n ) {\n this.refetch();\n } else {\n iterateObserversSafely(this.observers, 'next', result);\n }\n });\n } else {\n iterateObserversSafely(this.observers, 'next', result);\n }\n }\n },\n error: onError,\n }).catch(onError);\n }\n\n private tearDownQuery() {\n const { queryManager } = this;\n\n this.isTornDown = true;\n queryManager.stopPollingQuery(this.queryId);\n\n // stop all active GraphQL subscriptions\n this.subscriptions.forEach(sub => sub.unsubscribe());\n this.subscriptions.clear();\n\n queryManager.removeObservableQuery(this.queryId);\n queryManager.stopQuery(this.queryId);\n\n this.observers.clear();\n }\n}\n\nfunction defaultSubscriptionObserverErrorCallback(error: ApolloError) {\n invariant.error('Unhandled error', error.message, error.stack);\n}\n\nfunction iterateObserversSafely(\n observers: Set>,\n method: keyof Observer,\n argument?: A,\n) {\n // In case observers is modified during iteration, we need to commit to the\n // original elements, which also provides an opportunity to filter them down\n // to just the observers with the given method.\n const observersWithMethod: Observer[] = [];\n observers.forEach(obs => obs[method] && observersWithMethod.push(obs));\n observersWithMethod.forEach(obs => (obs as any)[method](argument));\n}\n\nfunction assertNotCacheFirstOrOnly(\n obsQuery: ObservableQuery,\n) {\n const { fetchPolicy } = obsQuery.options;\n invariant(\n fetchPolicy !== 'cache-first' && fetchPolicy !== 'cache-only',\n 'Queries that specify the cache-first and cache-only fetchPolicies cannot also be polling queries.',\n );\n}\n","import { DocumentNode } from 'graphql';\n\nexport class MutationStore {\n private store: { [mutationId: string]: MutationStoreValue } = {};\n\n public getStore(): { [mutationId: string]: MutationStoreValue } {\n return this.store;\n }\n\n public get(mutationId: string): MutationStoreValue {\n return this.store[mutationId];\n }\n\n public initMutation(\n mutationId: string,\n mutation: DocumentNode,\n variables: Object | undefined,\n ) {\n this.store[mutationId] = {\n mutation,\n variables: variables || {},\n loading: true,\n error: null,\n };\n }\n\n public markMutationError(mutationId: string, error: Error) {\n const mutation = this.store[mutationId];\n if (mutation) {\n mutation.loading = false;\n mutation.error = error;\n }\n }\n\n public markMutationResult(mutationId: string) {\n const mutation = this.store[mutationId];\n if (mutation) {\n mutation.loading = false;\n mutation.error = null;\n }\n }\n\n public reset() {\n this.store = {};\n }\n}\n\nexport interface MutationStoreValue {\n mutation: DocumentNode;\n variables: Object;\n loading: boolean;\n error: Error | null;\n}\n","import { DocumentNode, GraphQLError, ExecutionResult } from 'graphql';\nimport { isEqual } from 'apollo-utilities';\nimport { invariant } from 'ts-invariant';\nimport { NetworkStatus } from '../core/networkStatus';\nimport { isNonEmptyArray } from '../util/arrays';\n\nexport type QueryStoreValue = {\n document: DocumentNode;\n variables: Object;\n previousVariables?: Object | null;\n networkStatus: NetworkStatus;\n networkError?: Error | null;\n graphQLErrors?: ReadonlyArray;\n metadata: any;\n};\n\nexport class QueryStore {\n private store: { [queryId: string]: QueryStoreValue } = {};\n\n public getStore(): { [queryId: string]: QueryStoreValue } {\n return this.store;\n }\n\n public get(queryId: string): QueryStoreValue {\n return this.store[queryId];\n }\n\n public initQuery(query: {\n queryId: string;\n document: DocumentNode;\n storePreviousVariables: boolean;\n variables: Object;\n isPoll: boolean;\n isRefetch: boolean;\n metadata: any;\n fetchMoreForQueryId: string | undefined;\n }) {\n const previousQuery = this.store[query.queryId];\n\n // XXX we're throwing an error here to catch bugs where a query gets overwritten by a new one.\n // we should implement a separate action for refetching so that QUERY_INIT may never overwrite\n // an existing query (see also: https://github.com/apollostack/apollo-client/issues/732)\n invariant(\n !previousQuery ||\n previousQuery.document === query.document ||\n isEqual(previousQuery.document, query.document),\n 'Internal Error: may not update existing query string in store',\n );\n\n let isSetVariables = false;\n\n let previousVariables: Object | null = null;\n if (\n query.storePreviousVariables &&\n previousQuery &&\n previousQuery.networkStatus !== NetworkStatus.loading\n // if the previous query was still loading, we don't want to remember it at all.\n ) {\n if (!isEqual(previousQuery.variables, query.variables)) {\n isSetVariables = true;\n previousVariables = previousQuery.variables;\n }\n }\n\n // TODO break this out into a separate function\n let networkStatus;\n if (isSetVariables) {\n networkStatus = NetworkStatus.setVariables;\n } else if (query.isPoll) {\n networkStatus = NetworkStatus.poll;\n } else if (query.isRefetch) {\n networkStatus = NetworkStatus.refetch;\n // TODO: can we determine setVariables here if it's a refetch and the variables have changed?\n } else {\n networkStatus = NetworkStatus.loading;\n }\n\n let graphQLErrors: ReadonlyArray = [];\n if (previousQuery && previousQuery.graphQLErrors) {\n graphQLErrors = previousQuery.graphQLErrors;\n }\n\n // XXX right now if QUERY_INIT is fired twice, like in a refetch situation, we just overwrite\n // the store. We probably want a refetch action instead, because I suspect that if you refetch\n // before the initial fetch is done, you'll get an error.\n this.store[query.queryId] = {\n document: query.document,\n variables: query.variables,\n previousVariables,\n networkError: null,\n graphQLErrors: graphQLErrors,\n networkStatus,\n metadata: query.metadata,\n };\n\n // If the action had a `moreForQueryId` property then we need to set the\n // network status on that query as well to `fetchMore`.\n //\n // We have a complement to this if statement in the query result and query\n // error action branch, but importantly *not* in the client result branch.\n // This is because the implementation of `fetchMore` *always* sets\n // `fetchPolicy` to `network-only` so we would never have a client result.\n if (\n typeof query.fetchMoreForQueryId === 'string' &&\n this.store[query.fetchMoreForQueryId]\n ) {\n this.store[query.fetchMoreForQueryId].networkStatus =\n NetworkStatus.fetchMore;\n }\n }\n\n public markQueryResult(\n queryId: string,\n result: ExecutionResult,\n fetchMoreForQueryId: string | undefined,\n ) {\n if (!this.store || !this.store[queryId]) return;\n\n this.store[queryId].networkError = null;\n this.store[queryId].graphQLErrors = isNonEmptyArray(result.errors) ? result.errors : [];\n this.store[queryId].previousVariables = null;\n this.store[queryId].networkStatus = NetworkStatus.ready;\n\n // If we have a `fetchMoreForQueryId` then we need to update the network\n // status for that query. See the branch for query initialization for more\n // explanation about this process.\n if (\n typeof fetchMoreForQueryId === 'string' &&\n this.store[fetchMoreForQueryId]\n ) {\n this.store[fetchMoreForQueryId].networkStatus = NetworkStatus.ready;\n }\n }\n\n public markQueryError(\n queryId: string,\n error: Error,\n fetchMoreForQueryId: string | undefined,\n ) {\n if (!this.store || !this.store[queryId]) return;\n\n this.store[queryId].networkError = error;\n this.store[queryId].networkStatus = NetworkStatus.error;\n\n // If we have a `fetchMoreForQueryId` then we need to update the network\n // status for that query. See the branch for query initialization for more\n // explanation about this process.\n if (typeof fetchMoreForQueryId === 'string') {\n this.markQueryResultClient(fetchMoreForQueryId, true);\n }\n }\n\n public markQueryResultClient(queryId: string, complete: boolean) {\n const storeValue = this.store && this.store[queryId];\n if (storeValue) {\n storeValue.networkError = null;\n storeValue.previousVariables = null;\n if (complete) {\n storeValue.networkStatus = NetworkStatus.ready;\n }\n }\n }\n\n public stopQuery(queryId: string) {\n delete this.store[queryId];\n }\n\n public reset(observableQueryIds: string[]) {\n Object.keys(this.store).forEach(queryId => {\n if (observableQueryIds.indexOf(queryId) < 0) {\n this.stopQuery(queryId);\n } else {\n // XXX set loading to true so listeners don't trigger unless they want results with partial data\n this.store[queryId].networkStatus = NetworkStatus.loading;\n }\n });\n }\n}\n","export function capitalizeFirstLetter(str: string) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n","import {\n DocumentNode,\n OperationDefinitionNode,\n SelectionSetNode,\n SelectionNode,\n InlineFragmentNode,\n FragmentDefinitionNode,\n FieldNode,\n ASTNode,\n} from 'graphql';\nimport { visit, BREAK } from 'graphql/language/visitor';\n\nimport { ApolloCache } from 'apollo-cache';\nimport {\n getMainDefinition,\n buildQueryFromSelectionSet,\n hasDirectives,\n removeClientSetsFromDocument,\n mergeDeep,\n mergeDeepArray,\n FragmentMap,\n argumentsObjectFromField,\n resultKeyNameFromField,\n getFragmentDefinitions,\n createFragmentMap,\n shouldInclude,\n isField,\n isInlineFragment,\n} from 'apollo-utilities';\nimport { FetchResult } from 'apollo-link';\n\nimport { invariant } from 'ts-invariant';\n\nimport ApolloClient from '../ApolloClient';\nimport { Resolvers, OperationVariables } from './types';\nimport { capitalizeFirstLetter } from '../util/capitalizeFirstLetter';\n\nexport type Resolver = (\n rootValue?: any,\n args?: any,\n context?: any,\n info?: {\n field: FieldNode;\n fragmentMap: FragmentMap;\n },\n) => any;\n\nexport type VariableMap = { [name: string]: any };\n\nexport type FragmentMatcher = (\n rootValue: any,\n typeCondition: string,\n context: any,\n) => boolean;\n\nexport type ExecContext = {\n fragmentMap: FragmentMap;\n context: any;\n variables: VariableMap;\n fragmentMatcher: FragmentMatcher;\n defaultOperationType: string;\n exportedVariables: Record;\n onlyRunForcedResolvers: boolean;\n};\n\nexport type LocalStateOptions = {\n cache: ApolloCache;\n client?: ApolloClient;\n resolvers?: Resolvers | Resolvers[];\n fragmentMatcher?: FragmentMatcher;\n};\n\nexport class LocalState {\n private cache: ApolloCache;\n private client: ApolloClient;\n private resolvers?: Resolvers;\n private fragmentMatcher: FragmentMatcher;\n\n constructor({\n cache,\n client,\n resolvers,\n fragmentMatcher,\n }: LocalStateOptions) {\n this.cache = cache;\n\n if (client) {\n this.client = client;\n }\n\n if (resolvers) {\n this.addResolvers(resolvers);\n }\n\n if (fragmentMatcher) {\n this.setFragmentMatcher(fragmentMatcher);\n }\n }\n\n public addResolvers(resolvers: Resolvers | Resolvers[]) {\n this.resolvers = this.resolvers || {};\n if (Array.isArray(resolvers)) {\n resolvers.forEach(resolverGroup => {\n this.resolvers = mergeDeep(this.resolvers, resolverGroup);\n });\n } else {\n this.resolvers = mergeDeep(this.resolvers, resolvers);\n }\n }\n\n public setResolvers(resolvers: Resolvers | Resolvers[]) {\n this.resolvers = {};\n this.addResolvers(resolvers);\n }\n\n public getResolvers() {\n return this.resolvers || {};\n }\n\n // Run local client resolvers against the incoming query and remote data.\n // Locally resolved field values are merged with the incoming remote data,\n // and returned. Note that locally resolved fields will overwrite\n // remote data using the same field name.\n public async runResolvers({\n document,\n remoteResult,\n context,\n variables,\n onlyRunForcedResolvers = false,\n }: {\n document: DocumentNode | null;\n remoteResult: FetchResult;\n context?: Record;\n variables?: Record;\n onlyRunForcedResolvers?: boolean;\n }): Promise> {\n if (document) {\n return this.resolveDocument(\n document,\n remoteResult.data,\n context,\n variables,\n this.fragmentMatcher,\n onlyRunForcedResolvers,\n ).then(localResult => ({\n ...remoteResult,\n data: localResult.result,\n }));\n }\n\n return remoteResult;\n }\n\n public setFragmentMatcher(fragmentMatcher: FragmentMatcher) {\n this.fragmentMatcher = fragmentMatcher;\n }\n\n public getFragmentMatcher(): FragmentMatcher {\n return this.fragmentMatcher;\n }\n\n // Client queries contain everything in the incoming document (if a @client\n // directive is found).\n public clientQuery(document: DocumentNode) {\n if (hasDirectives(['client'], document)) {\n if (this.resolvers) {\n return document;\n }\n invariant.warn(\n 'Found @client directives in a query but no ApolloClient resolvers ' +\n 'were specified. This means ApolloClient local resolver handling ' +\n 'has been disabled, and @client directives will be passed through ' +\n 'to your link chain.',\n );\n }\n return null;\n }\n\n // Server queries are stripped of all @client based selection sets.\n public serverQuery(document: DocumentNode) {\n return this.resolvers ? removeClientSetsFromDocument(document) : document;\n }\n\n public prepareContext(context = {}) {\n const { cache } = this;\n\n const newContext = {\n ...context,\n cache,\n // Getting an entry's cache key is useful for local state resolvers.\n getCacheKey: (obj: { __typename: string; id: string | number }) => {\n if ((cache as any).config) {\n return (cache as any).config.dataIdFromObject(obj);\n } else {\n invariant(false,\n 'To use context.getCacheKey, you need to use a cache that has ' +\n 'a configurable dataIdFromObject, like apollo-cache-inmemory.',\n );\n }\n },\n };\n\n return newContext;\n }\n\n // To support `@client @export(as: \"someVar\")` syntax, we'll first resolve\n // @client @export fields locally, then pass the resolved values back to be\n // used alongside the original operation variables.\n public async addExportedVariables(\n document: DocumentNode,\n variables: OperationVariables = {},\n context = {},\n ) {\n if (document) {\n return this.resolveDocument(\n document,\n this.buildRootValueFromCache(document, variables) || {},\n this.prepareContext(context),\n variables,\n ).then(data => ({\n ...variables,\n ...data.exportedVariables,\n }));\n }\n\n return {\n ...variables,\n };\n }\n\n public shouldForceResolvers(document: ASTNode) {\n let forceResolvers = false;\n visit(document, {\n Directive: {\n enter(node) {\n if (node.name.value === 'client' && node.arguments) {\n forceResolvers = node.arguments.some(\n arg =>\n arg.name.value === 'always' &&\n arg.value.kind === 'BooleanValue' &&\n arg.value.value === true,\n );\n if (forceResolvers) {\n return BREAK;\n }\n }\n },\n },\n });\n return forceResolvers;\n }\n\n // Query the cache and return matching data.\n private buildRootValueFromCache(\n document: DocumentNode,\n variables?: Record,\n ) {\n return this.cache.diff({\n query: buildQueryFromSelectionSet(document),\n variables,\n returnPartialData: true,\n optimistic: false,\n }).result;\n }\n\n private async resolveDocument(\n document: DocumentNode,\n rootValue: TData,\n context: any = {},\n variables: VariableMap = {},\n fragmentMatcher: FragmentMatcher = () => true,\n onlyRunForcedResolvers: boolean = false,\n ) {\n const mainDefinition = getMainDefinition(document);\n const fragments = getFragmentDefinitions(document);\n const fragmentMap = createFragmentMap(fragments);\n\n const definitionOperation = (mainDefinition as OperationDefinitionNode)\n .operation;\n\n const defaultOperationType = definitionOperation\n ? capitalizeFirstLetter(definitionOperation)\n : 'Query';\n\n const { cache, client } = this;\n const execContext: ExecContext = {\n fragmentMap,\n context: {\n ...context,\n cache,\n client,\n },\n variables,\n fragmentMatcher,\n defaultOperationType,\n exportedVariables: {},\n onlyRunForcedResolvers,\n };\n\n return this.resolveSelectionSet(\n mainDefinition.selectionSet,\n rootValue,\n execContext,\n ).then(result => ({\n result,\n exportedVariables: execContext.exportedVariables,\n }));\n }\n\n private async resolveSelectionSet(\n selectionSet: SelectionSetNode,\n rootValue: TData,\n execContext: ExecContext,\n ) {\n const { fragmentMap, context, variables } = execContext;\n const resultsToMerge: TData[] = [rootValue];\n\n const execute = async (selection: SelectionNode): Promise => {\n if (!shouldInclude(selection, variables)) {\n // Skip this entirely.\n return;\n }\n\n if (isField(selection)) {\n return this.resolveField(selection, rootValue, execContext).then(\n fieldResult => {\n if (typeof fieldResult !== 'undefined') {\n resultsToMerge.push({\n [resultKeyNameFromField(selection)]: fieldResult,\n } as TData);\n }\n },\n );\n }\n\n let fragment: InlineFragmentNode | FragmentDefinitionNode;\n\n if (isInlineFragment(selection)) {\n fragment = selection;\n } else {\n // This is a named fragment.\n fragment = fragmentMap[selection.name.value];\n invariant(fragment, `No fragment named ${selection.name.value}`);\n }\n\n if (fragment && fragment.typeCondition) {\n const typeCondition = fragment.typeCondition.name.value;\n if (execContext.fragmentMatcher(rootValue, typeCondition, context)) {\n return this.resolveSelectionSet(\n fragment.selectionSet,\n rootValue,\n execContext,\n ).then(fragmentResult => {\n resultsToMerge.push(fragmentResult);\n });\n }\n }\n };\n\n return Promise.all(selectionSet.selections.map(execute)).then(function() {\n return mergeDeepArray(resultsToMerge);\n });\n }\n\n private async resolveField(\n field: FieldNode,\n rootValue: any,\n execContext: ExecContext,\n ): Promise {\n const { variables } = execContext;\n const fieldName = field.name.value;\n const aliasedFieldName = resultKeyNameFromField(field);\n const aliasUsed = fieldName !== aliasedFieldName;\n const defaultResult = rootValue[aliasedFieldName] || rootValue[fieldName];\n let resultPromise = Promise.resolve(defaultResult);\n\n // Usually all local resolvers are run when passing through here, but\n // if we've specifically identified that we only want to run forced\n // resolvers (that is, resolvers for fields marked with\n // `@client(always: true)`), then we'll skip running non-forced resolvers.\n if (\n !execContext.onlyRunForcedResolvers ||\n this.shouldForceResolvers(field)\n ) {\n const resolverType =\n rootValue.__typename || execContext.defaultOperationType;\n const resolverMap = this.resolvers && this.resolvers[resolverType];\n if (resolverMap) {\n const resolve = resolverMap[aliasUsed ? fieldName : aliasedFieldName];\n if (resolve) {\n resultPromise = Promise.resolve(resolve(\n rootValue,\n argumentsObjectFromField(field, variables),\n execContext.context,\n { field, fragmentMap: execContext.fragmentMap },\n ));\n }\n }\n }\n\n return resultPromise.then((result = defaultResult) => {\n // If an @export directive is associated with the current field, store\n // the `as` export variable name and current result for later use.\n if (field.directives) {\n field.directives.forEach(directive => {\n if (directive.name.value === 'export' && directive.arguments) {\n directive.arguments.forEach(arg => {\n if (arg.name.value === 'as' && arg.value.kind === 'StringValue') {\n execContext.exportedVariables[arg.value.value] = result;\n }\n });\n }\n });\n }\n\n // Handle all scalar types here.\n if (!field.selectionSet) {\n return result;\n }\n\n // From here down, the field has a selection set, which means it's trying\n // to query a GraphQLObjectType.\n if (result == null) {\n // Basically any field in a GraphQL response can be null, or missing\n return result;\n }\n\n if (Array.isArray(result)) {\n return this.resolveSubSelectedArray(field, result, execContext);\n }\n\n // Returned value is an object, and the query has a sub-selection. Recurse.\n if (field.selectionSet) {\n return this.resolveSelectionSet(\n field.selectionSet,\n result,\n execContext,\n );\n }\n });\n }\n\n private resolveSubSelectedArray(\n field: FieldNode,\n result: any[],\n execContext: ExecContext,\n ): any {\n return Promise.all(\n result.map(item => {\n if (item === null) {\n return null;\n }\n\n // This is a nested array, recurse.\n if (Array.isArray(item)) {\n return this.resolveSubSelectedArray(field, item, execContext);\n }\n\n // This is an object, run the selection set on it.\n if (field.selectionSet) {\n return this.resolveSelectionSet(field.selectionSet, item, execContext);\n }\n }),\n );\n }\n}\n","import { Observable, Observer, Subscription } from './Observable';\n\n// Returns a normal Observable that can have any number of subscribers,\n// while ensuring the original Observable gets subscribed to at most once.\nexport function multiplex(inner: Observable): Observable {\n const observers = new Set>();\n let sub: Subscription | null = null;\n return new Observable(observer => {\n observers.add(observer);\n sub = sub || inner.subscribe({\n next(value) {\n observers.forEach(obs => obs.next && obs.next(value));\n },\n error(error) {\n observers.forEach(obs => obs.error && obs.error(error));\n },\n complete() {\n observers.forEach(obs => obs.complete && obs.complete());\n },\n });\n return () => {\n if (observers.delete(observer) && !observers.size && sub) {\n sub.unsubscribe();\n sub = null;\n }\n };\n });\n}\n\n// Like Observable.prototype.map, except that the mapping function can\n// optionally return a Promise (or be async).\nexport function asyncMap(\n observable: Observable,\n mapFn: (value: V) => R | Promise,\n): Observable {\n return new Observable(observer => {\n const { next, error, complete } = observer;\n let activeNextCount = 0;\n let completed = false;\n\n const handler: Observer = {\n next(value) {\n ++activeNextCount;\n new Promise(resolve => {\n resolve(mapFn(value));\n }).then(\n result => {\n --activeNextCount;\n next && next.call(observer, result);\n completed && handler.complete!();\n },\n e => {\n --activeNextCount;\n error && error.call(observer, e);\n },\n );\n },\n error(e) {\n error && error.call(observer, e);\n },\n complete() {\n completed = true;\n if (!activeNextCount) {\n complete && complete.call(observer);\n }\n },\n };\n\n const sub = observable.subscribe(handler);\n return () => sub.unsubscribe();\n });\n}\n","import { execute, ApolloLink, FetchResult } from 'apollo-link';\nimport { DocumentNode } from 'graphql';\nimport { Cache } from 'apollo-cache';\nimport {\n getDefaultValues,\n getOperationDefinition,\n getOperationName,\n hasDirectives,\n graphQLResultHasError,\n hasClientExports,\n removeConnectionDirectiveFromDocument,\n canUseWeakMap,\n} from 'apollo-utilities';\n\nimport { invariant, InvariantError } from 'ts-invariant';\n\nimport { isApolloError, ApolloError } from '../errors/ApolloError';\nimport { Observer, Subscription, Observable } from '../util/Observable';\nimport { QueryWithUpdater, DataStore } from '../data/store';\nimport { MutationStore } from '../data/mutations';\nimport { QueryStore, QueryStoreValue } from '../data/queries';\n\nimport {\n QueryOptions,\n WatchQueryOptions,\n SubscriptionOptions,\n MutationOptions,\n ErrorPolicy,\n} from './watchQueryOptions';\nimport { ObservableQuery } from './ObservableQuery';\nimport { NetworkStatus, isNetworkRequestInFlight } from './networkStatus';\nimport {\n QueryListener,\n ApolloQueryResult,\n FetchType,\n OperationVariables,\n} from './types';\nimport { LocalState } from './LocalState';\nimport { asyncMap, multiplex } from '../util/observables';\nimport { isNonEmptyArray } from '../util/arrays';\n\nconst { hasOwnProperty } = Object.prototype;\n\nexport interface QueryInfo {\n listeners: Set;\n invalidated: boolean;\n newData: Cache.DiffResult | null;\n document: DocumentNode | null;\n lastRequestId: number;\n // A map going from queryId to an observer for a query issued by watchQuery. We use\n // these to keep track of queries that are inflight and error on the observers associated\n // with them in case of some destabalizing action (e.g. reset of the Apollo store).\n observableQuery: ObservableQuery | null;\n subscriptions: Set;\n cancel?: () => void;\n}\n\nexport class QueryManager {\n public link: ApolloLink;\n public mutationStore: MutationStore = new MutationStore();\n public queryStore: QueryStore = new QueryStore();\n public dataStore: DataStore;\n public readonly assumeImmutableResults: boolean;\n\n private queryDeduplication: boolean;\n private clientAwareness: Record = {};\n private localState: LocalState;\n\n private onBroadcast: () => void;\n\n private ssrMode: boolean;\n\n // let's not start at zero to avoid pain with bad checks\n private idCounter = 1;\n\n // XXX merge with ObservableQuery but that needs to be expanded to support mutations and\n // subscriptions as well\n private queries: Map = new Map();\n\n // A map of Promise reject functions for fetchQuery promises that have not\n // yet been resolved, used to keep track of in-flight queries so that we can\n // reject them in case a destabilizing event occurs (e.g. Apollo store reset).\n // The key is in the format of `query:${queryId}` or `fetchRequest:${queryId}`,\n // depending on where the promise's rejection function was created from.\n private fetchQueryRejectFns = new Map();\n\n constructor({\n link,\n queryDeduplication = false,\n store,\n onBroadcast = () => undefined,\n ssrMode = false,\n clientAwareness = {},\n localState,\n assumeImmutableResults,\n }: {\n link: ApolloLink;\n queryDeduplication?: boolean;\n store: DataStore;\n onBroadcast?: () => void;\n ssrMode?: boolean;\n clientAwareness?: Record;\n localState?: LocalState;\n assumeImmutableResults?: boolean;\n }) {\n this.link = link;\n this.queryDeduplication = queryDeduplication;\n this.dataStore = store;\n this.onBroadcast = onBroadcast;\n this.clientAwareness = clientAwareness;\n this.localState = localState || new LocalState({ cache: store.getCache() });\n this.ssrMode = ssrMode;\n this.assumeImmutableResults = !!assumeImmutableResults;\n }\n\n /**\n * Call this method to terminate any active query processes, making it safe\n * to dispose of this QueryManager instance.\n */\n public stop() {\n this.queries.forEach((_info, queryId) => {\n this.stopQueryNoBroadcast(queryId);\n });\n\n this.fetchQueryRejectFns.forEach(reject => {\n reject(\n new InvariantError('QueryManager stopped while query was in flight'),\n );\n });\n }\n\n public async mutate({\n mutation,\n variables,\n optimisticResponse,\n updateQueries: updateQueriesByName,\n refetchQueries = [],\n awaitRefetchQueries = false,\n update: updateWithProxyFn,\n errorPolicy = 'none',\n fetchPolicy,\n context = {},\n }: MutationOptions): Promise> {\n invariant(\n mutation,\n 'mutation option is required. You must specify your GraphQL document in the mutation option.',\n );\n\n invariant(\n !fetchPolicy || fetchPolicy === 'no-cache',\n \"Mutations only support a 'no-cache' fetchPolicy. If you don't want to disable the cache, remove your fetchPolicy setting to proceed with the default mutation behavior.\"\n );\n\n const mutationId = this.generateQueryId();\n mutation = this.transform(mutation).document;\n\n this.setQuery(mutationId, () => ({ document: mutation }));\n\n variables = this.getVariables(mutation, variables);\n\n if (this.transform(mutation).hasClientExports) {\n variables = await this.localState.addExportedVariables(mutation, variables, context);\n }\n\n // Create a map of update queries by id to the query instead of by name.\n const generateUpdateQueriesInfo: () => {\n [queryId: string]: QueryWithUpdater;\n } = () => {\n const ret: { [queryId: string]: QueryWithUpdater } = {};\n\n if (updateQueriesByName) {\n this.queries.forEach(({ observableQuery }, queryId) => {\n if (observableQuery) {\n const { queryName } = observableQuery;\n if (\n queryName &&\n hasOwnProperty.call(updateQueriesByName, queryName)\n ) {\n ret[queryId] = {\n updater: updateQueriesByName[queryName],\n query: this.queryStore.get(queryId),\n };\n }\n }\n });\n }\n\n return ret;\n };\n\n this.mutationStore.initMutation(\n mutationId,\n mutation,\n variables,\n );\n\n this.dataStore.markMutationInit({\n mutationId,\n document: mutation,\n variables,\n updateQueries: generateUpdateQueriesInfo(),\n update: updateWithProxyFn,\n optimisticResponse,\n });\n\n this.broadcastQueries();\n\n const self = this;\n\n return new Promise((resolve, reject) => {\n let storeResult: FetchResult | null;\n let error: ApolloError;\n\n self.getObservableFromLink(\n mutation,\n {\n ...context,\n optimisticResponse,\n },\n variables,\n false,\n ).subscribe({\n next(result: FetchResult) {\n if (graphQLResultHasError(result) && errorPolicy === 'none') {\n error = new ApolloError({\n graphQLErrors: result.errors,\n });\n return;\n }\n\n self.mutationStore.markMutationResult(mutationId);\n\n if (fetchPolicy !== 'no-cache') {\n self.dataStore.markMutationResult({\n mutationId,\n result,\n document: mutation,\n variables,\n updateQueries: generateUpdateQueriesInfo(),\n update: updateWithProxyFn,\n });\n }\n\n storeResult = result;\n },\n\n error(err: Error) {\n self.mutationStore.markMutationError(mutationId, err);\n self.dataStore.markMutationComplete({\n mutationId,\n optimisticResponse,\n });\n self.broadcastQueries();\n self.setQuery(mutationId, () => ({ document: null }));\n reject(\n new ApolloError({\n networkError: err,\n }),\n );\n },\n\n complete() {\n if (error) {\n self.mutationStore.markMutationError(mutationId, error);\n }\n\n self.dataStore.markMutationComplete({\n mutationId,\n optimisticResponse,\n });\n\n self.broadcastQueries();\n\n if (error) {\n reject(error);\n return;\n }\n\n // allow for conditional refetches\n // XXX do we want to make this the only API one day?\n if (typeof refetchQueries === 'function') {\n refetchQueries = refetchQueries(storeResult!);\n }\n\n const refetchQueryPromises: Promise<\n ApolloQueryResult[] | ApolloQueryResult<{}>\n >[] = [];\n\n if (isNonEmptyArray(refetchQueries)) {\n refetchQueries.forEach(refetchQuery => {\n if (typeof refetchQuery === 'string') {\n self.queries.forEach(({ observableQuery }) => {\n if (\n observableQuery &&\n observableQuery.queryName === refetchQuery\n ) {\n refetchQueryPromises.push(observableQuery.refetch());\n }\n });\n } else {\n const queryOptions: QueryOptions = {\n query: refetchQuery.query,\n variables: refetchQuery.variables,\n fetchPolicy: 'network-only',\n };\n\n if (refetchQuery.context) {\n queryOptions.context = refetchQuery.context;\n }\n\n refetchQueryPromises.push(self.query(queryOptions));\n }\n });\n }\n\n Promise.all(\n awaitRefetchQueries ? refetchQueryPromises : [],\n ).then(() => {\n self.setQuery(mutationId, () => ({ document: null }));\n\n if (\n errorPolicy === 'ignore' &&\n storeResult &&\n graphQLResultHasError(storeResult)\n ) {\n delete storeResult.errors;\n }\n\n resolve(storeResult!);\n });\n },\n });\n });\n }\n\n public async fetchQuery(\n queryId: string,\n options: WatchQueryOptions,\n fetchType?: FetchType,\n // This allows us to track if this is a query spawned by a `fetchMore`\n // call for another query. We need this data to compute the `fetchMore`\n // network status for the query this is fetching for.\n fetchMoreForQueryId?: string,\n ): Promise> {\n const {\n metadata = null,\n fetchPolicy = 'cache-first', // cache-first is the default fetch policy.\n context = {},\n } = options;\n\n const query = this.transform(options.query).document;\n\n let variables = this.getVariables(query, options.variables);\n\n if (this.transform(query).hasClientExports) {\n variables = await this.localState.addExportedVariables(query, variables, context);\n }\n\n options = { ...options, variables };\n\n let storeResult: any;\n const isNetworkOnly =\n fetchPolicy === 'network-only' || fetchPolicy === 'no-cache';\n let needToFetch = isNetworkOnly;\n\n // Unless we are completely skipping the cache, we want to diff the query\n // against the cache before we fetch it from the network interface.\n if (!isNetworkOnly) {\n const { complete, result } = this.dataStore.getCache().diff({\n query,\n variables,\n returnPartialData: true,\n optimistic: false,\n });\n\n // If we're in here, only fetch if we have missing fields\n needToFetch = !complete || fetchPolicy === 'cache-and-network';\n storeResult = result;\n }\n\n let shouldFetch =\n needToFetch && fetchPolicy !== 'cache-only' && fetchPolicy !== 'standby';\n\n // we need to check to see if this is an operation that uses the @live directive\n if (hasDirectives(['live'], query)) shouldFetch = true;\n\n const requestId = this.idCounter++;\n\n // set up a watcher to listen to cache updates\n const cancel = fetchPolicy !== 'no-cache'\n ? this.updateQueryWatch(queryId, query, options)\n : undefined;\n\n // Initialize query in store with unique requestId\n this.setQuery(queryId, () => ({\n document: query,\n lastRequestId: requestId,\n invalidated: true,\n cancel,\n }));\n\n this.invalidate(fetchMoreForQueryId);\n\n this.queryStore.initQuery({\n queryId,\n document: query,\n storePreviousVariables: shouldFetch,\n variables,\n isPoll: fetchType === FetchType.poll,\n isRefetch: fetchType === FetchType.refetch,\n metadata,\n fetchMoreForQueryId,\n });\n\n this.broadcastQueries();\n\n if (shouldFetch) {\n const networkResult = this.fetchRequest({\n requestId,\n queryId,\n document: query,\n options,\n fetchMoreForQueryId,\n }).catch(error => {\n // This is for the benefit of `refetch` promises, which currently don't get their errors\n // through the store like watchQuery observers do\n if (isApolloError(error)) {\n throw error;\n } else {\n if (requestId >= this.getQuery(queryId).lastRequestId) {\n this.queryStore.markQueryError(queryId, error, fetchMoreForQueryId);\n this.invalidate(queryId);\n this.invalidate(fetchMoreForQueryId);\n this.broadcastQueries();\n }\n throw new ApolloError({ networkError: error });\n }\n });\n\n // we don't return the promise for cache-and-network since it is already\n // returned below from the cache\n if (fetchPolicy !== 'cache-and-network') {\n return networkResult;\n }\n\n // however we need to catch the error so it isn't unhandled in case of\n // network error\n networkResult.catch(() => {});\n }\n\n // If there is no part of the query we need to fetch from the server (or,\n // fetchPolicy is cache-only), we just write the store result as the final result.\n this.queryStore.markQueryResultClient(queryId, !shouldFetch);\n this.invalidate(queryId);\n this.invalidate(fetchMoreForQueryId);\n\n if (this.transform(query).hasForcedResolvers) {\n return this.localState.runResolvers({\n document: query,\n remoteResult: { data: storeResult },\n context,\n variables,\n onlyRunForcedResolvers: true,\n }).then((result: FetchResult) => {\n this.markQueryResult(\n queryId,\n result,\n options,\n fetchMoreForQueryId,\n );\n this.broadcastQueries();\n return result;\n });\n }\n\n this.broadcastQueries();\n\n // If we have no query to send to the server, we should return the result\n // found within the store.\n return { data: storeResult };\n }\n\n private markQueryResult(\n queryId: string,\n result: FetchResult,\n {\n fetchPolicy,\n variables,\n errorPolicy,\n }: WatchQueryOptions,\n fetchMoreForQueryId?: string,\n ) {\n if (fetchPolicy === 'no-cache') {\n this.setQuery(queryId, () => ({\n newData: { result: result.data, complete: true },\n }));\n } else {\n this.dataStore.markQueryResult(\n result,\n this.getQuery(queryId).document!,\n variables,\n fetchMoreForQueryId,\n errorPolicy === 'ignore' || errorPolicy === 'all',\n );\n }\n }\n\n // Returns a query listener that will update the given observer based on the\n // results (or lack thereof) for a particular query.\n public queryListenerForObserver(\n queryId: string,\n options: WatchQueryOptions,\n observer: Observer>,\n ): QueryListener {\n function invoke(method: 'next' | 'error', argument: any) {\n if (observer[method]) {\n try {\n observer[method]!(argument);\n } catch (e) {\n invariant.error(e);\n }\n } else if (method === 'error') {\n invariant.error(argument);\n }\n }\n\n return (\n queryStoreValue: QueryStoreValue,\n newData?: Cache.DiffResult,\n ) => {\n // we're going to take a look at the data, so the query is no longer invalidated\n this.invalidate(queryId, false);\n\n // The query store value can be undefined in the event of a store\n // reset.\n if (!queryStoreValue) return;\n\n const { observableQuery, document } = this.getQuery(queryId);\n\n const fetchPolicy = observableQuery\n ? observableQuery.options.fetchPolicy\n : options.fetchPolicy;\n\n // don't watch the store for queries on standby\n if (fetchPolicy === 'standby') return;\n\n const loading = isNetworkRequestInFlight(queryStoreValue.networkStatus);\n const lastResult = observableQuery && observableQuery.getLastResult();\n\n const networkStatusChanged = !!(\n lastResult &&\n lastResult.networkStatus !== queryStoreValue.networkStatus\n );\n\n const shouldNotifyIfLoading =\n options.returnPartialData ||\n (!newData && queryStoreValue.previousVariables) ||\n (networkStatusChanged && options.notifyOnNetworkStatusChange) ||\n fetchPolicy === 'cache-only' ||\n fetchPolicy === 'cache-and-network';\n\n if (loading && !shouldNotifyIfLoading) {\n return;\n }\n\n const hasGraphQLErrors = isNonEmptyArray(queryStoreValue.graphQLErrors);\n\n const errorPolicy: ErrorPolicy = observableQuery\n && observableQuery.options.errorPolicy\n || options.errorPolicy\n || 'none';\n\n // If we have either a GraphQL error or a network error, we create\n // an error and tell the observer about it.\n if (errorPolicy === 'none' && hasGraphQLErrors || queryStoreValue.networkError) {\n return invoke('error', new ApolloError({\n graphQLErrors: queryStoreValue.graphQLErrors,\n networkError: queryStoreValue.networkError,\n }));\n }\n\n try {\n let data: any;\n let isMissing: boolean;\n\n if (newData) {\n // As long as we're using the cache, clear out the latest\n // `newData`, since it will now become the current data. We need\n // to keep the `newData` stored with the query when using\n // `no-cache` since `getCurrentQueryResult` attemps to pull from\n // `newData` first, following by trying the cache (which won't\n // find a hit for `no-cache`).\n if (fetchPolicy !== 'no-cache' && fetchPolicy !== 'network-only') {\n this.setQuery(queryId, () => ({ newData: null }));\n }\n\n data = newData.result;\n isMissing = !newData.complete;\n } else {\n const lastError = observableQuery && observableQuery.getLastError();\n const errorStatusChanged =\n errorPolicy !== 'none' &&\n (lastError && lastError.graphQLErrors) !==\n queryStoreValue.graphQLErrors;\n\n if (lastResult && lastResult.data && !errorStatusChanged) {\n data = lastResult.data;\n isMissing = false;\n } else {\n const diffResult = this.dataStore.getCache().diff({\n query: document as DocumentNode,\n variables:\n queryStoreValue.previousVariables ||\n queryStoreValue.variables,\n returnPartialData: true,\n optimistic: true,\n });\n\n data = diffResult.result;\n isMissing = !diffResult.complete;\n }\n }\n\n // If there is some data missing and the user has told us that they\n // do not tolerate partial data then we want to return the previous\n // result and mark it as stale.\n const stale = isMissing && !(\n options.returnPartialData ||\n fetchPolicy === 'cache-only'\n );\n\n const resultFromStore: ApolloQueryResult = {\n data: stale ? lastResult && lastResult.data : data,\n loading,\n networkStatus: queryStoreValue.networkStatus,\n stale,\n };\n\n // if the query wants updates on errors we need to add it to the result\n if (errorPolicy === 'all' && hasGraphQLErrors) {\n resultFromStore.errors = queryStoreValue.graphQLErrors;\n }\n\n invoke('next', resultFromStore);\n\n } catch (networkError) {\n invoke('error', new ApolloError({ networkError }));\n }\n };\n }\n\n private transformCache = new (canUseWeakMap ? WeakMap : Map)<\n DocumentNode,\n Readonly<{\n document: Readonly;\n hasClientExports: boolean;\n hasForcedResolvers: boolean;\n clientQuery: Readonly | null;\n serverQuery: Readonly | null;\n defaultVars: Readonly;\n }>\n >();\n\n public transform(document: DocumentNode) {\n const { transformCache } = this;\n\n if (!transformCache.has(document)) {\n const cache = this.dataStore.getCache();\n const transformed = cache.transformDocument(document);\n const forLink = removeConnectionDirectiveFromDocument(\n cache.transformForLink(transformed));\n\n const clientQuery = this.localState.clientQuery(transformed);\n const serverQuery = this.localState.serverQuery(forLink);\n\n const cacheEntry = {\n document: transformed,\n // TODO These two calls (hasClientExports and shouldForceResolvers)\n // could probably be merged into a single traversal.\n hasClientExports: hasClientExports(transformed),\n hasForcedResolvers: this.localState.shouldForceResolvers(transformed),\n clientQuery,\n serverQuery,\n defaultVars: getDefaultValues(\n getOperationDefinition(transformed)\n ) as OperationVariables,\n };\n\n const add = (doc: DocumentNode | null) => {\n if (doc && !transformCache.has(doc)) {\n transformCache.set(doc, cacheEntry);\n }\n }\n // Add cacheEntry to the transformCache using several different keys,\n // since any one of these documents could end up getting passed to the\n // transform method again in the future.\n add(document);\n add(transformed);\n add(clientQuery);\n add(serverQuery);\n }\n\n return transformCache.get(document)!;\n }\n\n private getVariables(\n document: DocumentNode,\n variables?: OperationVariables,\n ): OperationVariables {\n return {\n ...this.transform(document).defaultVars,\n ...variables,\n };\n }\n\n // The shouldSubscribe option is a temporary fix that tells us whether watchQuery was called\n // directly (i.e. through ApolloClient) or through the query method within QueryManager.\n // Currently, the query method uses watchQuery in order to handle non-network errors correctly\n // but we don't want to keep track observables issued for the query method since those aren't\n // supposed to be refetched in the event of a store reset. Once we unify error handling for\n // network errors and non-network errors, the shouldSubscribe option will go away.\n\n public watchQuery(\n options: WatchQueryOptions,\n shouldSubscribe = true,\n ): ObservableQuery {\n invariant(\n options.fetchPolicy !== 'standby',\n 'client.watchQuery cannot be called with fetchPolicy set to \"standby\"',\n );\n\n // assign variable default values if supplied\n options.variables = this.getVariables(options.query, options.variables);\n\n if (typeof options.notifyOnNetworkStatusChange === 'undefined') {\n options.notifyOnNetworkStatusChange = false;\n }\n\n let transformedOptions = { ...options } as WatchQueryOptions;\n\n return new ObservableQuery({\n queryManager: this,\n options: transformedOptions,\n shouldSubscribe: shouldSubscribe,\n });\n }\n\n public query(options: QueryOptions): Promise> {\n invariant(\n options.query,\n 'query option is required. You must specify your GraphQL document ' +\n 'in the query option.',\n );\n\n invariant(\n options.query.kind === 'Document',\n 'You must wrap the query string in a \"gql\" tag.',\n );\n\n invariant(\n !(options as any).returnPartialData,\n 'returnPartialData option only supported on watchQuery.',\n );\n\n invariant(\n !(options as any).pollInterval,\n 'pollInterval option only supported on watchQuery.',\n );\n\n return new Promise>((resolve, reject) => {\n const watchedQuery = this.watchQuery(options, false);\n this.fetchQueryRejectFns.set(`query:${watchedQuery.queryId}`, reject);\n watchedQuery\n .result()\n .then(resolve, reject)\n // Since neither resolve nor reject throw or return a value, this .then\n // handler is guaranteed to execute. Note that it doesn't really matter\n // when we remove the reject function from this.fetchQueryRejectFns,\n // since resolve and reject are mutually idempotent. In fact, it would\n // not be incorrect to let reject functions accumulate over time; it's\n // just a waste of memory.\n .then(() =>\n this.fetchQueryRejectFns.delete(`query:${watchedQuery.queryId}`),\n );\n });\n }\n\n public generateQueryId() {\n return String(this.idCounter++);\n }\n\n public stopQueryInStore(queryId: string) {\n this.stopQueryInStoreNoBroadcast(queryId);\n this.broadcastQueries();\n }\n\n private stopQueryInStoreNoBroadcast(queryId: string) {\n this.stopPollingQuery(queryId);\n this.queryStore.stopQuery(queryId);\n this.invalidate(queryId);\n }\n\n public addQueryListener(queryId: string, listener: QueryListener) {\n this.setQuery(queryId, ({ listeners }) => {\n listeners.add(listener);\n return { invalidated: false };\n });\n }\n\n public updateQueryWatch(\n queryId: string,\n document: DocumentNode,\n options: WatchQueryOptions,\n ) {\n const { cancel } = this.getQuery(queryId);\n if (cancel) cancel();\n const previousResult = () => {\n let previousResult = null;\n const { observableQuery } = this.getQuery(queryId);\n if (observableQuery) {\n const lastResult = observableQuery.getLastResult();\n if (lastResult) {\n previousResult = lastResult.data;\n }\n }\n\n return previousResult;\n };\n return this.dataStore.getCache().watch({\n query: document as DocumentNode,\n variables: options.variables,\n optimistic: true,\n previousResult,\n callback: newData => {\n this.setQuery(queryId, () => ({ invalidated: true, newData }));\n },\n });\n }\n\n // Adds an ObservableQuery to this.observableQueries and to this.observableQueriesByName.\n public addObservableQuery(\n queryId: string,\n observableQuery: ObservableQuery,\n ) {\n this.setQuery(queryId, () => ({ observableQuery }));\n }\n\n public removeObservableQuery(queryId: string) {\n const { cancel } = this.getQuery(queryId);\n this.setQuery(queryId, () => ({ observableQuery: null }));\n if (cancel) cancel();\n }\n\n public clearStore(): Promise {\n // Before we have sent the reset action to the store,\n // we can no longer rely on the results returned by in-flight\n // requests since these may depend on values that previously existed\n // in the data portion of the store. So, we cancel the promises and observers\n // that we have issued so far and not yet resolved (in the case of\n // queries).\n this.fetchQueryRejectFns.forEach(reject => {\n reject(new InvariantError(\n 'Store reset while query was in flight (not completed in link chain)',\n ));\n });\n\n const resetIds: string[] = [];\n this.queries.forEach(({ observableQuery }, queryId) => {\n if (observableQuery) resetIds.push(queryId);\n });\n\n this.queryStore.reset(resetIds);\n this.mutationStore.reset();\n\n // begin removing data from the store\n return this.dataStore.reset();\n }\n\n public resetStore(): Promise[]> {\n // Similarly, we have to have to refetch each of the queries currently being\n // observed. We refetch instead of error'ing on these since the assumption is that\n // resetting the store doesn't eliminate the need for the queries currently being\n // watched. If there is an existing query in flight when the store is reset,\n // the promise for it will be rejected and its results will not be written to the\n // store.\n return this.clearStore().then(() => {\n return this.reFetchObservableQueries();\n });\n }\n\n public reFetchObservableQueries(\n includeStandby: boolean = false,\n ): Promise[]> {\n const observableQueryPromises: Promise>[] = [];\n\n this.queries.forEach(({ observableQuery }, queryId) => {\n if (observableQuery) {\n const fetchPolicy = observableQuery.options.fetchPolicy;\n\n observableQuery.resetLastResults();\n if (\n fetchPolicy !== 'cache-only' &&\n (includeStandby || fetchPolicy !== 'standby')\n ) {\n observableQueryPromises.push(observableQuery.refetch());\n }\n\n this.setQuery(queryId, () => ({ newData: null }));\n this.invalidate(queryId);\n }\n });\n\n this.broadcastQueries();\n\n return Promise.all(observableQueryPromises);\n }\n\n public observeQuery(\n queryId: string,\n options: WatchQueryOptions,\n observer: Observer>,\n ) {\n this.addQueryListener(\n queryId,\n this.queryListenerForObserver(queryId, options, observer),\n );\n return this.fetchQuery(queryId, options);\n }\n\n public startQuery(\n queryId: string,\n options: WatchQueryOptions,\n listener: QueryListener,\n ) {\n invariant.warn(\"The QueryManager.startQuery method has been deprecated\");\n\n this.addQueryListener(queryId, listener);\n\n this.fetchQuery(queryId, options)\n // `fetchQuery` returns a Promise. In case of a failure it should be caucht or else the\n // console will show an `Uncaught (in promise)` message. Ignore the error for now.\n .catch(() => undefined);\n\n return queryId;\n }\n\n public startGraphQLSubscription({\n query,\n fetchPolicy,\n variables,\n }: SubscriptionOptions): Observable> {\n query = this.transform(query).document;\n variables = this.getVariables(query, variables);\n\n const makeObservable = (variables: OperationVariables) =>\n this.getObservableFromLink(\n query,\n {},\n variables,\n false,\n ).map(result => {\n if (!fetchPolicy || fetchPolicy !== 'no-cache') {\n this.dataStore.markSubscriptionResult(\n result,\n query,\n variables,\n );\n this.broadcastQueries();\n }\n\n if (graphQLResultHasError(result)) {\n throw new ApolloError({\n graphQLErrors: result.errors,\n });\n }\n\n return result;\n });\n\n if (this.transform(query).hasClientExports) {\n const observablePromise = this.localState.addExportedVariables(\n query,\n variables,\n ).then(makeObservable);\n\n return new Observable>(observer => {\n let sub: Subscription | null = null;\n observablePromise.then(\n observable => sub = observable.subscribe(observer),\n observer.error,\n );\n return () => sub && sub.unsubscribe();\n });\n }\n\n return makeObservable(variables);\n }\n\n public stopQuery(queryId: string) {\n this.stopQueryNoBroadcast(queryId);\n this.broadcastQueries();\n }\n\n private stopQueryNoBroadcast(queryId: string) {\n this.stopQueryInStoreNoBroadcast(queryId);\n this.removeQuery(queryId);\n }\n\n public removeQuery(queryId: string) {\n // teardown all links\n // Both `QueryManager.fetchRequest` and `QueryManager.query` create separate promises\n // that each add their reject functions to fetchQueryRejectFns.\n // A query created with `QueryManager.query()` could trigger a `QueryManager.fetchRequest`.\n // The same queryId could have two rejection fns for two promises\n this.fetchQueryRejectFns.delete(`query:${queryId}`);\n this.fetchQueryRejectFns.delete(`fetchRequest:${queryId}`);\n this.getQuery(queryId).subscriptions.forEach(x => x.unsubscribe());\n this.queries.delete(queryId);\n }\n\n public getCurrentQueryResult(\n observableQuery: ObservableQuery,\n optimistic: boolean = true,\n ): {\n data: T | undefined;\n partial: boolean;\n } {\n const { variables, query, fetchPolicy, returnPartialData } = observableQuery.options;\n const lastResult = observableQuery.getLastResult();\n const { newData } = this.getQuery(observableQuery.queryId);\n\n if (newData && newData.complete) {\n return { data: newData.result, partial: false };\n }\n\n if (fetchPolicy === 'no-cache' || fetchPolicy === 'network-only') {\n return { data: undefined, partial: false };\n }\n\n const { result, complete } = this.dataStore.getCache().diff({\n query,\n variables,\n previousResult: lastResult ? lastResult.data : undefined,\n returnPartialData: true,\n optimistic,\n });\n\n return {\n data: (complete || returnPartialData) ? result : void 0,\n partial: !complete,\n };\n }\n\n public getQueryWithPreviousResult(\n queryIdOrObservable: string | ObservableQuery,\n ): {\n previousResult: any;\n variables: TVariables | undefined;\n document: DocumentNode;\n } {\n let observableQuery: ObservableQuery;\n if (typeof queryIdOrObservable === 'string') {\n const { observableQuery: foundObserveableQuery } = this.getQuery(\n queryIdOrObservable,\n );\n invariant(\n foundObserveableQuery,\n `ObservableQuery with this id doesn't exist: ${queryIdOrObservable}`\n );\n observableQuery = foundObserveableQuery!;\n } else {\n observableQuery = queryIdOrObservable;\n }\n\n const { variables, query } = observableQuery.options;\n return {\n previousResult: this.getCurrentQueryResult(observableQuery, false).data,\n variables,\n document: query,\n };\n }\n\n public broadcastQueries() {\n this.onBroadcast();\n this.queries.forEach((info, id) => {\n if (info.invalidated) {\n info.listeners.forEach(listener => {\n // it's possible for the listener to be undefined if the query is being stopped\n // See here for more detail: https://github.com/apollostack/apollo-client/issues/231\n if (listener) {\n listener(this.queryStore.get(id), info.newData);\n }\n });\n }\n });\n }\n\n public getLocalState(): LocalState {\n return this.localState;\n }\n\n private inFlightLinkObservables = new Map<\n DocumentNode,\n Map>\n >();\n\n private getObservableFromLink(\n query: DocumentNode,\n context: any,\n variables?: OperationVariables,\n deduplication: boolean = this.queryDeduplication,\n ): Observable> {\n let observable: Observable>;\n\n const { serverQuery } = this.transform(query);\n if (serverQuery) {\n const { inFlightLinkObservables, link } = this;\n\n const operation = {\n query: serverQuery,\n variables,\n operationName: getOperationName(serverQuery) || void 0,\n context: this.prepareContext({\n ...context,\n forceFetch: !deduplication\n }),\n };\n\n context = operation.context;\n\n if (deduplication) {\n const byVariables = inFlightLinkObservables.get(serverQuery) || new Map();\n inFlightLinkObservables.set(serverQuery, byVariables);\n\n const varJson = JSON.stringify(variables);\n observable = byVariables.get(varJson);\n\n if (!observable) {\n byVariables.set(\n varJson,\n observable = multiplex(\n execute(link, operation) as Observable>\n )\n );\n\n const cleanup = () => {\n byVariables.delete(varJson);\n if (!byVariables.size) inFlightLinkObservables.delete(serverQuery);\n cleanupSub.unsubscribe();\n };\n\n const cleanupSub = observable.subscribe({\n next: cleanup,\n error: cleanup,\n complete: cleanup,\n });\n }\n\n } else {\n observable = multiplex(execute(link, operation) as Observable>);\n }\n } else {\n observable = Observable.of({ data: {} } as FetchResult);\n context = this.prepareContext(context);\n }\n\n const { clientQuery } = this.transform(query);\n if (clientQuery) {\n observable = asyncMap(observable, result => {\n return this.localState.runResolvers({\n document: clientQuery,\n remoteResult: result,\n context,\n variables,\n });\n });\n }\n\n return observable;\n }\n\n // Takes a request id, query id, a query document and information associated with the query\n // and send it to the network interface. Returns\n // a promise for the result associated with that request.\n private fetchRequest({\n requestId,\n queryId,\n document,\n options,\n fetchMoreForQueryId,\n }: {\n requestId: number;\n queryId: string;\n document: DocumentNode;\n options: WatchQueryOptions;\n fetchMoreForQueryId?: string;\n }): Promise> {\n const { variables, errorPolicy = 'none', fetchPolicy } = options;\n let resultFromStore: any;\n let errorsFromStore: any;\n\n return new Promise>((resolve, reject) => {\n const observable = this.getObservableFromLink(\n document,\n options.context,\n variables,\n );\n\n const fqrfId = `fetchRequest:${queryId}`;\n this.fetchQueryRejectFns.set(fqrfId, reject);\n\n const cleanup = () => {\n this.fetchQueryRejectFns.delete(fqrfId);\n this.setQuery(queryId, ({ subscriptions }) => {\n subscriptions.delete(subscription);\n });\n };\n\n const subscription = observable.map((result: FetchResult) => {\n if (requestId >= this.getQuery(queryId).lastRequestId) {\n this.markQueryResult(\n queryId,\n result,\n options,\n fetchMoreForQueryId,\n );\n\n this.queryStore.markQueryResult(\n queryId,\n result,\n fetchMoreForQueryId,\n );\n\n this.invalidate(queryId);\n this.invalidate(fetchMoreForQueryId);\n\n this.broadcastQueries();\n }\n\n if (errorPolicy === 'none' && isNonEmptyArray(result.errors)) {\n return reject(new ApolloError({\n graphQLErrors: result.errors,\n }));\n }\n\n if (errorPolicy === 'all') {\n errorsFromStore = result.errors;\n }\n\n if (fetchMoreForQueryId || fetchPolicy === 'no-cache') {\n // We don't write fetchMore results to the store because this would overwrite\n // the original result in case an @connection directive is used.\n resultFromStore = result.data;\n } else {\n // ensure result is combined with data already in store\n const { result, complete } = this.dataStore.getCache().diff({\n variables,\n query: document,\n optimistic: false,\n returnPartialData: true,\n });\n\n if (complete || options.returnPartialData) {\n resultFromStore = result;\n }\n }\n }).subscribe({\n error(error: ApolloError) {\n cleanup();\n reject(error);\n },\n\n complete() {\n cleanup();\n resolve({\n data: resultFromStore,\n errors: errorsFromStore,\n loading: false,\n networkStatus: NetworkStatus.ready,\n stale: false,\n });\n },\n });\n\n this.setQuery(queryId, ({ subscriptions }) => {\n subscriptions.add(subscription);\n });\n });\n }\n\n private getQuery(queryId: string) {\n return (\n this.queries.get(queryId) || {\n listeners: new Set(),\n invalidated: false,\n document: null,\n newData: null,\n lastRequestId: 1,\n observableQuery: null,\n subscriptions: new Set(),\n }\n );\n }\n\n private setQuery(\n queryId: string,\n updater: (prev: QueryInfo) => Pick | void,\n ) {\n const prev = this.getQuery(queryId);\n const newInfo = { ...prev, ...updater(prev) };\n this.queries.set(queryId, newInfo);\n }\n\n private invalidate(\n queryId: string | undefined,\n invalidated = true,\n ) {\n if (queryId) {\n this.setQuery(queryId, () => ({ invalidated }));\n }\n }\n\n private prepareContext(context = {}) {\n const newContext = this.localState.prepareContext(context);\n return {\n ...newContext,\n clientAwareness: this.clientAwareness,\n };\n }\n\n public checkInFlight(queryId: string) {\n const query = this.queryStore.get(queryId);\n\n return (\n query &&\n query.networkStatus !== NetworkStatus.ready &&\n query.networkStatus !== NetworkStatus.error\n );\n }\n\n // Map from client ID to { interval, options }.\n private pollingInfoByQueryId = new Map();\n\n public startPollingQuery(\n options: WatchQueryOptions,\n queryId: string,\n listener?: QueryListener,\n ): string {\n const { pollInterval } = options;\n\n invariant(\n pollInterval,\n 'Attempted to start a polling query without a polling interval.',\n );\n\n // Do not poll in SSR mode\n if (!this.ssrMode) {\n let info = this.pollingInfoByQueryId.get(queryId)!;\n if (!info) {\n this.pollingInfoByQueryId.set(queryId, (info = {} as any));\n }\n\n info.interval = pollInterval!;\n info.options = {\n ...options,\n fetchPolicy: 'network-only',\n };\n\n const maybeFetch = () => {\n const info = this.pollingInfoByQueryId.get(queryId);\n if (info) {\n if (this.checkInFlight(queryId)) {\n poll();\n } else {\n this.fetchQuery(queryId, info.options, FetchType.poll).then(\n poll,\n poll,\n );\n }\n }\n };\n\n const poll = () => {\n const info = this.pollingInfoByQueryId.get(queryId);\n if (info) {\n clearTimeout(info.timeout);\n info.timeout = setTimeout(maybeFetch, info.interval);\n }\n };\n\n if (listener) {\n this.addQueryListener(queryId, listener);\n }\n\n poll();\n }\n\n return queryId;\n }\n\n public stopPollingQuery(queryId: string) {\n this.pollingInfoByQueryId.delete(queryId);\n }\n}\n","import { ExecutionResult, DocumentNode } from 'graphql';\nimport { ApolloCache, Cache, DataProxy } from 'apollo-cache';\n\nimport { QueryStoreValue } from '../data/queries';\nimport {\n getOperationName,\n tryFunctionOrLogError,\n graphQLResultHasError,\n} from 'apollo-utilities';\nimport { MutationQueryReducer } from '../core/types';\n\nexport type QueryWithUpdater = {\n updater: MutationQueryReducer;\n query: QueryStoreValue;\n};\n\nexport interface DataWrite {\n rootId: string;\n result: any;\n document: DocumentNode;\n operationName: string | null;\n variables: Object;\n}\n\nexport class DataStore {\n private cache: ApolloCache;\n\n constructor(initialCache: ApolloCache) {\n this.cache = initialCache;\n }\n\n public getCache(): ApolloCache {\n return this.cache;\n }\n\n public markQueryResult(\n result: ExecutionResult,\n document: DocumentNode,\n variables: any,\n fetchMoreForQueryId: string | undefined,\n ignoreErrors: boolean = false,\n ) {\n let writeWithErrors = !graphQLResultHasError(result);\n if (ignoreErrors && graphQLResultHasError(result) && result.data) {\n writeWithErrors = true;\n }\n if (!fetchMoreForQueryId && writeWithErrors) {\n this.cache.write({\n result: result.data,\n dataId: 'ROOT_QUERY',\n query: document,\n variables: variables,\n });\n }\n }\n\n public markSubscriptionResult(\n result: ExecutionResult,\n document: DocumentNode,\n variables: any,\n ) {\n // the subscription interface should handle not sending us results we no longer subscribe to.\n // XXX I don't think we ever send in an object with errors, but we might in the future...\n if (!graphQLResultHasError(result)) {\n this.cache.write({\n result: result.data,\n dataId: 'ROOT_SUBSCRIPTION',\n query: document,\n variables: variables,\n });\n }\n }\n\n public markMutationInit(mutation: {\n mutationId: string;\n document: DocumentNode;\n variables: any;\n updateQueries: { [queryId: string]: QueryWithUpdater };\n update: ((proxy: DataProxy, mutationResult: Object) => void) | undefined;\n optimisticResponse: Object | Function | undefined;\n }) {\n if (mutation.optimisticResponse) {\n let optimistic: Object;\n if (typeof mutation.optimisticResponse === 'function') {\n optimistic = mutation.optimisticResponse(mutation.variables);\n } else {\n optimistic = mutation.optimisticResponse;\n }\n\n this.cache.recordOptimisticTransaction(c => {\n const orig = this.cache;\n this.cache = c;\n\n try {\n this.markMutationResult({\n mutationId: mutation.mutationId,\n result: { data: optimistic },\n document: mutation.document,\n variables: mutation.variables,\n updateQueries: mutation.updateQueries,\n update: mutation.update,\n });\n } finally {\n this.cache = orig;\n }\n }, mutation.mutationId);\n }\n }\n\n public markMutationResult(mutation: {\n mutationId: string;\n result: ExecutionResult;\n document: DocumentNode;\n variables: any;\n updateQueries: { [queryId: string]: QueryWithUpdater };\n update: ((proxy: DataProxy, mutationResult: Object) => void) | undefined;\n }) {\n // Incorporate the result from this mutation into the store\n if (!graphQLResultHasError(mutation.result)) {\n const cacheWrites: Cache.WriteOptions[] = [{\n result: mutation.result.data,\n dataId: 'ROOT_MUTATION',\n query: mutation.document,\n variables: mutation.variables,\n }];\n\n const { updateQueries } = mutation;\n if (updateQueries) {\n Object.keys(updateQueries).forEach(id => {\n const { query, updater } = updateQueries[id];\n\n // Read the current query result from the store.\n const { result: currentQueryResult, complete } = this.cache.diff({\n query: query.document,\n variables: query.variables,\n returnPartialData: true,\n optimistic: false,\n });\n\n if (complete) {\n // Run our reducer using the current query result and the mutation result.\n const nextQueryResult = tryFunctionOrLogError(() =>\n updater(currentQueryResult, {\n mutationResult: mutation.result,\n queryName: getOperationName(query.document) || undefined,\n queryVariables: query.variables,\n }),\n );\n\n // Write the modified result back into the store if we got a new result.\n if (nextQueryResult) {\n cacheWrites.push({\n result: nextQueryResult,\n dataId: 'ROOT_QUERY',\n query: query.document,\n variables: query.variables,\n });\n }\n }\n });\n }\n\n this.cache.performTransaction(c => {\n cacheWrites.forEach(write => c.write(write));\n\n // If the mutation has some writes associated with it then we need to\n // apply those writes to the store by running this reducer again with a\n // write action.\n const { update } = mutation;\n if (update) {\n tryFunctionOrLogError(() => update(c, mutation.result));\n }\n });\n }\n }\n\n public markMutationComplete({\n mutationId,\n optimisticResponse,\n }: {\n mutationId: string;\n optimisticResponse?: any;\n }) {\n if (optimisticResponse) {\n this.cache.removeOptimistic(mutationId);\n }\n }\n\n public markUpdateQueryResult(\n document: DocumentNode,\n variables: any,\n newResult: any,\n ) {\n this.cache.write({\n result: newResult,\n dataId: 'ROOT_QUERY',\n variables,\n query: document,\n });\n }\n\n public reset(): Promise {\n return this.cache.reset();\n }\n}\n","export const version = \"2.6.10\"","import {\n ApolloLink,\n FetchResult,\n GraphQLRequest,\n execute,\n} from 'apollo-link';\nimport { ExecutionResult, DocumentNode } from 'graphql';\nimport { ApolloCache, DataProxy } from 'apollo-cache';\n\nimport { invariant, InvariantError } from 'ts-invariant';\n\nimport { QueryManager } from './core/QueryManager';\nimport {\n ApolloQueryResult,\n OperationVariables,\n Resolvers,\n} from './core/types';\nimport { ObservableQuery } from './core/ObservableQuery';\nimport { LocalState, FragmentMatcher } from './core/LocalState';\nimport { Observable } from './util/Observable';\n\nimport {\n QueryOptions,\n WatchQueryOptions,\n SubscriptionOptions,\n MutationOptions,\n WatchQueryFetchPolicy,\n} from './core/watchQueryOptions';\n\nimport { DataStore } from './data/store';\n\nimport { version } from './version';\n\nexport interface DefaultOptions {\n watchQuery?: Partial;\n query?: Partial;\n mutate?: Partial;\n}\n\nlet hasSuggestedDevtools = false;\n\nexport type ApolloClientOptions = {\n link?: ApolloLink;\n cache: ApolloCache;\n ssrForceFetchDelay?: number;\n ssrMode?: boolean;\n connectToDevTools?: boolean;\n queryDeduplication?: boolean;\n defaultOptions?: DefaultOptions;\n assumeImmutableResults?: boolean;\n resolvers?: Resolvers | Resolvers[];\n typeDefs?: string | string[] | DocumentNode | DocumentNode[];\n fragmentMatcher?: FragmentMatcher;\n name?: string;\n version?: string;\n};\n\n/**\n * This is the primary Apollo Client class. It is used to send GraphQL documents (i.e. queries\n * and mutations) to a GraphQL spec-compliant server over a {@link NetworkInterface} instance,\n * receive results from the server and cache the results in a store. It also delivers updates\n * to GraphQL queries through {@link Observable} instances.\n */\nexport default class ApolloClient implements DataProxy {\n public link: ApolloLink;\n public store: DataStore;\n public cache: ApolloCache;\n public readonly queryManager: QueryManager;\n public disableNetworkFetches: boolean;\n public version: string;\n public queryDeduplication: boolean;\n public defaultOptions: DefaultOptions = {};\n public readonly typeDefs: ApolloClientOptions['typeDefs'];\n\n private devToolsHookCb: Function;\n private resetStoreCallbacks: Array<() => Promise> = [];\n private clearStoreCallbacks: Array<() => Promise> = [];\n private localState: LocalState;\n\n /**\n * Constructs an instance of {@link ApolloClient}.\n *\n * @param link The {@link ApolloLink} over which GraphQL documents will be resolved into a response.\n *\n * @param cache The initial cache to use in the data store.\n *\n * @param ssrMode Determines whether this is being run in Server Side Rendering (SSR) mode.\n *\n * @param ssrForceFetchDelay Determines the time interval before we force fetch queries for a\n * server side render.\n *\n * @param queryDeduplication If set to false, a query will still be sent to the server even if a query\n * with identical parameters (query, variables, operationName) is already in flight.\n *\n * @param defaultOptions Used to set application wide defaults for the\n * options supplied to `watchQuery`, `query`, or\n * `mutate`.\n *\n * @param assumeImmutableResults When this option is true, the client will assume results\n * read from the cache are never mutated by application code,\n * which enables substantial performance optimizations. Passing\n * `{ freezeResults: true }` to the `InMemoryCache` constructor\n * can help enforce this immutability.\n *\n * @param name A custom name that can be used to identify this client, when\n * using Apollo client awareness features. E.g. \"iOS\".\n *\n * @param version A custom version that can be used to identify this client,\n * when using Apollo client awareness features. This is the\n * version of your client, which you may want to increment on\n * new builds. This is NOT the version of Apollo Client that\n * you are using.\n */\n constructor(options: ApolloClientOptions) {\n const {\n cache,\n ssrMode = false,\n ssrForceFetchDelay = 0,\n connectToDevTools,\n queryDeduplication = true,\n defaultOptions,\n assumeImmutableResults = false,\n resolvers,\n typeDefs,\n fragmentMatcher,\n name: clientAwarenessName,\n version: clientAwarenessVersion,\n } = options;\n\n let { link } = options;\n\n // If a link hasn't been defined, but local state resolvers have been set,\n // setup a default empty link.\n if (!link && resolvers) {\n link = ApolloLink.empty();\n }\n\n if (!link || !cache) {\n throw new InvariantError(\n \"In order to initialize Apollo Client, you must specify 'link' and 'cache' properties in the options object.\\n\" +\n \"These options are part of the upgrade requirements when migrating from Apollo Client 1.x to Apollo Client 2.x.\\n\" +\n \"For more information, please visit: https://www.apollographql.com/docs/tutorial/client.html#apollo-client-setup\"\n );\n }\n\n // remove apollo-client supported directives\n this.link = link;\n this.cache = cache;\n this.store = new DataStore(cache);\n this.disableNetworkFetches = ssrMode || ssrForceFetchDelay > 0;\n this.queryDeduplication = queryDeduplication;\n this.defaultOptions = defaultOptions || {};\n this.typeDefs = typeDefs;\n\n if (ssrForceFetchDelay) {\n setTimeout(\n () => (this.disableNetworkFetches = false),\n ssrForceFetchDelay,\n );\n }\n\n this.watchQuery = this.watchQuery.bind(this);\n this.query = this.query.bind(this);\n this.mutate = this.mutate.bind(this);\n this.resetStore = this.resetStore.bind(this);\n this.reFetchObservableQueries = this.reFetchObservableQueries.bind(this);\n\n // Attach the client instance to window to let us be found by chrome devtools, but only in\n // development mode\n const defaultConnectToDevTools =\n process.env.NODE_ENV !== 'production' &&\n typeof window !== 'undefined' &&\n !(window as any).__APOLLO_CLIENT__;\n\n if (\n typeof connectToDevTools === 'undefined'\n ? defaultConnectToDevTools\n : connectToDevTools && typeof window !== 'undefined'\n ) {\n (window as any).__APOLLO_CLIENT__ = this;\n }\n\n /**\n * Suggest installing the devtools for developers who don't have them\n */\n if (!hasSuggestedDevtools && process.env.NODE_ENV !== 'production') {\n hasSuggestedDevtools = true;\n if (\n typeof window !== 'undefined' &&\n window.document &&\n window.top === window.self\n ) {\n // First check if devtools is not installed\n if (\n typeof (window as any).__APOLLO_DEVTOOLS_GLOBAL_HOOK__ === 'undefined'\n ) {\n // Only for Chrome\n if (\n window.navigator &&\n window.navigator.userAgent &&\n window.navigator.userAgent.indexOf('Chrome') > -1\n ) {\n // tslint:disable-next-line\n console.debug(\n 'Download the Apollo DevTools ' +\n 'for a better development experience: ' +\n 'https://chrome.google.com/webstore/detail/apollo-client-developer-t/jdkknkkbebbapilgoeccciglkfbmbnfm',\n );\n }\n }\n }\n }\n\n this.version = version;\n\n this.localState = new LocalState({\n cache,\n client: this,\n resolvers,\n fragmentMatcher,\n });\n\n this.queryManager = new QueryManager({\n link: this.link,\n store: this.store,\n queryDeduplication,\n ssrMode,\n clientAwareness: {\n name: clientAwarenessName!,\n version: clientAwarenessVersion!,\n },\n localState: this.localState,\n assumeImmutableResults,\n onBroadcast: () => {\n if (this.devToolsHookCb) {\n this.devToolsHookCb({\n action: {},\n state: {\n queries: this.queryManager.queryStore.getStore(),\n mutations: this.queryManager.mutationStore.getStore(),\n },\n dataWithOptimisticResults: this.cache.extract(true),\n });\n }\n },\n });\n }\n\n /**\n * Call this method to terminate any active client processes, making it safe\n * to dispose of this `ApolloClient` instance.\n */\n public stop() {\n this.queryManager.stop();\n }\n\n /**\n * This watches the cache store of the query according to the options specified and\n * returns an {@link ObservableQuery}. We can subscribe to this {@link ObservableQuery} and\n * receive updated results through a GraphQL observer when the cache store changes.\n *

\n * Note that this method is not an implementation of GraphQL subscriptions. Rather,\n * it uses Apollo's store in order to reactively deliver updates to your query results.\n *

\n * For example, suppose you call watchQuery on a GraphQL query that fetches a person's\n * first and last name and this person has a particular object identifer, provided by\n * dataIdFromObject. Later, a different query fetches that same person's\n * first and last name and the first name has now changed. Then, any observers associated\n * with the results of the first query will be updated with a new result object.\n *

\n * Note that if the cache does not change, the subscriber will *not* be notified.\n *

\n * See [here](https://medium.com/apollo-stack/the-concepts-of-graphql-bc68bd819be3#.3mb0cbcmc) for\n * a description of store reactivity.\n */\n public watchQuery(\n options: WatchQueryOptions,\n ): ObservableQuery {\n if (this.defaultOptions.watchQuery) {\n options = {\n ...this.defaultOptions.watchQuery,\n ...options,\n } as WatchQueryOptions;\n }\n\n // XXX Overwriting options is probably not the best way to do this long term...\n if (\n this.disableNetworkFetches &&\n (options.fetchPolicy === 'network-only' ||\n options.fetchPolicy === 'cache-and-network')\n ) {\n options = { ...options, fetchPolicy: 'cache-first' };\n }\n\n return this.queryManager.watchQuery(options);\n }\n\n /**\n * This resolves a single query according to the options specified and\n * returns a {@link Promise} which is either resolved with the resulting data\n * or rejected with an error.\n *\n * @param options An object of type {@link QueryOptions} that allows us to\n * describe how this query should be treated e.g. whether it should hit the\n * server at all or just resolve from the cache, etc.\n */\n public query(\n options: QueryOptions,\n ): Promise> {\n if (this.defaultOptions.query) {\n options = { ...this.defaultOptions.query, ...options } as QueryOptions<\n TVariables\n >;\n }\n\n invariant(\n (options.fetchPolicy as WatchQueryFetchPolicy) !== 'cache-and-network',\n 'The cache-and-network fetchPolicy does not work with client.query, because ' +\n 'client.query can only return a single result. Please use client.watchQuery ' +\n 'to receive multiple results from the cache and the network, or consider ' +\n 'using a different fetchPolicy, such as cache-first or network-only.'\n );\n\n if (this.disableNetworkFetches && options.fetchPolicy === 'network-only') {\n options = { ...options, fetchPolicy: 'cache-first' };\n }\n\n return this.queryManager.query(options);\n }\n\n /**\n * This resolves a single mutation according to the options specified and returns a\n * {@link Promise} which is either resolved with the resulting data or rejected with an\n * error.\n *\n * It takes options as an object with the following keys and values:\n */\n public mutate(\n options: MutationOptions,\n ): Promise> {\n if (this.defaultOptions.mutate) {\n options = {\n ...this.defaultOptions.mutate,\n ...options,\n } as MutationOptions;\n }\n\n return this.queryManager.mutate(options);\n }\n\n /**\n * This subscribes to a graphql subscription according to the options specified and returns an\n * {@link Observable} which either emits received data or an error.\n */\n public subscribe(\n options: SubscriptionOptions,\n ): Observable> {\n return this.queryManager.startGraphQLSubscription(options);\n }\n\n /**\n * Tries to read some data from the store in the shape of the provided\n * GraphQL query without making a network request. This method will start at\n * the root query. To start at a specific id returned by `dataIdFromObject`\n * use `readFragment`.\n *\n * @param optimistic Set to `true` to allow `readQuery` to return\n * optimistic results. Is `false` by default.\n */\n public readQuery(\n options: DataProxy.Query,\n optimistic: boolean = false,\n ): T | null {\n return this.cache.readQuery(options, optimistic);\n }\n\n /**\n * Tries to read some data from the store in the shape of the provided\n * GraphQL fragment without making a network request. This method will read a\n * GraphQL fragment from any arbitrary id that is currently cached, unlike\n * `readQuery` which will only read from the root query.\n *\n * You must pass in a GraphQL document with a single fragment or a document\n * with multiple fragments that represent what you are reading. If you pass\n * in a document with multiple fragments then you must also specify a\n * `fragmentName`.\n *\n * @param optimistic Set to `true` to allow `readFragment` to return\n * optimistic results. Is `false` by default.\n */\n public readFragment(\n options: DataProxy.Fragment,\n optimistic: boolean = false,\n ): T | null {\n return this.cache.readFragment(options, optimistic);\n }\n\n /**\n * Writes some data in the shape of the provided GraphQL query directly to\n * the store. This method will start at the root query. To start at a\n * specific id returned by `dataIdFromObject` then use `writeFragment`.\n */\n public writeQuery(\n options: DataProxy.WriteQueryOptions,\n ): void {\n const result = this.cache.writeQuery(options);\n this.queryManager.broadcastQueries();\n return result;\n }\n\n /**\n * Writes some data in the shape of the provided GraphQL fragment directly to\n * the store. This method will write to a GraphQL fragment from any arbitrary\n * id that is currently cached, unlike `writeQuery` which will only write\n * from the root query.\n *\n * You must pass in a GraphQL document with a single fragment or a document\n * with multiple fragments that represent what you are writing. If you pass\n * in a document with multiple fragments then you must also specify a\n * `fragmentName`.\n */\n public writeFragment(\n options: DataProxy.WriteFragmentOptions,\n ): void {\n const result = this.cache.writeFragment(options);\n this.queryManager.broadcastQueries();\n return result;\n }\n\n /**\n * Sugar for writeQuery & writeFragment\n * This method will construct a query from the data object passed in.\n * If no id is supplied, writeData will write the data to the root.\n * If an id is supplied, writeData will write a fragment to the object\n * specified by the id in the store.\n *\n * Since you aren't passing in a query to check the shape of the data,\n * you must pass in an object that conforms to the shape of valid GraphQL data.\n */\n public writeData(\n options: DataProxy.WriteDataOptions,\n ): void {\n const result = this.cache.writeData(options);\n this.queryManager.broadcastQueries();\n return result;\n }\n\n public __actionHookForDevTools(cb: () => any) {\n this.devToolsHookCb = cb;\n }\n\n public __requestRaw(payload: GraphQLRequest): Observable {\n return execute(this.link, payload);\n }\n\n /**\n * This initializes the query manager that tracks queries and the cache\n */\n public initQueryManager(): QueryManager {\n invariant.warn(\n 'Calling the initQueryManager method is no longer necessary, ' +\n 'and it will be removed from ApolloClient in version 3.0.',\n );\n return this.queryManager;\n }\n\n /**\n * Resets your entire store by clearing out your cache and then re-executing\n * all of your active queries. This makes it so that you may guarantee that\n * there is no data left in your store from a time before you called this\n * method.\n *\n * `resetStore()` is useful when your user just logged out. You’ve removed the\n * user session, and you now want to make sure that any references to data you\n * might have fetched while the user session was active is gone.\n *\n * It is important to remember that `resetStore()` *will* refetch any active\n * queries. This means that any components that might be mounted will execute\n * their queries again using your network interface. If you do not want to\n * re-execute any queries then you should make sure to stop watching any\n * active queries.\n */\n public resetStore(): Promise[] | null> {\n return Promise.resolve()\n .then(() => this.queryManager.clearStore())\n .then(() => Promise.all(this.resetStoreCallbacks.map(fn => fn())))\n .then(() => this.reFetchObservableQueries());\n }\n\n /**\n * Remove all data from the store. Unlike `resetStore`, `clearStore` will\n * not refetch any active queries.\n */\n public clearStore(): Promise {\n return Promise.resolve()\n .then(() => this.queryManager.clearStore())\n .then(() => Promise.all(this.clearStoreCallbacks.map(fn => fn())));\n }\n\n /**\n * Allows callbacks to be registered that are executed when the store is\n * reset. `onResetStore` returns an unsubscribe function that can be used\n * to remove registered callbacks.\n */\n public onResetStore(cb: () => Promise): () => void {\n this.resetStoreCallbacks.push(cb);\n return () => {\n this.resetStoreCallbacks = this.resetStoreCallbacks.filter(c => c !== cb);\n };\n }\n\n /**\n * Allows callbacks to be registered that are executed when the store is\n * cleared. `onClearStore` returns an unsubscribe function that can be used\n * to remove registered callbacks.\n */\n public onClearStore(cb: () => Promise): () => void {\n this.clearStoreCallbacks.push(cb);\n return () => {\n this.clearStoreCallbacks = this.clearStoreCallbacks.filter(c => c !== cb);\n };\n }\n\n /**\n * Refetches all of your active queries.\n *\n * `reFetchObservableQueries()` is useful if you want to bring the client back to proper state in case of a network outage\n *\n * It is important to remember that `reFetchObservableQueries()` *will* refetch any active\n * queries. This means that any components that might be mounted will execute\n * their queries again using your network interface. If you do not want to\n * re-execute any queries then you should make sure to stop watching any\n * active queries.\n * Takes optional parameter `includeStandby` which will include queries in standby-mode when refetching.\n */\n public reFetchObservableQueries(\n includeStandby?: boolean,\n ): Promise[]> {\n return this.queryManager.reFetchObservableQueries(includeStandby);\n }\n\n /**\n * Exposes the cache's complete state, in a serializable format for later restoration.\n */\n public extract(optimistic?: boolean): TCacheShape {\n return this.cache.extract(optimistic);\n }\n\n /**\n * Replaces existing state in the cache (if any) with the values expressed by\n * `serializedState`.\n *\n * Called when hydrating a cache (server side rendering, or offline storage),\n * and also (potentially) during hot reloads.\n */\n public restore(serializedState: TCacheShape): ApolloCache {\n return this.cache.restore(serializedState);\n }\n\n /**\n * Add additional local resolvers.\n */\n public addResolvers(resolvers: Resolvers | Resolvers[]) {\n this.localState.addResolvers(resolvers);\n }\n\n /**\n * Set (override existing) local resolvers.\n */\n public setResolvers(resolvers: Resolvers | Resolvers[]) {\n this.localState.setResolvers(resolvers);\n }\n\n /**\n * Get all registered local resolvers.\n */\n public getResolvers() {\n return this.localState.getResolvers();\n }\n\n /**\n * Set a custom local state fragment matcher.\n */\n public setLocalStateFragmentMatcher(fragmentMatcher: FragmentMatcher) {\n this.localState.setFragmentMatcher(fragmentMatcher);\n }\n}\n"]}