@ngxs/store 3.7.4 → 3.7.5

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 (257) hide show
  1. package/README.md +16 -16
  2. package/bundles/ngxs-store-internals-testing.umd.js +315 -315
  3. package/bundles/ngxs-store-internals-testing.umd.js.map +1 -1
  4. package/bundles/ngxs-store-internals-testing.umd.min.js.map +1 -1
  5. package/bundles/ngxs-store-internals.umd.js +192 -397
  6. package/bundles/ngxs-store-internals.umd.js.map +1 -1
  7. package/bundles/ngxs-store-internals.umd.min.js +1 -1
  8. package/bundles/ngxs-store-internals.umd.min.js.map +1 -1
  9. package/bundles/ngxs-store-operators.umd.js +310 -310
  10. package/bundles/ngxs-store-operators.umd.js.map +1 -1
  11. package/bundles/ngxs-store-operators.umd.min.js.map +1 -1
  12. package/bundles/ngxs-store.umd.js +4401 -4481
  13. package/bundles/ngxs-store.umd.js.map +1 -1
  14. package/bundles/ngxs-store.umd.min.js +1 -1
  15. package/bundles/ngxs-store.umd.min.js.map +1 -1
  16. package/esm2015/index.js +13 -13
  17. package/esm2015/internals/angular.js +20 -20
  18. package/esm2015/internals/index.js +10 -11
  19. package/esm2015/internals/initial-state.js +34 -34
  20. package/esm2015/internals/internal-tokens.js +16 -16
  21. package/esm2015/internals/memoize.js +70 -70
  22. package/esm2015/internals/ngxs-bootstrapper.js +41 -41
  23. package/esm2015/internals/ngxs-store-internals.js +9 -9
  24. package/esm2015/internals/src/symbols.js +14 -14
  25. package/esm2015/internals/symbols.js +14 -14
  26. package/esm2015/internals/testing/fresh-platform.js +110 -110
  27. package/esm2015/internals/testing/helpers/ngxs-test.component.js +22 -22
  28. package/esm2015/internals/testing/helpers/ngxs-test.module.js +24 -24
  29. package/esm2015/internals/testing/index.js +8 -8
  30. package/esm2015/internals/testing/ngxs-store-internals-testing.js +8 -8
  31. package/esm2015/internals/testing/ngxs.setup.js +76 -76
  32. package/esm2015/internals/testing/skip-console-logging.js +62 -62
  33. package/esm2015/internals/testing/symbol.js +29 -29
  34. package/esm2015/ngxs-store.js +24 -23
  35. package/esm2015/operators/append.js +31 -31
  36. package/esm2015/operators/compose.js +24 -24
  37. package/esm2015/operators/iif.js +56 -56
  38. package/esm2015/operators/index.js +18 -18
  39. package/esm2015/operators/insert-item.js +41 -41
  40. package/esm2015/operators/internals.js +5 -5
  41. package/esm2015/operators/ngxs-store-operators.js +8 -8
  42. package/esm2015/operators/patch.js +39 -39
  43. package/esm2015/operators/remove-item.js +34 -34
  44. package/esm2015/operators/update-item.js +52 -52
  45. package/esm2015/operators/utils.js +50 -50
  46. package/esm2015/src/actions/actions.js +39 -39
  47. package/esm2015/src/actions/symbols.js +39 -39
  48. package/esm2015/src/actions-stream.js +140 -140
  49. package/esm2015/src/configs/messages.config.js +79 -79
  50. package/esm2015/src/decorators/action.js +48 -48
  51. package/esm2015/src/decorators/select/select-factory.js +45 -49
  52. package/esm2015/src/decorators/select/select.js +45 -81
  53. package/esm2015/src/decorators/select/symbols.js +50 -94
  54. package/esm2015/src/decorators/selector/selector.js +59 -59
  55. package/esm2015/src/decorators/selector/symbols.js +5 -5
  56. package/esm2015/src/decorators/selector-options.js +34 -34
  57. package/esm2015/src/decorators/state.js +77 -83
  58. package/esm2015/src/execution/dispatch-outside-zone-ngxs-execution-strategy.js +103 -103
  59. package/esm2015/src/execution/internal-ngxs-execution-strategy.js +45 -45
  60. package/esm2015/src/execution/noop-ngxs-execution-strategy.js +29 -29
  61. package/esm2015/src/execution/symbols.js +52 -52
  62. package/esm2015/src/internal/dispatcher.js +219 -217
  63. package/esm2015/src/internal/internals.js +493 -493
  64. package/esm2015/src/internal/lifecycle-state-manager.js +129 -129
  65. package/esm2015/src/internal/state-context-factory.js +138 -138
  66. package/esm2015/src/internal/state-factory.js +457 -449
  67. package/esm2015/src/internal/state-operations.js +124 -133
  68. package/esm2015/src/internal/state-operators.js +33 -33
  69. package/esm2015/src/internal/state-stream.js +30 -30
  70. package/esm2015/src/ivy/ivy-enabled-in-dev-mode.js +28 -28
  71. package/esm2015/src/module.js +159 -157
  72. package/esm2015/src/modules/ngxs-feature.module.js +63 -63
  73. package/esm2015/src/modules/ngxs-root.module.js +49 -52
  74. package/esm2015/src/operators/leave-ngxs.js +58 -58
  75. package/esm2015/src/operators/of-action.js +191 -191
  76. package/esm2015/src/plugin-manager.js +70 -70
  77. package/esm2015/src/plugin_api.js +10 -10
  78. package/esm2015/src/public_api.js +29 -29
  79. package/esm2015/src/public_to_deprecate.js +64 -64
  80. package/esm2015/src/state-token/state-token.js +45 -45
  81. package/esm2015/src/state-token/symbols.js +5 -5
  82. package/esm2015/src/store.js +190 -190
  83. package/esm2015/src/symbols.js +221 -220
  84. package/esm2015/src/utils/compose.js +44 -44
  85. package/esm2015/src/utils/freeze.js +35 -35
  86. package/esm2015/src/utils/selector-utils.js +221 -221
  87. package/esm2015/src/utils/store-validators.js +60 -60
  88. package/esm2015/src/utils/utils.js +143 -143
  89. package/esm5/index.js +13 -13
  90. package/esm5/internals/angular.js +20 -20
  91. package/esm5/internals/index.js +10 -11
  92. package/esm5/internals/initial-state.js +45 -45
  93. package/esm5/internals/internal-tokens.js +16 -16
  94. package/esm5/internals/memoize.js +71 -71
  95. package/esm5/internals/ngxs-bootstrapper.js +56 -56
  96. package/esm5/internals/ngxs-store-internals.js +9 -9
  97. package/esm5/internals/src/symbols.js +14 -14
  98. package/esm5/internals/symbols.js +14 -14
  99. package/esm5/internals/testing/fresh-platform.js +121 -121
  100. package/esm5/internals/testing/helpers/ngxs-test.component.js +32 -32
  101. package/esm5/internals/testing/helpers/ngxs-test.module.js +32 -32
  102. package/esm5/internals/testing/index.js +8 -8
  103. package/esm5/internals/testing/ngxs-store-internals-testing.js +8 -8
  104. package/esm5/internals/testing/ngxs.setup.js +98 -98
  105. package/esm5/internals/testing/skip-console-logging.js +62 -62
  106. package/esm5/internals/testing/symbol.js +29 -29
  107. package/esm5/ngxs-store.js +24 -23
  108. package/esm5/operators/append.js +31 -31
  109. package/esm5/operators/compose.js +28 -28
  110. package/esm5/operators/iif.js +56 -56
  111. package/esm5/operators/index.js +18 -18
  112. package/esm5/operators/insert-item.js +41 -41
  113. package/esm5/operators/internals.js +5 -5
  114. package/esm5/operators/ngxs-store-operators.js +8 -8
  115. package/esm5/operators/patch.js +40 -40
  116. package/esm5/operators/remove-item.js +34 -34
  117. package/esm5/operators/update-item.js +52 -52
  118. package/esm5/operators/utils.js +50 -50
  119. package/esm5/src/actions/actions.js +62 -62
  120. package/esm5/src/actions/symbols.js +39 -39
  121. package/esm5/src/actions-stream.js +186 -186
  122. package/esm5/src/configs/messages.config.js +79 -79
  123. package/esm5/src/decorators/action.js +60 -60
  124. package/esm5/src/decorators/select/select-factory.js +46 -50
  125. package/esm5/src/decorators/select/select.js +50 -87
  126. package/esm5/src/decorators/select/symbols.js +51 -95
  127. package/esm5/src/decorators/selector/selector.js +59 -59
  128. package/esm5/src/decorators/selector/symbols.js +5 -5
  129. package/esm5/src/decorators/selector-options.js +34 -34
  130. package/esm5/src/decorators/state.js +78 -84
  131. package/esm5/src/execution/dispatch-outside-zone-ngxs-execution-strategy.js +123 -123
  132. package/esm5/src/execution/internal-ngxs-execution-strategy.js +54 -54
  133. package/esm5/src/execution/noop-ngxs-execution-strategy.js +43 -43
  134. package/esm5/src/execution/symbols.js +52 -52
  135. package/esm5/src/internal/dispatcher.js +255 -253
  136. package/esm5/src/internal/internals.js +495 -495
  137. package/esm5/src/internal/lifecycle-state-manager.js +177 -177
  138. package/esm5/src/internal/state-context-factory.js +146 -146
  139. package/esm5/src/internal/state-factory.js +583 -575
  140. package/esm5/src/internal/state-operations.js +134 -143
  141. package/esm5/src/internal/state-operators.js +34 -34
  142. package/esm5/src/internal/state-stream.js +37 -37
  143. package/esm5/src/ivy/ivy-enabled-in-dev-mode.js +28 -28
  144. package/esm5/src/module.js +202 -200
  145. package/esm5/src/modules/ngxs-feature.module.js +65 -65
  146. package/esm5/src/modules/ngxs-root.module.js +44 -47
  147. package/esm5/src/operators/leave-ngxs.js +58 -58
  148. package/esm5/src/operators/of-action.js +217 -217
  149. package/esm5/src/plugin-manager.js +82 -82
  150. package/esm5/src/plugin_api.js +10 -10
  151. package/esm5/src/public_api.js +29 -29
  152. package/esm5/src/public_to_deprecate.js +64 -64
  153. package/esm5/src/state-token/state-token.js +57 -57
  154. package/esm5/src/state-token/symbols.js +5 -5
  155. package/esm5/src/store.js +241 -241
  156. package/esm5/src/symbols.js +230 -229
  157. package/esm5/src/utils/compose.js +55 -55
  158. package/esm5/src/utils/freeze.js +35 -35
  159. package/esm5/src/utils/selector-utils.js +230 -230
  160. package/esm5/src/utils/store-validators.js +78 -78
  161. package/esm5/src/utils/utils.js +151 -151
  162. package/fesm2015/ngxs-store-internals-testing.js +274 -274
  163. package/fesm2015/ngxs-store-internals-testing.js.map +1 -1
  164. package/fesm2015/ngxs-store-internals.js +175 -377
  165. package/fesm2015/ngxs-store-internals.js.map +1 -1
  166. package/fesm2015/ngxs-store-operators.js +312 -312
  167. package/fesm2015/ngxs-store-operators.js.map +1 -1
  168. package/fesm2015/ngxs-store.js +3915 -3995
  169. package/fesm2015/ngxs-store.js.map +1 -1
  170. package/fesm5/ngxs-store-internals-testing.js +321 -321
  171. package/fesm5/ngxs-store-internals-testing.js.map +1 -1
  172. package/fesm5/ngxs-store-internals.js +200 -402
  173. package/fesm5/ngxs-store-internals.js.map +1 -1
  174. package/fesm5/ngxs-store-operators.js +316 -316
  175. package/fesm5/ngxs-store-operators.js.map +1 -1
  176. package/fesm5/ngxs-store.js +4410 -4491
  177. package/fesm5/ngxs-store.js.map +1 -1
  178. package/index.d.ts +8 -8
  179. package/internals/angular.d.ts +1 -1
  180. package/internals/index.d.ts +6 -7
  181. package/internals/initial-state.d.ts +8 -8
  182. package/internals/internal-tokens.d.ts +9 -9
  183. package/internals/memoize.d.ts +9 -9
  184. package/internals/ngxs-bootstrapper.d.ts +13 -13
  185. package/internals/ngxs-store-internals.d.ts +4 -4
  186. package/internals/ngxs-store-internals.metadata.json +1 -1
  187. package/internals/src/symbols.d.ts +7 -7
  188. package/internals/symbols.d.ts +7 -7
  189. package/internals/testing/fresh-platform.d.ts +1 -1
  190. package/internals/testing/helpers/ngxs-test.component.d.ts +5 -5
  191. package/internals/testing/helpers/ngxs-test.module.d.ts +4 -4
  192. package/internals/testing/index.d.ts +4 -4
  193. package/internals/testing/ngxs-store-internals-testing.d.ts +4 -4
  194. package/internals/testing/ngxs.setup.d.ts +7 -7
  195. package/internals/testing/skip-console-logging.d.ts +1 -1
  196. package/internals/testing/symbol.d.ts +14 -14
  197. package/ngxs-store.d.ts +20 -19
  198. package/ngxs-store.metadata.json +1 -1
  199. package/operators/append.d.ts +6 -6
  200. package/operators/compose.d.ts +2 -2
  201. package/operators/iif.d.ts +11 -11
  202. package/operators/index.d.ts +13 -13
  203. package/operators/insert-item.d.ts +7 -7
  204. package/operators/internals.d.ts +2 -2
  205. package/operators/ngxs-store-operators.d.ts +4 -4
  206. package/operators/patch.d.ts +10 -10
  207. package/operators/remove-item.d.ts +7 -7
  208. package/operators/update-item.d.ts +10 -10
  209. package/operators/utils.d.ts +9 -9
  210. package/package.json +1 -1
  211. package/src/actions/actions.d.ts +15 -15
  212. package/src/actions/symbols.d.ts +21 -21
  213. package/src/actions-stream.d.ts +49 -49
  214. package/src/configs/messages.config.d.ts +11 -11
  215. package/src/decorators/action.d.ts +5 -5
  216. package/src/decorators/select/select-factory.d.ts +13 -13
  217. package/src/decorators/select/select.d.ts +4 -4
  218. package/src/decorators/select/symbols.d.ts +10 -14
  219. package/src/decorators/selector/selector.d.ts +5 -5
  220. package/src/decorators/selector/symbols.d.ts +4 -4
  221. package/src/decorators/selector-options.d.ts +5 -5
  222. package/src/decorators/state.d.ts +6 -6
  223. package/src/execution/dispatch-outside-zone-ngxs-execution-strategy.d.ts +11 -11
  224. package/src/execution/internal-ngxs-execution-strategy.d.ts +7 -7
  225. package/src/execution/noop-ngxs-execution-strategy.d.ts +5 -5
  226. package/src/execution/symbols.d.ts +10 -10
  227. package/src/internal/dispatcher.d.ts +32 -32
  228. package/src/internal/internals.d.ts +166 -166
  229. package/src/internal/lifecycle-state-manager.d.ts +20 -20
  230. package/src/internal/state-context-factory.d.ts +15 -15
  231. package/src/internal/state-factory.d.ts +57 -57
  232. package/src/internal/state-operations.d.ts +19 -19
  233. package/src/internal/state-operators.d.ts +2 -2
  234. package/src/internal/state-stream.d.ts +11 -11
  235. package/src/ivy/ivy-enabled-in-dev-mode.d.ts +6 -6
  236. package/src/module.d.ts +23 -23
  237. package/src/modules/ngxs-feature.module.d.ts +13 -13
  238. package/src/modules/ngxs-root.module.d.ts +13 -13
  239. package/src/operators/leave-ngxs.d.ts +7 -7
  240. package/src/operators/of-action.d.ts +43 -43
  241. package/src/plugin-manager.d.ts +10 -10
  242. package/src/plugin_api.d.ts +5 -5
  243. package/src/public_api.d.ts +17 -17
  244. package/src/public_to_deprecate.d.ts +21 -21
  245. package/src/state-token/state-token.d.ts +7 -7
  246. package/src/state-token/symbols.d.ts +5 -5
  247. package/src/store.d.ts +59 -59
  248. package/src/symbols.d.ts +139 -138
  249. package/src/utils/compose.d.ts +23 -23
  250. package/src/utils/freeze.d.ts +5 -5
  251. package/src/utils/selector-utils.d.ts +23 -23
  252. package/src/utils/store-validators.d.ts +7 -7
  253. package/src/utils/utils.d.ts +46 -46
  254. package/types/index.d.ts +2 -2
  255. package/esm2015/internals/decorator-injector-adapter.js +0 -204
  256. package/esm5/internals/decorator-injector-adapter.js +0 -204
  257. package/internals/decorator-injector-adapter.d.ts +0 -15
