UNPKG

@loona/angular

Version:

App State Management done with GraphQL (angular integration)

140 lines 12.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import { Injectable, ErrorHandler } from '@angular/core'; import { Apollo } from 'apollo-angular'; import { Subject, queueScheduler, merge, throwError } from 'rxjs'; import { observeOn, tap, catchError } from 'rxjs/operators'; import { isMutation, getMutation, isDocument, Manager, withUpdates, getActionType, buildActionFromResult, buildActionFromError, } from '@loona/core'; import { InnerActions, ScannedActions } from './actions'; /** * @record */ export function QueryOptions() { } /** * @record */ export function MutationOptions() { } /** * @record * @template V */ export function TypedVariables() { } if (false) { /** @type {?|undefined} */ TypedVariables.prototype.variables; } export class Loona { /** * @param {?} apollo * @param {?} manager * @param {?} actions * @param {?} scannedActions * @param {?} errorHandler */ constructor(apollo, manager, actions, scannedActions, errorHandler) { this.apollo = apollo; this.manager = manager; this.actions = actions; this.direct$ = new Subject(); this.queue$ = merge(actions, this.direct$).pipe(observeOn(queueScheduler)); this.queue$.subscribe({ next: action => { scannedActions.next(action); }, error: error => { errorHandler.handleError(error); }, }); } /** * @template T, V * @param {?} queryOrOptions * @param {?=} variables * @param {?=} options * @return {?} */ query(queryOrOptions, variables, options) { return this.apollo.watchQuery(isDocument(queryOrOptions) ? Object.assign({ query: queryOrOptions, variables }, options) : queryOrOptions); } /** * @template T, V * @param {?} mutationOrOptions * @param {?=} variables * @param {?=} options * @return {?} */ mutate(mutationOrOptions, variables, options) { /** @type {?} */ const config = isDocument(mutationOrOptions) ? Object.assign({ mutation: mutationOrOptions, variables }, options) : mutationOrOptions; return this.apollo .mutate(withUpdates(config, this.manager)) .pipe(tap(result => { this.direct$.next(buildActionFromResult(config, result)); }), catchError(error => { this.direct$.next(buildActionFromError(config, error)); return throwError(error); })); } /** * @param {?} action * @return {?} */ dispatch(action) { if (isMutation(action)) { /** @type {?} */ const mutation = getMutation(action); this.mutate(Object.assign({ mutation }, action)).subscribe(); } else { this.actions.next(Object.assign({ type: getActionType(action) }, action)); } } /** * @template T * @return {?} */ extract() { return this.apollo.getClient().extract(); } /** * @return {?} */ reset() { this.apollo.getClient().resetStore(); } /** * @param {?} state * @return {?} */ restore(state) { this.apollo.getClient().restore(state); } } Loona.decorators = [ { type: Injectable } ]; /** @nocollapse */ Loona.ctorParameters = () => [ { type: Apollo }, { type: Manager }, { type: InnerActions }, { type: ScannedActions }, { type: ErrorHandler } ]; if (false) { /** @type {?} */ Loona.prototype.queue$; /** @type {?} */ Loona.prototype.direct$; /** @type {?} */ Loona.prototype.apollo; /** @type {?} */ Loona.prototype.manager; /** @type {?} */ Loona.prototype.actions; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGxvb25hL2FuZ3VsYXIvIiwic291cmNlcyI6WyJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQVcsTUFBTSxnQkFBZ0IsQ0FBQztBQU1oRCxPQUFPLEVBQWEsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzVFLE9BQU8sRUFBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFDTCxVQUFVLEVBQ1YsV0FBVyxFQUVYLFVBQVUsRUFDVixPQUFPLEVBQ1AsV0FBVyxFQUNYLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsb0JBQW9CLEdBQ3JCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7O0FBSXZELGtDQUMyRDs7OztBQUUzRCxxQ0FDZ0U7Ozs7O0FBSWhFLG9DQUVDOzs7SUFEQyxtQ0FBYzs7QUFJaEIsTUFBTSxPQUFPLEtBQUs7Ozs7Ozs7O0lBSWhCLFlBQ1UsTUFBYyxFQUNkLE9BQWdCLEVBQ2hCLE9BQXFCLEVBQzdCLGNBQThCLEVBQzlCLFlBQTBCO1FBSmxCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFMdkIsWUFBTyxHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7UUFTdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDcEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUNiLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUNELEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDYixZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7OztJQVlELEtBQUssQ0FDSCxjQUFzRSxFQUN0RSxTQUFhLEVBQ2IsT0FBc0I7UUFFdEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FDM0IsVUFBVSxDQUFDLGNBQWMsQ0FBQztZQUN4QixDQUFDLGlCQUNHLEtBQUssRUFBRSxjQUFjLEVBQ3JCLFNBQVMsSUFDTixPQUFPLEVBRWQsQ0FBQyxDQUFDLGNBQWMsQ0FDbkIsQ0FBQztJQUNKLENBQUM7Ozs7Ozs7O0lBWUQsTUFBTSxDQUNKLGlCQUEyRCxFQUMzRCxTQUFhLEVBQ2IsT0FBeUI7O2NBRW5CLE1BQU0sR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUM7WUFDMUMsQ0FBQyxpQkFDRyxRQUFRLEVBQUUsaUJBQWlCLEVBQzNCLFNBQVMsSUFDTixPQUFPLEVBRWQsQ0FBQyxDQUFDLGlCQUFpQjtRQUVyQixPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2YsTUFBTSxDQUFPLFdBQVcsQ0FBTyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3JELElBQUksQ0FDSCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdkQsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7Ozs7O0lBRUQsUUFBUSxDQUFDLE1BQVc7UUFDbEIsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7O2tCQUNoQixRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUVwQyxJQUFJLENBQUMsTUFBTSxpQkFDVCxRQUFRLElBQ0wsTUFBTSxFQUNULENBQUMsU0FBUyxFQUFFLENBQUM7U0FDaEI7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxpQkFDZixJQUFJLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUN4QixNQUFNLEVBQ1QsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNDLENBQUM7Ozs7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN2QyxDQUFDOzs7OztJQUVELE9BQU8sQ0FBQyxLQUFVO1FBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7OztZQS9HRixVQUFVOzs7O1lBckNILE1BQU07WUFjWixPQUFPO1lBT0QsWUFBWTtZQUFFLGNBQWM7WUF0QmhCLFlBQVk7Ozs7SUF3QzlCLHVCQUFtQzs7SUFDbkMsd0JBQXdDOztJQUd0Qyx1QkFBc0I7O0lBQ3RCLHdCQUF3Qjs7SUFDeEIsd0JBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBFcnJvckhhbmRsZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcG9sbG8sIFF1ZXJ5UmVmfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQge1xuICBXYXRjaFF1ZXJ5T3B0aW9ucyxcbiAgTXV0YXRpb25PcHRpb25zIGFzIENvcmVNdXRhdGlvbk9wdGlvbnMsXG59IGZyb20gJ2Fwb2xsby1jbGllbnQnO1xuaW1wb3J0IHtGZXRjaFJlc3VsdH0gZnJvbSAnYXBvbGxvLWxpbmsnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0LCBxdWV1ZVNjaGVkdWxlciwgbWVyZ2UsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtvYnNlcnZlT24sIHRhcCwgY2F0Y2hFcnJvcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtEb2N1bWVudE5vZGV9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHtcbiAgaXNNdXRhdGlvbixcbiAgZ2V0TXV0YXRpb24sXG4gIEFjdGlvbixcbiAgaXNEb2N1bWVudCxcbiAgTWFuYWdlcixcbiAgd2l0aFVwZGF0ZXMsXG4gIGdldEFjdGlvblR5cGUsXG4gIGJ1aWxkQWN0aW9uRnJvbVJlc3VsdCxcbiAgYnVpbGRBY3Rpb25Gcm9tRXJyb3IsXG59IGZyb20gJ0Bsb29uYS9jb3JlJztcblxuaW1wb3J0IHtJbm5lckFjdGlvbnMsIFNjYW5uZWRBY3Rpb25zfSBmcm9tICcuL2FjdGlvbnMnO1xuXG5leHBvcnQgdHlwZSBPbWl0PFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IFBpY2s8VCwgRXhjbHVkZTxrZXlvZiBULCBLPj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnlPcHRpb25zXG4gIGV4dGVuZHMgT21pdDxXYXRjaFF1ZXJ5T3B0aW9ucywgJ3F1ZXJ5JyB8ICd2YXJpYWJsZXMnPiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIE11dGF0aW9uT3B0aW9uc1xuICBleHRlbmRzIE9taXQ8Q29yZU11dGF0aW9uT3B0aW9ucywgJ211dGF0aW9uJyB8ICd2YXJpYWJsZXMnPiB7fVxuXG5leHBvcnQgdHlwZSBSID0gUmVjb3JkPHN0cmluZywgYW55PjtcblxuZXhwb3J0IGludGVyZmFjZSBUeXBlZFZhcmlhYmxlczxWPiB7XG4gIHZhcmlhYmxlcz86IFY7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBMb29uYSB7XG4gIHByaXZhdGUgcXVldWUkOiBPYnNlcnZhYmxlPEFjdGlvbj47XG4gIHByaXZhdGUgZGlyZWN0JCA9IG5ldyBTdWJqZWN0PEFjdGlvbj4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwb2xsbzogQXBvbGxvLFxuICAgIHByaXZhdGUgbWFuYWdlcjogTWFuYWdlcixcbiAgICBwcml2YXRlIGFjdGlvbnM6IElubmVyQWN0aW9ucyxcbiAgICBzY2FubmVkQWN0aW9uczogU2Nhbm5lZEFjdGlvbnMsXG4gICAgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXIsXG4gICkge1xuICAgIHRoaXMucXVldWUkID0gbWVyZ2UoYWN0aW9ucywgdGhpcy5kaXJlY3QkKS5waXBlKG9ic2VydmVPbihxdWV1ZVNjaGVkdWxlcikpO1xuICAgIHRoaXMucXVldWUkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBhY3Rpb24gPT4ge1xuICAgICAgICBzY2FubmVkQWN0aW9ucy5uZXh0KGFjdGlvbik7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBxdWVyeTxULCBWID0gYW55PihcbiAgICBxdWVyeTogRG9jdW1lbnROb2RlLFxuICAgIHZhcmlhYmxlcz86IFYsXG4gICAgb3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyxcbiAgKTogUXVlcnlSZWY8VCwgVj47XG5cbiAgcXVlcnk8VCwgViA9IGFueT4oXG4gICAgb3B0aW9uczogV2F0Y2hRdWVyeU9wdGlvbnMgJiBUeXBlZFZhcmlhYmxlczxWPixcbiAgKTogUXVlcnlSZWY8VCwgVj47XG5cbiAgcXVlcnk8VCwgViA9IGFueT4oXG4gICAgcXVlcnlPck9wdGlvbnM6IERvY3VtZW50Tm9kZSB8IChXYXRjaFF1ZXJ5T3B0aW9ucyAmIFR5cGVkVmFyaWFibGVzPFY+KSxcbiAgICB2YXJpYWJsZXM/OiBWLFxuICAgIG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMsXG4gICk6IFF1ZXJ5UmVmPFQsIFY+IHtcbiAgICByZXR1cm4gdGhpcy5hcG9sbG8ud2F0Y2hRdWVyeTxULCBWPihcbiAgICAgIGlzRG9jdW1lbnQocXVlcnlPck9wdGlvbnMpXG4gICAgICAgID8ge1xuICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5T3JPcHRpb25zLFxuICAgICAgICAgICAgdmFyaWFibGVzLFxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgIDogcXVlcnlPck9wdGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIG11dGF0ZTxULCBWID0gUj4oXG4gICAgbXV0YXRpb246IERvY3VtZW50Tm9kZSxcbiAgICB2YXJpYWJsZXM/OiBWLFxuICAgIG9wdGlvbnM/OiBNdXRhdGlvbk9wdGlvbnMsXG4gICk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8VD4+O1xuXG4gIG11dGF0ZTxULCBWID0gUj4oXG4gICAgb3B0aW9uczogQ29yZU11dGF0aW9uT3B0aW9uczxULCBWPixcbiAgKTogT2JzZXJ2YWJsZTxGZXRjaFJlc3VsdDxUPj47XG5cbiAgbXV0YXRlPFQsIFYgPSBSPihcbiAgICBtdXRhdGlvbk9yT3B0aW9uczogRG9jdW1lbnROb2RlIHwgQ29yZU11dGF0aW9uT3B0aW9uczxULCBWPixcbiAgICB2YXJpYWJsZXM/OiBWLFxuICAgIG9wdGlvbnM/OiBNdXRhdGlvbk9wdGlvbnMsXG4gICk6IE9ic2VydmFibGU8RmV0Y2hSZXN1bHQ8VD4+IHtcbiAgICBjb25zdCBjb25maWcgPSBpc0RvY3VtZW50KG11dGF0aW9uT3JPcHRpb25zKVxuICAgICAgPyB7XG4gICAgICAgICAgbXV0YXRpb246IG11dGF0aW9uT3JPcHRpb25zLFxuICAgICAgICAgIHZhcmlhYmxlcyxcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB9XG4gICAgICA6IG11dGF0aW9uT3JPcHRpb25zO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAubXV0YXRlPFQsIFY+KHdpdGhVcGRhdGVzPFQsIFY+KGNvbmZpZywgdGhpcy5tYW5hZ2VyKSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAocmVzdWx0ID0+IHtcbiAgICAgICAgICB0aGlzLmRpcmVjdCQubmV4dChidWlsZEFjdGlvbkZyb21SZXN1bHQoY29uZmlnLCByZXN1bHQpKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZGlyZWN0JC5uZXh0KGJ1aWxkQWN0aW9uRnJvbUVycm9yKGNvbmZpZywgZXJyb3IpKTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIGRpc3BhdGNoKGFjdGlvbjogYW55KTogdm9pZCB7XG4gICAgaWYgKGlzTXV0YXRpb24oYWN0aW9uKSkge1xuICAgICAgY29uc3QgbXV0YXRpb24gPSBnZXRNdXRhdGlvbihhY3Rpb24pO1xuXG4gICAgICB0aGlzLm11dGF0ZSh7XG4gICAgICAgIG11dGF0aW9uLFxuICAgICAgICAuLi5hY3Rpb24sXG4gICAgICB9KS5zdWJzY3JpYmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiBnZXRBY3Rpb25UeXBlKGFjdGlvbiksXG4gICAgICAgIC4uLmFjdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGV4dHJhY3Q8VCA9IGFueT4oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuYXBvbGxvLmdldENsaWVudCgpLmV4dHJhY3QoKTtcbiAgfVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuYXBvbGxvLmdldENsaWVudCgpLnJlc2V0U3RvcmUoKTtcbiAgfVxuXG4gIHJlc3RvcmUoc3RhdGU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuYXBvbGxvLmdldENsaWVudCgpLnJlc3RvcmUoc3RhdGUpO1xuICB9XG59XG4iXX0=