@ngxs/store 3.8.2-dev.master-0fd1fe5 → 3.8.2

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 (273) hide show
  1. package/bundles/ngxs-store-internals-testing.umd.js +684 -0
  2. package/bundles/ngxs-store-internals-testing.umd.js.map +1 -0
  3. package/bundles/ngxs-store-internals.umd.js +141 -0
  4. package/bundles/ngxs-store-internals.umd.js.map +1 -0
  5. package/bundles/ngxs-store-operators.umd.js +224 -0
  6. package/bundles/ngxs-store-operators.umd.js.map +1 -0
  7. package/bundles/ngxs-store.umd.js +3076 -0
  8. package/bundles/ngxs-store.umd.js.map +1 -0
  9. package/esm2015/internals/index.js +5 -0
  10. package/esm2015/internals/initial-state.js +17 -0
  11. package/esm2015/internals/internal-tokens.js +5 -0
  12. package/{esm2020/internals/ngxs-bootstrapper.mjs → esm2015/internals/ngxs-bootstrapper.js} +4 -4
  13. package/esm2015/internals/src/symbols.js +2 -0
  14. package/esm2015/internals/symbols.js +2 -0
  15. package/esm2015/internals/testing/fresh-platform.js +70 -0
  16. package/{esm2020/internals/testing/helpers/ngxs-test.component.mjs → esm2015/internals/testing/helpers/ngxs-test.component.js} +4 -4
  17. package/esm2015/internals/testing/helpers/ngxs-test.module.js +21 -0
  18. package/{esm2020/internals/testing/ngxs.setup.mjs → esm2015/internals/testing/ngxs.setup.js} +2 -4
  19. package/esm2015/internals/testing/symbol.js +2 -0
  20. package/esm2015/operators/patch.js +21 -0
  21. package/{esm2020/src/actions-stream.mjs → esm2015/src/actions-stream.js} +7 -7
  22. package/esm2015/src/configs/messages.config.js +36 -0
  23. package/{esm2020/src/decorators/select/select-factory.mjs → esm2015/src/decorators/select/select-factory.js} +4 -4
  24. package/esm2015/src/decorators/selector/selector.js +32 -0
  25. package/esm2015/src/decorators/state.js +36 -0
  26. package/{esm2020/src/dev-features/ngxs-development.module.mjs → esm2015/src/dev-features/ngxs-development.module.js} +5 -5
  27. package/{esm2020/src/dev-features/ngxs-unhandled-actions-logger.mjs → esm2015/src/dev-features/ngxs-unhandled-actions-logger.js} +4 -4
  28. package/{esm2020/src/execution/dispatch-outside-zone-ngxs-execution-strategy.mjs → esm2015/src/execution/dispatch-outside-zone-ngxs-execution-strategy.js} +4 -4
  29. package/{esm2020/src/execution/internal-ngxs-execution-strategy.mjs → esm2015/src/execution/internal-ngxs-execution-strategy.js} +4 -4
  30. package/{esm2020/src/execution/noop-ngxs-execution-strategy.mjs → esm2015/src/execution/noop-ngxs-execution-strategy.js} +4 -4
  31. package/esm2015/src/execution/symbols.js +23 -0
  32. package/{esm2020/src/internal/dispatcher.mjs → esm2015/src/internal/dispatcher.js} +11 -11
  33. package/{esm2020/src/internal/error-handler.mjs → esm2015/src/internal/error-handler.js} +5 -5
  34. package/esm2015/src/internal/internals.js +248 -0
  35. package/esm2015/src/internal/lifecycle-state-manager.js +79 -0
  36. package/{esm2020/src/internal/state-context-factory.mjs → esm2015/src/internal/state-context-factory.js} +4 -4
  37. package/esm2015/src/internal/state-factory.js +288 -0
  38. package/{esm2020/src/internal/state-operations.mjs → esm2015/src/internal/state-operations.js} +5 -5
  39. package/esm2015/src/internal/state-operators.js +20 -0
  40. package/esm2015/src/internal/state-stream.js +25 -0
  41. package/{esm2020/src/ivy/ivy-enabled-in-dev-mode.mjs → esm2015/src/ivy/ivy-enabled-in-dev-mode.js} +2 -2
  42. package/esm2015/src/module.js +88 -0
  43. package/esm2015/src/modules/ngxs-feature.module.js +45 -0
  44. package/esm2015/src/modules/ngxs-root.module.js +41 -0
  45. package/{esm2020/src/operators/of-action.mjs → esm2015/src/operators/of-action.js} +10 -10
  46. package/{esm2020/src/plugin-manager.mjs → esm2015/src/plugin-manager.js} +4 -4
  47. package/esm2015/src/public_api.js +27 -0
  48. package/esm2015/src/selectors/create-property-selectors.js +20 -0
  49. package/esm2015/src/selectors/selector-metadata.js +30 -0
  50. package/esm2015/src/selectors/selector-types.util.js +2 -0
  51. package/{esm2020/src/store.mjs → esm2015/src/store.js} +5 -6
  52. package/esm2015/src/symbols.js +58 -0
  53. package/esm2015/src/utils/utils.js +92 -0
  54. package/fesm2015/{ngxs-store-internals-testing.mjs → ngxs-store-internals-testing.js} +13 -19
  55. package/fesm2015/ngxs-store-internals-testing.js.map +1 -0
  56. package/{fesm2020/ngxs-store-internals.mjs → fesm2015/ngxs-store-internals.js} +8 -21
  57. package/fesm2015/ngxs-store-internals.js.map +1 -0
  58. package/fesm2015/{ngxs-store-operators.mjs → ngxs-store-operators.js} +1 -1
  59. package/fesm2015/ngxs-store-operators.js.map +1 -0
  60. package/{fesm2020/ngxs-store.mjs → fesm2015/ngxs-store.js} +1029 -1192
  61. package/fesm2015/ngxs-store.js.map +1 -0
  62. package/internals/index.d.ts +1 -1
  63. package/internals/initial-state.d.ts +1 -1
  64. package/internals/ngxs-store-internals.d.ts +5 -0
  65. package/internals/package.json +10 -0
  66. package/internals/src/symbols.d.ts +1 -4
  67. package/internals/symbols.d.ts +1 -4
  68. package/internals/testing/helpers/ngxs-test.component.d.ts +1 -1
  69. package/internals/testing/ngxs-store-internals-testing.d.ts +5 -0
  70. package/internals/testing/package.json +10 -0
  71. package/internals/testing/symbol.d.ts +2 -2
  72. package/ngxs-store.d.ts +5 -0
  73. package/operators/ngxs-store-operators.d.ts +5 -0
  74. package/operators/package.json +10 -0
  75. package/package.json +11 -48
  76. package/src/configs/messages.config.d.ts +0 -2
  77. package/src/decorators/state.d.ts +2 -2
  78. package/src/execution/symbols.d.ts +2 -8
  79. package/src/internal/internals.d.ts +5 -5
  80. package/src/internal/lifecycle-state-manager.d.ts +1 -3
  81. package/src/module.d.ts +14 -3
  82. package/src/modules/ngxs-feature.module.d.ts +9 -2
  83. package/src/modules/ngxs-root.module.d.ts +9 -2
  84. package/src/public_api.d.ts +4 -5
  85. package/src/selectors/selector-types.util.d.ts +3 -3
  86. package/src/symbols.d.ts +8 -5
  87. package/esm2020/internals/index.mjs +0 -6
  88. package/esm2020/internals/initial-state.mjs +0 -18
  89. package/esm2020/internals/internal-tokens.mjs +0 -6
  90. package/esm2020/internals/src/symbols.mjs +0 -11
  91. package/esm2020/internals/symbols.mjs +0 -11
  92. package/esm2020/internals/testing/fresh-platform.mjs +0 -72
  93. package/esm2020/internals/testing/helpers/ngxs-test.module.mjs +0 -20
  94. package/esm2020/internals/testing/symbol.mjs +0 -2
  95. package/esm2020/operators/patch.mjs +0 -21
  96. package/esm2020/src/configs/messages.config.mjs +0 -48
  97. package/esm2020/src/decorators/selector/selector.mjs +0 -32
  98. package/esm2020/src/decorators/state.mjs +0 -36
  99. package/esm2020/src/execution/symbols.mjs +0 -27
  100. package/esm2020/src/internal/internals.mjs +0 -248
  101. package/esm2020/src/internal/lifecycle-state-manager.mjs +0 -97
  102. package/esm2020/src/internal/state-factory.mjs +0 -292
  103. package/esm2020/src/internal/state-operators.mjs +0 -20
  104. package/esm2020/src/internal/state-stream.mjs +0 -27
  105. package/esm2020/src/module.mjs +0 -27
  106. package/esm2020/src/modules/ngxs-feature.module.mjs +0 -18
  107. package/esm2020/src/modules/ngxs-root.module.mjs +0 -18
  108. package/esm2020/src/public_api.mjs +0 -28
  109. package/esm2020/src/selectors/create-property-selectors.mjs +0 -20
  110. package/esm2020/src/selectors/selector-metadata.mjs +0 -35
  111. package/esm2020/src/selectors/selector-types.util.mjs +0 -2
  112. package/esm2020/src/standalone-features/feature-providers.mjs +0 -20
  113. package/esm2020/src/standalone-features/index.mjs +0 -4
  114. package/esm2020/src/standalone-features/initializers.mjs +0 -86
  115. package/esm2020/src/standalone-features/plugin.mjs +0 -20
  116. package/esm2020/src/standalone-features/provide-states.mjs +0 -26
  117. package/esm2020/src/standalone-features/provide-store.mjs +0 -26
  118. package/esm2020/src/standalone-features/root-providers.mjs +0 -47
  119. package/esm2020/src/symbols.mjs +0 -65
  120. package/esm2020/src/utils/utils.mjs +0 -92
  121. package/fesm2015/ngxs-store-internals-testing.mjs.map +0 -1
  122. package/fesm2015/ngxs-store-internals.mjs +0 -114
  123. package/fesm2015/ngxs-store-internals.mjs.map +0 -1
  124. package/fesm2015/ngxs-store-operators.mjs.map +0 -1
  125. package/fesm2015/ngxs-store.mjs +0 -2454
  126. package/fesm2015/ngxs-store.mjs.map +0 -1
  127. package/fesm2020/ngxs-store-internals-testing.mjs +0 -180
  128. package/fesm2020/ngxs-store-internals-testing.mjs.map +0 -1
  129. package/fesm2020/ngxs-store-internals.mjs.map +0 -1
  130. package/fesm2020/ngxs-store-operators.mjs +0 -202
  131. package/fesm2020/ngxs-store-operators.mjs.map +0 -1
  132. package/fesm2020/ngxs-store.mjs.map +0 -1
  133. package/schematics/collection.json +0 -36
  134. package/schematics/src/actions/actions.factory.d.ts +0 -3
  135. package/schematics/src/actions/actions.factory.js +0 -22
  136. package/schematics/src/actions/actions.factory.js.map +0 -1
  137. package/schematics/src/actions/files/__name__.actions.ts__template__ +0 -4
  138. package/schematics/src/actions/schema.json +0 -28
  139. package/schematics/src/ng-add/add-declaration.d.ts +0 -4
  140. package/schematics/src/ng-add/add-declaration.js +0 -109
  141. package/schematics/src/ng-add/add-declaration.js.map +0 -1
  142. package/schematics/src/ng-add/ng-add.factory.d.ts +0 -9
  143. package/schematics/src/ng-add/ng-add.factory.js +0 -86
  144. package/schematics/src/ng-add/ng-add.factory.js.map +0 -1
  145. package/schematics/src/ng-add/schema.json +0 -72
  146. package/schematics/src/starter-kit/files/store/auth/auth.actions.ts__template__ +0 -7
  147. package/schematics/src/starter-kit/files/store/auth/auth.state.spec.ts__template__ +0 -46
  148. package/schematics/src/starter-kit/files/store/auth/auth.state.ts__template__ +0 -45
  149. package/schematics/src/starter-kit/files/store/dashboard/index.ts__template__ +0 -11
  150. package/schematics/src/starter-kit/files/store/dashboard/states/dictionary/dictionary.actions.ts__template__ +0 -13
  151. package/schematics/src/starter-kit/files/store/dashboard/states/dictionary/dictionary.state.spec.ts__template__ +0 -77
  152. package/schematics/src/starter-kit/files/store/dashboard/states/dictionary/dictionary.state.ts__template__ +0 -60
  153. package/schematics/src/starter-kit/files/store/dashboard/states/user/user.actions.ts__template__ +0 -6
  154. package/schematics/src/starter-kit/files/store/dashboard/states/user/user.state.spec.ts__template__ +0 -54
  155. package/schematics/src/starter-kit/files/store/dashboard/states/user/user.state.ts__template__ +0 -40
  156. package/schematics/src/starter-kit/files/store/store.config.ts__template__ +0 -38
  157. package/schematics/src/starter-kit/files/store/store.module.ts__template__ +0 -22
  158. package/schematics/src/starter-kit/schema.json +0 -18
  159. package/schematics/src/starter-kit/starter-kit.factory.d.ts +0 -3
  160. package/schematics/src/starter-kit/starter-kit.factory.js +0 -12
  161. package/schematics/src/starter-kit/starter-kit.factory.js.map +0 -1
  162. package/schematics/src/state/files/__name__.state.spec.ts__template__ +0 -22
  163. package/schematics/src/state/files/__name__.state.ts__template__ +0 -20
  164. package/schematics/src/state/schema.json +0 -33
  165. package/schematics/src/state/state.factory.d.ts +0 -3
  166. package/schematics/src/state/state.factory.js +0 -20
  167. package/schematics/src/state/state.factory.js.map +0 -1
  168. package/schematics/src/store/files/__name__.actions.ts__template__ +0 -4
  169. package/schematics/src/store/files/__name__.state.spec.ts__template__ +0 -24
  170. package/schematics/src/store/files/__name__.state.ts__template__ +0 -27
  171. package/schematics/src/store/schema.json +0 -33
  172. package/schematics/src/store/store.factory.d.ts +0 -3
  173. package/schematics/src/store/store.factory.js +0 -20
  174. package/schematics/src/store/store.factory.js.map +0 -1
  175. package/schematics/src/utils/common/lib.config.d.ts +0 -10
  176. package/schematics/src/utils/common/lib.config.js +0 -15
  177. package/schematics/src/utils/common/lib.config.js.map +0 -1
  178. package/schematics/src/utils/common/project-files.config.d.ts +0 -3
  179. package/schematics/src/utils/common/project-files.config.js +0 -7
  180. package/schematics/src/utils/common/project-files.config.js.map +0 -1
  181. package/schematics/src/utils/common/properties.d.ts +0 -1
  182. package/schematics/src/utils/common/properties.js +0 -8
  183. package/schematics/src/utils/common/properties.js.map +0 -1
  184. package/schematics/src/utils/config.d.ts +0 -119
  185. package/schematics/src/utils/config.js +0 -21
  186. package/schematics/src/utils/config.js.map +0 -1
  187. package/schematics/src/utils/generate-utils.d.ts +0 -4
  188. package/schematics/src/utils/generate-utils.js +0 -14
  189. package/schematics/src/utils/generate-utils.js.map +0 -1
  190. package/schematics/src/utils/interfaces/package.interface.d.ts +0 -7
  191. package/schematics/src/utils/interfaces/package.interface.js +0 -3
  192. package/schematics/src/utils/interfaces/package.interface.js.map +0 -1
  193. package/schematics/src/utils/ng-utils/README.md +0 -1
  194. package/schematics/src/utils/ng-utils/ast-utils.d.ts +0 -99
  195. package/schematics/src/utils/ng-utils/ast-utils.js +0 -517
  196. package/schematics/src/utils/ng-utils/ast-utils.js.map +0 -1
  197. package/schematics/src/utils/ng-utils/ng-ast-utils.d.ts +0 -5
  198. package/schematics/src/utils/ng-utils/ng-ast-utils.js +0 -67
  199. package/schematics/src/utils/ng-utils/ng-ast-utils.js.map +0 -1
  200. package/schematics/src/utils/ng-utils/project.d.ts +0 -2
  201. package/schematics/src/utils/ng-utils/project.js +0 -21
  202. package/schematics/src/utils/ng-utils/project.js.map +0 -1
  203. package/schematics/src/utils/ng-utils/standalone/app_config.d.ts +0 -16
  204. package/schematics/src/utils/ng-utils/standalone/app_config.js +0 -84
  205. package/schematics/src/utils/ng-utils/standalone/app_config.js.map +0 -1
  206. package/schematics/src/utils/ng-utils/standalone/code_block.d.ts +0 -46
  207. package/schematics/src/utils/ng-utils/standalone/code_block.js +0 -73
  208. package/schematics/src/utils/ng-utils/standalone/code_block.js.map +0 -1
  209. package/schematics/src/utils/ng-utils/standalone/index.d.ts +0 -1
  210. package/schematics/src/utils/ng-utils/standalone/index.js +0 -7
  211. package/schematics/src/utils/ng-utils/standalone/index.js.map +0 -1
  212. package/schematics/src/utils/ng-utils/standalone/rules.d.ts +0 -38
  213. package/schematics/src/utils/ng-utils/standalone/rules.js +0 -195
  214. package/schematics/src/utils/ng-utils/standalone/rules.js.map +0 -1
  215. package/schematics/src/utils/ng-utils/standalone/util.d.ts +0 -28
  216. package/schematics/src/utils/ng-utils/standalone/util.js +0 -138
  217. package/schematics/src/utils/ng-utils/standalone/util.js.map +0 -1
  218. package/schematics/src/utils/normalize-options.d.ts +0 -9
  219. package/schematics/src/utils/normalize-options.js +0 -24
  220. package/schematics/src/utils/normalize-options.js.map +0 -1
  221. package/schematics/src/utils/project.d.ts +0 -16
  222. package/schematics/src/utils/project.js +0 -40
  223. package/schematics/src/utils/project.js.map +0 -1
  224. package/schematics/src/utils/versions.json +0 -3
  225. package/src/standalone-features/feature-providers.d.ts +0 -7
  226. package/src/standalone-features/index.d.ts +0 -3
  227. package/src/standalone-features/initializers.d.ts +0 -29
  228. package/src/standalone-features/plugin.d.ts +0 -17
  229. package/src/standalone-features/provide-states.d.ts +0 -18
  230. package/src/standalone-features/provide-store.d.ts +0 -22
  231. package/src/standalone-features/root-providers.d.ts +0 -8
  232. /package/{esm2020/index.mjs → esm2015/index.js} +0 -0
  233. /package/{esm2020/internals/memoize.mjs → esm2015/internals/memoize.js} +0 -0
  234. /package/{esm2020/internals/ngxs-store-internals.mjs → esm2015/internals/ngxs-store-internals.js} +0 -0
  235. /package/{esm2020/internals/testing/index.mjs → esm2015/internals/testing/index.js} +0 -0
  236. /package/{esm2020/internals/testing/ngxs-store-internals-testing.mjs → esm2015/internals/testing/ngxs-store-internals-testing.js} +0 -0
  237. /package/{esm2020/internals/testing/skip-console-logging.mjs → esm2015/internals/testing/skip-console-logging.js} +0 -0
  238. /package/{esm2020/ngxs-store.mjs → esm2015/ngxs-store.js} +0 -0
  239. /package/{esm2020/operators/append.mjs → esm2015/operators/append.js} +0 -0
  240. /package/{esm2020/operators/compose.mjs → esm2015/operators/compose.js} +0 -0
  241. /package/{esm2020/operators/iif.mjs → esm2015/operators/iif.js} +0 -0
  242. /package/{esm2020/operators/index.mjs → esm2015/operators/index.js} +0 -0
  243. /package/{esm2020/operators/insert-item.mjs → esm2015/operators/insert-item.js} +0 -0
  244. /package/{esm2020/operators/ngxs-store-operators.mjs → esm2015/operators/ngxs-store-operators.js} +0 -0
  245. /package/{esm2020/operators/remove-item.mjs → esm2015/operators/remove-item.js} +0 -0
  246. /package/{esm2020/operators/types.mjs → esm2015/operators/types.js} +0 -0
  247. /package/{esm2020/operators/update-item.mjs → esm2015/operators/update-item.js} +0 -0
  248. /package/{esm2020/operators/utils.mjs → esm2015/operators/utils.js} +0 -0
  249. /package/{esm2020/src/actions/actions.mjs → esm2015/src/actions/actions.js} +0 -0
  250. /package/{esm2020/src/actions/symbols.mjs → esm2015/src/actions/symbols.js} +0 -0
  251. /package/{esm2020/src/decorators/action.mjs → esm2015/src/decorators/action.js} +0 -0
  252. /package/{esm2020/src/decorators/select/select.mjs → esm2015/src/decorators/select/select.js} +0 -0
  253. /package/{esm2020/src/decorators/select/symbols.mjs → esm2015/src/decorators/select/symbols.js} +0 -0
  254. /package/{esm2020/src/decorators/selector/symbols.mjs → esm2015/src/decorators/selector/symbols.js} +0 -0
  255. /package/{esm2020/src/decorators/selector-options.mjs → esm2015/src/decorators/selector-options.js} +0 -0
  256. /package/{esm2020/src/dev-features/symbols.mjs → esm2015/src/dev-features/symbols.js} +0 -0
  257. /package/{esm2020/src/internal/custom-rxjs-subjects.mjs → esm2015/src/internal/custom-rxjs-subjects.js} +0 -0
  258. /package/{esm2020/src/operators/leave-ngxs.mjs → esm2015/src/operators/leave-ngxs.js} +0 -0
  259. /package/{esm2020/src/plugin_api.mjs → esm2015/src/plugin_api.js} +0 -0
  260. /package/{esm2020/src/private_api.mjs → esm2015/src/private_api.js} +0 -0
  261. /package/{esm2020/src/public_to_deprecate.mjs → esm2015/src/public_to_deprecate.js} +0 -0
  262. /package/{esm2020/src/selectors/create-model-selector.mjs → esm2015/src/selectors/create-model-selector.js} +0 -0
  263. /package/{esm2020/src/selectors/create-pick-selector.mjs → esm2015/src/selectors/create-pick-selector.js} +0 -0
  264. /package/{esm2020/src/selectors/create-selector.mjs → esm2015/src/selectors/create-selector.js} +0 -0
  265. /package/{esm2020/src/selectors/index.mjs → esm2015/src/selectors/index.js} +0 -0
  266. /package/{esm2020/src/selectors/selector-checks.util.mjs → esm2015/src/selectors/selector-checks.util.js} +0 -0
  267. /package/{esm2020/src/selectors/selector-models.mjs → esm2015/src/selectors/selector-models.js} +0 -0
  268. /package/{esm2020/src/selectors/selector-utils.mjs → esm2015/src/selectors/selector-utils.js} +0 -0
  269. /package/{esm2020/src/state-token/state-token.mjs → esm2015/src/state-token/state-token.js} +0 -0
  270. /package/{esm2020/src/state-token/symbols.mjs → esm2015/src/state-token/symbols.js} +0 -0
  271. /package/{esm2020/src/utils/compose.mjs → esm2015/src/utils/compose.js} +0 -0
  272. /package/{esm2020/src/utils/freeze.mjs → esm2015/src/utils/freeze.js} +0 -0
  273. /package/{esm2020/src/utils/store-validators.mjs → esm2015/src/utils/store-validators.js} +0 -0
