@loona/angular
Version:
App State Management done with GraphQL (angular integration)
172 lines • 13.5 kB
JavaScript
/**
* @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGxvb25hL2FuZ3VsYXIvIiwic291cmNlcyI6WyJtb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUF1QixRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTlFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUMsT0FBTyxFQUFFLFNBQVMsRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFFckUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMvQixPQUFPLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDaEUsT0FBTyxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsYUFBYSxFQUNiLFdBQVcsRUFDWCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGNBQWMsR0FDZixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFFekM7SUFFRSx5QkFDVSxPQUFnQixFQUNELE1BQThCLEVBQ3JELEtBQVksRUFDWixPQUFnQixFQUNoQixNQUFxQixFQUNyQixRQUFrQjtRQU5wQixpQkF3QkM7UUF2QlMsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQU94QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFVCxJQUFBLGdCQUEwQixFQUF6QixnQkFBSyxFQUFFLFlBQWtCO1FBRWhDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBQSxLQUFLO1lBQ1osSUFBQSxrQ0FBZ0QsRUFBL0Msc0JBQVEsRUFBRSxjQUFxQztZQUV0RCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMs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SUFxQ0M7U0FwQ1ksV0FBVzs7Ozs7QUFzQ3hCLE1BQU0sVUFBVSxXQUFXLENBQUMsT0FBZ0I7SUFDMUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoQyxDQUFDOzs7Ozs7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUM1QixLQUF1QixFQUN2QixRQUFrQjs7UUFFWixPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDMUIsS0FBSyxPQUFBO1FBQ0wsU0FBUyxFQUFFLGNBQU0sT0FBQSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFoQyxDQUFnQztLQUNsRCxDQUFDO0lBRUYsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMsIEluamVjdG9yLCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcG9sbG9DYWNoZX0gZnJvbSAnYXBvbGxvLWNhY2hlJztcbmltcG9ydCB7QXBvbGxvfSBmcm9tICdhcG9sbG8tYW5ndWxhcic7XG5pbXBvcnQge01hbmFnZXIsIExvb25hTGluaywgU3RhdGVDbGFzcywgTWV0YWRhdGF9IGZyb20gJ0Bsb29uYS9jb3JlJztcblxuaW1wb3J0IHtMb29uYX0gZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHtJbm5lckFjdGlvbnMsIFNjYW5uZWRBY3Rpb25zLCBBY3Rpb25zfSBmcm9tICcuL2FjdGlvbnMnO1xuaW1wb3J0IHtFZmZlY3RzUnVubmVyLCBFZmZlY3RzLCBtYXBTdGF0ZXMsIGV4dHJhY3RTdGF0ZX0gZnJvbSAnLi9lZmZlY3RzJztcbmltcG9ydCB7XG4gIElOSVRJQUxfU1RBVEUsXG4gIENISUxEX1NUQVRFLFxuICBMT09OQV9DQUNIRSxcbiAgUk9PVF9FRkZFQ1RTX0lOSVQsXG4gIFVQREFURV9FRkZFQ1RTLFxufSBmcm9tICcuL3Rva2Vucyc7XG5pbXBvcnQge2hhbmRsZU9ic2VydmFibGV9IGZyb20gJy4vdXRpbHMnO1xuXG5ATmdNb2R1bGUoKVxuZXhwb3J0IGNsYXNzIExvb25hUm9vdE1vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWZmZWN0czogRWZmZWN0cyxcbiAgICBASW5qZWN0KElOSVRJQUxfU1RBVEUpIHN0YXRlczogU3RhdGVDbGFzczxNZXRhZGF0YT5bXSxcbiAgICBsb29uYTogTG9vbmEsXG4gICAgbWFuYWdlcjogTWFuYWdlcixcbiAgICBydW5uZXI6IEVmZmVjdHNSdW5uZXIsXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHtcbiAgICBydW5uZXIuc3RhcnQoKTtcblxuICAgIGNvbnN0IHtuYW1lcywgYWRkfSA9IG1hcFN0YXRlcygpO1xuXG4gICAgc3RhdGVzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgY29uc3Qge2luc3RhbmNlLCBtZXRhfSA9IGV4dHJhY3RTdGF0ZShzdGF0ZSwgaW5qZWN0b3IpO1xuXG4gICAgICBtYW5hZ2VyLmFkZFN0YXRlKGluc3RhbmNlLCBtZXRhLCBoYW5kbGVPYnNlcnZhYmxlKTtcbiAgICAgIHRoaXMuYWRkRWZmZWN0cyhpbnN0YW5jZSwgbWV0YS5lZmZlY3RzKTtcbiAgICAgIGFkZChpbnN0YW5jZSk7XG4gICAgfSk7XG5cbiAgICBsb29uYS5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiBST09UX0VGRkVDVFNfSU5JVCxcbiAgICAgIHN0YXRlczogbmFtZXMsXG4gICAgfSk7XG4gIH1cblxuICBhZGRFZmZlY3RzKHN0YXRlOiBhbnksIG1ldGE/OiBNZXRhZGF0YS5FZmZlY3RzKSB7XG4gICAgdGhpcy5lZmZlY3RzLmFkZEVmZmVjdHMoc3RhdGUsIG1ldGEpO1xuICB9XG59XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgTG9vbmFDaGlsZE1vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoQ0hJTERfU1RBVEUpIHN0YXRlczogU3RhdGVDbGFzczxNZXRhZGF0YT5bXSxcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgbWFuYWdlcjogTWFuYWdlcixcbiAgICBsb29uYTogTG9vbmEsXG4gICAgcm9vdE1vZHVsZTogTG9vbmFSb290TW9kdWxlLFxuICApIHtcbiAgICBjb25zdCB7bmFtZXMsIGFkZH0gPSBtYXBTdGF0ZXMoKTtcblxuICAgIHN0YXRlcy5mb3JFYWNoKHN0YXRlID0+IHtcbiAgICAgIGNvbnN0IHtpbnN0YW5jZSwgbWV0YX0gPSBleHRyYWN0U3RhdGUoc3RhdGUsIGluamVjdG9yKTtcblxuICAgICAgbWFuYWdlci5hZGRTdGF0ZShpbnN0YW5jZSwgbWV0YSwgaGFuZGxlT2JzZXJ2YWJsZSk7XG4gICAgICByb290TW9kdWxlLmFkZEVmZmVjdHMoaW5zdGFuY2UsIG1ldGEuZWZmZWN0cyk7XG4gICAgICBhZGQoaW5zdGFuY2UpO1xuICAgIH0pO1xuXG4gICAgbG9vbmEuZGlzcGF0Y2goe1xuICAgICAgdHlwZTogVVBEQVRFX0VGRkVDVFMsXG4gICAgICBzdGF0ZXM6IG5hbWVzLFxuICAgIH0pO1xuICB9XG59XG5cbkBOZ01vZHVsZSgpXG5leHBvcnQgY2xhc3MgTG9vbmFNb2R1bGUge1xuICBzdGF0aWMgZm9yUm9vdChzdGF0ZXM6IGFueVtdID0gW10pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IExvb25hUm9vdE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICBMb29uYSxcbiAgICAgICAgSW5uZXJBY3Rpb25zLFxuICAgICAgICBTY2FubmVkQWN0aW9ucyxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IEFjdGlvbnMsXG4gICAgICAgICAgdXNlRXhpc3Rpbmc6IFNjYW5uZWRBY3Rpb25zLFxuICAgICAgICB9LFxuICAgICAgICAuLi5zdGF0ZXMsXG4gICAgICAgIHtwcm92aWRlOiBJTklUSUFMX1NUQVRFLCB1c2VWYWx1ZTogc3RhdGVzfSxcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE1hbmFnZXIsXG4gICAgICAgICAgdXNlRmFjdG9yeTogbWFuYWdlckZhY3RvcnksXG4gICAgICAgICAgZGVwczogW0xPT05BX0NBQ0hFLCBJbmplY3Rvcl0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBMb29uYUxpbmssXG4gICAgICAgICAgdXNlRmFjdG9yeTogbGlua0ZhY3RvcnksXG4gICAgICAgICAgZGVwczogW01hbmFnZXJdLFxuICAgICAgICB9LFxuICAgICAgICBFZmZlY3RzLFxuICAgICAgICBFZmZlY3RzUnVubmVyLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZvckNoaWxkKHN0YXRlczogYW55W10gPSBbXSk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTG9vbmFDaGlsZE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogWy4uLnN0YXRlcywge3Byb3ZpZGU6IENISUxEX1NUQVRFLCB1c2VWYWx1ZTogc3RhdGVzfV0sXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlua0ZhY3RvcnkobWFuYWdlcjogTWFuYWdlcik6IExvb25hTGluayB7XG4gIHJldHVybiBuZXcgTG9vbmFMaW5rKG1hbmFnZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFuYWdlckZhY3RvcnkoXG4gIGNhY2hlOiBBcG9sbG9DYWNoZTxhbnk+LFxuICBpbmplY3RvcjogSW5qZWN0b3IsXG4pOiBNYW5hZ2VyIHtcbiAgY29uc3QgbWFuYWdlciA9IG5ldyBNYW5hZ2VyKHtcbiAgICBjYWNoZSxcbiAgICBnZXRDbGllbnQ6ICgpID0+IGluamVjdG9yLmdldChBcG9sbG8pLmdldENsaWVudCgpLFxuICB9KTtcblxuICByZXR1cm4gbWFuYWdlcjtcbn1cbiJdfQ==