@@ -1,217 +1,219 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { ErrorHandler, Injectable, Injector } from '@angular/core';
6
- import { EMPTY, forkJoin, of, Subject, throwError } from 'rxjs';
7
- import { exhaustMap, filter, shareReplay, take } from 'rxjs/operators';
8
- import { compose } from '../utils/compose';
9
- import { InternalActions } from '../actions-stream';
10
- import { StateStream } from './state-stream';
11
- import { PluginManager } from '../plugin-manager';
12
- import { InternalNgxsExecutionStrategy } from '../execution/internal-ngxs-execution-strategy';
13
- import { leaveNgxs } from '../operators/leave-ngxs';
14
- import { getActionTypeFromInstance } from '../utils/utils';
15
- /**
16
- * Internal Action result stream that is emitted when an action is completed.
17
- * This is used as a method of returning the action result to the dispatcher
18
- * for the observable returned by the dispatch(...) call.
19
- * The dispatcher then asynchronously pushes the result from this stream onto the main action stream as a result.
20
- */
21
- export class InternalDispatchedActionResults extends Subject {
22
- }
23
- InternalDispatchedActionResults.decorators = [
24
- { type: Injectable }
25
- ];
26
- export class InternalDispatcher {
27
- /**
28
- * @param {?} _injector
29
- * @param {?} _actions
30
- * @param {?} _actionResults
31
- * @param {?} _pluginManager
32
- * @param {?} _stateStream
33
- * @param {?} _ngxsExecutionStrategy
34
- */
35
- constructor(_injector, _actions, _actionResults, _pluginManager, _stateStream, _ngxsExecutionStrategy) {
36
- this._injector = _injector;
37
- this._actions = _actions;
38
- this._actionResults = _actionResults;
39
- this._pluginManager = _pluginManager;
40
- this._stateStream = _stateStream;
41
- this._ngxsExecutionStrategy = _ngxsExecutionStrategy;
42
- }
43
- /**
44
- * Dispatches event(s).
45
- * @param {?} actionOrActions
46
- * @return {?}
47
- */
48
- dispatch(actionOrActions) {
49
- /** @type {?} */
50
- const result = this._ngxsExecutionStrategy.enter((/**
51
- * @return {?}
52
- */
53
- () => this.dispatchByEvents(actionOrActions)));
54
- result.subscribe({
55
- error: (/**
56
- * @param {?} error
57
- * @return {?}
58
- */
59
- error => this._ngxsExecutionStrategy.leave((/**
60
- * @return {?}
61
- */
62
- () => {
63
- try {
64
- // Retrieve lazily to avoid cyclic dependency exception
65
- this._errorHandler = this._errorHandler || this._injector.get(ErrorHandler);
66
- this._errorHandler.handleError(error);
67
- }
68
- catch (_a) { }
69
- })))
70
- });
71
- return result.pipe(leaveNgxs(this._ngxsExecutionStrategy));
72
- }
73
- /**
74
- * @private
75
- * @param {?} actionOrActions
76
- * @return {?}
77
- */
78
- dispatchByEvents(actionOrActions) {
79
- if (Array.isArray(actionOrActions)) {
80
- if (actionOrActions.length === 0)
81
- return of(this._stateStream.getValue());
82
- return forkJoin(actionOrActions.map((/**
83
- * @param {?} action
84
- * @return {?}
85
- */
86
- action => this.dispatchSingle(action))));
87
- }
88
- else {
89
- return this.dispatchSingle(actionOrActions);
90
- }
91
- }
92
- /**
93
- * @private
94
- * @param {?} action
95
- * @return {?}
96
- */
97
- dispatchSingle(action) {
98
- /** @type {?} */
99
- const type = getActionTypeFromInstance(action);
100
- if (!type) {
101
- /** @type {?} */
102
- const error = new Error(`This action doesn't have a type property: ${action.constructor.name}`);
103
- return throwError(error);
104
- }
105
- /** @type {?} */
106
- const prevState = this._stateStream.getValue();
107
- /** @type {?} */
108
- const plugins = this._pluginManager.plugins;
109
- return ((/** @type {?} */ (compose([
110
- ...plugins,
111
- (/**
112
- * @param {?} nextState
113
- * @param {?} nextAction
114
- * @return {?}
115
- */
116
- (nextState, nextAction) => {
117
- if (nextState !== prevState) {
118
- this._stateStream.next(nextState);
119
- }
120
- /** @type {?} */
121
- const actionResult$ = this.getActionResultStream(nextAction);
122
- actionResult$.subscribe((/**
123
- * @param {?} ctx
124
- * @return {?}
125
- */
126
- ctx => this._actions.next(ctx)));
127
- this._actions.next({ action: nextAction, status: "DISPATCHED" /* Dispatched */ });
128
- return this.createDispatchObservable(actionResult$);
129
- })
130
- ])(prevState, action)))).pipe(shareReplay());
131
- }
132
- /**
133
- * @private
134
- * @param {?} action
135
- * @return {?}
136
- */
137
- getActionResultStream(action) {
138
- return this._actionResults.pipe(filter((/**
139
- * @param {?} ctx
140
- * @return {?}
141
- */
142
- (ctx) => ctx.action === action && ctx.status !== "DISPATCHED" /* Dispatched */)), take(1), shareReplay());
143
- }
144
- /**
145
- * @private
146
- * @param {?} actionResult$
147
- * @return {?}
148
- */
149
- createDispatchObservable(actionResult$) {
150
- return actionResult$
151
- .pipe(exhaustMap((/**
152
- * @param {?} ctx
153
- * @return {?}
154
- */
155
- (ctx) => {
156
- switch (ctx.status) {
157
- case "SUCCESSFUL" /* Successful */:
158
- return of(this._stateStream.getValue());
159
- case "ERRORED" /* Errored */:
160
- return throwError(ctx.error);
161
- default:
162
- return EMPTY;
163
- }
164
- })))
165
- .pipe(shareReplay());
166
- }
167
- }
168
- InternalDispatcher.decorators = [
169
- { type: Injectable }
170
- ];
171
- /** @nocollapse */
172
- InternalDispatcher.ctorParameters = () => [
173
- { type: Injector },
174
- { type: InternalActions },
175
- { type: InternalDispatchedActionResults },
176
- { type: PluginManager },
177
- { type: StateStream },
178
- { type: InternalNgxsExecutionStrategy }
179
- ];
180
- if (false) {
181
- /**
182
- * @type {?}
183
- * @private
184
- */
185
- InternalDispatcher.prototype._errorHandler;
186
- /**
187
- * @type {?}
188
- * @private
189
- */
190
- InternalDispatcher.prototype._injector;
191
- /**
192
- * @type {?}
193
- * @private
194
- */
195
- InternalDispatcher.prototype._actions;
196
- /**
197
- * @type {?}
198
- * @private
199
- */
200
- InternalDispatcher.prototype._actionResults;
201
- /**
202
- * @type {?}
203
- * @private
204
- */
205
- InternalDispatcher.prototype._pluginManager;
206
- /**
207
- * @type {?}
208
- * @private
209
- */
210
- InternalDispatcher.prototype._stateStream;
211
- /**
212
- * @type {?}
213
- * @private
214
- */
215
- InternalDispatcher.prototype._ngxsExecutionStrategy;
216
- }
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3hzL3N0b3JlLyIsInNvdXJjZXMiOlsic3JjL2ludGVybmFsL2Rpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBK0IsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFTM0QsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLE9BQXNCOzs7WUFEMUUsVUFBVTs7QUFJWCxNQUFNLE9BQU8sa0JBQWtCOzs7Ozs7Ozs7SUFHN0IsWUFDVSxTQUFtQixFQUNuQixRQUF5QixFQUN6QixjQUErQyxFQUMvQyxjQUE2QixFQUM3QixZQUF5QixFQUN6QixzQkFBcUQ7UUFMckQsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBaUM7UUFDL0MsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUErQjtJQUM1RCxDQUFDOzs7Ozs7SUFLSixRQUFRLENBQUMsZUFBNEI7O2NBQzdCLE1BQU0sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSzs7O1FBQUMsR0FBRyxFQUFFLENBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFDdkM7UUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ2YsS0FBSzs7OztZQUFFLEtBQUssQ0FBQyxFQUFFLENBQ2IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUs7OztZQUFDLEdBQUcsRUFBRTtnQkFDckMsSUFBSTtvQkFDRix1REFBdUQ7b0JBQ3ZELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDNUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3ZDO2dCQUFDLFdBQU0sR0FBRTtZQUNaLENBQUMsRUFBQyxDQUFBO1NBQ0wsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7Ozs7OztJQUVPLGdCQUFnQixDQUFDLGVBQTRCO1FBQ25ELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUNsQyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDMUUsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUc7Ozs7WUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1NBQzdFO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDOzs7Ozs7SUFFTyxjQUFjLENBQUMsTUFBVzs7Y0FDMUIsSUFBSSxHQUF1Qix5QkFBeUIsQ0FBQyxNQUFNLENBQUM7UUFDbEUsSUFBSSxDQUFDLElBQUksRUFBRTs7a0JBQ0gsS0FBSyxHQUFHLElBQUksS0FBSyxDQUNyQiw2Q0FBNkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FDdkU7WUFDRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjs7Y0FFSyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUU7O2NBQ3hDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU87UUFFM0MsT0FBTyxDQUFDLG1CQUFBLE9BQU8sQ0FBQztZQUNkLEdBQUcsT0FBTzs7Ozs7O1lBQ1YsQ0FBQyxTQUFjLEVBQUUsVUFBZSxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ25DOztzQkFDSyxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQztnQkFDNUQsYUFBYSxDQUFDLFNBQVM7Ozs7Z0JBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBeUIsRUFBRSxDQUFDLENBQUM7Z0JBQzVFLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3RELENBQUM7U0FDRixDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFtQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQzs7Ozs7O0lBRU8scUJBQXFCLENBQUMsTUFBVztRQUN2QyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM3QixNQUFNOzs7O1FBQ0osQ0FBQyxHQUFrQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxrQ0FBNEIsRUFDeEYsRUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsV0FBVyxFQUFFLENBQ2QsQ0FBQztJQUNKLENBQUM7Ozs7OztJQUVPLHdCQUF3QixDQUFDLGFBQXdDO1FBQ3ZFLE9BQU8sYUFBYTthQUNqQixJQUFJLENBQ0gsVUFBVTs7OztRQUFDLENBQUMsR0FBa0IsRUFBRSxFQUFFO1lBQ2hDLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDbEI7b0JBQ0UsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQztvQkFDRSxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CO29CQUNFLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1FBQ0gsQ0FBQyxFQUFDLENBQ0g7YUFDQSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDOzs7WUEvRkYsVUFBVTs7OztZQXJCd0IsUUFBUTtZQUtMLGVBQWU7WUF1QnpCLCtCQUErQjtZQXJCbEQsYUFBYTtZQURiLFdBQVc7WUFFWCw2QkFBNkI7Ozs7Ozs7SUFlcEMsMkNBQW9DOzs7OztJQUdsQyx1Q0FBMkI7Ozs7O0lBQzNCLHNDQUFpQzs7Ozs7SUFDakMsNENBQXVEOzs7OztJQUN2RCw0Q0FBcUM7Ozs7O0lBQ3JDLDBDQUFpQzs7Ozs7SUFDakMsb0RBQTZEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFTVBUWSwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGV4aGF1c3RNYXAsIGZpbHRlciwgc2hhcmVSZXBsYXksIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAnLi4vdXRpbHMvY29tcG9zZSc7XHJcbmltcG9ydCB7IEFjdGlvbkNvbnRleHQsIEFjdGlvblN0YXR1cywgSW50ZXJuYWxBY3Rpb25zIH0gZnJvbSAnLi4vYWN0aW9ucy1zdHJlYW0nO1xyXG5pbXBvcnQgeyBTdGF0ZVN0cmVhbSB9IGZyb20gJy4vc3RhdGUtc3RyZWFtJztcclxuaW1wb3J0IHsgUGx1Z2luTWFuYWdlciB9IGZyb20gJy4uL3BsdWdpbi1tYW5hZ2VyJztcclxuaW1wb3J0IHsgSW50ZXJuYWxOZ3hzRXhlY3V0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9leGVjdXRpb24vaW50ZXJuYWwtbmd4cy1leGVjdXRpb24tc3RyYXRlZ3knO1xyXG5pbXBvcnQgeyBsZWF2ZU5neHMgfSBmcm9tICcuLi9vcGVyYXRvcnMvbGVhdmUtbmd4cyc7XHJcbmltcG9ydCB7IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UgfSBmcm9tICcuLi91dGlscy91dGlscyc7XHJcblxyXG4vKipcclxuICogSW50ZXJuYWwgQWN0aW9uIHJlc3VsdCBzdHJlYW0gdGhhdCBpcyBlbWl0dGVkIHdoZW4gYW4gYWN0aW9uIGlzIGNvbXBsZXRlZC5cclxuICogVGhpcyBpcyB1c2VkIGFzIGEgbWV0aG9kIG9mIHJldHVybmluZyB0aGUgYWN0aW9uIHJlc3VsdCB0byB0aGUgZGlzcGF0Y2hlclxyXG4gKiBmb3IgdGhlIG9ic2VydmFibGUgcmV0dXJuZWQgYnkgdGhlIGRpc3BhdGNoKC4uLikgY2FsbC5cclxuICogVGhlIGRpc3BhdGNoZXIgdGhlbiBhc3luY2hyb25vdXNseSBwdXNoZXMgdGhlIHJlc3VsdCBmcm9tIHRoaXMgc3RyZWFtIG9udG8gdGhlIG1haW4gYWN0aW9uIHN0cmVhbSBhcyBhIHJlc3VsdC5cclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEludGVybmFsRGlzcGF0Y2hlZEFjdGlvblJlc3VsdHMgZXh0ZW5kcyBTdWJqZWN0PEFjdGlvbkNvbnRleHQ+IHt9XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBJbnRlcm5hbERpc3BhdGNoZXIge1xyXG4gIHByaXZhdGUgX2Vycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgIHByaXZhdGUgX2FjdGlvbnM6IEludGVybmFsQWN0aW9ucyxcclxuICAgIHByaXZhdGUgX2FjdGlvblJlc3VsdHM6IEludGVybmFsRGlzcGF0Y2hlZEFjdGlvblJlc3VsdHMsXHJcbiAgICBwcml2YXRlIF9wbHVnaW5NYW5hZ2VyOiBQbHVnaW5NYW5hZ2VyLFxyXG4gICAgcHJpdmF0ZSBfc3RhdGVTdHJlYW06IFN0YXRlU3RyZWFtLFxyXG4gICAgcHJpdmF0ZSBfbmd4c0V4ZWN1dGlvblN0cmF0ZWd5OiBJbnRlcm5hbE5neHNFeGVjdXRpb25TdHJhdGVneVxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGF0Y2hlcyBldmVudChzKS5cclxuICAgKi9cclxuICBkaXNwYXRjaChhY3Rpb25PckFjdGlvbnM6IGFueSB8IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX25neHNFeGVjdXRpb25TdHJhdGVneS5lbnRlcigoKSA9PlxyXG4gICAgICB0aGlzLmRpc3BhdGNoQnlFdmVudHMoYWN0aW9uT3JBY3Rpb25zKVxyXG4gICAgKTtcclxuXHJcbiAgICByZXN1bHQuc3Vic2NyaWJlKHtcclxuICAgICAgZXJyb3I6IGVycm9yID0+XHJcbiAgICAgICAgdGhpcy5fbmd4c0V4ZWN1dGlvblN0cmF0ZWd5LmxlYXZlKCgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIFJldHJpZXZlIGxhemlseSB0byBhdm9pZCBjeWNsaWMgZGVwZW5kZW5jeSBleGNlcHRpb25cclxuICAgICAgICAgICAgdGhpcy5fZXJyb3JIYW5kbGVyID0gdGhpcy5fZXJyb3JIYW5kbGVyIHx8IHRoaXMuX2luamVjdG9yLmdldChFcnJvckhhbmRsZXIpO1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgfSBjYXRjaCB7fVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0LnBpcGUobGVhdmVOZ3hzKHRoaXMuX25neHNFeGVjdXRpb25TdHJhdGVneSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwYXRjaEJ5RXZlbnRzKGFjdGlvbk9yQWN0aW9uczogYW55IHwgYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYWN0aW9uT3JBY3Rpb25zKSkge1xyXG4gICAgICBpZiAoYWN0aW9uT3JBY3Rpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG9mKHRoaXMuX3N0YXRlU3RyZWFtLmdldFZhbHVlKCkpO1xyXG4gICAgICByZXR1cm4gZm9ya0pvaW4oYWN0aW9uT3JBY3Rpb25zLm1hcChhY3Rpb24gPT4gdGhpcy5kaXNwYXRjaFNpbmdsZShhY3Rpb24pKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaFNpbmdsZShhY3Rpb25PckFjdGlvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaXNwYXRjaFNpbmdsZShhY3Rpb246IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCB0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlKGFjdGlvbik7XHJcbiAgICBpZiAoIXR5cGUpIHtcclxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFRoaXMgYWN0aW9uIGRvZXNuJ3QgaGF2ZSBhIHR5cGUgcHJvcGVydHk6ICR7YWN0aW9uLmNvbnN0cnVjdG9yLm5hbWV9YFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5fc3RhdGVTdHJlYW0uZ2V0VmFsdWUoKTtcclxuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLl9wbHVnaW5NYW5hZ2VyLnBsdWdpbnM7XHJcblxyXG4gICAgcmV0dXJuIChjb21wb3NlKFtcclxuICAgICAgLi4ucGx1Z2lucyxcclxuICAgICAgKG5leHRTdGF0ZTogYW55LCBuZXh0QWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAobmV4dFN0YXRlICE9PSBwcmV2U3RhdGUpIHtcclxuICAgICAgICAgIHRoaXMuX3N0YXRlU3RyZWFtLm5leHQobmV4dFN0YXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWN0aW9uUmVzdWx0JCA9IHRoaXMuZ2V0QWN0aW9uUmVzdWx0U3RyZWFtKG5leHRBY3Rpb24pO1xyXG4gICAgICAgIGFjdGlvblJlc3VsdCQuc3Vic2NyaWJlKGN0eCA9PiB0aGlzLl9hY3Rpb25zLm5leHQoY3R4KSk7XHJcbiAgICAgICAgdGhpcy5fYWN0aW9ucy5uZXh0KHsgYWN0aW9uOiBuZXh0QWN0aW9uLCBzdGF0dXM6IEFjdGlvblN0YXR1cy5EaXNwYXRjaGVkIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZURpc3BhdGNoT2JzZXJ2YWJsZShhY3Rpb25SZXN1bHQkKTtcclxuICAgICAgfVxyXG4gICAgXSkocHJldlN0YXRlLCBhY3Rpb24pIGFzIE9ic2VydmFibGU8YW55PikucGlwZShzaGFyZVJlcGxheSgpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWN0aW9uUmVzdWx0U3RyZWFtKGFjdGlvbjogYW55KTogT2JzZXJ2YWJsZTxBY3Rpb25Db250ZXh0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9uUmVzdWx0cy5waXBlKFxyXG4gICAgICBmaWx0ZXIoXHJcbiAgICAgICAgKGN0eDogQWN0aW9uQ29udGV4dCkgPT4gY3R4LmFjdGlvbiA9PT0gYWN0aW9uICYmIGN0eC5zdGF0dXMgIT09IEFjdGlvblN0YXR1cy5EaXNwYXRjaGVkXHJcbiAgICAgICksXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIHNoYXJlUmVwbGF5KClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZURpc3BhdGNoT2JzZXJ2YWJsZShhY3Rpb25SZXN1bHQkOiBPYnNlcnZhYmxlPEFjdGlvbkNvbnRleHQ+KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBhY3Rpb25SZXN1bHQkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGV4aGF1c3RNYXAoKGN0eDogQWN0aW9uQ29udGV4dCkgPT4ge1xyXG4gICAgICAgICAgc3dpdGNoIChjdHguc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgQWN0aW9uU3RhdHVzLlN1Y2Nlc3NmdWw6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuX3N0YXRlU3RyZWFtLmdldFZhbHVlKCkpO1xyXG4gICAgICAgICAgICBjYXNlIEFjdGlvblN0YXR1cy5FcnJvcmVkOlxyXG4gICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGN0eC5lcnJvcik7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { ErrorHandler, Injectable, Injector } from '@angular/core';
6
+ import { EMPTY, forkJoin, of, Subject, throwError } from 'rxjs';
7
+ import { exhaustMap, filter, shareReplay, take } from 'rxjs/operators';
8
+ import { compose } from '../utils/compose';
9
+ import { InternalActions } from '../actions-stream';
10
+ import { StateStream } from './state-stream';
11
+ import { PluginManager } from '../plugin-manager';
12
+ import { InternalNgxsExecutionStrategy } from '../execution/internal-ngxs-execution-strategy';
13
+ import { leaveNgxs } from '../operators/leave-ngxs';
14
+ import { getActionTypeFromInstance } from '../utils/utils';
15
+ /**
16
+ * Internal Action result stream that is emitted when an action is completed.
17
+ * This is used as a method of returning the action result to the dispatcher
18
+ * for the observable returned by the dispatch(...) call.
19
+ * The dispatcher then asynchronously pushes the result from this stream onto the main action stream as a result.
20
+ */
21
+ export class InternalDispatchedActionResults extends Subject {
22
+ }
23
+ InternalDispatchedActionResults.decorators = [
24
+ { type: Injectable }
25
+ ];
26
+ export class InternalDispatcher {
27
+ /**
28
+ * @param {?} _injector
29
+ * @param {?} _actions
30
+ * @param {?} _actionResults
31
+ * @param {?} _pluginManager
32
+ * @param {?} _stateStream
33
+ * @param {?} _ngxsExecutionStrategy
34
+ */
35
+ constructor(_injector, _actions, _actionResults, _pluginManager, _stateStream, _ngxsExecutionStrategy) {
36
+ this._injector = _injector;
37
+ this._actions = _actions;
38
+ this._actionResults = _actionResults;
39
+ this._pluginManager = _pluginManager;
40
+ this._stateStream = _stateStream;
41
+ this._ngxsExecutionStrategy = _ngxsExecutionStrategy;
42
+ }
43
+ /**
44
+ * Dispatches event(s).
45
+ * @param {?} actionOrActions
46
+ * @return {?}
47
+ */
48
+ dispatch(actionOrActions) {
49
+ /** @type {?} */
50
+ const result = this._ngxsExecutionStrategy.enter((/**
51
+ * @return {?}
52
+ */
53
+ () => this.dispatchByEvents(actionOrActions)));
54
+ result.subscribe({
55
+ error: (/**
56
+ * @param {?} error
57
+ * @return {?}
58
+ */
59
+ error => this._ngxsExecutionStrategy.leave((/**
60
+ * @return {?}
61
+ */
62
+ () => {
63
+ try {
64
+ // Retrieve lazily to avoid cyclic dependency exception
65
+ this._errorHandler = this._errorHandler || this._injector.get(ErrorHandler);
66
+ this._errorHandler.handleError(error);
67
+ }
68
+ catch (_a) { }
69
+ })))
70
+ });
71
+ return result.pipe(leaveNgxs(this._ngxsExecutionStrategy));
72
+ }
73
+ /**
74
+ * @private
75
+ * @param {?} actionOrActions
76
+ * @return {?}
77
+ */
78
+ dispatchByEvents(actionOrActions) {
79
+ if (Array.isArray(actionOrActions)) {
80
+ if (actionOrActions.length === 0)
81
+ return of(this._stateStream.getValue());
82
+ return forkJoin(actionOrActions.map((/**
83
+ * @param {?} action
84
+ * @return {?}
85
+ */
86
+ action => this.dispatchSingle(action))));
87
+ }
88
+ else {
89
+ return this.dispatchSingle(actionOrActions);
90
+ }
91
+ }
92
+ /**
93
+ * @private
94
+ * @param {?} action
95
+ * @return {?}
96
+ */
97
+ dispatchSingle(action) {
98
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
99
+ /** @type {?} */
100
+ const type = getActionTypeFromInstance(action);
101
+ if (!type) {
102
+ /** @type {?} */
103
+ const error = new Error(`This action doesn't have a type property: ${action.constructor.name}`);
104
+ return throwError(error);
105
+ }
106
+ }
107
+ /** @type {?} */
108
+ const prevState = this._stateStream.getValue();
109
+ /** @type {?} */
110
+ const plugins = this._pluginManager.plugins;
111
+ return ((/** @type {?} */ (compose([
112
+ ...plugins,
113
+ (/**
114
+ * @param {?} nextState
115
+ * @param {?} nextAction
116
+ * @return {?}
117
+ */
118
+ (nextState, nextAction) => {
119
+ if (nextState !== prevState) {
120
+ this._stateStream.next(nextState);
121
+ }
122
+ /** @type {?} */
123
+ const actionResult$ = this.getActionResultStream(nextAction);
124
+ actionResult$.subscribe((/**
125
+ * @param {?} ctx
126
+ * @return {?}
127
+ */
128
+ ctx => this._actions.next(ctx)));
129
+ this._actions.next({ action: nextAction, status: "DISPATCHED" /* Dispatched */ });
130
+ return this.createDispatchObservable(actionResult$);
131
+ })
132
+ ])(prevState, action)))).pipe(shareReplay());
133
+ }
134
+ /**
135
+ * @private
136
+ * @param {?} action
137
+ * @return {?}
138
+ */
139
+ getActionResultStream(action) {
140
+ return this._actionResults.pipe(filter((/**
141
+ * @param {?} ctx
142
+ * @return {?}
143
+ */
144
+ (ctx) => ctx.action === action && ctx.status !== "DISPATCHED" /* Dispatched */)), take(1), shareReplay());
145
+ }
146
+ /**
147
+ * @private
148
+ * @param {?} actionResult$
149
+ * @return {?}
150
+ */
151
+ createDispatchObservable(actionResult$) {
152
+ return actionResult$
153
+ .pipe(exhaustMap((/**
154
+ * @param {?} ctx
155
+ * @return {?}
156
+ */
157
+ (ctx) => {
158
+ switch (ctx.status) {
159
+ case "SUCCESSFUL" /* Successful */:
160
+ return of(this._stateStream.getValue());
161
+ case "ERRORED" /* Errored */:
162
+ return throwError(ctx.error);
163
+ default:
164
+ return EMPTY;
165
+ }
166
+ })))
167
+ .pipe(shareReplay());
168
+ }
169
+ }
170
+ InternalDispatcher.decorators = [
171
+ { type: Injectable }
172
+ ];
173
+ /** @nocollapse */
174
+ InternalDispatcher.ctorParameters = () => [
175
+ { type: Injector },
176
+ { type: InternalActions },
177
+ { type: InternalDispatchedActionResults },
178
+ { type: PluginManager },
179
+ { type: StateStream },
180
+ { type: InternalNgxsExecutionStrategy }
181
+ ];
182
+ if (false) {
183
+ /**
184
+ * @type {?}
185
+ * @private
186
+ */
187
+ InternalDispatcher.prototype._errorHandler;
188
+ /**
189
+ * @type {?}
190
+ * @private
191
+ */
192
+ InternalDispatcher.prototype._injector;
193
+ /**
194
+ * @type {?}
195
+ * @private
196
+ */
197
+ InternalDispatcher.prototype._actions;
198
+ /**
199
+ * @type {?}
200
+ * @private
201
+ */
202
+ InternalDispatcher.prototype._actionResults;
203
+ /**
204
+ * @type {?}
205
+ * @private
206
+ */
207
+ InternalDispatcher.prototype._pluginManager;
208
+ /**
209
+ * @type {?}
210
+ * @private
211
+ */
212
+ InternalDispatcher.prototype._stateStream;
213
+ /**
214
+ * @type {?}
215
+ * @private
216
+ */
217
+ InternalDispatcher.prototype._ngxsExecutionStrategy;
218
+ }
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3hzL3N0b3JlLyIsInNvdXJjZXMiOlsic3JjL2ludGVybmFsL2Rpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBK0IsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUFTM0QsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLE9BQXNCOzs7WUFEMUUsVUFBVTs7QUFJWCxNQUFNLE9BQU8sa0JBQWtCOzs7Ozs7Ozs7SUFHN0IsWUFDVSxTQUFtQixFQUNuQixRQUF5QixFQUN6QixjQUErQyxFQUMvQyxjQUE2QixFQUM3QixZQUF5QixFQUN6QixzQkFBcUQ7UUFMckQsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBaUM7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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBFcnJvckhhbmRsZXIsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTVBUWSwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBmaWx0ZXIsIHNoYXJlUmVwbGF5LCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBjb21wb3NlIH0gZnJvbSAnLi4vdXRpbHMvY29tcG9zZSc7XG5pbXBvcnQgeyBBY3Rpb25Db250ZXh0LCBBY3Rpb25TdGF0dXMsIEludGVybmFsQWN0aW9ucyB9IGZyb20gJy4uL2FjdGlvbnMtc3RyZWFtJztcbmltcG9ydCB7IFN0YXRlU3RyZWFtIH0gZnJvbSAnLi9zdGF0ZS1zdHJlYW0nO1xuaW1wb3J0IHsgUGx1Z2luTWFuYWdlciB9IGZyb20gJy4uL3BsdWdpbi1tYW5hZ2VyJztcbmltcG9ydCB7IEludGVybmFsTmd4c0V4ZWN1dGlvblN0cmF0ZWd5IH0gZnJvbSAnLi4vZXhlY3V0aW9uL2ludGVybmFsLW5neHMtZXhlY3V0aW9uLXN0cmF0ZWd5JztcbmltcG9ydCB7IGxlYXZlTmd4cyB9IGZyb20gJy4uL29wZXJhdG9ycy9sZWF2ZS1uZ3hzJztcbmltcG9ydCB7IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UgfSBmcm9tICcuLi91dGlscy91dGlscyc7XG5cbi8qKlxuICogSW50ZXJuYWwgQWN0aW9uIHJlc3VsdCBzdHJlYW0gdGhhdCBpcyBlbWl0dGVkIHdoZW4gYW4gYWN0aW9uIGlzIGNvbXBsZXRlZC5cbiAqIFRoaXMgaXMgdXNlZCBhcyBhIG1ldGhvZCBvZiByZXR1cm5pbmcgdGhlIGFjdGlvbiByZXN1bHQgdG8gdGhlIGRpc3BhdGNoZXJcbiAqIGZvciB0aGUgb2JzZXJ2YWJsZSByZXR1cm5lZCBieSB0aGUgZGlzcGF0Y2goLi4uKSBjYWxsLlxuICogVGhlIGRpc3BhdGNoZXIgdGhlbiBhc3luY2hyb25vdXNseSBwdXNoZXMgdGhlIHJlc3VsdCBmcm9tIHRoaXMgc3RyZWFtIG9udG8gdGhlIG1haW4gYWN0aW9uIHN0cmVhbSBhcyBhIHJlc3VsdC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEludGVybmFsRGlzcGF0Y2hlZEFjdGlvblJlc3VsdHMgZXh0ZW5kcyBTdWJqZWN0PEFjdGlvbkNvbnRleHQ+IHt9XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJbnRlcm5hbERpc3BhdGNoZXIge1xuICBwcml2YXRlIF9lcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBfYWN0aW9uczogSW50ZXJuYWxBY3Rpb25zLFxuICAgIHByaXZhdGUgX2FjdGlvblJlc3VsdHM6IEludGVybmFsRGlzcGF0Y2hlZEFjdGlvblJlc3VsdHMsXG4gICAgcHJpdmF0ZSBfcGx1Z2luTWFuYWdlcjogUGx1Z2luTWFuYWdlcixcbiAgICBwcml2YXRlIF9zdGF0ZVN0cmVhbTogU3RhdGVTdHJlYW0sXG4gICAgcHJpdmF0ZSBfbmd4c0V4ZWN1dGlvblN0cmF0ZWd5OiBJbnRlcm5hbE5neHNFeGVjdXRpb25TdHJhdGVneVxuICApIHt9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgZXZlbnQocykuXG4gICAqL1xuICBkaXNwYXRjaChhY3Rpb25PckFjdGlvbnM6IGFueSB8IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9uZ3hzRXhlY3V0aW9uU3RyYXRlZ3kuZW50ZXIoKCkgPT5cbiAgICAgIHRoaXMuZGlzcGF0Y2hCeUV2ZW50cyhhY3Rpb25PckFjdGlvbnMpXG4gICAgKTtcblxuICAgIHJlc3VsdC5zdWJzY3JpYmUoe1xuICAgICAgZXJyb3I6IGVycm9yID0+XG4gICAgICAgIHRoaXMuX25neHNFeGVjdXRpb25TdHJhdGVneS5sZWF2ZSgoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFJldHJpZXZlIGxhemlseSB0byBhdm9pZCBjeWNsaWMgZGVwZW5kZW5jeSBleGNlcHRpb25cbiAgICAgICAgICAgIHRoaXMuX2Vycm9ySGFuZGxlciA9IHRoaXMuX2Vycm9ySGFuZGxlciB8fCB0aGlzLl9pbmplY3Rvci5nZXQoRXJyb3JIYW5kbGVyKTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5waXBlKGxlYXZlTmd4cyh0aGlzLl9uZ3hzRXhlY3V0aW9uU3RyYXRlZ3kpKTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hCeUV2ZW50cyhhY3Rpb25PckFjdGlvbnM6IGFueSB8IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhY3Rpb25PckFjdGlvbnMpKSB7XG4gICAgICBpZiAoYWN0aW9uT3JBY3Rpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG9mKHRoaXMuX3N0YXRlU3RyZWFtLmdldFZhbHVlKCkpO1xuICAgICAgcmV0dXJuIGZvcmtKb2luKGFjdGlvbk9yQWN0aW9ucy5tYXAoYWN0aW9uID0+IHRoaXMuZGlzcGF0Y2hTaW5nbGUoYWN0aW9uKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaFNpbmdsZShhY3Rpb25PckFjdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hTaW5nbGUoYWN0aW9uOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgIGNvbnN0IHR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UoYWN0aW9uKTtcbiAgICAgIGlmICghdHlwZSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhpcyBhY3Rpb24gZG9lc24ndCBoYXZlIGEgdHlwZSBwcm9wZXJ0eTogJHthY3Rpb24uY29uc3RydWN0b3IubmFtZX1gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLl9zdGF0ZVN0cmVhbS5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLl9wbHVnaW5NYW5hZ2VyLnBsdWdpbnM7XG5cbiAgICByZXR1cm4gKGNvbXBvc2UoW1xuICAgICAgLi4ucGx1Z2lucyxcbiAgICAgIChuZXh0U3RhdGU6IGFueSwgbmV4dEFjdGlvbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChuZXh0U3RhdGUgIT09IHByZXZTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuX3N0YXRlU3RyZWFtLm5leHQobmV4dFN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3Rpb25SZXN1bHQkID0gdGhpcy5nZXRBY3Rpb25SZXN1bHRTdHJlYW0obmV4dEFjdGlvbik7XG4gICAgICAgIGFjdGlvblJlc3VsdCQuc3Vic2NyaWJlKGN0eCA9PiB0aGlzLl9hY3Rpb25zLm5leHQoY3R4KSk7XG4gICAgICAgIHRoaXMuX2FjdGlvbnMubmV4dCh7IGFjdGlvbjogbmV4dEFjdGlvbiwgc3RhdHVzOiBBY3Rpb25TdGF0dXMuRGlzcGF0Y2hlZCB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRGlzcGF0Y2hPYnNlcnZhYmxlKGFjdGlvblJlc3VsdCQpO1xuICAgICAgfVxuICAgIF0pKHByZXZTdGF0ZSwgYWN0aW9uKSBhcyBPYnNlcnZhYmxlPGFueT4pLnBpcGUoc2hhcmVSZXBsYXkoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGlvblJlc3VsdFN0cmVhbShhY3Rpb246IGFueSk6IE9ic2VydmFibGU8QWN0aW9uQ29udGV4dD4ge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25SZXN1bHRzLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIChjdHg6IEFjdGlvbkNvbnRleHQpID0+IGN0eC5hY3Rpb24gPT09IGFjdGlvbiAmJiBjdHguc3RhdHVzICE9PSBBY3Rpb25TdGF0dXMuRGlzcGF0Y2hlZFxuICAgICAgKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGlzcGF0Y2hPYnNlcnZhYmxlKGFjdGlvblJlc3VsdCQ6IE9ic2VydmFibGU8QWN0aW9uQ29udGV4dD4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBhY3Rpb25SZXN1bHQkXG4gICAgICAucGlwZShcbiAgICAgICAgZXhoYXVzdE1hcCgoY3R4OiBBY3Rpb25Db250ZXh0KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChjdHguc3RhdHVzKSB7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblN0YXR1cy5TdWNjZXNzZnVsOlxuICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5fc3RhdGVTdHJlYW0uZ2V0VmFsdWUoKSk7XG4gICAgICAgICAgICBjYXNlIEFjdGlvblN0YXR1cy5FcnJvcmVkOlxuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihjdHguZXJyb3IpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKHNoYXJlUmVwbGF5KCkpO1xuICB9XG59XG4iXX0=