UNPKG

@harmowatch/ngx-redux-core

Version:

[![Join the chat at https://gitter.im/harmowatch/ngx-redux-core](https://badges.gitter.im/harmowatch/ngx-redux-core.svg)](https://gitter.im/harmowatch/ngx-redux-core?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

106 lines (105 loc) 11.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { applyMiddleware, compose, createStore } from 'redux'; import { CommonModule } from '@angular/common'; import { Inject, Injector, isDevMode, NgModule, Optional } from '@angular/core'; import { ReduxSelectPipe } from './pipes/redux-select.pipe'; import { ReduxReducerProvider } from './providers/redux-reducer.provider'; import { ReduxStateDefinitionToken } from './tokens/redux-state-definition.token'; import { ReduxRegistry } from './providers/redux-registry'; import { ReduxStore } from './tokens/redux-store.token'; import { ReduxMiddlewares } from './tokens/redux-middlewares.token'; export class ReduxModule { /** * @param {?} injector * @param {?} reducerProvider * @param {?=} stateDefs */ constructor(injector, reducerProvider, stateDefs = []) { injector.get(ReduxRegistry); // just make sure the provider is instantiated if (Array.isArray(stateDefs)) { stateDefs .filter(def => def && def.provider) .map(def => injector.get(def.provider)) .forEach(provider => reducerProvider.addStateProvider(provider)); } } /** * @template S * @param {?=} config * @return {?} */ static forChild(config = {}) { return { ngModule: ReduxModule, providers: [ { provide: ReduxStateDefinitionToken, useValue: config.state || null, multi: true }, ], }; } /** * @template S * @param {?=} config * @return {?} */ static forRoot(config = {}) { return { ngModule: ReduxModule, providers: [ ReduxReducerProvider, ReduxRegistry, { provide: ReduxStore, useFactory: config.storeFactory || ReduxModule.defaultStoreFactory, deps: [ReduxReducerProvider, ReduxMiddlewares] }, { provide: ReduxStateDefinitionToken, useValue: config.state || null, multi: true }, { provide: ReduxMiddlewares, useValue: config.middlewareFunctions || [], multi: false }, ], }; } /** * @param {?} reduxReducerProvider * @param {?} middlewareFunctions * @param {?=} devMode * @return {?} */ static defaultStoreFactory(reduxReducerProvider, middlewareFunctions, devMode = isDevMode()) { return createStore(reduxReducerProvider.rootReducer, {}, ReduxModule.defaultEnhancerFactory(middlewareFunctions, devMode)); } /** * @param {?} middlewareFunctions * @param {?} devMode * @return {?} */ static defaultEnhancerFactory(middlewareFunctions, devMode) { /** @type {?} */ let composeEnhancers = compose; if (devMode && window['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__']) { composeEnhancers = window['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__']; } return composeEnhancers(applyMiddleware(...middlewareFunctions)); } } ReduxModule.decorators = [ { type: NgModule, args: [{ declarations: [ ReduxSelectPipe, ], exports: [ ReduxSelectPipe, ], imports: [ CommonModule, ], },] } ]; /** @nocollapse */ ReduxModule.ctorParameters = () => [ { type: Injector }, { type: ReduxReducerProvider }, { type: Array, decorators: [{ type: Optional }, { type: Inject, args: [ReduxStateDefinitionToken,] }] } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhhcm1vd2F0Y2gvbmd4LXJlZHV4LWNvcmUvIiwic291cmNlcyI6WyJyZWR1eC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBb0MsTUFBTSxPQUFPLENBQUM7QUFFaEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBdUIsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQWFwRSxNQUFNOzs7Ozs7SUFFSixZQUFZLFFBQWtCLEVBQ2xCLGVBQXFDLEVBQ1UsWUFBb0MsRUFBRTtRQUUvRixRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTVCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM1QixTQUFTO2lCQUNOLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDO2lCQUNsQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDdEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDcEU7S0FFRjs7Ozs7O0lBRU0sTUFBTSxDQUFDLFFBQVEsQ0FBUyxTQUFvQyxFQUFFO1FBQ25FLE9BQU87WUFDTCxRQUFRLEVBQUUsV0FBVztZQUNyQixTQUFTLEVBQUU7Z0JBQ1QsRUFBQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUM7YUFDbEY7U0FDRixDQUFDOzs7Ozs7O0lBR0csTUFBTSxDQUFDLE9BQU8sQ0FBUyxTQUFtQyxFQUFFO1FBQ2pFLE9BQU87WUFDTCxRQUFRLEVBQUUsV0FBVztZQUNyQixTQUFTLEVBQUU7Z0JBQ1Qsb0JBQW9CO2dCQUNwQixhQUFhO2dCQUNiO29CQUNFLE9BQU8sRUFBRSxVQUFVO29CQUNuQixVQUFVLEVBQUUsTUFBTSxDQUFDLFlBQVksSUFBSSxXQUFXLENBQUMsbUJBQW1CO29CQUNsRSxJQUFJLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQztpQkFDL0M7Z0JBQ0QsRUFBQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUM7Z0JBQ2pGLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUM7YUFDdEY7U0FDRixDQUFDOzs7Ozs7OztJQUdHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBMEMsRUFDMUMsbUJBQWlDLEVBQ2pDLE9BQU8sR0FBRyxTQUFTLEVBQUU7UUFFckQsT0FBTyxXQUFXLENBQ2hCLG9CQUFvQixDQUFDLFdBQVcsRUFDaEMsRUFBRSxFQUNGLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FDakUsQ0FBQzs7Ozs7OztJQUdHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBaUMsRUFBRSxPQUFnQjs7UUFFdEYsSUFBSSxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7UUFFL0IsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLHNDQUFzQyxDQUFDLEVBQUU7WUFDN0QsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7U0FDbkU7UUFFRCxPQUFPLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQzs7OztZQXpFcEUsUUFBUSxTQUFDO2dCQUNSLFlBQVksRUFBRTtvQkFDWixlQUFlO2lCQUNoQjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsZUFBZTtpQkFDaEI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLFlBQVk7aUJBQ2I7YUFDRjs7OztZQXJCZ0IsUUFBUTtZQUVoQixvQkFBb0I7d0NBd0JkLFFBQVEsWUFBSSxNQUFNLFNBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBwbHlNaWRkbGV3YXJlLCBjb21wb3NlLCBjcmVhdGVTdG9yZSwgTWlkZGxld2FyZSwgU3RvcmUsIFN0b3JlRW5oYW5jZXIgfSBmcm9tICdyZWR1eCc7XG5cbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdG9yLCBpc0Rldk1vZGUsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVkdXhTZWxlY3RQaXBlIH0gZnJvbSAnLi9waXBlcy9yZWR1eC1zZWxlY3QucGlwZSc7XG5pbXBvcnQgeyBSZWR1eFJlZHVjZXJQcm92aWRlciB9IGZyb20gJy4vcHJvdmlkZXJzL3JlZHV4LXJlZHVjZXIucHJvdmlkZXInO1xuaW1wb3J0IHsgUmVkdXhTdGF0ZURlZmluaXRpb25Ub2tlbiB9IGZyb20gJy4vdG9rZW5zL3JlZHV4LXN0YXRlLWRlZmluaXRpb24udG9rZW4nO1xuaW1wb3J0IHsgUmVkdXhTdGF0ZURlZmluaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcmVkdXgtc3RhdGUtZGVmaW5pdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVkdXhSZWdpc3RyeSB9IGZyb20gJy4vcHJvdmlkZXJzL3JlZHV4LXJlZ2lzdHJ5JztcbmltcG9ydCB7IFJlZHV4Q2hpbGRNb2R1bGVDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVkdXgtY2hpbGQtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVkdXhSb290TW9kdWxlQ29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3JlZHV4LXJvb3QtbW9kdWxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVkdXhTdG9yZSB9IGZyb20gJy4vdG9rZW5zL3JlZHV4LXN0b3JlLnRva2VuJztcbmltcG9ydCB7IFJlZHV4TWlkZGxld2FyZXMgfSBmcm9tICcuL3Rva2Vucy9yZWR1eC1taWRkbGV3YXJlcy50b2tlbic7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFJlZHV4U2VsZWN0UGlwZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFJlZHV4U2VsZWN0UGlwZSxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUmVkdXhNb2R1bGUge1xuXG4gIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgICAgICAgcmVkdWNlclByb3ZpZGVyOiBSZWR1eFJlZHVjZXJQcm92aWRlcixcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChSZWR1eFN0YXRlRGVmaW5pdGlvblRva2VuKSBzdGF0ZURlZnM6IFJlZHV4U3RhdGVEZWZpbml0aW9uW10gPSBbXSkge1xuXG4gICAgaW5qZWN0b3IuZ2V0KFJlZHV4UmVnaXN0cnkpOyAvLyBqdXN0IG1ha2Ugc3VyZSB0aGUgcHJvdmlkZXIgaXMgaW5zdGFudGlhdGVkXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZURlZnMpKSB7XG4gICAgICBzdGF0ZURlZnNcbiAgICAgICAgLmZpbHRlcihkZWYgPT4gZGVmICYmIGRlZi5wcm92aWRlcilcbiAgICAgICAgLm1hcChkZWYgPT4gaW5qZWN0b3IuZ2V0KGRlZi5wcm92aWRlcikpXG4gICAgICAgIC5mb3JFYWNoKHByb3ZpZGVyID0+IHJlZHVjZXJQcm92aWRlci5hZGRTdGF0ZVByb3ZpZGVyKHByb3ZpZGVyKSk7XG4gICAgfVxuXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZvckNoaWxkPFMgPSB7fT4oY29uZmlnOiBSZWR1eENoaWxkTW9kdWxlQ29uZmlnPFM+ID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFJlZHV4TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtwcm92aWRlOiBSZWR1eFN0YXRlRGVmaW5pdGlvblRva2VuLCB1c2VWYWx1ZTogY29uZmlnLnN0YXRlIHx8IG51bGwsIG11bHRpOiB0cnVlfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdDxTID0ge30+KGNvbmZpZzogUmVkdXhSb290TW9kdWxlQ29uZmlnPFM+ID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFJlZHV4TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFJlZHV4UmVkdWNlclByb3ZpZGVyLFxuICAgICAgICBSZWR1eFJlZ2lzdHJ5LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogUmVkdXhTdG9yZSxcbiAgICAgICAgICB1c2VGYWN0b3J5OiBjb25maWcuc3RvcmVGYWN0b3J5IHx8IFJlZHV4TW9kdWxlLmRlZmF1bHRTdG9yZUZhY3RvcnksXG4gICAgICAgICAgZGVwczogW1JlZHV4UmVkdWNlclByb3ZpZGVyLCBSZWR1eE1pZGRsZXdhcmVzXVxuICAgICAgICB9LFxuICAgICAgICB7cHJvdmlkZTogUmVkdXhTdGF0ZURlZmluaXRpb25Ub2tlbiwgdXNlVmFsdWU6IGNvbmZpZy5zdGF0ZSB8fCBudWxsLCBtdWx0aTogdHJ1ZX0sXG4gICAgICAgIHtwcm92aWRlOiBSZWR1eE1pZGRsZXdhcmVzLCB1c2VWYWx1ZTogY29uZmlnLm1pZGRsZXdhcmVGdW5jdGlvbnMgfHwgW10sIG11bHRpOiBmYWxzZX0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGRlZmF1bHRTdG9yZUZhY3RvcnkocmVkdXhSZWR1Y2VyUHJvdmlkZXI6IFJlZHV4UmVkdWNlclByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlkZGxld2FyZUZ1bmN0aW9uczogTWlkZGxld2FyZVtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2TW9kZSA9IGlzRGV2TW9kZSgpKTogU3RvcmU8e30+IHtcblxuICAgIHJldHVybiBjcmVhdGVTdG9yZShcbiAgICAgIHJlZHV4UmVkdWNlclByb3ZpZGVyLnJvb3RSZWR1Y2VyLFxuICAgICAge30sXG4gICAgICBSZWR1eE1vZHVsZS5kZWZhdWx0RW5oYW5jZXJGYWN0b3J5KG1pZGRsZXdhcmVGdW5jdGlvbnMsIGRldk1vZGUpLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGRlZmF1bHRFbmhhbmNlckZhY3RvcnkobWlkZGxld2FyZUZ1bmN0aW9uczogTWlkZGxld2FyZVtdLCBkZXZNb2RlOiBib29sZWFuKTogU3RvcmVFbmhhbmNlcjx7fT4ge1xuXG4gICAgbGV0IGNvbXBvc2VFbmhhbmNlcnMgPSBjb21wb3NlO1xuXG4gICAgaWYgKGRldk1vZGUgJiYgd2luZG93WydfX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18nXSkge1xuICAgICAgY29tcG9zZUVuaGFuY2VycyA9IHdpbmRvd1snX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fJ107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBvc2VFbmhhbmNlcnMoYXBwbHlNaWRkbGV3YXJlKC4uLm1pZGRsZXdhcmVGdW5jdGlvbnMpKTtcbiAgfVxuXG59XG4iXX0=