UNPKG

@loona/angular

Version:

App State Management done with GraphQL (angular integration)

172 lines 13.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; 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'; var LoonaRootModule = /** @class */ (function () { function LoonaRootModule(effects, states, loona, manager, runner, injector) { var _this = this; this.effects = effects; runner.start(); var _a = mapStates(), names = _a.names, add = _a.add; states.forEach(function (state) { var _a = extractState(state, injector), instance = _a.instance, meta = _a.meta; 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 {?} */ LoonaRootModule.prototype.addEffects = /** * @param {?} state * @param {?=} meta * @return {?} */ function (state, meta) { this.effects.addEffects(state, meta); }; LoonaRootModule.decorators = [ { type: NgModule } ]; /** @nocollapse */ LoonaRootModule.ctorParameters = function () { return [ { type: Effects }, { type: Array, decorators: [{ type: Inject, args: [INITIAL_STATE,] }] }, { type: Loona }, { type: Manager }, { type: EffectsRunner }, { type: Injector } ]; }; return LoonaRootModule; }()); export { LoonaRootModule }; if (false) { /** @type {?} */ LoonaRootModule.prototype.effects; } var LoonaChildModule = /** @class */ (function () { function LoonaChildModule(states, injector, manager, loona, rootModule) { var _a = mapStates(), names = _a.names, add = _a.add; states.forEach(function (state) { var _a = extractState(state, injector), instance = _a.instance, meta = _a.meta; 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 = function () { return [ { type: Array, decorators: [{ type: Inject, args: [CHILD_STATE,] }] }, { type: Injector }, { type: Manager }, { type: Loona }, { type: LoonaRootModule } ]; }; return LoonaChildModule; }()); export { LoonaChildModule }; var LoonaModule = /** @class */ (function () { function LoonaModule() { } /** * @param {?=} states * @return {?} */ LoonaModule.forRoot = /** * @param {?=} states * @return {?} */ function (states) { if (states === void 0) { states = []; } return { ngModule: LoonaRootModule, providers: tslib_1.__spread([ 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 {?} */ LoonaModule.forChild = /** * @param {?=} states * @return {?} */ function (states) { if (states === void 0) { states = []; } return { ngModule: LoonaChildModule, providers: tslib_1.__spread(states, [{ provide: CHILD_STATE, useValue: states }]), }; }; LoonaModule.decorators = [ { type: NgModule } ]; return LoonaModule; }()); export { LoonaModule }; /** * @param {?} manager * @return {?} */ export function linkFactory(manager) { return new LoonaLink(manager); } /** * @param {?} cache * @param {?} injector * @return {?} */ export function managerFactory(cache, injector) { /** @type {?} */ var manager = new Manager({ cache: cache, getClient: function () { return injector.get(Apollo).getClient(); }, }); return manager; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGxvb25hL2FuZ3VsYXIvIiwic291cmNlcyI6WyJtb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUF1QixRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTlFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFFckUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsYUFBYSxFQUNiLFdBQVcsRUFDWCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGNBQWMsR0FDZixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFekM7SUFFRSx5QkFDVSxPQUFnQixFQUNELE1BQThCLEVBQ3JELEtBQVksRUFDWixPQUFnQixFQUNoQixNQUFxQixFQUNyQixRQUFrQjtRQU5wQixpQkF3QkM7UUF2QlMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQU94QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFVCxJQUFBLGdCQUEwQixFQUF6QixnQkFBSyxFQUFFLFlBQWtCO1FBRWhDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQSxLQUFLO1lBQ1osSUFBQSxrQ0FBZ0QsRUFBL0Msc0JBQVEsRUFBRSxjQUFxQztZQUV0RCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNuRCxLQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNiLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7SUFFRCxvQ0FBVTs7Ozs7SUFBVixVQUFXLEtBQVUsRUFBRSxJQUF1QjtRQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7Z0JBOUJGLFFBQVE7Ozs7Z0JBVmMsT0FBTzs0Q0FjekIsTUFBTSxTQUFDLGFBQWE7Z0JBaEJqQixLQUFLO2dCQUZMLE9BQU87Z0JBSVAsYUFBYTtnQkFQa0IsUUFBUTs7SUFnRC9DLHNCQUFDO0NBQUEsQUEvQkQsSUErQkM7U0E5QlksZUFBZTs7O0lBRXhCLGtDQUF3Qjs7QUE4QjVCO0lBRUUsMEJBQ3VCLE1BQThCLEVBQ25ELFFBQWtCLEVBQ2xCLE9BQWdCLEVBQ2hCLEtBQVksRUFDWixVQUEyQjtRQUVyQixJQUFBLGdCQUEwQixFQUF6QixnQkFBSyxFQUFFLFlBQWtCO1FBRWhDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQSxLQUFLO1lBQ1osSUFBQSxrQ0FBZ0QsRUFBL0Msc0JBQVEsRUFBRSxjQUFxQztZQUV0RCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNuRCxVQUFVLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNiLElBQUksRUFBRSxjQUFjO1lBQ3BCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7Z0JBdkJGLFFBQVE7Ozs7NENBR0osTUFBTSxTQUFDLFdBQVc7Z0JBckRnQixRQUFRO2dCQUd2QyxPQUFPO2dCQUVQLEtBQUs7Z0JBb0RHLGVBQWU7O0lBaUIvQix1QkFBQztDQUFBLEFBeEJELElBd0JDO1NBdkJZLGdCQUFnQjtBQXlCN0I7SUFBQTtJQXFDQSxDQUFDOzs7OztJQW5DUSxtQkFBTzs7OztJQUFkLFVBQWUsTUFBa0I7UUFBbEIsdUJBQUEsRUFBQSxXQUFrQjtRQUMvQixPQUFPO1lBQ0wsUUFBUSxFQUFFLGVBQWU7WUFDekIsU0FBUztnQkFDUCxLQUFLO2dCQUNMLFlBQVk7Z0JBQ1osY0FBYztnQkFDZDtvQkFDRSxPQUFPLEVBQUUsT0FBTztvQkFDaEIsV0FBVyxFQUFFLGNBQWM7aUJBQzVCO2VBQ0UsTUFBTTtnQkFDVCxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQztnQkFDMUM7b0JBQ0UsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFVBQVUsRUFBRSxjQUFjO29CQUMxQixJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO2lCQUM5QjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsU0FBUztvQkFDbEIsVUFBVSxFQUFFLFdBQVc7b0JBQ3ZCLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDaEI7Z0JBQ0QsT0FBTztnQkFDUCxhQUFhO2NBQ2Q7U0FDRixDQUFDO0lBQ0osQ0FBQzs7Ozs7SUFFTSxvQkFBUTs7OztJQUFmLFVBQWdCLE1BQWtCO1FBQWxCLHVCQUFBLEVBQUEsV0FBa0I7UUFDaEMsT0FBTztZQUNMLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsU0FBUyxtQkFBTSxNQUFNLEdBQUUsRUFBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUMsRUFBQztTQUNqRSxDQUFDO0lBQ0osQ0FBQzs7Z0JBcENGLFFBQVE7O0lBcUNULGtCQUFDO0NBQUEsQUFyQ0QsSUFxQ0M7U0FwQ1ksV0FBVzs7Ozs7QUFzQ3hCLE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBZ0I7SUFDMUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoQyxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUM1QixLQUF1QixFQUN2QixRQUFrQjs7UUFFWixPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDMUIsS0FBSyxPQUFBO1FBQ0wsU0FBUyxFQUFFLGNBQU0sT0FBQSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFoQyxDQUFnQztLQUNsRCxDQUFDO0lBRUYsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMsIEluamVjdG9yLCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcG9sbG9DYWNoZX0gZnJvbSAnYXBvbGxvLWNhY2hlJztcbmltcG9ydCB7QXBvbGxvfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQge01hbmFnZXIsIExvb25hTGluaywgU3RhdGVDbGFzcywgTWV0YWRhdGF9IGZyb20gJ0Bsb29uYS9jb3JlJztcblxuaW1wb3J0IHtMb29uYX0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHtJbm5lckFjdGlvbnMsIFNjYW5uZWRBY3Rpb25zLCBBY3Rpb25zfSBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IHtFZmZlY3RzUnVubmVyLCBFZmZlY3RzLCBtYXBTdGF0ZXMsIGV4dHJhY3RTdGF0ZX0gZnJvbSAnLi9lZmZlY3RzJztcbmltcG9ydCB7XG4gIElOSVRJQUxfU1RBVEUsXG4gIENISUxEX1NUQVRFLFxuICBMT09OQV9DQUNIRSxcbiAgUk9PVF9FRkZFQ1RTX0lOSVQsXG4gIFVQREFURV9FRkZFQ1RTLFxufSBmcm9tICcuL3Rva2Vucyc7XG5pbXBvcnQge2hhbmRsZU9ic2VydmFibGV9IGZyb20gJy4vdXRpbHMnO1xuXG5ATmdNb2R1bGUoKVxuZXhwb3J0IGNsYXNzIExvb25hUm9vdE1vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWZmZWN0czogRWZmZWN0cyxcbiAgICBASW5qZWN0KElOSVRJQUxfU1RBVEUpIHN0YXRlczogU3RhdGVDbGFzczxNZXRhZGF0YT5bXSxcbiAgICBsb29uYTogTG9vbmEsXG4gICAgbWFuYWdlcjogTWFuYWdlcixcbiAgICBydW5uZXI6IEVmZmVjdHNSdW5uZXIsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHtcbiAgICBydW5uZXIuc3RhcnQoKTtcblxuICAgIGNvbnN0IHtuYW1lcywgYWRkfSA9IG1hcFN0YXRlcygpO1xuXG4gICAgc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgY29uc3Qge2luc3RhbmNlLCBtZXRhfSA9IGV4dHJhY3RTdGF0ZShzdGF0ZSwgaW5qZWN0b3IpO1xuXG4gICAgICBtYW5hZ2VyLmFkZFN0YXRlKGluc3RhbmNlLCBtZXRhLCBoYW5kbGVPYnNlcnZhYmxlKTtcbiAgICAgIHRoaXMuYWRkRWZmZWN0cyhpbnN0YW5jZSwgbWV0YS5lZmZlY3RzKTtcbiAgICAgIGFkZChpbnN0YW5jZSk7XG4gICAgfSk7XG5cbiAgICBsb29uYS5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiBST09UX0VGRkVDVFNfSU5JVCxcbiAgICAgIHN0YXRlczogbmFtZXMsXG4gICAgfSk7XG4gIH1cblxuICBhZGRFZmZlY3RzKHN0YXRlOiBhbnksIG1ldGE/OiBNZXRhZGF0YS5FZmZlY3RzKSB7XG4gICAgdGhpcy5lZmZlY3RzLmFkZEVmZmVjdHMoc3RhdGUsIG1ldGEpO1xuICB9XG59XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgTG9vbmFDaGlsZE1vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQ0hJTERfU1RBVEUpIHN0YXRlczogU3RhdGVDbGFzczxNZXRhZGF0YT5bXSxcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgbWFuYWdlcjogTWFuYWdlcixcbiAgICBsb29uYTogTG9vbmEsXG4gICAgcm9vdE1vZHVsZTogTG9vbmFSb290TW9kdWxlLFxuICApIHtcbiAgICBjb25zdCB7bmFtZXMsIGFkZH0gPSBtYXBTdGF0ZXMoKTtcblxuICAgIHN0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIGNvbnN0IHtpbnN0YW5jZSwgbWV0YX0gPSBleHRyYWN0U3RhdGUoc3RhdGUsIGluamVjdG9yKTtcblxuICAgICAgbWFuYWdlci5hZGRTdGF0ZShpbnN0YW5jZSwgbWV0YSwgaGFuZGxlT2JzZXJ2YWJsZSk7XG4gICAgICByb290TW9kdWxlLmFkZEVmZmVjdHMoaW5zdGFuY2UsIG1ldGEuZWZmZWN0cyk7XG4gICAgICBhZGQoaW5zdGFuY2UpO1xuICAgIH0pO1xuXG4gICAgbG9vbmEuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVBEQVRFX0VGRkVDVFMsXG4gICAgICBzdGF0ZXM6IG5hbWVzLFxuICAgIH0pO1xuICB9XG59XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgTG9vbmFNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChzdGF0ZXM6IGFueVtdID0gW10pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IExvb25hUm9vdE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICBMb29uYSxcbiAgICAgICAgSW5uZXJBY3Rpb25zLFxuICAgICAgICBTY2FubmVkQWN0aW9ucyxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEFjdGlvbnMsXG4gICAgICAgICAgdXNlRXhpc3Rpbmc6IFNjYW5uZWRBY3Rpb25zLFxuICAgICAgICB9LFxuICAgICAgICAuLi5zdGF0ZXMsXG4gICAgICAgIHtwcm92aWRlOiBJTklUSUFMX1NUQVRFLCB1c2VWYWx1ZTogc3RhdGVzfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE1hbmFnZXIsXG4gICAgICAgICAgdXNlRmFjdG9yeTogbWFuYWdlckZhY3RvcnksXG4gICAgICAgICAgZGVwczogW0xPT05BX0NBQ0hFLCBJbmplY3Rvcl0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBMb29uYUxpbmssXG4gICAgICAgICAgdXNlRmFjdG9yeTogbGlua0ZhY3RvcnksXG4gICAgICAgICAgZGVwczogW01hbmFnZXJdLFxuICAgICAgICB9LFxuICAgICAgICBFZmZlY3RzLFxuICAgICAgICBFZmZlY3RzUnVubmVyLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZvckNoaWxkKHN0YXRlczogYW55W10gPSBbXSk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTG9vbmFDaGlsZE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogWy4uLnN0YXRlcywge3Byb3ZpZGU6IENISUxEX1NUQVRFLCB1c2VWYWx1ZTogc3RhdGVzfV0sXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0ZhY3RvcnkobWFuYWdlcjogTWFuYWdlcik6IExvb25hTGluayB7XG4gIHJldHVybiBuZXcgTG9vbmFMaW5rKG1hbmFnZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFuYWdlckZhY3RvcnkoXG4gIGNhY2hlOiBBcG9sbG9DYWNoZTxhbnk+LFxuICBpbmplY3RvcjogSW5qZWN0b3IsXG4pOiBNYW5hZ2VyIHtcbiAgY29uc3QgbWFuYWdlciA9IG5ldyBNYW5hZ2VyKHtcbiAgICBjYWNoZSxcbiAgICBnZXRDbGllbnQ6ICgpID0+IGluamVjdG9yLmdldChBcG9sbG8pLmdldENsaWVudCgpLFxuICB9KTtcblxuICByZXR1cm4gbWFuYWdlcjtcbn1cbiJdfQ==