@ngxs/store 3.7.3-dev.master-8834f50 → 3.7.3

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 (267) hide show
  1. package/README.md +16 -16
  2. package/bundles/ngxs-store-internals-testing.umd.js +215 -235
  3. package/bundles/ngxs-store-internals-testing.umd.js.map +1 -1
  4. package/bundles/ngxs-store-internals-testing.umd.min.js +2 -2
  5. package/bundles/ngxs-store-internals-testing.umd.min.js.map +1 -1
  6. package/bundles/ngxs-store-internals.umd.js +211 -422
  7. package/bundles/ngxs-store-internals.umd.js.map +1 -1
  8. package/bundles/ngxs-store-internals.umd.min.js +1 -1
  9. package/bundles/ngxs-store-internals.umd.min.js.map +1 -1
  10. package/bundles/ngxs-store-operators.umd.js +310 -311
  11. package/bundles/ngxs-store-operators.umd.js.map +1 -1
  12. package/bundles/ngxs-store-operators.umd.min.js +1 -1
  13. package/bundles/ngxs-store-operators.umd.min.js.map +1 -1
  14. package/bundles/ngxs-store.umd.js +4518 -4422
  15. package/bundles/ngxs-store.umd.js.map +1 -1
  16. package/bundles/ngxs-store.umd.min.js +1 -1
  17. package/bundles/ngxs-store.umd.min.js.map +1 -1
  18. package/esm2015/index.js +13 -13
  19. package/esm2015/internals/angular.js +40 -46
  20. package/esm2015/internals/index.js +10 -11
  21. package/esm2015/internals/initial-state.js +34 -34
  22. package/esm2015/internals/internal-tokens.js +16 -16
  23. package/esm2015/internals/memoize.js +70 -70
  24. package/esm2015/internals/ngxs-bootstrapper.js +41 -41
  25. package/esm2015/internals/ngxs-store-internals.js +9 -9
  26. package/esm2015/internals/src/symbols.js +14 -14
  27. package/esm2015/internals/symbols.js +14 -14
  28. package/esm2015/internals/testing/fresh-platform.js +71 -90
  29. package/esm2015/internals/testing/helpers/ngxs-test.component.js +22 -22
  30. package/esm2015/internals/testing/helpers/ngxs-test.module.js +24 -24
  31. package/esm2015/internals/testing/index.js +7 -7
  32. package/esm2015/internals/testing/ngxs-store-internals-testing.js +8 -8
  33. package/esm2015/internals/testing/ngxs.setup.js +76 -76
  34. package/esm2015/internals/testing/symbol.js +29 -29
  35. package/esm2015/ngxs-store.js +27 -24
  36. package/esm2015/operators/append.js +31 -31
  37. package/esm2015/operators/compose.js +24 -24
  38. package/esm2015/operators/iif.js +56 -56
  39. package/esm2015/operators/index.js +18 -18
  40. package/esm2015/operators/insert-item.js +41 -41
  41. package/esm2015/operators/internals.js +5 -5
  42. package/esm2015/operators/ngxs-store-operators.js +8 -8
  43. package/esm2015/operators/patch.js +39 -38
  44. package/esm2015/operators/remove-item.js +34 -34
  45. package/esm2015/operators/update-item.js +52 -54
  46. package/esm2015/operators/utils.js +50 -50
  47. package/esm2015/src/actions/actions.js +39 -39
  48. package/esm2015/src/actions/symbols.js +39 -39
  49. package/esm2015/src/actions-stream.js +140 -138
  50. package/esm2015/src/configs/messages.config.js +87 -79
  51. package/esm2015/src/decorators/action.js +44 -48
  52. package/esm2015/src/decorators/select/select-factory.js +46 -49
  53. package/esm2015/src/decorators/select/select.js +45 -80
  54. package/esm2015/src/decorators/select/symbols.js +50 -94
  55. package/esm2015/src/decorators/selector/selector.js +55 -59
  56. package/esm2015/src/decorators/selector/symbols.js +5 -5
  57. package/esm2015/src/decorators/selector-options.js +34 -34
  58. package/esm2015/src/decorators/state.js +75 -83
  59. package/esm2015/src/execution/dispatch-outside-zone-ngxs-execution-strategy.js +96 -101
  60. package/esm2015/src/execution/internal-ngxs-execution-strategy.js +45 -45
  61. package/esm2015/src/execution/noop-ngxs-execution-strategy.js +27 -27
  62. package/esm2015/src/execution/symbols.js +29 -29
  63. package/esm2015/src/host-environment/host-environment.js +31 -0
  64. package/esm2015/src/internal/config-validator.js +67 -0
  65. package/esm2015/src/internal/dispatcher.js +217 -217
  66. package/esm2015/src/internal/internals.js +489 -493
  67. package/esm2015/src/internal/lifecycle-state-manager.js +129 -129
  68. package/esm2015/src/internal/state-context-factory.js +138 -138
  69. package/esm2015/src/internal/state-factory.js +429 -449
  70. package/esm2015/src/internal/state-operations.js +125 -120
  71. package/esm2015/src/internal/state-operators.js +33 -33
  72. package/esm2015/src/internal/state-stream.js +21 -21
  73. package/esm2015/src/ivy/ensure-state-class-is-injectable.js +34 -0
  74. package/esm2015/src/ivy/ivy-enabled-in-dev-mode.js +40 -28
  75. package/esm2015/src/module.js +172 -158
  76. package/esm2015/src/modules/ngxs-feature.module.js +63 -63
  77. package/esm2015/src/modules/ngxs-root.module.js +52 -52
  78. package/esm2015/src/operators/leave-ngxs.js +58 -58
  79. package/esm2015/src/operators/of-action.js +191 -191
  80. package/esm2015/src/plugin-manager.js +70 -70
  81. package/esm2015/src/plugin_api.js +10 -10
  82. package/esm2015/src/public_api.js +29 -29
  83. package/esm2015/src/public_to_deprecate.js +64 -64
  84. package/esm2015/src/state-token/state-token.js +45 -45
  85. package/esm2015/src/state-token/symbols.js +5 -5
  86. package/esm2015/src/store.js +174 -174
  87. package/esm2015/src/symbols.js +221 -217
  88. package/esm2015/src/utils/compose.js +44 -44
  89. package/esm2015/src/utils/freeze.js +35 -35
  90. package/esm2015/src/utils/selector-utils.js +221 -221
  91. package/esm2015/src/utils/store-validators.js +65 -60
  92. package/esm2015/src/utils/utils.js +143 -143
  93. package/esm5/index.js +13 -13
  94. package/esm5/internals/angular.js +40 -46
  95. package/esm5/internals/index.js +10 -11
  96. package/esm5/internals/initial-state.js +45 -45
  97. package/esm5/internals/internal-tokens.js +16 -16
  98. package/esm5/internals/memoize.js +71 -71
  99. package/esm5/internals/ngxs-bootstrapper.js +56 -56
  100. package/esm5/internals/ngxs-store-internals.js +9 -9
  101. package/esm5/internals/src/symbols.js +14 -14
  102. package/esm5/internals/symbols.js +14 -14
  103. package/esm5/internals/testing/fresh-platform.js +81 -101
  104. package/esm5/internals/testing/helpers/ngxs-test.component.js +32 -32
  105. package/esm5/internals/testing/helpers/ngxs-test.module.js +32 -32
  106. package/esm5/internals/testing/index.js +7 -7
  107. package/esm5/internals/testing/ngxs-store-internals-testing.js +8 -8
  108. package/esm5/internals/testing/ngxs.setup.js +98 -98
  109. package/esm5/internals/testing/symbol.js +29 -29
  110. package/esm5/ngxs-store.js +27 -24
  111. package/esm5/operators/append.js +31 -31
  112. package/esm5/operators/compose.js +28 -28
  113. package/esm5/operators/iif.js +56 -56
  114. package/esm5/operators/index.js +18 -18
  115. package/esm5/operators/insert-item.js +41 -41
  116. package/esm5/operators/internals.js +5 -5
  117. package/esm5/operators/ngxs-store-operators.js +8 -8
  118. package/esm5/operators/patch.js +40 -39
  119. package/esm5/operators/remove-item.js +34 -34
  120. package/esm5/operators/update-item.js +52 -54
  121. package/esm5/operators/utils.js +50 -50
  122. package/esm5/src/actions/actions.js +62 -62
  123. package/esm5/src/actions/symbols.js +39 -39
  124. package/esm5/src/actions-stream.js +186 -184
  125. package/esm5/src/configs/messages.config.js +104 -79
  126. package/esm5/src/decorators/action.js +56 -60
  127. package/esm5/src/decorators/select/select-factory.js +47 -50
  128. package/esm5/src/decorators/select/select.js +50 -86
  129. package/esm5/src/decorators/select/symbols.js +51 -95
  130. package/esm5/src/decorators/selector/selector.js +55 -59
  131. package/esm5/src/decorators/selector/symbols.js +5 -5
  132. package/esm5/src/decorators/selector-options.js +34 -34
  133. package/esm5/src/decorators/state.js +76 -84
  134. package/esm5/src/execution/dispatch-outside-zone-ngxs-execution-strategy.js +121 -121
  135. package/esm5/src/execution/internal-ngxs-execution-strategy.js +54 -54
  136. package/esm5/src/execution/noop-ngxs-execution-strategy.js +41 -41
  137. package/esm5/src/execution/symbols.js +29 -29
  138. package/esm5/src/host-environment/host-environment.js +29 -0
  139. package/esm5/src/internal/config-validator.js +76 -0
  140. package/esm5/src/internal/dispatcher.js +253 -253
  141. package/esm5/src/internal/internals.js +491 -495
  142. package/esm5/src/internal/lifecycle-state-manager.js +177 -177
  143. package/esm5/src/internal/state-context-factory.js +146 -146
  144. package/esm5/src/internal/state-factory.js +563 -575
  145. package/esm5/src/internal/state-operations.js +139 -130
  146. package/esm5/src/internal/state-operators.js +34 -34
  147. package/esm5/src/internal/state-stream.js +25 -25
  148. package/esm5/src/ivy/ensure-state-class-is-injectable.js +34 -0
  149. package/esm5/src/ivy/ivy-enabled-in-dev-mode.js +40 -28
  150. package/esm5/src/module.js +215 -201
  151. package/esm5/src/modules/ngxs-feature.module.js +65 -65
  152. package/esm5/src/modules/ngxs-root.module.js +47 -47
  153. package/esm5/src/operators/leave-ngxs.js +58 -58
  154. package/esm5/src/operators/of-action.js +217 -217
  155. package/esm5/src/plugin-manager.js +82 -82
  156. package/esm5/src/plugin_api.js +10 -10
  157. package/esm5/src/public_api.js +29 -29
  158. package/esm5/src/public_to_deprecate.js +64 -64
  159. package/esm5/src/state-token/state-token.js +57 -57
  160. package/esm5/src/state-token/symbols.js +5 -5
  161. package/esm5/src/store.js +225 -225
  162. package/esm5/src/symbols.js +230 -226
  163. package/esm5/src/utils/compose.js +55 -55
  164. package/esm5/src/utils/freeze.js +35 -35
  165. package/esm5/src/utils/selector-utils.js +230 -230
  166. package/esm5/src/utils/store-validators.js +86 -78
  167. package/esm5/src/utils/utils.js +151 -151
  168. package/fesm2015/ngxs-store-internals-testing.js +175 -194
  169. package/fesm2015/ngxs-store-internals-testing.js.map +1 -1
  170. package/fesm2015/ngxs-store-internals.js +194 -402
  171. package/fesm2015/ngxs-store-internals.js.map +1 -1
  172. package/fesm2015/ngxs-store-operators.js +312 -313
  173. package/fesm2015/ngxs-store-operators.js.map +1 -1
  174. package/fesm2015/ngxs-store.js +3976 -3926
  175. package/fesm2015/ngxs-store.js.map +1 -1
  176. package/fesm5/ngxs-store-internals-testing.js +221 -241
  177. package/fesm5/ngxs-store-internals-testing.js.map +1 -1
  178. package/fesm5/ngxs-store-internals.js +219 -427
  179. package/fesm5/ngxs-store-internals.js.map +1 -1
  180. package/fesm5/ngxs-store-operators.js +316 -317
  181. package/fesm5/ngxs-store-operators.js.map +1 -1
  182. package/fesm5/ngxs-store.js +4510 -4419
  183. package/fesm5/ngxs-store.js.map +1 -1
  184. package/index.d.ts +8 -8
  185. package/internals/angular.d.ts +3 -3
  186. package/internals/index.d.ts +6 -7
  187. package/internals/initial-state.d.ts +8 -8
  188. package/internals/internal-tokens.d.ts +9 -9
  189. package/internals/memoize.d.ts +9 -9
  190. package/internals/ngxs-bootstrapper.d.ts +13 -13
  191. package/internals/ngxs-store-internals.d.ts +4 -4
  192. package/internals/ngxs-store-internals.metadata.json +1 -1
  193. package/internals/src/symbols.d.ts +7 -7
  194. package/internals/symbols.d.ts +7 -7
  195. package/internals/testing/fresh-platform.d.ts +1 -1
  196. package/internals/testing/helpers/ngxs-test.component.d.ts +5 -5
  197. package/internals/testing/helpers/ngxs-test.module.d.ts +4 -4
  198. package/internals/testing/index.d.ts +3 -3
  199. package/internals/testing/ngxs-store-internals-testing.d.ts +4 -4
  200. package/internals/testing/ngxs-store-internals-testing.metadata.json +1 -1
  201. package/internals/testing/ngxs.setup.d.ts +7 -7
  202. package/internals/testing/symbol.d.ts +14 -14
  203. package/ngxs-store.d.ts +23 -20
  204. package/ngxs-store.metadata.json +1 -1
  205. package/operators/append.d.ts +6 -6
  206. package/operators/compose.d.ts +2 -3
  207. package/operators/iif.d.ts +11 -11
  208. package/operators/index.d.ts +13 -13
  209. package/operators/insert-item.d.ts +7 -7
  210. package/operators/internals.d.ts +2 -2
  211. package/operators/ngxs-store-operators.d.ts +4 -4
  212. package/operators/ngxs-store-operators.metadata.json +1 -1
  213. package/operators/patch.d.ts +10 -6
  214. package/operators/remove-item.d.ts +7 -7
  215. package/operators/update-item.d.ts +10 -10
  216. package/operators/utils.d.ts +9 -10
  217. package/package.json +2 -2
  218. package/src/actions/actions.d.ts +15 -15
  219. package/src/actions/symbols.d.ts +21 -21
  220. package/src/actions-stream.d.ts +49 -49
  221. package/src/configs/messages.config.d.ts +30 -11
  222. package/src/decorators/action.d.ts +5 -5
  223. package/src/decorators/select/select-factory.d.ts +14 -13
  224. package/src/decorators/select/select.d.ts +4 -4
  225. package/src/decorators/select/symbols.d.ts +10 -14
  226. package/src/decorators/selector/selector.d.ts +5 -5
  227. package/src/decorators/selector/symbols.d.ts +4 -4
  228. package/src/decorators/selector-options.d.ts +5 -5
  229. package/src/decorators/state.d.ts +6 -6
  230. package/src/execution/dispatch-outside-zone-ngxs-execution-strategy.d.ts +12 -11
  231. package/src/execution/internal-ngxs-execution-strategy.d.ts +7 -7
  232. package/src/execution/noop-ngxs-execution-strategy.d.ts +5 -5
  233. package/src/execution/symbols.d.ts +6 -6
  234. package/src/host-environment/host-environment.d.ts +6 -0
  235. package/src/internal/config-validator.d.ts +10 -0
  236. package/src/internal/dispatcher.d.ts +32 -32
  237. package/src/internal/internals.d.ts +167 -166
  238. package/src/internal/lifecycle-state-manager.d.ts +20 -20
  239. package/src/internal/state-context-factory.d.ts +15 -15
  240. package/src/internal/state-factory.d.ts +58 -57
  241. package/src/internal/state-operations.d.ts +21 -19
  242. package/src/internal/state-operators.d.ts +2 -2
  243. package/src/internal/state-stream.d.ts +9 -9
  244. package/src/ivy/ensure-state-class-is-injectable.d.ts +6 -0
  245. package/src/ivy/ivy-enabled-in-dev-mode.d.ts +14 -6
  246. package/src/module.d.ts +23 -23
  247. package/src/modules/ngxs-feature.module.d.ts +13 -13
  248. package/src/modules/ngxs-root.module.d.ts +13 -13
  249. package/src/operators/leave-ngxs.d.ts +7 -7
  250. package/src/operators/of-action.d.ts +43 -43
  251. package/src/plugin-manager.d.ts +10 -10
  252. package/src/plugin_api.d.ts +5 -5
  253. package/src/public_api.d.ts +17 -17
  254. package/src/public_to_deprecate.d.ts +21 -21
  255. package/src/state-token/state-token.d.ts +7 -7
  256. package/src/state-token/symbols.d.ts +5 -5
  257. package/src/store.d.ts +53 -53
  258. package/src/symbols.d.ts +137 -135
  259. package/src/utils/compose.d.ts +23 -23
  260. package/src/utils/freeze.d.ts +5 -5
  261. package/src/utils/selector-utils.d.ts +23 -23
  262. package/src/utils/store-validators.d.ts +8 -7
  263. package/src/utils/utils.d.ts +46 -46
  264. package/types/index.d.ts +2 -2
  265. package/esm2015/internals/decorator-injector-adapter.js +0 -204
  266. package/esm5/internals/decorator-injector-adapter.js +0 -204
  267. package/internals/decorator-injector-adapter.d.ts +0 -15
