UNPKG

@apollo-orbit/angular

Version:

A full-featured GraphQL client for Angular

1 lines 14.3 kB
{"version":3,"file":"apollo-orbit.angular.state.mjs","sources":["../../state/src/actions.ts","../../state/src/apolloActions.ts","../../state/src/internal/apollo.ts","../../state/src/internal/stateManager.ts","../../state/src/providers.ts","../../state/src/apollo-orbit.angular.state.ts"],"sourcesContent":["import { ActionType, getActionType } from '@apollo-orbit/core';\nimport { filter, map, OperatorFunction } from 'rxjs';\n\nexport type ActionStatus = 'dispatched' | 'success' | 'error';\n\nexport interface ActionExecution<TAction = any, TError = Error> {\n status: ActionStatus;\n action: TAction;\n error?: TError;\n}\n\nexport interface ActionComplete<TAction = any, TError = Error> {\n action: TAction;\n error?: TError;\n status: Extract<ActionStatus, 'success' | 'error'>;\n}\n\nexport function ofActionDispatched<TActionTypes extends Array<ActionType<any>>>(\n ...actions: TActionTypes\n): OperatorFunction<\n ActionExecution<InstanceType<TActionTypes[number]>>,\n InstanceType<TActionTypes[number]>\n> {\n const actionMap = createActionMap(actions);\n return source => source.pipe(\n filter(ctx => ctx.status === 'dispatched' && actionMap[getActionType(ctx.action)]),\n map(({ action }) => action)\n );\n}\n\nexport function ofActionSuccess<TActionTypes extends Array<ActionType<any>>>(\n ...actions: TActionTypes\n): OperatorFunction<\n ActionExecution<InstanceType<TActionTypes[number]>>,\n InstanceType<TActionTypes[number]>\n> {\n const actionMap = createActionMap(actions);\n return source => source.pipe(\n filter(ctx => ctx.status === 'success' && actionMap[getActionType(ctx.action)]),\n map(({ action }) => action)\n );\n}\n\nexport function ofActionError<TActionTypes extends Array<ActionType<any>>>(\n ...actions: TActionTypes\n): OperatorFunction<\n ActionExecution<InstanceType<TActionTypes[number]>>,\n InstanceType<TActionTypes[number]>\n> {\n const actionMap = createActionMap(actions);\n return source => source.pipe(\n filter(ctx => ctx.status === 'error' && actionMap[getActionType(ctx.action)]),\n map(({ action }) => action)\n );\n}\n\nexport function ofActionComplete<TActionTypes extends Array<ActionType<any>>>(\n ...actions: TActionTypes\n): OperatorFunction<\n ActionExecution<InstanceType<TActionTypes[number]>>,\n ActionComplete<InstanceType<TActionTypes[number]>>\n> {\n const actionMap = createActionMap(actions);\n const statuses: Array<ActionStatus> = ['success', 'error'];\n return source => source.pipe(\n filter((ctx): ctx is ActionComplete => statuses.includes(ctx.status) && actionMap[getActionType(ctx.action)])\n );\n}\n\nfunction createActionMap(actions: Array<ActionType<any>>): { [type: string]: boolean } {\n return actions.reduce<{ [type: string]: boolean }>((acc, action) => ({ ...acc, [action.type]: true }), {});\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ɵApolloRegistry as ApolloRegistry } from '@apollo-orbit/angular';\nimport { Action, ActionInstance, flatten, resolveDispatchResults } from '@apollo-orbit/core';\nimport { Observable, Subject } from 'rxjs';\nimport { ActionExecution } from './actions';\nimport { ɵApollo } from './internal/apollo';\n\n@Injectable()\nexport class ApolloActions extends Observable<ActionExecution> {\n private readonly registry = inject(ApolloRegistry);\n\n private readonly actions = new Subject<ActionExecution>();\n\n public constructor() {\n super(subscriber => this.actions.subscribe(subscriber));\n }\n\n public dispatch<TAction extends Action | ActionInstance>(action: TAction): Promise<void> {\n this.actions.next({ action, status: 'dispatched' });\n return Promise.all((this.registry.instances as Array<ɵApollo>)\n .map(apollo => apollo['manager'].dispatch(action, { cache: apollo.client.cache, dispatch: this.dispatch.bind(this) }))) // eslint-disable-line dot-notation\n .then(flatten)\n .then(results => {\n for (const result of results) {\n this.actions.next(result);\n }\n return resolveDispatchResults(results);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Apollo, ApolloClient, DefaultOptions, MutationOptions, MutationResult, OperationVariables as Variables } from '@apollo-orbit/angular';\nimport { MutationManager } from '@apollo-orbit/core';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\n@Injectable()\nexport class ɵApollo extends Apollo {\n private readonly manager: MutationManager;\n\n public constructor(client: ApolloClient, manager: MutationManager, defaultOptions?: DefaultOptions) {\n super(client, defaultOptions);\n this.manager = manager;\n }\n\n public mutate<TData = unknown, TVariables extends Variables = Variables>(options: MutationOptions<TData, TVariables>): Observable<MutationResult<TData>> {\n const { manager } = this;\n return super.mutate<TData, TVariables>(manager.wrapMutationOptions(options)).pipe(tap({\n next: result => manager.runEffects<TData, TVariables>(options, result, undefined),\n error: error => manager.runEffects<TData, TVariables>(options, undefined, error)\n }));\n }\n}\n","import { Injectable } from '@angular/core';\nimport { addStateToCache, addStateToClient, MutationManager, partition, State } from '@apollo-orbit/core';\nimport { ApolloClient } from '@apollo/client';\n\ninterface Clients {\n [id: string]: {\n client: ApolloClient;\n manager: MutationManager;\n } | undefined;\n}\n\n@Injectable()\nexport class StateManager {\n private readonly clients: Clients = {};\n private pending: ReadonlyArray<State> = [];\n\n /**\n * Create a mutation manager for an apollo client\n */\n public createManager(clientId: string, client: ApolloClient): MutationManager {\n if (this.clients[clientId] !== undefined) throw new Error(`Apollo clients with duplicate options.id: '${clientId}'`);\n const manager = new MutationManager();\n this.clients[clientId] = { client, manager };\n const [current, pending] = partition(this.pending, state => state.clientId === clientId);\n this.pending = pending;\n this.addState(client, manager, ...current);\n return manager;\n }\n\n public onAddStates(states: Array<State>): void {\n for (const state of states) {\n const pair = this.clients[state.clientId];\n if (pair) {\n const { client, manager } = pair;\n this.addState(client, manager, state);\n } else {\n this.pending = [...this.pending, state];\n }\n }\n }\n\n private addState(client: ApolloClient, manager: MutationManager, ...states: Array<State>): void {\n const addToClient = addStateToClient(client);\n const addToCache = addStateToCache(client.cache);\n states.forEach(state => {\n addToClient(state);\n addToCache(state);\n manager.addState(state);\n state.onInit?.(client.cache);\n });\n }\n}\n","import { ENVIRONMENT_INITIALIZER, EnvironmentProviders, inject, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { Apollo, ɵAPOLLO_INSTANCE_FACTORY as APOLLO_INSTANCE_FACTORY, ApolloClient, ɵApolloInstanceFactory as ApolloInstanceFactory, ApolloOrbitFeature, DefaultOptions } from '@apollo-orbit/angular';\nimport { State } from '@apollo-orbit/core';\nimport { ApolloActions } from './apolloActions';\nimport { ɵApollo } from './internal/apollo';\nimport { StateManager } from './internal/stateManager';\nimport { StateFactory } from './types';\n\nexport function withState(...states: Array<State | StateFactory>): ApolloOrbitFeature {\n return {\n kind: 'APOLLO_ORBIT_STATES',\n providers: [\n ApolloActions,\n StateManager,\n { provide: APOLLO_INSTANCE_FACTORY, useFactory: apolloInstanceFactory, deps: [StateManager] },\n getStatesProviders(states)\n ]\n };\n}\n\nexport function provideStates(...states: Array<State | StateFactory>): EnvironmentProviders {\n return makeEnvironmentProviders(getStatesProviders(states));\n}\n\nfunction getStatesProviders(states: Array<State | StateFactory>): Array<Provider> {\n return states.length > 0\n ? [{ provide: ENVIRONMENT_INITIALIZER, multi: true, useValue: () => addStates(states) }]\n : [];\n}\n\nfunction apolloInstanceFactory(stateManager: StateManager): ApolloInstanceFactory {\n return (clientId: string, client: ApolloClient, defaultOptions?: DefaultOptions): Apollo => {\n const manager = stateManager.createManager(clientId, client);\n return new ɵApollo(client, manager, defaultOptions); // eslint-disable-line new-cap\n };\n}\n\nfunction addStates(states: Array<State | StateFactory>): void {\n inject(StateManager).onAddStates(states.map(state => typeof state === 'function' ? state() : state));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ApolloRegistry","APOLLO_INSTANCE_FACTORY"],"mappings":"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"}