@ngxs/store 3.7.6-dev.master-f2e2560 → 3.7.6-dev.master-daef739

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/bundles/ngxs-store.umd.js +148 -97
  2. package/bundles/ngxs-store.umd.js.map +1 -1
  3. package/esm2015/src/actions-stream.js +3 -37
  4. package/esm2015/src/decorators/selector/selector.js +2 -5
  5. package/esm2015/src/decorators/selector-options.js +2 -2
  6. package/esm2015/src/internal/custom-rxjs-subjects.js +81 -0
  7. package/esm2015/src/internal/state-stream.js +3 -3
  8. package/esm2015/src/public_api.js +2 -3
  9. package/esm2015/src/selectors/create-model-selector.js +2 -2
  10. package/esm2015/src/selectors/create-pick-selector.js +2 -2
  11. package/esm2015/src/selectors/create-property-selectors.js +2 -2
  12. package/esm2015/src/selectors/create-selector.js +9 -0
  13. package/esm2015/src/selectors/index.js +2 -1
  14. package/esm2015/src/selectors/selector-metadata.js +30 -0
  15. package/esm2015/src/selectors/selector-models.js +2 -0
  16. package/esm2015/src/selectors/selector-utils.js +74 -0
  17. package/esm2015/src/store.js +5 -5
  18. package/fesm2015/ngxs-store.js +118 -74
  19. package/fesm2015/ngxs-store.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/actions-stream.d.ts +2 -21
  22. package/src/decorators/selector/selector.d.ts +7 -2
  23. package/src/internal/custom-rxjs-subjects.d.ts +37 -0
  24. package/src/internal/state-stream.d.ts +2 -2
  25. package/src/public_api.d.ts +1 -2
  26. package/src/selectors/create-selector.d.ts +19 -0
  27. package/src/selectors/index.d.ts +1 -0
  28. package/src/selectors/selector-metadata.d.ts +7 -0
  29. package/src/selectors/selector-models.d.ts +10 -0
  30. package/src/selectors/selector-utils.d.ts +9 -0
  31. package/esm2015/src/utils/selector-utils.js +0 -108
  32. package/src/utils/selector-utils.d.ts +0 -23
@@ -1,11 +1,11 @@
1
1
  // tslint:disable:unified-signatures
2
2
  import { Inject, Injectable, Optional } from '@angular/core';
3
- import { of, throwError, queueScheduler } from 'rxjs';
4
- import { catchError, distinctUntilChanged, map, shareReplay, take, observeOn } from 'rxjs/operators';
3
+ import { of, throwError } from 'rxjs';
4
+ import { catchError, distinctUntilChanged, map, shareReplay, take } from 'rxjs/operators';
5
5
  import { INITIAL_STATE_TOKEN } from '@ngxs/store/internals';
6
6
  import { InternalNgxsExecutionStrategy } from './execution/internal-ngxs-execution-strategy';
7
7
  import { InternalStateOperations } from './internal/state-operations';
8
- import { getRootSelectorFactory } from './utils/selector-utils';
8
+ import { getRootSelectorFactory } from './selectors/selector-utils';
9
9
  import { StateStream } from './internal/state-stream';
10
10
  import { leaveNgxs } from './operators/leave-ngxs';
11
11
  import { NgxsConfig } from './symbols';
@@ -28,7 +28,7 @@ export class Store {
28
28
  * because state is being changed actually within the `<root>` zone, see `InternalDispatcher#dispatchSingle`.
29
29
  * All selects would use this stream, and it would call leave only once for any state change across all active selectors.
30
30
  */
31
- this._selectableStateStream = this._stateStream.pipe(observeOn(queueScheduler), leaveNgxs(this._internalExecutionStrategy), shareReplay({ bufferSize: 1, refCount: true }));
31
+ this._selectableStateStream = this._stateStream.pipe(leaveNgxs(this._internalExecutionStrategy), shareReplay({ bufferSize: 1, refCount: true }));
32
32
  this.initStateStream(initialStateValue);
33
33
  }
