@datorama/akita-ng-effects
Version:
A Reactive State Management extension dealing with side effects.
84 lines • 3.2 kB
JavaScript
import { __read, __spread, __values } from "tslib";
import { Injector, NgModule } from '@angular/core';
import { _FEATURE_EFFECTS, _ROOT_EFFECTS, FEATURE_EFFECT_INSTANCES, ROOT_EFFECT_INSTANCES } from './tokens';
import { EffectsRootModule } from './effect-root.module';
import { Actions } from './actions';
import { EffectsFeatureModule } from './effect-feature.module';
import { ModuleManager } from './module-manager.service';
var AkitaNgEffectsModule = /** @class */ (function () {
function AkitaNgEffectsModule() {
}
AkitaNgEffectsModule.forRoot = function (rootEffects) {
if (rootEffects === void 0) { rootEffects = []; }
return {
ngModule: EffectsRootModule,
providers: [
ModuleManager,
Actions,
rootEffects,
{
provide: _ROOT_EFFECTS,
useValue: [rootEffects],
},
{
provide: ROOT_EFFECT_INSTANCES,
useFactory: createEffectInstances,
deps: [Injector, _ROOT_EFFECTS, ModuleManager],
},
],
};
};
AkitaNgEffectsModule.forFeature = function (featureEffects) {
if (featureEffects === void 0) { featureEffects = []; }
return {
ngModule: EffectsFeatureModule,
providers: [
featureEffects,
{
provide: _FEATURE_EFFECTS,
useValue: featureEffects,
multi: true,
},
{
provide: FEATURE_EFFECT_INSTANCES,
multi: true,
useFactory: createEffectInstances,
deps: [Injector, _FEATURE_EFFECTS, ModuleManager],
},
],
};
};
AkitaNgEffectsModule.decorators = [
{ type: NgModule, args: [{},] }
];
return AkitaNgEffectsModule;
}());
export { AkitaNgEffectsModule };
export function createEffectInstances(injector, effectGroups, moduleManager) {
var e_1, _a;
var mergedEffects = [];
try {
for (var effectGroups_1 = __values(effectGroups), effectGroups_1_1 = effectGroups_1.next(); !effectGroups_1_1.done; effectGroups_1_1 = effectGroups_1.next()) {
var effectGroup = effectGroups_1_1.value;
mergedEffects.push.apply(mergedEffects, __spread(effectGroup));
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (effectGroups_1_1 && !effectGroups_1_1.done && (_a = effectGroups_1.return)) _a.call(effectGroups_1);
}
finally { if (e_1) throw e_1.error; }
}
// todo we shouldn't use a map to avoid registering the effects twice;
// fix the underlying issue for feature is called twice
var effectInstances = mergedEffects.reduce(function (acc, effect) {
if (!moduleManager.has(effect)) {
moduleManager.add(effect);
acc.push(injector.get(effect));
}
return acc;
}, []);
return effectInstances;
}
//# sourceMappingURL=akita-ng-effects.module.js.map