@ngxs/store 3.7.3-dev.master-10b0883 → 3.7.4

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 (256) 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 +392 -392
  6. package/bundles/ngxs-store-internals.umd.js.map +1 -1
  7. package/bundles/ngxs-store-internals.umd.min.js.map +1 -1
  8. package/bundles/ngxs-store-operators.umd.js +310 -311
  9. package/bundles/ngxs-store-operators.umd.js.map +1 -1
  10. package/bundles/ngxs-store-operators.umd.min.js +1 -1
  11. package/bundles/ngxs-store-operators.umd.min.js.map +1 -1
  12. package/bundles/ngxs-store.umd.js +4474 -4478
  13. package/bundles/ngxs-store.umd.js.map +1 -1
  14. package/bundles/ngxs-store.umd.min.js.map +1 -1
  15. package/esm2015/index.js +13 -13
  16. package/esm2015/internals/angular.js +20 -20
  17. package/esm2015/internals/decorator-injector-adapter.js +204 -204
  18. package/esm2015/internals/index.js +11 -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 +8 -8
  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 +22 -22
  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 -38
  43. package/esm2015/operators/remove-item.js +34 -34
  44. package/esm2015/operators/update-item.js +52 -54
  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 -138
  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 +49 -49
  52. package/esm2015/src/decorators/select/select.js +81 -81
  53. package/esm2015/src/decorators/select/symbols.js +94 -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 +83 -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 +217 -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 +449 -449
  67. package/esm2015/src/internal/state-operations.js +133 -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 +157 -157
  72. package/esm2015/src/modules/ngxs-feature.module.js +63 -63
  73. package/esm2015/src/modules/ngxs-root.module.js +52 -52
  74. package/esm2015/src/operators/leave-ngxs.js +58 -58
  75. package/esm2015/src/operators/of-action.js +191 -197
  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 +220 -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/decorator-injector-adapter.js +204 -204
  92. package/esm5/internals/index.js +11 -11
  93. package/esm5/internals/initial-state.js +45 -45
  94. package/esm5/internals/internal-tokens.js +16 -16
  95. package/esm5/internals/memoize.js +71 -71
  96. package/esm5/internals/ngxs-bootstrapper.js +56 -56
  97. package/esm5/internals/ngxs-store-internals.js +8 -8
  98. package/esm5/internals/src/symbols.js +14 -14
  99. package/esm5/internals/symbols.js +14 -14
  100. package/esm5/internals/testing/fresh-platform.js +121 -121
  101. package/esm5/internals/testing/helpers/ngxs-test.component.js +32 -32
  102. package/esm5/internals/testing/helpers/ngxs-test.module.js +32 -32
  103. package/esm5/internals/testing/index.js +8 -8
  104. package/esm5/internals/testing/ngxs-store-internals-testing.js +8 -8
  105. package/esm5/internals/testing/ngxs.setup.js +98 -98
  106. package/esm5/internals/testing/skip-console-logging.js +62 -62
  107. package/esm5/internals/testing/symbol.js +29 -29
  108. package/esm5/ngxs-store.js +22 -22
  109. package/esm5/operators/append.js +31 -31
  110. package/esm5/operators/compose.js +28 -28
  111. package/esm5/operators/iif.js +56 -56
  112. package/esm5/operators/index.js +18 -18
  113. package/esm5/operators/insert-item.js +41 -41
  114. package/esm5/operators/internals.js +5 -5
  115. package/esm5/operators/ngxs-store-operators.js +8 -8
  116. package/esm5/operators/patch.js +40 -39
  117. package/esm5/operators/remove-item.js +34 -34
  118. package/esm5/operators/update-item.js +52 -54
  119. package/esm5/operators/utils.js +50 -50
  120. package/esm5/src/actions/actions.js +62 -62
  121. package/esm5/src/actions/symbols.js +39 -39
  122. package/esm5/src/actions-stream.js +186 -184
  123. package/esm5/src/configs/messages.config.js +79 -79
  124. package/esm5/src/decorators/action.js +60 -60
  125. package/esm5/src/decorators/select/select-factory.js +50 -50
  126. package/esm5/src/decorators/select/select.js +87 -87
  127. package/esm5/src/decorators/select/symbols.js +95 -95
  128. package/esm5/src/decorators/selector/selector.js +59 -59
  129. package/esm5/src/decorators/selector/symbols.js +5 -5
  130. package/esm5/src/decorators/selector-options.js +34 -34
  131. package/esm5/src/decorators/state.js +84 -84
  132. package/esm5/src/execution/dispatch-outside-zone-ngxs-execution-strategy.js +123 -123
  133. package/esm5/src/execution/internal-ngxs-execution-strategy.js +54 -54
  134. package/esm5/src/execution/noop-ngxs-execution-strategy.js +43 -43
  135. package/esm5/src/execution/symbols.js +52 -52
  136. package/esm5/src/internal/dispatcher.js +253 -253
  137. package/esm5/src/internal/internals.js +495 -495
  138. package/esm5/src/internal/lifecycle-state-manager.js +177 -177
  139. package/esm5/src/internal/state-context-factory.js +146 -146
  140. package/esm5/src/internal/state-factory.js +575 -575
  141. package/esm5/src/internal/state-operations.js +143 -143
  142. package/esm5/src/internal/state-operators.js +34 -34
  143. package/esm5/src/internal/state-stream.js +37 -37
  144. package/esm5/src/ivy/ivy-enabled-in-dev-mode.js +28 -28
  145. package/esm5/src/module.js +200 -200
  146. package/esm5/src/modules/ngxs-feature.module.js +65 -65
  147. package/esm5/src/modules/ngxs-root.module.js +47 -47
  148. package/esm5/src/operators/leave-ngxs.js +58 -58
  149. package/esm5/src/operators/of-action.js +217 -223
  150. package/esm5/src/plugin-manager.js +82 -82
  151. package/esm5/src/plugin_api.js +10 -10
  152. package/esm5/src/public_api.js +29 -29
  153. package/esm5/src/public_to_deprecate.js +64 -64
  154. package/esm5/src/state-token/state-token.js +57 -57
  155. package/esm5/src/state-token/symbols.js +5 -5
  156. package/esm5/src/store.js +241 -241
  157. package/esm5/src/symbols.js +229 -229
  158. package/esm5/src/utils/compose.js +55 -55
  159. package/esm5/src/utils/freeze.js +35 -35
  160. package/esm5/src/utils/selector-utils.js +230 -230
  161. package/esm5/src/utils/store-validators.js +78 -78
  162. package/esm5/src/utils/utils.js +151 -151
  163. package/fesm2015/ngxs-store-internals-testing.js +274 -274
  164. package/fesm2015/ngxs-store-internals-testing.js.map +1 -1
  165. package/fesm2015/ngxs-store-internals.js +373 -373
  166. package/fesm2015/ngxs-store-internals.js.map +1 -1
  167. package/fesm2015/ngxs-store-operators.js +312 -313
  168. package/fesm2015/ngxs-store-operators.js.map +1 -1
  169. package/fesm2015/ngxs-store.js +3990 -3994
  170. package/fesm2015/ngxs-store.js.map +1 -1
  171. package/fesm5/ngxs-store-internals-testing.js +321 -321
  172. package/fesm5/ngxs-store-internals-testing.js.map +1 -1
  173. package/fesm5/ngxs-store-internals.js +398 -398
  174. package/fesm5/ngxs-store-internals.js.map +1 -1
  175. package/fesm5/ngxs-store-operators.js +316 -317
  176. package/fesm5/ngxs-store-operators.js.map +1 -1
  177. package/fesm5/ngxs-store.js +4486 -4490
  178. package/fesm5/ngxs-store.js.map +1 -1
  179. package/index.d.ts +8 -8
  180. package/internals/angular.d.ts +1 -1
  181. package/internals/decorator-injector-adapter.d.ts +15 -15
  182. package/internals/index.d.ts +7 -7
  183. package/internals/initial-state.d.ts +8 -8
  184. package/internals/internal-tokens.d.ts +9 -9
  185. package/internals/memoize.d.ts +9 -9
  186. package/internals/ngxs-bootstrapper.d.ts +13 -13
  187. package/internals/ngxs-store-internals.d.ts +4 -4
  188. package/internals/src/symbols.d.ts +7 -7
  189. package/internals/symbols.d.ts +7 -7
  190. package/internals/testing/fresh-platform.d.ts +1 -1
  191. package/internals/testing/helpers/ngxs-test.component.d.ts +5 -5
  192. package/internals/testing/helpers/ngxs-test.module.d.ts +4 -4
  193. package/internals/testing/index.d.ts +4 -4
  194. package/internals/testing/ngxs-store-internals-testing.d.ts +4 -4
  195. package/internals/testing/ngxs.setup.d.ts +7 -7
  196. package/internals/testing/skip-console-logging.d.ts +1 -1
  197. package/internals/testing/symbol.d.ts +14 -14
  198. package/ngxs-store.d.ts +19 -19
  199. package/ngxs-store.metadata.json +1 -1
  200. package/operators/append.d.ts +6 -6
  201. package/operators/compose.d.ts +2 -3
  202. package/operators/iif.d.ts +11 -11
  203. package/operators/index.d.ts +13 -13
  204. package/operators/insert-item.d.ts +7 -7
  205. package/operators/internals.d.ts +2 -2
  206. package/operators/ngxs-store-operators.d.ts +4 -4
  207. package/operators/ngxs-store-operators.metadata.json +1 -1
  208. package/operators/patch.d.ts +10 -6
  209. package/operators/remove-item.d.ts +7 -7
  210. package/operators/update-item.d.ts +10 -10
  211. package/operators/utils.d.ts +9 -10
  212. package/package.json +2 -2
  213. package/src/actions/actions.d.ts +15 -15
  214. package/src/actions/symbols.d.ts +21 -21
  215. package/src/actions-stream.d.ts +49 -49
  216. package/src/configs/messages.config.d.ts +11 -11
  217. package/src/decorators/action.d.ts +5 -5
  218. package/src/decorators/select/select-factory.d.ts +13 -13
  219. package/src/decorators/select/select.d.ts +4 -4
  220. package/src/decorators/select/symbols.d.ts +14 -14
  221. package/src/decorators/selector/selector.d.ts +5 -5
  222. package/src/decorators/selector/symbols.d.ts +4 -4
  223. package/src/decorators/selector-options.d.ts +5 -5
  224. package/src/decorators/state.d.ts +6 -6
  225. package/src/execution/dispatch-outside-zone-ngxs-execution-strategy.d.ts +11 -11
  226. package/src/execution/internal-ngxs-execution-strategy.d.ts +7 -7
  227. package/src/execution/noop-ngxs-execution-strategy.d.ts +5 -5
  228. package/src/execution/symbols.d.ts +10 -10
  229. package/src/internal/dispatcher.d.ts +32 -32
  230. package/src/internal/internals.d.ts +166 -166
  231. package/src/internal/lifecycle-state-manager.d.ts +20 -20
  232. package/src/internal/state-context-factory.d.ts +15 -15
  233. package/src/internal/state-factory.d.ts +57 -57
  234. package/src/internal/state-operations.d.ts +19 -19
  235. package/src/internal/state-operators.d.ts +2 -2
  236. package/src/internal/state-stream.d.ts +11 -11
  237. package/src/ivy/ivy-enabled-in-dev-mode.d.ts +6 -6
  238. package/src/module.d.ts +23 -23
  239. package/src/modules/ngxs-feature.module.d.ts +13 -13
  240. package/src/modules/ngxs-root.module.d.ts +13 -13
  241. package/src/operators/leave-ngxs.d.ts +7 -7
  242. package/src/operators/of-action.d.ts +43 -56
  243. package/src/plugin-manager.d.ts +10 -10
  244. package/src/plugin_api.d.ts +5 -5
  245. package/src/public_api.d.ts +17 -17
  246. package/src/public_to_deprecate.d.ts +21 -21
  247. package/src/state-token/state-token.d.ts +7 -7
  248. package/src/state-token/symbols.d.ts +5 -5
  249. package/src/store.d.ts +59 -59
  250. package/src/symbols.d.ts +138 -138
  251. package/src/utils/compose.d.ts +23 -23
  252. package/src/utils/freeze.d.ts +5 -5
  253. package/src/utils/selector-utils.d.ts +23 -23
  254. package/src/utils/store-validators.d.ts +7 -7
  255. package/src/utils/utils.d.ts +46 -46
  256. package/types/index.d.ts +2 -2
