UNPKG

@apollo-orbit/angular

Version:

A fully-featured GraphQL client for Angular with modular state management.

50 lines 7.41 kB
import { Injectable } from '@angular/core'; import { addStateToCache, addStateToClient, MutationManager, partition } from '@apollo-orbit/core'; import { ApolloError } from '@apollo/client/core'; import * as i0 from "@angular/core"; const apolloErrorFactory = (graphQLErrors) => new ApolloError({ graphQLErrors }); export class StateManager { clients = {}; pending = []; /** * Create a mutation manager for an apollo client */ createManager(clientId, client) { if (this.clients[clientId] !== undefined) throw new Error(`Apollo clients with duplicate options.id: '${clientId}'`); const manager = new MutationManager(apolloErrorFactory); this.clients[clientId] = { client, manager }; const [current, pending] = partition(this.pending, state => state.clientId === clientId); this.pending = pending; this.addState(client, manager, ...current); return manager; } onAddStates(states) { for (const state of states) { const pair = this.clients[state.clientId]; if (pair) { const { client, manager } = pair; this.addState(client, manager, state); } else { this.pending = [...this.pending, state]; } } } addState(client, manager, ...states) { const addToClient = addStateToClient(client); const addToCache = addStateToCache(client.cache); states.forEach(state => { addToClient(state); addToCache(state); manager.addState(state); state.onInit?.(client.cache); }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: StateManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: StateManager }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.3", ngImport: i0, type: StateManager, decorators: [{ type: Injectable }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VmZmVjdHMvc3RhdGVNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDMUcsT0FBTyxFQUFnQixXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFHaEUsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLGFBQW1ELEVBQWUsRUFBRSxDQUFDLElBQUksV0FBVyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQVVwSSxNQUFNLE9BQU8sWUFBWTtJQUNOLE9BQU8sR0FBWSxFQUFFLENBQUM7SUFDL0IsT0FBTyxHQUF5QixFQUFFLENBQUM7SUFFM0M7O09BRUc7SUFDSSxhQUFhLENBQUMsUUFBZ0IsRUFBRSxNQUF5QjtRQUM5RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDckgsTUFBTSxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxXQUFXLENBQUMsTUFBb0I7UUFDckMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sUUFBUSxDQUFDLE1BQXlCLEVBQUUsT0FBd0IsRUFBRSxHQUFHLE1BQW9CO1FBQzNGLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkIsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7dUdBdENVLFlBQVk7MkdBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgYWRkU3RhdGVUb0NhY2hlLCBhZGRTdGF0ZVRvQ2xpZW50LCBNdXRhdGlvbk1hbmFnZXIsIHBhcnRpdGlvbiwgU3RhdGUgfSBmcm9tICdAYXBvbGxvLW9yYml0L2NvcmUnO1xyXG5pbXBvcnQgeyBBcG9sbG9DbGllbnQsIEFwb2xsb0Vycm9yIH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XHJcbmltcG9ydCB7IEdyYXBoUUxGb3JtYXR0ZWRFcnJvciB9IGZyb20gJ2dyYXBocWwnO1xyXG5cclxuY29uc3QgYXBvbGxvRXJyb3JGYWN0b3J5ID0gKGdyYXBoUUxFcnJvcnM6IFJlYWRvbmx5QXJyYXk8R3JhcGhRTEZvcm1hdHRlZEVycm9yPik6IEFwb2xsb0Vycm9yID0+IG5ldyBBcG9sbG9FcnJvcih7IGdyYXBoUUxFcnJvcnMgfSk7XHJcblxyXG5pbnRlcmZhY2UgQ2xpZW50cyB7XHJcbiAgW2lkOiBzdHJpbmddOiB7XHJcbiAgICBjbGllbnQ6IEFwb2xsb0NsaWVudDxhbnk+O1xyXG4gICAgbWFuYWdlcjogTXV0YXRpb25NYW5hZ2VyO1xyXG4gIH0gfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFN0YXRlTWFuYWdlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnRzOiBDbGllbnRzID0ge307XHJcbiAgcHJpdmF0ZSBwZW5kaW5nOiBSZWFkb25seUFycmF5PFN0YXRlPiA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSBtdXRhdGlvbiBtYW5hZ2VyIGZvciBhbiBhcG9sbG8gY2xpZW50XHJcbiAgICovXHJcbiAgcHVibGljIGNyZWF0ZU1hbmFnZXIoY2xpZW50SWQ6IHN0cmluZywgY2xpZW50OiBBcG9sbG9DbGllbnQ8YW55Pik6IE11dGF0aW9uTWFuYWdlciB7XHJcbiAgICBpZiAodGhpcy5jbGllbnRzW2NsaWVudElkXSAhPT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoYEFwb2xsbyBjbGllbnRzIHdpdGggZHVwbGljYXRlIG9wdGlvbnMuaWQ6ICcke2NsaWVudElkfSdgKTtcclxuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTXV0YXRpb25NYW5hZ2VyKGFwb2xsb0Vycm9yRmFjdG9yeSk7XHJcbiAgICB0aGlzLmNsaWVudHNbY2xpZW50SWRdID0geyBjbGllbnQsIG1hbmFnZXIgfTtcclxuICAgIGNvbnN0IFtjdXJyZW50LCBwZW5kaW5nXSA9IHBhcnRpdGlvbih0aGlzLnBlbmRpbmcsIHN0YXRlID0+IHN0YXRlLmNsaWVudElkID09PSBjbGllbnRJZCk7XHJcbiAgICB0aGlzLnBlbmRpbmcgPSBwZW5kaW5nO1xyXG4gICAgdGhpcy5hZGRTdGF0ZShjbGllbnQsIG1hbmFnZXIsIC4uLmN1cnJlbnQpO1xyXG4gICAgcmV0dXJuIG1hbmFnZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25BZGRTdGF0ZXMoc3RhdGVzOiBBcnJheTxTdGF0ZT4pOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3Qgc3RhdGUgb2Ygc3RhdGVzKSB7XHJcbiAgICAgIGNvbnN0IHBhaXIgPSB0aGlzLmNsaWVudHNbc3RhdGUuY2xpZW50SWRdO1xyXG4gICAgICBpZiAocGFpcikge1xyXG4gICAgICAgIGNvbnN0IHsgY2xpZW50LCBtYW5hZ2VyIH0gPSBwYWlyO1xyXG4gICAgICAgIHRoaXMuYWRkU3RhdGUoY2xpZW50LCBtYW5hZ2VyLCBzdGF0ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nID0gWy4uLnRoaXMucGVuZGluZywgc3RhdGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFN0YXRlKGNsaWVudDogQXBvbGxvQ2xpZW50PGFueT4sIG1hbmFnZXI6IE11dGF0aW9uTWFuYWdlciwgLi4uc3RhdGVzOiBBcnJheTxTdGF0ZT4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGFkZFRvQ2xpZW50ID0gYWRkU3RhdGVUb0NsaWVudChjbGllbnQpO1xyXG4gICAgY29uc3QgYWRkVG9DYWNoZSA9IGFkZFN0YXRlVG9DYWNoZShjbGllbnQuY2FjaGUpO1xyXG4gICAgc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xyXG4gICAgICBhZGRUb0NsaWVudChzdGF0ZSk7XHJcbiAgICAgIGFkZFRvQ2FjaGUoc3RhdGUpO1xyXG4gICAgICBtYW5hZ2VyLmFkZFN0YXRlKHN0YXRlKTtcclxuICAgICAgc3RhdGUub25Jbml0Py4oY2xpZW50LmNhY2hlKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=