@@ -1,495 +1,491 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { META_KEY, META_OPTIONS_KEY, NgxsSimpleChange, SELECTOR_META_KEY } from '../symbols';
6
- import { getValue } from '../utils/utils';
7
- /**
8
- * @record
9
- * @template T, U
10
- */
11
- export function StateClassInternal() { }
12
- if (false) {
13
- /* Skipping unnamed member:
14
- [META_KEY]?: MetaDataModel;*/
15
- /* Skipping unnamed member:
16
- [META_OPTIONS_KEY]?: StoreOptions<U>;*/
17
- }
18
- /**
19
- * @record
20
- * @template T
21
- */
22
- export function StateOperations() { }
23
- if (false) {
24
- /**
25
- * @return {?}
26
- */
27
- StateOperations.prototype.getState = function () { };
28
- /**
29
- * @param {?} val
30
- * @return {?}
31
- */
32
- StateOperations.prototype.setState = function (val) { };
33
- /**
34
- * @param {?} actionOrActions
35
- * @return {?}
36
- */
37
- StateOperations.prototype.dispatch = function (actionOrActions) { };
38
- }
39
- /**
40
- * @record
41
- */
42
- export function MetaDataModel() { }
43
- if (false) {
44
- /** @type {?} */
45
- MetaDataModel.prototype.name;
46
- /** @type {?} */
47
- MetaDataModel.prototype.actions;
48
- /** @type {?} */
49
- MetaDataModel.prototype.defaults;
50
- /** @type {?} */
51
- MetaDataModel.prototype.path;
52
- /** @type {?} */
53
- MetaDataModel.prototype.makeRootSelector;
54
- /** @type {?|undefined} */
55
- MetaDataModel.prototype.children;
56
- }
57
- /**
58
- * @record
59
- */
60
- export function RuntimeSelectorContext() { }
61
- if (false) {
62
- /**
63
- * @param {?} key
64
- * @return {?}
65
- */
66
- RuntimeSelectorContext.prototype.getStateGetter = function (key) { };
67
- /**
68
- * @param {?=} localOptions
69
- * @return {?}
70
- */
71
- RuntimeSelectorContext.prototype.getSelectorOptions = function (localOptions) { };
72
- }
73
- /**
74
- * @record
75
- */
76
- export function SharedSelectorOptions() { }
77
- if (false) {
78
- /** @type {?|undefined} */
79
- SharedSelectorOptions.prototype.injectContainerState;
80
- /** @type {?|undefined} */
81
- SharedSelectorOptions.prototype.suppressErrors;
82
- }
83
- /**
84
- * @record
85
- */
86
- export function SelectorMetaDataModel() { }
87
- if (false) {
88
- /** @type {?} */
89
- SelectorMetaDataModel.prototype.makeRootSelector;
90
- /** @type {?} */
91
- SelectorMetaDataModel.prototype.originalFn;
92
- /** @type {?} */
93
- SelectorMetaDataModel.prototype.containerClass;
94
- /** @type {?} */
95
- SelectorMetaDataModel.prototype.selectorName;
96
- /** @type {?} */
97
- SelectorMetaDataModel.prototype.getSelectorOptions;
98
- }
99
- /**
100
- * @record
101
- */
102
- export function MappedStore() { }
103
- if (false) {
104
- /** @type {?} */
105
- MappedStore.prototype.name;
106
- /** @type {?} */
107
- MappedStore.prototype.isInitialised;
108
- /** @type {?} */
109
- MappedStore.prototype.actions;
110
- /** @type {?} */
111
- MappedStore.prototype.defaults;
112
- /** @type {?} */
113
- MappedStore.prototype.instance;
114
- /** @type {?} */
115
- MappedStore.prototype.path;
116
- }
117
- /**
118
- * @record
119
- */
120
- export function StatesAndDefaults() { }
121
- if (false) {
122
- /** @type {?} */
123
- StatesAndDefaults.prototype.defaults;
124
- /** @type {?} */
125
- StatesAndDefaults.prototype.states;
126
- }
127
- /**
128
- * @record
129
- * @template T
130
- */
131
- export function RootStateDiff() { }
132
- if (false) {
133
- /** @type {?} */
134
- RootStateDiff.prototype.currentAppState;
135
- /** @type {?} */
136
- RootStateDiff.prototype.newAppState;
137
- }
138
- /**
139
- * Ensures metadata is attached to the class and returns it.
140
- *
141
- * @ignore
142
- * @param {?} target
143
- * @return {?}
144
- */
145
- export function ensureStoreMetadata(target) {
146
- if (!target.hasOwnProperty(META_KEY)) {
147
- /** @type {?} */
148
- var defaultMetadata_1 = {
149
- name: null,
150
- actions: {},
151
- defaults: {},
152
- path: null,
153
- makeRootSelector: /**
154
- * @param {?} context
155
- * @return {?}
156
- */
157
- function (context) {
158
- return context.getStateGetter(defaultMetadata_1.name);
159
- },
160
- children: []
161
- };
162
- Object.defineProperty(target, META_KEY, { value: defaultMetadata_1 });
163
- }
164
- return getStoreMetadata(target);
165
- }
166
- /**
167
- * Get the metadata attached to the state class if it exists.
168
- *
169
- * @ignore
170
- * @param {?} target
171
- * @return {?}
172
- */
173
- export function getStoreMetadata(target) {
174
- return (/** @type {?} */ (target[META_KEY]));
175
- }
176
- /**
177
- * Ensures metadata is attached to the selector and returns it.
178
- *
179
- * @ignore
180
- * @param {?} target
181
- * @return {?}
182
- */
183
- export function ensureSelectorMetadata(target) {
184
- if (!target.hasOwnProperty(SELECTOR_META_KEY)) {
185
- /** @type {?} */
186
- var defaultMetadata = {
187
- makeRootSelector: null,
188
- originalFn: null,
189
- containerClass: null,
190
- selectorName: null,
191
- getSelectorOptions: (/**
192
- * @return {?}
193
- */
194
- function () { return ({}); })
195
- };
196
- Object.defineProperty(target, SELECTOR_META_KEY, { value: defaultMetadata });
197
- }
198
- return getSelectorMetadata(target);
199
- }
200
- /**
201
- * Get the metadata attached to the selector if it exists.
202
- *
203
- * @ignore
204
- * @param {?} target
205
- * @return {?}
206
- */
207
- export function getSelectorMetadata(target) {
208
- return target[SELECTOR_META_KEY];
209
- }
210
- /**
211
- * Get a deeply nested value. Example:
212
- *
213
- * getValue({ foo: bar: [] }, 'foo.bar') //=> []
214
- *
215
- * Note: This is not as fast as the `fastPropGetter` but is strict Content Security Policy compliant.
216
- * See perf hit: https://jsperf.com/fast-value-getter-given-path/1
217
- *
218
- * @ignore
219
- * @param {?} paths
220
- * @return {?}
221
- */
222
- function compliantPropGetter(paths) {
223
- /** @type {?} */
224
- var copyOfPaths = paths.slice();
225
- return (/**
226
- * @param {?} obj
227
- * @return {?}
228
- */
229
- function (obj) { return copyOfPaths.reduce((/**
230
- * @param {?} acc
231
- * @param {?} part
232
- * @return {?}
233
- */
234
- function (acc, part) { return acc && acc[part]; }), obj); });
235
- }
236
- /**
237
- * The generated function is faster than:
238
- * - pluck (Observable operator)
239
- * - memoize
240
- *
241
- * @ignore
242
- * @param {?} paths
243
- * @return {?}
244
- */
245
- function fastPropGetter(paths) {
246
- /** @type {?} */
247
- var segments = paths;
248
- /** @type {?} */
249
- var seg = 'store.' + segments[0];
250
- /** @type {?} */
251
- var i = 0;
252
- /** @type {?} */
253
- var l = segments.length;
254
- /** @type {?} */
255
- var expr = seg;
256
- while (++i < l) {
257
- expr = expr + ' && ' + (seg = seg + '.' + segments[i]);
258
- }
259
- /** @type {?} */
260
- var fn = new Function('store', 'return ' + expr + ';');
261
- return (/** @type {?} */ (fn));
262
- }
263
- /**
264
- * Get a deeply nested value. Example:
265
- *
266
- * getValue({ foo: bar: [] }, 'foo.bar') //=> []
267
- *
268
- * @ignore
269
- * @param {?} paths
270
- * @param {?} config
271
- * @return {?}
272
- */
273
- export function propGetter(paths, config) {
274
- if (config && config.compatibility && config.compatibility.strictContentSecurityPolicy) {
275
- return compliantPropGetter(paths);
276
- }
277
- else {
278
- return fastPropGetter(paths);
279
- }
280
- }
281
- /**
282
- * Given an array of states, it will return a object graph. Example:
283
- * const states = [
284
- * Cart,
285
- * CartSaved,
286
- * CartSavedItems
287
- * ]
288
- *
289
- * would return:
290
- *
291
- * const graph = {
292
- * cart: ['saved'],
293
- * saved: ['items'],
294
- * items: []
295
- * };
296
- *
297
- * @ignore
298
- * @param {?} stateClasses
299
- * @return {?}
300
- */
301
- export function buildGraph(stateClasses) {
302
- /** @type {?} */
303
- var findName = (/**
304
- * @param {?} stateClass
305
- * @return {?}
306
- */
307
- function (stateClass) {
308
- /** @type {?} */
309
- var meta = stateClasses.find((/**
310
- * @param {?} g
311
- * @return {?}
312
- */
313
- function (g) { return g === stateClass; }));
314
- // Caretaker note: we have still left the `typeof` condition in order to avoid
315
- // creating a breaking change for projects that still use the View Engine.
316
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && !meta) {
317
- throw new Error("Child state not found: " + stateClass + ". \r\nYou may have forgotten to add states to module");
318
- }
319
- return (/** @type {?} */ ((/** @type {?} */ ((/** @type {?} */ (meta))[META_KEY])).name));
320
- });
321
- return stateClasses.reduce((/**
322
- * @param {?} result
323
- * @param {?} stateClass
324
- * @return {?}
325
- */
326
- function (result, stateClass) {
327
- var _a = (/** @type {?} */ (stateClass[META_KEY])), name = _a.name, children = _a.children;
328
- result[(/** @type {?} */ (name))] = (children || []).map(findName);
329
- return result;
330
- }), {});
331
- }
332
- /**
333
- * Given a states array, returns object graph
334
- * returning the name and state metadata. Example:
335
- *
336
- * const graph = {
337
- * cart: { metadata }
338
- * };
339
- *
340
- * @ignore
341
- * @param {?} states
342
- * @return {?}
343
- */
344
- export function nameToState(states) {
345
- return states.reduce((/**
346
- * @param {?} result
347
- * @param {?} stateClass
348
- * @return {?}
349
- */
350
- function (result, stateClass) {
351
- /** @type {?} */
352
- var meta = (/** @type {?} */ (stateClass[META_KEY]));
353
- result[(/** @type {?} */ (meta.name))] = stateClass;
354
- return result;
355
- }), {});
356
- }
357
- /**
358
- * Given a object relationship graph will return the full path
359
- * for the child items. Example:
360
- *
361
- * const graph = {
362
- * cart: ['saved'],
363
- * saved: ['items'],
364
- * items: []
365
- * };
366
- *
367
- * would return:
368
- *
369
- * const r = {
370
- * cart: 'cart',
371
- * saved: 'cart.saved',
372
- * items: 'cart.saved.items'
373
- * };
374
- *
375
- * @ignore
376
- * @param {?} obj
377
- * @param {?=} newObj
378
- * @return {?}
379
- */
380
- export function findFullParentPath(obj, newObj) {
381
- if (newObj === void 0) { newObj = {}; }
382
- /** @type {?} */
383
- var visit = (/**
384
- * @param {?} child
385
- * @param {?} keyToFind
386
- * @return {?}
387
- */
388
- function (child, keyToFind) {
389
- for (var key in child) {
390
- if (child.hasOwnProperty(key) && child[key].indexOf(keyToFind) >= 0) {
391
- /** @type {?} */
392
- var parent_1 = visit(child, key);
393
- return parent_1 !== null ? parent_1 + "." + key : key;
394
- }
395
- }
396
- return null;
397
- });
398
- for (var key in obj) {
399
- if (obj.hasOwnProperty(key)) {
400
- /** @type {?} */
401
- var parent_2 = visit(obj, key);
402
- newObj[key] = parent_2 ? parent_2 + "." + key : key;
403
- }
404
- }
405
- return newObj;
406
- }
407
- /**
408
- * Given a object graph, it will return the items topologically sorted Example:
409
- *
410
- * const graph = {
411
- * cart: ['saved'],
412
- * saved: ['items'],
413
- * items: []
414
- * };
415
- *
416
- * would return:
417
- *
418
- * const results = [
419
- * 'items',
420
- * 'saved',
421
- * 'cart'
422
- * ];
423
- *
424
- * @ignore
425
- * @param {?} graph
426
- * @return {?}
427
- */
428
- export function topologicalSort(graph) {
429
- /** @type {?} */
430
- var sorted = [];
431
- /** @type {?} */
432
- var visited = {};
433
- /** @type {?} */
434
- var visit = (/**
435
- * @param {?} name
436
- * @param {?=} ancestors
437
- * @return {?}
438
- */
439
- function (name, ancestors) {
440
- if (ancestors === void 0) { ancestors = []; }
441
- if (!Array.isArray(ancestors)) {
442
- ancestors = [];
443
- }
444
- ancestors.push(name);
445
- visited[name] = true;
446
- graph[name].forEach((/**
447
- * @param {?} dep
448
- * @return {?}
449
- */
450
- function (dep) {
451
- // Caretaker note: we have still left the `typeof` condition in order to avoid
452
- // creating a breaking change for projects that still use the View Engine.
453
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && ancestors.indexOf(dep) >= 0) {
454
- throw new Error("Circular dependency '" + dep + "' is required by '" + name + "': " + ancestors.join(' -> '));
455
- }
456
- if (visited[dep]) {
457
- return;
458
- }
459
- visit(dep, ancestors.slice(0));
460
- }));
461
- if (sorted.indexOf(name) < 0) {
462
- sorted.push(name);
463
- }
464
- });
465
- Object.keys(graph).forEach((/**
466
- * @param {?} k
467
- * @return {?}
468
- */
469
- function (k) { return visit(k); }));
470
- return sorted.reverse();
471
- }
472
- /**
473
- * Returns if the parameter is a object or not.
474
- *
475
- * @ignore
476
- * @param {?} obj
477
- * @return {?}
478
- */
479
- export function isObject(obj) {
480
- return (typeof obj === 'object' && obj !== null) || typeof obj === 'function';
481
- }
482
- /**
483
- * @template T
484
- * @param {?} mappedStore
485
- * @param {?} diff
486
- * @return {?}
487
- */
488
- export function getStateDiffChanges(mappedStore, diff) {
489
- /** @type {?} */
490
- var previousValue = getValue(diff.currentAppState, mappedStore.path);
491
- /** @type {?} */
492
- var currentValue = getValue(diff.newAppState, mappedStore.path);
493
- return new NgxsSimpleChange(previousValue, currentValue, !mappedStore.isInitialised);
494
- }
495
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMvc3RvcmUvIiwic291cmNlcyI6WyJzcmMvaW50ZXJuYWwvaW50ZXJuYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBRWxCLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFHMUMsd0NBR0M7Ozs7Ozs7Ozs7O0FBS0QscUNBTUM7Ozs7O0lBTEMscURBQWM7Ozs7O0lBRWQsd0RBQW9COzs7OztJQUVwQixvRUFBeUQ7Ozs7O0FBRzNELG1DQU9DOzs7SUFOQyw2QkFBb0I7O0lBQ3BCLGdDQUFnRDs7SUFDaEQsaUNBQWM7O0lBQ2QsNkJBQW9COztJQUNwQix5Q0FBeUM7O0lBQ3pDLGlDQUFnQzs7Ozs7QUFHbEMsNENBR0M7Ozs7OztJQUZDLHFFQUE4Qzs7Ozs7SUFDOUMsa0ZBQWdGOzs7OztBQU1sRiwyQ0FHQzs7O0lBRkMscURBQStCOztJQUMvQiwrQ0FBeUI7Ozs7O0FBRzNCLDJDQU1DOzs7SUFMQyxpREFBeUM7O0lBQ3pDLDJDQUE0Qjs7SUFDNUIsK0NBQW9COztJQUNwQiw2Q0FBNEI7O0lBQzVCLG1EQUFnRDs7Ozs7QUFHbEQsaUNBT0M7OztJQU5DLDJCQUFhOztJQUNiLG9DQUF1Qjs7SUFDdkIsOEJBQWdEOztJQUNoRCwrQkFBYzs7SUFDZCwrQkFBYzs7SUFDZCwyQkFBYTs7Ozs7QUFHZix1Q0FHQzs7O0lBRkMscUNBQWM7O0lBQ2QsbUNBQXNCOzs7Ozs7QUFHeEIsbUNBR0M7OztJQUZDLHdDQUFtQjs7SUFDbkIsb0NBQWU7Ozs7Ozs7OztBQVFqQixNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBMEI7SUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7O1lBQzlCLGlC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LE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMxQixDQUFDOzs7Ozs7OztBQU9ELE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBUTtJQUMvQixPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVLENBQUM7QUFDaEYsQ0FBQzs7Ozs7OztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsV0FBd0IsRUFDeEIsSUFBc0I7O1FBRWhCLGFBQWEsR0FBTSxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDOztRQUNuRSxZQUFZLEdBQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQztJQUNwRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaW5PYmplY3RPZiwgU3RhdGVDbGFzcyB9IGZyb20gJ0BuZ3hzL3N0b3JlL2ludGVybmFscyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIE1FVEFfS0VZLFxuICBNRVRBX09QVElPTlNfS0VZLFxuICBOZ3hzQ29uZmlnLFxuICBOZ3hzU2ltcGxlQ2hhbmdlLFxuICBTRUxFQ1RPUl9NRVRBX0tFWSxcbiAgU3RvcmVPcHRpb25zXG59IGZyb20gJy4uL3N5bWJvbHMnO1xuaW1wb3J0IHsgQWN0aW9uSGFuZGxlck1ldGFEYXRhIH0gZnJvbSAnLi4vYWN0aW9ucy9zeW1ib2xzJztcbmltcG9ydCB7IGdldFZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG4vLyBpbnNwaXJlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MzY3NDM4OVxuZXhwb3J0IGludGVyZmFjZSBTdGF0ZUNsYXNzSW50ZXJuYWw8VCA9IGFueSwgVSA9IGFueT4gZXh0ZW5kcyBTdGF0ZUNsYXNzPFQ+IHtcbiAgW01FVEFfS0VZXT86IE1ldGFEYXRhTW9kZWw7XG4gIFtNRVRBX09QVElPTlNfS0VZXT86IFN0b3JlT3B0aW9uczxVPjtcbn1cblxuZXhwb3J0IHR5cGUgU3RhdGVLZXlHcmFwaCA9IFBsYWluT2JqZWN0T2Y8c3RyaW5nW10+O1xuZXhwb3J0IHR5cGUgU3RhdGVzQnlOYW1lID0gUGxhaW5PYmplY3RPZjxTdGF0ZUNsYXNzSW50ZXJuYWw+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlT3BlcmF0aW9uczxUPiB7XG4gIGdldFN0YXRlKCk6IFQ7XG5cbiAgc2V0U3RhdGUodmFsOiBUKTogVDtcblxuICBkaXNwYXRjaChhY3Rpb25PckFjdGlvbnM6IGFueSB8IGFueVtdKTogT2JzZXJ2YWJsZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhRGF0YU1vZGVsIHtcbiAgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgYWN0aW9uczogUGxhaW5PYmplY3RPZjxBY3Rpb25IYW5kbGVyTWV0YURhdGFbXT47XG4gIGRlZmF1bHRzOiBhbnk7XG4gIHBhdGg6IHN0cmluZyB8IG51bGw7XG4gIG1ha2VSb290U2VsZWN0b3I6IFNlbGVjdG9yRmFjdG9yeSB8IG51bGw7XG4gIGNoaWxkcmVuPzogU3RhdGVDbGFzc0ludGVybmFsW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVNlbGVjdG9yQ29udGV4dCB7XG4gIGdldFN0YXRlR2V0dGVyKGtleTogYW55KTogKHN0YXRlOiBhbnkpID0+IGFueTtcbiAgZ2V0U2VsZWN0b3JPcHRpb25zKGxvY2FsT3B0aW9ucz86IFNoYXJlZFNlbGVjdG9yT3B0aW9ucyk6IFNoYXJlZFNlbGVjdG9yT3B0aW9ucztcbn1cblxuZXhwb3J0IHR5cGUgU2VsZWN0RnJvbVJvb3RTdGF0ZSA9IChyb290U3RhdGU6IGFueSkgPT4gYW55O1xuZXhwb3J0IHR5cGUgU2VsZWN0b3JGYWN0b3J5ID0gKHJ1bnRpbWVDb250ZXh0OiBSdW50aW1lU2VsZWN0b3JDb250ZXh0KSA9PiBTZWxlY3RGcm9tUm9vdFN0YXRlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJlZFNlbGVjdG9yT3B0aW9ucyB7XG4gIGluamVjdENvbnRhaW5lclN0YXRlPzogYm9vbGVhbjtcbiAgc3VwcHJlc3NFcnJvcnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdG9yTWV0YURhdGFNb2RlbCB7XG4gIG1ha2VSb290U2VsZWN0b3I6IFNlbGVjdG9yRmFjdG9yeSB8IG51bGw7XG4gIG9yaWdpbmFsRm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgY29udGFpbmVyQ2xhc3M6IGFueTtcbiAgc2VsZWN0b3JOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBnZXRTZWxlY3Rvck9wdGlvbnM6ICgpID0+IFNoYXJlZFNlbGVjdG9yT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBwZWRTdG9yZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNJbml0aWFsaXNlZDogYm9vbGVhbjtcbiAgYWN0aW9uczogUGxhaW5PYmplY3RPZjxBY3Rpb25IYW5kbGVyTWV0YURhdGFbXT47XG4gIGRlZmF1bHRzOiBhbnk7XG4gIGluc3RhbmNlOiBhbnk7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0ZXNBbmREZWZhdWx0cyB7XG4gIGRlZmF1bHRzOiBhbnk7XG4gIHN0YXRlczogTWFwcGVkU3RvcmVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb290U3RhdGVEaWZmPFQ+IHtcbiAgY3VycmVudEFwcFN0YXRlOiBUO1xuICBuZXdBcHBTdGF0ZTogVDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIG1ldGFkYXRhIGlzIGF0dGFjaGVkIHRvIHRoZSBjbGFzcyBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVTdG9yZU1ldGFkYXRhKHRhcmdldDogU3RhdGVDbGFzc0ludGVybmFsKTogTWV0YURhdGFNb2RlbCB7XG4gIGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KE1FVEFfS0VZKSkge1xuICAgIGNvbnN0IGRlZmF1bHRNZXRhZGF0YTogTWV0YURhdGFNb2RlbCA9IHtcbiAgICAgIG5hbWU6IG51bGwsXG4gICAgICBhY3Rpb25zOiB7fSxcbiAgICAgIGRlZmF1bHRzOiB7fSxcbiAgICAgIHBhdGg6IG51bGwsXG4gICAgICBtYWtlUm9vdFNlbGVjdG9yKGNvbnRleHQ6IFJ1bnRpbWVTZWxlY3RvckNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0U3RhdGVHZXR0ZXIoZGVmYXVsdE1ldGFkYXRhLm5hbWUpO1xuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBNRVRBX0tFWSwgeyB2YWx1ZTogZGVmYXVsdE1ldGFkYXRhIH0pO1xuICB9XG4gIHJldHVybiBnZXRTdG9yZU1ldGFkYXRhKHRhcmdldCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgc3RhdGUgY2xhc3MgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlTWV0YWRhdGEodGFyZ2V0OiBTdGF0ZUNsYXNzSW50ZXJuYWwpOiBNZXRhRGF0YU1vZGVsIHtcbiAgcmV0dXJuIHRhcmdldFtNRVRBX0tFWV0hO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgbWV0YWRhdGEgaXMgYXR0YWNoZWQgdG8gdGhlIHNlbGVjdG9yIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVNlbGVjdG9yTWV0YWRhdGEodGFyZ2V0OiBGdW5jdGlvbik6IFNlbGVjdG9yTWV0YURhdGFNb2RlbCB7XG4gIGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KFNFTEVDVE9SX01FVEFfS0VZKSkge1xuICAgIGNvbnN0IGRlZmF1bHRNZXRhZGF0YTogU2VsZWN0b3JNZXRhRGF0YU1vZGVsID0ge1xuICAgICAgbWFrZVJvb3RTZWxlY3RvcjogbnVsbCxcbiAgICAgIG9yaWdpbmFsRm46IG51bGwsXG4gICAgICBjb250YWluZXJDbGFzczogbnVsbCxcbiAgICAgIHNlbGVjdG9yTmFtZTogbnVsbCxcbiAgICAgIGdldFNlbGVjdG9yT3B0aW9uczogKCkgPT4gKHt9KVxuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBTRUxFQ1RPUl9NRVRBX0tFWSwgeyB2YWx1ZTogZGVmYXVsdE1ldGFkYXRhIH0pO1xuICB9XG5cbiAgcmV0dXJuIGdldFNlbGVjdG9yTWV0YWRhdGEodGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRoZSBzZWxlY3RvciBpZiBpdCBleGlzdHMuXG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0b3JNZXRhZGF0YSh0YXJnZXQ6IGFueSk6IFNlbGVjdG9yTWV0YURhdGFNb2RlbCB7XG4gIHJldHVybiB0YXJnZXRbU0VMRUNUT1JfTUVUQV9LRVldO1xufVxuXG4vKipcbiAqIEdldCBhIGRlZXBseSBuZXN0ZWQgdmFsdWUuIEV4YW1wbGU6XG4gKlxuICogICAgZ2V0VmFsdWUoeyBmb286IGJhcjogW10gfSwgJ2Zvby5iYXInKSAvLz0+IFtdXG4gKlxuICogTm90ZTogVGhpcyBpcyBub3QgYXMgZmFzdCBhcyB0aGUgYGZhc3RQcm9wR2V0dGVyYCBidXQgaXMgc3RyaWN0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGNvbXBsaWFudC5cbiAqIFNlZSBwZXJmIGhpdDogaHR0cHM6Ly9qc3BlcmYuY29tL2Zhc3QtdmFsdWUtZ2V0dGVyLWdpdmVuLXBhdGgvMVxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gY29tcGxpYW50UHJvcEdldHRlcihwYXRoczogc3RyaW5nW10pOiAoeDogYW55KSA9PiBhbnkge1xuICBjb25zdCBjb3B5T2ZQYXRocyA9IHBhdGhzLnNsaWNlKCk7XG4gIHJldHVybiBvYmogPT4gY29weU9mUGF0aHMucmVkdWNlKChhY2M6IGFueSwgcGFydDogc3RyaW5nKSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBvYmopO1xufVxuXG4vKipcbiAqIFRoZSBnZW5lcmF0ZWQgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW46XG4gKiAtIHBsdWNrIChPYnNlcnZhYmxlIG9wZXJhdG9yKVxuICogLSBtZW1vaXplXG4gKlxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBmYXN0UHJvcEdldHRlcihwYXRoczogc3RyaW5nW10pOiAoeDogYW55KSA9PiBhbnkge1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGhzO1xuICBsZXQgc2VnID0gJ3N0b3JlLicgKyBzZWdtZW50c1swXTtcbiAgbGV0IGkgPSAwO1xuICBjb25zdCBsID0gc2VnbWVudHMubGVuZ3RoO1xuXG4gIGxldCBleHByID0gc2VnO1xuICB3aGlsZSAoKytpIDwgbCkge1xuICAgIGV4cHIgPSBleHByICsgJyAmJiAnICsgKHNlZyA9IHNlZyArICcuJyArIHNlZ21lbnRzW2ldKTtcbiAgfVxuXG4gIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKCdzdG9yZScsICdyZXR1cm4gJyArIGV4cHIgKyAnOycpO1xuXG4gIHJldHVybiA8KHg6IGFueSkgPT4gYW55PmZuO1xufVxuXG4vKipcbiAqIEdldCBhIGRlZXBseSBuZXN0ZWQgdmFsdWUuIEV4YW1wbGU6XG4gKlxuICogICAgZ2V0VmFsdWUoeyBmb286IGJhcjogW10gfSwgJ2Zvby5iYXInKSAvLz0+IFtdXG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcEdldHRlcihwYXRoczogc3RyaW5nW10sIGNvbmZpZzogTmd4c0NvbmZpZykge1xuICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb21wYXRpYmlsaXR5ICYmIGNvbmZpZy5jb21wYXRpYmlsaXR5LnN0cmljdENvbnRlbnRTZWN1cml0eVBvbGljeSkge1xuICAgIHJldHVybiBjb21wbGlhbnRQcm9wR2V0dGVyKHBhdGhzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFzdFByb3BHZXR0ZXIocGF0aHMpO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gYXJyYXkgb2Ygc3RhdGVzLCBpdCB3aWxsIHJldHVybiBhIG9iamVjdCBncmFwaC4gRXhhbXBsZTpcbiAqICAgIGNvbnN0IHN0YXRlcyA9IFtcbiAqICAgICAgQ2FydCxcbiAqICAgICAgQ2FydFNhdmVkLFxuICogICAgICBDYXJ0U2F2ZWRJdGVtc1xuICogICAgXVxuICpcbiAqIHdvdWxkIHJldHVybjpcbiAqXG4gKiAgY29uc3QgZ3JhcGggPSB7XG4gKiAgICBjYXJ0OiBbJ3NhdmVkJ10sXG4gKiAgICBzYXZlZDogWydpdGVtcyddLFxuICogICAgaXRlbXM6IFtdXG4gKiAgfTtcbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEdyYXBoKHN0YXRlQ2xhc3NlczogU3RhdGVDbGFzc0ludGVybmFsW10pOiBTdGF0ZUtleUdyYXBoIHtcbiAgY29uc3QgZmluZE5hbWUgPSAoc3RhdGVDbGFzczogU3RhdGVDbGFzc0ludGVybmFsKSA9PiB7XG4gICAgY29uc3QgbWV0YSA9IHN0YXRlQ2xhc3Nlcy5maW5kKGcgPT4gZyA9PT0gc3RhdGVDbGFzcyk7XG5cbiAgICAvLyBDYXJldGFrZXIgbm90ZTogd2UgaGF2ZSBzdGlsbCBsZWZ0IHRoZSBgdHlwZW9mYCBjb25kaXRpb24gaW4gb3JkZXIgdG8gYXZvaWRcbiAgICAvLyBjcmVhdGluZyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgcHJvamVjdHMgdGhhdCBzdGlsbCB1c2UgdGhlIFZpZXcgRW5naW5lLlxuICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiAhbWV0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2hpbGQgc3RhdGUgbm90IGZvdW5kOiAke3N0YXRlQ2xhc3N9LiBcXHJcXG5Zb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGFkZCBzdGF0ZXMgdG8gbW9kdWxlYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YSFbTUVUQV9LRVldIS5uYW1lITtcbiAgfTtcblxuICByZXR1cm4gc3RhdGVDbGFzc2VzLnJlZHVjZTxTdGF0ZUtleUdyYXBoPihcbiAgICAocmVzdWx0OiBTdGF0ZUtleUdyYXBoLCBzdGF0ZUNsYXNzOiBTdGF0ZUNsYXNzSW50ZXJuYWwpID0+IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgY2hpbGRyZW4gfSA9IHN0YXRlQ2xhc3NbTUVUQV9LRVldITtcbiAgICAgIHJlc3VsdFtuYW1lIV0gPSAoY2hpbGRyZW4gfHwgW10pLm1hcChmaW5kTmFtZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAge31cbiAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIHN0YXRlcyBhcnJheSwgcmV0dXJucyBvYmplY3QgZ3JhcGhcbiAqIHJldHVybmluZyB0aGUgbmFtZSBhbmQgc3RhdGUgbWV0YWRhdGEuIEV4YW1wbGU6XG4gKlxuICogIGNvbnN0IGdyYXBoID0ge1xuICogICAgY2FydDogeyBtZXRhZGF0YSB9XG4gKiAgfTtcbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lVG9TdGF0ZShzdGF0ZXM6IFN0YXRlQ2xhc3NJbnRlcm5hbFtdKTogUGxhaW5PYmplY3RPZjxTdGF0ZUNsYXNzSW50ZXJuYWw+IHtcbiAgcmV0dXJuIHN0YXRlcy5yZWR1Y2U8UGxhaW5PYmplY3RPZjxTdGF0ZUNsYXNzSW50ZXJuYWw+PihcbiAgICAocmVzdWx0OiBQbGFpbk9iamVjdE9mPFN0YXRlQ2xhc3NJbnRlcm5hbD4sIHN0YXRlQ2xhc3M6IFN0YXRlQ2xhc3NJbnRlcm5hbCkgPT4ge1xuICAgICAgY29uc3QgbWV0YSA9IHN0YXRlQ2xhc3NbTUVUQV9LRVldITtcbiAgICAgIHJlc3VsdFttZXRhLm5hbWUhXSA9IHN0YXRlQ2xhc3M7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAge31cbiAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG9iamVjdCByZWxhdGlvbnNoaXAgZ3JhcGggd2lsbCByZXR1cm4gdGhlIGZ1bGwgcGF0aFxuICogZm9yIHRoZSBjaGlsZCBpdGVtcy4gRXhhbXBsZTpcbiAqXG4gKiAgY29uc3QgZ3JhcGggPSB7XG4gKiAgICBjYXJ0OiBbJ3NhdmVkJ10sXG4gKiAgICBzYXZlZDogWydpdGVtcyddLFxuICogICAgaXRlbXM6IFtdXG4gKiAgfTtcbiAqXG4gKiB3b3VsZCByZXR1cm46XG4gKlxuICogIGNvbnN0IHIgPSB7XG4gKiAgICBjYXJ0OiAnY2FydCcsXG4gKiAgICBzYXZlZDogJ2NhcnQuc2F2ZWQnLFxuICogICAgaXRlbXM6ICdjYXJ0LnNhdmVkLml0ZW1zJ1xuICogIH07XG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEZ1bGxQYXJlbnRQYXRoKFxuICBvYmo6IFN0YXRlS2V5R3JhcGgsXG4gIG5ld09iajogUGxhaW5PYmplY3RPZjxzdHJpbmc+ID0ge31cbik6IFBsYWluT2JqZWN0T2Y8c3RyaW5nPiB7XG4gIGNvbnN0IHZpc2l0ID0gKGNoaWxkOiBTdGF0ZUtleUdyYXBoLCBrZXlUb0ZpbmQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNoaWxkKSB7XG4gICAgICBpZiAoY2hpbGQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBjaGlsZFtrZXldLmluZGV4T2Yoa2V5VG9GaW5kKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHZpc2l0KGNoaWxkLCBrZXkpO1xuICAgICAgICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gYCR7cGFyZW50fS4ke2tleX1gIDoga2V5O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHZpc2l0KG9iaiwga2V5KTtcbiAgICAgIG5ld09ialtrZXldID0gcGFyZW50ID8gYCR7cGFyZW50fS4ke2tleX1gIDoga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdPYmo7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBvYmplY3QgZ3JhcGgsIGl0IHdpbGwgcmV0dXJuIHRoZSBpdGVtcyB0b3BvbG9naWNhbGx5IHNvcnRlZCBFeGFtcGxlOlxuICpcbiAqICBjb25zdCBncmFwaCA9IHtcbiAqICAgIGNhcnQ6IFsnc2F2ZWQnXSxcbiAqICAgIHNhdmVkOiBbJ2l0ZW1zJ10sXG4gKiAgICBpdGVtczogW11cbiAqICB9O1xuICpcbiAqIHdvdWxkIHJldHVybjpcbiAqXG4gKiAgY29uc3QgcmVzdWx0cyA9IFtcbiAqICAgICdpdGVtcycsXG4gKiAgICAnc2F2ZWQnLFxuICogICAgJ2NhcnQnXG4gKiAgXTtcbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b3BvbG9naWNhbFNvcnQoZ3JhcGg6IFN0YXRlS2V5R3JhcGgpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNvcnRlZDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgdmlzaXRlZDogUGxhaW5PYmplY3RPZjxib29sZWFuPiA9IHt9O1xuXG4gIGNvbnN0IHZpc2l0ID0gKG5hbWU6IHN0cmluZywgYW5jZXN0b3JzOiBzdHJpbmdbXSA9IFtdKSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFuY2VzdG9ycykpIHtcbiAgICAgIGFuY2VzdG9ycyA9IFtdO1xuICAgIH1cblxuICAgIGFuY2VzdG9ycy5wdXNoKG5hbWUpO1xuICAgIHZpc2l0ZWRbbmFtZV0gPSB0cnVlO1xuXG4gICAgZ3JhcGhbbmFtZV0uZm9yRWFjaCgoZGVwOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIENhcmV0YWtlciBub3RlOiB3ZSBoYXZlIHN0aWxsIGxlZnQgdGhlIGB0eXBlb2ZgIGNvbmRpdGlvbiBpbiBvcmRlciB0byBhdm9pZFxuICAgICAgLy8gY3JlYXRpbmcgYSBicmVha2luZyBjaGFuZ2UgZm9yIHByb2plY3RzIHRoYXQgc3RpbGwgdXNlIHRoZSBWaWV3IEVuZ2luZS5cbiAgICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBhbmNlc3RvcnMuaW5kZXhPZihkZXApID49IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDaXJjdWxhciBkZXBlbmRlbmN5ICcke2RlcH0nIGlzIHJlcXVpcmVkIGJ5ICcke25hbWV9JzogJHthbmNlc3RvcnMuam9pbignIC0+ICcpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZpc2l0ZWRbZGVwXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpc2l0KGRlcCwgYW5jZXN0b3JzLnNsaWNlKDApKTtcbiAgICB9KTtcblxuICAgIGlmIChzb3J0ZWQuaW5kZXhPZihuYW1lKSA8IDApIHtcbiAgICAgIHNvcnRlZC5wdXNoKG5hbWUpO1xuICAgIH1cbiAgfTtcblxuICBPYmplY3Qua2V5cyhncmFwaCkuZm9yRWFjaChrID0+IHZpc2l0KGspKTtcblxuICByZXR1cm4gc29ydGVkLnJldmVyc2UoKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYSBvYmplY3Qgb3Igbm90LlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KG9iajogYW55KSB7XG4gIHJldHVybiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdGVEaWZmQ2hhbmdlczxUPihcbiAgbWFwcGVkU3RvcmU6IE1hcHBlZFN0b3JlLFxuICBkaWZmOiBSb290U3RhdGVEaWZmPFQ+XG4pOiBOZ3hzU2ltcGxlQ2hhbmdlIHtcbiAgY29uc3QgcHJldmlvdXNWYWx1ZTogVCA9IGdldFZhbHVlKGRpZmYuY3VycmVudEFwcFN0YXRlLCBtYXBwZWRTdG9yZS5wYXRoKTtcbiAgY29uc3QgY3VycmVudFZhbHVlOiBUID0gZ2V0VmFsdWUoZGlmZi5uZXdBcHBTdGF0ZSwgbWFwcGVkU3RvcmUucGF0aCk7XG4gIHJldHVybiBuZXcgTmd4c1NpbXBsZUNoYW5nZShwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUsICFtYXBwZWRTdG9yZS5pc0luaXRpYWxpc2VkKTtcbn1cbiJdfQ==
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { META_KEY, META_OPTIONS_KEY, NgxsSimpleChange, SELECTOR_META_KEY } from '../symbols';
6
+ import { getValue } from '../utils/utils';
7
+ /**
8
+ * @record
9
+ * @template T, U
10
+ */
11
+ export function StateClassInternal() { }
12
+ if (false) {
13
+ /* Skipping unnamed member:
14
+ [META_KEY]?: MetaDataModel;*/
15
+ /* Skipping unnamed member:
16
+ [META_OPTIONS_KEY]?: StoreOptions<U>;*/
17
+ }
18
+ /**
19
+ * @record
20
+ * @template T
21
+ */
22
+ export function StateOperations() { }
23
+ if (false) {
24
+ /**
25
+ * @return {?}
26
+ */
27
+ StateOperations.prototype.getState = function () { };
28
+ /**
29
+ * @param {?} val
30
+ * @return {?}
31
+ */
32
+ StateOperations.prototype.setState = function (val) { };
33
+ /**
34
+ * @param {?} actionOrActions
35
+ * @return {?}
36
+ */
37
+ StateOperations.prototype.dispatch = function (actionOrActions) { };
38
+ }
39
+ /**
40
+ * @record
41
+ */
42
+ export function MetaDataModel() { }
43
+ if (false) {
44
+ /** @type {?} */
45
+ MetaDataModel.prototype.name;
46
+ /** @type {?} */
47
+ MetaDataModel.prototype.actions;
48
+ /** @type {?} */
49
+ MetaDataModel.prototype.defaults;
50
+ /** @type {?} */
51
+ MetaDataModel.prototype.path;
52
+ /** @type {?} */
53
+ MetaDataModel.prototype.makeRootSelector;
54
+ /** @type {?|undefined} */
55
+ MetaDataModel.prototype.children;
56
+ }
57
+ /**
58
+ * @record
59
+ */
60
+ export function RuntimeSelectorContext() { }
61
+ if (false) {
62
+ /**
63
+ * @param {?} key
64
+ * @return {?}
65
+ */
66
+ RuntimeSelectorContext.prototype.getStateGetter = function (key) { };
67
+ /**
68
+ * @param {?=} localOptions
69
+ * @return {?}
70
+ */
71
+ RuntimeSelectorContext.prototype.getSelectorOptions = function (localOptions) { };
72
+ }
73
+ /**
74
+ * @record
75
+ */
76
+ export function SharedSelectorOptions() { }
77
+ if (false) {
78
+ /** @type {?|undefined} */
79
+ SharedSelectorOptions.prototype.injectContainerState;
80
+ /** @type {?|undefined} */
81
+ SharedSelectorOptions.prototype.suppressErrors;
82
+ }
83
+ /**
84
+ * @record
85
+ */
86
+ export function SelectorMetaDataModel() { }
87
+ if (false) {
88
+ /** @type {?} */
89
+ SelectorMetaDataModel.prototype.makeRootSelector;
90
+ /** @type {?} */
91
+ SelectorMetaDataModel.prototype.originalFn;
92
+ /** @type {?} */
93
+ SelectorMetaDataModel.prototype.containerClass;
94
+ /** @type {?} */
95
+ SelectorMetaDataModel.prototype.selectorName;
96
+ /** @type {?} */
97
+ SelectorMetaDataModel.prototype.getSelectorOptions;
98
+ }
99
+ /**
100
+ * @record
101
+ */
102
+ export function MappedStore() { }
103
+ if (false) {
104
+ /** @type {?} */
105
+ MappedStore.prototype.name;
106
+ /** @type {?} */
107
+ MappedStore.prototype.isInitialised;
108
+ /** @type {?} */
109
+ MappedStore.prototype.actions;
110
+ /** @type {?} */
111
+ MappedStore.prototype.defaults;
112
+ /** @type {?} */
113
+ MappedStore.prototype.instance;
114
+ /** @type {?} */
115
+ MappedStore.prototype.path;
116
+ }
117
+ /**
118
+ * @record
119
+ */
120
+ export function StatesAndDefaults() { }
121
+ if (false) {
122
+ /** @type {?} */
123
+ StatesAndDefaults.prototype.defaults;
124
+ /** @type {?} */
125
+ StatesAndDefaults.prototype.states;
126
+ }
127
+ /**
128
+ * @record
129
+ * @template T
130
+ */
131
+ export function RootStateDiff() { }
132
+ if (false) {
133
+ /** @type {?} */
134
+ RootStateDiff.prototype.currentAppState;
135
+ /** @type {?} */
136
+ RootStateDiff.prototype.newAppState;
137
+ }
138
+ /**
139
+ * Ensures metadata is attached to the class and returns it.
140
+ *
141
+ * @ignore
142
+ * @param {?} target
143
+ * @return {?}
144
+ */
145
+ export function ensureStoreMetadata(target) {
146
+ if (!target.hasOwnProperty(META_KEY)) {
147
+ /** @type {?} */
148
+ var defaultMetadata_1 = {
149
+ name: null,
150
+ actions: {},
151
+ defaults: {},
152
+ path: null,
153
+ makeRootSelector: /**
154
+ * @param {?} context
155
+ * @return {?}
156
+ */
157
+ function (context) {
158
+ return context.getStateGetter(defaultMetadata_1.name);
159
+ },
160
+ children: []
161
+ };
162
+ Object.defineProperty(target, META_KEY, { value: defaultMetadata_1 });
163
+ }
164
+ return getStoreMetadata(target);
165
+ }
166
+ /**
167
+ * Get the metadata attached to the state class if it exists.
168
+ *
169
+ * @ignore
170
+ * @param {?} target
171
+ * @return {?}
172
+ */
173
+ export function getStoreMetadata(target) {
174
+ return (/** @type {?} */ (target[META_KEY]));
175
+ }
176
+ /**
177
+ * Ensures metadata is attached to the selector and returns it.
178
+ *
179
+ * @ignore
180
+ * @param {?} target
181
+ * @return {?}
182
+ */
183
+ export function ensureSelectorMetadata(target) {
184
+ if (!target.hasOwnProperty(SELECTOR_META_KEY)) {
185
+ /** @type {?} */
186
+ var defaultMetadata = {
187
+ makeRootSelector: null,
188
+ originalFn: null,
189
+ containerClass: null,
190
+ selectorName: null,
191
+ getSelectorOptions: (/**
192
+ * @return {?}
193
+ */
194
+ function () { return ({}); })
195
+ };
196
+ Object.defineProperty(target, SELECTOR_META_KEY, { value: defaultMetadata });
197
+ }
198
+ return getSelectorMetadata(target);
199
+ }
200
+ /**
201
+ * Get the metadata attached to the selector if it exists.
202
+ *
203
+ * @ignore
204
+ * @param {?} target
205
+ * @return {?}
206
+ */
207
+ export function getSelectorMetadata(target) {
208
+ return target[SELECTOR_META_KEY];
209
+ }
210
+ /**
211
+ * Get a deeply nested value. Example:
212
+ *
213
+ * getValue({ foo: bar: [] }, 'foo.bar') //=> []
214
+ *
215
+ * Note: This is not as fast as the `fastPropGetter` but is strict Content Security Policy compliant.
216
+ * See perf hit: https://jsperf.com/fast-value-getter-given-path/1
217
+ *
218
+ * @ignore
219
+ * @param {?} paths
220
+ * @return {?}
221
+ */
222
+ function compliantPropGetter(paths) {
223
+ /** @type {?} */
224
+ var copyOfPaths = paths.slice();
225
+ return (/**
226
+ * @param {?} obj
227
+ * @return {?}
228
+ */
229
+ function (obj) { return copyOfPaths.reduce((/**
230
+ * @param {?} acc
231
+ * @param {?} part
232
+ * @return {?}
233
+ */
234
+ function (acc, part) { return acc && acc[part]; }), obj); });
235
+ }
236
+ /**
237
+ * The generated function is faster than:
238
+ * - pluck (Observable operator)
239
+ * - memoize
240
+ *
241
+ * @ignore
242
+ * @param {?} paths
243
+ * @return {?}
244
+ */
245
+ function fastPropGetter(paths) {
246
+ /** @type {?} */
247
+ var segments = paths;
248
+ /** @type {?} */
249
+ var seg = 'store.' + segments[0];
250
+ /** @type {?} */
251
+ var i = 0;
252
+ /** @type {?} */
253
+ var l = segments.length;
254
+ /** @type {?} */
255
+ var expr = seg;
256
+ while (++i < l) {
257
+ expr = expr + ' && ' + (seg = seg + '.' + segments[i]);
258
+ }
259
+ /** @type {?} */
260
+ var fn = new Function('store', 'return ' + expr + ';');
261
+ return (/** @type {?} */ (fn));
262
+ }
263
+ /**
264
+ * Get a deeply nested value. Example:
265
+ *
266
+ * getValue({ foo: bar: [] }, 'foo.bar') //=> []
267
+ *
268
+ * @ignore
269
+ * @param {?} paths
270
+ * @param {?} config
271
+ * @return {?}
272
+ */
273
+ export function propGetter(paths, config) {
274
+ if (config && config.compatibility && config.compatibility.strictContentSecurityPolicy) {
275
+ return compliantPropGetter(paths);
276
+ }
277
+ else {
278
+ return fastPropGetter(paths);
279
+ }
280
+ }
281
+ /**
282
+ * Given an array of states, it will return a object graph. Example:
283
+ * const states = [
284
+ * Cart,
285
+ * CartSaved,
286
+ * CartSavedItems
287
+ * ]
288
+ *
289
+ * would return:
290
+ *
291
+ * const graph = {
292
+ * cart: ['saved'],
293
+ * saved: ['items'],
294
+ * items: []
295
+ * };
296
+ *
297
+ * @ignore
298
+ * @param {?} stateClasses
299
+ * @return {?}
300
+ */
301
+ export function buildGraph(stateClasses) {
302
+ /** @type {?} */
303
+ var findName = (/**
304
+ * @param {?} stateClass
305
+ * @return {?}
306
+ */
307
+ function (stateClass) {
308
+ /** @type {?} */
309
+ var meta = stateClasses.find((/**
310
+ * @param {?} g
311
+ * @return {?}
312
+ */
313
+ function (g) { return g === stateClass; }));
314
+ if (!meta) {
315
+ throw new Error("Child state not found: " + stateClass + ". \r\nYou may have forgotten to add states to module");
316
+ }
317
+ return (/** @type {?} */ ((/** @type {?} */ (meta[META_KEY])).name));
318
+ });
319
+ return stateClasses.reduce((/**
320
+ * @param {?} result
321
+ * @param {?} stateClass
322
+ * @return {?}
323
+ */
324
+ function (result, stateClass) {
325
+ var _a = (/** @type {?} */ (stateClass[META_KEY])), name = _a.name, children = _a.children;
326
+ result[(/** @type {?} */ (name))] = (children || []).map(findName);
327
+ return result;
328
+ }), {});
329
+ }
330
+ /**
331
+ * Given a states array, returns object graph
332
+ * returning the name and state metadata. Example:
333
+ *
334
+ * const graph = {
335
+ * cart: { metadata }
336
+ * };
337
+ *
338
+ * @ignore
339
+ * @param {?} states
340
+ * @return {?}
341
+ */
342
+ export function nameToState(states) {
343
+ return states.reduce((/**
344
+ * @param {?} result
345
+ * @param {?} stateClass
346
+ * @return {?}
347
+ */
348
+ function (result, stateClass) {
349
+ /** @type {?} */
350
+ var meta = (/** @type {?} */ (stateClass[META_KEY]));
351
+ result[(/** @type {?} */ (meta.name))] = stateClass;
352
+ return result;
353
+ }), {});
354
+ }
355
+ /**
356
+ * Given a object relationship graph will return the full path
357
+ * for the child items. Example:
358
+ *
359
+ * const graph = {
360
+ * cart: ['saved'],
361
+ * saved: ['items'],
362
+ * items: []
363
+ * };
364
+ *
365
+ * would return:
366
+ *
367
+ * const r = {
368
+ * cart: 'cart',
369
+ * saved: 'cart.saved',
370
+ * items: 'cart.saved.items'
371
+ * };
372
+ *
373
+ * @ignore
374
+ * @param {?} obj
375
+ * @param {?=} newObj
376
+ * @return {?}
377
+ */
378
+ export function findFullParentPath(obj, newObj) {
379
+ if (newObj === void 0) { newObj = {}; }
380
+ /** @type {?} */
381
+ var visit = (/**
382
+ * @param {?} child
383
+ * @param {?} keyToFind
384
+ * @return {?}
385
+ */
386
+ function (child, keyToFind) {
387
+ for (var key in child) {
388
+ if (child.hasOwnProperty(key) && child[key].indexOf(keyToFind) >= 0) {
389
+ /** @type {?} */
390
+ var parent_1 = visit(child, key);
391
+ return parent_1 !== null ? parent_1 + "." + key : key;
392
+ }
393
+ }
394
+ return null;
395
+ });
396
+ for (var key in obj) {
397
+ if (obj.hasOwnProperty(key)) {
398
+ /** @type {?} */
399
+ var parent_2 = visit(obj, key);
400
+ newObj[key] = parent_2 ? parent_2 + "." + key : key;
401
+ }
402
+ }
403
+ return newObj;
404
+ }
405
+ /**
406
+ * Given a object graph, it will return the items topologically sorted Example:
407
+ *
408
+ * const graph = {
409
+ * cart: ['saved'],
410
+ * saved: ['items'],
411
+ * items: []
412
+ * };
413
+ *
414
+ * would return:
415
+ *
416
+ * const results = [
417
+ * 'items',
418
+ * 'saved',
419
+ * 'cart'
420
+ * ];
421
+ *
422
+ * @ignore
423
+ * @param {?} graph
424
+ * @return {?}
425
+ */
426
+ export function topologicalSort(graph) {
427
+ /** @type {?} */
428
+ var sorted = [];
429
+ /** @type {?} */
430
+ var visited = {};
431
+ /** @type {?} */
432
+ var visit = (/**
433
+ * @param {?} name
434
+ * @param {?=} ancestors
435
+ * @return {?}
436
+ */
437
+ function (name, ancestors) {
438
+ if (ancestors === void 0) { ancestors = []; }
439
+ if (!Array.isArray(ancestors)) {
440
+ ancestors = [];
441
+ }
442
+ ancestors.push(name);
443
+ visited[name] = true;
444
+ graph[name].forEach((/**
445
+ * @param {?} dep
446
+ * @return {?}
447
+ */
448
+ function (dep) {
449
+ if (ancestors.indexOf(dep) >= 0) {
450
+ throw new Error("Circular dependency '" + dep + "' is required by '" + name + "': " + ancestors.join(' -> '));
451
+ }
452
+ if (visited[dep]) {
453
+ return;
454
+ }
455
+ visit(dep, ancestors.slice(0));
456
+ }));
457
+ if (sorted.indexOf(name) < 0) {
458
+ sorted.push(name);
459
+ }
460
+ });
461
+ Object.keys(graph).forEach((/**
462
+ * @param {?} k
463
+ * @return {?}
464
+ */
465
+ function (k) { return visit(k); }));
466
+ return sorted.reverse();
467
+ }
468
+ /**
469
+ * Returns if the parameter is a object or not.
470
+ *
471
+ * @ignore
472
+ * @param {?} obj
473
+ * @return {?}
474
+ */
475
+ export function isObject(obj) {
476
+ return (typeof obj === 'object' && obj !== null) || typeof obj === 'function';
477
+ }
478
+ /**
479
+ * @template T
480
+ * @param {?} mappedStore
481
+ * @param {?} diff
482
+ * @return {?}
483
+ */
484
+ export function getStateDiffChanges(mappedStore, diff) {
485
+ /** @type {?} */
486
+ var previousValue = getValue(diff.currentAppState, mappedStore.path);
487
+ /** @type {?} */
488
+ var currentValue = getValue(diff.newAppState, mappedStore.path);
489
+ return new NgxsSimpleChange(previousValue, currentValue, !mappedStore.isInitialised);
490
+ }
491
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMvc3RvcmUvIiwic291cmNlcyI6WyJzcmMvaW50ZXJuYWwvaW50ZXJuYWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSxPQUFPLEVBQ0wsUUFBUSxFQUNSLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBRWxCLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFHMUMsd0NBR0M7Ozs7Ozs7Ozs7O0FBS0QscUNBTUM7Ozs7O0lBTEMscURBQWM7Ozs7O0lBRWQsd0RBQW9COzs7OztJQUVwQixvRUFBeUQ7Ozs7O0FBRzNELG1DQU9DOzs7SUFOQyw2QkFBb0I7O0lBQ3BCLGdDQUFnRDs7SUFDaEQsaUNBQWM7O0lBQ2QsNkJBQW9COztJQUNwQix5Q0FBeUM7O0lBQ3pDLGlDQUFnQzs7Ozs7QUFHbEMsNENBR0M7Ozs7OztJQUZDLHFFQUE4Qzs7Ozs7SUFDOUMsa0ZBQWdGOzs7OztBQU1sRiwyQ0FHQzs7O0lBRkMscURBQStCOztJQUMvQiwrQ0FBeUI7Ozs7O0FBRzNCLDJDQU1DOzs7SUFMQyxpREFBeUM7O0lBQ3pDLDJDQUE0Qjs7SUFDNUIsK0NBQW9COztJQUNwQiw2Q0FBNEI7O0lBQzVCLG1EQUFnRDs7Ozs7QUFHbEQsaUNBT0M7OztJQU5DLDJCQUFhOztJQUNiLG9DQUF1Qjs7SUFDdkIsOEJBQWdEOztJQUNoRCwrQkFBYzs7SUFDZCwrQkFBYzs7SUFDZCwyQkFBYTs7Ozs7QUFHZix1Q0FHQzs7O0lBRkMscUNBQWM7O0lBQ2QsbUNBQXNCOzs7Ozs7QUFLeEIsbUNBR0M7OztJQUZDLHdDQUFtQjs7SUFDbkIsb0NBQWU7Ozs7Ozs7OztBQVFqQixNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBMEI7SUFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7O1lBQzlCLGlC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LFVBQVUsQ0FBQztBQUNoRixDQUFDOzs7Ozs7O0FBRUQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxXQUF3QixFQUN4QixJQUFzQjs7UUFFaEIsYUFBYSxHQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUM7O1FBQ25FLFlBQVksR0FBTSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQ3BFLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3ZGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpbk9iamVjdE9mLCBTdGF0ZUNsYXNzIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBNRVRBX0tFWSxcclxuICBNRVRBX09QVElPTlNfS0VZLFxyXG4gIE5neHNDb25maWcsXHJcbiAgTmd4c1NpbXBsZUNoYW5nZSxcclxuICBTRUxFQ1RPUl9NRVRBX0tFWSxcclxuICBTdG9yZU9wdGlvbnNcclxufSBmcm9tICcuLi9zeW1ib2xzJztcclxuaW1wb3J0IHsgQWN0aW9uSGFuZGxlck1ldGFEYXRhIH0gZnJvbSAnLi4vYWN0aW9ucy9zeW1ib2xzJztcclxuaW1wb3J0IHsgZ2V0VmFsdWUgfSBmcm9tICcuLi91dGlscy91dGlscyc7XHJcblxyXG4vLyBpbnNwaXJlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MzY3NDM4OVxyXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlQ2xhc3NJbnRlcm5hbDxUID0gYW55LCBVID0gYW55PiBleHRlbmRzIFN0YXRlQ2xhc3M8VD4ge1xyXG4gIFtNRVRBX0tFWV0/OiBNZXRhRGF0YU1vZGVsO1xyXG4gIFtNRVRBX09QVElPTlNfS0VZXT86IFN0b3JlT3B0aW9uczxVPjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU3RhdGVLZXlHcmFwaCA9IFBsYWluT2JqZWN0T2Y8c3RyaW5nW10+O1xyXG5leHBvcnQgdHlwZSBTdGF0ZXNCeU5hbWUgPSBQbGFpbk9iamVjdE9mPFN0YXRlQ2xhc3NJbnRlcm5hbD47XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlT3BlcmF0aW9uczxUPiB7XHJcbiAgZ2V0U3RhdGUoKTogVDtcclxuXHJcbiAgc2V0U3RhdGUodmFsOiBUKTogVDtcclxuXHJcbiAgZGlzcGF0Y2goYWN0aW9uT3JBY3Rpb25zOiBhbnkgfCBhbnlbXSk6IE9ic2VydmFibGU8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWV0YURhdGFNb2RlbCB7XHJcbiAgbmFtZTogc3RyaW5nIHwgbnVsbDtcclxuICBhY3Rpb25zOiBQbGFpbk9iamVjdE9mPEFjdGlvbkhhbmRsZXJNZXRhRGF0YVtdPjtcclxuICBkZWZhdWx0czogYW55O1xyXG4gIHBhdGg6IHN0cmluZyB8IG51bGw7XHJcbiAgbWFrZVJvb3RTZWxlY3RvcjogU2VsZWN0b3JGYWN0b3J5IHwgbnVsbDtcclxuICBjaGlsZHJlbj86IFN0YXRlQ2xhc3NJbnRlcm5hbFtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTZWxlY3RvckNvbnRleHQge1xyXG4gIGdldFN0YXRlR2V0dGVyKGtleTogYW55KTogKHN0YXRlOiBhbnkpID0+IGFueTtcclxuICBnZXRTZWxlY3Rvck9wdGlvbnMobG9jYWxPcHRpb25zPzogU2hhcmVkU2VsZWN0b3JPcHRpb25zKTogU2hhcmVkU2VsZWN0b3JPcHRpb25zO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBTZWxlY3RGcm9tUm9vdFN0YXRlID0gKHJvb3RTdGF0ZTogYW55KSA9PiBhbnk7XHJcbmV4cG9ydCB0eXBlIFNlbGVjdG9yRmFjdG9yeSA9IChydW50aW1lQ29udGV4dDogUnVudGltZVNlbGVjdG9yQ29udGV4dCkgPT4gU2VsZWN0RnJvbVJvb3RTdGF0ZTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkU2VsZWN0b3JPcHRpb25zIHtcclxuICBpbmplY3RDb250YWluZXJTdGF0ZT86IGJvb2xlYW47XHJcbiAgc3VwcHJlc3NFcnJvcnM/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdG9yTWV0YURhdGFNb2RlbCB7XHJcbiAgbWFrZVJvb3RTZWxlY3RvcjogU2VsZWN0b3JGYWN0b3J5IHwgbnVsbDtcclxuICBvcmlnaW5hbEZuOiBGdW5jdGlvbiB8IG51bGw7XHJcbiAgY29udGFpbmVyQ2xhc3M6IGFueTtcclxuICBzZWxlY3Rvck5hbWU6IHN0cmluZyB8IG51bGw7XHJcbiAgZ2V0U2VsZWN0b3JPcHRpb25zOiAoKSA9PiBTaGFyZWRTZWxlY3Rvck9wdGlvbnM7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWFwcGVkU3RvcmUge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBpc0luaXRpYWxpc2VkOiBib29sZWFuO1xyXG4gIGFjdGlvbnM6IFBsYWluT2JqZWN0T2Y8QWN0aW9uSGFuZGxlck1ldGFEYXRhW10+O1xyXG4gIGRlZmF1bHRzOiBhbnk7XHJcbiAgaW5zdGFuY2U6IGFueTtcclxuICBwYXRoOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGVzQW5kRGVmYXVsdHMge1xyXG4gIGRlZmF1bHRzOiBhbnk7XHJcbiAgc3RhdGVzOiBNYXBwZWRTdG9yZVtdO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDYWxsYmFjazxUID0gYW55LCBWID0gYW55PiA9ICguLi5hcmdzOiBWW10pID0+IFQ7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RTdGF0ZURpZmY8VD4ge1xyXG4gIGN1cnJlbnRBcHBTdGF0ZTogVDtcclxuICBuZXdBcHBTdGF0ZTogVDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVuc3VyZXMgbWV0YWRhdGEgaXMgYXR0YWNoZWQgdG8gdGhlIGNsYXNzIGFuZCByZXR1cm5zIGl0LlxyXG4gKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlU3RvcmVNZXRhZGF0YSh0YXJnZXQ6IFN0YXRlQ2xhc3NJbnRlcm5hbCk6IE1ldGFEYXRhTW9kZWwge1xyXG4gIGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KE1FVEFfS0VZKSkge1xyXG4gICAgY29uc3QgZGVmYXVsdE1ldGFkYXRhOiBNZXRhRGF0YU1vZGVsID0ge1xyXG4gICAgICBuYW1lOiBudWxsLFxyXG4gICAgICBhY3Rpb25zOiB7fSxcclxuICAgICAgZGVmYXVsdHM6IHt9LFxyXG4gICAgICBwYXRoOiBudWxsLFxyXG4gICAgICBtYWtlUm9vdFNlbGVjdG9yKGNvbnRleHQ6IFJ1bnRpbWVTZWxlY3RvckNvbnRleHQpIHtcclxuICAgICAgICByZXR1cm4gY29udGV4dC5nZXRTdGF0ZUdldHRlcihkZWZhdWx0TWV0YWRhdGEubmFtZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgfTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBNRVRBX0tFWSwgeyB2YWx1ZTogZGVmYXVsdE1ldGFkYXRhIH0pO1xyXG4gIH1cclxuICByZXR1cm4gZ2V0U3RvcmVNZXRhZGF0YSh0YXJnZXQpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgc3RhdGUgY2xhc3MgaWYgaXQgZXhpc3RzLlxyXG4gKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVNZXRhZGF0YSh0YXJnZXQ6IFN0YXRlQ2xhc3NJbnRlcm5hbCk6IE1ldGFEYXRhTW9kZWwge1xyXG4gIHJldHVybiB0YXJnZXRbTUVUQV9LRVldITtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVuc3VyZXMgbWV0YWRhdGEgaXMgYXR0YWNoZWQgdG8gdGhlIHNlbGVjdG9yIGFuZCByZXR1cm5zIGl0LlxyXG4gKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlU2VsZWN0b3JNZXRhZGF0YSh0YXJnZXQ6IEZ1bmN0aW9uKTogU2VsZWN0b3JNZXRhRGF0YU1vZGVsIHtcclxuICBpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShTRUxFQ1RPUl9NRVRBX0tFWSkpIHtcclxuICAgIGNvbnN0IGRlZmF1bHRNZXRhZGF0YTogU2VsZWN0b3JNZXRhRGF0YU1vZGVsID0ge1xyXG4gICAgICBtYWtlUm9vdFNlbGVjdG9yOiBudWxsLFxyXG4gICAgICBvcmlnaW5hbEZuOiBudWxsLFxyXG4gICAgICBjb250YWluZXJDbGFzczogbnVsbCxcclxuICAgICAgc2VsZWN0b3JOYW1lOiBudWxsLFxyXG4gICAgICBnZXRTZWxlY3Rvck9wdGlvbnM6ICgpID0+ICh7fSlcclxuICAgIH07XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgU0VMRUNUT1JfTUVUQV9LRVksIHsgdmFsdWU6IGRlZmF1bHRNZXRhZGF0YSB9KTtcclxuICB9XHJcblxyXG4gIHJldHVybiBnZXRTZWxlY3Rvck1ldGFkYXRhKHRhcmdldCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIG1ldGFkYXRhIGF0dGFjaGVkIHRvIHRoZSBzZWxlY3RvciBpZiBpdCBleGlzdHMuXHJcbiAqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3Rvck1ldGFkYXRhKHRhcmdldDogYW55KTogU2VsZWN0b3JNZXRhRGF0YU1vZGVsIHtcclxuICByZXR1cm4gdGFyZ2V0W1NFTEVDVE9SX01FVEFfS0VZXTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCBhIGRlZXBseSBuZXN0ZWQgdmFsdWUuIEV4YW1wbGU6XHJcbiAqXHJcbiAqICAgIGdldFZhbHVlKHsgZm9vOiBiYXI6IFtdIH0sICdmb28uYmFyJykgLy89PiBbXVxyXG4gKlxyXG4gKiBOb3RlOiBUaGlzIGlzIG5vdCBhcyBmYXN0IGFzIHRoZSBgZmFzdFByb3BHZXR0ZXJgIGJ1dCBpcyBzdHJpY3QgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgY29tcGxpYW50LlxyXG4gKiBTZWUgcGVyZiBoaXQ6IGh0dHBzOi8vanNwZXJmLmNvbS9mYXN0LXZhbHVlLWdldHRlci1naXZlbi1wYXRoLzFcclxuICpcclxuICogQGlnbm9yZVxyXG4gKi9cclxuZnVuY3Rpb24gY29tcGxpYW50UHJvcEdldHRlcihwYXRoczogc3RyaW5nW10pOiAoeDogYW55KSA9PiBhbnkge1xyXG4gIGNvbnN0IGNvcHlPZlBhdGhzID0gcGF0aHMuc2xpY2UoKTtcclxuICByZXR1cm4gb2JqID0+IGNvcHlPZlBhdGhzLnJlZHVjZSgoYWNjOiBhbnksIHBhcnQ6IHN0cmluZykgPT4gYWNjICYmIGFjY1twYXJ0XSwgb2JqKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFRoZSBnZW5lcmF0ZWQgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW46XHJcbiAqIC0gcGx1Y2sgKE9ic2VydmFibGUgb3BlcmF0b3IpXHJcbiAqIC0gbWVtb2l6ZVxyXG4gKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5mdW5jdGlvbiBmYXN0UHJvcEdldHRlcihwYXRoczogc3RyaW5nW10pOiAoeDogYW55KSA9PiBhbnkge1xyXG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aHM7XHJcbiAgbGV0IHNlZyA9ICdzdG9yZS4nICsgc2VnbWVudHNbMF07XHJcbiAgbGV0IGkgPSAwO1xyXG4gIGNvbnN0IGwgPSBzZWdtZW50cy5sZW5ndGg7XHJcblxyXG4gIGxldCBleHByID0gc2VnO1xyXG4gIHdoaWxlICgrK2kgPCBsKSB7XHJcbiAgICBleHByID0gZXhwciArICcgJiYgJyArIChzZWcgPSBzZWcgKyAnLicgKyBzZWdtZW50c1tpXSk7XHJcbiAgfVxyXG5cclxuICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbignc3RvcmUnLCAncmV0dXJuICcgKyBleHByICsgJzsnKTtcclxuXHJcbiAgcmV0dXJuIDwoeDogYW55KSA9PiBhbnk+Zm47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgYSBkZWVwbHkgbmVzdGVkIHZhbHVlLiBFeGFtcGxlOlxyXG4gKlxyXG4gKiAgICBnZXRWYWx1ZSh7IGZvbzogYmFyOiBbXSB9LCAnZm9vLmJhcicpIC8vPT4gW11cclxuICpcclxuICogQGlnbm9yZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3BHZXR0ZXIocGF0aHM6IHN0cmluZ1tdLCBjb25maWc6IE5neHNDb25maWcpIHtcclxuICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb21wYXRpYmlsaXR5ICYmIGNvbmZpZy5jb21wYXRpYmlsaXR5LnN0cmljdENvbnRlbnRTZWN1cml0eVBvbGljeSkge1xyXG4gICAgcmV0dXJuIGNvbXBsaWFudFByb3BHZXR0ZXIocGF0aHMpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gZmFzdFByb3BHZXR0ZXIocGF0aHMpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdpdmVuIGFuIGFycmF5IG9mIHN0YXRlcywgaXQgd2lsbCByZXR1cm4gYSBvYmplY3QgZ3JhcGguIEV4YW1wbGU6XHJcbiAqICAgIGNvbnN0IHN0YXRlcyA9IFtcclxuICogICAgICBDYXJ0LFxyXG4gKiAgICAgIENhcnRTYXZlZCxcclxuICogICAgICBDYXJ0U2F2ZWRJdGVtc1xyXG4gKiAgICBdXHJcbiAqXHJcbiAqIHdvdWxkIHJldHVybjpcclxuICpcclxuICogIGNvbnN0IGdyYXBoID0ge1xyXG4gKiAgICBjYXJ0OiBbJ3NhdmVkJ10sXHJcbiAqICAgIHNhdmVkOiBbJ2l0ZW1zJ10sXHJcbiAqICAgIGl0ZW1zOiBbXVxyXG4gKiAgfTtcclxuICpcclxuICogQGlnbm9yZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkR3JhcGgoc3RhdGVDbGFzc2VzOiBTdGF0ZUNsYXNzSW50ZXJuYWxbXSk6IFN0YXRlS2V5R3JhcGgge1xyXG4gIGNvbnN0IGZpbmROYW1lID0gKHN0YXRlQ2xhc3M6IFN0YXRlQ2xhc3NJbnRlcm5hbCkgPT4ge1xyXG4gICAgY29uc3QgbWV0YSA9IHN0YXRlQ2xhc3Nlcy5maW5kKGcgPT4gZyA9PT0gc3RhdGVDbGFzcyk7XHJcbiAgICBpZiAoIW1ldGEpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgIGBDaGlsZCBzdGF0ZSBub3QgZm91bmQ6ICR7c3RhdGVDbGFzc30uIFxcclxcbllvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gYWRkIHN0YXRlcyB0byBtb2R1bGVgXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1ldGFbTUVUQV9LRVldIS5uYW1lITtcclxuICB9O1xyXG5cclxuICByZXR1cm4gc3RhdGVDbGFzc2VzLnJlZHVjZTxTdGF0ZUtleUdyYXBoPihcclxuICAgIChyZXN1bHQ6IFN0YXRlS2V5R3JhcGgsIHN0YXRlQ2xhc3M6IFN0YXRlQ2xhc3NJbnRlcm5hbCkgPT4ge1xyXG4gICAgICBjb25zdCB7IG5hbWUsIGNoaWxkcmVuIH0gPSBzdGF0ZUNsYXNzW01FVEFfS0VZXSE7XHJcbiAgICAgIHJlc3VsdFtuYW1lIV0gPSAoY2hpbGRyZW4gfHwgW10pLm1hcChmaW5kTmFtZSk7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG4gICAge31cclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gYSBzdGF0ZXMgYXJyYXksIHJldHVybnMgb2JqZWN0IGdyYXBoXHJcbiAqIHJldHVybmluZyB0aGUgbmFtZSBhbmQgc3RhdGUgbWV0YWRhdGEuIEV4YW1wbGU6XHJcbiAqXHJcbiAqICBjb25zdCBncmFwaCA9IHtcclxuICogICAgY2FydDogeyBtZXRhZGF0YSB9XHJcbiAqICB9O1xyXG4gKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbmFtZVRvU3RhdGUoc3RhdGVzOiBTdGF0ZUNsYXNzSW50ZXJuYWxbXSk6IFBsYWluT2JqZWN0T2Y8U3RhdGVDbGFzc0ludGVybmFsPiB7XHJcbiAgcmV0dXJuIHN0YXRlcy5yZWR1Y2U8UGxhaW5PYmplY3RPZjxTdGF0ZUNsYXNzSW50ZXJuYWw+PihcclxuICAgIChyZXN1bHQ6IFBsYWluT2JqZWN0T2Y8U3RhdGVDbGFzc0ludGVybmFsPiwgc3RhdGVDbGFzczogU3RhdGVDbGFzc0ludGVybmFsKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1ldGEgPSBzdGF0ZUNsYXNzW01FVEFfS0VZXSE7XHJcbiAgICAgIHJlc3VsdFttZXRhLm5hbWUhXSA9IHN0YXRlQ2xhc3M7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LFxyXG4gICAge31cclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogR2l2ZW4gYSBvYmplY3QgcmVsYXRpb25zaGlwIGdyYXBoIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHBhdGhcclxuICogZm9yIHRoZSBjaGlsZCBpdGVtcy4gRXhhbXBsZTpcclxuICpcclxuICogIGNvbnN0IGdyYXBoID0ge1xyXG4gKiAgICBjYXJ0OiBbJ3NhdmVkJ10sXHJcbiAqICAgIHNhdmVkOiBbJ2l0ZW1zJ10sXHJcbiAqICAgIGl0ZW1zOiBbXVxyXG4gKiAgfTtcclxuICpcclxuICogd291bGQgcmV0dXJuOlxyXG4gKlxyXG4gKiAgY29uc3QgciA9IHtcclxuICogICAgY2FydDogJ2NhcnQnLFxyXG4gKiAgICBzYXZlZDogJ2NhcnQuc2F2ZWQnLFxyXG4gKiAgICBpdGVtczogJ2NhcnQuc2F2ZWQuaXRlbXMnXHJcbiAqICB9O1xyXG4gKlxyXG4gKiBAaWdub3JlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZmluZEZ1bGxQYXJlbnRQYXRoKFxyXG4gIG9iajogU3RhdGVLZXlHcmFwaCxcclxuICBuZXdPYmo6IFBsYWluT2JqZWN0T2Y8c3RyaW5nPiA9IHt9XHJcbik6IFBsYWluT2JqZWN0T2Y8c3RyaW5nPiB7XHJcbiAgY29uc3QgdmlzaXQgPSAoY2hpbGQ6IFN0YXRlS2V5R3JhcGgsIGtleVRvRmluZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjaGlsZCkge1xyXG4gICAgICBpZiAoY2hpbGQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBjaGlsZFtrZXldLmluZGV4T2Yoa2V5VG9GaW5kKSA+PSAwKSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdmlzaXQoY2hpbGQsIGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IGAke3BhcmVudH0uJHtrZXl9YCA6IGtleTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfTtcclxuXHJcbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdmlzaXQob2JqLCBrZXkpO1xyXG4gICAgICBuZXdPYmpba2V5XSA9IHBhcmVudCA/IGAke3BhcmVudH0uJHtrZXl9YCA6IGtleTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBuZXdPYmo7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHaXZlbiBhIG9iamVjdCBncmFwaCwgaXQgd2lsbCByZXR1cm4gdGhlIGl0ZW1zIHRvcG9sb2dpY2FsbHkgc29ydGVkIEV4YW1wbGU6XHJcbiAqXHJcbiAqICBjb25zdCBncmFwaCA9IHtcclxuICogICAgY2FydDogWydzYXZlZCddLFxyXG4gKiAgICBzYXZlZDogWydpdGVtcyddLFxyXG4gKiAgICBpdGVtczogW11cclxuICogIH07XHJcbiAqXHJcbiAqIHdvdWxkIHJldHVybjpcclxuICpcclxuICogIGNvbnN0IHJlc3VsdHMgPSBbXHJcbiAqICAgICdpdGVtcycsXHJcbiAqICAgICdzYXZlZCcsXHJcbiAqICAgICdjYXJ0J1xyXG4gKiAgXTtcclxuICpcclxuICogQGlnbm9yZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvcG9sb2dpY2FsU29ydChncmFwaDogU3RhdGVLZXlHcmFwaCk6IHN0cmluZ1tdIHtcclxuICBjb25zdCBzb3J0ZWQ6IHN0cmluZ1tdID0gW107XHJcbiAgY29uc3QgdmlzaXRlZDogUGxhaW5PYmplY3RPZjxib29sZWFuPiA9IHt9O1xyXG5cclxuICBjb25zdCB2aXNpdCA9IChuYW1lOiBzdHJpbmcsIGFuY2VzdG9yczogc3RyaW5nW10gPSBbXSkgPT4ge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFuY2VzdG9ycykpIHtcclxuICAgICAgYW5jZXN0b3JzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYW5jZXN0b3JzLnB1c2gobmFtZSk7XHJcbiAgICB2aXNpdGVkW25hbWVdID0gdHJ1ZTtcclxuXHJcbiAgICBncmFwaFtuYW1lXS5mb3JFYWNoKChkZXA6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoYW5jZXN0b3JzLmluZGV4T2YoZGVwKSA+PSAwKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYENpcmN1bGFyIGRlcGVuZGVuY3kgJyR7ZGVwfScgaXMgcmVxdWlyZWQgYnkgJyR7bmFtZX0nOiAke2FuY2VzdG9ycy5qb2luKCcgLT4gJyl9YFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2aXNpdGVkW2RlcF0pIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZpc2l0KGRlcCwgYW5jZXN0b3JzLnNsaWNlKDApKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChzb3J0ZWQuaW5kZXhPZihuYW1lKSA8IDApIHtcclxuICAgICAgc29ydGVkLnB1c2gobmFtZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgT2JqZWN0LmtleXMoZ3JhcGgpLmZvckVhY2goayA9PiB2aXNpdChrKSk7XHJcblxyXG4gIHJldHVybiBzb3J0ZWQucmV2ZXJzZSgpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBpZiB0aGUgcGFyYW1ldGVyIGlzIGEgb2JqZWN0IG9yIG5vdC5cclxuICpcclxuICogQGlnbm9yZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KG9iajogYW55KSB7XHJcbiAgcmV0dXJuICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbic7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0ZURpZmZDaGFuZ2VzPFQ+KFxyXG4gIG1hcHBlZFN0b3JlOiBNYXBwZWRTdG9yZSxcclxuICBkaWZmOiBSb290U3RhdGVEaWZmPFQ+XHJcbik6IE5neHNTaW1wbGVDaGFuZ2Uge1xyXG4gIGNvbnN0IHByZXZpb3VzVmFsdWU6IFQgPSBnZXRWYWx1ZShkaWZmLmN1cnJlbnRBcHBTdGF0ZSwgbWFwcGVkU3RvcmUucGF0aCk7XHJcbiAgY29uc3QgY3VycmVudFZhbHVlOiBUID0gZ2V0VmFsdWUoZGlmZi5uZXdBcHBTdGF0ZSwgbWFwcGVkU3RvcmUucGF0aCk7XHJcbiAgcmV0dXJuIG5ldyBOZ3hzU2ltcGxlQ2hhbmdlKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSwgIW1hcHBlZFN0b3JlLmlzSW5pdGlhbGlzZWQpO1xyXG59XHJcbiJdfQ==