@@ -1,449 +1,449 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { Injectable, Injector, Optional, SkipSelf, Inject } from '@angular/core';
6
- import { forkJoin, from, Observable, of, throwError, Subject } from 'rxjs';
7
- import { catchError, defaultIfEmpty, filter, map, mergeMap, shareReplay, takeUntil } from 'rxjs/operators';
8
- import { META_KEY, NgxsConfig } from '../symbols';
9
- import { buildGraph, findFullParentPath, isObject, nameToState, propGetter, topologicalSort, getStoreMetadata } from './internals';
10
- import { getActionTypeFromInstance, getValue, setValue } from '../utils/utils';
11
- import { ofActionDispatched } from '../operators/of-action';
12
- import { InternalActions } from '../actions-stream';
13
- import { InternalDispatchedActionResults } from '../internal/dispatcher';
14
- import { StateContextFactory } from '../internal/state-context-factory';
15
- import { StoreValidators } from '../utils/store-validators';
16
- import { INITIAL_STATE_TOKEN, memoize } from '@ngxs/store/internals';
17
- /**
18
- * State factory class
19
- * @ignore
20
- */
21
- export class StateFactory {
22
- /**
23
- * @param {?} _injector
24
- * @param {?} _config
25
- * @param {?} _parentFactory
26
- * @param {?} _actions
27
- * @param {?} _actionResults
28
- * @param {?} _stateContextFactory
29
- * @param {?} _initialState
30
- */
31
- constructor(_injector, _config, _parentFactory, _actions, _actionResults, _stateContextFactory, _initialState) {
32
- this._injector = _injector;
33
- this._config = _config;
34
- this._parentFactory = _parentFactory;
35
- this._actions = _actions;
36
- this._actionResults = _actionResults;
37
- this._stateContextFactory = _stateContextFactory;
38
- this._initialState = _initialState;
39
- this._actionsSubscription = null;
40
- this._states = [];
41
- this._statesByName = {};
42
- this._statePaths = {};
43
- this.getRuntimeSelectorContext = memoize((/**
44
- * @return {?}
45
- */
46
- () => {
47
- /** @type {?} */
48
- const stateFactory = this;
49
- /**
50
- * @param {?} key
51
- * @return {?}
52
- */
53
- function resolveGetter(key) {
54
- /** @type {?} */
55
- const path = stateFactory.statePaths[key];
56
- return path ? propGetter(path.split('.'), stateFactory._config) : null;
57
- }
58
- /** @type {?} */
59
- const context = this._parentFactory
60
- ? this._parentFactory.getRuntimeSelectorContext()
61
- : {
62
- /**
63
- * @param {?} key
64
- * @return {?}
65
- */
66
- getStateGetter(key) {
67
- /** @type {?} */
68
- let getter = resolveGetter(key);
69
- if (getter) {
70
- return getter;
71
- }
72
- return (/**
73
- * @param {...?} args
74
- * @return {?}
75
- */
76
- (...args) => {
77
- // Late loaded getter
78
- if (!getter) {
79
- getter = resolveGetter(key);
80
- }
81
- return getter ? getter(...args) : undefined;
82
- });
83
- },
84
- /**
85
- * @param {?=} localOptions
86
- * @return {?}
87
- */
88
- getSelectorOptions(localOptions) {
89
- /** @type {?} */
90
- const globalSelectorOptions = stateFactory._config.selectorOptions;
91
- return Object.assign({}, globalSelectorOptions, (localOptions || {}));
92
- }
93
- };
94
- return context;
95
- }));
96
- }
97
- /**
98
- * @return {?}
99
- */
100
- get states() {
101
- return this._parentFactory ? this._parentFactory.states : this._states;
102
- }
103
- /**
104
- * @return {?}
105
- */
106
- get statesByName() {
107
- return this._parentFactory ? this._parentFactory.statesByName : this._statesByName;
108
- }
109
- /**
110
- * @private
111
- * @return {?}
112
- */
113
- get statePaths() {
114
- return this._parentFactory ? this._parentFactory.statePaths : this._statePaths;
115
- }
116
- /**
117
- * @private
118
- * @param {?} defaults
119
- * @return {?}
120
- */
121
- static cloneDefaults(defaults) {
122
- /** @type {?} */
123
- let value = {};
124
- if (Array.isArray(defaults)) {
125
- value = defaults.slice();
126
- }
127
- else if (isObject(defaults)) {
128
- value = Object.assign({}, defaults);
129
- }
130
- else if (defaults === undefined) {
131
- value = {};
132
- }
133
- else {
134
- value = defaults;
135
- }
136
- return value;
137
- }
138
- /**
139
- * @return {?}
140
- */
141
- ngOnDestroy() {
142
- // I'm using non-null assertion here since `_actionsSubscrition` will
143
- // be 100% defined. This is because `ngOnDestroy()` cannot be invoked
144
- // on the `StateFactory` until its initialized :) An it's initialized
145
- // for the first time along with the `NgxsRootModule`.
146
- (/** @type {?} */ (this._actionsSubscription)).unsubscribe();
147
- }
148
- /**
149
- * Add a new state to the global defs.
150
- * @param {?} stateClasses
151
- * @return {?}
152
- */
153
- add(stateClasses) {
154
- // Caretaker note: we have still left the `typeof` condition in order to avoid
155
- // creating a breaking change for projects that still use the View Engine.
156
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
157
- StoreValidators.checkThatStateClassesHaveBeenDecorated(stateClasses);
158
- }
159
- const { newStates } = this.addToStatesMap(stateClasses);
160
- if (!newStates.length)
161
- return [];
162
- /** @type {?} */
163
- const stateGraph = buildGraph(newStates);
164
- /** @type {?} */
165
- const sortedStates = topologicalSort(stateGraph);
166
- /** @type {?} */
167
- const paths = findFullParentPath(stateGraph);
168
- /** @type {?} */
169
- const nameGraph = nameToState(newStates);
170
- /** @type {?} */
171
- const bootstrappedStores = [];
172
- for (const name of sortedStates) {
173
- /** @type {?} */
174
- const stateClass = nameGraph[name];
175
- /** @type {?} */
176
- const path = paths[name];
177
- /** @type {?} */
178
- const meta = (/** @type {?} */ (stateClass[META_KEY]));
179
- this.addRuntimeInfoToMeta(meta, path);
180
- /** @type {?} */
181
- const stateMap = {
182
- name,
183
- path,
184
- isInitialised: false,
185
- actions: meta.actions,
186
- instance: this._injector.get(stateClass),
187
- defaults: StateFactory.cloneDefaults(meta.defaults)
188
- };
189
- // ensure our store hasn't already been added
190
- // but don't throw since it could be lazy
191
- // loaded from different paths
192
- if (!this.hasBeenMountedAndBootstrapped(name, path)) {
193
- bootstrappedStores.push(stateMap);
194
- }
195
- this.states.push(stateMap);
196
- }
197
- return bootstrappedStores;
198
- }
199
- /**
200
- * Add a set of states to the store and return the defaults
201
- * @param {?} stateClasses
202
- * @return {?}
203
- */
204
- addAndReturnDefaults(stateClasses) {
205
- /** @type {?} */
206
- const classes = stateClasses || [];
207
- /** @type {?} */
208
- const mappedStores = this.add(classes);
209
- /** @type {?} */
210
- const defaults = mappedStores.reduce((/**
211
- * @param {?} result
212
- * @param {?} mappedStore
213
- * @return {?}
214
- */
215
- (result, mappedStore) => setValue(result, mappedStore.path, mappedStore.defaults)), {});
216
- return { defaults, states: mappedStores };
217
- }
218
- /**
219
- * Bind the actions to the handlers
220
- * @return {?}
221
- */
222
- connectActionHandlers() {
223
- if (this._actionsSubscription !== null)
224
- return;
225
- /** @type {?} */
226
- const dispatched$ = new Subject();
227
- this._actionsSubscription = this._actions
228
- .pipe(filter((/**
229
- * @param {?} ctx
230
- * @return {?}
231
- */
232
- (ctx) => ctx.status === "DISPATCHED" /* Dispatched */)), mergeMap((/**
233
- * @param {?} ctx
234
- * @return {?}
235
- */
236
- ctx => {
237
- dispatched$.next(ctx);
238
- /** @type {?} */
239
- const action = ctx.action;
240
- return this.invokeActions(dispatched$, (/** @type {?} */ (action))).pipe(map((/**
241
- * @return {?}
242
- */
243
- () => (/** @type {?} */ ({ action, status: "SUCCESSFUL" /* Successful */ })))), defaultIfEmpty((/** @type {?} */ ({ action, status: "CANCELED" /* Canceled */ }))), catchError((/**
244
- * @param {?} error
245
- * @return {?}
246
- */
247
- error => of((/** @type {?} */ ({ action, status: "ERRORED" /* Errored */, error }))))));
248
- })))
249
- .subscribe((/**
250
- * @param {?} ctx
251
- * @return {?}
252
- */
253
- ctx => this._actionResults.next(ctx)));
254
- }
255
- /**
256
- * Invoke actions on the states.
257
- * @param {?} dispatched$
258
- * @param {?} action
259
- * @return {?}
260
- */
261
- invokeActions(dispatched$, action) {
262
- /** @type {?} */
263
- const type = (/** @type {?} */ (getActionTypeFromInstance(action)));
264
- /** @type {?} */
265
- const results = [];
266
- for (const metadata of this.states) {
267
- /** @type {?} */
268
- const actionMetas = metadata.actions[type];
269
- if (actionMetas) {
270
- for (const actionMeta of actionMetas) {
271
- /** @type {?} */
272
- const stateContext = this._stateContextFactory.createStateContext(metadata);
273
- try {
274
- /** @type {?} */
275
- let result = metadata.instance[actionMeta.fn](stateContext, action);
276
- if (result instanceof Promise) {
277
- result = from(result);
278
- }
279
- if (result instanceof Observable) {
280
- // If this observable has been completed w/o emitting
281
- // any value then we wouldn't want to complete the whole chain
282
- // of actions. Since if any observable completes then
283
- // action will be canceled.
284
- // For instance if any action handler would've had such statement:
285
- // `handler(ctx) { return EMPTY; }`
286
- // then the action will be canceled.
287
- // See https://github.com/ngxs/store/issues/1568
288
- result = result.pipe(mergeMap((/**
289
- * @param {?} value
290
- * @return {?}
291
- */
292
- (value) => {
293
- if (value instanceof Promise) {
294
- return from(value);
295
- }
296
- if (value instanceof Observable) {
297
- return value;
298
- }
299
- return of(value);
300
- })), defaultIfEmpty({}));
301
- if (actionMeta.options.cancelUncompleted) {
302
- // todo: ofActionDispatched should be used with action class
303
- result = result.pipe(takeUntil(dispatched$.pipe(ofActionDispatched((/** @type {?} */ (action))))));
304
- }
305
- }
306
- else {
307
- result = of({}).pipe(shareReplay());
308
- }
309
- results.push(result);
310
- }
311
- catch (e) {
312
- results.push(throwError(e));
313
- }
314
- }
315
- }
316
- }
317
- if (!results.length) {
318
- results.push(of({}));
319
- }
320
- return forkJoin(results);
321
- }
322
- /**
323
- * @private
324
- * @param {?} stateClasses
325
- * @return {?}
326
- */
327
- addToStatesMap(stateClasses) {
328
- /** @type {?} */
329
- const newStates = [];
330
- /** @type {?} */
331
- const statesMap = this.statesByName;
332
- for (const stateClass of stateClasses) {
333
- /** @type {?} */
334
- const stateName = (/** @type {?} */ (getStoreMetadata(stateClass).name));
335
- // Caretaker note: we have still left the `typeof` condition in order to avoid
336
- // creating a breaking change for projects that still use the View Engine.
337
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
338
- StoreValidators.checkThatStateNameIsUnique(stateName, stateClass, statesMap);
339
- }
340
- /** @type {?} */
341
- const unmountedState = !statesMap[stateName];
342
- if (unmountedState) {
343
- newStates.push(stateClass);
344
- statesMap[stateName] = stateClass;
345
- }
346
- }
347
- return { newStates };
348
- }
349
- /**
350
- * @private
351
- * @param {?} meta
352
- * @param {?} path
353
- * @return {?}
354
- */
355
- addRuntimeInfoToMeta(meta, path) {
356
- this.statePaths[(/** @type {?} */ (meta.name))] = path;
357
- // TODO: v4 - we plan to get rid of the path property because it is non-deterministic
358
- // we can do this when we get rid of the incorrectly exposed getStoreMetadata
359
- // We will need to come up with an alternative in v4 because this is used by many plugins
360
- meta.path = path;
361
- }
362
- /**
363
- * \@description
364
- * the method checks if the state has already been added to the tree
365
- * and completed the life cycle
366
- * @private
367
- * @param {?} name
368
- * @param {?} path
369
- * @return {?}
370
- */
371
- hasBeenMountedAndBootstrapped(name, path) {
372
- /** @type {?} */
373
- const valueIsBootstrappedInInitialState = getValue(this._initialState, path) !== undefined;
374
- return this.statesByName[name] && valueIsBootstrappedInInitialState;
375
- }
376
- }
377
- StateFactory.decorators = [
378
- { type: Injectable }
379
- ];
380
- /** @nocollapse */
381
- StateFactory.ctorParameters = () => [
382
- { type: Injector },
383
- { type: NgxsConfig },
384
- { type: StateFactory, decorators: [{ type: Optional }, { type: SkipSelf }] },
385
- { type: InternalActions },
386
- { type: InternalDispatchedActionResults },
387
- { type: StateContextFactory },
388
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [INITIAL_STATE_TOKEN,] }] }
389
- ];
390
- if (false) {
391
- /**
392
- * @type {?}
393
- * @private
394
- */
395
- StateFactory.prototype._actionsSubscription;
396
- /**
397
- * @type {?}
398
- * @private
399
- */
400
- StateFactory.prototype._states;
401
- /**
402
- * @type {?}
403
- * @private
404
- */
405
- StateFactory.prototype._statesByName;
406
- /**
407
- * @type {?}
408
- * @private
409
- */
410
- StateFactory.prototype._statePaths;
411
- /** @type {?} */
412
- StateFactory.prototype.getRuntimeSelectorContext;
413
- /**
414
- * @type {?}
415
- * @private
416
- */
417
- StateFactory.prototype._injector;
418
- /**
419
- * @type {?}
420
- * @private
421
- */
422
- StateFactory.prototype._config;
423
- /**
424
- * @type {?}
425
- * @private
426
- */
427
- StateFactory.prototype._parentFactory;
428
- /**
429
- * @type {?}
430
- * @private
431
- */
432
- StateFactory.prototype._actions;
433
- /**
434
- * @type {?}
435
- * @private
436
- */
437
- StateFactory.prototype._actionResults;
438
- /**
439
- * @type {?}
440
- * @private
441
- */
442
- StateFactory.prototype._stateContextFactory;
443
- /**
444
- * @type {?}
445
- * @private
446
- */
447
- StateFactory.prototype._initialState;
448
- }
449
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3hzL3N0b3JlLyIsInNvdXJjZXMiOlsic3JjL2ludGVybmFsL3N0YXRlLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFnQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUNMLFVBQVUsRUFDVixjQUFjLEVBQ2QsTUFBTSxFQUNOLEdBQUcsRUFDSCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xELE9BQU8sRUFDTCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLFFBQVEsRUFHUixXQUFXLEVBQ1gsVUFBVSxFQUtWLGVBQWUsRUFHZixnQkFBZ0IsRUFDakIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQStCLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQWlCLE9BQU8sRUFB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QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCwgU2tpcFNlbGYsIEluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IsIFN1YnNjcmlwdGlvbiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgZGVmYXVsdElmRW1wdHksXG4gIGZpbHRlcixcbiAgbWFwLFxuICBtZXJnZU1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHRha2VVbnRpbFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1FVEFfS0VZLCBOZ3hzQ29uZmlnIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQge1xuICBidWlsZEdyYXBoLFxuICBmaW5kRnVsbFBhcmVudFBhdGgsXG4gIGlzT2JqZWN0LFxuICBNYXBwZWRTdG9yZSxcbiAgTWV0YURhdGFNb2RlbCxcbiAgbmFtZVRvU3RhdGUsXG4gIHByb3BHZXR0ZXIsXG4gIFN0YXRlQ2xhc3NJbnRlcm5hbCxcbiAgU3RhdGVLZXlHcmFwaCxcbiAgU3RhdGVzQW5kRGVmYXVsdHMsXG4gIFN0YXRlc0J5TmFtZSxcbiAgdG9wb2xvZ2ljYWxTb3J0LFxuICBSdW50aW1lU2VsZWN0b3JDb250ZXh0LFxuICBTaGFyZWRTZWxlY3Rvck9wdGlvbnMsXG4gIGdldFN0b3JlTWV0YWRhdGFcbn0gZnJvbSAnLi9pbnRlcm5hbHMnO1xuaW1wb3J0IHsgZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZSwgZ2V0VmFsdWUsIHNldFZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgb2ZBY3Rpb25EaXNwYXRjaGVkIH0gZnJvbSAnLi4vb3BlcmF0b3JzL29mLWFjdGlvbic7XG5pbXBvcnQgeyBBY3Rpb25Db250ZXh0LCBBY3Rpb25TdGF0dXMsIEludGVybmFsQWN0aW9ucyB9IGZyb20gJy4uL2FjdGlvbnMtc3RyZWFtJztcbmltcG9ydCB7IEludGVybmFsRGlzcGF0Y2hlZEFjdGlvblJlc3VsdHMgfSBmcm9tICcuLi9pbnRlcm5hbC9kaXNwYXRjaGVyJztcbmltcG9ydCB7IFN0YXRlQ29udGV4dEZhY3RvcnkgfSBmcm9tICcuLi9pbnRlcm5hbC9zdGF0ZS1jb250ZXh0LWZhY3RvcnknO1xuaW1wb3J0IHsgU3RvcmVWYWxpZGF0b3JzIH0gZnJvbSAnLi4vdXRpbHMvc3RvcmUtdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBJTklUSUFMX1NUQVRFX1RPS0VOLCBQbGFpbk9iamVjdE9mLCBtZW1vaXplIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcblxuLyoqXG4gKiBTdGF0ZSBmYWN0b3J5IGNsYXNzXG4gKiBAaWdub3JlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdGF0ZUZhY3RvcnkgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9hY3Rpb25zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBOZ3hzQ29uZmlnLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQFNraXBTZWxmKClcbiAgICBwcml2YXRlIF9wYXJlbnRGYWN0b3J5OiBTdGF0ZUZhY3RvcnksXG4gICAgcHJpdmF0ZSBfYWN0aW9uczogSW50ZXJuYWxBY3Rpb25zLFxuICAgIHByaXZhdGUgX2FjdGlvblJlc3VsdHM6IEludGVybmFsRGlzcGF0Y2hlZEFjdGlvblJlc3VsdHMsXG4gICAgcHJpdmF0ZSBfc3RhdGVDb250ZXh0RmFjdG9yeTogU3RhdGVDb250ZXh0RmFjdG9yeSxcbiAgICBAT3B0aW9uYWwoKVxuICAgIEBJbmplY3QoSU5JVElBTF9TVEFURV9UT0tFTilcbiAgICBwcml2YXRlIF9pbml0aWFsU3RhdGU6IGFueVxuICApIHt9XG5cbiAgcHJpdmF0ZSBfc3RhdGVzOiBNYXBwZWRTdG9yZVtdID0gW107XG5cbiAgZ2V0IHN0YXRlcygpOiBNYXBwZWRTdG9yZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RmFjdG9yeSA/IHRoaXMuX3BhcmVudEZhY3Rvcnkuc3RhdGVzIDogdGhpcy5fc3RhdGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RhdGVzQnlOYW1lOiBTdGF0ZXNCeU5hbWUgPSB7fTtcblxuICBnZXQgc3RhdGVzQnlOYW1lKCk6IFN0YXRlc0J5TmFtZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudEZhY3RvcnkgPyB0aGlzLl9wYXJlbnRGYWN0b3J5LnN0YXRlc0J5TmFtZSA6IHRoaXMuX3N0YXRlc0J5TmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgX3N0YXRlUGF0aHM6IFBsYWluT2JqZWN0T2Y8c3RyaW5nPiA9IHt9O1xuXG4gIHByaXZhdGUgZ2V0IHN0YXRlUGF0aHMoKTogUGxhaW5PYmplY3RPZjxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RmFjdG9yeSA/IHRoaXMuX3BhcmVudEZhY3Rvcnkuc3RhdGVQYXRocyA6IHRoaXMuX3N0YXRlUGF0aHM7XG4gIH1cblxuICBnZXRSdW50aW1lU2VsZWN0b3JDb250ZXh0ID0gbWVtb2l6ZSgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVGYWN0b3J5ID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHJlc29sdmVHZXR0ZXIoa2V5OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBzdGF0ZUZhY3Rvcnkuc3RhdGVQYXRoc1trZXldO1xuICAgICAgcmV0dXJuIHBhdGggPyBwcm9wR2V0dGVyKHBhdGguc3BsaXQoJy4nKSwgc3RhdGVGYWN0b3J5Ll9jb25maWcpIDogbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0OiBSdW50aW1lU2VsZWN0b3JDb250ZXh0ID0gdGhpcy5fcGFyZW50RmFjdG9yeVxuICAgICAgPyB0aGlzLl9wYXJlbnRGYWN0b3J5LmdldFJ1bnRpbWVTZWxlY3RvckNvbnRleHQoKVxuICAgICAgOiB7XG4gICAgICAgICAgZ2V0U3RhdGVHZXR0ZXIoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIGxldCBnZXR0ZXIgPSByZXNvbHZlR2V0dGVyKGtleSk7XG4gICAgICAgICAgICBpZiAoZ2V0dGVyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXR0ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgLy8gTGF0ZSBsb2FkZWQgZ2V0dGVyXG4gICAgICAgICAgICAgIGlmICghZ2V0dGVyKSB7XG4gICAgICAgICAgICAgICAgZ2V0dGVyID0gcmVzb2x2ZUdldHRlcihrZXkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBnZXR0ZXIgPyBnZXR0ZXIoLi4uYXJncykgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0U2VsZWN0b3JPcHRpb25zKGxvY2FsT3B0aW9ucz86IFNoYXJlZFNlbGVjdG9yT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZ2xvYmFsU2VsZWN0b3JPcHRpb25zID0gc3RhdGVGYWN0b3J5Ll9jb25maWcuc2VsZWN0b3JPcHRpb25zO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uZ2xvYmFsU2VsZWN0b3JPcHRpb25zLFxuICAgICAgICAgICAgICAuLi4obG9jYWxPcHRpb25zIHx8IHt9KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH0pO1xuXG4gIHByaXZhdGUgc3RhdGljIGNsb25lRGVmYXVsdHMoZGVmYXVsdHM6IGFueSk6IGFueSB7XG4gICAgbGV0IHZhbHVlID0ge307XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0cykpIHtcbiAgICAgIHZhbHVlID0gZGVmYXVsdHMuc2xpY2UoKTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgdmFsdWUgPSB7IC4uLmRlZmF1bHRzIH07XG4gICAgfSBlbHNlIGlmIChkZWZhdWx0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGRlZmF1bHRzO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIEknbSB1c2luZyBub24tbnVsbCBhc3NlcnRpb24gaGVyZSBzaW5jZSBgX2FjdGlvbnNTdWJzY3JpdGlvbmAgd2lsbFxuICAgIC8vIGJlIDEwMCUgZGVmaW5lZC4gVGhpcyBpcyBiZWNhdXNlIGBuZ09uRGVzdHJveSgpYCBjYW5ub3QgYmUgaW52b2tlZFxuICAgIC8vIG9uIHRoZSBgU3RhdGVGYWN0b3J5YCB1bnRpbCBpdHMgaW5pdGlhbGl6ZWQgOikgQW4gaXQncyBpbml0aWFsaXplZFxuICAgIC8vIGZvciB0aGUgZmlyc3QgdGltZSBhbG9uZyB3aXRoIHRoZSBgTmd4c1Jvb3RNb2R1bGVgLlxuICAgIHRoaXMuX2FjdGlvbnNTdWJzY3JpcHRpb24hLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IHN0YXRlIHRvIHRoZSBnbG9iYWwgZGVmcy5cbiAgICovXG4gIGFkZChzdGF0ZUNsYXNzZXM6IFN0YXRlQ2xhc3NJbnRlcm5hbFtdKTogTWFwcGVkU3RvcmVbXSB7XG4gICAgLy8gQ2FyZXRha2VyIG5vdGU6IHdlIGhhdmUgc3RpbGwgbGVmdCB0aGUgYHR5cGVvZmAgY29uZGl0aW9uIGluIG9yZGVyIHRvIGF2b2lkXG4gICAgLy8gY3JlYXRpbmcgYSBicmVha2luZyBjaGFuZ2UgZm9yIHByb2plY3RzIHRoYXQgc3RpbGwgdXNlIHRoZSBWaWV3IEVuZ2luZS5cbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgICBTdG9yZVZhbGlkYXRvcnMuY2hlY2tUaGF0U3RhdGVDbGFzc2VzSGF2ZUJlZW5EZWNvcmF0ZWQoc3RhdGVDbGFzc2VzKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG5ld1N0YXRlcyB9ID0gdGhpcy5hZGRUb1N0YXRlc01hcChzdGF0ZUNsYXNzZXMpO1xuICAgIGlmICghbmV3U3RhdGVzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgc3RhdGVHcmFwaDogU3RhdGVLZXlHcmFwaCA9IGJ1aWxkR3JhcGgobmV3U3RhdGVzKTtcbiAgICBjb25zdCBzb3J0ZWRTdGF0ZXM6IHN0cmluZ1tdID0gdG9wb2xvZ2ljYWxTb3J0KHN0YXRlR3JhcGgpO1xuICAgIGNvbnN0IHBhdGhzOiBQbGFpbk9iamVjdE9mPHN0cmluZz4gPSBmaW5kRnVsbFBhcmVudFBhdGgoc3RhdGVHcmFwaCk7XG4gICAgY29uc3QgbmFtZUdyYXBoOiBQbGFpbk9iamVjdE9mPFN0YXRlQ2xhc3NJbnRlcm5hbD4gPSBuYW1lVG9TdGF0ZShuZXdTdGF0ZXMpO1xuICAgIGNvbnN0IGJvb3RzdHJhcHBlZFN0b3JlczogTWFwcGVkU3RvcmVbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHNvcnRlZFN0YXRlcykge1xuICAgICAgY29uc3Qgc3RhdGVDbGFzczogU3RhdGVDbGFzc0ludGVybmFsID0gbmFtZUdyYXBoW25hbWVdO1xuICAgICAgY29uc3QgcGF0aDogc3RyaW5nID0gcGF0aHNbbmFtZV07XG4gICAgICBjb25zdCBtZXRhOiBNZXRhRGF0YU1vZGVsID0gc3RhdGVDbGFzc1tNRVRBX0tFWV0hO1xuXG4gICAgICB0aGlzLmFkZFJ1bnRpbWVJbmZvVG9NZXRhKG1ldGEsIHBhdGgpO1xuXG4gICAgICBjb25zdCBzdGF0ZU1hcDogTWFwcGVkU3RvcmUgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGlzSW5pdGlhbGlzZWQ6IGZhbHNlLFxuICAgICAgICBhY3Rpb25zOiBtZXRhLmFjdGlvbnMsXG4gICAgICAgIGluc3RhbmNlOiB0aGlzLl9pbmplY3Rvci5nZXQoc3RhdGVDbGFzcyksXG4gICAgICAgIGRlZmF1bHRzOiBTdGF0ZUZhY3RvcnkuY2xvbmVEZWZhdWx0cyhtZXRhLmRlZmF1bHRzKVxuICAgICAgfTtcblxuICAgICAgLy8gZW5zdXJlIG91ciBzdG9yZSBoYXNuJ3QgYWxyZWFkeSBiZWVuIGFkZGVkXG4gICAgICAvLyBidXQgZG9uJ3QgdGhyb3cgc2luY2UgaXQgY291bGQgYmUgbGF6eVxuICAgICAgLy8gbG9hZGVkIGZyb20gZGlmZmVyZW50IHBhdGhzXG4gICAgICBpZiAoIXRoaXMuaGFzQmVlbk1vdW50ZWRBbmRCb290c3RyYXBwZWQobmFtZSwgcGF0aCkpIHtcbiAgICAgICAgYm9vdHN0cmFwcGVkU3RvcmVzLnB1c2goc3RhdGVNYXApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXRlcy5wdXNoKHN0YXRlTWFwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9vdHN0cmFwcGVkU3RvcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNldCBvZiBzdGF0ZXMgdG8gdGhlIHN0b3JlIGFuZCByZXR1cm4gdGhlIGRlZmF1bHRzXG4gICAqL1xuICBhZGRBbmRSZXR1cm5EZWZhdWx0cyhzdGF0ZUNsYXNzZXM6IFN0YXRlQ2xhc3NJbnRlcm5hbFtdKTogU3RhdGVzQW5kRGVmYXVsdHMge1xuICAgIGNvbnN0IGNsYXNzZXM6IFN0YXRlQ2xhc3NJbnRlcm5hbFtdID0gc3RhdGVDbGFzc2VzIHx8IFtdO1xuXG4gICAgY29uc3QgbWFwcGVkU3RvcmVzOiBNYXBwZWRTdG9yZVtdID0gdGhpcy5hZGQoY2xhc3Nlcyk7XG4gICAgY29uc3QgZGVmYXVsdHMgPSBtYXBwZWRTdG9yZXMucmVkdWNlKFxuICAgICAgKHJlc3VsdDogYW55LCBtYXBwZWRTdG9yZTogTWFwcGVkU3RvcmUpID0+XG4gICAgICAgIHNldFZhbHVlKHJlc3VsdCwgbWFwcGVkU3RvcmUucGF0aCwgbWFwcGVkU3RvcmUuZGVmYXVsdHMpLFxuICAgICAge31cbiAgICApO1xuICAgIHJldHVybiB7IGRlZmF1bHRzLCBzdGF0ZXM6IG1hcHBlZFN0b3JlcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgdGhlIGFjdGlvbnMgdG8gdGhlIGhhbmRsZXJzXG4gICAqL1xuICBjb25uZWN0QWN0aW9uSGFuZGxlcnMoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGlvbnNTdWJzY3JpcHRpb24gIT09IG51bGwpIHJldHVybjtcbiAgICBjb25zdCBkaXNwYXRjaGVkJCA9IG5ldyBTdWJqZWN0PEFjdGlvbkNvbnRleHQ+KCk7XG4gICAgdGhpcy5fYWN0aW9uc1N1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGlvbnNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGN0eDogQWN0aW9uQ29udGV4dCkgPT4gY3R4LnN0YXR1cyA9PT0gQWN0aW9uU3RhdHVzLkRpc3BhdGNoZWQpLFxuICAgICAgICBtZXJnZU1hcChjdHggPT4ge1xuICAgICAgICAgIGRpc3BhdGNoZWQkLm5leHQoY3R4KTtcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSBjdHguYWN0aW9uO1xuICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUFjdGlvbnMoZGlzcGF0Y2hlZCQsIGFjdGlvbiEpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4gPEFjdGlvbkNvbnRleHQ+eyBhY3Rpb24sIHN0YXR1czogQWN0aW9uU3RhdHVzLlN1Y2Nlc3NmdWwgfSksXG4gICAgICAgICAgICBkZWZhdWx0SWZFbXB0eSg8QWN0aW9uQ29udGV4dD57IGFjdGlvbiwgc3RhdHVzOiBBY3Rpb25TdGF0dXMuQ2FuY2VsZWQgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgICAgIG9mKDxBY3Rpb25Db250ZXh0PnsgYWN0aW9uLCBzdGF0dXM6IEFjdGlvblN0YXR1cy5FcnJvcmVkLCBlcnJvciB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGN0eCA9PiB0aGlzLl9hY3Rpb25SZXN1bHRzLm5leHQoY3R4KSk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIGFjdGlvbnMgb24gdGhlIHN0YXRlcy5cbiAgICovXG4gIGludm9rZUFjdGlvbnMoZGlzcGF0Y2hlZCQ6IE9ic2VydmFibGU8QWN0aW9uQ29udGV4dD4sIGFjdGlvbjogYW55KSB7XG4gICAgY29uc3QgdHlwZSA9IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UoYWN0aW9uKSE7XG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBtZXRhZGF0YSBvZiB0aGlzLnN0YXRlcykge1xuICAgICAgY29uc3QgYWN0aW9uTWV0YXMgPSBtZXRhZGF0YS5hY3Rpb25zW3R5cGVdO1xuXG4gICAgICBpZiAoYWN0aW9uTWV0YXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb25NZXRhIG9mIGFjdGlvbk1ldGFzKSB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVDb250ZXh0ID0gdGhpcy5fc3RhdGVDb250ZXh0RmFjdG9yeS5jcmVhdGVTdGF0ZUNvbnRleHQobWV0YWRhdGEpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gbWV0YWRhdGEuaW5zdGFuY2VbYWN0aW9uTWV0YS5mbl0oc3RhdGVDb250ZXh0LCBhY3Rpb24pO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICByZXN1bHQgPSBmcm9tKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoaXMgb2JzZXJ2YWJsZSBoYXMgYmVlbiBjb21wbGV0ZWQgdy9vIGVtaXR0aW5nXG4gICAgICAgICAgICAgIC8vIGFueSB2YWx1ZSB0aGVuIHdlIHdvdWxkbid0IHdhbnQgdG8gY29tcGxldGUgdGhlIHdob2xlIGNoYWluXG4gICAgICAgICAgICAgIC8vIG9mIGFjdGlvbnMuIFNpbmNlIGlmIGFueSBvYnNlcnZhYmxlIGNvbXBsZXRlcyB0aGVuXG4gICAgICAgICAgICAgIC8vIGFjdGlvbiB3aWxsIGJlIGNhbmNlbGVkLlxuICAgICAgICAgICAgICAvLyBGb3IgaW5zdGFuY2UgaWYgYW55IGFjdGlvbiBoYW5kbGVyIHdvdWxkJ3ZlIGhhZCBzdWNoIHN0YXRlbWVudDpcbiAgICAgICAgICAgICAgLy8gYGhhbmRsZXIoY3R4KSB7IHJldHVybiBFTVBUWTsgfWBcbiAgICAgICAgICAgICAgLy8gdGhlbiB0aGUgYWN0aW9uIHdpbGwgYmUgY2FuY2VsZWQuXG4gICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbmd4cy9zdG9yZS9pc3N1ZXMvMTU2OFxuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucGlwZShcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBvZih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkoe30pXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKGFjdGlvbk1ldGEub3B0aW9ucy5jYW5jZWxVbmNvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIC8vIHRvZG86IG9mQWN0aW9uRGlzcGF0Y2hlZCBzaG91bGQgYmUgdXNlZCB3aXRoIGFjdGlvbiBjbGFzc1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5waXBlKFxuICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKGRpc3BhdGNoZWQkLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKGFjdGlvbiBhcyBhbnkpKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQgPSBvZih7fSkucGlwZShzaGFyZVJlcGxheSgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRocm93RXJyb3IoZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdHMucHVzaChvZih7fSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JrSm9pbihyZXN1bHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9TdGF0ZXNNYXAoXG4gICAgc3RhdGVDbGFzc2VzOiBTdGF0ZUNsYXNzSW50ZXJuYWxbXVxuICApOiB7IG5ld1N0YXRlczogU3RhdGVDbGFzc0ludGVybmFsW10gfSB7XG4gICAgY29uc3QgbmV3U3RhdGVzOiBTdGF0ZUNsYXNzSW50ZXJuYWxbXSA9IFtdO1xuICAgIGNvbnN0IHN0YXRlc01hcDogU3RhdGVzQnlOYW1lID0gdGhpcy5zdGF0ZXNCeU5hbWU7XG5cbiAgICBmb3IgKGNvbnN0IHN0YXRlQ2xhc3Mgb2Ygc3RhdGVDbGFzc2VzKSB7XG4gICAgICBjb25zdCBzdGF0ZU5hbWUgPSBnZXRTdG9yZU1ldGFkYXRhKHN0YXRlQ2xhc3MpLm5hbWUhO1xuICAgICAgLy8gQ2FyZXRha2VyIG5vdGU6IHdlIGhhdmUgc3RpbGwgbGVmdCB0aGUgYHR5cGVvZmAgY29uZGl0aW9uIGluIG9yZGVyIHRvIGF2b2lkXG4gICAgICAvLyBjcmVhdGluZyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgcHJvamVjdHMgdGhhdCBzdGlsbCB1c2UgdGhlIFZpZXcgRW5naW5lLlxuICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgICBTdG9yZVZhbGlkYXRvcnMuY2hlY2tUaGF0U3RhdGVOYW1lSXNVbmlxdWUoc3RhdGVOYW1lLCBzdGF0ZUNsYXNzLCBzdGF0ZXNNYXApO1xuICAgICAgfVxuICAgICAgY29uc3QgdW5tb3VudGVkU3RhdGUgPSAhc3RhdGVzTWFwW3N0YXRlTmFtZV07XG4gICAgICBpZiAodW5tb3VudGVkU3RhdGUpIHtcbiAgICAgICAgbmV3U3RhdGVzLnB1c2goc3RhdGVDbGFzcyk7XG4gICAgICAgIHN0YXRlc01hcFtzdGF0ZU5hbWVdID0gc3RhdGVDbGFzcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBuZXdTdGF0ZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUnVudGltZUluZm9Ub01ldGEobWV0YTogTWV0YURhdGFNb2RlbCwgcGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVBhdGhzW21ldGEubmFtZSFdID0gcGF0aDtcbiAgICAvLyBUT0RPOiB2NCAtIHdlIHBsYW4gdG8gZ2V0IHJpZCBvZiB0aGUgcGF0aCBwcm9wZXJ0eSBiZWNhdXNlIGl0IGlzIG5vbi1kZXRlcm1pbmlzdGljXG4gICAgLy8gd2UgY2FuIGRvIHRoaXMgd2hlbiB3ZSBnZXQgcmlkIG9mIHRoZSBpbmNvcnJlY3RseSBleHBvc2VkIGdldFN0b3JlTWV0YWRhdGFcbiAgICAvLyBXZSB3aWxsIG5lZWQgdG8gY29tZSB1cCB3aXRoIGFuIGFsdGVybmF0aXZlIGluIHY0IGJlY2F1c2UgdGhpcyBpcyB1c2VkIGJ5IG1hbnkgcGx1Z2luc1xuICAgIG1ldGEucGF0aCA9IHBhdGg7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIHRoZSBtZXRob2QgY2hlY2tzIGlmIHRoZSBzdGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSB0cmVlXG4gICAqIGFuZCBjb21wbGV0ZWQgdGhlIGxpZmUgY3ljbGVcbiAgICogQHBhcmFtIG5hbWVcbiAgICogQHBhcmFtIHBhdGhcbiAgICovXG4gIHByaXZhdGUgaGFzQmVlbk1vdW50ZWRBbmRCb290c3RyYXBwZWQobmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZUlzQm9vdHN0cmFwcGVkSW5Jbml0aWFsU3RhdGU6IGJvb2xlYW4gPVxuICAgICAgZ2V0VmFsdWUodGhpcy5faW5pdGlhbFN0YXRlLCBwYXRoKSAhPT0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnN0YXRlc0J5TmFtZVtuYW1lXSAmJiB2YWx1ZUlzQm9vdHN0cmFwcGVkSW5Jbml0aWFsU3RhdGU7XG4gIH1cbn1cbiJdfQ==
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { Injectable, Injector, Optional, SkipSelf, Inject } from '@angular/core';
6
+ import { forkJoin, from, Observable, of, throwError, Subject } from 'rxjs';
7
+ import { catchError, defaultIfEmpty, filter, map, mergeMap, shareReplay, takeUntil } from 'rxjs/operators';
8
+ import { META_KEY, NgxsConfig } from '../symbols';
9
+ import { buildGraph, findFullParentPath, isObject, nameToState, propGetter, topologicalSort, getStoreMetadata } from './internals';
10
+ import { getActionTypeFromInstance, getValue, setValue } from '../utils/utils';
11
+ import { ofActionDispatched } from '../operators/of-action';
12
+ import { InternalActions } from '../actions-stream';
13
+ import { InternalDispatchedActionResults } from '../internal/dispatcher';
14
+ import { StateContextFactory } from '../internal/state-context-factory';
15
+ import { StoreValidators } from '../utils/store-validators';
16
+ import { INITIAL_STATE_TOKEN, memoize } from '@ngxs/store/internals';
17
+ /**
18
+ * State factory class
19
+ * @ignore
20
+ */
21
+ export class StateFactory {
22
+ /**
23
+ * @param {?} _injector
24
+ * @param {?} _config
25
+ * @param {?} _parentFactory
26
+ * @param {?} _actions
27
+ * @param {?} _actionResults
28
+ * @param {?} _stateContextFactory
29
+ * @param {?} _initialState
30
+ */
31
+ constructor(_injector, _config, _parentFactory, _actions, _actionResults, _stateContextFactory, _initialState) {
32
+ this._injector = _injector;
33
+ this._config = _config;
34
+ this._parentFactory = _parentFactory;
35
+ this._actions = _actions;
36
+ this._actionResults = _actionResults;
37
+ this._stateContextFactory = _stateContextFactory;
38
+ this._initialState = _initialState;
39
+ this._actionsSubscription = null;
40
+ this._states = [];
41
+ this._statesByName = {};
42
+ this._statePaths = {};
43
+ this.getRuntimeSelectorContext = memoize((/**
44
+ * @return {?}
45
+ */
46
+ () => {
47
+ /** @type {?} */
48
+ const stateFactory = this;
49
+ /**
50
+ * @param {?} key
51
+ * @return {?}
52
+ */
53
+ function resolveGetter(key) {
54
+ /** @type {?} */
55
+ const path = stateFactory.statePaths[key];
56
+ return path ? propGetter(path.split('.'), stateFactory._config) : null;
57
+ }
58
+ /** @type {?} */
59
+ const context = this._parentFactory
60
+ ? this._parentFactory.getRuntimeSelectorContext()
61
+ : {
62
+ /**
63
+ * @param {?} key
64
+ * @return {?}
65
+ */
66
+ getStateGetter(key) {
67
+ /** @type {?} */
68
+ let getter = resolveGetter(key);
69
+ if (getter) {
70
+ return getter;
71
+ }
72
+ return (/**
73
+ * @param {...?} args
74
+ * @return {?}
75
+ */
76
+ (...args) => {
77
+ // Late loaded getter
78
+ if (!getter) {
79
+ getter = resolveGetter(key);
80
+ }
81
+ return getter ? getter(...args) : undefined;
82
+ });
83
+ },
84
+ /**
85
+ * @param {?=} localOptions
86
+ * @return {?}
87
+ */
88
+ getSelectorOptions(localOptions) {
89
+ /** @type {?} */
90
+ const globalSelectorOptions = stateFactory._config.selectorOptions;
91
+ return Object.assign({}, globalSelectorOptions, (localOptions || {}));
92
+ }
93
+ };
94
+ return context;
95
+ }));
96
+ }
97
+ /**
98
+ * @return {?}
99
+ */
100
+ get states() {
101
+ return this._parentFactory ? this._parentFactory.states : this._states;
102
+ }
103
+ /**
104
+ * @return {?}
105
+ */
106
+ get statesByName() {
107
+ return this._parentFactory ? this._parentFactory.statesByName : this._statesByName;
108
+ }
109
+ /**
110
+ * @private
111
+ * @return {?}
112
+ */
113
+ get statePaths() {
114
+ return this._parentFactory ? this._parentFactory.statePaths : this._statePaths;
115
+ }
116
+ /**
117
+ * @private
118
+ * @param {?} defaults
119
+ * @return {?}
120
+ */
121
+ static cloneDefaults(defaults) {
122
+ /** @type {?} */
123
+ let value = {};
124
+ if (Array.isArray(defaults)) {
125
+ value = defaults.slice();
126
+ }
127
+ else if (isObject(defaults)) {
128
+ value = Object.assign({}, defaults);
129
+ }
130
+ else if (defaults === undefined) {
131
+ value = {};
132
+ }
133
+ else {
134
+ value = defaults;
135
+ }
136
+ return value;
137
+ }
138
+ /**
139
+ * @return {?}
140
+ */
141
+ ngOnDestroy() {
142
+ // I'm using non-null assertion here since `_actionsSubscrition` will
143
+ // be 100% defined. This is because `ngOnDestroy()` cannot be invoked
144
+ // on the `StateFactory` until its initialized :) An it's initialized
145
+ // for the first time along with the `NgxsRootModule`.
146
+ (/** @type {?} */ (this._actionsSubscription)).unsubscribe();
147
+ }
148
+ /**
149
+ * Add a new state to the global defs.
150
+ * @param {?} stateClasses
151
+ * @return {?}
152
+ */
153
+ add(stateClasses) {
154
+ // Caretaker note: we have still left the `typeof` condition in order to avoid
155
+ // creating a breaking change for projects that still use the View Engine.
156
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
157
+ StoreValidators.checkThatStateClassesHaveBeenDecorated(stateClasses);
158
+ }
159
+ const { newStates } = this.addToStatesMap(stateClasses);
160
+ if (!newStates.length)
161
+ return [];
162
+ /** @type {?} */
163
+ const stateGraph = buildGraph(newStates);
164
+ /** @type {?} */
165
+ const sortedStates = topologicalSort(stateGraph);
166
+ /** @type {?} */
167
+ const paths = findFullParentPath(stateGraph);
168
+ /** @type {?} */
169
+ const nameGraph = nameToState(newStates);
170
+ /** @type {?} */
171
+ const bootstrappedStores = [];
172
+ for (const name of sortedStates) {
173
+ /** @type {?} */
174
+ const stateClass = nameGraph[name];
175
+ /** @type {?} */
176
+ const path = paths[name];
177
+ /** @type {?} */
178
+ const meta = (/** @type {?} */ (stateClass[META_KEY]));
179
+ this.addRuntimeInfoToMeta(meta, path);
180
+ /** @type {?} */
181
+ const stateMap = {
182
+ name,
183
+ path,
184
+ isInitialised: false,
185
+ actions: meta.actions,
186
+ instance: this._injector.get(stateClass),
187
+ defaults: StateFactory.cloneDefaults(meta.defaults)
188
+ };
189
+ // ensure our store hasn't already been added
190
+ // but don't throw since it could be lazy
191
+ // loaded from different paths
192
+ if (!this.hasBeenMountedAndBootstrapped(name, path)) {
193
+ bootstrappedStores.push(stateMap);
194
+ }
195
+ this.states.push(stateMap);
196
+ }
197
+ return bootstrappedStores;
198
+ }
199
+ /**
200
+ * Add a set of states to the store and return the defaults
201
+ * @param {?} stateClasses
202
+ * @return {?}
203
+ */
204
+ addAndReturnDefaults(stateClasses) {
205
+ /** @type {?} */
206
+ const classes = stateClasses || [];
207
+ /** @type {?} */
208
+ const mappedStores = this.add(classes);
209
+ /** @type {?} */
210
+ const defaults = mappedStores.reduce((/**
211
+ * @param {?} result
212
+ * @param {?} mappedStore
213
+ * @return {?}
214
+ */
215
+ (result, mappedStore) => setValue(result, mappedStore.path, mappedStore.defaults)), {});
216
+ return { defaults, states: mappedStores };
217
+ }
218
+ /**
219
+ * Bind the actions to the handlers
220
+ * @return {?}
221
+ */
222
+ connectActionHandlers() {
223
+ if (this._actionsSubscription !== null)
224
+ return;
225
+ /** @type {?} */
226
+ const dispatched$ = new Subject();
227
+ this._actionsSubscription = this._actions
228
+ .pipe(filter((/**
229
+ * @param {?} ctx
230
+ * @return {?}
231
+ */
232
+ (ctx) => ctx.status === "DISPATCHED" /* Dispatched */)), mergeMap((/**
233
+ * @param {?} ctx
234
+ * @return {?}
235
+ */
236
+ ctx => {
237
+ dispatched$.next(ctx);
238
+ /** @type {?} */
239
+ const action = ctx.action;
240
+ return this.invokeActions(dispatched$, (/** @type {?} */ (action))).pipe(map((/**
241
+ * @return {?}
242
+ */
243
+ () => (/** @type {?} */ ({ action, status: "SUCCESSFUL" /* Successful */ })))), defaultIfEmpty((/** @type {?} */ ({ action, status: "CANCELED" /* Canceled */ }))), catchError((/**
244
+ * @param {?} error
245
+ * @return {?}
246
+ */
247
+ error => of((/** @type {?} */ ({ action, status: "ERRORED" /* Errored */, error }))))));
248
+ })))
249
+ .subscribe((/**
250
+ * @param {?} ctx
251
+ * @return {?}
252
+ */
253
+ ctx => this._actionResults.next(ctx)));
254
+ }
255
+ /**
256
+ * Invoke actions on the states.
257
+ * @param {?} dispatched$
258
+ * @param {?} action
259
+ * @return {?}
260
+ */
261
+ invokeActions(dispatched$, action) {
262
+ /** @type {?} */
263
+ const type = (/** @type {?} */ (getActionTypeFromInstance(action)));
264
+ /** @type {?} */
265
+ const results = [];
266
+ for (const metadata of this.states) {
267
+ /** @type {?} */
268
+ const actionMetas = metadata.actions[type];
269
+ if (actionMetas) {
270
+ for (const actionMeta of actionMetas) {
271
+ /** @type {?} */
272
+ const stateContext = this._stateContextFactory.createStateContext(metadata);
273
+ try {
274
+ /** @type {?} */
275
+ let result = metadata.instance[actionMeta.fn](stateContext, action);
276
+ if (result instanceof Promise) {
277
+ result = from(result);
278
+ }
279
+ if (result instanceof Observable) {
280
+ // If this observable has been completed w/o emitting
281
+ // any value then we wouldn't want to complete the whole chain
282
+ // of actions. Since if any observable completes then
283
+ // action will be canceled.
284
+ // For instance if any action handler would've had such statement:
285
+ // `handler(ctx) { return EMPTY; }`
286
+ // then the action will be canceled.
287
+ // See https://github.com/ngxs/store/issues/1568
288
+ result = result.pipe(mergeMap((/**
289
+ * @param {?} value
290
+ * @return {?}
291
+ */
292
+ (value) => {
293
+ if (value instanceof Promise) {
294
+ return from(value);
295
+ }
296
+ if (value instanceof Observable) {
297
+ return value;
298
+ }
299
+ return of(value);
300
+ })), defaultIfEmpty({}));
301
+ if (actionMeta.options.cancelUncompleted) {
302
+ // todo: ofActionDispatched should be used with action class
303
+ result = result.pipe(takeUntil(dispatched$.pipe(ofActionDispatched((/** @type {?} */ (action))))));
304
+ }
305
+ }
306
+ else {
307
+ result = of({}).pipe(shareReplay());
308
+ }
309
+ results.push(result);
310
+ }
311
+ catch (e) {
312
+ results.push(throwError(e));
313
+ }
314
+ }
315
+ }
316
+ }
317
+ if (!results.length) {
318
+ results.push(of({}));
319
+ }
320
+ return forkJoin(results);
321
+ }
322
+ /**
323
+ * @private
324
+ * @param {?} stateClasses
325
+ * @return {?}
326
+ */
327
+ addToStatesMap(stateClasses) {
328
+ /** @type {?} */
329
+ const newStates = [];
330
+ /** @type {?} */
331
+ const statesMap = this.statesByName;
332
+ for (const stateClass of stateClasses) {
333
+ /** @type {?} */
334
+ const stateName = (/** @type {?} */ (getStoreMetadata(stateClass).name));
335
+ // Caretaker note: we have still left the `typeof` condition in order to avoid
336
+ // creating a breaking change for projects that still use the View Engine.
337
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
338
+ StoreValidators.checkThatStateNameIsUnique(stateName, stateClass, statesMap);
339
+ }
340
+ /** @type {?} */
341
+ const unmountedState = !statesMap[stateName];
342
+ if (unmountedState) {
343
+ newStates.push(stateClass);
344
+ statesMap[stateName] = stateClass;
345
+ }
346
+ }
347
+ return { newStates };
348
+ }
349
+ /**
350
+ * @private
351
+ * @param {?} meta
352
+ * @param {?} path
353
+ * @return {?}
354
+ */
355
+ addRuntimeInfoToMeta(meta, path) {
356
+ this.statePaths[(/** @type {?} */ (meta.name))] = path;
357
+ // TODO: v4 - we plan to get rid of the path property because it is non-deterministic
358
+ // we can do this when we get rid of the incorrectly exposed getStoreMetadata
359
+ // We will need to come up with an alternative in v4 because this is used by many plugins
360
+ meta.path = path;
361
+ }
362
+ /**
363
+ * \@description
364
+ * the method checks if the state has already been added to the tree
365
+ * and completed the life cycle
366
+ * @private
367
+ * @param {?} name
368
+ * @param {?} path
369
+ * @return {?}
370
+ */
371
+ hasBeenMountedAndBootstrapped(name, path) {
372
+ /** @type {?} */
373
+ const valueIsBootstrappedInInitialState = getValue(this._initialState, path) !== undefined;
374
+ return this.statesByName[name] && valueIsBootstrappedInInitialState;
375
+ }
376
+ }
377
+ StateFactory.decorators = [
378
+ { type: Injectable }
379
+ ];
380
+ /** @nocollapse */
381
+ StateFactory.ctorParameters = () => [
382
+ { type: Injector },
383
+ { type: NgxsConfig },
384
+ { type: StateFactory, decorators: [{ type: Optional }, { type: SkipSelf }] },
385
+ { type: InternalActions },
386
+ { type: InternalDispatchedActionResults },
387
+ { type: StateContextFactory },
388
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [INITIAL_STATE_TOKEN,] }] }
389
+ ];
390
+ if (false) {
391
+ /**
392
+ * @type {?}
393
+ * @private
394
+ */
395
+ StateFactory.prototype._actionsSubscription;
396
+ /**
397
+ * @type {?}
398
+ * @private
399
+ */
400
+ StateFactory.prototype._states;
401
+ /**
402
+ * @type {?}
403
+ * @private
404
+ */
405
+ StateFactory.prototype._statesByName;
406
+ /**
407
+ * @type {?}
408
+ * @private
409
+ */
410
+ StateFactory.prototype._statePaths;
411
+ /** @type {?} */
412
+ StateFactory.prototype.getRuntimeSelectorContext;
413
+ /**
414
+ * @type {?}
415
+ * @private
416
+ */
417
+ StateFactory.prototype._injector;
418
+ /**
419
+ * @type {?}
420
+ * @private
421
+ */
422
+ StateFactory.prototype._config;
423
+ /**
424
+ * @type {?}
425
+ * @private
426
+ */
427
+ StateFactory.prototype._parentFactory;
428
+ /**
429
+ * @type {?}
430
+ * @private
431
+ */
432
+ StateFactory.prototype._actions;
433
+ /**
434
+ * @type {?}
435
+ * @private
436
+ */
437
+ StateFactory.prototype._actionResults;
438
+ /**
439
+ * @type {?}
440
+ * @private
441
+ */
442
+ StateFactory.prototype._stateContextFactory;
443
+ /**
444
+ * @type {?}
445
+ * @private
446
+ */
447
+ StateFactory.prototype._initialState;
448
+ }
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZ3hzL3N0b3JlLyIsInNvdXJjZXMiOlsic3JjL2ludGVybmFsL3N0YXRlLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFnQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUNMLFVBQVUsRUFDVixjQUFjLEVBQ2QsTUFBTSxFQUNOLEdBQUcsRUFDSCxRQUFRLEVBQ1IsV0FBVyxFQUNYLFNBQVMsRUFDVixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xELE9BQU8sRUFDTCxVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLFFBQVEsRUFHUixXQUFXLEVBQ1gsVUFBVSxFQUtWLGVBQWUsRUFHZixnQkFBZ0IsRUFDakIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQStCLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQWlCLE9BQU8sRUFB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QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCwgU2tpcFNlbGYsIEluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciwgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgY2F0Y2hFcnJvcixcclxuICBkZWZhdWx0SWZFbXB0eSxcclxuICBmaWx0ZXIsXHJcbiAgbWFwLFxyXG4gIG1lcmdlTWFwLFxyXG4gIHNoYXJlUmVwbGF5LFxyXG4gIHRha2VVbnRpbFxyXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IE1FVEFfS0VZLCBOZ3hzQ29uZmlnIH0gZnJvbSAnLi4vc3ltYm9scyc7XHJcbmltcG9ydCB7XHJcbiAgYnVpbGRHcmFwaCxcclxuICBmaW5kRnVsbFBhcmVudFBhdGgsXHJcbiAgaXNPYmplY3QsXHJcbiAgTWFwcGVkU3RvcmUsXHJcbiAgTWV0YURhdGFNb2RlbCxcclxuICBuYW1lVG9TdGF0ZSxcclxuICBwcm9wR2V0dGVyLFxyXG4gIFN0YXRlQ2xhc3NJbnRlcm5hbCxcclxuICBTdGF0ZUtleUdyYXBoLFxyXG4gIFN0YXRlc0FuZERlZmF1bHRzLFxyXG4gIFN0YXRlc0J5TmFtZSxcclxuICB0b3BvbG9naWNhbFNvcnQsXHJcbiAgUnVudGltZVNlbGVjdG9yQ29udGV4dCxcclxuICBTaGFyZWRTZWxlY3Rvck9wdGlvbnMsXHJcbiAgZ2V0U3RvcmVNZXRhZGF0YVxyXG59IGZyb20gJy4vaW50ZXJuYWxzJztcclxuaW1wb3J0IHsgZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZSwgZ2V0VmFsdWUsIHNldFZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xyXG5pbXBvcnQgeyBvZkFjdGlvbkRpc3BhdGNoZWQgfSBmcm9tICcuLi9vcGVyYXRvcnMvb2YtYWN0aW9uJztcclxuaW1wb3J0IHsgQWN0aW9uQ29udGV4dCwgQWN0aW9uU3RhdHVzLCBJbnRlcm5hbEFjdGlvbnMgfSBmcm9tICcuLi9hY3Rpb25zLXN0cmVhbSc7XHJcbmltcG9ydCB7IEludGVybmFsRGlzcGF0Y2hlZEFjdGlvblJlc3VsdHMgfSBmcm9tICcuLi9pbnRlcm5hbC9kaXNwYXRjaGVyJztcclxuaW1wb3J0IHsgU3RhdGVDb250ZXh0RmFjdG9yeSB9IGZyb20gJy4uL2ludGVybmFsL3N0YXRlLWNvbnRleHQtZmFjdG9yeSc7XHJcbmltcG9ydCB7IFN0b3JlVmFsaWRhdG9ycyB9IGZyb20gJy4uL3V0aWxzL3N0b3JlLXZhbGlkYXRvcnMnO1xyXG5pbXBvcnQgeyBJTklUSUFMX1NUQVRFX1RPS0VOLCBQbGFpbk9iamVjdE9mLCBtZW1vaXplIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcclxuXHJcbi8qKlxyXG4gKiBTdGF0ZSBmYWN0b3J5IGNsYXNzXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFN0YXRlRmFjdG9yeSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfYWN0aW9uc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBOZ3hzQ29uZmlnLFxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIEBTa2lwU2VsZigpXHJcbiAgICBwcml2YXRlIF9wYXJlbnRGYWN0b3J5OiBTdGF0ZUZhY3RvcnksXHJcbiAgICBwcml2YXRlIF9hY3Rpb25zOiBJbnRlcm5hbEFjdGlvbnMsXHJcbiAgICBwcml2YXRlIF9hY3Rpb25SZXN1bHRzOiBJbnRlcm5hbERpc3BhdGNoZWRBY3Rpb25SZXN1bHRzLFxyXG4gICAgcHJpdmF0ZSBfc3RhdGVDb250ZXh0RmFjdG9yeTogU3RhdGVDb250ZXh0RmFjdG9yeSxcclxuICAgIEBPcHRpb25hbCgpXHJcbiAgICBASW5qZWN0KElOSVRJQUxfU1RBVEVfVE9LRU4pXHJcbiAgICBwcml2YXRlIF9pbml0aWFsU3RhdGU6IGFueVxyXG4gICkge31cclxuXHJcbiAgcHJpdmF0ZSBfc3RhdGVzOiBNYXBwZWRTdG9yZVtdID0gW107XHJcblxyXG4gIGdldCBzdGF0ZXMoKTogTWFwcGVkU3RvcmVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RmFjdG9yeSA/IHRoaXMuX3BhcmVudEZhY3Rvcnkuc3RhdGVzIDogdGhpcy5fc3RhdGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RhdGVzQnlOYW1lOiBTdGF0ZXNCeU5hbWUgPSB7fTtcclxuXHJcbiAgZ2V0IHN0YXRlc0J5TmFtZSgpOiBTdGF0ZXNCeU5hbWUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudEZhY3RvcnkgPyB0aGlzLl9wYXJlbnRGYWN0b3J5LnN0YXRlc0J5TmFtZSA6IHRoaXMuX3N0YXRlc0J5TmFtZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3N0YXRlUGF0aHM6IFBsYWluT2JqZWN0T2Y8c3RyaW5nPiA9IHt9O1xyXG5cclxuICBwcml2YXRlIGdldCBzdGF0ZVBhdGhzKCk6IFBsYWluT2JqZWN0T2Y8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50RmFjdG9yeSA/IHRoaXMuX3BhcmVudEZhY3Rvcnkuc3RhdGVQYXRocyA6IHRoaXMuX3N0YXRlUGF0aHM7XHJcbiAgfVxyXG5cclxuICBnZXRSdW50aW1lU2VsZWN0b3JDb250ZXh0ID0gbWVtb2l6ZSgoKSA9PiB7XHJcbiAgICBjb25zdCBzdGF0ZUZhY3RvcnkgPSB0aGlzO1xyXG5cclxuICAgIGZ1bmN0aW9uIHJlc29sdmVHZXR0ZXIoa2V5OiBzdHJpbmcpIHtcclxuICAgICAgY29uc3QgcGF0aCA9IHN0YXRlRmFjdG9yeS5zdGF0ZVBhdGhzW2tleV07XHJcbiAgICAgIHJldHVybiBwYXRoID8gcHJvcEdldHRlcihwYXRoLnNwbGl0KCcuJyksIHN0YXRlRmFjdG9yeS5fY29uZmlnKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGV4dDogUnVudGltZVNlbGVjdG9yQ29udGV4dCA9IHRoaXMuX3BhcmVudEZhY3RvcnlcclxuICAgICAgPyB0aGlzLl9wYXJlbnRGYWN0b3J5LmdldFJ1bnRpbWVTZWxlY3RvckNvbnRleHQoKVxyXG4gICAgICA6IHtcclxuICAgICAgICAgIGdldFN0YXRlR2V0dGVyKGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIGxldCBnZXR0ZXIgPSByZXNvbHZlR2V0dGVyKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChnZXR0ZXIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZ2V0dGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIExhdGUgbG9hZGVkIGdldHRlclxyXG4gICAgICAgICAgICAgIGlmICghZ2V0dGVyKSB7XHJcbiAgICAgICAgICAgICAgICBnZXR0ZXIgPSByZXNvbHZlR2V0dGVyKGtleSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBnZXR0ZXIgPyBnZXR0ZXIoLi4uYXJncykgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZ2V0U2VsZWN0b3JPcHRpb25zKGxvY2FsT3B0aW9ucz86IFNoYXJlZFNlbGVjdG9yT3B0aW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBnbG9iYWxTZWxlY3Rvck9wdGlvbnMgPSBzdGF0ZUZhY3RvcnkuX2NvbmZpZy5zZWxlY3Rvck9wdGlvbnM7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgLi4uZ2xvYmFsU2VsZWN0b3JPcHRpb25zLFxyXG4gICAgICAgICAgICAgIC4uLihsb2NhbE9wdGlvbnMgfHwge30pXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIHJldHVybiBjb250ZXh0O1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBjbG9uZURlZmF1bHRzKGRlZmF1bHRzOiBhbnkpOiBhbnkge1xyXG4gICAgbGV0IHZhbHVlID0ge307XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmYXVsdHMpKSB7XHJcbiAgICAgIHZhbHVlID0gZGVmYXVsdHMuc2xpY2UoKTtcclxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVmYXVsdHMpKSB7XHJcbiAgICAgIHZhbHVlID0geyAuLi5kZWZhdWx0cyB9O1xyXG4gICAgfSBlbHNlIGlmIChkZWZhdWx0cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhbHVlID0ge307XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YWx1ZSA9IGRlZmF1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgLy8gSSdtIHVzaW5nIG5vbi1udWxsIGFzc2VydGlvbiBoZXJlIHNpbmNlIGBfYWN0aW9uc1N1YnNjcml0aW9uYCB3aWxsXHJcbiAgICAvLyBiZSAxMDAlIGRlZmluZWQuIFRoaXMgaXMgYmVjYXVzZSBgbmdPbkRlc3Ryb3koKWAgY2Fubm90IGJlIGludm9rZWRcclxuICAgIC8vIG9uIHRoZSBgU3RhdGVGYWN0b3J5YCB1bnRpbCBpdHMgaW5pdGlhbGl6ZWQgOikgQW4gaXQncyBpbml0aWFsaXplZFxyXG4gICAgLy8gZm9yIHRoZSBmaXJzdCB0aW1lIGFsb25nIHdpdGggdGhlIGBOZ3hzUm9vdE1vZHVsZWAuXHJcbiAgICB0aGlzLl9hY3Rpb25zU3Vic2NyaXB0aW9uIS51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgbmV3IHN0YXRlIHRvIHRoZSBnbG9iYWwgZGVmcy5cclxuICAgKi9cclxuICBhZGQoc3RhdGVDbGFzc2VzOiBTdGF0ZUNsYXNzSW50ZXJuYWxbXSk6IE1hcHBlZFN0b3JlW10ge1xyXG4gICAgLy8gQ2FyZXRha2VyIG5vdGU6IHdlIGhhdmUgc3RpbGwgbGVmdCB0aGUgYHR5cGVvZmAgY29uZGl0aW9uIGluIG9yZGVyIHRvIGF2b2lkXHJcbiAgICAvLyBjcmVhdGluZyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgcHJvamVjdHMgdGhhdCBzdGlsbCB1c2UgdGhlIFZpZXcgRW5naW5lLlxyXG4gICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xyXG4gICAgICBTdG9yZVZhbGlkYXRvcnMuY2hlY2tUaGF0U3RhdGVDbGFzc2VzSGF2ZUJlZW5EZWNvcmF0ZWQoc3RhdGVDbGFzc2VzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IG5ld1N0YXRlcyB9ID0gdGhpcy5hZGRUb1N0YXRlc01hcChzdGF0ZUNsYXNzZXMpO1xyXG4gICAgaWYgKCFuZXdTdGF0ZXMubGVuZ3RoKSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3Qgc3RhdGVHcmFwaDogU3RhdGVLZXlHcmFwaCA9IGJ1aWxkR3JhcGgobmV3U3RhdGVzKTtcclxuICAgIGNvbnN0IHNvcnRlZFN0YXRlczogc3RyaW5nW10gPSB0b3BvbG9naWNhbFNvcnQoc3RhdGVHcmFwaCk7XHJcbiAgICBjb25zdCBwYXRoczogUGxhaW5PYmplY3RPZjxzdHJpbmc+ID0gZmluZEZ1bGxQYXJlbnRQYXRoKHN0YXRlR3JhcGgpO1xyXG4gICAgY29uc3QgbmFtZUdyYXBoOiBQbGFpbk9iamVjdE9mPFN0YXRlQ2xhc3NJbnRlcm5hbD4gPSBuYW1lVG9TdGF0ZShuZXdTdGF0ZXMpO1xyXG4gICAgY29uc3QgYm9vdHN0cmFwcGVkU3RvcmVzOiBNYXBwZWRTdG9yZVtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHNvcnRlZFN0YXRlcykge1xyXG4gICAgICBjb25zdCBzdGF0ZUNsYXNzOiBTdGF0ZUNsYXNzSW50ZXJuYWwgPSBuYW1lR3JhcGhbbmFtZV07XHJcbiAgICAgIGNvbnN0IHBhdGg6IHN0cmluZyA9IHBhdGhzW25hbWVdO1xyXG4gICAgICBjb25zdCBtZXRhOiBNZXRhRGF0YU1vZGVsID0gc3RhdGVDbGFzc1tNRVRBX0tFWV0hO1xyXG5cclxuICAgICAgdGhpcy5hZGRSdW50aW1lSW5mb1RvTWV0YShtZXRhLCBwYXRoKTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXRlTWFwOiBNYXBwZWRTdG9yZSA9IHtcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIHBhdGgsXHJcbiAgICAgICAgaXNJbml0aWFsaXNlZDogZmFsc2UsXHJcbiAgICAgICAgYWN0aW9uczogbWV0YS5hY3Rpb25zLFxyXG4gICAgICAgIGluc3RhbmNlOiB0aGlzLl9pbmplY3Rvci5nZXQoc3RhdGVDbGFzcyksXHJcbiAgICAgICAgZGVmYXVsdHM6IFN0YXRlRmFjdG9yeS5jbG9uZURlZmF1bHRzKG1ldGEuZGVmYXVsdHMpXHJcbiAgICAgIH07XHJcblxyXG4gICAgICAvLyBlbnN1cmUgb3VyIHN0b3JlIGhhc24ndCBhbHJlYWR5IGJlZW4gYWRkZWRcclxuICAgICAgLy8gYnV0IGRvbid0IHRocm93IHNpbmNlIGl0IGNvdWxkIGJlIGxhenlcclxuICAgICAgLy8gbG9hZGVkIGZyb20gZGlmZmVyZW50IHBhdGhzXHJcbiAgICAgIGlmICghdGhpcy5oYXNCZWVuTW91bnRlZEFuZEJvb3RzdHJhcHBlZChuYW1lLCBwYXRoKSkge1xyXG4gICAgICAgIGJvb3RzdHJhcHBlZFN0b3Jlcy5wdXNoKHN0YXRlTWFwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdGF0ZXMucHVzaChzdGF0ZU1hcCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGJvb3RzdHJhcHBlZFN0b3JlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIHNldCBvZiBzdGF0ZXMgdG8gdGhlIHN0b3JlIGFuZCByZXR1cm4gdGhlIGRlZmF1bHRzXHJcbiAgICovXHJcbiAgYWRkQW5kUmV0dXJuRGVmYXVsdHMoc3RhdGVDbGFzc2VzOiBTdGF0ZUNsYXNzSW50ZXJuYWxbXSk6IFN0YXRlc0FuZERlZmF1bHRzIHtcclxuICAgIGNvbnN0IGNsYXNzZXM6IFN0YXRlQ2xhc3NJbnRlcm5hbFtdID0gc3RhdGVDbGFzc2VzIHx8IFtdO1xyXG5cclxuICAgIGNvbnN0IG1hcHBlZFN0b3JlczogTWFwcGVkU3RvcmVbXSA9IHRoaXMuYWRkKGNsYXNzZXMpO1xyXG4gICAgY29uc3QgZGVmYXVsdHMgPSBtYXBwZWRTdG9yZXMucmVkdWNlKFxyXG4gICAgICAocmVzdWx0OiBhbnksIG1hcHBlZFN0b3JlOiBNYXBwZWRTdG9yZSkgPT5cclxuICAgICAgICBzZXRWYWx1ZShyZXN1bHQsIG1hcHBlZFN0b3JlLnBhdGgsIG1hcHBlZFN0b3JlLmRlZmF1bHRzKSxcclxuICAgICAge31cclxuICAgICk7XHJcbiAgICByZXR1cm4geyBkZWZhdWx0cywgc3RhdGVzOiBtYXBwZWRTdG9yZXMgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJpbmQgdGhlIGFjdGlvbnMgdG8gdGhlIGhhbmRsZXJzXHJcbiAgICovXHJcbiAgY29ubmVjdEFjdGlvbkhhbmRsZXJzKCkge1xyXG4gICAgaWYgKHRoaXMuX2FjdGlvbnNTdWJzY3JpcHRpb24gIT09IG51bGwpIHJldHVybjtcclxuICAgIGNvbnN0IGRpc3BhdGNoZWQkID0gbmV3IFN1YmplY3Q8QWN0aW9uQ29udGV4dD4oKTtcclxuICAgIHRoaXMuX2FjdGlvbnNTdWJzY3JpcHRpb24gPSB0aGlzLl9hY3Rpb25zXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigoY3R4OiBBY3Rpb25Db250ZXh0KSA9PiBjdHguc3RhdHVzID09PSBBY3Rpb25TdGF0dXMuRGlzcGF0Y2hlZCksXHJcbiAgICAgICAgbWVyZ2VNYXAoY3R4ID0+IHtcclxuICAgICAgICAgIGRpc3BhdGNoZWQkLm5leHQoY3R4KTtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGN0eC5hY3Rpb247XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbnZva2VBY3Rpb25zKGRpc3BhdGNoZWQkLCBhY3Rpb24hKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKCkgPT4gPEFjdGlvbkNvbnRleHQ+eyBhY3Rpb24sIHN0YXR1czogQWN0aW9uU3RhdHVzLlN1Y2Nlc3NmdWwgfSksXHJcbiAgICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KDxBY3Rpb25Db250ZXh0PnsgYWN0aW9uLCBzdGF0dXM6IEFjdGlvblN0YXR1cy5DYW5jZWxlZCB9KSxcclxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PlxyXG4gICAgICAgICAgICAgIG9mKDxBY3Rpb25Db250ZXh0PnsgYWN0aW9uLCBzdGF0dXM6IEFjdGlvblN0YXR1cy5FcnJvcmVkLCBlcnJvciB9KVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShjdHggPT4gdGhpcy5fYWN0aW9uUmVzdWx0cy5uZXh0KGN0eCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW52b2tlIGFjdGlvbnMgb24gdGhlIHN0YXRlcy5cclxuICAgKi9cclxuICBpbnZva2VBY3Rpb25zKGRpc3BhdGNoZWQkOiBPYnNlcnZhYmxlPEFjdGlvbkNvbnRleHQ+LCBhY3Rpb246IGFueSkge1xyXG4gICAgY29uc3QgdHlwZSA9IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UoYWN0aW9uKSE7XHJcbiAgICBjb25zdCByZXN1bHRzID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBtZXRhZGF0YSBvZiB0aGlzLnN0YXRlcykge1xyXG4gICAgICBjb25zdCBhY3Rpb25NZXRhcyA9IG1ldGFkYXRhLmFjdGlvbnNbdHlwZV07XHJcblxyXG4gICAgICBpZiAoYWN0aW9uTWV0YXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbk1ldGEgb2YgYWN0aW9uTWV0YXMpIHtcclxuICAgICAgICAgIGNvbnN0IHN0YXRlQ29udGV4dCA9IHRoaXMuX3N0YXRlQ29udGV4dEZhY3RvcnkuY3JlYXRlU3RhdGVDb250ZXh0KG1ldGFkYXRhKTtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBtZXRhZGF0YS5pbnN0YW5jZVthY3Rpb25NZXRhLmZuXShzdGF0ZUNvbnRleHQsIGFjdGlvbik7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICAgIHJlc3VsdCA9IGZyb20ocmVzdWx0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcclxuICAgICAgICAgICAgICAvLyBJZiB0aGlzIG9ic2VydmFibGUgaGFzIGJlZW4gY29tcGxldGVkIHcvbyBlbWl0dGluZ1xyXG4gICAgICAgICAgICAgIC8vIGFueSB2YWx1ZSB0aGVuIHdlIHdvdWxkbid0IHdhbnQgdG8gY29tcGxldGUgdGhlIHdob2xlIGNoYWluXHJcbiAgICAgICAgICAgICAgLy8gb2YgYWN0aW9ucy4gU2luY2UgaWYgYW55IG9ic2VydmFibGUgY29tcGxldGVzIHRoZW5cclxuICAgICAgICAgICAgICAvLyBhY3Rpb24gd2lsbCBiZSBjYW5jZWxlZC5cclxuICAgICAgICAgICAgICAvLyBGb3IgaW5zdGFuY2UgaWYgYW55IGFjdGlvbiBoYW5kbGVyIHdvdWxkJ3ZlIGhhZCBzdWNoIHN0YXRlbWVudDpcclxuICAgICAgICAgICAgICAvLyBgaGFuZGxlcihjdHgpIHsgcmV0dXJuIEVNUFRZOyB9YFxyXG4gICAgICAgICAgICAgIC8vIHRoZW4gdGhlIGFjdGlvbiB3aWxsIGJlIGNhbmNlbGVkLlxyXG4gICAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbmd4cy9zdG9yZS9pc3N1ZXMvMTU2OFxyXG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5waXBlKFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmcm9tKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvZih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHt9KVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChhY3Rpb25NZXRhLm9wdGlvbnMuY2FuY2VsVW5jb21wbGV0ZWQpIHtcclxuICAgICAgICAgICAgICAgIC8vIHRvZG86IG9mQWN0aW9uRGlzcGF0Y2hlZCBzaG91bGQgYmUgdXNlZCB3aXRoIGFjdGlvbiBjbGFzc1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIHRha2VVbnRpbChkaXNwYXRjaGVkJC5waXBlKG9mQWN0aW9uRGlzcGF0Y2hlZChhY3Rpb24gYXMgYW55KSkpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXN1bHQgPSBvZih7fSkucGlwZShzaGFyZVJlcGxheSgpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aHJvd0Vycm9yKGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoKSB7XHJcbiAgICAgIHJlc3VsdHMucHVzaChvZih7fSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JrSm9pbihyZXN1bHRzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkVG9TdGF0ZXNNYXAoXHJcbiAgICBzdGF0ZUNsYXNzZXM6IFN0YXRlQ2xhc3NJbnRlcm5hbFtdXHJcbiAgKTogeyBuZXdTdGF0ZXM6IFN0YXRlQ2xhc3NJbnRlcm5hbFtdIH0ge1xyXG4gICAgY29uc3QgbmV3U3RhdGVzOiBTdGF0ZUNsYXNzSW50ZXJuYWxbXSA9IFtdO1xyXG4gICAgY29uc3Qgc3RhdGVzTWFwOiBTdGF0ZXNCeU5hbWUgPSB0aGlzLnN0YXRlc0J5TmFtZTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHN0YXRlQ2xhc3Mgb2Ygc3RhdGVDbGFzc2VzKSB7XHJcbiAgICAgIGNvbnN0IHN0YXRlTmFtZSA9IGdldFN0b3JlTWV0YWRhdGEoc3RhdGVDbGFzcykubmFtZSE7XHJcbiAgICAgIC8vIENhcmV0YWtlciBub3RlOiB3ZSBoYXZlIHN0aWxsIGxlZnQgdGhlIGB0eXBlb2ZgIGNvbmRpdGlvbiBpbiBvcmRlciB0byBhdm9pZFxyXG4gICAgICAvLyBjcmVhdGluZyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgcHJvamVjdHMgdGhhdCBzdGlsbCB1c2UgdGhlIFZpZXcgRW5naW5lLlxyXG4gICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XHJcbiAgICAgICAgU3RvcmVWYWxpZGF0b3JzLmNoZWNrVGhhdFN0YXRlTmFtZUlzVW5pcXVlKHN0YXRlTmFtZSwgc3RhdGVDbGFzcywgc3RhdGVzTWFwKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB1bm1vdW50ZWRTdGF0ZSA9ICFzdGF0ZXNNYXBbc3RhdGVOYW1lXTtcclxuICAgICAgaWYgKHVubW91bnRlZFN0YXRlKSB7XHJcbiAgICAgICAgbmV3U3RhdGVzLnB1c2goc3RhdGVDbGFzcyk7XHJcbiAgICAgICAgc3RhdGVzTWFwW3N0YXRlTmFtZV0gPSBzdGF0ZUNsYXNzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgbmV3U3RhdGVzIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZFJ1bnRpbWVJbmZvVG9NZXRhKG1ldGE6IE1ldGFEYXRhTW9kZWwsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0ZVBhdGhzW21ldGEubmFtZSFdID0gcGF0aDtcclxuICAgIC8vIFRPRE86IHY0IC0gd2UgcGxhbiB0byBnZXQgcmlkIG9mIHRoZSBwYXRoIHByb3BlcnR5IGJlY2F1c2UgaXQgaXMgbm9uLWRldGVybWluaXN0aWNcclxuICAgIC8vIHdlIGNhbiBkbyB0aGlzIHdoZW4gd2UgZ2V0IHJpZCBvZiB0aGUgaW5jb3JyZWN0bHkgZXhwb3NlZCBnZXRTdG9yZU1ldGFkYXRhXHJcbiAgICAvLyBXZSB3aWxsIG5lZWQgdG8gY29tZSB1cCB3aXRoIGFuIGFsdGVybmF0aXZlIGluIHY0IGJlY2F1c2UgdGhpcyBpcyB1c2VkIGJ5IG1hbnkgcGx1Z2luc1xyXG4gICAgbWV0YS5wYXRoID0gcGF0aDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvblxyXG4gICAqIHRoZSBtZXRob2QgY2hlY2tzIGlmIHRoZSBzdGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHRoZSB0cmVlXHJcbiAgICogYW5kIGNvbXBsZXRlZCB0aGUgbGlmZSBjeWNsZVxyXG4gICAqIEBwYXJhbSBuYW1lXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKi9cclxuICBwcml2YXRlIGhhc0JlZW5Nb3VudGVkQW5kQm9vdHN0cmFwcGVkKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB2YWx1ZUlzQm9vdHN0cmFwcGVkSW5Jbml0aWFsU3RhdGU6IGJvb2xlYW4gPVxyXG4gICAgICBnZXRWYWx1ZSh0aGlzLl9pbml0aWFsU3RhdGUsIHBhdGgpICE9PSB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXNCeU5hbWVbbmFtZV0gJiYgdmFsdWVJc0Jvb3RzdHJhcHBlZEluSW5pdGlhbFN0YXRlO1xyXG4gIH1cclxufVxyXG4iXX0=