UNPKG

apollo-angular

Version:

Use your GraphQL data in your Angular app, with the Apollo Client

1 lines 30.4 kB
{"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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"}