34
34
  /**
@@ -103,4 +103,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
103
103
  type: Inject,
104
104
  args: [INITIAL_STATE_TOKEN]
105
105
  }] }]; } });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQWMsRUFBRSxFQUFnQixVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFDTCxVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxXQUFXLEVBQ1gsSUFBSSxFQUNKLFNBQVMsRUFDVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxtQkFBbUIsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXpFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7QUFHeEQsTUFBTSxPQUFPLEtBQUs7SUFZaEIsWUFDVSxZQUF5QixFQUN6Qix3QkFBaUQsRUFDakQsT0FBbUIsRUFDbkIsMEJBQXlELEVBQ3pELGFBQTJCLEVBR25DLGlCQUFzQjtRQVBkLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDakQsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNu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R0FBWSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDeEUsSUFBSSxZQUFZLEVBQUU7WUFDaEIsTUFBTSxvQkFBb0IsR0FBWSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUN6RixNQUFNLFdBQVcsR0FBZ0Isb0JBQW9CO2dCQUNuRCxDQUFDLGlDQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFLLGlCQUFpQixFQUN2RCxDQUFDLENBQUMsaUJBQWlCLENBQUM7WUFFdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDOztzSEF6SFUsS0FBSyx1TEFtQk4sbUJBQW1COzBIQW5CbEIsS0FBSzs0RkFBTCxLQUFLO2tCQURqQixVQUFVOzswQkFtQk4sUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTp1bmlmaWVkLXNpZ25hdHVyZXNcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IsIHF1ZXVlU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBjYXRjaEVycm9yLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgdGFrZSxcbiAgb2JzZXJ2ZU9uXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElOSVRJQUxfU1RBVEVfVE9LRU4sIFBsYWluT2JqZWN0IH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcblxuaW1wb3J0IHsgSW50ZXJuYWxOZ3hzRXhlY3V0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL2V4ZWN1dGlvbi9pbnRlcm5hbC1uZ3hzLWV4ZWN1dGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBJbnRlcm5hbFN0YXRlT3BlcmF0aW9ucyB9IGZyb20gJy4vaW50ZXJuYWwvc3RhdGUtb3BlcmF0aW9ucyc7XG5pbXBvcnQgeyBnZXRSb290U2VsZWN0b3JGYWN0b3J5IH0gZnJvbSAnLi91dGlscy9zZWxlY3Rvci11dGlscyc7XG5pbXBvcnQgeyBTdGF0ZVN0cmVhbSB9IGZyb20gJy4vaW50ZXJuYWwvc3RhdGUtc3RyZWFtJztcbmltcG9ydCB7IGxlYXZlTmd4cyB9IGZyb20gJy4vb3BlcmF0b3JzL2xlYXZlLW5neHMnO1xuaW1wb3J0IHsgTmd4c0NvbmZpZyB9IGZyb20gJy4vc3ltYm9scyc7XG5pbXBvcnQgeyBTdGF0ZVRva2VuIH0gZnJvbSAnLi9zdGF0ZS10b2tlbi9zdGF0ZS10b2tlbic7XG5pbXBvcnQgeyBTdGF0ZUZhY3RvcnkgfSBmcm9tICcuL2ludGVybmFsL3N0YXRlLWZhY3RvcnknO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU3RvcmUge1xuICAvKipcbiAgICogVGhpcyBpcyBhIGRlcml2ZWQgc3RhdGUgc3RyZWFtIHRoYXQgbGVhdmVzIE5HWFMgZXhlY3V0aW9uIHN0cmF0ZWd5IHRvIGVtaXQgc3RhdGUgY2hhbmdlcyB3aXRoaW4gdGhlIEFuZ3VsYXIgem9uZSxcbiAgICogYmVjYXVzZSBzdGF0ZSBpcyBiZWluZyBjaGFuZ2VkIGFjdHVhbGx5IHdpdGhpbiB0aGUgYDxyb290PmAgem9uZSwgc2VlIGBJbnRlcm5hbERpc3BhdGNoZXIjZGlzcGF0Y2hTaW5nbGVgLlxuICAgKiBBbGwgc2VsZWN0cyB3b3VsZCB1c2UgdGhpcyBzdHJlYW0sIGFuZCBpdCB3b3VsZCBjYWxsIGxlYXZlIG9ubHkgb25jZSBmb3IgYW55IHN0YXRlIGNoYW5nZSBhY3Jvc3MgYWxsIGFjdGl2ZSBzZWxlY3RvcnMuXG4gICAqL1xuICBwcml2YXRlIF9zZWxlY3RhYmxlU3RhdGVTdHJlYW0gPSB0aGlzLl9zdGF0ZVN0cmVhbS5waXBlKFxuICAgIG9ic2VydmVPbihxdWV1ZVNjaGVkdWxlciksXG4gICAgbGVhdmVOZ3hzKHRoaXMuX2ludGVybmFsRXhlY3V0aW9uU3RyYXRlZ3kpLFxuICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdGF0ZVN0cmVhbTogU3RhdGVTdHJlYW0sXG4gICAgcHJpdmF0ZSBfaW50ZXJuYWxTdGF0ZU9wZXJhdGlvbnM6IEludGVybmFsU3RhdGVPcGVyYXRpb25zLFxuICAgIHByaXZhdGUgX2NvbmZpZzogTmd4c0NvbmZpZyxcbiAgICBwcml2YXRlIF9pbnRlcm5hbEV4ZWN1dGlvblN0cmF0ZWd5OiBJbnRlcm5hbE5neHNFeGVjdXRpb25TdHJhdGVneSxcbiAgICBwcml2YXRlIF9zdGF0ZUZhY3Rvcnk6IFN0YXRlRmFjdG9yeSxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoSU5JVElBTF9TVEFURV9UT0tFTilcbiAgICBpbml0aWFsU3RhdGVWYWx1ZTogYW55XG4gICkge1xuICAgIHRoaXMuaW5pdFN0YXRlU3RyZWFtKGluaXRpYWxTdGF0ZVZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGV2ZW50KHMpLlxuICAgKi9cbiAgZGlzcGF0Y2goYWN0aW9uT3JBY3Rpb25zOiBhbnkgfCBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmFsU3RhdGVPcGVyYXRpb25zLmdldFJvb3RTdGF0ZU9wZXJhdGlvbnMoKS5kaXNwYXRjaChhY3Rpb25PckFjdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYSBzbGljZSBvZiBkYXRhIGZyb20gdGhlIHN0b3JlLlxuICAgKi9cbiAgc2VsZWN0PFQ+KHNlbGVjdG9yOiAoc3RhdGU6IGFueSwgLi4uc3RhdGVzOiBhbnlbXSkgPT4gVCk6IE9ic2VydmFibGU8VD47XG4gIHNlbGVjdDxUID0gYW55PihzZWxlY3Rvcjogc3RyaW5nIHwgVHlwZTxhbnk+KTogT2JzZXJ2YWJsZTxUPjtcbiAgc2VsZWN0PFQ+KHNlbGVjdG9yOiBTdGF0ZVRva2VuPFQ+KTogT2JzZXJ2YWJsZTxUPjtcbiAgc2VsZWN0KHNlbGVjdG9yOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHNlbGVjdG9yRm4gPSB0aGlzLmdldFN0b3JlQm91bmRTZWxlY3RvckZuKHNlbGVjdG9yKTtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZVN0YXRlU3RyZWFtLnBpcGUoXG4gICAgICBtYXAoc2VsZWN0b3JGbiksXG4gICAgICBjYXRjaEVycm9yKChlcnI6IEVycm9yKTogT2JzZXJ2YWJsZTxuZXZlcj4gfCBPYnNlcnZhYmxlPHVuZGVmaW5lZD4gPT4ge1xuICAgICAgICAvLyBpZiBlcnJvciBpcyBUeXBlRXJyb3Igd2Ugc3dhbGxvdyBpdCB0byBwcmV2ZW50IHVzdWFsIGVycm9ycyB3aXRoIHByb3BlcnR5IGFjY2Vzc1xuICAgICAgICBjb25zdCB7IHN1cHByZXNzRXJyb3JzIH0gPSB0aGlzLl9jb25maWcuc2VsZWN0b3JPcHRpb25zO1xuXG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgc3VwcHJlc3NFcnJvcnMpIHtcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldGhyb3cgb3RoZXIgZXJyb3JzXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycik7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBsZWF2ZU5neHModGhpcy5faW50ZXJuYWxFeGVjdXRpb25TdHJhdGVneSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBvbmUgc2xpY2Ugb2YgZGF0YSBmcm9tIHRoZSBzdG9yZS5cbiAgICovXG5cbiAgc2VsZWN0T25jZTxUPihzZWxlY3RvcjogKHN0YXRlOiBhbnksIC4uLnN0YXRlczogYW55W10pID0+IFQpOiBPYnNlcnZhYmxlPFQ+O1xuICBzZWxlY3RPbmNlPFQgPSBhbnk+KHNlbGVjdG9yOiBzdHJpbmcgfCBUeXBlPGFueT4pOiBPYnNlcnZhYmxlPFQ+O1xuICBzZWxlY3RPbmNlPFQ+KHNlbGVjdG9yOiBTdGF0ZVRva2VuPFQ+KTogT2JzZXJ2YWJsZTxUPjtcbiAgc2VsZWN0T25jZShzZWxlY3RvcjogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Qoc2VsZWN0b3IpLnBpcGUodGFrZSgxKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGEgc25hcHNob3QgZnJvbSB0aGUgc3RhdGUuXG4gICAqL1xuICBzZWxlY3RTbmFwc2hvdDxUPihzZWxlY3RvcjogKHN0YXRlOiBhbnksIC4uLnN0YXRlczogYW55W10pID0+IFQpOiBUO1xuICBzZWxlY3RTbmFwc2hvdDxUID0gYW55PihzZWxlY3Rvcjogc3RyaW5nIHwgVHlwZTxhbnk+KTogVDtcbiAgc2VsZWN0U25hcHNob3Q8VD4oc2VsZWN0b3I6IFN0YXRlVG9rZW48VD4pOiBUO1xuICBzZWxlY3RTbmFwc2hvdChzZWxlY3RvcjogYW55KTogYW55IHtcbiAgICBjb25zdCBzZWxlY3RvckZuID0gdGhpcy5nZXRTdG9yZUJvdW5kU2VsZWN0b3JGbihzZWxlY3Rvcik7XG4gICAgcmV0dXJuIHNlbGVjdG9yRm4odGhpcy5fc3RhdGVTdHJlYW0uZ2V0VmFsdWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdGhlIHVzZXIgdG8gc3Vic2NyaWJlIHRvIHRoZSByb290IG9mIHRoZSBzdGF0ZVxuICAgKi9cbiAgc3Vic2NyaWJlKGZuPzogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlU3RhdGVTdHJlYW1cbiAgICAgIC5waXBlKGxlYXZlTmd4cyh0aGlzLl9pbnRlcm5hbEV4ZWN1dGlvblN0cmF0ZWd5KSlcbiAgICAgIC5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcmF3IHZhbHVlIG9mIHRoZSBzdGF0ZS5cbiAgICovXG4gIHNuYXBzaG90KCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmFsU3RhdGVPcGVyYXRpb25zLmdldFJvb3RTdGF0ZU9wZXJhdGlvbnMoKS5nZXRTdGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBzdGF0ZSB0byBhIHNwZWNpZmljIHBvaW50IGluIHRpbWUuIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bFxuICAgKiBmb3IgcGx1Z2luJ3Mgd2hvIG5lZWQgdG8gbW9kaWZ5IHRoZSBzdGF0ZSBkaXJlY3RseSBvciB1bml0IHRlc3RpbmcuXG4gICAqL1xuICByZXNldChzdGF0ZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmFsU3RhdGVPcGVyYXRpb25zLmdldFJvb3RTdGF0ZU9wZXJhdGlvbnMoKS5zZXRTdGF0ZShzdGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFN0b3JlQm91bmRTZWxlY3RvckZuKHNlbGVjdG9yOiBhbnkpIHtcbiAgICBjb25zdCBtYWtlU2VsZWN0b3JGbiA9IGdldFJvb3RTZWxlY3RvckZhY3Rvcnkoc2VsZWN0b3IpO1xuICAgIGNvbnN0IHJ1bnRpbWVDb250ZXh0ID0gdGhpcy5fc3RhdGVGYWN0b3J5LmdldFJ1bnRpbWVTZWxlY3RvckNvbnRleHQoKTtcbiAgICByZXR1cm4gbWFrZVNlbGVjdG9yRm4ocnVudGltZUNvbnRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0U3RhdGVTdHJlYW0oaW5pdGlhbFN0YXRlVmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlOiBQbGFpbk9iamVjdCA9IHRoaXMuX3N0YXRlU3RyZWFtLnZhbHVlO1xuICAgIGNvbnN0IHN0b3JlSXNFbXB0eTogYm9vbGVhbiA9ICF2YWx1ZSB8fCBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgIGlmIChzdG9yZUlzRW1wdHkpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTdGF0ZU5vdEVtcHR5OiBib29sZWFuID0gT2JqZWN0LmtleXModGhpcy5fY29uZmlnLmRlZmF1bHRzU3RhdGUpLmxlbmd0aCA+IDA7XG4gICAgICBjb25zdCBzdG9yZVZhbHVlczogUGxhaW5PYmplY3QgPSBkZWZhdWx0U3RhdGVOb3RFbXB0eVxuICAgICAgICA/IHsgLi4udGhpcy5fY29uZmlnLmRlZmF1bHRzU3RhdGUsIC4uLmluaXRpYWxTdGF0ZVZhbHVlIH1cbiAgICAgICAgOiBpbml0aWFsU3RhdGVWYWx1ZTtcblxuICAgICAgdGhpcy5fc3RhdGVTdHJlYW0ubmV4dChzdG9yZVZhbHVlcyk7XG4gICAgfVxuICB9XG59XG4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DO0FBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQWMsRUFBRSxFQUFnQixVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBZSxNQUFNLHVCQUF1QixDQUFDO0FBRXpFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzdGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7QUFHeEQsTUFBTSxPQUFPLEtBQUs7SUFXaEIsWUFDVSxZQUF5QixFQUN6Qix3QkFBaUQsRUFDakQsT0FBbUIsRUFDbkIsMEJBQXlELEVBQ3pELGFBQTJCLEVBR25DLGlCQUFzQjtRQVBkLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDakQsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQiwrQkFBMEIsR0FBMUIsMEJBQTBC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QyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDeEUsSUFBSSxZQUFZLEVBQUU7WUFDaEIsTUFBTSxvQkFBb0IsR0FBWSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUN6RixNQUFNLFdBQVcsR0FBZ0Isb0JBQW9CO2dCQUNuRCxDQUFDLGlDQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFLLGlCQUFpQixFQUN2RCxDQUFDLENBQUMsaUJBQWlCLENBQUM7WUFFdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDOztzSEF4SFUsS0FBSyx1TEFrQk4sbUJBQW1COzBIQWxCbEIsS0FBSzs0RkFBTCxLQUFLO2tCQURqQixVQUFVOzswQkFrQk4sUUFBUTs7MEJBQ1IsTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTp1bmlmaWVkLXNpZ25hdHVyZXNcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSU5JVElBTF9TVEFURV9UT0tFTiwgUGxhaW5PYmplY3QgfSBmcm9tICdAbmd4cy9zdG9yZS9pbnRlcm5hbHMnO1xuXG5pbXBvcnQgeyBJbnRlcm5hbE5neHNFeGVjdXRpb25TdHJhdGVneSB9IGZyb20gJy4vZXhlY3V0aW9uL2ludGVybmFsLW5neHMtZXhlY3V0aW9uLXN0cmF0ZWd5JztcbmltcG9ydCB7IEludGVybmFsU3RhdGVPcGVyYXRpb25zIH0gZnJvbSAnLi9pbnRlcm5hbC9zdGF0ZS1vcGVyYXRpb25zJztcbmltcG9ydCB7IGdldFJvb3RTZWxlY3RvckZhY3RvcnkgfSBmcm9tICcuL3NlbGVjdG9ycy9zZWxlY3Rvci11dGlscyc7XG5pbXBvcnQgeyBTdGF0ZVN0cmVhbSB9IGZyb20gJy4vaW50ZXJuYWwvc3RhdGUtc3RyZWFtJztcbmltcG9ydCB7IGxlYXZlTmd4cyB9IGZyb20gJy4vb3BlcmF0b3JzL2xlYXZlLW5neHMnO1xuaW1wb3J0IHsgTmd4c0NvbmZpZyB9IGZyb20gJy4vc3ltYm9scyc7XG5pbXBvcnQgeyBTdGF0ZVRva2VuIH0gZnJvbSAnLi9zdGF0ZS10b2tlbi9zdGF0ZS10b2tlbic7XG5pbXBvcnQgeyBTdGF0ZUZhY3RvcnkgfSBmcm9tICcuL2ludGVybmFsL3N0YXRlLWZhY3RvcnknO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU3RvcmUge1xuICAvKipcbiAgICogVGhpcyBpcyBhIGRlcml2ZWQgc3RhdGUgc3RyZWFtIHRoYXQgbGVhdmVzIE5HWFMgZXhlY3V0aW9uIHN0cmF0ZWd5IHRvIGVtaXQgc3RhdGUgY2hhbmdlcyB3aXRoaW4gdGhlIEFuZ3VsYXIgem9uZSxcbiAgICogYmVjYXVzZSBzdGF0ZSBpcyBiZWluZyBjaGFuZ2VkIGFjdHVhbGx5IHdpdGhpbiB0aGUgYDxyb290PmAgem9uZSwgc2VlIGBJbnRlcm5hbERpc3BhdGNoZXIjZGlzcGF0Y2hTaW5nbGVgLlxuICAgKiBBbGwgc2VsZWN0cyB3b3VsZCB1c2UgdGhpcyBzdHJlYW0sIGFuZCBpdCB3b3VsZCBjYWxsIGxlYXZlIG9ubHkgb25jZSBmb3IgYW55IHN0YXRlIGNoYW5nZSBhY3Jvc3MgYWxsIGFjdGl2ZSBzZWxlY3RvcnMuXG4gICAqL1xuICBwcml2YXRlIF9zZWxlY3RhYmxlU3RhdGVTdHJlYW0gPSB0aGlzLl9zdGF0ZVN0cmVhbS5waXBlKFxuICAgIGxlYXZlTmd4cyh0aGlzLl9pbnRlcm5hbEV4ZWN1dGlvblN0cmF0ZWd5KSxcbiAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfc3RhdGVTdHJlYW06IFN0YXRlU3RyZWFtLFxuICAgIHByaXZhdGUgX2ludGVybmFsU3RhdGVPcGVyYXRpb25zOiBJbnRlcm5hbFN0YXRlT3BlcmF0aW9ucyxcbiAgICBwcml2YXRlIF9jb25maWc6IE5neHNDb25maWcsXG4gICAgcHJpdmF0ZSBfaW50ZXJuYWxFeGVjdXRpb25TdHJhdGVneTogSW50ZXJuYWxOZ3hzRXhlY3V0aW9uU3RyYXRlZ3ksXG4gICAgcHJpdmF0ZSBfc3RhdGVGYWN0b3J5OiBTdGF0ZUZhY3RvcnksXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KElOSVRJQUxfU1RBVEVfVE9LRU4pXG4gICAgaW5pdGlhbFN0YXRlVmFsdWU6IGFueVxuICApIHtcbiAgICB0aGlzLmluaXRTdGF0ZVN0cmVhbShpbml0aWFsU3RhdGVWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2hlcyBldmVudChzKS5cbiAgICovXG4gIGRpc3BhdGNoKGFjdGlvbk9yQWN0aW9uczogYW55IHwgYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFN0YXRlT3BlcmF0aW9ucy5nZXRSb290U3RhdGVPcGVyYXRpb25zKCkuZGlzcGF0Y2goYWN0aW9uT3JBY3Rpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgc2xpY2Ugb2YgZGF0YSBmcm9tIHRoZSBzdG9yZS5cbiAgICovXG4gIHNlbGVjdDxUPihzZWxlY3RvcjogKHN0YXRlOiBhbnksIC4uLnN0YXRlczogYW55W10pID0+IFQpOiBPYnNlcnZhYmxlPFQ+O1xuICBzZWxlY3Q8VCA9IGFueT4oc2VsZWN0b3I6IHN0cmluZyB8IFR5cGU8YW55Pik6IE9ic2VydmFibGU8VD47XG4gIHNlbGVjdDxUPihzZWxlY3RvcjogU3RhdGVUb2tlbjxUPik6IE9ic2VydmFibGU8VD47XG4gIHNlbGVjdChzZWxlY3RvcjogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBzZWxlY3RvckZuID0gdGhpcy5nZXRTdG9yZUJvdW5kU2VsZWN0b3JGbihzZWxlY3Rvcik7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGVTdGF0ZVN0cmVhbS5waXBlKFxuICAgICAgbWFwKHNlbGVjdG9yRm4pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBFcnJvcik6IE9ic2VydmFibGU8bmV2ZXI+IHwgT2JzZXJ2YWJsZTx1bmRlZmluZWQ+ID0+IHtcbiAgICAgICAgLy8gaWYgZXJyb3IgaXMgVHlwZUVycm9yIHdlIHN3YWxsb3cgaXQgdG8gcHJldmVudCB1c3VhbCBlcnJvcnMgd2l0aCBwcm9wZXJ0eSBhY2Nlc3NcbiAgICAgICAgY29uc3QgeyBzdXBwcmVzc0Vycm9ycyB9ID0gdGhpcy5fY29uZmlnLnNlbGVjdG9yT3B0aW9ucztcblxuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yICYmIHN1cHByZXNzRXJyb3JzKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXRocm93IG90aGVyIGVycm9yc1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgbGVhdmVOZ3hzKHRoaXMuX2ludGVybmFsRXhlY3V0aW9uU3RyYXRlZ3kpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3Qgb25lIHNsaWNlIG9mIGRhdGEgZnJvbSB0aGUgc3RvcmUuXG4gICAqL1xuXG4gIHNlbGVjdE9uY2U8VD4oc2VsZWN0b3I6IChzdGF0ZTogYW55LCAuLi5zdGF0ZXM6IGFueVtdKSA9PiBUKTogT2JzZXJ2YWJsZTxUPjtcbiAgc2VsZWN0T25jZTxUID0gYW55PihzZWxlY3Rvcjogc3RyaW5nIHwgVHlwZTxhbnk+KTogT2JzZXJ2YWJsZTxUPjtcbiAgc2VsZWN0T25jZTxUPihzZWxlY3RvcjogU3RhdGVUb2tlbjxUPik6IE9ic2VydmFibGU8VD47XG4gIHNlbGVjdE9uY2Uoc2VsZWN0b3I6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHNlbGVjdG9yKS5waXBlKHRha2UoMSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIHNuYXBzaG90IGZyb20gdGhlIHN0YXRlLlxuICAgKi9cbiAgc2VsZWN0U25hcHNob3Q8VD4oc2VsZWN0b3I6IChzdGF0ZTogYW55LCAuLi5zdGF0ZXM6IGFueVtdKSA9PiBUKTogVDtcbiAgc2VsZWN0U25hcHNob3Q8VCA9IGFueT4oc2VsZWN0b3I6IHN0cmluZyB8IFR5cGU8YW55Pik6IFQ7XG4gIHNlbGVjdFNuYXBzaG90PFQ+KHNlbGVjdG9yOiBTdGF0ZVRva2VuPFQ+KTogVDtcbiAgc2VsZWN0U25hcHNob3Qoc2VsZWN0b3I6IGFueSk6IGFueSB7XG4gICAgY29uc3Qgc2VsZWN0b3JGbiA9IHRoaXMuZ2V0U3RvcmVCb3VuZFNlbGVjdG9yRm4oc2VsZWN0b3IpO1xuICAgIHJldHVybiBzZWxlY3RvckZuKHRoaXMuX3N0YXRlU3RyZWFtLmdldFZhbHVlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRoZSB1c2VyIHRvIHN1YnNjcmliZSB0byB0aGUgcm9vdCBvZiB0aGUgc3RhdGVcbiAgICovXG4gIHN1YnNjcmliZShmbj86ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0YWJsZVN0YXRlU3RyZWFtXG4gICAgICAucGlwZShsZWF2ZU5neHModGhpcy5faW50ZXJuYWxFeGVjdXRpb25TdHJhdGVneSkpXG4gICAgICAuc3Vic2NyaWJlKGZuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHJhdyB2YWx1ZSBvZiB0aGUgc3RhdGUuXG4gICAqL1xuICBzbmFwc2hvdCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFN0YXRlT3BlcmF0aW9ucy5nZXRSb290U3RhdGVPcGVyYXRpb25zKCkuZ2V0U3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgc3RhdGUgdG8gYSBzcGVjaWZpYyBwb2ludCBpbiB0aW1lLiBUaGlzIG1ldGhvZCBpcyB1c2VmdWxcbiAgICogZm9yIHBsdWdpbidzIHdobyBuZWVkIHRvIG1vZGlmeSB0aGUgc3RhdGUgZGlyZWN0bHkgb3IgdW5pdCB0ZXN0aW5nLlxuICAgKi9cbiAgcmVzZXQoc3RhdGU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbFN0YXRlT3BlcmF0aW9ucy5nZXRSb290U3RhdGVPcGVyYXRpb25zKCkuc2V0U3RhdGUoc3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdG9yZUJvdW5kU2VsZWN0b3JGbihzZWxlY3RvcjogYW55KSB7XG4gICAgY29uc3QgbWFrZVNlbGVjdG9yRm4gPSBnZXRSb290U2VsZWN0b3JGYWN0b3J5KHNlbGVjdG9yKTtcbiAgICBjb25zdCBydW50aW1lQ29udGV4dCA9IHRoaXMuX3N0YXRlRmFjdG9yeS5nZXRSdW50aW1lU2VsZWN0b3JDb250ZXh0KCk7XG4gICAgcmV0dXJuIG1ha2VTZWxlY3RvckZuKHJ1bnRpbWVDb250ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN0YXRlU3RyZWFtKGluaXRpYWxTdGF0ZVZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZTogUGxhaW5PYmplY3QgPSB0aGlzLl9zdGF0ZVN0cmVhbS52YWx1ZTtcbiAgICBjb25zdCBzdG9yZUlzRW1wdHk6IGJvb2xlYW4gPSAhdmFsdWUgfHwgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoc3RvcmVJc0VtcHR5KSB7XG4gICAgICBjb25zdCBkZWZhdWx0U3RhdGVOb3RFbXB0eTogYm9vbGVhbiA9IE9iamVjdC5rZXlzKHRoaXMuX2NvbmZpZy5kZWZhdWx0c1N0YXRlKS5sZW5ndGggPiAwO1xuICAgICAgY29uc3Qgc3RvcmVWYWx1ZXM6IFBsYWluT2JqZWN0ID0gZGVmYXVsdFN0YXRlTm90RW1wdHlcbiAgICAgICAgPyB7IC4uLnRoaXMuX2NvbmZpZy5kZWZhdWx0c1N0YXRlLCAuLi5pbml0aWFsU3RhdGVWYWx1ZSB9XG4gICAgICAgIDogaW5pdGlhbFN0YXRlVmFsdWU7XG5cbiAgICAgIHRoaXMuX3N0YXRlU3RyZWFtLm5leHQoc3RvcmVWYWx1ZXMpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -3,8 +3,8 @@ import { NgZone, PLATFORM_ID, Injectable, Inject, InjectionToken, inject, INJECT
3
3
  import * as i5 from '@ngxs/store/internals';
4
4
  import { memoize, INITIAL_STATE_TOKEN, NgxsBootstrapper, ɵNGXS_STATE_CONTEXT_FACTORY, ɵNGXS_STATE_FACTORY, InitialState } from '@ngxs/store/internals';
5
5
  import { isPlatformServer } from '@angular/common';
6
- import { Observable, Subject, BehaviorSubject, of, forkJoin, throwError, EMPTY, from, isObservable, queueScheduler } from 'rxjs';
7
- import { filter, map, share, shareReplay, take, exhaustMap, mergeMap, defaultIfEmpty, catchError, takeUntil, observeOn, distinctUntilChanged, tap, startWith, pairwise } from 'rxjs/operators';
6
+ import { Observable, Subject, BehaviorSubject, of, forkJoin, throwError, EMPTY, from, isObservable } from 'rxjs';
7
+ import { filter, map, share, shareReplay, take, exhaustMap, mergeMap, defaultIfEmpty, catchError, takeUntil, distinctUntilChanged, tap, startWith, pairwise } from 'rxjs/operators';
8
8
 
9
9
  function throwStateNameError(name) {
10
10
  throw new Error(`${name} is not a valid state name. It needs to be a valid object property name.`);
@@ -659,6 +659,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
659
659
  args: [NGXS_EXECUTION_STRATEGY]
660
660
  }] }]; } });
661
661
 
662
+ /**
663
+ * This wraps the provided function, and will enforce the following:
664
+ * - The calls will execute in the order that they are made
665
+ * - A call will only be initiated when the previous call has completed
666
+ * - If there is a call currently executing then the new call will be added
667
+ * to the queue and the function will return immediately
668
+ *
669
+ * NOTE: The following assumptions about the operation must hold true:
670
+ * - The operation is synchronous in nature
671
+ * - If any asynchronous side effects of the call exist, it should not
672
+ * have any bearing on the correctness of the next call in the queue
673
+ * - The operation has a void return
674
+ * - The caller should not assume that the call has completed upon
675
+ * return of the function
676
+ * - The caller can assume that all the queued calls will complete
677
+ * within the current microtask
678
+ * - The only way that a call will encounter another call in the queue
679
+ * would be if the call at the front of the queue initiated this call
680
+ * as part of its synchronous execution
681
+ */
682
+ function orderedQueueOperation(operation) {
683
+ const callsQueue = [];
684
+ let busyPushingNext = false;
685
+ return function callOperation(...args) {
686
+ if (busyPushingNext) {
687
+ callsQueue.unshift(args);
688
+ return;
689
+ }
690
+ busyPushingNext = true;
691
+ operation(...args);
692
+ while (callsQueue.length > 0) {
693
+ const nextCallArgs = callsQueue.pop();
694
+ nextCallArgs && operation(...nextCallArgs);
695
+ }
696
+ busyPushingNext = false;
697
+ };
698
+ }
662
699
  /**
663
700
  * Custom Subject that ensures that subscribers are notified of values in the order that they arrived.
664
701
  * A standard Subject does not have this guarantee.
@@ -677,23 +714,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
677
714
  class OrderedSubject extends Subject {
678
715
  constructor() {
679
716
  super(...arguments);
680
- this._itemQueue = [];
681
- this._busyPushingNext = false;
717
+ this.next = orderedQueueOperation((value) => super.next(value));
682
718
  }
683
- next(value) {
684
- if (this._busyPushingNext) {
685
- this._itemQueue.unshift(value);
686
- return;
687
- }
688
- this._busyPushingNext = true;
689
- super.next(value);
690
- while (this._itemQueue.length > 0) {
691
- const nextValue = this._itemQueue.pop();
692
- super.next(nextValue);
693
- }
694
- this._busyPushingNext = false;
719
+ }
720
+ /**
721
+ * Custom BehaviorSubject that ensures that subscribers are notified of values in the order that they arrived.
722
+ * A standard BehaviorSubject does not have this guarantee.
723
+ * For example, given the following code:
724
+ * ```typescript
725
+ * const subject = new BehaviorSubject<string>();
726
+ subject.subscribe(value => {
727
+ if (value === 'start') subject.next('end');
728
+ });
729
+ subject.subscribe(value => { });
730
+ subject.next('start');
731
+ * ```
732
+ * When `subject` is a standard `BehaviorSubject<T>` the second subscriber would recieve `end` and then `start`.
733
+ * When `subject` is a `OrderedBehaviorSubject<T>` the second subscriber would recieve `start` and then `end`.
734
+ */
735
+ class OrderedBehaviorSubject extends BehaviorSubject {
736
+ constructor() {
737
+ super(...arguments);
738
+ this.next = orderedQueueOperation((value) => super.next(value));
695
739
  }
696
740
  }
