HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/shop.komma.nl/node_modules/apollo-client/bundle.cjs.js.map
{"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<T> = ZenObservable.Observer<T>;\n\nimport $$observable from 'symbol-observable';\n\n// rxjs interopt\nexport class Observable<T> extends LinkObservable<T> {\n  public [$$observable]() {\n    return this;\n  }\n\n  public ['@@observable' as any]() {\n    return this;\n  }\n}\n","export function isNonEmptyArray<T>(value?: ArrayLike<T>): value is Array<T> {\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<GraphQLError>;\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<GraphQLError>;\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<T> = {\n  data: T;\n  errors?: ReadonlyArray<GraphQLError>;\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<T> = (\n  previousResult: Record<string, any>,\n  options: {\n    mutationResult: FetchResult<T>;\n    queryName: string | undefined;\n    queryVariables: Record<string, any>;\n  },\n) => Record<string, any>;\n\nexport type MutationQueryReducersMap<T = { [key: string]: any }> = {\n  [queryName: string]: MutationQueryReducer<T>;\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<T> = {\n  data: T | {};\n  errors?: ReadonlyArray<GraphQLError>;\n  loading: boolean;\n  networkStatus: NetworkStatus;\n  error?: ApolloError;\n  partial?: boolean;\n};\n\nexport type ApolloCurrentQueryResult<T> = {\n  data: T | undefined;\n  errors?: ReadonlyArray<GraphQLError>;\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<TVariables> {\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<ApolloQueryResult<TData>> {\n  public options: WatchQueryOptions<TVariables>;\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<any>;\n  private observers = new Set<Observer<ApolloQueryResult<TData>>>();\n  private subscriptions = new Set<Subscription>();\n\n  private lastResult: ApolloQueryResult<TData>;\n  private lastResultSnapshot: ApolloQueryResult<TData>;\n  private lastError: ApolloError;\n\n  constructor({\n    queryManager,\n    options,\n    shouldSubscribe = true,\n  }: {\n    queryManager: QueryManager<any>;\n    options: WatchQueryOptions<TVariables>;\n    shouldSubscribe?: boolean;\n  }) {\n    super((observer: Observer<ApolloQueryResult<TData>>) =>\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<ApolloQueryResult<TData>> {\n    return new Promise((resolve, reject) => {\n      const observer: Observer<ApolloQueryResult<TData>> = {\n        next: (result: ApolloQueryResult<TData>) => {\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<TData> {\n    const result = this.getCurrentResult() as ApolloCurrentResult<TData>;\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<TData> {\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<TData>;\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<TData>;\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<TData>;\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<TData>) {\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<TData> {\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<ApolloQueryResult<TData>> {\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<ApolloQueryResult<TData>>;\n  }\n\n  public fetchMore<K extends keyof TVariables>(\n    fetchMoreOptions: FetchMoreQueryOptions<TVariables, K> &\n      FetchMoreOptions<TData, TVariables>,\n  ): Promise<ApolloQueryResult<TData>> {\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<TData>;\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<TSubscriptionVariables>(\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<ApolloQueryResult<TData> | void> {\n    const { fetchPolicy: oldFetchPolicy } = this.options;\n    this.options = {\n      ...this.options,\n      ...opts,\n    } as WatchQueryOptions<TVariables>;\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<ApolloQueryResult<TData> | 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<ApolloQueryResult<TData>>;\n  }\n\n  public updateQuery<TVars = TVariables>(\n    mapFn: (\n      previousQueryResult: TData,\n      options: UpdateQueryOptions<TVars>,\n    ) => TData,\n  ): void {\n    const { queryManager } = this;\n    const {\n      previousResult,\n      variables,\n      document,\n    } = queryManager.getQueryWithPreviousResult<TData, TVars>(\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<TData>) {\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<ApolloQueryResult<TData>>) {\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<TData>(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<TData>(queryId, this.options, {\n      next: (result: ApolloQueryResult<TData>) => {\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<E, A>(\n  observers: Set<Observer<E>>,\n  method: keyof Observer<E>,\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<E>[] = [];\n  observers.forEach(obs => obs[method] && observersWithMethod.push(obs));\n  observersWithMethod.forEach(obs => (obs as any)[method](argument));\n}\n\nfunction assertNotCacheFirstOrOnly<TData, TVariables>(\n  obsQuery: ObservableQuery<TData, TVariables>,\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<GraphQLError>;\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<GraphQLError> = [];\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<string, any>;\n  onlyRunForcedResolvers: boolean;\n};\n\nexport type LocalStateOptions<TCacheShape> = {\n  cache: ApolloCache<TCacheShape>;\n  client?: ApolloClient<TCacheShape>;\n  resolvers?: Resolvers | Resolvers[];\n  fragmentMatcher?: FragmentMatcher;\n};\n\nexport class LocalState<TCacheShape> {\n  private cache: ApolloCache<TCacheShape>;\n  private client: ApolloClient<TCacheShape>;\n  private resolvers?: Resolvers;\n  private fragmentMatcher: FragmentMatcher;\n\n  constructor({\n    cache,\n    client,\n    resolvers,\n    fragmentMatcher,\n  }: LocalStateOptions<TCacheShape>) {\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<TData>({\n    document,\n    remoteResult,\n    context,\n    variables,\n    onlyRunForcedResolvers = false,\n  }: {\n    document: DocumentNode | null;\n    remoteResult: FetchResult<TData>;\n    context?: Record<string, any>;\n    variables?: Record<string, any>;\n    onlyRunForcedResolvers?: boolean;\n  }): Promise<FetchResult<TData>> {\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<string, any>,\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<TData>(\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<TData>(\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<void> => {\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<any> {\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<T>(inner: Observable<T>): Observable<T> {\n  const observers = new Set<Observer<T>>();\n  let sub: Subscription | null = null;\n  return new Observable<T>(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<V, R>(\n  observable: Observable<V>,\n  mapFn: (value: V) => R | Promise<R>,\n): Observable<R> {\n  return new Observable<R>(observer => {\n    const { next, error, complete } = observer;\n    let activeNextCount = 0;\n    let completed = false;\n\n    const handler: Observer<V> = {\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<QueryListener>;\n  invalidated: boolean;\n  newData: Cache.DiffResult<any> | 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<any> | null;\n  subscriptions: Set<Subscription>;\n  cancel?: () => void;\n}\n\nexport class QueryManager<TStore> {\n  public link: ApolloLink;\n  public mutationStore: MutationStore = new MutationStore();\n  public queryStore: QueryStore = new QueryStore();\n  public dataStore: DataStore<TStore>;\n  public readonly assumeImmutableResults: boolean;\n\n  private queryDeduplication: boolean;\n  private clientAwareness: Record<string, string> = {};\n  private localState: LocalState<TStore>;\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<string, QueryInfo> = 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<string, Function>();\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<TStore>;\n    onBroadcast?: () => void;\n    ssrMode?: boolean;\n    clientAwareness?: Record<string, string>;\n    localState?: LocalState<TStore>;\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<T>({\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<FetchResult<T>> {\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<T> | 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<T>) {\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<any>[] | 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<T>(\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<FetchResult<T>> {\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<T>({\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<T>) => {\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<TData>(\n    queryId: string,\n    result: FetchResult<TData>,\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<T>(\n    queryId: string,\n    options: WatchQueryOptions,\n    observer: Observer<ApolloQueryResult<T>>,\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<T>,\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<T> = {\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<DocumentNode>;\n      hasClientExports: boolean;\n      hasForcedResolvers: boolean;\n      clientQuery: Readonly<DocumentNode> | null;\n      serverQuery: Readonly<DocumentNode> | null;\n      defaultVars: Readonly<OperationVariables>;\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<T, TVariables = OperationVariables>(\n    options: WatchQueryOptions,\n    shouldSubscribe = true,\n  ): ObservableQuery<T, TVariables> {\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<TVariables>;\n\n    return new ObservableQuery<T, TVariables>({\n      queryManager: this,\n      options: transformedOptions,\n      shouldSubscribe: shouldSubscribe,\n    });\n  }\n\n  public query<T>(options: QueryOptions): Promise<ApolloQueryResult<T>> {\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<ApolloQueryResult<T>>((resolve, reject) => {\n      const watchedQuery = this.watchQuery<T>(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<T>(\n    queryId: string,\n    observableQuery: ObservableQuery<T>,\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<void> {\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<ApolloQueryResult<any>[]> {\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<ApolloQueryResult<any>[]> {\n    const observableQueryPromises: Promise<ApolloQueryResult<any>>[] = [];\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<T>(\n    queryId: string,\n    options: WatchQueryOptions,\n    observer: Observer<ApolloQueryResult<T>>,\n  ) {\n    this.addQueryListener(\n      queryId,\n      this.queryListenerForObserver(queryId, options, observer),\n    );\n    return this.fetchQuery<T>(queryId, options);\n  }\n\n  public startQuery<T>(\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<T>(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<T = any>({\n    query,\n    fetchPolicy,\n    variables,\n  }: SubscriptionOptions): Observable<FetchResult<T>> {\n    query = this.transform(query).document;\n    variables = this.getVariables(query, variables);\n\n    const makeObservable = (variables: OperationVariables) =>\n      this.getObservableFromLink<T>(\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<FetchResult<T>>(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<T>(\n    observableQuery: ObservableQuery<T>,\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<T>({\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<TData, TVariables = OperationVariables>(\n    queryIdOrObservable: string | ObservableQuery<TData, TVariables>,\n  ): {\n    previousResult: any;\n    variables: TVariables | undefined;\n    document: DocumentNode;\n  } {\n    let observableQuery: ObservableQuery<TData, any>;\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<TStore> {\n    return this.localState;\n  }\n\n  private inFlightLinkObservables = new Map<\n    DocumentNode,\n    Map<string, Observable<FetchResult>>\n  >();\n\n  private getObservableFromLink<T = any>(\n    query: DocumentNode,\n    context: any,\n    variables?: OperationVariables,\n    deduplication: boolean = this.queryDeduplication,\n  ): Observable<FetchResult<T>> {\n    let observable: Observable<FetchResult<T>>;\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<FetchResult<T>>\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<FetchResult<T>>);\n      }\n    } else {\n      observable = Observable.of({ data: {} } as FetchResult<T>);\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<T>({\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<FetchResult<T>> {\n    const { variables, errorPolicy = 'none', fetchPolicy } = options;\n    let resultFromStore: any;\n    let errorsFromStore: any;\n\n    return new Promise<ApolloQueryResult<T>>((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<T>) => {\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<T>({\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<QueryListener>(),\n        invalidated: false,\n        document: null,\n        newData: null,\n        lastRequestId: 1,\n        observableQuery: null,\n        subscriptions: new Set<Subscription>(),\n      }\n    );\n  }\n\n  private setQuery<T extends keyof QueryInfo>(\n    queryId: string,\n    updater: (prev: QueryInfo) => Pick<QueryInfo, T> | 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<string, {\n    interval: number;\n    timeout: NodeJS.Timeout;\n    options: WatchQueryOptions;\n  }>();\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<Object>;\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<TSerialized> {\n  private cache: ApolloCache<TSerialized>;\n\n  constructor(initialCache: ApolloCache<TSerialized>) {\n    this.cache = initialCache;\n  }\n\n  public getCache(): ApolloCache<TSerialized> {\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<void> {\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<WatchQueryOptions>;\n  query?: Partial<QueryOptions>;\n  mutate?: Partial<MutationOptions>;\n}\n\nlet hasSuggestedDevtools = false;\n\nexport type ApolloClientOptions<TCacheShape> = {\n  link?: ApolloLink;\n  cache: ApolloCache<TCacheShape>;\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<TCacheShape> implements DataProxy {\n  public link: ApolloLink;\n  public store: DataStore<TCacheShape>;\n  public cache: ApolloCache<TCacheShape>;\n  public readonly queryManager: QueryManager<TCacheShape>;\n  public disableNetworkFetches: boolean;\n  public version: string;\n  public queryDeduplication: boolean;\n  public defaultOptions: DefaultOptions = {};\n  public readonly typeDefs: ApolloClientOptions<TCacheShape>['typeDefs'];\n\n  private devToolsHookCb: Function;\n  private resetStoreCallbacks: Array<() => Promise<any>> = [];\n  private clearStoreCallbacks: Array<() => Promise<any>> = [];\n  private localState: LocalState<TCacheShape>;\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<TCacheShape>) {\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   * <p /><p />\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   * <p /><p />\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   * <p /><p />\n   * Note that if the cache does not change, the subscriber will *not* be notified.\n   * <p /><p />\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<T = any, TVariables = OperationVariables>(\n    options: WatchQueryOptions<TVariables>,\n  ): ObservableQuery<T, TVariables> {\n    if (this.defaultOptions.watchQuery) {\n      options = {\n        ...this.defaultOptions.watchQuery,\n        ...options,\n      } as WatchQueryOptions<TVariables>;\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<T, TVariables>(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<T = any, TVariables = OperationVariables>(\n    options: QueryOptions<TVariables>,\n  ): Promise<ApolloQueryResult<T>> {\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<T>(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<T = any, TVariables = OperationVariables>(\n    options: MutationOptions<T, TVariables>,\n  ): Promise<FetchResult<T>> {\n    if (this.defaultOptions.mutate) {\n      options = {\n        ...this.defaultOptions.mutate,\n        ...options,\n      } as MutationOptions<T, TVariables>;\n    }\n\n    return this.queryManager.mutate<T>(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<T = any, TVariables = OperationVariables>(\n    options: SubscriptionOptions<TVariables>,\n  ): Observable<FetchResult<T>> {\n    return this.queryManager.startGraphQLSubscription<T>(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<T = any, TVariables = OperationVariables>(\n    options: DataProxy.Query<TVariables>,\n    optimistic: boolean = false,\n  ): T | null {\n    return this.cache.readQuery<T, TVariables>(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<T = any, TVariables = OperationVariables>(\n    options: DataProxy.Fragment<TVariables>,\n    optimistic: boolean = false,\n  ): T | null {\n    return this.cache.readFragment<T, TVariables>(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<TData = any, TVariables = OperationVariables>(\n    options: DataProxy.WriteQueryOptions<TData, TVariables>,\n  ): void {\n    const result = this.cache.writeQuery<TData, TVariables>(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<TData = any, TVariables = OperationVariables>(\n    options: DataProxy.WriteFragmentOptions<TData, TVariables>,\n  ): void {\n    const result = this.cache.writeFragment<TData, TVariables>(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<TData = any>(\n    options: DataProxy.WriteDataOptions<TData>,\n  ): void {\n    const result = this.cache.writeData<TData>(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<ExecutionResult> {\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<TCacheShape> {\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<ApolloQueryResult<any>[] | 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<any[]> {\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<any>): () => 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<any>): () => 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<ApolloQueryResult<any>[]> {\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<TCacheShape> {\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"]}