@loona/angular
Version:
App State Management done with GraphQL (angular integration)
162 lines • 12.7 kB
JavaScript
/**
* @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGxvb25hL2FuZ3VsYXIvIiwic291cmNlcyI6WyJtb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQXVCLFFBQVEsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFOUUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUVyRSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsV0FBVyxFQUNYLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsY0FBYyxHQUNmLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUd6QyxNQUFNLE9BQU8sZUFBZTs7Ozs7Ozs7O0lBQzFCLFlBQ1UsT0FBZ0IsRUFDRCxNQUE4QixFQUNyRCxLQUFZLEVBQ1osT0FBZ0IsRUFDaEIsTUFBcUIsRUFDckIsUUFBa0I7UUFMVixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBT3hCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztjQUVULEVBQUMsS0FBSyxFQUFFLEdBQUcsRUFBQyxHQUFHLFNBQVMsRUFBRTtRQUVoQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2tCQUNmLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO1lBRXRELE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQ2IsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixNQUFNLEVBQUUsS0FBSztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7OztJQUVELFVBQVUsQ0FBQyxLQUFVLEVBQUUsSUFBdUI7UUFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7OztZQTlCRixRQUFROzs7O1lBVmMsT0FBTzt3Q0FjekIsTUFBTSxTQUFDLGFBQWE7WUFoQmpCLEtBQUs7WUFGTCxPQUFPO1lBSVAsYUFBYTtZQVBrQixRQUFROzs7O0lBb0IzQyxrQ0FBd0I7O0FBK0I1QixNQUFNLE9BQU8sZ0JBQWdCOzs7Ozs7OztJQUMzQixZQUN1QixNQUE4QixFQUNuRCxRQUFrQixFQUNsQixPQUFnQixFQUNoQixLQUFZLEVBQ1osVUFBMkI7Y0FFckIsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFDLEdBQUcsU0FBUyxFQUFFO1FBRWhDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7a0JBQ2YsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7WUFFdEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDbkQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDYixJQUFJLEVBQUUsY0FBYztZQUNwQixNQUFNLEVBQUUsS0FBSztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7OztZQXZCRixRQUFROzs7O3dDQUdKLE1BQU0sU0FBQyxXQUFXO1lBckRnQixRQUFRO1lBR3ZDLE9BQU87WUFFUCxLQUFLO1lBb0RHLGVBQWU7O0FBb0IvQixNQUFNLE9BQU8sV0FBVzs7Ozs7SUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFnQixFQUFFO1FBQy9CLE9BQU87WUFDTCxRQUFRLEVBQUUsZUFBZTtZQUN6QixTQUFTLEVBQUU7Z0JBQ1QsS0FBSztnQkFDTCxZQUFZO2dCQUNaLGNBQWM7Z0JBQ2Q7b0JBQ0UsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFdBQVcsRUFBRSxjQUFjO2lCQUM1QjtnQkFDRCxHQUFHLE1BQU07Z0JBQ1QsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUM7Z0JBQzFDO29CQUNFLE9BQU8sRUFBRSxPQUFPO29CQUNoQixVQUFVLEVBQUUsY0FBYztvQkFDMUIsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztpQkFDOUI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLFVBQVUsRUFBRSxXQUFXO29CQUN2QixJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUM7aUJBQ2hCO2dCQUNELE9BQU87Z0JBQ1AsYUFBYTthQUNkO1NBQ0YsQ0FBQztJQUNKLENBQUM7Ozs7O0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFnQixFQUFFO1FBQ2hDLE9BQU87WUFDTCxRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLFNBQVMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUM7U0FDakUsQ0FBQztJQUNKLENBQUM7OztZQXBDRixRQUFROzs7Ozs7QUF1Q1QsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFnQjtJQUMxQyxPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLENBQUM7Ozs7OztBQUVELE1BQU0sVUFBVSxjQUFjLENBQzVCLEtBQXVCLEVBQ3ZCLFFBQWtCOztVQUVaLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUMxQixLQUFLO1FBQ0wsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFO0tBQ2xELENBQUM7SUFFRixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgSW5qZWN0b3IsIEluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fwb2xsb0NhY2hlfSBmcm9tICdhcG9sbG8tY2FjaGUnO1xuaW1wb3J0IHtBcG9sbG99IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7TWFuYWdlciwgTG9vbmFMaW5rLCBTdGF0ZUNsYXNzLCBNZXRhZGF0YX0gZnJvbSAnQGxvb25hL2NvcmUnO1xuXG5pbXBvcnQge0xvb25hfSBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQge0lubmVyQWN0aW9ucywgU2Nhbm5lZEFjdGlvbnMsIEFjdGlvbnN9IGZyb20gJy4vYWN0aW9ucyc7XG5pbXBvcnQge0VmZmVjdHNSdW5uZXIsIEVmZmVjdHMsIG1hcFN0YXRlcywgZXh0cmFjdFN0YXRlfSBmcm9tICcuL2VmZmVjdHMnO1xuaW1wb3J0IHtcbiAgSU5JVElBTF9TVEFURSxcbiAgQ0hJTERfU1RBVEUsXG4gIExPT05BX0NBQ0hFLFxuICBST09UX0VGRkVDVFNfSU5JVCxcbiAgVVBEQVRFX0VGRkVDVFMsXG59IGZyb20gJy4vdG9rZW5zJztcbmltcG9ydCB7aGFuZGxlT2JzZXJ2YWJsZX0gZnJvbSAnLi91dGlscyc7XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgTG9vbmFSb290TW9kdWxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlZmZlY3RzOiBFZmZlY3RzLFxuICAgIEBJbmplY3QoSU5JVElBTF9TVEFURSkgc3RhdGVzOiBTdGF0ZUNsYXNzPE1ldGFkYXRhPltdLFxuICAgIGxvb25hOiBMb29uYSxcbiAgICBtYW5hZ2VyOiBNYW5hZ2VyLFxuICAgIHJ1bm5lcjogRWZmZWN0c1J1bm5lcixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICkge1xuICAgIHJ1bm5lci5zdGFydCgpO1xuXG4gICAgY29uc3Qge25hbWVzLCBhZGR9ID0gbWFwU3RhdGVzKCk7XG5cbiAgICBzdGF0ZXMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBjb25zdCB7aW5zdGFuY2UsIG1ldGF9ID0gZXh0cmFjdFN0YXRlKHN0YXRlLCBpbmplY3Rvcik7XG5cbiAgICAgIG1hbmFnZXIuYWRkU3RhdGUoaW5zdGFuY2UsIG1ldGEsIGhhbmRsZU9ic2VydmFibGUpO1xuICAgICAgdGhpcy5hZGRFZmZlY3RzKGluc3RhbmNlLCBtZXRhLmVmZmVjdHMpO1xuICAgICAgYWRkKGluc3RhbmNlKTtcbiAgICB9KTtcblxuICAgIGxvb25hLmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6IFJPT1RfRUZGRUNUU19JTklULFxuICAgICAgc3RhdGVzOiBuYW1lcyxcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEVmZmVjdHMoc3RhdGU6IGFueSwgbWV0YT86IE1ldGFkYXRhLkVmZmVjdHMpIHtcbiAgICB0aGlzLmVmZmVjdHMuYWRkRWZmZWN0cyhzdGF0ZSwgbWV0YSk7XG4gIH1cbn1cblxuQE5nTW9kdWxlKClcbmV4cG9ydCBjbGFzcyBMb29uYUNoaWxkTW9kdWxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChDSElMRF9TVEFURSkgc3RhdGVzOiBTdGF0ZUNsYXNzPE1ldGFkYXRhPltdLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBtYW5hZ2VyOiBNYW5hZ2VyLFxuICAgIGxvb25hOiBMb29uYSxcbiAgICByb290TW9kdWxlOiBMb29uYVJvb3RNb2R1bGUsXG4gICkge1xuICAgIGNvbnN0IHtuYW1lcywgYWRkfSA9IG1hcFN0YXRlcygpO1xuXG4gICAgc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgY29uc3Qge2luc3RhbmNlLCBtZXRhfSA9IGV4dHJhY3RTdGF0ZShzdGF0ZSwgaW5qZWN0b3IpO1xuXG4gICAgICBtYW5hZ2VyLmFkZFN0YXRlKGluc3RhbmNlLCBtZXRhLCBoYW5kbGVPYnNlcnZhYmxlKTtcbiAgICAgIHJvb3RNb2R1bGUuYWRkRWZmZWN0cyhpbnN0YW5jZSwgbWV0YS5lZmZlY3RzKTtcbiAgICAgIGFkZChpbnN0YW5jZSk7XG4gICAgfSk7XG5cbiAgICBsb29uYS5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiBVUERBVEVfRUZGRUNUUyxcbiAgICAgIHN0YXRlczogbmFtZXMsXG4gICAgfSk7XG4gIH1cbn1cblxuQE5nTW9kdWxlKClcbmV4cG9ydCBjbGFzcyBMb29uYU1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KHN0YXRlczogYW55W10gPSBbXSk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTG9vbmFSb290TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIExvb25hLFxuICAgICAgICBJbm5lckFjdGlvbnMsXG4gICAgICAgIFNjYW5uZWRBY3Rpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQWN0aW9ucyxcbiAgICAgICAgICB1c2VFeGlzdGluZzogU2Nhbm5lZEFjdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnN0YXRlcyxcbiAgICAgICAge3Byb3ZpZGU6IElOSVRJQUxfU1RBVEUsIHVzZVZhbHVlOiBzdGF0ZXN9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogTWFuYWdlcixcbiAgICAgICAgICB1c2VGYWN0b3J5OiBtYW5hZ2VyRmFjdG9yeSxcbiAgICAgICAgICBkZXBzOiBbTE9PTkFfQ0FDSEUsIEluamVjdG9yXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IExvb25hTGluayxcbiAgICAgICAgICB1c2VGYWN0b3J5OiBsaW5rRmFjdG9yeSxcbiAgICAgICAgICBkZXBzOiBbTWFuYWdlcl0sXG4gICAgICAgIH0sXG4gICAgICAgIEVmZmVjdHMsXG4gICAgICAgIEVmZmVjdHNSdW5uZXIsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZm9yQ2hpbGQoc3RhdGVzOiBhbnlbXSA9IFtdKTogTW9kdWxlV2l0aFByb3ZpZGVycyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBMb29uYUNoaWxkTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbLi4uc3RhdGVzLCB7cHJvdmlkZTogQ0hJTERfU1RBVEUsIHVzZVZhbHVlOiBzdGF0ZXN9XSxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5rRmFjdG9yeShtYW5hZ2VyOiBNYW5hZ2VyKTogTG9vbmFMaW5rIHtcbiAgcmV0dXJuIG5ldyBMb29uYUxpbmsobWFuYWdlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYW5hZ2VyRmFjdG9yeShcbiAgY2FjaGU6IEFwb2xsb0NhY2hlPGFueT4sXG4gIGluamVjdG9yOiBJbmplY3Rvcixcbik6IE1hbmFnZXIge1xuICBjb25zdCBtYW5hZ2VyID0gbmV3IE1hbmFnZXIoe1xuICAgIGNhY2hlLFxuICAgIGdldENsaWVudDogKCkgPT4gaW5qZWN0b3IuZ2V0KEFwb2xsbykuZ2V0Q2xpZW50KCksXG4gIH0pO1xuXG4gIHJldHVybiBtYW5hZ2VyO1xufVxuIl19