UNPKG

@angular-redux/store

Version:
115 lines 13.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ 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 */ export class RootStore extends NgRedux { /** * @param {?} ngZone */ constructor(ngZone) { super(); this.ngZone = ngZone; this.store = undefined; this.configureStore = (rootReducer, initState, middleware = [], enhancers = []) => { assert(!this.store, 'Store already configured!'); // Variable-arity compose in typescript FTW. this.setStore(compose(applyMiddleware(...middleware), ...enhancers)(createStore)(enableFractalReducers(rootReducer), initState)); }; this.provideStore = (store) => { assert(!this.store, 'Store already configured!'); this.setStore(store); }; this.getState = () => (/** @type {?} */ (this.store)).getState(); this.subscribe = (listener) => (/** @type {?} */ (this.store)).subscribe(listener); this.replaceReducer = (nextReducer) => { (/** @type {?} */ (this.store)).replaceReducer(nextReducer); }; this.dispatch = (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(() => (/** @type {?} */ (this.store)).dispatch(action)); } else { return (/** @type {?} */ (this.store)).dispatch(action); } }; this.select = (selector, comparator) => this.store$.pipe(distinctUntilChanged(), map(resolveToFunctionSelector(selector)), distinctUntilChanged(comparator)); this.configureSubStore = (basePath, localReducer) => new SubStore(this, basePath, localReducer); this.storeToObservable = (store) => new Observable((observer) => { observer.next(store.getState()); /** @type {?} */ const unsubscribeFromRedux = store.subscribe(() => observer.next(store.getState())); return () => { unsubscribeFromRedux(); observer.complete(); }; }); NgRedux.instance = this; this.store$ = (/** @type {?} */ (new BehaviorSubject(undefined).pipe(filter(n => n !== undefined), switchMap(observableStore => (/** @type {?} */ (observableStore)))))); } /** * @private * @param {?} store * @return {?} */ setStore(store) { this.store = store; /** @type {?} */ const storeServable = this.storeToObservable(store); this.store$.next((/** @type {?} */ (storeServable))); } } 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bhbmd1bGFyLXJlZHV4L3N0b3JlLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9yb290LXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBRUwsZUFBZSxFQUNmLE9BQU8sRUFDUCxXQUFXLEdBUVosTUFBTSxPQUFPLENBQUM7QUFFZixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFZLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXJDLE9BQU8sRUFHTCx5QkFBeUIsR0FFMUIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7QUFHdkMsTUFBTSxPQUFPLFNBQXFCLFNBQVEsT0FBa0I7Ozs7SUFJMUQsWUFBb0IsTUFBYztRQUNoQyxLQUFLLEVBQUUsQ0FBQztRQURVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFIMUIsVUFBSyxHQUFpQyxTQUFTLENBQUM7UUFjeEQsbUJBQWMsR0FBRyxDQUNmLFdBQTBDLEVBQzFDLFNBQW9CLEVBQ3BCLGFBQTJCLEVBQUUsRUFDN0IsWUFBd0MsRUFBRSxFQUNwQyxFQUFFO1lBQ1IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1lBQ2pELDRDQUE0QztZQUM1QyxJQUFJLENBQUMsUUFBUSxDQUNYLE9BQU8s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LG1CQUFBLGVBQWUsRUFBTyxDQUFDLENBRXJELEVBQThCLENBQUM7SUFDbEMsQ0FBQzs7Ozs7O0lBK0RPLFFBQVEsQ0FBQyxLQUF1QjtRQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzs7Y0FDYixhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztRQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBQSxhQUFhLEVBQU8sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Q0FlRjs7Ozs7O0lBOUZDLDBCQUF3RDs7Ozs7SUFDeEQsMkJBQTJDOztJQWEzQyxtQ0FjRTs7SUFFRixpQ0FHRTs7SUFFRiw2QkFBbUQ7O0lBRW5ELDhCQUNrQzs7SUFFbEMsbUNBRUU7O0lBRUYsNkJBYUU7O0lBRUYsMkJBUUk7O0lBRUosc0NBSXVEOzs7OztJQVF2RCxzQ0FZSzs7Ozs7SUExRk8sMkJBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQW55QWN0aW9uLFxuICBhcHBseU1pZGRsZXdhcmUsXG4gIGNvbXBvc2UsXG4gIGNyZWF0ZVN0b3JlLFxuICBEaXNwYXRjaCxcbiAgTWlkZGxld2FyZSxcbiAgUmVkdWNlcixcbiAgU3RvcmUsXG4gIFN0b3JlQ3JlYXRvcixcbiAgU3RvcmVFbmhhbmNlcixcbiAgVW5zdWJzY3JpYmUsXG59IGZyb20gJ3JlZHV4JztcblxuaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIE9ic2VydmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gJy4uL3V0aWxzL2Fzc2VydCc7XG5pbXBvcnQgeyBlbmFibGVGcmFjdGFsUmVkdWNlcnMgfSBmcm9tICcuL2ZyYWN0YWwtcmVkdWNlci1tYXAnO1xuaW1wb3J0IHsgTmdSZWR1eCB9IGZyb20gJy4vbmctcmVkdXgnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVN0b3JlIH0gZnJvbSAnLi9vYnNlcnZhYmxlLXN0b3JlJztcbmltcG9ydCB7XG4gIENvbXBhcmF0b3IsXG4gIFBhdGhTZWxlY3RvcixcbiAgcmVzb2x2ZVRvRnVuY3Rpb25TZWxlY3RvcixcbiAgU2VsZWN0b3IsXG59IGZyb20gJy4vc2VsZWN0b3JzJztcbmltcG9ydCB7IFN1YlN0b3JlIH0gZnJvbSAnLi9zdWItc3RvcmUnO1xuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGNsYXNzIFJvb3RTdG9yZTxSb290U3RhdGU+IGV4dGVuZHMgTmdSZWR1eDxSb290U3RhdGU+IHtcbiAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8Um9vdFN0YXRlPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzdG9yZSQ6IEJlaGF2aW9yU3ViamVjdDxSb290U3RhdGU+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgTmdSZWR1eC5pbnN0YW5jZSA9IHRoaXM7XG4gICAgdGhpcy5zdG9yZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJvb3RTdGF0ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKS5waXBlKFxuICAgICAgZmlsdGVyKG4gPT4gbiAhPT0gdW5kZWZpbmVkKSxcbiAgICAgIHN3aXRjaE1hcChvYnNlcnZhYmxlU3RvcmUgPT4gb2JzZXJ2YWJsZVN0b3JlIGFzIGFueSksXG4gICAgICAvLyBUT0RPOiBmaXggdGhpcz8gbmVlZGluZyB0byBleHBsaWNpdGx5IGNhc3QgdGhpcyBpcyB3cm9uZ1xuICAgICkgYXMgQmVoYXZpb3JTdWJqZWN0PFJvb3RTdGF0ZT47XG4gIH1cblxuICBjb25maWd1cmVTdG9yZSA9IChcbiAgICByb290UmVkdWNlcjogUmVkdWNlcjxSb290U3RhdGUsIEFueUFjdGlvbj4sXG4gICAgaW5pdFN0YXRlOiBSb290U3RhdGUsXG4gICAgbWlkZGxld2FyZTogTWlkZGxld2FyZVtdID0gW10sXG4gICAgZW5oYW5jZXJzOiBTdG9yZUVuaGFuY2VyPFJvb3RTdGF0ZT5bXSA9IFtdLFxuICApOiB2b2lkID0+IHtcbiAgICBhc3NlcnQoIXRoaXMuc3RvcmUsICdTdG9yZSBhbHJlYWR5IGNvbmZpZ3VyZWQhJyk7XG4gICAgLy8gVmFyaWFibGUtYXJpdHkgY29tcG9zZSBpbiB0eXBlc2NyaXB0IEZUVy5cbiAgICB0aGlzLnNldFN0b3JlKFxuICAgICAgY29tcG9zZTxTdG9yZUNyZWF0b3I+KFxuICAgICAgICBhcHBseU1pZGRsZXdhcmUoLi4ubWlkZGxld2FyZSksXG4gICAgICAgIC4uLmVuaGFuY2VycyxcbiAgICAgICkoY3JlYXRlU3RvcmUpKGVuYWJsZUZyYWN0YWxSZWR1Y2Vycyhyb290UmVkdWNlciksIGluaXRTdGF0ZSksXG4gICAgKTtcbiAgfTtcblxuICBwcm92aWRlU3RvcmUgPSAoc3RvcmU6IFN0b3JlPFJvb3RTdGF0ZT4pID0+IHtcbiAgICBhc3NlcnQoIXRoaXMuc3RvcmUsICdTdG9yZSBhbHJlYWR5IGNvbmZpZ3VyZWQhJyk7XG4gICAgdGhpcy5zZXRTdG9yZShzdG9yZSk7XG4gIH07XG5cbiAgZ2V0U3RhdGUgPSAoKTogUm9vdFN0YXRlID0+IHRoaXMuc3RvcmUhLmdldFN0YXRlKCk7XG5cbiAgc3Vic2NyaWJlID0gKGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogVW5zdWJzY3JpYmUgPT5cbiAgICB0aGlzLnN0b3JlIS5zdWJzY3JpYmUobGlzdGVuZXIpO1xuXG4gIHJlcGxhY2VSZWR1Y2VyID0gKG5leHRSZWR1Y2VyOiBSZWR1Y2VyPFJvb3RTdGF0ZSwgQW55QWN0aW9uPik6IHZvaWQgPT4ge1xuICAgIHRoaXMuc3RvcmUhLnJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKTtcbiAgfTtcblxuICBkaXNwYXRjaDogRGlzcGF0Y2g8QW55QWN0aW9uPiA9IDxBIGV4dGVuZHMgQW55QWN0aW9uPihhY3Rpb246IEEpOiBBID0+IHtcbiAgICBhc3NlcnQoXG4gICAgICAhIXRoaXMuc3RvcmUsXG4gICAgICAnRGlzcGF0Y2ggZmFpbGVkOiBkaWQgeW91IGZvcmdldCB0byBjb25maWd1cmUgeW91ciBzdG9yZT8gJyArXG4gICAgICAgICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci1yZWR1eC9wbGF0Zm9ybS9ibG9iL21hc3Rlci9wYWNrYWdlcy9zdG9yZS8nICtcbiAgICAgICAgJ1JFQURNRS5tZCNxdWljay1zdGFydCcsXG4gICAgKTtcblxuICAgIGlmICghTmdab25lLmlzSW5Bbmd1bGFyWm9uZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuc3RvcmUhLmRpc3BhdGNoKGFjdGlvbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZSEuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICB9XG4gIH07XG5cbiAgc2VsZWN0ID0gPFNlbGVjdGVkVHlwZT4oXG4gICAgc2VsZWN0b3I/OiBTZWxlY3RvcjxSb290U3RhdGUsIFNlbGVjdGVkVHlwZT4sXG4gICAgY29tcGFyYXRvcj86IENvbXBhcmF0b3IsXG4gICk6IE9ic2VydmFibGU8U2VsZWN0ZWRUeXBlPiA9PlxuICAgIHRoaXMuc3RvcmUkLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgbWFwKHJlc29sdmVUb0Z1bmN0aW9uU2VsZWN0b3Ioc2VsZWN0b3IpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKGNvbXBhcmF0b3IpLFxuICAgICk7XG5cbiAgY29uZmlndXJlU3ViU3RvcmUgPSA8U3ViU3RhdGU+KFxuICAgIGJhc2VQYXRoOiBQYXRoU2VsZWN0b3IsXG4gICAgbG9jYWxSZWR1Y2VyOiBSZWR1Y2VyPFN1YlN0YXRlLCBBbnlBY3Rpb24+LFxuICApOiBPYnNlcnZhYmxlU3RvcmU8U3ViU3RhdGU+ID0+XG4gICAgbmV3IFN1YlN0b3JlPFN1YlN0YXRlPih0aGlzLCBiYXNlUGF0aCwgbG9jYWxSZWR1Y2VyKTtcblxuICBwcml2YXRlIHNldFN0b3JlKHN0b3JlOiBTdG9yZTxSb290U3RhdGU+KSB7XG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xuICAgIGNvbnN0IHN0b3JlU2VydmFibGUgPSB0aGlzLnN0b3JlVG9PYnNlcnZhYmxlKHN0b3JlKTtcbiAgICB0aGlzLnN0b3JlJC5uZXh0KHN0b3JlU2VydmFibGUgYXMgYW55KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVUb09ic2VydmFibGUgPSAoXG4gICAgc3RvcmU6IFN0b3JlPFJvb3RTdGF0ZT4sXG4gICk6IE9ic2VydmFibGU8Um9vdFN0YXRlPiA9PlxuICAgIG5ldyBPYnNlcnZhYmxlPFJvb3RTdGF0ZT4oKG9ic2VydmVyOiBPYnNlcnZlcjxSb290U3RhdGU+KSA9PiB7XG4gICAgICBvYnNlcnZlci5uZXh0KHN0b3JlLmdldFN0YXRlKCkpO1xuICAgICAgY29uc3QgdW5zdWJzY3JpYmVGcm9tUmVkdXggPSBzdG9yZS5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgb2JzZXJ2ZXIubmV4dChzdG9yZS5nZXRTdGF0ZSgpKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB1bnN1YnNjcmliZUZyb21SZWR1eCgpO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfTtcbiAgICB9KTtcbn1cbiJdfQ==