{"version":3,"file":"apollo-angular.mjs","sources":["../../src/utils.ts","../../src/query-ref.ts","../../src/tokens.ts","../../src/apollo.ts","../../src/apollo-module.ts","../../src/query.ts","../../src/mutation.ts","../../src/subscription.ts","../../src/gql.ts","../../src/only-complete-data.ts","../../src/apollo-angular.ts"],"sourcesContent":["import { Observable, queueScheduler, SchedulerAction, SchedulerLike, Subscription } from 'rxjs';\nimport { map, observeOn, startWith } from 'rxjs/operators';\nimport { NgZone } from '@angular/core';\nimport type { ApolloClient } from '@apollo/client';\nimport { Apollo } from './apollo';\n\n/**\n * Like RxJS's `fromPromise()`, but starts the promise only when the observable is subscribed to.\n */\nexport function fromLazyPromise<T>(promiseFn: () => Promise<T>): Observable<T> {\n  return new Observable<T>(subscriber => {\n    promiseFn().then(\n      result => {\n        if (!subscriber.closed) {\n          subscriber.next(result);\n          subscriber.complete();\n        }\n      },\n      error => {\n        if (!subscriber.closed) {\n          subscriber.error(error);\n        }\n      },\n    );\n\n    return () => subscriber.unsubscribe();\n  });\n}\n\nexport function useMutationLoading<T>(\n  source: Observable<ApolloClient.MutateResult<T>>,\n  enabled: boolean,\n) {\n  if (!enabled) {\n    return source.pipe(\n      map<ApolloClient.MutateResult<T>, Apollo.MutateResult<T>>(result => ({\n        ...result,\n        loading: false,\n      })),\n    );\n  }\n\n  return source.pipe(\n    map<ApolloClient.MutateResult<T>, Apollo.MutateResult<T>>(result => ({\n      ...result,\n      loading: false,\n    })),\n    startWith<Apollo.MutateResult<T>>({\n      data: undefined,\n      loading: true,\n    }),\n  );\n}\n\nexport class ZoneScheduler implements SchedulerLike {\n  constructor(private readonly zone: NgZone) {}\n\n  public readonly now = Date.now;\n\n  public schedule<T>(\n    work: (this: SchedulerAction<T>, state?: T) => void,\n    delay: number = 0,\n    state?: T,\n  ): Subscription {\n    return this.zone.run(() => queueScheduler.schedule(work, delay, state)) as Subscription;\n  }\n}\n\nexport function wrapWithZone<T>(obs: Observable<T>, ngZone: NgZone): Observable<T> {\n  return obs.pipe(observeOn(new ZoneScheduler(ngZone)));\n}\n","import { from, Observable } from 'rxjs';\nimport { NgZone } from '@angular/core';\nimport type {\n  ApolloClient,\n  MaybeMasked,\n  ObservableQuery,\n  OperationVariables,\n  TypedDocumentNode,\n} from '@apollo/client';\nimport { EmptyObject } from './types';\nimport { wrapWithZone } from './utils';\n\nexport type QueryRefFromDocument<T extends TypedDocumentNode> =\n  T extends TypedDocumentNode<infer TData, infer TVariables>\n    ? QueryRef<TData, TVariables & OperationVariables>\n    : never;\n\nexport class QueryRef<TData, TVariables extends OperationVariables = EmptyObject> {\n  public readonly valueChanges: Observable<ObservableQuery.Result<TData>>;\n\n  constructor(\n    private readonly obsQuery: ObservableQuery<TData, TVariables>,\n    ngZone: NgZone,\n  ) {\n    this.valueChanges = wrapWithZone(from(this.obsQuery), ngZone);\n  }\n\n  // ObservableQuery's methods\n\n  public get options(): ObservableQuery<TData, TVariables>['options'] {\n    return this.obsQuery.options;\n  }\n\n  public get variables(): ObservableQuery<TData, TVariables>['variables'] {\n    return this.obsQuery.variables;\n  }\n\n  public getCurrentResult(): ReturnType<ObservableQuery<TData, TVariables>['getCurrentResult']> {\n    return this.obsQuery.getCurrentResult();\n  }\n\n  public refetch(\n    variables?: Parameters<ObservableQuery<TData, TVariables>['refetch']>[0],\n  ): ReturnType<ObservableQuery<TData, TVariables>['refetch']> {\n    return this.obsQuery.refetch(variables);\n  }\n\n  public fetchMore<TFetchData = TData, TFetchVars extends OperationVariables = TVariables>(\n    fetchMoreOptions: ObservableQuery.FetchMoreOptions<TData, TVariables, TFetchData, TFetchVars>,\n  ): Promise<ApolloClient.QueryResult<MaybeMasked<TFetchData>>> {\n    return this.obsQuery.fetchMore(fetchMoreOptions);\n  }\n\n  public subscribeToMore<\n    TSubscriptionData = TData,\n    TSubscriptionVariables extends OperationVariables = TVariables,\n  >(\n    options: ObservableQuery.SubscribeToMoreOptions<\n      TData,\n      TSubscriptionVariables,\n      TSubscriptionData,\n      TVariables\n    >,\n  ): ReturnType<ObservableQuery<TData, TVariables>['subscribeToMore']> {\n    return this.obsQuery.subscribeToMore(options);\n  }\n\n  public updateQuery(\n    mapFn: Parameters<ObservableQuery<TData, TVariables>['updateQuery']>[0],\n  ): ReturnType<ObservableQuery<TData, TVariables>['updateQuery']> {\n    return this.obsQuery.updateQuery(mapFn);\n  }\n\n  public stopPolling(): ReturnType<ObservableQuery<TData, TVariables>['stopPolling']> {\n    return this.obsQuery.stopPolling();\n  }\n\n  public startPolling(\n    pollInterval: Parameters<ObservableQuery<TData, TVariables>['startPolling']>[0],\n  ): ReturnType<ObservableQuery<TData, TVariables>['startPolling']> {\n    return this.obsQuery.startPolling(pollInterval);\n  }\n\n  public setVariables(\n    variables: Parameters<ObservableQuery<TData, TVariables>['setVariables']>[0],\n  ): ReturnType<ObservableQuery<TData, TVariables>['setVariables']> {\n    return this.obsQuery.setVariables(variables);\n  }\n\n  public reobserve(\n    options: ObservableQuery.Options<TData, TVariables>,\n  ): ReturnType<ObservableQuery<TData, TVariables>['reobserve']> {\n    return this.obsQuery.reobserve(options);\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport type { ApolloClient } from '@apollo/client';\nimport type { Flags, NamedOptions } from './types';\n\nexport const APOLLO_FLAGS = new InjectionToken<Flags>('APOLLO_FLAGS');\n\nexport const APOLLO_OPTIONS = new InjectionToken<ApolloClient.Options>('APOLLO_OPTIONS');\n\nexport const APOLLO_NAMED_OPTIONS = new InjectionToken<NamedOptions>('APOLLO_NAMED_OPTIONS');\n","import { Observable } from 'rxjs';\nimport { Inject, Injectable, NgZone, Optional } from '@angular/core';\nimport type { OperationVariables } from '@apollo/client';\nimport { ApolloClient } from '@apollo/client';\nimport { QueryRef } from './query-ref';\nimport { APOLLO_FLAGS, APOLLO_NAMED_OPTIONS, APOLLO_OPTIONS } from './tokens';\nimport type { EmptyObject, Flags, NamedOptions } from './types';\nimport { fromLazyPromise, useMutationLoading, wrapWithZone } from './utils';\n\nexport declare namespace Apollo {\n  export type WatchQueryOptions<\n    TData = unknown,\n    TVariables extends OperationVariables = EmptyObject,\n  > = ApolloClient.WatchQueryOptions<TData, TVariables>;\n\n  export type QueryOptions<\n    TData = unknown,\n    TVariables extends OperationVariables = EmptyObject,\n  > = ApolloClient.QueryOptions<TData, TVariables>;\n\n  export type QueryResult<TData = unknown> = ApolloClient.QueryResult<TData>;\n\n  export type MutateOptions<\n    TData = unknown,\n    TVariables extends OperationVariables = EmptyObject,\n  > = ApolloClient.MutateOptions<TData, TVariables> & {\n    /**\n     * Observable starts with `{ loading: true }`.\n     *\n     * Disabled by default\n     */\n    useMutationLoading?: boolean;\n  };\n\n  export type MutateResult<TData = unknown> = ApolloClient.MutateResult<TData> & {\n    loading?: boolean;\n  };\n\n  export type SubscribeOptions<\n    TData = unknown,\n    TVariables extends OperationVariables = EmptyObject,\n  > = ApolloClient.SubscribeOptions<TData, TVariables> & {\n    useZone?: boolean;\n  };\n\n  export type SubscribeResult<TData = unknown> = ApolloClient.SubscribeResult<TData>;\n\n  export interface WatchFragmentOptions<\n    TData = unknown,\n    TVariables extends OperationVariables = EmptyObject,\n  > extends ApolloClient.WatchFragmentOptions<TData, TVariables> {\n    useZone?: boolean;\n  }\n\n  export type WatchFragmentResult<TData = unknown> = ApolloClient.WatchFragmentResult<TData>;\n}\n\nexport class ApolloBase {\n  private useMutationLoading: boolean;\n\n  constructor(\n    protected readonly ngZone: NgZone,\n    protected readonly flags?: Flags,\n    protected _client?: ApolloClient,\n  ) {\n    this.useMutationLoading = flags?.useMutationLoading ?? false;\n  }\n\n  public watchQuery<TData, TVariables extends OperationVariables = EmptyObject>(\n    options: Apollo.WatchQueryOptions<TData, TVariables>,\n  ): QueryRef<TData, TVariables> {\n    return new QueryRef<TData, TVariables>(\n      this.ensureClient().watchQuery<TData, TVariables>({ ...options }),\n      this.ngZone,\n    );\n  }\n\n  public query<TData, TVariables extends OperationVariables = EmptyObject>(\n    options: Apollo.QueryOptions<TData, TVariables>,\n  ): Observable<Apollo.QueryResult<TData>> {\n    return fromLazyPromise<ApolloClient.QueryResult<TData>>(() =>\n      this.ensureClient().query<TData, TVariables>({ ...options }),\n    );\n  }\n\n  public mutate<TData, TVariables extends OperationVariables = EmptyObject>(\n    options: Apollo.MutateOptions<TData, TVariables>,\n  ): Observable<Apollo.MutateResult<TData>> {\n    return useMutationLoading(\n      fromLazyPromise(() => this.ensureClient().mutate<TData, TVariables>({ ...options })),\n      options.useMutationLoading ?? this.useMutationLoading,\n    );\n  }\n\n  public watchFragment<\n    TFragmentData = unknown,\n    TVariables extends OperationVariables = EmptyObject,\n  >(\n    options: Apollo.WatchFragmentOptions<TFragmentData, TVariables>,\n  ): Observable<Apollo.WatchFragmentResult<TFragmentData>> {\n    const { useZone, ...opts } = options;\n    const obs = this.ensureClient().watchFragment<TFragmentData, TVariables>({ ...opts });\n\n    return useZone !== true ? obs : wrapWithZone(obs, this.ngZone);\n  }\n\n  public subscribe<TData, TVariables extends OperationVariables = EmptyObject>(\n    options: Apollo.SubscribeOptions<TData, TVariables>,\n  ): Observable<Apollo.SubscribeResult<TData>> {\n    const { useZone, ...opts } = options;\n    const obs = this.ensureClient().subscribe<TData, TVariables>({\n      ...opts,\n    } as ApolloClient.SubscribeOptions<TData, TVariables>);\n\n    return useZone !== true ? obs : wrapWithZone(obs, this.ngZone);\n  }\n\n  /**\n   * Get an instance of ApolloClient\n   */\n  public get client(): ApolloClient {\n    return this.ensureClient();\n  }\n\n  /**\n   * Set a new instance of ApolloClient\n   * Remember to clean up the store before setting a new client.\n   *\n   * @param client ApolloClient instance\n   */\n  public set client(client: ApolloClient) {\n    if (this._client) {\n      throw new Error('Client has been already defined');\n    }\n\n    this._client = client;\n  }\n\n  private ensureClient(): ApolloClient {\n    this.checkInstance();\n\n    return this._client!;\n  }\n\n  private checkInstance(): this is { _client: ApolloClient } {\n    if (this._client) {\n      return true;\n    } else {\n      throw new Error('Client has not been defined yet');\n    }\n  }\n}\n\n@Injectable()\nexport class Apollo extends ApolloBase {\n  private map: Map<string, ApolloBase> = new Map<string, ApolloBase>();\n\n  constructor(\n    ngZone: NgZone,\n    @Optional()\n    @Inject(APOLLO_OPTIONS)\n    apolloOptions?: ApolloClient.Options,\n    @Inject(APOLLO_NAMED_OPTIONS) @Optional() apolloNamedOptions?: NamedOptions,\n    @Inject(APOLLO_FLAGS) @Optional() flags?: Flags,\n  ) {\n    super(ngZone, flags);\n\n    if (apolloOptions) {\n      this.createDefault(apolloOptions);\n    }\n\n    if (apolloNamedOptions && typeof apolloNamedOptions === 'object') {\n      for (let name in apolloNamedOptions) {\n        if (apolloNamedOptions.hasOwnProperty(name)) {\n          const options = apolloNamedOptions[name];\n          this.create(options, name);\n        }\n      }\n    }\n  }\n\n  /**\n   * Create an instance of ApolloClient\n   * @param options Options required to create ApolloClient\n   * @param name client's name\n   */\n  public create(options: ApolloClient.Options, name?: string): void {\n    if (isNamed(name)) {\n      this.createNamed(name, options);\n    } else {\n      this.createDefault(options);\n    }\n  }\n\n  /**\n   * Use a default ApolloClient\n   */\n  public default(): ApolloBase {\n    return this;\n  }\n\n  /**\n   * Use a named ApolloClient\n   * @param name client's name\n   */\n  public use(name: string): ApolloBase {\n    if (isNamed(name)) {\n      return this.map.get(name)!;\n    } else {\n      return this.default();\n    }\n  }\n\n  /**\n   * Create a default ApolloClient, same as `apollo.create(options)`\n   * @param options ApolloClient's options\n   */\n  public createDefault(options: ApolloClient.Options): void {\n    if (this._client) {\n      throw new Error('Apollo has been already created.');\n    }\n\n    this.client = this.ngZone.runOutsideAngular(() => new ApolloClient(options));\n  }\n\n  /**\n   * Create a named ApolloClient, same as `apollo.create(options, name)`\n   * @param name client's name\n   * @param options ApolloClient's options\n   */\n  public createNamed(name: string, options: ApolloClient.Options): void {\n    if (this.map.has(name)) {\n      throw new Error(`Client ${name} has been already created`);\n    }\n    this.map.set(\n      name,\n      new ApolloBase(\n        this.ngZone,\n        this.flags,\n        this.ngZone.runOutsideAngular(() => new ApolloClient(options)),\n      ),\n    );\n  }\n\n  /**\n   * Remember to clean up the store before removing a client\n   * @param name client's name\n   */\n  public removeClient(name?: string): void {\n    if (isNamed(name)) {\n      this.map.delete(name);\n    } else {\n      this._client = undefined;\n    }\n  }\n}\n\nfunction isNamed(name?: string): name is string {\n  return !!name && name !== 'default';\n}\n","import { Provider } from '@angular/core';\nimport { ApolloClient } from '@apollo/client';\nimport { Apollo } from './apollo';\nimport { APOLLO_FLAGS, APOLLO_NAMED_OPTIONS, APOLLO_OPTIONS } from './tokens';\nimport { Flags, NamedOptions } from './types';\n\nexport function provideApollo(\n  optionsFactory: () => ApolloClient.Options,\n  flags: Flags = {},\n): Provider {\n  return [\n    Apollo,\n    {\n      provide: APOLLO_OPTIONS,\n      useFactory: optionsFactory,\n    },\n    {\n      provide: APOLLO_FLAGS,\n      useValue: flags,\n    },\n  ];\n}\n\nexport function provideNamedApollo(\n  optionsFactory: () => NamedOptions,\n  flags: Flags = {},\n): Provider {\n  return [\n    Apollo,\n    {\n      provide: APOLLO_NAMED_OPTIONS,\n      useFactory: optionsFactory,\n    },\n    {\n      provide: APOLLO_FLAGS,\n      useValue: flags,\n    },\n  ];\n}\n","import type { DocumentNode } from 'graphql';\nimport type { Observable } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport type { OperationVariables, TypedDocumentNode } from '@apollo/client';\nimport { Apollo } from './apollo';\nimport { QueryRef } from './query-ref';\nimport { EmptyObject } from './types';\n\nexport declare namespace Query {\n  export type WatchOptions<\n    TData = unknown,\n    TVariables extends OperationVariables = EmptyObject,\n  > = Omit<Apollo.WatchQueryOptions<TData, TVariables>, 'query'>;\n\n  export type FetchOptions<\n    TData = unknown,\n    TVariables extends OperationVariables = EmptyObject,\n  > = Omit<Apollo.QueryOptions<TData, TVariables>, 'query'>;\n}\n\n@Injectable()\nexport abstract class Query<TData = unknown, TVariables extends OperationVariables = EmptyObject> {\n  public abstract readonly document: DocumentNode | TypedDocumentNode<TData, TVariables>;\n  public client = 'default';\n\n  constructor(protected readonly apollo: Apollo) {}\n\n  public watch(\n    ...[options]: {} extends TVariables\n      ? [options?: Query.WatchOptions<TData, TVariables>]\n      : [options: Query.WatchOptions<TData, TVariables>]\n  ): QueryRef<TData, TVariables> {\n    return this.apollo.use(this.client).watchQuery<TData, TVariables>({\n      ...options,\n      query: this.document,\n    } as Apollo.WatchQueryOptions<TData, TVariables>);\n  }\n\n  public fetch(\n    ...[options]: {} extends TVariables\n      ? [options?: Query.FetchOptions<TData, TVariables>]\n      : [options: Query.FetchOptions<TData, TVariables>]\n  ): Observable<Apollo.QueryResult<TData>> {\n    return this.apollo.use(this.client).query<TData, TVariables>({\n      ...options,\n      query: this.document,\n    } as Apollo.QueryOptions<TData, TVariables>);\n  }\n}\n","import type { DocumentNode } from 'graphql';\nimport type { Observable } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport type { OperationVariables, TypedDocumentNode } from '@apollo/client';\nimport { Apollo } from './apollo';\nimport type { EmptyObject } from './types';\n\nexport declare namespace Mutation {\n  export type MutateOptions<\n    TData = unknown,\n    TVariables extends OperationVariables = EmptyObject,\n  > = Omit<Apollo.MutateOptions<TData, TVariables>, 'mutation'>;\n}\n\n@Injectable()\nexport abstract class Mutation<\n  TData = unknown,\n  TVariables extends OperationVariables = EmptyObject,\n> {\n  public abstract readonly document: DocumentNode | TypedDocumentNode<TData, TVariables>;\n  public client = 'default';\n\n  constructor(protected readonly apollo: Apollo) {}\n\n  public mutate(\n    ...[options]: {} extends TVariables\n      ? [options?: Mutation.MutateOptions<TData, TVariables>]\n      : [options: Mutation.MutateOptions<TData, TVariables>]\n  ): Observable<Apollo.MutateResult<TData>> {\n    return this.apollo.use(this.client).mutate<TData, TVariables>({\n      ...options,\n      mutation: this.document,\n    } as Apollo.MutateOptions<TData, TVariables>);\n  }\n}\n","import type { DocumentNode } from 'graphql';\nimport type { Observable } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport type { OperationVariables, TypedDocumentNode } from '@apollo/client';\nimport { Apollo } from './apollo';\nimport { EmptyObject } from './types';\n\nexport declare namespace Subscription {\n  export type SubscribeOptions<\n    TData = unknown,\n    TVariables extends OperationVariables = EmptyObject,\n  > = Omit<Apollo.SubscribeOptions<TData, TVariables>, 'query'>;\n}\n\n@Injectable()\nexport abstract class Subscription<\n  TData = unknown,\n  TVariables extends OperationVariables = EmptyObject,\n> {\n  public abstract readonly document: DocumentNode | TypedDocumentNode<TData, TVariables>;\n  public client = 'default';\n\n  constructor(protected readonly apollo: Apollo) {}\n\n  public subscribe(\n    ...[options]: {} extends TVariables\n      ? [options?: Subscription.SubscribeOptions<TData, TVariables>]\n      : [options: Subscription.SubscribeOptions<TData, TVariables>]\n  ): Observable<Apollo.SubscribeResult<TData>> {\n    return this.apollo.use(this.client).subscribe<TData, TVariables>({\n      ...options,\n      query: this.document,\n    } as Apollo.SubscribeOptions<TData, TVariables>);\n  }\n}\n","import { gql as gqlTag, TypedDocumentNode } from '@apollo/client';\n\nconst typedGQLTag: <Result, Variables>(\n  literals: ReadonlyArray<string> | Readonly<string>,\n  ...placeholders: any[]\n) => TypedDocumentNode<Result, Variables> = gqlTag;\n\nexport const gql = typedGQLTag;\n","import { filter, type OperatorFunction } from 'rxjs';\nimport type { ApolloClient, GetDataState, ObservableQuery } from '@apollo/client/core';\n\ntype CompleteFragment<TData> = {\n  complete: true;\n  missing?: never;\n} & GetDataState<TData, 'complete'>;\n\ntype ForWatchFragment<TData> = OperatorFunction<\n  ApolloClient.WatchFragmentResult<TData>,\n  CompleteFragment<TData>\n>;\n\n/**\n * Filter emitted results to only receive results that are complete (`result.dataState === 'complete'`).\n *\n * This is a small wrapper around rxjs `filter()` for convenience only.\n *\n * If you use this, you should probably combine it with [`notifyOnNetworkStatusChange`](https://www.apollographql.com/docs/react/data/queries#queryhookoptions-interface-notifyonnetworkstatuschange).\n * This tells `@apollo/client` to not emit the first `partial` result, so `apollo-angular` does\n * not need to filter it out. The overall behavior is identical, but it saves some CPU cycles.\n *\n * So something like this:\n *\n * ```ts\n * apollo\n *   .watchQuery({\n *     query: myQuery,\n *     notifyOnNetworkStatusChange: false, // Adding this will save CPU cycles\n *   })\n *   .valueChanges\n *   .pipe(onlyCompleteData())\n *   .subscribe(result => {\n *     // Do something with complete result\n *   });\n * ```\n */\nexport function onlyCompleteData<TData>(): OperatorFunction<\n  ObservableQuery.Result<TData>,\n  ObservableQuery.Result<TData, 'complete'>\n> {\n  return filter(\n    (result): result is ObservableQuery.Result<TData, 'complete'> =>\n      result.dataState === 'complete',\n  );\n}\n\n/**\n * @deprecated Use `onlyCompleteData()` instead.\n */\nexport const onlyComplete = onlyCompleteData;\n\n/**\n * Same as `onlyCompleteData()` but for `Apollo.watchFragment()`.\n */\nexport function onlyCompleteFragment<TData>(): ForWatchFragment<TData> {\n  return filter((result): result is CompleteFragment<TData> => result.dataState === 'complete');\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.Apollo","gqlTag"],"mappings":"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"}