UNPKG

@ngrx/effects

Version:

Side effect model for @ngrx/store

64 lines 7.81 kB
import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders, } from '@angular/core'; import { FEATURE_STATE_PROVIDER, ROOT_STORE_PROVIDER, Store, } from '@ngrx/store'; import { EffectsRunner } from './effects_runner'; import { EffectSources } from './effect_sources'; import { rootEffectsInit as effectsInit } from './effects_actions'; import { getClasses, isClass } from './utils'; /** * @usageNotes * * ### Providing effects at the root level * * ```ts * bootstrapApplication(AppComponent, { * providers: [provideEffects(RouterEffects)], * }); * ``` * * ### Providing effects at the feature level * * ```ts * const booksRoutes: Route[] = [ * { * path: '', * providers: [provideEffects(BooksApiEffects)], * children: [ * { path: '', component: BookListComponent }, * { path: ':id', component: BookDetailsComponent }, * ], * }, * ]; * ``` */ export function provideEffects(...effects) { const effectsClassesAndRecords = effects.flat(); const effectsClasses = getClasses(effectsClassesAndRecords); return makeEnvironmentProviders([ effectsClasses, { provide: ENVIRONMENT_INITIALIZER, multi: true, useValue: () => { inject(ROOT_STORE_PROVIDER); inject(FEATURE_STATE_PROVIDER, { optional: true }); const effectsRunner = inject(EffectsRunner); const effectSources = inject(EffectSources); const shouldInitEffects = !effectsRunner.isStarted; if (shouldInitEffects) { effectsRunner.start(); } for (const effectsClassOrRecord of effectsClassesAndRecords) { const effectsInstance = isClass(effectsClassOrRecord) ? inject(effectsClassOrRecord) : effectsClassOrRecord; effectSources.addEffects(effectsInstance); } if (shouldInitEffects) { const store = inject(Store); store.dispatch(effectsInit()); } }, }, ]); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZV9lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9lZmZlY3RzL3NyYy9wcm92aWRlX2VmZmVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixNQUFNLEVBQ04sd0JBQXdCLEdBRXpCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLEtBQUssR0FDTixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLElBQUksV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFnQjlDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsR0FBRyxPQUUwRDtJQUU3RCxNQUFNLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUU1RCxPQUFPLHdCQUF3QixDQUFDO1FBQzlCLGNBQWM7UUFDZDtZQUNFLE9BQU8sRUFBRSx1QkFBdUI7WUFDaEMsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFFbkQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzVDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO2dCQUVuRCxJQUFJLGlCQUFpQixFQUFFO29CQUNyQixhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ3ZCO2dCQUVELEtBQUssTUFBTSxvQkFBb0IsSUFBSSx3QkFBd0IsRUFBRTtvQkFDM0QsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDO3dCQUNuRCxDQUFDLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO3dCQUM5QixDQUFDLENBQUMsb0JBQW9CLENBQUM7b0JBQ3pCLGFBQWEsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7aUJBQzNDO2dCQUVELElBQUksaUJBQWlCLEVBQUU7b0JBQ3JCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2lCQUMvQjtZQUNILENBQUM7U0FDRjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIGluamVjdCxcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZFQVRVUkVfU1RBVEVfUFJPVklERVIsXG4gIFJPT1RfU1RPUkVfUFJPVklERVIsXG4gIFN0b3JlLFxufSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBFZmZlY3RzUnVubmVyIH0gZnJvbSAnLi9lZmZlY3RzX3J1bm5lcic7XG5pbXBvcnQgeyBFZmZlY3RTb3VyY2VzIH0gZnJvbSAnLi9lZmZlY3Rfc291cmNlcyc7XG5pbXBvcnQgeyByb290RWZmZWN0c0luaXQgYXMgZWZmZWN0c0luaXQgfSBmcm9tICcuL2VmZmVjdHNfYWN0aW9ucyc7XG5pbXBvcnQgeyBGdW5jdGlvbmFsRWZmZWN0IH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgZ2V0Q2xhc3NlcywgaXNDbGFzcyB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFJ1bnMgdGhlIHByb3ZpZGVkIGVmZmVjdHMuXG4gKiBDYW4gYmUgY2FsbGVkIGF0IHRoZSByb290IGFuZCBmZWF0dXJlIGxldmVscy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVFZmZlY3RzKFxuICBlZmZlY3RzOiBBcnJheTxUeXBlPHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgRnVuY3Rpb25hbEVmZmVjdD4+XG4pOiBFbnZpcm9ubWVudFByb3ZpZGVycztcbi8qKlxuICogUnVucyB0aGUgcHJvdmlkZWQgZWZmZWN0cy5cbiAqIENhbiBiZSBjYWxsZWQgYXQgdGhlIHJvb3QgYW5kIGZlYXR1cmUgbGV2ZWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUVmZmVjdHMoXG4gIC4uLmVmZmVjdHM6IEFycmF5PFR5cGU8dW5rbm93bj4gfCBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbmFsRWZmZWN0Pj5cbik6IEVudmlyb25tZW50UHJvdmlkZXJzO1xuLyoqXG4gKiBAdXNhZ2VOb3Rlc1xuICpcbiAqICMjIyBQcm92aWRpbmcgZWZmZWN0cyBhdCB0aGUgcm9vdCBsZXZlbFxuICpcbiAqIGBgYHRzXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIHtcbiAqICAgcHJvdmlkZXJzOiBbcHJvdmlkZUVmZmVjdHMoUm91dGVyRWZmZWN0cyldLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiAjIyMgUHJvdmlkaW5nIGVmZmVjdHMgYXQgdGhlIGZlYXR1cmUgbGV2ZWxcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgYm9va3NSb3V0ZXM6IFJvdXRlW10gPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnJyxcbiAqICAgICBwcm92aWRlcnM6IFtwcm92aWRlRWZmZWN0cyhCb29rc0FwaUVmZmVjdHMpXSxcbiAqICAgICBjaGlsZHJlbjogW1xuICogICAgICAgeyBwYXRoOiAnJywgY29tcG9uZW50OiBCb29rTGlzdENvbXBvbmVudCB9LFxuICogICAgICAgeyBwYXRoOiAnOmlkJywgY29tcG9uZW50OiBCb29rRGV0YWlsc0NvbXBvbmVudCB9LFxuICogICAgIF0sXG4gKiAgIH0sXG4gKiBdO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRWZmZWN0cyhcbiAgLi4uZWZmZWN0czpcbiAgICB8IEFycmF5PFR5cGU8dW5rbm93bj4gfCBSZWNvcmQ8c3RyaW5nLCBGdW5jdGlvbmFsRWZmZWN0Pj5cbiAgICB8IFtBcnJheTxUeXBlPHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgRnVuY3Rpb25hbEVmZmVjdD4+XVxuKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICBjb25zdCBlZmZlY3RzQ2xhc3Nlc0FuZFJlY29yZHMgPSBlZmZlY3RzLmZsYXQoKTtcbiAgY29uc3QgZWZmZWN0c0NsYXNzZXMgPSBnZXRDbGFzc2VzKGVmZmVjdHNDbGFzc2VzQW5kUmVjb3Jkcyk7XG5cbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgZWZmZWN0c0NsYXNzZXMsXG4gICAge1xuICAgICAgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZVZhbHVlOiAoKSA9PiB7XG4gICAgICAgIGluamVjdChST09UX1NUT1JFX1BST1ZJREVSKTtcbiAgICAgICAgaW5qZWN0KEZFQVRVUkVfU1RBVEVfUFJPVklERVIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAgICAgY29uc3QgZWZmZWN0c1J1bm5lciA9IGluamVjdChFZmZlY3RzUnVubmVyKTtcbiAgICAgICAgY29uc3QgZWZmZWN0U291cmNlcyA9IGluamVjdChFZmZlY3RTb3VyY2VzKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkSW5pdEVmZmVjdHMgPSAhZWZmZWN0c1J1bm5lci5pc1N0YXJ0ZWQ7XG5cbiAgICAgICAgaWYgKHNob3VsZEluaXRFZmZlY3RzKSB7XG4gICAgICAgICAgZWZmZWN0c1J1bm5lci5zdGFydCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlZmZlY3RzQ2xhc3NPclJlY29yZCBvZiBlZmZlY3RzQ2xhc3Nlc0FuZFJlY29yZHMpIHtcbiAgICAgICAgICBjb25zdCBlZmZlY3RzSW5zdGFuY2UgPSBpc0NsYXNzKGVmZmVjdHNDbGFzc09yUmVjb3JkKVxuICAgICAgICAgICAgPyBpbmplY3QoZWZmZWN0c0NsYXNzT3JSZWNvcmQpXG4gICAgICAgICAgICA6IGVmZmVjdHNDbGFzc09yUmVjb3JkO1xuICAgICAgICAgIGVmZmVjdFNvdXJjZXMuYWRkRWZmZWN0cyhlZmZlY3RzSW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZEluaXRFZmZlY3RzKSB7XG4gICAgICAgICAgY29uc3Qgc3RvcmUgPSBpbmplY3QoU3RvcmUpO1xuICAgICAgICAgIHN0b3JlLmRpc3BhdGNoKGVmZmVjdHNJbml0KCkpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0sXG4gIF0pO1xufVxuIl19