UNPKG

@loona/angular

Version:

App State Management done with GraphQL (angular integration)

162 lines 12.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import { NgModule, Injector, Inject } from '@angular/core'; import { Apollo } from 'apollo-angular'; import { Manager, LoonaLink } from '@loona/core'; import { Loona } from './client'; import { InnerActions, ScannedActions, Actions } from './actions'; import { EffectsRunner, Effects, mapStates, extractState } from './effects'; import { INITIAL_STATE, CHILD_STATE, LOONA_CACHE, ROOT_EFFECTS_INIT, UPDATE_EFFECTS, } from './tokens'; import { handleObservable } from './utils'; export class LoonaRootModule { /** * @param {?} effects * @param {?} states * @param {?} loona * @param {?} manager * @param {?} runner * @param {?} injector */ constructor(effects, states, loona, manager, runner, injector) { this.effects = effects; runner.start(); const { names, add } = mapStates(); states.forEach(state => { const { instance, meta } = extractState(state, injector); manager.addState(instance, meta, handleObservable); this.addEffects(instance, meta.effects); add(instance); }); loona.dispatch({ type: ROOT_EFFECTS_INIT, states: names, }); } /** * @param {?} state * @param {?=} meta * @return {?} */ addEffects(state, meta) { this.effects.addEffects(state, meta); } } LoonaRootModule.decorators = [ { type: NgModule } ]; /** @nocollapse */ LoonaRootModule.ctorParameters = () => [ { type: Effects }, { type: Array, decorators: [{ type: Inject, args: [INITIAL_STATE,] }] }, { type: Loona }, { type: Manager }, { type: EffectsRunner }, { type: Injector } ]; if (false) { /** @type {?} */ LoonaRootModule.prototype.effects; } export class LoonaChildModule { /** * @param {?} states * @param {?} injector * @param {?} manager * @param {?} loona * @param {?} rootModule */ constructor(states, injector, manager, loona, rootModule) { const { names, add } = mapStates(); states.forEach(state => { const { instance, meta } = extractState(state, injector); manager.addState(instance, meta, handleObservable); rootModule.addEffects(instance, meta.effects); add(instance); }); loona.dispatch({ type: UPDATE_EFFECTS, states: names, }); } } LoonaChildModule.decorators = [ { type: NgModule } ]; /** @nocollapse */ LoonaChildModule.ctorParameters = () => [ { type: Array, decorators: [{ type: Inject, args: [CHILD_STATE,] }] }, { type: Injector }, { type: Manager }, { type: Loona }, { type: LoonaRootModule } ]; export class LoonaModule { /** * @param {?=} states * @return {?} */ static forRoot(states = []) { return { ngModule: LoonaRootModule, providers: [ Loona, InnerActions, ScannedActions, { provide: Actions, useExisting: ScannedActions, }, ...states, { provide: INITIAL_STATE, useValue: states }, { provide: Manager, useFactory: managerFactory, deps: [LOONA_CACHE, Injector], }, { provide: LoonaLink, useFactory: linkFactory, deps: [Manager], }, Effects, EffectsRunner, ], }; } /** * @param {?=} states * @return {?} */ static forChild(states = []) { return { ngModule: LoonaChildModule, providers: [...states, { provide: CHILD_STATE, useValue: states }], }; } } LoonaModule.decorators = [ { type: NgModule } ]; /** * @param {?} manager * @return {?} */ export function linkFactory(manager) { return new LoonaLink(manager); } /** * @param {?} cache * @param {?} injector * @return {?} */ export function managerFactory(cache, injector) { /** @type {?} */ const manager = new Manager({ cache, getClient: () => injector.get(Apollo).getClient(), }); return manager; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGxvb25hL2FuZ3VsYXIvIiwic291cmNlcyI6WyJtb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQXVCLFFBQVEsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFOUUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUVyRSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsV0FBVyxFQUNYLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsY0FBYyxHQUNmLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUd6QyxNQUFNLE9BQU8sZUFBZTs7Ozs7Ozs7O0lBQzFCLFlBQ1UsT0FBZ0IsRUFDRCxNQUE4QixFQUNyRCxLQUFZLEVBQ1osT0FBZ0IsRUFDaEIsTUFBcUIsRUFDckIsUUFBa0I7UUFMVixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBT3hCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztjQUVULEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxHQUFHLFNBQVMsRUFBRTtRQUVoQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2tCQUNmLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO1lBRXRELE9BQU8sQ0FB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QUMxQyxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLENBQUM7Ozs7OztBQUVELE1BQU0sVUFBVSxjQUFjLENBQzVCLEtBQXVCLEVBQ3ZCLFFBQWtCOztVQUVaLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUMxQixLQUFLO1FBQ0wsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFO0tBQ2xELENBQUM7SUFFRixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgSW5qZWN0b3IsIEluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fwb2xsb0NhY2hlfSBmcm9tICdhcG9sbG8tY2FjaGUnO1xuaW1wb3J0IHtBcG9sbG99IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7TWFuYWdlciwgTG9vbmFMaW5rLCBTdGF0ZUNsYXNzLCBNZXRhZGF0YX0gZnJvbSAnQGxvb25hL2NvcmUnO1xuXG5pbXBvcnQge0xvb25hfSBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQge0lubmVyQWN0aW9ucywgU2Nhbm5lZEFjdGlvbnMsIEFjdGlvbnN9IGZyb20gJy4vYWN0aW9ucyc7XG5pbXBvcnQge0VmZmVjdHNSdW5uZXIsIEVmZmVjdHMsIG1hcFN0YXRlcywgZXh0cmFjdFN0YXRlfSBmcm9tICcuL2VmZmVjdHMnO1xuaW1wb3J0IHtcbiAgSU5JVElBTF9TVEFURSxcbiAgQ0hJTERfU1RBVEUsXG4gIExPT05BX0NBQ0hFLFxuICBST09UX0VGRkVDVFNfSU5JVCxcbiAgVVBEQVRFX0VGRkVDVFMsXG59IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7aGFuZGxlT2JzZXJ2YWJsZX0gZnJvbSAnLi91dGlscyc7XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgTG9vbmFSb290TW9kdWxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlZmZlY3RzOiBFZmZlY3RzLFxuICAgIEBJbmplY3QoSU5JVElBTF9TVEFURSkgc3RhdGVzOiBTdGF0ZUNsYXNzPE1ldGFkYXRhPltdLFxuICAgIGxvb25hOiBMb29uYSxcbiAgICBtYW5hZ2VyOiBNYW5hZ2VyLFxuICAgIHJ1bm5lcjogRWZmZWN0c1J1bm5lcixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICkge1xuICAgIHJ1bm5lci5zdGFydCgpO1xuXG4gICAgY29uc3Qge25hbWVzLCBhZGR9ID0gbWFwU3RhdGVzKCk7XG5cbiAgICBzdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBjb25zdCB7aW5zdGFuY2UsIG1ldGF9ID0gZXh0cmFjdFN0YXRlKHN0YXRlLCBpbmplY3Rvcik7XG5cbiAgICAgIG1hbmFnZXIuYWRkU3RhdGUoaW5zdGFuY2UsIG1ldGEsIGhhbmRsZU9ic2VydmFibGUpO1xuICAgICAgdGhpcy5hZGRFZmZlY3RzKGluc3RhbmNlLCBtZXRhLmVmZmVjdHMpO1xuICAgICAgYWRkKGluc3RhbmNlKTtcbiAgICB9KTtcblxuICAgIGxvb25hLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFJPT1RfRUZGRUNUU19JTklULFxuICAgICAgc3RhdGVzOiBuYW1lcyxcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEVmZmVjdHMoc3RhdGU6IGFueSwgbWV0YT86IE1ldGFkYXRhLkVmZmVjdHMpIHtcbiAgICB0aGlzLmVmZmVjdHMuYWRkRWZmZWN0cyhzdGF0ZSwgbWV0YSk7XG4gIH1cbn1cblxuQE5nTW9kdWxlKClcbmV4cG9ydCBjbGFzcyBMb29uYUNoaWxkTW9kdWxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChDSElMRF9TVEFURSkgc3RhdGVzOiBTdGF0ZUNsYXNzPE1ldGFkYXRhPltdLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBtYW5hZ2VyOiBNYW5hZ2VyLFxuICAgIGxvb25hOiBMb29uYSxcbiAgICByb290TW9kdWxlOiBMb29uYVJvb3RNb2R1bGUsXG4gICkge1xuICAgIGNvbnN0IHtuYW1lcywgYWRkfSA9IG1hcFN0YXRlcygpO1xuXG4gICAgc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgY29uc3Qge2luc3RhbmNlLCBtZXRhfSA9IGV4dHJhY3RTdGF0ZShzdGF0ZSwgaW5qZWN0b3IpO1xuXG4gICAgICBtYW5hZ2VyLmFkZFN0YXRlKGluc3RhbmNlLCBtZXRhLCBoYW5kbGVPYnNlcnZhYmxlKTtcbiAgICAgIHJvb3RNb2R1bGUuYWRkRWZmZWN0cyhpbnN0YW5jZSwgbWV0YS5lZmZlY3RzKTtcbiAgICAgIGFkZChpbnN0YW5jZSk7XG4gICAgfSk7XG5cbiAgICBsb29uYS5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVUERBVEVfRUZGRUNUUyxcbiAgICAgIHN0YXRlczogbmFtZXMsXG4gICAgfSk7XG4gIH1cbn1cblxuQE5nTW9kdWxlKClcbmV4cG9ydCBjbGFzcyBMb29uYU1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KHN0YXRlczogYW55W10gPSBbXSk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTG9vbmFSb290TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIExvb25hLFxuICAgICAgICBJbm5lckFjdGlvbnMsXG4gICAgICAgIFNjYW5uZWRBY3Rpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQWN0aW9ucyxcbiAgICAgICAgICB1c2VFeGlzdGluZzogU2Nhbm5lZEFjdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnN0YXRlcyxcbiAgICAgICAge3Byb3ZpZGU6IElOSVRJQUxfU1RBVEUsIHVzZVZhbHVlOiBzdGF0ZXN9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogTWFuYWdlcixcbiAgICAgICAgICB1c2VGYWN0b3J5OiBtYW5hZ2VyRmFjdG9yeSxcbiAgICAgICAgICBkZXBzOiBbTE9PTkFfQ0FDSEUsIEluamVjdG9yXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IExvb25hTGluayxcbiAgICAgICAgICB1c2VGYWN0b3J5OiBsaW5rRmFjdG9yeSxcbiAgICAgICAgICBkZXBzOiBbTWFuYWdlcl0sXG4gICAgICAgIH0sXG4gICAgICAgIEVmZmVjdHMsXG4gICAgICAgIEVmZmVjdHNSdW5uZXIsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZm9yQ2hpbGQoc3RhdGVzOiBhbnlbXSA9IFtdKTogTW9kdWxlV2l0aFByb3ZpZGVycyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBMb29uYUNoaWxkTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbLi4uc3RhdGVzLCB7cHJvdmlkZTogQ0hJTERfU1RBVEUsIHVzZVZhbHVlOiBzdGF0ZXN9XSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rRmFjdG9yeShtYW5hZ2VyOiBNYW5hZ2VyKTogTG9vbmFMaW5rIHtcbiAgcmV0dXJuIG5ldyBMb29uYUxpbmsobWFuYWdlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYW5hZ2VyRmFjdG9yeShcbiAgY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gIGluamVjdG9yOiBJbmplY3Rvcixcbik6IE1hbmFnZXIge1xuICBjb25zdCBtYW5hZ2VyID0gbmV3IE1hbmFnZXIoe1xuICAgIGNhY2hlLFxuICAgIGdldENsaWVudDogKCkgPT4gaW5qZWN0b3IuZ2V0KEFwb2xsbykuZ2V0Q2xpZW50KCksXG4gIH0pO1xuXG4gIHJldHVybiBtYW5hZ2VyO1xufVxuIl19