UNPKG

@angular-redux/store

Version:
142 lines 14.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { applyMiddleware, compose, createStore, } from 'redux'; import { NgZone } from '@angular/core'; import { BehaviorSubject, Observable } from 'rxjs'; import { distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators'; import { assert } from '../utils/assert'; import { enableFractalReducers } from './fractal-reducer-map'; import { NgRedux } from './ng-redux'; import { resolveToFunctionSelector, } from './selectors'; import { SubStore } from './sub-store'; /** * @hidden * @template RootState */ var /** * @hidden * @template RootState */ RootStore = /** @class */ (function (_super) { tslib_1.__extends(RootStore, _super); function RootStore(ngZone) { var _this = _super.call(this) || this; _this.ngZone = ngZone; _this.store = undefined; _this.configureStore = function (rootReducer, initState, middleware, enhancers) { if (middleware === void 0) { middleware = []; } if (enhancers === void 0) { enhancers = []; } assert(!_this.store, 'Store already configured!'); // Variable-arity compose in typescript FTW. _this.setStore(compose.apply(void 0, tslib_1.__spread([applyMiddleware.apply(void 0, tslib_1.__spread(middleware))], enhancers))(createStore)(enableFractalReducers(rootReducer), initState)); }; _this.provideStore = function (store) { assert(!_this.store, 'Store already configured!'); _this.setStore(store); }; _this.getState = function () { return (/** @type {?} */ (_this.store)).getState(); }; _this.subscribe = function (listener) { return (/** @type {?} */ (_this.store)).subscribe(listener); }; _this.replaceReducer = function (nextReducer) { (/** @type {?} */ (_this.store)).replaceReducer(nextReducer); }; _this.dispatch = function (action) { assert(!!_this.store, 'Dispatch failed: did you forget to configure your store? ' + 'https://github.com/angular-redux/platform/blob/master/packages/store/' + 'README.md#quick-start'); if (!NgZone.isInAngularZone()) { return _this.ngZone.run(function () { return (/** @type {?} */ (_this.store)).dispatch(action); }); } else { return (/** @type {?} */ (_this.store)).dispatch(action); } }; _this.select = function (selector, comparator) { return _this.store$.pipe(distinctUntilChanged(), map(resolveToFunctionSelector(selector)), distinctUntilChanged(comparator)); }; _this.configureSubStore = function (basePath, localReducer) { return new SubStore(_this, basePath, localReducer); }; _this.storeToObservable = function (store) { return new Observable(function (observer) { observer.next(store.getState()); /** @type {?} */ var unsubscribeFromRedux = store.subscribe(function () { return observer.next(store.getState()); }); return function () { unsubscribeFromRedux(); observer.complete(); }; }); }; NgRedux.instance = _this; _this.store$ = (/** @type {?} */ (new BehaviorSubject(undefined).pipe(filter(function (n) { return n !== undefined; }), switchMap(function (observableStore) { return (/** @type {?} */ (observableStore)); })))); return _this; } /** * @private * @param {?} store * @return {?} */ RootStore.prototype.setStore = /** * @private * @param {?} store * @return {?} */ function (store) { this.store = store; /** @type {?} */ var storeServable = this.storeToObservable(store); this.store$.next((/** @type {?} */ (storeServable))); }; return RootStore; }(NgRedux)); /** * @hidden * @template RootState */ export { RootStore }; if (false) { /** * @type {?} * @private */ RootStore.prototype.store; /** * @type {?} * @private */ RootStore.prototype.store$; /** @type {?} */ RootStore.prototype.configureStore; /** @type {?} */ RootStore.prototype.provideStore; /** @type {?} */ RootStore.prototype.getState; /** @type {?} */ RootStore.prototype.subscribe; /** @type {?} */ RootStore.prototype.replaceReducer; /** @type {?} */ RootStore.prototype.dispatch; /** @type {?} */ RootStore.prototype.select; /** @type {?} */ RootStore.prototype.configureSubStore; /** * @type {?} * @private */ RootStore.prototype.storeToObservable; /** * @type {?} * @private */ RootStore.prototype.ngZone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bhbmd1bGFyLXJlZHV4L3N0b3JlLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9yb290LXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUVMLGVBQWUsRUFDZixPQUFPLEVBQ1AsV0FBVyxHQVFaLE1BQU0sT0FBTyxDQUFDO0FBRWYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBWSxNQUFNLE1BQU0sQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVyQyxPQUFPLEVBR0wseUJBQXlCLEdBRTFCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7O0FBR3ZDOzs7OztJQUEwQyxxQ0FBa0I7SUFJMUQsbUJBQW9CLE1BQWM7UUFBbEMsWUFDRSxpQkFBTyxTQVFSO1FBVG1CLFlBQU0sR0FBTixNQUFNLENBQVE7UUFIMUIsV0FBSyxHQUFpQyxTQUFTLENBQUM7UUFjeEQsb0JBQWMsR0FBRyxVQUNmLFdBQTBDLEVBQzFDLFNBQW9CLEVBQ3BCLFVBQTZCLEVBQzdCLFNBQTBDO1lBRDFDLDJCQUFBLEVBQUEsZUFBNkI7WUFDN0IsMEJBQUEsRUFBQSxjQUEwQztZQUUxQyxNQUFNLENBQUMsQ0FBQyxLQUFJLENBQUMsS0FBSyxFQUFFLDJCQUEyQixDQUFDLENBQUM7WUFDakQsNENBQTRDO1lBQzVDLEtBQUksQ0FB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LFdBQUksbUJBQUEsZUFBZSxFQUFPLEdBQUEsQ0FBQyxDQUVyRCxFQUE4QixDQUFDOztJQUNsQyxDQUFDOzs7Ozs7SUErRE8sNEJBQVE7Ozs7O0lBQWhCLFVBQWlCLEtBQXVCO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDOztZQUNiLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFBLGFBQWEsRUFBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQWVILGdCQUFDO0FBQUQsQ0FBQyxBQS9GRCxDQUEwQyxPQUFPLEdBK0ZoRDs7Ozs7Ozs7Ozs7SUE5RkMsMEJBQXdEOzs7OztJQUN4RCwyQkFBMkM7O0lBYTNDLG1DQWNFOztJQUVGLGlDQUdFOztJQUVGLDZCQUFtRDs7SUFFbkQsOEJBQ2tDOztJQUVsQyxtQ0FFRTs7SUFFRiw2QkFhRTs7SUFFRiwyQkFRSTs7SUFFSixzQ0FJdUQ7Ozs7O0lBUXZELHNDQVlLOzs7OztJQTFGTywyQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBbnlBY3Rpb24sXG4gIGFwcGx5TWlkZGxld2FyZSxcbiAgY29tcG9zZSxcbiAgY3JlYXRlU3RvcmUsXG4gIERpc3BhdGNoLFxuICBNaWRkbGV3YXJlLFxuICBSZWR1Y2VyLFxuICBTdG9yZSxcbiAgU3RvcmVDcmVhdG9yLFxuICBTdG9yZUVuaGFuY2VyLFxuICBVbnN1YnNjcmliZSxcbn0gZnJvbSAncmVkdXgnO1xuXG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSAnLi4vdXRpbHMvYXNzZXJ0JztcbmltcG9ydCB7IGVuYWJsZUZyYWN0YWxSZWR1Y2VycyB9IGZyb20gJy4vZnJhY3RhbC1yZWR1Y2VyLW1hcCc7XG5pbXBvcnQgeyBOZ1JlZHV4IH0gZnJvbSAnLi9uZy1yZWR1eCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlU3RvcmUgfSBmcm9tICcuL29ic2VydmFibGUtc3RvcmUnO1xuaW1wb3J0IHtcbiAgQ29tcGFyYXRvcixcbiAgUGF0aFNlbGVjdG9yLFxuICByZXNvbHZlVG9GdW5jdGlvblNlbGVjdG9yLFxuICBTZWxlY3Rvcixcbn0gZnJvbSAnLi9zZWxlY3RvcnMnO1xuaW1wb3J0IHsgU3ViU3RvcmUgfSBmcm9tICcuL3N1Yi1zdG9yZSc7XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgY2xhc3MgUm9vdFN0b3JlPFJvb3RTdGF0ZT4gZXh0ZW5kcyBOZ1JlZHV4PFJvb3RTdGF0ZT4ge1xuICBwcml2YXRlIHN0b3JlOiBTdG9yZTxSb290U3RhdGU+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHN0b3JlJDogQmVoYXZpb3JTdWJqZWN0PFJvb3RTdGF0ZT47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBOZ1JlZHV4Lmluc3RhbmNlID0gdGhpcztcbiAgICB0aGlzLnN0b3JlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Um9vdFN0YXRlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpLnBpcGUoXG4gICAgICBmaWx0ZXIobiA9PiBuICE9PSB1bmRlZmluZWQpLFxuICAgICAgc3dpdGNoTWFwKG9ic2VydmFibGVTdG9yZSA9PiBvYnNlcnZhYmxlU3RvcmUgYXMgYW55KSxcbiAgICAgIC8vIFRPRE86IGZpeCB0aGlzPyBuZWVkaW5nIHRvIGV4cGxpY2l0bHkgY2FzdCB0aGlzIGlzIHdyb25nXG4gICAgKSBhcyBCZWhhdmlvclN1YmplY3Q8Um9vdFN0YXRlPjtcbiAgfVxuXG4gIGNvbmZpZ3VyZVN0b3JlID0gKFxuICAgIHJvb3RSZWR1Y2VyOiBSZWR1Y2VyPFJvb3RTdGF0ZSwgQW55QWN0aW9uPixcbiAgICBpbml0U3RhdGU6IFJvb3RTdGF0ZSxcbiAgICBtaWRkbGV3YXJlOiBNaWRkbGV3YXJlW10gPSBbXSxcbiAgICBlbmhhbmNlcnM6IFN0b3JlRW5oYW5jZXI8Um9vdFN0YXRlPltdID0gW10sXG4gICk6IHZvaWQgPT4ge1xuICAgIGFzc2VydCghdGhpcy5zdG9yZSwgJ1N0b3JlIGFscmVhZHkgY29uZmlndXJlZCEnKTtcbiAgICAvLyBWYXJpYWJsZS1hcml0eSBjb21wb3NlIGluIHR5cGVzY3JpcHQgRlRXLlxuICAgIHRoaXMuc2V0U3RvcmUoXG4gICAgICBjb21wb3NlPFN0b3JlQ3JlYXRvcj4oXG4gICAgICAgIGFwcGx5TWlkZGxld2FyZSguLi5taWRkbGV3YXJlKSxcbiAgICAgICAgLi4uZW5oYW5jZXJzLFxuICAgICAgKShjcmVhdGVTdG9yZSkoZW5hYmxlRnJhY3RhbFJlZHVjZXJzKHJvb3RSZWR1Y2VyKSwgaW5pdFN0YXRlKSxcbiAgICApO1xuICB9O1xuXG4gIHByb3ZpZGVTdG9yZSA9IChzdG9yZTogU3RvcmU8Um9vdFN0YXRlPikgPT4ge1xuICAgIGFzc2VydCghdGhpcy5zdG9yZSwgJ1N0b3JlIGFscmVhZHkgY29uZmlndXJlZCEnKTtcbiAgICB0aGlzLnNldFN0b3JlKHN0b3JlKTtcbiAgfTtcblxuICBnZXRTdGF0ZSA9ICgpOiBSb290U3RhdGUgPT4gdGhpcy5zdG9yZSEuZ2V0U3RhdGUoKTtcblxuICBzdWJzY3JpYmUgPSAobGlzdGVuZXI6ICgpID0+IHZvaWQpOiBVbnN1YnNjcmliZSA9PlxuICAgIHRoaXMuc3RvcmUhLnN1YnNjcmliZShsaXN0ZW5lcik7XG5cbiAgcmVwbGFjZVJlZHVjZXIgPSAobmV4dFJlZHVjZXI6IFJlZHVjZXI8Um9vdFN0YXRlLCBBbnlBY3Rpb24+KTogdm9pZCA9PiB7XG4gICAgdGhpcy5zdG9yZSEucmVwbGFjZVJlZHVjZXIobmV4dFJlZHVjZXIpO1xuICB9O1xuXG4gIGRpc3BhdGNoOiBEaXNwYXRjaDxBbnlBY3Rpb24+ID0gPEEgZXh0ZW5kcyBBbnlBY3Rpb24+KGFjdGlvbjogQSk6IEEgPT4ge1xuICAgIGFzc2VydChcbiAgICAgICEhdGhpcy5zdG9yZSxcbiAgICAgICdEaXNwYXRjaCBmYWlsZWQ6IGRpZCB5b3UgZm9yZ2V0IHRvIGNvbmZpZ3VyZSB5b3VyIHN0b3JlPyAnICtcbiAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyLXJlZHV4L3BsYXRmb3JtL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3N0b3JlLycgK1xuICAgICAgICAnUkVBRE1FLm1kI3F1aWNrLXN0YXJ0JyxcbiAgICApO1xuXG4gICAgaWYgKCFOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5zdG9yZSEuZGlzcGF0Y2goYWN0aW9uKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlIS5kaXNwYXRjaChhY3Rpb24pO1xuICAgIH1cbiAgfTtcblxuICBzZWxlY3QgPSA8U2VsZWN0ZWRUeXBlPihcbiAgICBzZWxlY3Rvcj86IFNlbGVjdG9yPFJvb3RTdGF0ZSwgU2VsZWN0ZWRUeXBlPixcbiAgICBjb21wYXJhdG9yPzogQ29tcGFyYXRvcixcbiAgKTogT2JzZXJ2YWJsZTxTZWxlY3RlZFR5cGU+ID0+XG4gICAgdGhpcy5zdG9yZSQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBtYXAocmVzb2x2ZVRvRnVuY3Rpb25TZWxlY3RvcihzZWxlY3RvcikpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoY29tcGFyYXRvciksXG4gICAgKTtcblxuICBjb25maWd1cmVTdWJTdG9yZSA9IDxTdWJTdGF0ZT4oXG4gICAgYmFzZVBhdGg6IFBhdGhTZWxlY3RvcixcbiAgICBsb2NhbFJlZHVjZXI6IFJlZHVjZXI8U3ViU3RhdGUsIEFueUFjdGlvbj4sXG4gICk6IE9ic2VydmFibGVTdG9yZTxTdWJTdGF0ZT4gPT5cbiAgICBuZXcgU3ViU3RvcmU8U3ViU3RhdGU+KHRoaXMsIGJhc2VQYXRoLCBsb2NhbFJlZHVjZXIpO1xuXG4gIHByaXZhdGUgc2V0U3RvcmUoc3RvcmU6IFN0b3JlPFJvb3RTdGF0ZT4pIHtcbiAgICB0aGlzLnN0b3JlID0gc3RvcmU7XG4gICAgY29uc3Qgc3RvcmVTZXJ2YWJsZSA9IHRoaXMuc3RvcmVUb09ic2VydmFibGUoc3RvcmUpO1xuICAgIHRoaXMuc3RvcmUkLm5leHQoc3RvcmVTZXJ2YWJsZSBhcyBhbnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yZVRvT2JzZXJ2YWJsZSA9IChcbiAgICBzdG9yZTogU3RvcmU8Um9vdFN0YXRlPixcbiAgKTogT2JzZXJ2YWJsZTxSb290U3RhdGU+ID0+XG4gICAgbmV3IE9ic2VydmFibGU8Um9vdFN0YXRlPigob2JzZXJ2ZXI6IE9ic2VydmVyPFJvb3RTdGF0ZT4pID0+IHtcbiAgICAgIG9ic2VydmVyLm5leHQoc3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgICBjb25zdCB1bnN1YnNjcmliZUZyb21SZWR1eCA9IHN0b3JlLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICBvYnNlcnZlci5uZXh0KHN0b3JlLmdldFN0YXRlKCkpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHVuc3Vic2NyaWJlRnJvbVJlZHV4KCk7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9O1xuICAgIH0pO1xufVxuIl19