@@ -1,36 +0,0 @@
1
- import { ɵMETA_KEY, ɵMETA_OPTIONS_KEY } from '@ngxs/store/internals';
2
- import { ensureStateNameIsValid } from '../utils/store-validators';
3
- import { ensureStoreMetadata } from '../internal/internals';
4
- /**
5
- * Decorates a class with ngxs state information.
6
- */
7
- export function State(options) {
8
- return (target) => {
9
- const stateClass = target;
10
- const meta = ensureStoreMetadata(stateClass);
11
- const inheritedStateClass = Object.getPrototypeOf(stateClass);
12
- const optionsWithInheritance = getStateOptions(inheritedStateClass, options);
13
- mutateMetaData({ meta, inheritedStateClass, optionsWithInheritance });
14
- stateClass[ɵMETA_OPTIONS_KEY] = optionsWithInheritance;
15
- };
16
- }
17
- function getStateOptions(inheritedStateClass, options) {
18
- const inheritanceOptions = inheritedStateClass[ɵMETA_OPTIONS_KEY] || {};
19
- return { ...inheritanceOptions, ...options };
20
- }
21
- function mutateMetaData(params) {
22
- const { meta, inheritedStateClass, optionsWithInheritance } = params;
23
- const { children, defaults, name } = optionsWithInheritance;
24
- const stateName = typeof name === 'string' ? name : (name && name.getName()) || null;
25
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
26
- ensureStateNameIsValid(stateName);
27
- }
28
- if (inheritedStateClass.hasOwnProperty(ɵMETA_KEY)) {
29
- const inheritedMeta = inheritedStateClass[ɵMETA_KEY] || {};
30
- meta.actions = { ...meta.actions, ...inheritedMeta.actions };
31
- }
32
- meta.children = children;
33
- meta.defaults = defaults;
34
- meta.name = stateName;
35
- }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvZGVjb3JhdG9ycy9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHbEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFxQyxNQUFNLHVCQUF1QixDQUFDO0FBUS9GOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBSSxPQUF3QjtJQUMvQyxPQUFPLENBQUMsTUFBbUIsRUFBUSxFQUFFO1FBQ25DLE1BQU0sVUFBVSxHQUF1QixNQUFNLENBQUM7UUFDOUMsTUFBTSxJQUFJLEdBQWtCLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sbUJBQW1CLEdBQXVCLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEYsTUFBTSxzQkFBc0IsR0FBb0IsZUFBZSxDQUM3RCxtQkFBbUIsRUFDbkIsT0FBTyxDQUNSLENBQUM7UUFDRixjQUFjLENBQUksRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLHNCQUFzQixDQUFDO0lBQ3pELENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FDdEIsbUJBQXVDLEVBQ3ZDLE9BQXdCO0lBRXhCLE1BQU0sa0JBQWtCLEdBQ3RCLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9DLE9BQU8sRUFBRSxHQUFHLGtCQUFrQixFQUFFLEdBQUcsT0FBTyxFQUFxQixDQUFDO0FBQ2xFLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBSSxNQUE0QjtJQUNyRCxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3JFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLHNCQUFzQixDQUFDO0lBQzVELE1BQU0sU0FBUyxHQUNiLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7SUFFckUsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxFQUFFO1FBQ2pELHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ25DO0lBRUQsSUFBSSxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDakQsTUFBTSxhQUFhLEdBQTJCLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNuRixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzlEO0lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IMm1U3RhdGVDbGFzcywgybVNRVRBX0tFWSwgybVNRVRBX09QVElPTlNfS0VZIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcblxuaW1wb3J0IHsgU3RvcmVPcHRpb25zIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQgeyBlbnN1cmVTdGF0ZU5hbWVJc1ZhbGlkIH0gZnJvbSAnLi4vdXRpbHMvc3RvcmUtdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBlbnN1cmVTdG9yZU1ldGFkYXRhLCBNZXRhRGF0YU1vZGVsLCBTdGF0ZUNsYXNzSW50ZXJuYWwgfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcm5hbHMnO1xuXG5pbnRlcmZhY2UgTXV0YXRlTWV0YU9wdGlvbnM8VD4ge1xuICBtZXRhOiBNZXRhRGF0YU1vZGVsO1xuICBpbmhlcml0ZWRTdGF0ZUNsYXNzOiBTdGF0ZUNsYXNzSW50ZXJuYWw7XG4gIG9wdGlvbnNXaXRoSW5oZXJpdGFuY2U6IFN0b3JlT3B0aW9uczxUPjtcbn1cblxuLyoqXG4gKiBEZWNvcmF0ZXMgYSBjbGFzcyB3aXRoIG5neHMgc3RhdGUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTdGF0ZTxUPihvcHRpb25zOiBTdG9yZU9wdGlvbnM8VD4pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IMm1U3RhdGVDbGFzcyk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHN0YXRlQ2xhc3M6IFN0YXRlQ2xhc3NJbnRlcm5hbCA9IHRhcmdldDtcbiAgICBjb25zdCBtZXRhOiBNZXRhRGF0YU1vZGVsID0gZW5zdXJlU3RvcmVNZXRhZGF0YShzdGF0ZUNsYXNzKTtcbiAgICBjb25zdCBpbmhlcml0ZWRTdGF0ZUNsYXNzOiBTdGF0ZUNsYXNzSW50ZXJuYWwgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3RhdGVDbGFzcyk7XG4gICAgY29uc3Qgb3B0aW9uc1dpdGhJbmhlcml0YW5jZTogU3RvcmVPcHRpb25zPFQ+ID0gZ2V0U3RhdGVPcHRpb25zKFxuICAgICAgaW5oZXJpdGVkU3RhdGVDbGFzcyxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICAgIG11dGF0ZU1ldGFEYXRhPFQ+KHsgbWV0YSwgaW5oZXJpdGVkU3RhdGVDbGFzcywgb3B0aW9uc1dpdGhJbmhlcml0YW5jZSB9KTtcbiAgICBzdGF0ZUNsYXNzW8m1TUVUQV9PUFRJT05TX0tFWV0gPSBvcHRpb25zV2l0aEluaGVyaXRhbmNlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTdGF0ZU9wdGlvbnM8VD4oXG4gIGluaGVyaXRlZFN0YXRlQ2xhc3M6IFN0YXRlQ2xhc3NJbnRlcm5hbCxcbiAgb3B0aW9uczogU3RvcmVPcHRpb25zPFQ+XG4pOiBTdG9yZU9wdGlvbnM8VD4ge1xuICBjb25zdCBpbmhlcml0YW5jZU9wdGlvbnM6IFBhcnRpYWw8U3RvcmVPcHRpb25zPFQ+PiA9XG4gICAgaW5oZXJpdGVkU3RhdGVDbGFzc1vJtU1FVEFfT1BUSU9OU19LRVldIHx8IHt9O1xuICByZXR1cm4geyAuLi5pbmhlcml0YW5jZU9wdGlvbnMsIC4uLm9wdGlvbnMgfSBhcyBTdG9yZU9wdGlvbnM8VD47XG59XG5cbmZ1bmN0aW9uIG11dGF0ZU1ldGFEYXRhPFQ+KHBhcmFtczogTXV0YXRlTWV0YU9wdGlvbnM8VD4pOiB2b2lkIHtcbiAgY29uc3QgeyBtZXRhLCBpbmhlcml0ZWRTdGF0ZUNsYXNzLCBvcHRpb25zV2l0aEluaGVyaXRhbmNlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIGRlZmF1bHRzLCBuYW1lIH0gPSBvcHRpb25zV2l0aEluaGVyaXRhbmNlO1xuICBjb25zdCBzdGF0ZU5hbWU6IHN0cmluZyB8IG51bGwgPVxuICAgIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyA/IG5hbWUgOiAobmFtZSAmJiBuYW1lLmdldE5hbWUoKSkgfHwgbnVsbDtcblxuICBpZiAodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSB7XG4gICAgZW5zdXJlU3RhdGVOYW1lSXNWYWxpZChzdGF0ZU5hbWUpO1xuICB9XG5cbiAgaWYgKGluaGVyaXRlZFN0YXRlQ2xhc3MuaGFzT3duUHJvcGVydHkoybVNRVRBX0tFWSkpIHtcbiAgICBjb25zdCBpbmhlcml0ZWRNZXRhOiBQYXJ0aWFsPE1ldGFEYXRhTW9kZWw+ID0gaW5oZXJpdGVkU3RhdGVDbGFzc1vJtU1FVEFfS0VZXSB8fCB7fTtcbiAgICBtZXRhLmFjdGlvbnMgPSB7IC4uLm1ldGEuYWN0aW9ucywgLi4uaW5oZXJpdGVkTWV0YS5hY3Rpb25zIH07XG4gIH1cblxuICBtZXRhLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIG1ldGEuZGVmYXVsdHMgPSBkZWZhdWx0cztcbiAgbWV0YS5uYW1lID0gc3RhdGVOYW1lO1xufVxuIl19
@@ -1,27 +0,0 @@
1
- import { InjectionToken, inject, INJECTOR, ɵglobal } from '@angular/core';
2
- import { NoopNgxsExecutionStrategy } from './noop-ngxs-execution-strategy';
3
- import { DispatchOutsideZoneNgxsExecutionStrategy } from './dispatch-outside-zone-ngxs-execution-strategy';
4
- const NG_DEV_MODE = typeof ngDevMode === 'undefined' || ngDevMode;
5
- /**
6
- * Consumers have the option to utilize the execution strategy provided by
7
- * `NgxsModule.forRoot({executionStrategy})` or `provideStore([], {executionStrategy})`.
8
- */
9
- export const CUSTOM_NGXS_EXECUTION_STRATEGY = new InjectionToken(NG_DEV_MODE ? 'CUSTOM_NGXS_EXECUTION_STRATEGY' : '');
10
- /**
11
- * The injection token is used internally to resolve an instance of the execution
12
- * strategy. It checks whether consumers have provided their own `executionStrategy`
13
- * and also verifies if we are operating in a zone-aware environment.
14
- */
15
- export const NGXS_EXECUTION_STRATEGY = new InjectionToken(NG_DEV_MODE ? 'NGXS_EXECUTION_STRATEGY' : '', {
16
- providedIn: 'root',
17
- factory: () => {
18
- const injector = inject(INJECTOR);
19
- const executionStrategy = injector.get(CUSTOM_NGXS_EXECUTION_STRATEGY);
20
- return executionStrategy
21
- ? injector.get(executionStrategy)
22
- : injector.get(typeof ɵglobal.Zone !== 'undefined'
23
- ? DispatchOutsideZoneNgxsExecutionStrategy
24
- : NoopNgxsExecutionStrategy);
25
- }
26
- });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3NyYy9leGVjdXRpb24vc3ltYm9scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQVEsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSx3Q0FBd0MsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRTNHLE1BQU0sV0FBVyxHQUFHLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLENBQUM7QUFFbEU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSxjQUFjLENBRTlELFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXZEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FDdkQsV0FBVyxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUM1QztJQUNFLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUU7UUFDWixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDdkUsT0FBTyxpQkFBaUI7WUFDdEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7WUFDakMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ1YsT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVc7Z0JBQ2pDLENBQUMsQ0FBQyx3Q0FBd0M7Z0JBQzFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FDOUIsQ0FBQztJQUNSLENBQUM7Q0FDRixDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0LCBJTkpFQ1RPUiwgVHlwZSwgybVnbG9iYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTm9vcE5neHNFeGVjdXRpb25TdHJhdGVneSB9IGZyb20gJy4vbm9vcC1uZ3hzLWV4ZWN1dGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBEaXNwYXRjaE91dHNpZGVab25lTmd4c0V4ZWN1dGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9kaXNwYXRjaC1vdXRzaWRlLXpvbmUtbmd4cy1leGVjdXRpb24tc3RyYXRlZ3knO1xuXG5jb25zdCBOR19ERVZfTU9ERSA9IHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZTtcblxuLyoqXG4gKiBDb25zdW1lcnMgaGF2ZSB0aGUgb3B0aW9uIHRvIHV0aWxpemUgdGhlIGV4ZWN1dGlvbiBzdHJhdGVneSBwcm92aWRlZCBieVxuICogYE5neHNNb2R1bGUuZm9yUm9vdCh7ZXhlY3V0aW9uU3RyYXRlZ3l9KWAgb3IgYHByb3ZpZGVTdG9yZShbXSwge2V4ZWN1dGlvblN0cmF0ZWd5fSlgLlxuICovXG5leHBvcnQgY29uc3QgQ1VTVE9NX05HWFNfRVhFQ1VUSU9OX1NUUkFURUdZID0gbmV3IEluamVjdGlvblRva2VuPFxuICBUeXBlPE5neHNFeGVjdXRpb25TdHJhdGVneT4gfCB1bmRlZmluZWRcbj4oTkdfREVWX01PREUgPyAnQ1VTVE9NX05HWFNfRVhFQ1VUSU9OX1NUUkFURUdZJyA6ICcnKTtcblxuLyoqXG4gKiBUaGUgaW5qZWN0aW9uIHRva2VuIGlzIHVzZWQgaW50ZXJuYWxseSB0byByZXNvbHZlIGFuIGluc3RhbmNlIG9mIHRoZSBleGVjdXRpb25cbiAqIHN0cmF0ZWd5LiBJdCBjaGVja3Mgd2hldGhlciBjb25zdW1lcnMgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24gYGV4ZWN1dGlvblN0cmF0ZWd5YFxuICogYW5kIGFsc28gdmVyaWZpZXMgaWYgd2UgYXJlIG9wZXJhdGluZyBpbiBhIHpvbmUtYXdhcmUgZW52aXJvbm1lbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBOR1hTX0VYRUNVVElPTl9TVFJBVEVHWSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3hzRXhlY3V0aW9uU3RyYXRlZ3k+KFxuICBOR19ERVZfTU9ERSA/ICdOR1hTX0VYRUNVVElPTl9TVFJBVEVHWScgOiAnJyxcbiAge1xuICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICBmYWN0b3J5OiAoKSA9PiB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IGluamVjdChJTkpFQ1RPUik7XG4gICAgICBjb25zdCBleGVjdXRpb25TdHJhdGVneSA9IGluamVjdG9yLmdldChDVVNUT01fTkdYU19FWEVDVVRJT05fU1RSQVRFR1kpO1xuICAgICAgcmV0dXJuIGV4ZWN1dGlvblN0cmF0ZWd5XG4gICAgICAgID8gaW5qZWN0b3IuZ2V0KGV4ZWN1dGlvblN0cmF0ZWd5KVxuICAgICAgICA6IGluamVjdG9yLmdldChcbiAgICAgICAgICAgIHR5cGVvZiDJtWdsb2JhbC5ab25lICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgICA/IERpc3BhdGNoT3V0c2lkZVpvbmVOZ3hzRXhlY3V0aW9uU3RyYXRlZ3lcbiAgICAgICAgICAgICAgOiBOb29wTmd4c0V4ZWN1dGlvblN0cmF0ZWd5XG4gICAgICAgICAgKTtcbiAgICB9XG4gIH1cbik7XG5cbi8qXG4gKiBFeGVjdXRpb24gc3RyYXRlZ3kgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmd4c0V4ZWN1dGlvblN0cmF0ZWd5IHtcbiAgZW50ZXI8VD4oZnVuYzogKCkgPT4gVCk6IFQ7XG4gIGxlYXZlPFQ+KGZ1bmM6ICgpID0+IFQpOiBUO1xufVxuIl19
@@ -1,248 +0,0 @@
1
- import { ɵMETA_KEY, ɵMETA_OPTIONS_KEY, ɵSELECTOR_META_KEY } from '@ngxs/store/internals';
2
- /**
3
- * Ensures metadata is attached to the class and returns it.
4
- *
5
- * @ignore
6
- */
7
- export function ensureStoreMetadata(target) {
8
- if (!target.hasOwnProperty(ɵMETA_KEY)) {
9
- const defaultMetadata = {
10
- name: null,
11
- actions: {},
12
- defaults: {},
13
- path: null,
14
- makeRootSelector(context) {
15
- return context.getStateGetter(defaultMetadata.name);
16
- },
17
- children: []
18
- };
19
- Object.defineProperty(target, ɵMETA_KEY, { value: defaultMetadata });
20
- }
21
- return getStoreMetadata(target);
22
- }
23
- /**
24
- * Get the metadata attached to the state class if it exists.
25
- *
26
- * @ignore
27
- */
28
- export function getStoreMetadata(target) {
29
- return target[ɵMETA_KEY];
30
- }
31
- /**
32
- * Ensures metadata is attached to the selector and returns it.
33
- *
34
- * @ignore
35
- */
36
- export function ensureSelectorMetadata(target) {
37
- if (!target.hasOwnProperty(ɵSELECTOR_META_KEY)) {
38
- const defaultMetadata = {
39
- makeRootSelector: null,
40
- originalFn: null,
41
- containerClass: null,
42
- selectorName: null,
43
- getSelectorOptions: () => ({})
44
- };
45
- Object.defineProperty(target, ɵSELECTOR_META_KEY, { value: defaultMetadata });
46
- }
47
- return getSelectorMetadata(target);
48
- }
49
- /**
50
- * Get the metadata attached to the selector if it exists.
51
- *
52
- * @ignore
53
- */
54
- export function getSelectorMetadata(target) {
55
- return target[ɵSELECTOR_META_KEY];
56
- }
57
- /**
58
- * Get a deeply nested value. Example:
59
- *
60
- * getValue({ foo: bar: [] }, 'foo.bar') //=> []
61
- *
62
- * Note: This is not as fast as the `fastPropGetter` but is strict Content Security Policy compliant.
63
- * See perf hit: https://jsperf.com/fast-value-getter-given-path/1
64
- *
65
- * @ignore
66
- */
67
- function compliantPropGetter(paths) {
68
- const copyOfPaths = paths.slice();
69
- return obj => copyOfPaths.reduce((acc, part) => acc && acc[part], obj);
70
- }
71
- /**
72
- * The generated function is faster than:
73
- * - pluck (Observable operator)
74
- * - memoize
75
- *
76
- * @ignore
77
- */
78
- function fastPropGetter(paths) {
79
- const segments = paths;
80
- let seg = 'store.' + segments[0];
81
- let i = 0;
82
- const l = segments.length;
83
- let expr = seg;
84
- while (++i < l) {
85
- expr = expr + ' && ' + (seg = seg + '.' + segments[i]);
86
- }
87
- const fn = new Function('store', 'return ' + expr + ';');
88
- return fn;
89
- }
90
- /**
91
- * Get a deeply nested value. Example:
92
- *
93
- * getValue({ foo: bar: [] }, 'foo.bar') //=> []
94
- *
95
- * @ignore
96
- */
97
- export function propGetter(paths, config) {
98
- if (config && config.compatibility && config.compatibility.strictContentSecurityPolicy) {
99
- return compliantPropGetter(paths);
100
- }
101
- else {
102
- return fastPropGetter(paths);
103
- }
104
- }
105
- /**
106
- * Given an array of states, it will return a object graph. Example:
107
- * const states = [
108
- * Cart,
109
- * CartSaved,
110
- * CartSavedItems
111
- * ]
112
- *
113
- * would return:
114
- *
115
- * const graph = {
116
- * cart: ['saved'],
117
- * saved: ['items'],
118
- * items: []
119
- * };
120
- *
121
- * @ignore
122
- */
123
- export function buildGraph(stateClasses) {
124
- const findName = (stateClass) => {
125
- const meta = stateClasses.find(g => g === stateClass);
126
- // Caretaker note: we have still left the `typeof` condition in order to avoid
127
- // creating a breaking change for projects that still use the View Engine.
128
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && !meta) {
129
- throw new Error(`Child state not found: ${stateClass}. \r\nYou may have forgotten to add states to module`);
130
- }
131
- return meta[ɵMETA_KEY].name;
132
- };
133
- return stateClasses.reduce((result, stateClass) => {
134
- const { name, children } = stateClass[ɵMETA_KEY];
135
- result[name] = (children || []).map(findName);
136
- return result;
137
- }, {});
138
- }
139
- /**
140
- * Given a states array, returns object graph
141
- * returning the name and state metadata. Example:
142
- *
143
- * const graph = {
144
- * cart: { metadata }
145
- * };
146
- *
147
- * @ignore
148
- */
149
- export function nameToState(states) {
150
- return states.reduce((result, stateClass) => {
151
- const meta = stateClass[ɵMETA_KEY];
152
- result[meta.name] = stateClass;
153
- return result;
154
- }, {});
155
- }
156
- /**
157
- * Given a object relationship graph will return the full path
158
- * for the child items. Example:
159
- *
160
- * const graph = {
161
- * cart: ['saved'],
162
- * saved: ['items'],
163
- * items: []
164
- * };
165
- *
166
- * would return:
167
- *
168
- * const r = {
169
- * cart: 'cart',
170
- * saved: 'cart.saved',
171
- * items: 'cart.saved.items'
172
- * };
173
- *
174
- * @ignore
175
- */
176
- export function findFullParentPath(obj, newObj = {}) {
177
- const visit = (child, keyToFind) => {
178
- for (const key in child) {
179
- if (child.hasOwnProperty(key) && child[key].indexOf(keyToFind) >= 0) {
180
- const parent = visit(child, key);
181
- return parent !== null ? `${parent}.${key}` : key;
182
- }
183
- }
184
- return null;
185
- };
186
- for (const key in obj) {
187
- if (obj.hasOwnProperty(key)) {
188
- const parent = visit(obj, key);
189
- newObj[key] = parent ? `${parent}.${key}` : key;
190
- }
191
- }
192
- return newObj;
193
- }
194
- /**
195
- * Given a object graph, it will return the items topologically sorted Example:
196
- *
197
- * const graph = {
198
- * cart: ['saved'],
199
- * saved: ['items'],
200
- * items: []
201
- * };
202
- *
203
- * would return:
204
- *
205
- * const results = [
206
- * 'items',
207
- * 'saved',
208
- * 'cart'
209
- * ];
210
- *
211
- * @ignore
212
- */
213
- export function topologicalSort(graph) {
214
- const sorted = [];
215
- const visited = {};
216
- const visit = (name, ancestors = []) => {
217
- if (!Array.isArray(ancestors)) {
218
- ancestors = [];
219
- }
220
- ancestors.push(name);
221
- visited[name] = true;
222
- graph[name].forEach((dep) => {
223
- // Caretaker note: we have still left the `typeof` condition in order to avoid
224
- // creating a breaking change for projects that still use the View Engine.
225
- if ((typeof ngDevMode === 'undefined' || ngDevMode) && ancestors.indexOf(dep) >= 0) {
226
- throw new Error(`Circular dependency '${dep}' is required by '${name}': ${ancestors.join(' -> ')}`);
227
- }
228
- if (visited[dep]) {
229
- return;
230
- }
231
- visit(dep, ancestors.slice(0));
232
- });
233
- if (sorted.indexOf(name) < 0) {
234
- sorted.push(name);
235
- }
236
- };
237
- Object.keys(graph).forEach(k => visit(k));
238
- return sorted.reverse();
239
- }
240
- /**
241
- * Returns if the parameter is a object or not.
242
- *
243
- * @ignore
244
- */
245
- export function isObject(obj) {
246
- return (typeof obj === 'object' && obj !== null) || typeof obj === 'function';
247
- }
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3RvcmUvc3JjL2ludGVybmFsL2ludGVybmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbkIsTUFBTSx1QkFBdUIsQ0FBQztBQW1FL0I7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUEwQjtJQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNyQyxNQUFNLGVBQWUsR0FBa0I7WUFDckMsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsRUFBRTtZQUNYLFFBQVEsRUFBRSxFQUFFO1lBQ1osSUFBSSxFQUFFLElBQUk7WUFDVixnQkFBZ0IsQ0FBQyxPQUErQjtnQkFDOUMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDO1FBRUYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7S0FDdEU7SUFDRCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQTBCO0lBQ3pELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBRSxDQUFDO0FBQzVCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BQWdCO0lBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDOUMsTUFBTSxlQUFlLEdBQTBCO1lBQzdDLGdCQUFnQixFQUFF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U0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUNuRixDQUFDO2FBQ0g7WUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDaEIsT0FBTzthQUNSO1lBRUQsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkI7SUFDSCxDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTFDLE9BQU8sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzFCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFRO0lBQy9CLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsQ0FBQztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgUGxhaW5PYmplY3RPZixcbiAgybVTdGF0ZUNsYXNzLFxuICDJtU1FVEFfS0VZLFxuICDJtU1FVEFfT1BUSU9OU19LRVksXG4gIMm1U0VMRUNUT1JfTUVUQV9LRVlcbn0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmd4c0NvbmZpZywgU3RvcmVPcHRpb25zIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQgeyBBY3Rpb25IYW5kbGVyTWV0YURhdGEgfSBmcm9tICcuLi9hY3Rpb25zL3N5bWJvbHMnO1xuXG4vLyBpbnNwaXJlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MzY3NDM4OVxuZXhwb3J0IGludGVyZmFjZSBTdGF0ZUNsYXNzSW50ZXJuYWw8VCA9IGFueSwgVSA9IGFueT4gZXh0ZW5kcyDJtVN0YXRlQ2xhc3M8VD4ge1xuICBbybVNRVRBX0tFWV0/OiBNZXRhRGF0YU1vZGVsO1xuICBbybVNRVRBX09QVElPTlNfS0VZXT86IFN0b3JlT3B0aW9uczxVPjtcbn1cblxuZXhwb3J0IHR5cGUgU3RhdGVLZXlHcmFwaCA9IFBsYWluT2JqZWN0T2Y8c3RyaW5nW10+O1xuZXhwb3J0IHR5cGUgU3RhdGVzQnlOYW1lID0gUGxhaW5PYmplY3RPZjxTdGF0ZUNsYXNzSW50ZXJuYWw+O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlT3BlcmF0aW9uczxUPiB7XG4gIGdldFN0YXRlKCk6IFQ7XG5cbiAgc2V0U3RhdGUodmFsOiBUKTogVDtcblxuICBkaXNwYXRjaChhY3Rpb25PckFjdGlvbnM6IGFueSB8IGFueVtdKTogT2JzZXJ2YWJsZTx2b2lkPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXRhRGF0YU1vZGVsIHtcbiAgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgYWN0aW9uczogUGxhaW5PYmplY3RPZjxBY3Rpb25IYW5kbGVyTWV0YURhdGFbXT47XG4gIGRlZmF1bHRzOiBhbnk7XG4gIHBhdGg6IHN0cmluZyB8IG51bGw7XG4gIG1ha2VSb290U2VsZWN0b3I6IFNlbGVjdG9yRmFjdG9yeSB8IG51bGw7XG4gIGNoaWxkcmVuPzogU3RhdGVDbGFzc0ludGVybmFsW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVudGltZVNlbGVjdG9yQ29udGV4dCB7XG4gIGdldFN0YXRlR2V0dGVyKGtleTogYW55KTogKHN0YXRlOiBhbnkpID0+IGFueTtcbiAgZ2V0U2VsZWN0b3JPcHRpb25zKGxvY2FsT3B0aW9ucz86IFNoYXJlZFNlbGVjdG9yT3B0aW9ucyk6IFNoYXJlZFNlbGVjdG9yT3B0aW9ucztcbn1cblxuZXhwb3J0IHR5cGUgU2VsZWN0RnJvbVJvb3RTdGF0ZSA9IChyb290U3RhdGU6IGFueSkgPT4gYW55O1xuZXhwb3J0IHR5cGUgU2VsZWN0b3JGYWN0b3J5ID0gKHJ1bnRpbWVDb250ZXh0OiBSdW50aW1lU2VsZWN0b3JDb250ZXh0KSA9PiBTZWxlY3RGcm9tUm9vdFN0YXRlO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJlZFNlbGVjdG9yT3B0aW9ucyB7XG4gIGluamVjdENvbnRhaW5lclN0YXRlPzogYm9vbGVhbjtcbiAgc3VwcHJlc3NFcnJvcnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdG9yTWV0YURhdGFNb2RlbCB7XG4gIG1ha2VSb290U2VsZWN0b3I6IFNlbGVjdG9yRmFjdG9yeSB8IG51bGw7XG4gIG9yaWdpbmFsRm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgY29udGFpbmVyQ2xhc3M6IGFueTtcbiAgc2VsZWN0b3JOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBnZXRTZWxlY3Rvck9wdGlvbnM6ICgpID0+IFNoYXJlZFNlbGVjdG9yT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYXBwZWRTdG9yZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNJbml0aWFsaXNlZDogYm9vbGVhbjtcbiAgYWN0aW9uczogUGxhaW5PYmplY3RPZjxBY3Rpb25IYW5kbGVyTWV0YURhdGFbXT47XG4gIGRlZmF1bHRzOiBhbnk7XG4gIGluc3RhbmNlOiBhbnk7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0ZXNBbmREZWZhdWx0cyB7XG4gIGRlZmF1bHRzOiBhbnk7XG4gIHN0YXRlczogTWFwcGVkU3RvcmVbXTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIG1ldGFkYXRhIGlzIGF0dGFjaGVkIHRvIHRoZSBjbGFzcyBhbmQgcmV0dXJucyBpdC5cbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVTdG9yZU1ldGFkYXRhKHRhcmdldDogU3RhdGVDbGFzc0ludGVybmFsKTogTWV0YURhdGFNb2RlbCB7XG4gIGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KMm1TUVUQV9LRVkpKSB7XG4gICAgY29uc3QgZGVmYXVsdE1ldGFkYXRhOiBNZXRhRGF0YU1vZGVsID0ge1xuICAgICAgbmFtZTogbnVsbCxcbiAgICAgIGFjdGlvbnM6IHt9LFxuICAgICAgZGVmYXVsdHM6IHt9LFxuICAgICAgcGF0aDogbnVsbCxcbiAgICAgIG1ha2VSb290U2VsZWN0b3IoY29udGV4dDogUnVudGltZVNlbGVjdG9yQ29udGV4dCkge1xuICAgICAgICByZXR1cm4gY29udGV4dC5nZXRTdGF0ZUdldHRlcihkZWZhdWx0TWV0YWRhdGEubmFtZSk7XG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIMm1TUVUQV9LRVksIHsgdmFsdWU6IGRlZmF1bHRNZXRhZGF0YSB9KTtcbiAgfVxuICByZXR1cm4gZ2V0U3RvcmVNZXRhZGF0YSh0YXJnZXQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgbWV0YWRhdGEgYXR0YWNoZWQgdG8gdGhlIHN0YXRlIGNsYXNzIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yZU1ldGFkYXRhKHRhcmdldDogU3RhdGVDbGFzc0ludGVybmFsKTogTWV0YURhdGFNb2RlbCB7XG4gIHJldHVybiB0YXJnZXRbybVNRVRBX0tFWV0hO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgbWV0YWRhdGEgaXMgYXR0YWNoZWQgdG8gdGhlIHNlbGVjdG9yIGFuZCByZXR1cm5zIGl0LlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVNlbGVjdG9yTWV0YWRhdGEodGFyZ2V0OiBGdW5jdGlvbik6IFNlbGVjdG9yTWV0YURhdGFNb2RlbCB7XG4gIGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KMm1U0VMRUNUT1JfTUVUQV9LRVkpKSB7XG4gICAgY29uc3QgZGVmYXVsdE1ldGFkYXRhOiBTZWxlY3Rvck1ldGFEYXRhTW9kZWwgPSB7XG4gICAgICBtYWtlUm9vdFNlbGVjdG9yOiBudWxsLFxuICAgICAgb3JpZ2luYWxGbjogbnVsbCxcbiAgICAgIGNvbnRhaW5lckNsYXNzOiBudWxsLFxuICAgICAgc2VsZWN0b3JOYW1lOiBudWxsLFxuICAgICAgZ2V0U2VsZWN0b3JPcHRpb25zOiAoKSA9PiAoe30pXG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIMm1U0VMRUNUT1JfTUVUQV9LRVksIHsgdmFsdWU6IGRlZmF1bHRNZXRhZGF0YSB9KTtcbiAgfVxuXG4gIHJldHVybiBnZXRTZWxlY3Rvck1ldGFkYXRhKHRhcmdldCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtZXRhZGF0YSBhdHRhY2hlZCB0byB0aGUgc2VsZWN0b3IgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdG9yTWV0YWRhdGEodGFyZ2V0OiBhbnkpOiBTZWxlY3Rvck1ldGFEYXRhTW9kZWwge1xuICByZXR1cm4gdGFyZ2V0W8m1U0VMRUNUT1JfTUVUQV9LRVldO1xufVxuXG4vKipcbiAqIEdldCBhIGRlZXBseSBuZXN0ZWQgdmFsdWUuIEV4YW1wbGU6XG4gKlxuICogICAgZ2V0VmFsdWUoeyBmb286IGJhcjogW10gfSwgJ2Zvby5iYXInKSAvLz0+IFtdXG4gKlxuICogTm90ZTogVGhpcyBpcyBub3QgYXMgZmFzdCBhcyB0aGUgYGZhc3RQcm9wR2V0dGVyYCBidXQgaXMgc3RyaWN0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGNvbXBsaWFudC5cbiAqIFNlZSBwZXJmIGhpdDogaHR0cHM6Ly9qc3BlcmYuY29tL2Zhc3QtdmFsdWUtZ2V0dGVyLWdpdmVuLXBhdGgvMVxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZnVuY3Rpb24gY29tcGxpYW50UHJvcEdldHRlcihwYXRoczogc3RyaW5nW10pOiAoeDogYW55KSA9PiBhbnkge1xuICBjb25zdCBjb3B5T2ZQYXRocyA9IHBhdGhzLnNsaWNlKCk7XG4gIHJldHVybiBvYmogPT4gY29weU9mUGF0aHMucmVkdWNlKChhY2M6IGFueSwgcGFydDogc3RyaW5nKSA9PiBhY2MgJiYgYWNjW3BhcnRdLCBvYmopO1xufVxuXG4vKipcbiAqIFRoZSBnZW5lcmF0ZWQgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW46XG4gKiAtIHBsdWNrIChPYnNlcnZhYmxlIG9wZXJhdG9yKVxuICogLSBtZW1vaXplXG4gKlxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBmYXN0UHJvcEdldHRlcihwYXRoczogc3RyaW5nW10pOiAoeDogYW55KSA9PiBhbnkge1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGhzO1xuICBsZXQgc2VnID0gJ3N0b3JlLicgKyBzZWdtZW50c1swXTtcbiAgbGV0IGkgPSAwO1xuICBjb25zdCBsID0gc2VnbWVudHMubGVuZ3RoO1xuXG4gIGxldCBleHByID0gc2VnO1xuICB3aGlsZSAoKytpIDwgbCkge1xuICAgIGV4cHIgPSBleHByICsgJyAmJiAnICsgKHNlZyA9IHNlZyArICcuJyArIHNlZ21lbnRzW2ldKTtcbiAgfVxuXG4gIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKCdzdG9yZScsICdyZXR1cm4gJyArIGV4cHIgKyAnOycpO1xuXG4gIHJldHVybiA8KHg6IGFueSkgPT4gYW55PmZuO1xufVxuXG4vKipcbiAqIEdldCBhIGRlZXBseSBuZXN0ZWQgdmFsdWUuIEV4YW1wbGU6XG4gKlxuICogICAgZ2V0VmFsdWUoeyBmb286IGJhcjogW10gfSwgJ2Zvby5iYXInKSAvLz0+IFtdXG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcEdldHRlcihwYXRoczogc3RyaW5nW10sIGNvbmZpZzogTmd4c0NvbmZpZykge1xuICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb21wYXRpYmlsaXR5ICYmIGNvbmZpZy5jb21wYXRpYmlsaXR5LnN0cmljdENvbnRlbnRTZWN1cml0eVBvbGljeSkge1xuICAgIHJldHVybiBjb21wbGlhbnRQcm9wR2V0dGVyKHBhdGhzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFzdFByb3BHZXR0ZXIocGF0aHMpO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gYXJyYXkgb2Ygc3RhdGVzLCBpdCB3aWxsIHJldHVybiBhIG9iamVjdCBncmFwaC4gRXhhbXBsZTpcbiAqICAgIGNvbnN0IHN0YXRlcyA9IFtcbiAqICAgICAgQ2FydCxcbiAqICAgICAgQ2FydFNhdmVkLFxuICogICAgICBDYXJ0U2F2ZWRJdGVtc1xuICogICAgXVxuICpcbiAqIHdvdWxkIHJldHVybjpcbiAqXG4gKiAgY29uc3QgZ3JhcGggPSB7XG4gKiAgICBjYXJ0OiBbJ3NhdmVkJ10sXG4gKiAgICBzYXZlZDogWydpdGVtcyddLFxuICogICAgaXRlbXM6IFtdXG4gKiAgfTtcbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEdyYXBoKHN0YXRlQ2xhc3NlczogU3RhdGVDbGFzc0ludGVybmFsW10pOiBTdGF0ZUtleUdyYXBoIHtcbiAgY29uc3QgZmluZE5hbWUgPSAoc3RhdGVDbGFzczogU3RhdGVDbGFzc0ludGVybmFsKSA9PiB7XG4gICAgY29uc3QgbWV0YSA9IHN0YXRlQ2xhc3Nlcy5maW5kKGcgPT4gZyA9PT0gc3RhdGVDbGFzcyk7XG5cbiAgICAvLyBDYXJldGFrZXIgbm90ZTogd2UgaGF2ZSBzdGlsbCBsZWZ0IHRoZSBgdHlwZW9mYCBjb25kaXRpb24gaW4gb3JkZXIgdG8gYXZvaWRcbiAgICAvLyBjcmVhdGluZyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgcHJvamVjdHMgdGhhdCBzdGlsbCB1c2UgdGhlIFZpZXcgRW5naW5lLlxuICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiAhbWV0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2hpbGQgc3RhdGUgbm90IGZvdW5kOiAke3N0YXRlQ2xhc3N9LiBcXHJcXG5Zb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGFkZCBzdGF0ZXMgdG8gbW9kdWxlYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YSFbybVNRVRBX0tFWV0hLm5hbWUhO1xuICB9O1xuXG4gIHJldHVybiBzdGF0ZUNsYXNzZXMucmVkdWNlPFN0YXRlS2V5R3JhcGg+KFxuICAgIChyZXN1bHQ6IFN0YXRlS2V5R3JhcGgsIHN0YXRlQ2xhc3M6IFN0YXRlQ2xhc3NJbnRlcm5hbCkgPT4ge1xuICAgICAgY29uc3QgeyBuYW1lLCBjaGlsZHJlbiB9ID0gc3RhdGVDbGFzc1vJtU1FVEFfS0VZXSE7XG4gICAgICByZXN1bHRbbmFtZSFdID0gKGNoaWxkcmVuIHx8IFtdKS5tYXAoZmluZE5hbWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHt9XG4gICk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzdGF0ZXMgYXJyYXksIHJldHVybnMgb2JqZWN0IGdyYXBoXG4gKiByZXR1cm5pbmcgdGhlIG5hbWUgYW5kIHN0YXRlIG1ldGFkYXRhLiBFeGFtcGxlOlxuICpcbiAqICBjb25zdCBncmFwaCA9IHtcbiAqICAgIGNhcnQ6IHsgbWV0YWRhdGEgfVxuICogIH07XG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZVRvU3RhdGUoc3RhdGVzOiBTdGF0ZUNsYXNzSW50ZXJuYWxbXSk6IFBsYWluT2JqZWN0T2Y8U3RhdGVDbGFzc0ludGVybmFsPiB7XG4gIHJldHVybiBzdGF0ZXMucmVkdWNlPFBsYWluT2JqZWN0T2Y8U3RhdGVDbGFzc0ludGVybmFsPj4oXG4gICAgKHJlc3VsdDogUGxhaW5PYmplY3RPZjxTdGF0ZUNsYXNzSW50ZXJuYWw+LCBzdGF0ZUNsYXNzOiBTdGF0ZUNsYXNzSW50ZXJuYWwpID0+IHtcbiAgICAgIGNvbnN0IG1ldGEgPSBzdGF0ZUNsYXNzW8m1TUVUQV9LRVldITtcbiAgICAgIHJlc3VsdFttZXRhLm5hbWUhXSA9IHN0YXRlQ2xhc3M7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAge31cbiAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG9iamVjdCByZWxhdGlvbnNoaXAgZ3JhcGggd2lsbCByZXR1cm4gdGhlIGZ1bGwgcGF0aFxuICogZm9yIHRoZSBjaGlsZCBpdGVtcy4gRXhhbXBsZTpcbiAqXG4gKiAgY29uc3QgZ3JhcGggPSB7XG4gKiAgICBjYXJ0OiBbJ3NhdmVkJ10sXG4gKiAgICBzYXZlZDogWydpdGVtcyddLFxuICogICAgaXRlbXM6IFtdXG4gKiAgfTtcbiAqXG4gKiB3b3VsZCByZXR1cm46XG4gKlxuICogIGNvbnN0IHIgPSB7XG4gKiAgICBjYXJ0OiAnY2FydCcsXG4gKiAgICBzYXZlZDogJ2NhcnQuc2F2ZWQnLFxuICogICAgaXRlbXM6ICdjYXJ0LnNhdmVkLml0ZW1zJ1xuICogIH07XG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEZ1bGxQYXJlbnRQYXRoKFxuICBvYmo6IFN0YXRlS2V5R3JhcGgsXG4gIG5ld09iajogUGxhaW5PYmplY3RPZjxzdHJpbmc+ID0ge31cbik6IFBsYWluT2JqZWN0T2Y8c3RyaW5nPiB7XG4gIGNvbnN0IHZpc2l0ID0gKGNoaWxkOiBTdGF0ZUtleUdyYXBoLCBrZXlUb0ZpbmQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNoaWxkKSB7XG4gICAgICBpZiAoY2hpbGQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBjaGlsZFtrZXldLmluZGV4T2Yoa2V5VG9GaW5kKSA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHZpc2l0KGNoaWxkLCBrZXkpO1xuICAgICAgICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gYCR7cGFyZW50fS4ke2tleX1gIDoga2V5O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHZpc2l0KG9iaiwga2V5KTtcbiAgICAgIG5ld09ialtrZXldID0gcGFyZW50ID8gYCR7cGFyZW50fS4ke2tleX1gIDoga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdPYmo7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBvYmplY3QgZ3JhcGgsIGl0IHdpbGwgcmV0dXJuIHRoZSBpdGVtcyB0b3BvbG9naWNhbGx5IHNvcnRlZCBFeGFtcGxlOlxuICpcbiAqICBjb25zdCBncmFwaCA9IHtcbiAqICAgIGNhcnQ6IFsnc2F2ZWQnXSxcbiAqICAgIHNhdmVkOiBbJ2l0ZW1zJ10sXG4gKiAgICBpdGVtczogW11cbiAqICB9O1xuICpcbiAqIHdvdWxkIHJldHVybjpcbiAqXG4gKiAgY29uc3QgcmVzdWx0cyA9IFtcbiAqICAgICdpdGVtcycsXG4gKiAgICAnc2F2ZWQnLFxuICogICAgJ2NhcnQnXG4gKiAgXTtcbiAqXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b3BvbG9naWNhbFNvcnQoZ3JhcGg6IFN0YXRlS2V5R3JhcGgpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNvcnRlZDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgdmlzaXRlZDogUGxhaW5PYmplY3RPZjxib29sZWFuPiA9IHt9O1xuXG4gIGNvbnN0IHZpc2l0ID0gKG5hbWU6IHN0cmluZywgYW5jZXN0b3JzOiBzdHJpbmdbXSA9IFtdKSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFuY2VzdG9ycykpIHtcbiAgICAgIGFuY2VzdG9ycyA9IFtdO1xuICAgIH1cblxuICAgIGFuY2VzdG9ycy5wdXNoKG5hbWUpO1xuICAgIHZpc2l0ZWRbbmFtZV0gPSB0cnVlO1xuXG4gICAgZ3JhcGhbbmFtZV0uZm9yRWFjaCgoZGVwOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIENhcmV0YWtlciBub3RlOiB3ZSBoYXZlIHN0aWxsIGxlZnQgdGhlIGB0eXBlb2ZgIGNvbmRpdGlvbiBpbiBvcmRlciB0byBhdm9pZFxuICAgICAgLy8gY3JlYXRpbmcgYSBicmVha2luZyBjaGFuZ2UgZm9yIHByb2plY3RzIHRoYXQgc3RpbGwgdXNlIHRoZSBWaWV3IEVuZ2luZS5cbiAgICAgIGlmICgodHlwZW9mIG5nRGV2TW9kZSA9PT0gJ3VuZGVmaW5lZCcgfHwgbmdEZXZNb2RlKSAmJiBhbmNlc3RvcnMuaW5kZXhPZihkZXApID49IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDaXJjdWxhciBkZXBlbmRlbmN5ICcke2RlcH0nIGlzIHJlcXVpcmVkIGJ5ICcke25hbWV9JzogJHthbmNlc3RvcnMuam9pbignIC0+ICcpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZpc2l0ZWRbZGVwXSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZpc2l0KGRlcCwgYW5jZXN0b3JzLnNsaWNlKDApKTtcbiAgICB9KTtcblxuICAgIGlmIChzb3J0ZWQuaW5kZXhPZihuYW1lKSA8IDApIHtcbiAgICAgIHNvcnRlZC5wdXNoKG5hbWUpO1xuICAgIH1cbiAgfTtcblxuICBPYmplY3Qua2V5cyhncmFwaCkuZm9yRWFjaChrID0+IHZpc2l0KGspKTtcblxuICByZXR1cm4gc29ydGVkLnJldmVyc2UoKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYSBvYmplY3Qgb3Igbm90LlxuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KG9iajogYW55KSB7XG4gIHJldHVybiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsKSB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nO1xufVxuIl19
@@ -1,97 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { NgxsBootstrapper } from '@ngxs/store/internals';
3
- import { EMPTY, ReplaySubject } from 'rxjs';
4
- import { catchError, filter, mergeMap, pairwise, startWith, takeUntil, tap } from 'rxjs/operators';
5
- import { Store } from '../store';
6
- import { getValue } from '../utils/utils';
7
- import { InternalErrorReporter } from './error-handler';
8
- import { InitState, UpdateState } from '../actions/actions';
9
- import { StateContextFactory } from './state-context-factory';
10
- import { InternalStateOperations } from './state-operations';
11
- import { NgxsSimpleChange } from '../symbols';
12
- import { getInvalidInitializationOrderMessage } from '../configs/messages.config';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "../store";
15
- import * as i2 from "./error-handler";
16
- import * as i3 from "./state-operations";
17
- import * as i4 from "./state-context-factory";
18
- import * as i5 from "@ngxs/store/internals";
19
- const NG_DEV_MODE = typeof ngDevMode === 'undefined' || ngDevMode;
20
- export class LifecycleStateManager {
21
- constructor(_store, _internalErrorReporter, _internalStateOperations, _stateContextFactory, _bootstrapper) {
22
- this._store = _store;
23
- this._internalErrorReporter = _internalErrorReporter;
24
- this._internalStateOperations = _internalStateOperations;
25
- this._stateContextFactory = _stateContextFactory;
26
- this._bootstrapper = _bootstrapper;
27
- this._destroy$ = new ReplaySubject(1);
28
- }
29
- ngOnDestroy() {
30
- this._destroy$.next();
31
- }
32
- ngxsBootstrap(action, results) {
33
- if (NG_DEV_MODE) {
34
- if (action instanceof InitState) {
35
- this._initStateHasBeenDispatched = true;
36
- }
37
- else if (
38
- // This is a dev mode-only check that ensures the correct order of
39
- // state initialization. The `NgxsModule.forRoot` or `provideStore` should
40
- // always come first, followed by `forFeature` and `provideStates`. If the
41
- // `UpdateState` is dispatched before the `InitState` is dispatched, it indicates
42
- // that modules or providers are in an invalid order.
43
- action instanceof UpdateState &&
44
- !this._initStateHasBeenDispatched) {
45
- console.error(getInvalidInitializationOrderMessage(action.addedStates));
46
- }
47
- }
48
- this._internalStateOperations
49
- .getRootStateOperations()
50
- .dispatch(action)
51
- .pipe(filter(() => !!results), tap(() => this._invokeInitOnStates(results.states)), mergeMap(() => this._bootstrapper.appBootstrapped$), filter(appBootstrapped => !!appBootstrapped), catchError(error => {
52
- // The `SafeSubscriber` (which is used by most RxJS operators) re-throws
53
- // errors asynchronously (`setTimeout(() => { throw error })`). This might
54
- // break existing user's code or unit tests. We catch the error manually to
55
- // be backward compatible with the old behavior.
56
- this._internalErrorReporter.reportErrorSafely(error);
57
- return EMPTY;
58
- }), takeUntil(this._destroy$))
59
- .subscribe(() => this._invokeBootstrapOnStates(results.states));
60
- }
61
- _invokeInitOnStates(mappedStores) {
62
- for (const mappedStore of mappedStores) {
63
- const instance = mappedStore.instance;
64
- if (instance.ngxsOnChanges) {
65
- this._store
66
- .select(state => getValue(state, mappedStore.path))
67
- .pipe(startWith(undefined), pairwise(), takeUntil(this._destroy$))
68
- .subscribe(([previousValue, currentValue]) => {
69
- const change = new NgxsSimpleChange(previousValue, currentValue, !mappedStore.isInitialised);
70
- instance.ngxsOnChanges(change);
71
- });
72
- }
73
- if (instance.ngxsOnInit) {
74
- instance.ngxsOnInit(this._getStateContext(mappedStore));
75
- }
76
- mappedStore.isInitialised = true;
77
- }
78
- }
79
- _invokeBootstrapOnStates(mappedStores) {
80
- for (const mappedStore of mappedStores) {
81
- const instance = mappedStore.instance;
82
- if (instance.ngxsAfterBootstrap) {
83
- instance.ngxsAfterBootstrap(this._getStateContext(mappedStore));
84
- }
85
- }
86
- }
87
- _getStateContext(mappedStore) {
88
- return this._stateContextFactory.createStateContext(mappedStore);
89
- }
90
- }
91
- /** @nocollapse */ LifecycleStateManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: LifecycleStateManager, deps: [{ token: i1.Store }, { token: i2.InternalErrorReporter }, { token: i3.InternalStateOperations }, { token: i4.StateContextFactory }, { token: i5.NgxsBootstrapper }], target: i0.ɵɵFactoryTarget.Injectable });
92
- /** @nocollapse */ LifecycleStateManager.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: LifecycleStateManager, providedIn: 'root' });
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: LifecycleStateManager, decorators: [{
94
- type: Injectable,
95
- args: [{ providedIn: 'root' }]
96
- }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.InternalErrorReporter }, { type: i3.InternalStateOperations }, { type: i4.StateContextFactory }, { type: i5.NgxsBootstrapper }]; } });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLXN0YXRlLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvaW50ZXJuYWwvbGlmZWN5Y2xlLXN0YXRlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU3RCxPQUFPLEVBQWlCLGdCQUFnQixFQUFnQixNQUFNLFlBQVksQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7OztBQUVsRixNQUFNLFdBQVcsR0FBRyxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxDQUFDO0FBR2xFLE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFDVSxNQUFhLEVBQ2Isc0JBQTZDLEVBQzdDLHdCQUFpRCxF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WUFFRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3ZCLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7YUFDekQ7WUFFRCxXQUFXLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUNsQztJQUNILENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxZQUEyQjtRQUMxRCxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRTtZQUN0QyxNQUFNLFFBQVEsR0FBa0IsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUNyRCxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtnQkFDL0IsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2FBQ2pFO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsV0FBd0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkUsQ0FBQzs7cUlBL0ZVLHFCQUFxQjt5SUFBckIscUJBQXFCLGNBRFIsTUFBTTsyRkFDbkIscUJBQXFCO2tCQURqQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4c0Jvb3RzdHJhcHBlciB9IGZyb20gJ0BuZ3hzL3N0b3JlL2ludGVybmFscyc7XG5pbXBvcnQgeyBFTVBUWSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgZmlsdGVyLFxuICBtZXJnZU1hcCxcbiAgcGFpcndpc2UsXG4gIHN0YXJ0V2l0aCxcbiAgdGFrZVVudGlsLFxuICB0YXBcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJy4uL3N0b3JlJztcbmltcG9ydCB7IGdldFZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvclJlcG9ydGVyIH0gZnJvbSAnLi9lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7IEluaXRTdGF0ZSwgVXBkYXRlU3RhdGUgfSBmcm9tICcuLi9hY3Rpb25zL2FjdGlvbnMnO1xuaW1wb3J0IHsgU3RhdGVDb250ZXh0RmFjdG9yeSB9IGZyb20gJy4vc3RhdGUtY29udGV4dC1mYWN0b3J5JztcbmltcG9ydCB7IEludGVybmFsU3RhdGVPcGVyYXRpb25zIH0gZnJvbSAnLi9zdGF0ZS1vcGVyYXRpb25zJztcbmltcG9ydCB7IE1hcHBlZFN0b3JlLCBTdGF0ZXNBbmREZWZhdWx0cyB9IGZyb20gJy4vaW50ZXJuYWxzJztcbmltcG9ydCB7IE5neHNMaWZlQ3ljbGUsIE5neHNTaW1wbGVDaGFuZ2UsIFN0YXRlQ29udGV4dCB9IGZyb20gJy4uL3N5bWJvbHMnO1xuaW1wb3J0IHsgZ2V0SW52YWxpZEluaXRpYWxpemF0aW9uT3JkZXJNZXNzYWdlIH0gZnJvbSAnLi4vY29uZmlncy9tZXNzYWdlcy5jb25maWcnO1xuXG5jb25zdCBOR19ERVZfTU9ERSA9IHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGVTdGF0ZU1hbmFnZXIgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuXG4gIHByaXZhdGUgX2luaXRTdGF0ZUhhc0JlZW5EaXNwYXRjaGVkPzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9zdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBfaW50ZXJuYWxFcnJvclJlcG9ydGVyOiBJbnRlcm5hbEVycm9yUmVwb3J0ZXIsXG4gICAgcHJpdmF0ZSBfaW50ZXJuYWxTdGF0ZU9wZXJhdGlvbnM6IEludGVybmFsU3RhdGVPcGVyYXRpb25zLFxuICAgIHByaXZhdGUgX3N0YXRlQ29udGV4dEZhY3Rvcnk6IFN0YXRlQ29udGV4dEZhY3RvcnksXG4gICAgcHJpdmF0ZSBfYm9vdHN0cmFwcGVyOiBOZ3hzQm9vdHN0cmFwcGVyXG4gICkge31cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gIH1cblxuICBuZ3hzQm9vdHN0cmFwKFxuICAgIGFjdGlvbjogSW5pdFN0YXRlIHwgVXBkYXRlU3RhdGUsXG4gICAgcmVzdWx0czogU3RhdGVzQW5kRGVmYXVsdHMgfCB1bmRlZmluZWRcbiAgKTogdm9pZCB7XG4gICAgaWYgKE5HX0RFVl9NT0RFKSB7XG4gICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgSW5pdFN0YXRlKSB7XG4gICAgICAgIHRoaXMuX2luaXRTdGF0ZUhhc0JlZW5EaXNwYXRjaGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIC8vIFRoaXMgaXMgYSBkZXYgbW9kZS1vbmx5IGNoZWNrIHRoYXQgZW5zdXJlcyB0aGUgY29ycmVjdCBvcmRlciBvZlxuICAgICAgICAvLyBzdGF0ZSBpbml0aWFsaXphdGlvbi4gVGhlIGBOZ3hzTW9kdWxlLmZvclJvb3RgIG9yIGBwcm92aWRlU3RvcmVgIHNob3VsZFxuICAgICAgICAvLyBhbHdheXMgY29tZSBmaXJzdCwgZm9sbG93ZWQgYnkgYGZvckZlYXR1cmVgIGFuZCBgcHJvdmlkZVN0YXRlc2AuIElmIHRoZVxuICAgICAgICAvLyBgVXBkYXRlU3RhdGVgIGlzIGRpc3BhdGNoZWQgYmVmb3JlIHRoZSBgSW5pdFN0YXRlYCBpcyBkaXNwYXRjaGVkLCBpdCBpbmRpY2F0ZXNcbiAgICAgICAgLy8gdGhhdCBtb2R1bGVzIG9yIHByb3ZpZGVycyBhcmUgaW4gYW4gaW52YWxpZCBvcmRlci5cbiAgICAgICAgYWN0aW9uIGluc3RhbmNlb2YgVXBkYXRlU3RhdGUgJiZcbiAgICAgICAgIXRoaXMuX2luaXRTdGF0ZUhhc0JlZW5EaXNwYXRjaGVkXG4gICAgICApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihnZXRJbnZhbGlkSW5pdGlhbGl6YXRpb25PcmRlck1lc3NhZ2UoYWN0aW9uLmFkZGVkU3RhdGVzKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faW50ZXJuYWxTdGF0ZU9wZXJhdGlvbnNcbiAgICAgIC5nZXRSb290U3RhdGVPcGVyYXRpb25zKClcbiAgICAgIC5kaXNwYXRjaChhY3Rpb24pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+ICEhcmVzdWx0cyksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9pbnZva2VJbml0T25TdGF0ZXMocmVzdWx0cyEuc3RhdGVzKSksXG4gICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuX2Jvb3RzdHJhcHBlci5hcHBCb290c3RyYXBwZWQkKSxcbiAgICAgICAgZmlsdGVyKGFwcEJvb3RzdHJhcHBlZCA9PiAhIWFwcEJvb3RzdHJhcHBlZCksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIFRoZSBgU2FmZVN1YnNjcmliZXJgICh3aGljaCBpcyB1c2VkIGJ5IG1vc3QgUnhKUyBvcGVyYXRvcnMpIHJlLXRocm93c1xuICAgICAgICAgIC8vIGVycm9ycyBhc3luY2hyb25vdXNseSAoYHNldFRpbWVvdXQoKCkgPT4geyB0aHJvdyBlcnJvciB9KWApLiBUaGlzIG1pZ2h0XG4gICAgICAgICAgLy8gYnJlYWsgZXhpc3RpbmcgdXNlcidzIGNvZGUgb3IgdW5pdCB0ZXN0cy4gV2UgY2F0Y2ggdGhlIGVycm9yIG1hbnVhbGx5IHRvXG4gICAgICAgICAgLy8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHRoZSBvbGQgYmVoYXZpb3IuXG4gICAgICAgICAgdGhpcy5faW50ZXJuYWxFcnJvclJlcG9ydGVyLnJlcG9ydEVycm9yU2FmZWx5KGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2ludm9rZUJvb3RzdHJhcE9uU3RhdGVzKHJlc3VsdHMhLnN0YXRlcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW52b2tlSW5pdE9uU3RhdGVzKG1hcHBlZFN0b3JlczogTWFwcGVkU3RvcmVbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbWFwcGVkU3RvcmUgb2YgbWFwcGVkU3RvcmVzKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZTogTmd4c0xpZmVDeWNsZSA9IG1hcHBlZFN0b3JlLmluc3RhbmNlO1xuXG4gICAgICBpZiAoaW5zdGFuY2Uubmd4c09uQ2hhbmdlcykge1xuICAgICAgICB0aGlzLl9zdG9yZVxuICAgICAgICAgIC5zZWxlY3Qoc3RhdGUgPT4gZ2V0VmFsdWUoc3RhdGUsIG1hcHBlZFN0b3JlLnBhdGgpKVxuICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aCh1bmRlZmluZWQpLCBwYWlyd2lzZSgpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKFtwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2UgPSBuZXcgTmd4c1NpbXBsZUNoYW5nZShcbiAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAhbWFwcGVkU3RvcmUuaXNJbml0aWFsaXNlZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGluc3RhbmNlLm5neHNPbkNoYW5nZXMhKGNoYW5nZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnN0YW5jZS5uZ3hzT25Jbml0KSB7XG4gICAgICAgIGluc3RhbmNlLm5neHNPbkluaXQodGhpcy5fZ2V0U3RhdGVDb250ZXh0KG1hcHBlZFN0b3JlKSk7XG4gICAgICB9XG5cbiAgICAgIG1hcHBlZFN0b3JlLmlzSW5pdGlhbGlzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ludm9rZUJvb3RzdHJhcE9uU3RhdGVzKG1hcHBlZFN0b3JlczogTWFwcGVkU3RvcmVbXSkge1xuICAgIGZvciAoY29uc3QgbWFwcGVkU3RvcmUgb2YgbWFwcGVkU3RvcmVzKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZTogTmd4c0xpZmVDeWNsZSA9IG1hcHBlZFN0b3JlLmluc3RhbmNlO1xuICAgICAgaWYgKGluc3RhbmNlLm5neHNBZnRlckJvb3RzdHJhcCkge1xuICAgICAgICBpbnN0YW5jZS5uZ3hzQWZ0ZXJCb290c3RyYXAodGhpcy5fZ2V0U3RhdGVDb250ZXh0KG1hcHBlZFN0b3JlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U3RhdGVDb250ZXh0KG1hcHBlZFN0b3JlOiBNYXBwZWRTdG9yZSk6IFN0YXRlQ29udGV4dDxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVDb250ZXh0RmFjdG9yeS5jcmVhdGVTdGF0ZUNvbnRleHQobWFwcGVkU3RvcmUpO1xuICB9XG59XG4iXX0=