741
+
697
742
  /**
698
743
  * Internal Action stream that is emitted anytime an action is dispatched.
699
744
  */
@@ -826,7 +871,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
826
871
  * BehaviorSubject of the entire state.
827
872
  * @ignore
828
873
  */
829
- class StateStream extends BehaviorSubject {
874
+ class StateStream extends OrderedBehaviorSubject {
830
875
  constructor() {
831
876
  super({});
832
877
  }
@@ -1500,46 +1545,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
1500
1545
  args: [INITIAL_STATE_TOKEN]
1501
1546
  }] }]; } });
1502
1547
 
1503
- const SELECTOR_OPTIONS_META_KEY = 'NGXS_SELECTOR_OPTIONS_META';
1504
- const selectorOptionsMetaAccessor = {
1505
- getOptions: (target) => {
1506
- return (target && target[SELECTOR_OPTIONS_META_KEY]) || {};
1507
- },
1508
- defineOptions: (target, options) => {
1509
- if (!target)
1510
- return;
1511
- target[SELECTOR_OPTIONS_META_KEY] = options;
1512
- }
1513
- };
1514
- /**
1515
- * Function for creating a selector
1516
- * @param selectors The selectors to use to create the arguments of this function
1517
- * @param originalFn The original function being made into a selector
1518
- * @param creationMetadata
1519
- */
1520
- function createSelector(selectors, originalFn, creationMetadata) {
1521
- const containerClass = creationMetadata && creationMetadata.containerClass;
1522
- const wrappedFn = function wrappedSelectorFn(...args) {
1523
- const returnValue = originalFn.apply(containerClass, args);
1524
- if (returnValue instanceof Function) {
1525
- const innerMemoizedFn = memoize.apply(null, [returnValue]);
1526
- return innerMemoizedFn;
1527
- }
1528
- return returnValue;
1529
- };
1530
- const memoizedFn = memoize(wrappedFn);
1531
- Object.setPrototypeOf(memoizedFn, originalFn);
1532
- const selectorMetaData = setupSelectorMetadata(originalFn, creationMetadata);
1533
- const makeRootSelector = (context) => {
1548
+ function createRootSelectorFactory(selectorMetaData, selectors, memoizedSelectorFn) {
1549
+ return (context) => {
1534
1550
  const { argumentSelectorFunctions, selectorOptions } = getRuntimeSelectorInfo(context, selectorMetaData, selectors);
1535
1551
  return function selectFromRoot(rootState) {
1536
1552
  // Determine arguments from the app state using the selectors
1537
- const results = argumentSelectorFunctions.map(argFn => argFn(rootState));
1553
+ const results = argumentSelectorFunctions.map((argFn) => argFn(rootState));
1538
1554
  // if the lambda tries to access a something on the
1539
1555
  // state that doesn't exist, it will throw a TypeError.
1540
1556
  // since this is quite usual behaviour, we simply return undefined if so.
1541
1557
  try {
1542
- return memoizedFn(...results);
1558
+ return memoizedSelectorFn(...results);
1543
1559
  }
1544
1560
  catch (ex) {
1545
1561
  if (ex instanceof TypeError && selectorOptions.suppressErrors) {
@@ -1549,39 +1565,34 @@ function createSelector(selectors, originalFn, creationMetadata) {
1549
1565
  }
1550
1566
  };
1551
1567
  };
1552
- selectorMetaData.makeRootSelector = makeRootSelector;
1553
- return memoizedFn;
1554
1568
  }
1555
- function setupSelectorMetadata(originalFn, creationMetadata) {
1556
- const selectorMetaData = ensureSelectorMetadata$1(originalFn);
1557
- selectorMetaData.originalFn = originalFn;
1558
- let getExplicitSelectorOptions = () => ({});
1559
- if (creationMetadata) {
1560
- selectorMetaData.containerClass = creationMetadata.containerClass;
1561
- selectorMetaData.selectorName = creationMetadata.selectorName;
1562
- getExplicitSelectorOptions =
1563
- creationMetadata.getSelectorOptions || getExplicitSelectorOptions;
1564
- }
1565
- const selectorMetaDataClone = Object.assign({}, selectorMetaData);
1566
- selectorMetaData.getSelectorOptions = () => getLocalSelectorOptions(selectorMetaDataClone, getExplicitSelectorOptions());
1567
- return selectorMetaData;
1569
+ function createMemoizedSelectorFn(originalFn, creationMetadata) {
1570
+ const containerClass = creationMetadata && creationMetadata.containerClass;
1571
+ const wrappedFn = function wrappedSelectorFn(...args) {
1572
+ const returnValue = originalFn.apply(containerClass, args);
1573
+ if (returnValue instanceof Function) {
1574
+ const innerMemoizedFn = memoize.apply(null, [returnValue]);
1575
+ return innerMemoizedFn;
1576
+ }
1577
+ return returnValue;
1578
+ };
1579
+ const memoizedFn = memoize(wrappedFn);
1580
+ Object.setPrototypeOf(memoizedFn, originalFn);
1581
+ return memoizedFn;
1568
1582
  }
1569
1583
  function getRuntimeSelectorInfo(context, selectorMetaData, selectors = []) {
1570
1584
  const localSelectorOptions = selectorMetaData.getSelectorOptions();
1571
1585
  const selectorOptions = context.getSelectorOptions(localSelectorOptions);
1572
1586
  const selectorsToApply = getSelectorsToApply(selectors, selectorOptions, selectorMetaData.containerClass);
1573
- const argumentSelectorFunctions = selectorsToApply.map(selector => {
1587
+ const argumentSelectorFunctions = selectorsToApply.map((selector) => {
1574
1588
  const factory = getRootSelectorFactory(selector);
1575
1589
  return factory(context);
1576
1590
  });
1577
1591
  return {
1578
1592
  selectorOptions,
1579
- argumentSelectorFunctions
1593
+ argumentSelectorFunctions,
1580
1594
  };
1581
1595
  }
1582
- function getLocalSelectorOptions(selectorMetaData, explicitOptions) {
1583
- return Object.assign(Object.assign(Object.assign(Object.assign({}, (selectorOptionsMetaAccessor.getOptions(selectorMetaData.containerClass) || {})), (selectorOptionsMetaAccessor.getOptions(selectorMetaData.originalFn) || {})), (selectorMetaData.getSelectorOptions() || {})), explicitOptions);
1584
- }
1585
1596
  function getSelectorsToApply(selectors = [], selectorOptions, containerClass) {
1586
1597
  const selectorsToApply = [];
1587
1598
  const canInjectContainerState = selectors.length === 0 || selectorOptions.injectContainerState;
@@ -1619,7 +1630,7 @@ class Store {
1619
1630
  * because state is being changed actually within the `<root>` zone, see `InternalDispatcher#dispatchSingle`.
1620
1631
  * All selects would use this stream, and it would call leave only once for any state change across all active selectors.
1621
1632
  */
1622
- this._selectableStateStream = this._stateStream.pipe(observeOn(queueScheduler), leaveNgxs(this._internalExecutionStrategy), shareReplay({ bufferSize: 1, refCount: true }));
1633
+ this._selectableStateStream = this._stateStream.pipe(leaveNgxs(this._internalExecutionStrategy), shareReplay({ bufferSize: 1, refCount: true }));
1623
1634
  this.initStateStream(initialStateValue);
1624
1635
  }
1625
1636
  /**
@@ -2061,6 +2072,35 @@ function Select(rawSelector, ...paths) {
2061
2072
  };
2062
2073
  }
2063
2074
 
2075
+ const SELECTOR_OPTIONS_META_KEY = 'NGXS_SELECTOR_OPTIONS_META';
2076
+ const selectorOptionsMetaAccessor = {
2077
+ getOptions: (target) => {
2078
+ return (target && target[SELECTOR_OPTIONS_META_KEY]) || {};
2079
+ },
2080
+ defineOptions: (target, options) => {
2081
+ if (!target)
2082
+ return;
2083
+ target[SELECTOR_OPTIONS_META_KEY] = options;
2084
+ },
2085
+ };
2086
+ function setupSelectorMetadata(originalFn, creationMetadata) {
2087
+ const selectorMetaData = ensureSelectorMetadata$1(originalFn);
2088
+ selectorMetaData.originalFn = originalFn;
2089
+ let getExplicitSelectorOptions = () => ({});
2090
+ if (creationMetadata) {
2091
+ selectorMetaData.containerClass = creationMetadata.containerClass;
2092
+ selectorMetaData.selectorName = creationMetadata.selectorName || null;
2093
+ getExplicitSelectorOptions =
2094
+ creationMetadata.getSelectorOptions || getExplicitSelectorOptions;
2095
+ }
2096
+ const selectorMetaDataClone = Object.assign({}, selectorMetaData);
2097
+ selectorMetaData.getSelectorOptions = () => getLocalSelectorOptions(selectorMetaDataClone, getExplicitSelectorOptions());
2098
+ return selectorMetaData;
2099
+ }
2100
+ function getLocalSelectorOptions(selectorMetaData, explicitOptions) {
2101
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, (selectorOptionsMetaAccessor.getOptions(selectorMetaData.containerClass) || {})), (selectorOptionsMetaAccessor.getOptions(selectorMetaData.originalFn) || {})), (selectorMetaData.getSelectorOptions() || {})), explicitOptions);
2102
+ }
2103
+
2064
2104
  /**
2065
2105
  * Decorator for setting selector options at a method or class level.
2066
2106
  */
@@ -2094,9 +2134,13 @@ function getSelectorMetadata(target) {
2094
2134
  return getSelectorMetadata$1(target);
2095
2135
  }
2096
2136
 
2097
- /**
2098
- * Decorator for memoizing a state selector.
2099
- */
2137
+ function createSelector(selectors, projector, creationMetadata) {
2138
+ const memoizedFn = createMemoizedSelectorFn(projector, creationMetadata);
2139
+ const selectorMetaData = setupSelectorMetadata(projector, creationMetadata);
2140
+ selectorMetaData.makeRootSelector = createRootSelectorFactory(selectorMetaData, selectors, memoizedFn);
2141
+ return memoizedFn;
2142
+ }
2143
+
2100
2144
  function Selector(selectors) {
2101
2145
  return (target, key, descriptor) => {
2102
2146
  descriptor || (descriptor = Object.getOwnPropertyDescriptor(target, key));