@harmowatch/ngx-redux-core
Version:
[](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
JavaScript
/**
* @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=