@ngxs/store 18.1.6 → 19.0.0

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 (145) hide show
  1. package/experimental/index.d.ts +6 -5
  2. package/fesm2022/ngxs-store-experimental.mjs +8 -25
  3. package/fesm2022/ngxs-store-experimental.mjs.map +1 -1
  4. package/fesm2022/ngxs-store-internals-testing.mjs +8 -9
  5. package/fesm2022/ngxs-store-internals-testing.mjs.map +1 -1
  6. package/fesm2022/ngxs-store-internals.mjs +6 -6
  7. package/fesm2022/ngxs-store-internals.mjs.map +1 -1
  8. package/fesm2022/ngxs-store-operators.mjs.map +1 -1
  9. package/fesm2022/ngxs-store-plugins.mjs.map +1 -1
  10. package/fesm2022/ngxs-store.mjs +101 -72
  11. package/fesm2022/ngxs-store.mjs.map +1 -1
  12. package/index.d.ts +11 -1
  13. package/package.json +2 -14
  14. package/schematics/src/actions/actions.factory.js +1 -2
  15. package/schematics/src/actions/actions.factory.js.map +1 -1
  16. package/schematics/src/ng-add/add-declaration.js +2 -3
  17. package/schematics/src/ng-add/add-declaration.js.map +1 -1
  18. package/schematics/src/ng-add/ng-add.factory.js +1 -2
  19. package/schematics/src/ng-add/ng-add.factory.js.map +1 -1
  20. package/schematics/src/starter-kit/starter-kit.factory.js +1 -2
  21. package/schematics/src/starter-kit/starter-kit.factory.js.map +1 -1
  22. package/schematics/src/state/state.factory.js +1 -2
  23. package/schematics/src/state/state.factory.js.map +1 -1
  24. package/schematics/src/store/store.factory.js +1 -2
  25. package/schematics/src/store/store.factory.js.map +1 -1
  26. package/schematics/src/utils/common/properties.js +1 -2
  27. package/schematics/src/utils/common/properties.js.map +1 -1
  28. package/schematics/src/utils/config.js +2 -3
  29. package/schematics/src/utils/config.js.map +1 -1
  30. package/schematics/src/utils/generate-utils.js +1 -2
  31. package/schematics/src/utils/generate-utils.js.map +1 -1
  32. package/schematics/src/utils/normalize-options.js +3 -4
  33. package/schematics/src/utils/normalize-options.js.map +1 -1
  34. package/schematics/src/utils/project.js +4 -5
  35. package/schematics/src/utils/project.js.map +1 -1
  36. package/schematics/src/utils/versions.json +1 -1
  37. package/esm2022/experimental/index.mjs +0 -2
  38. package/esm2022/experimental/ngxs-store-experimental.mjs +0 -5
  39. package/esm2022/experimental/pending-tasks.mjs +0 -30
  40. package/esm2022/index.mjs +0 -13
  41. package/esm2022/internals/custom-rxjs-operators.mjs +0 -19
  42. package/esm2022/internals/custom-rxjs-subjects.mjs +0 -92
  43. package/esm2022/internals/index.mjs +0 -11
  44. package/esm2022/internals/initial-state.mjs +0 -17
  45. package/esm2022/internals/internal-tokens.mjs +0 -5
  46. package/esm2022/internals/memoize.mjs +0 -43
  47. package/esm2022/internals/metadata.mjs +0 -57
  48. package/esm2022/internals/ngxs-app-bootstrapped-state.mjs +0 -19
  49. package/esm2022/internals/ngxs-store-internals.mjs +0 -5
  50. package/esm2022/internals/state-stream.mjs +0 -33
  51. package/esm2022/internals/state-token.mjs +0 -17
  52. package/esm2022/internals/symbols.mjs +0 -11
  53. package/esm2022/internals/testing/fresh-platform.mjs +0 -72
  54. package/esm2022/internals/testing/helpers/ngxs-test.component.mjs +0 -16
  55. package/esm2022/internals/testing/helpers/ngxs-test.module.mjs +0 -20
  56. package/esm2022/internals/testing/index.mjs +0 -4
  57. package/esm2022/internals/testing/ngxs-store-internals-testing.mjs +0 -5
  58. package/esm2022/internals/testing/ngxs.setup.mjs +0 -49
  59. package/esm2022/internals/testing/skip-console-logging.mjs +0 -37
  60. package/esm2022/internals/testing/symbol.mjs +0 -2
  61. package/esm2022/ngxs-store.mjs +0 -5
  62. package/esm2022/operators/append.mjs +0 -20
  63. package/esm2022/operators/compose.mjs +0 -6
  64. package/esm2022/operators/iif.mjs +0 -38
  65. package/esm2022/operators/index.mjs +0 -14
  66. package/esm2022/operators/insert-item.mjs +0 -29
  67. package/esm2022/operators/ngxs-store-operators.mjs +0 -5
  68. package/esm2022/operators/patch.mjs +0 -21
  69. package/esm2022/operators/remove-item.mjs +0 -22
  70. package/esm2022/operators/types.mjs +0 -2
  71. package/esm2022/operators/update-item.mjs +0 -40
  72. package/esm2022/operators/utils.mjs +0 -19
  73. package/esm2022/plugins/actions.mjs +0 -16
  74. package/esm2022/plugins/index.mjs +0 -4
  75. package/esm2022/plugins/ngxs-store-plugins.mjs +0 -5
  76. package/esm2022/plugins/symbols.mjs +0 -15
  77. package/esm2022/plugins/utils.mjs +0 -51
  78. package/esm2022/src/actions/action-registry.mjs +0 -34
  79. package/esm2022/src/actions/symbols.mjs +0 -2
  80. package/esm2022/src/actions-stream.mjs +0 -61
  81. package/esm2022/src/configs/messages.config.mjs +0 -48
  82. package/esm2022/src/decorators/action.mjs +0 -31
  83. package/esm2022/src/decorators/select/select-factory.mjs +0 -29
  84. package/esm2022/src/decorators/select/select.mjs +0 -29
  85. package/esm2022/src/decorators/select/symbols.mjs +0 -29
  86. package/esm2022/src/decorators/selector/selector.mjs +0 -29
  87. package/esm2022/src/decorators/selector/symbols.mjs +0 -2
  88. package/esm2022/src/decorators/selector-options.mjs +0 -21
  89. package/esm2022/src/decorators/state.mjs +0 -35
  90. package/esm2022/src/dev-features/ngxs-development.module.mjs +0 -28
  91. package/esm2022/src/dev-features/ngxs-unhandled-actions-logger.mjs +0 -43
  92. package/esm2022/src/dev-features/symbols.mjs +0 -7
  93. package/esm2022/src/execution/dispatch-outside-zone-ngxs-execution-strategy.mjs +0 -52
  94. package/esm2022/src/execution/internal-ngxs-execution-strategy.mjs +0 -21
  95. package/esm2022/src/execution/noop-ngxs-execution-strategy.mjs +0 -17
  96. package/esm2022/src/execution/symbols.mjs +0 -28
  97. package/esm2022/src/internal/dispatcher.mjs +0 -125
  98. package/esm2022/src/internal/fallback-subscriber.mjs +0 -29
  99. package/esm2022/src/internal/internals.mjs +0 -205
  100. package/esm2022/src/internal/lifecycle-state-manager.mjs +0 -81
  101. package/esm2022/src/internal/provide-internal-tokens.mjs +0 -20
  102. package/esm2022/src/internal/state-context-factory.mjs +0 -70
  103. package/esm2022/src/internal/state-factory.mjs +0 -311
  104. package/esm2022/src/internal/state-operations.mjs +0 -60
  105. package/esm2022/src/internal/state-operators.mjs +0 -20
  106. package/esm2022/src/internal/unhandled-rxjs-error-callback.mjs +0 -46
  107. package/esm2022/src/ivy/ivy-enabled-in-dev-mode.mjs +0 -25
  108. package/esm2022/src/module.mjs +0 -27
  109. package/esm2022/src/modules/ngxs-feature.module.mjs +0 -18
  110. package/esm2022/src/modules/ngxs-root.module.mjs +0 -18
  111. package/esm2022/src/ngxs-unhandled-error-handler.mjs +0 -29
  112. package/esm2022/src/operators/leave-ngxs.mjs +0 -9
  113. package/esm2022/src/operators/of-action.mjs +0 -104
  114. package/esm2022/src/plugin-manager.mjs +0 -34
  115. package/esm2022/src/plugin_api.mjs +0 -2
  116. package/esm2022/src/private_api.mjs +0 -5
  117. package/esm2022/src/public_api.mjs +0 -20
  118. package/esm2022/src/selectors/create-model-selector.mjs +0 -30
  119. package/esm2022/src/selectors/create-pick-selector.mjs +0 -16
  120. package/esm2022/src/selectors/create-property-selectors.mjs +0 -20
  121. package/esm2022/src/selectors/create-selector.mjs +0 -9
  122. package/esm2022/src/selectors/index.mjs +0 -6
  123. package/esm2022/src/selectors/private_api.mjs +0 -2
  124. package/esm2022/src/selectors/selector-checks.util.mjs +0 -43
  125. package/esm2022/src/selectors/selector-metadata.mjs +0 -35
  126. package/esm2022/src/selectors/selector-models.mjs +0 -2
  127. package/esm2022/src/selectors/selector-types.util.mjs +0 -2
  128. package/esm2022/src/selectors/selector-utils.mjs +0 -95
  129. package/esm2022/src/standalone-features/feature-providers.mjs +0 -18
  130. package/esm2022/src/standalone-features/index.mjs +0 -5
  131. package/esm2022/src/standalone-features/initializers.mjs +0 -94
  132. package/esm2022/src/standalone-features/plugin.mjs +0 -33
  133. package/esm2022/src/standalone-features/preboot.mjs +0 -31
  134. package/esm2022/src/standalone-features/provide-states.mjs +0 -26
  135. package/esm2022/src/standalone-features/provide-store.mjs +0 -26
  136. package/esm2022/src/standalone-features/root-providers.mjs +0 -34
  137. package/esm2022/src/store.mjs +0 -117
  138. package/esm2022/src/symbols.mjs +0 -86
  139. package/esm2022/src/utils/create-dispatch-map.mjs +0 -11
  140. package/esm2022/src/utils/create-select-map.mjs +0 -13
  141. package/esm2022/src/utils/dispatch.mjs +0 -7
  142. package/esm2022/src/utils/freeze.mjs +0 -20
  143. package/esm2022/src/utils/public_api.mjs +0 -5
  144. package/esm2022/src/utils/select.mjs +0 -19
  145. package/esm2022/src/utils/store-validators.mjs +0 -25
@@ -1,205 +0,0 @@
1
- import { InjectionToken, inject } from '@angular/core';
2
- import { ɵMETA_KEY } from '@ngxs/store/internals';
3
- import { NgxsConfig } from '../symbols';
4
- /**
5
- * Get a deeply nested value. Example:
6
- *
7
- * getValue({ foo: bar: [] }, 'foo.bar') //=> []
8
- *
9
- * Note: This is not as fast as the `fastPropGetter` but is strict Content Security Policy compliant.
10
- * See perf hit: https://jsperf.com/fast-value-getter-given-path/1
11
- *
12
- * @ignore
13
- */
14
- function compliantPropGetter(paths) {
15
- return obj => {
16
- for (let i = 0; i < paths.length; i++) {
17
- if (!obj)
18
- return undefined;
19
- obj = obj[paths[i]];
20
- }
21
- return obj;
22
- };
23
- }
24
- /**
25
- * The generated function is faster than:
26
- * - pluck (Observable operator)
27
- * - memoize
28
- *
29
- * @ignore
30
- */
31
- function fastPropGetter(paths) {
32
- const segments = paths;
33
- let seg = 'store.' + segments[0];
34
- let i = 0;
35
- const l = segments.length;
36
- let expr = seg;
37
- while (++i < l) {
38
- expr = expr + ' && ' + (seg = seg + '.' + segments[i]);
39
- }
40
- const fn = new Function('store', 'return ' + expr + ';');
41
- return fn;
42
- }
43
- /**
44
- * Get a deeply nested value. Example:
45
- *
46
- * getValue({ foo: bar: [] }, 'foo.bar') //=> []
47
- *
48
- * @ignore
49
- *
50
- * Marked for removal. It's only used within `createSelectorFn`.
51
- */
52
- export function propGetter(paths, config) {
53
- if (config?.compatibility?.strictContentSecurityPolicy) {
54
- return compliantPropGetter(paths);
55
- }
56
- else {
57
- return fastPropGetter(paths);
58
- }
59
- }
60
- // This injection token selects the prop getter implementation once the app is
61
- // bootstrapped, as the `propGetter` function's behavior determines the implementation
62
- // each time it's called. It accepts the config as the second argument. We no longer
63
- // need to check for the `strictContentSecurityPolicy` every time the prop getter
64
- // implementation is selected. Now, the `propGetter` function is only used within
65
- // `createSelectorFn`, which, in turn, is solely used by the `Select` decorator.
66
- // We've been trying to deprecate the `Select` decorator because it's unstable with
67
- // server-side rendering and micro-frontend applications.
68
- export const ɵPROP_GETTER = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'PROP_GETTER' : '', {
69
- providedIn: 'root',
70
- factory: () => inject(NgxsConfig).compatibility?.strictContentSecurityPolicy
71
- ? compliantPropGetter
72
- : fastPropGetter
73
- });
74
- /**
75
- * Given an array of states, it will return a object graph. Example:
76
- * const states = [
77
- * Cart,
78
- * CartSaved,
79
- * CartSavedItems
80
- * ]
81
- *
82
- * would return:
83
- *
84
- * const graph = {
85
- * cart: ['saved'],
86
- * saved: ['items'],
87
- * items: []
88
- * };
89
- *
90
- * @ignore
91
- */
92
- export function buildGraph(stateClasses) {
93
- const findName = (stateClass) => {
94
- const meta = stateClasses.find(g => g === stateClass);
95
- if (typeof ngDevMode !== 'undefined' && ngDevMode && !meta) {
96
- throw new Error(`Child state not found: ${stateClass}. \r\nYou may have forgotten to add states to module`);
97
- }
98
- return meta[ɵMETA_KEY].name;
99
- };
100
- return stateClasses.reduce((result, stateClass) => {
101
- const { name, children } = stateClass[ɵMETA_KEY];
102
- result[name] = (children || []).map(findName);
103
- return result;
104
- }, {});
105
- }
106
- /**
107
- * Given a states array, returns object graph
108
- * returning the name and state metadata. Example:
109
- *
110
- * const graph = {
111
- * cart: { metadata }
112
- * };
113
- *
114
- * @ignore
115
- */
116
- export function nameToState(states) {
117
- return states.reduce((result, stateClass) => {
118
- const meta = stateClass[ɵMETA_KEY];
119
- result[meta.name] = stateClass;
120
- return result;
121
- }, {});
122
- }
123
- /**
124
- * Given a object relationship graph will return the full path
125
- * for the child items. Example:
126
- *
127
- * const graph = {
128
- * cart: ['saved'],
129
- * saved: ['items'],
130
- * items: []
131
- * };
132
- *
133
- * would return:
134
- *
135
- * const r = {
136
- * cart: 'cart',
137
- * saved: 'cart.saved',
138
- * items: 'cart.saved.items'
139
- * };
140
- *
141
- * @ignore
142
- */
143
- export function findFullParentPath(obj, newObj = {}) {
144
- const visit = (child, keyToFind) => {
145
- for (const key in child) {
146
- if (child.hasOwnProperty(key) && child[key].indexOf(keyToFind) >= 0) {
147
- const parent = visit(child, key);
148
- return parent !== null ? `${parent}.${key}` : key;
149
- }
150
- }
151
- return null;
152
- };
153
- for (const key in obj) {
154
- if (obj.hasOwnProperty(key)) {
155
- const parent = visit(obj, key);
156
- newObj[key] = parent ? `${parent}.${key}` : key;
157
- }
158
- }
159
- return newObj;
160
- }
161
- /**
162
- * Given a object graph, it will return the items topologically sorted Example:
163
- *
164
- * const graph = {
165
- * cart: ['saved'],
166
- * saved: ['items'],
167
- * items: []
168
- * };
169
- *
170
- * would return:
171
- *
172
- * const results = [
173
- * 'items',
174
- * 'saved',
175
- * 'cart'
176
- * ];
177
- *
178
- * @ignore
179
- */
180
- export function topologicalSort(graph) {
181
- const sorted = [];
182
- const visited = {};
183
- const visit = (name, ancestors = []) => {
184
- if (!Array.isArray(ancestors)) {
185
- ancestors = [];
186
- }
187
- ancestors.push(name);
188
- visited[name] = true;
189
- graph[name].forEach((dep) => {
190
- if (typeof ngDevMode !== 'undefined' && ngDevMode && ancestors.indexOf(dep) >= 0) {
191
- throw new Error(`Circular dependency '${dep}' is required by '${name}': ${ancestors.join(' -> ')}`);
192
- }
193
- if (visited[dep]) {
194
- return;
195
- }
196
- visit(dep, ancestors.slice(0));
197
- });
198
- if (sorted.indexOf(name) < 0) {
199
- sorted.push(name);
200
- }
201
- };
202
- Object.keys(graph).forEach(k => visit(k));
203
- return sorted.reverse();
204
- }
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3RvcmUvc3JjL2ludGVybmFsL2ludGVybmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2RCxPQUFPLEVBQ0wsU0FBUyxFQUlWLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQTZCeEM7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxLQUFlO0lBQzFDLE9BQU8sR0FBRyxDQUFDLEVBQUU7UUFDWCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1lBQzNCLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsY0FBYyxDQUFDLEtBQWU7SUFDckMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLElBQUksR0FBRyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUUxQixJQUFJLElBQUksR0FBRyxHQUFHLENBQUM7SUFDZixPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2YsSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxH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IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICDJtU1FVEFfS0VZLFxuICDJtVBsYWluT2JqZWN0T2YsXG4gIMm1U3RhdGVDbGFzc0ludGVybmFsLFxuICDJtUFjdGlvbkhhbmRsZXJNZXRhRGF0YVxufSBmcm9tICdAbmd4cy9zdG9yZS9pbnRlcm5hbHMnO1xuXG5pbXBvcnQgeyBOZ3hzQ29uZmlnIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5cbmRlY2xhcmUgY29uc3QgbmdEZXZNb2RlOiBib29sZWFuO1xuXG5leHBvcnQgdHlwZSBTdGF0ZUtleUdyYXBoID0gybVQbGFpbk9iamVjdE9mPHN0cmluZ1tdPjtcbmV4cG9ydCB0eXBlIFN0YXRlc0J5TmFtZSA9IMm1UGxhaW5PYmplY3RPZjzJtVN0YXRlQ2xhc3NJbnRlcm5hbD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGVPcGVyYXRpb25zPFQ+IHtcbiAgZ2V0U3RhdGUoKTogVDtcblxuICBzZXRTdGF0ZSh2YWw6IFQpOiB2b2lkO1xuXG4gIGRpc3BhdGNoKGFjdGlvbk9yQWN0aW9uczogYW55IHwgYW55W10pOiBPYnNlcnZhYmxlPHZvaWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcHBlZFN0b3JlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpc0luaXRpYWxpc2VkOiBib29sZWFuO1xuICBhY3Rpb25zOiDJtVBsYWluT2JqZWN0T2Y8ybVBY3Rpb25IYW5kbGVyTWV0YURhdGFbXT47XG4gIGRlZmF1bHRzOiBhbnk7XG4gIGluc3RhbmNlOiBhbnk7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0ZXNBbmREZWZhdWx0cyB7XG4gIGRlZmF1bHRzOiBhbnk7XG4gIHN0YXRlczogTWFwcGVkU3RvcmVbXTtcbn1cblxuLyoqXG4gKiBHZXQgYSBkZWVwbHkgbmVzdGVkIHZhbHVlLiBFeGFtcGxlOlxuICpcbiAqICAgIGdldFZhbHVlKHsgZm9vOiBiYXI6IFtdIH0sICdmb28uYmFyJykgLy89PiBbXVxuICpcbiAqIE5vdGU6IFRoaXMgaXMgbm90IGFzIGZhc3QgYXMgdGhlIGBmYXN0UHJvcEdldHRlcmAgYnV0IGlzIHN0cmljdCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb21wbGlhbnQuXG4gKiBTZWUgcGVyZiBoaXQ6IGh0dHBzOi8vanNwZXJmLmNvbS9mYXN0LXZhbHVlLWdldHRlci1naXZlbi1wYXRoLzFcbiAqXG4gKiBAaWdub3JlXG4gKi9cbmZ1bmN0aW9uIGNvbXBsaWFudFByb3BHZXR0ZXIocGF0aHM6IHN0cmluZ1tdKTogKHg6IGFueSkgPT4gYW55IHtcbiAgcmV0dXJuIG9iaiA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFvYmopIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBvYmogPSBvYmpbcGF0aHNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBnZW5lcmF0ZWQgZnVuY3Rpb24gaXMgZmFzdGVyIHRoYW46XG4gKiAtIHBsdWNrIChPYnNlcnZhYmxlIG9wZXJhdG9yKVxuICogLSBtZW1vaXplXG4gKlxuICogQGlnbm9yZVxuICovXG5mdW5jdGlvbiBmYXN0UHJvcEdldHRlcihwYXRoczogc3RyaW5nW10pOiAoeDogYW55KSA9PiBhbnkge1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGhzO1xuICBsZXQgc2VnID0gJ3N0b3JlLicgKyBzZWdtZW50c1swXTtcbiAgbGV0IGkgPSAwO1xuICBjb25zdCBsID0gc2VnbWVudHMubGVuZ3RoO1xuXG4gIGxldCBleHByID0gc2VnO1xuICB3aGlsZSAoKytpIDwgbCkge1xuICAgIGV4cHIgPSBleHByICsgJyAmJiAnICsgKHNlZyA9IHNlZyArICcuJyArIHNlZ21lbnRzW2ldKTtcbiAgfVxuXG4gIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKCdzdG9yZScsICdyZXR1cm4gJyArIGV4cHIgKyAnOycpO1xuXG4gIHJldHVybiA8KHg6IGFueSkgPT4gYW55PmZuO1xufVxuXG4vKipcbiAqIEdldCBhIGRlZXBseSBuZXN0ZWQgdmFsdWUuIEV4YW1wbGU6XG4gKlxuICogICAgZ2V0VmFsdWUoeyBmb286IGJhcjogW10gfSwgJ2Zvby5iYXInKSAvLz0+IFtdXG4gKlxuICogQGlnbm9yZVxuICpcbiAqIE1hcmtlZCBmb3IgcmVtb3ZhbC4gSXQncyBvbmx5IHVzZWQgd2l0aGluIGBjcmVhdGVTZWxlY3RvckZuYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BHZXR0ZXIocGF0aHM6IHN0cmluZ1tdLCBjb25maWc6IE5neHNDb25maWcpIHtcbiAgaWYgKGNvbmZpZz8uY29tcGF0aWJpbGl0eT8uc3RyaWN0Q29udGVudFNlY3VyaXR5UG9saWN5KSB7XG4gICAgcmV0dXJuIGNvbXBsaWFudFByb3BHZXR0ZXIocGF0aHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYXN0UHJvcEdldHRlcihwYXRocyk7XG4gIH1cbn1cblxuLy8gVGhpcyBpbmplY3Rpb24gdG9rZW4gc2VsZWN0cyB0aGUgcHJvcCBnZXR0ZXIgaW1wbGVtZW50YXRpb24gb25jZSB0aGUgYXBwIGlzXG4vLyBib290c3RyYXBwZWQsIGFzIHRoZSBgcHJvcEdldHRlcmAgZnVuY3Rpb24ncyBiZWhhdmlvciBkZXRlcm1pbmVzIHRoZSBpbXBsZW1lbnRhdGlvblxuLy8gZWFjaCB0aW1lIGl0J3MgY2FsbGVkLiBJdCBhY2NlcHRzIHRoZSBjb25maWcgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4gV2Ugbm8gbG9uZ2VyXG4vLyBuZWVkIHRvIGNoZWNrIGZvciB0aGUgYHN0cmljdENvbnRlbnRTZWN1cml0eVBvbGljeWAgZXZlcnkgdGltZSB0aGUgcHJvcCBnZXR0ZXJcbi8vIGltcGxlbWVudGF0aW9uIGlzIHNlbGVjdGVkLiBOb3csIHRoZSBgcHJvcEdldHRlcmAgZnVuY3Rpb24gaXMgb25seSB1c2VkIHdpdGhpblxuLy8gYGNyZWF0ZVNlbGVjdG9yRm5gLCB3aGljaCwgaW4gdHVybiwgaXMgc29sZWx5IHVzZWQgYnkgdGhlIGBTZWxlY3RgIGRlY29yYXRvci5cbi8vIFdlJ3ZlIGJlZW4gdHJ5aW5nIHRvIGRlcHJlY2F0ZSB0aGUgYFNlbGVjdGAgZGVjb3JhdG9yIGJlY2F1c2UgaXQncyB1bnN0YWJsZSB3aXRoXG4vLyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcgYW5kIG1pY3JvLWZyb250ZW5kIGFwcGxpY2F0aW9ucy5cbmV4cG9ydCBjb25zdCDJtVBST1BfR0VUVEVSID0gbmV3IEluamVjdGlvblRva2VuPChwYXRoczogc3RyaW5nW10pID0+ICh4OiBhbnkpID0+IGFueT4oXG4gIHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdQUk9QX0dFVFRFUicgOiAnJyxcbiAge1xuICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICBmYWN0b3J5OiAoKSA9PlxuICAgICAgaW5qZWN0KE5neHNDb25maWcpLmNvbXBhdGliaWxpdHk/LnN0cmljdENvbnRlbnRTZWN1cml0eVBvbGljeVxuICAgICAgICA/IGNvbXBsaWFudFByb3BHZXR0ZXJcbiAgICAgICAgOiBmYXN0UHJvcEdldHRlclxuICB9XG4pO1xuXG4vKipcbiAqIEdpdmVuIGFuIGFycmF5IG9mIHN0YXRlcywgaXQgd2lsbCByZXR1cm4gYSBvYmplY3QgZ3JhcGguIEV4YW1wbGU6XG4gKiAgICBjb25zdCBzdGF0ZXMgPSBbXG4gKiAgICAgIENhcnQsXG4gKiAgICAgIENhcnRTYXZlZCxcbiAqICAgICAgQ2FydFNhdmVkSXRlbXNcbiAqICAgIF1cbiAqXG4gKiB3b3VsZCByZXR1cm46XG4gKlxuICogIGNvbnN0IGdyYXBoID0ge1xuICogICAgY2FydDogWydzYXZlZCddLFxuICogICAgc2F2ZWQ6IFsnaXRlbXMnXSxcbiAqICAgIGl0ZW1zOiBbXVxuICogIH07XG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRHcmFwaChzdGF0ZUNsYXNzZXM6IMm1U3RhdGVDbGFzc0ludGVybmFsW10pOiBTdGF0ZUtleUdyYXBoIHtcbiAgY29uc3QgZmluZE5hbWUgPSAoc3RhdGVDbGFzczogybVTdGF0ZUNsYXNzSW50ZXJuYWwpID0+IHtcbiAgICBjb25zdCBtZXRhID0gc3RhdGVDbGFzc2VzLmZpbmQoZyA9PiBnID09PSBzdGF0ZUNsYXNzKTtcblxuICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgJiYgIW1ldGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENoaWxkIHN0YXRlIG5vdCBmb3VuZDogJHtzdGF0ZUNsYXNzfS4gXFxyXFxuWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBhZGQgc3RhdGVzIHRvIG1vZHVsZWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGEhW8m1TUVUQV9LRVldIS5uYW1lITtcbiAgfTtcblxuICByZXR1cm4gc3RhdGVDbGFzc2VzLnJlZHVjZTxTdGF0ZUtleUdyYXBoPihcbiAgICAocmVzdWx0OiBTdGF0ZUtleUdyYXBoLCBzdGF0ZUNsYXNzOiDJtVN0YXRlQ2xhc3NJbnRlcm5hbCkgPT4ge1xuICAgICAgY29uc3QgeyBuYW1lLCBjaGlsZHJlbiB9ID0gc3RhdGVDbGFzc1vJtU1FVEFfS0VZXSE7XG4gICAgICByZXN1bHRbbmFtZSFdID0gKGNoaWxkcmVuIHx8IFtdKS5tYXAoZmluZE5hbWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHt9XG4gICk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBzdGF0ZXMgYXJyYXksIHJldHVybnMgb2JqZWN0IGdyYXBoXG4gKiByZXR1cm5pbmcgdGhlIG5hbWUgYW5kIHN0YXRlIG1ldGFkYXRhLiBFeGFtcGxlOlxuICpcbiAqICBjb25zdCBncmFwaCA9IHtcbiAqICAgIGNhcnQ6IHsgbWV0YWRhdGEgfVxuICogIH07XG4gKlxuICogQGlnbm9yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZVRvU3RhdGUoXG4gIHN0YXRlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXVxuKTogybVQbGFpbk9iamVjdE9mPMm1U3RhdGVDbGFzc0ludGVybmFsPiB7XG4gIHJldHVybiBzdGF0ZXMucmVkdWNlPMm1UGxhaW5PYmplY3RPZjzJtVN0YXRlQ2xhc3NJbnRlcm5hbD4+KFxuICAgIChyZXN1bHQ6IMm1UGxhaW5PYmplY3RPZjzJtVN0YXRlQ2xhc3NJbnRlcm5hbD4sIHN0YXRlQ2xhc3M6IMm1U3RhdGVDbGFzc0ludGVybmFsKSA9PiB7XG4gICAgICBjb25zdCBtZXRhID0gc3RhdGVDbGFzc1vJtU1FVEFfS0VZXSE7XG4gICAgICByZXN1bHRbbWV0YS5uYW1lIV0gPSBzdGF0ZUNsYXNzO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHt9XG4gICk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBvYmplY3QgcmVsYXRpb25zaGlwIGdyYXBoIHdpbGwgcmV0dXJuIHRoZSBmdWxsIHBhdGhcbiAqIGZvciB0aGUgY2hpbGQgaXRlbXMuIEV4YW1wbGU6XG4gKlxuICogIGNvbnN0IGdyYXBoID0ge1xuICogICAgY2FydDogWydzYXZlZCddLFxuICogICAgc2F2ZWQ6IFsnaXRlbXMnXSxcbiAqICAgIGl0ZW1zOiBbXVxuICogIH07XG4gKlxuICogd291bGQgcmV0dXJuOlxuICpcbiAqICBjb25zdCByID0ge1xuICogICAgY2FydDogJ2NhcnQnLFxuICogICAgc2F2ZWQ6ICdjYXJ0LnNhdmVkJyxcbiAqICAgIGl0ZW1zOiAnY2FydC5zYXZlZC5pdGVtcydcbiAqICB9O1xuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGdWxsUGFyZW50UGF0aChcbiAgb2JqOiBTdGF0ZUtleUdyYXBoLFxuICBuZXdPYmo6IMm1UGxhaW5PYmplY3RPZjxzdHJpbmc+ID0ge31cbik6IMm1UGxhaW5PYmplY3RPZjxzdHJpbmc+IHtcbiAgY29uc3QgdmlzaXQgPSAoY2hpbGQ6IFN0YXRlS2V5R3JhcGgsIGtleVRvRmluZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY2hpbGQpIHtcbiAgICAgIGlmIChjaGlsZC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGNoaWxkW2tleV0uaW5kZXhPZihrZXlUb0ZpbmQpID49IDApIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdmlzaXQoY2hpbGQsIGtleSk7XG4gICAgICAgIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBgJHtwYXJlbnR9LiR7a2V5fWAgOiBrZXk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gdmlzaXQob2JqLCBrZXkpO1xuICAgICAgbmV3T2JqW2tleV0gPSBwYXJlbnQgPyBgJHtwYXJlbnR9LiR7a2V5fWAgOiBrZXk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld09iajtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG9iamVjdCBncmFwaCwgaXQgd2lsbCByZXR1cm4gdGhlIGl0ZW1zIHRvcG9sb2dpY2FsbHkgc29ydGVkIEV4YW1wbGU6XG4gKlxuICogIGNvbnN0IGdyYXBoID0ge1xuICogICAgY2FydDogWydzYXZlZCddLFxuICogICAgc2F2ZWQ6IFsnaXRlbXMnXSxcbiAqICAgIGl0ZW1zOiBbXVxuICogIH07XG4gKlxuICogd291bGQgcmV0dXJuOlxuICpcbiAqICBjb25zdCByZXN1bHRzID0gW1xuICogICAgJ2l0ZW1zJyxcbiAqICAgICdzYXZlZCcsXG4gKiAgICAnY2FydCdcbiAqICBdO1xuICpcbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvcG9sb2dpY2FsU29ydChncmFwaDogU3RhdGVLZXlHcmFwaCk6IHN0cmluZ1tdIHtcbiAgY29uc3Qgc29ydGVkOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCB2aXNpdGVkOiDJtVBsYWluT2JqZWN0T2Y8Ym9vbGVhbj4gPSB7fTtcblxuICBjb25zdCB2aXNpdCA9IChuYW1lOiBzdHJpbmcsIGFuY2VzdG9yczogc3RyaW5nW10gPSBbXSkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhbmNlc3RvcnMpKSB7XG4gICAgICBhbmNlc3RvcnMgPSBbXTtcbiAgICB9XG5cbiAgICBhbmNlc3RvcnMucHVzaChuYW1lKTtcbiAgICB2aXNpdGVkW25hbWVdID0gdHJ1ZTtcblxuICAgIGdyYXBoW25hbWVdLmZvckVhY2goKGRlcDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlICYmIGFuY2VzdG9ycy5pbmRleE9mKGRlcCkgPj0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENpcmN1bGFyIGRlcGVuZGVuY3kgJyR7ZGVwfScgaXMgcmVxdWlyZWQgYnkgJyR7bmFtZX0nOiAke2FuY2VzdG9ycy5qb2luKCcgLT4gJyl9YFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodmlzaXRlZFtkZXBdKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlzaXQoZGVwLCBhbmNlc3RvcnMuc2xpY2UoMCkpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNvcnRlZC5pbmRleE9mKG5hbWUpIDwgMCkge1xuICAgICAgc29ydGVkLnB1c2gobmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIE9iamVjdC5rZXlzKGdyYXBoKS5mb3JFYWNoKGsgPT4gdmlzaXQoaykpO1xuXG4gIHJldHVybiBzb3J0ZWQucmV2ZXJzZSgpO1xufVxuIl19
@@ -1,81 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { ɵNgxsAppBootstrappedState } from '@ngxs/store/internals';
3
- import { getValue, InitState, UpdateState } from '@ngxs/store/plugins';
4
- import { ReplaySubject } from 'rxjs';
5
- import { filter, mergeMap, pairwise, startWith, takeUntil, tap } from 'rxjs/operators';
6
- import { Store } from '../store';
7
- import { StateContextFactory } from './state-context-factory';
8
- import { InternalStateOperations } from './state-operations';
9
- import { NgxsSimpleChange } from '../symbols';
10
- import { getInvalidInitializationOrderMessage } from '../configs/messages.config';
11
- import * as i0 from "@angular/core";
12
- export class LifecycleStateManager {
13
- constructor() {
14
- this._store = inject(Store);
15
- this._internalStateOperations = inject(InternalStateOperations);
16
- this._stateContextFactory = inject(StateContextFactory);
17
- this._appBootstrappedState = inject(ɵNgxsAppBootstrappedState);
18
- this._destroy$ = new ReplaySubject(1);
19
- }
20
- ngOnDestroy() {
21
- this._destroy$.next();
22
- }
23
- ngxsBootstrap(action, results) {
24
- if (typeof ngDevMode !== 'undefined' && ngDevMode) {
25
- if (action instanceof InitState) {
26
- this._initStateHasBeenDispatched = true;
27
- }
28
- else if (
29
- // This is a dev mode-only check that ensures the correct order of
30
- // state initialization. The `NgxsModule.forRoot` or `provideStore` should
31
- // always come first, followed by `forFeature` and `provideStates`. If the
32
- // `UpdateState` is dispatched before the `InitState` is dispatched, it indicates
33
- // that modules or providers are in an invalid order.
34
- action instanceof UpdateState &&
35
- !this._initStateHasBeenDispatched) {
36
- console.error(getInvalidInitializationOrderMessage(action.addedStates));
37
- }
38
- }
39
- this._internalStateOperations
40
- .getRootStateOperations()
41
- .dispatch(action)
42
- .pipe(filter(() => !!results), tap(() => this._invokeInitOnStates(results.states)), mergeMap(() => this._appBootstrappedState), filter(appBootstrapped => !!appBootstrapped), takeUntil(this._destroy$))
43
- .subscribe(() => this._invokeBootstrapOnStates(results.states));
44
- }
45
- _invokeInitOnStates(mappedStores) {
46
- for (const mappedStore of mappedStores) {
47
- const instance = mappedStore.instance;
48
- if (instance.ngxsOnChanges) {
49
- this._store
50
- .select(state => getValue(state, mappedStore.path))
51
- .pipe(startWith(undefined), pairwise(), takeUntil(this._destroy$))
52
- .subscribe(([previousValue, currentValue]) => {
53
- const change = new NgxsSimpleChange(previousValue, currentValue, !mappedStore.isInitialised);
54
- instance.ngxsOnChanges(change);
55
- });
56
- }
57
- if (instance.ngxsOnInit) {
58
- instance.ngxsOnInit(this._getStateContext(mappedStore));
59
- }
60
- mappedStore.isInitialised = true;
61
- }
62
- }
63
- _invokeBootstrapOnStates(mappedStores) {
64
- for (const mappedStore of mappedStores) {
65
- const instance = mappedStore.instance;
66
- if (instance.ngxsAfterBootstrap) {
67
- instance.ngxsAfterBootstrap(this._getStateContext(mappedStore));
68
- }
69
- }
70
- }
71
- _getStateContext(mappedStore) {
72
- return this._stateContextFactory.createStateContext(mappedStore.path);
73
- }
74
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: LifecycleStateManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
75
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: LifecycleStateManager, providedIn: 'root' }); }
76
- }
77
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: LifecycleStateManager, decorators: [{
78
- type: Injectable,
79
- args: [{ providedIn: 'root' }]
80
- }] });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLXN0YXRlLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvaW50ZXJuYWwvbGlmZWN5Y2xlLXN0YXRlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdELE9BQU8sRUFBaUIsZ0JBQWdCLEVBQWdCLE1BQU0sWUFBWSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUdsRixNQUFNLE9BQU8scUJBQXFCO0lBRGxDO1FBRVUsV0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2Qiw2QkFBd0IsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzRCx5QkFBb0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNuRCwwQkFBcUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUVqRCxjQUFTLEdBQUcsSUFBSSxhQUFhLENBQU8sQ0FBQyxDQUFDLENBQUM7S0ErRXpEO0lBM0VDLFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxhQUFhLENBQ1gsTUFBK0IsRUFDL0IsT0FBc0M7UUFFdEMsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxFQUFFLENBQUM7WUFDbEQsSUFBSSxNQUFNLFlBQVksU0FBUyxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7WUFDMUMsQ0FBQztpQkFBTTtZQUNMLGtFQUFrRTtZQUNsRSwwRUFBMEU7WUFDMUUsMEVBQTBFO1lBQzFFLGlGQUFpRjtZQUNqRixxREFBcUQ7WUFDckQsTUFBTSxZQUFZLFdBQVc7Z0JBQzdCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUNqQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDMUUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsd0JBQXdCO2FBQzFCLHNCQUFzQixFQUFFO2FBQ3hCLFFBQVEsQ0FBQyxNQUFNLENBQUM7YUFDaEIsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQ3ZCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ3BELFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFDMUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxFQUM1QyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFlBQTJCO1FBQ3JELEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQWtCLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFFckQsSUFBSSxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNO3FCQUNSLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQ2pFLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUU7b0JBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksZ0JBQWdCLENBQ2pDLGFBQWEsRUFDYixZQUFZLEVBQ1osQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUMzQixDQUFDO29CQUNGLFFBQVEsQ0FBQyxhQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUVELElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN4QixRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFFRCxXQUFXLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUFDLFlBQTJCO1FBQzFELEtBQUssTUFBTSxXQUFXLElBQUksWUFBWSxFQUFFLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQWtCLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDckQsSUFBSSxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDaEMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFdBQXdCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO2lJQXBGVSxxQkFBcUI7cUlBQXJCLHFCQUFxQixjQURSLE1BQU07OzJGQUNuQixxQkFBcUI7a0JBRGpDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IMm1Tmd4c0FwcEJvb3RzdHJhcHBlZFN0YXRlIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcbmltcG9ydCB7IGdldFZhbHVlLCBJbml0U3RhdGUsIFVwZGF0ZVN0YXRlIH0gZnJvbSAnQG5neHMvc3RvcmUvcGx1Z2lucyc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1lcmdlTWFwLCBwYWlyd2lzZSwgc3RhcnRXaXRoLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICcuLi9zdG9yZSc7XG5pbXBvcnQgeyBTdGF0ZUNvbnRleHRGYWN0b3J5IH0gZnJvbSAnLi9zdGF0ZS1jb250ZXh0LWZhY3RvcnknO1xuaW1wb3J0IHsgSW50ZXJuYWxTdGF0ZU9wZXJhdGlvbnMgfSBmcm9tICcuL3N0YXRlLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHsgTWFwcGVkU3RvcmUsIFN0YXRlc0FuZERlZmF1bHRzIH0gZnJvbSAnLi9pbnRlcm5hbHMnO1xuaW1wb3J0IHsgTmd4c0xpZmVDeWNsZSwgTmd4c1NpbXBsZUNoYW5nZSwgU3RhdGVDb250ZXh0IH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQgeyBnZXRJbnZhbGlkSW5pdGlhbGl6YXRpb25PcmRlck1lc3NhZ2UgfSBmcm9tICcuLi9jb25maWdzL21lc3NhZ2VzLmNvbmZpZyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTGlmZWN5Y2xlU3RhdGVNYW5hZ2VyIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfc3RvcmUgPSBpbmplY3QoU3RvcmUpO1xuICBwcml2YXRlIF9pbnRlcm5hbFN0YXRlT3BlcmF0aW9ucyA9IGluamVjdChJbnRlcm5hbFN0YXRlT3BlcmF0aW9ucyk7XG4gIHByaXZhdGUgX3N0YXRlQ29udGV4dEZhY3RvcnkgPSBpbmplY3QoU3RhdGVDb250ZXh0RmFjdG9yeSk7XG4gIHByaXZhdGUgX2FwcEJvb3RzdHJhcHBlZFN0YXRlID0gaW5qZWN0KMm1Tmd4c0FwcEJvb3RzdHJhcHBlZFN0YXRlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuXG4gIHByaXZhdGUgX2luaXRTdGF0ZUhhc0JlZW5EaXNwYXRjaGVkPzogYm9vbGVhbjtcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gIH1cblxuICBuZ3hzQm9vdHN0cmFwKFxuICAgIGFjdGlvbjogSW5pdFN0YXRlIHwgVXBkYXRlU3RhdGUsXG4gICAgcmVzdWx0czogU3RhdGVzQW5kRGVmYXVsdHMgfCB1bmRlZmluZWRcbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSkge1xuICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEluaXRTdGF0ZSkge1xuICAgICAgICB0aGlzLl9pbml0U3RhdGVIYXNCZWVuRGlzcGF0Y2hlZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAvLyBUaGlzIGlzIGEgZGV2IG1vZGUtb25seSBjaGVjayB0aGF0IGVuc3VyZXMgdGhlIGNvcnJlY3Qgb3JkZXIgb2ZcbiAgICAgICAgLy8gc3RhdGUgaW5pdGlhbGl6YXRpb24uIFRoZSBgTmd4c01vZHVsZS5mb3JSb290YCBvciBgcHJvdmlkZVN0b3JlYCBzaG91bGRcbiAgICAgICAgLy8gYWx3YXlzIGNvbWUgZmlyc3QsIGZvbGxvd2VkIGJ5IGBmb3JGZWF0dXJlYCBhbmQgYHByb3ZpZGVTdGF0ZXNgLiBJZiB0aGVcbiAgICAgICAgLy8gYFVwZGF0ZVN0YXRlYCBpcyBkaXNwYXRjaGVkIGJlZm9yZSB0aGUgYEluaXRTdGF0ZWAgaXMgZGlzcGF0Y2hlZCwgaXQgaW5kaWNhdGVzXG4gICAgICAgIC8vIHRoYXQgbW9kdWxlcyBvciBwcm92aWRlcnMgYXJlIGluIGFuIGludmFsaWQgb3JkZXIuXG4gICAgICAgIGFjdGlvbiBpbnN0YW5jZW9mIFVwZGF0ZVN0YXRlICYmXG4gICAgICAgICF0aGlzLl9pbml0U3RhdGVIYXNCZWVuRGlzcGF0Y2hlZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZ2V0SW52YWxpZEluaXRpYWxpemF0aW9uT3JkZXJNZXNzYWdlKGFjdGlvbi5hZGRlZFN0YXRlcykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ludGVybmFsU3RhdGVPcGVyYXRpb25zXG4gICAgICAuZ2V0Um9vdFN0YXRlT3BlcmF0aW9ucygpXG4gICAgICAuZGlzcGF0Y2goYWN0aW9uKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhIXJlc3VsdHMpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5faW52b2tlSW5pdE9uU3RhdGVzKHJlc3VsdHMhLnN0YXRlcykpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLl9hcHBCb290c3RyYXBwZWRTdGF0ZSksXG4gICAgICAgIGZpbHRlcihhcHBCb290c3RyYXBwZWQgPT4gISFhcHBCb290c3RyYXBwZWQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2ludm9rZUJvb3RzdHJhcE9uU3RhdGVzKHJlc3VsdHMhLnN0YXRlcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW52b2tlSW5pdE9uU3RhdGVzKG1hcHBlZFN0b3JlczogTWFwcGVkU3RvcmVbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbWFwcGVkU3RvcmUgb2YgbWFwcGVkU3RvcmVzKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZTogTmd4c0xpZmVDeWNsZSA9IG1hcHBlZFN0b3JlLmluc3RhbmNlO1xuXG4gICAgICBpZiAoaW5zdGFuY2Uubmd4c09uQ2hhbmdlcykge1xuICAgICAgICB0aGlzLl9zdG9yZVxuICAgICAgICAgIC5zZWxlY3Qoc3RhdGUgPT4gZ2V0VmFsdWUoc3RhdGUsIG1hcHBlZFN0b3JlLnBhdGgpKVxuICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aCh1bmRlZmluZWQpLCBwYWlyd2lzZSgpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKFtwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2UgPSBuZXcgTmd4c1NpbXBsZUNoYW5nZShcbiAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgICAgICAgICAgY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAhbWFwcGVkU3RvcmUuaXNJbml0aWFsaXNlZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGluc3RhbmNlLm5neHNPbkNoYW5nZXMhKGNoYW5nZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnN0YW5jZS5uZ3hzT25Jbml0KSB7XG4gICAgICAgIGluc3RhbmNlLm5neHNPbkluaXQodGhpcy5fZ2V0U3RhdGVDb250ZXh0KG1hcHBlZFN0b3JlKSk7XG4gICAgICB9XG5cbiAgICAgIG1hcHBlZFN0b3JlLmlzSW5pdGlhbGlzZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ludm9rZUJvb3RzdHJhcE9uU3RhdGVzKG1hcHBlZFN0b3JlczogTWFwcGVkU3RvcmVbXSkge1xuICAgIGZvciAoY29uc3QgbWFwcGVkU3RvcmUgb2YgbWFwcGVkU3RvcmVzKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZTogTmd4c0xpZmVDeWNsZSA9IG1hcHBlZFN0b3JlLmluc3RhbmNlO1xuICAgICAgaWYgKGluc3RhbmNlLm5neHNBZnRlckJvb3RzdHJhcCkge1xuICAgICAgICBpbnN0YW5jZS5uZ3hzQWZ0ZXJCb290c3RyYXAodGhpcy5fZ2V0U3RhdGVDb250ZXh0KG1hcHBlZFN0b3JlKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U3RhdGVDb250ZXh0KG1hcHBlZFN0b3JlOiBNYXBwZWRTdG9yZSk6IFN0YXRlQ29udGV4dDxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGVDb250ZXh0RmFjdG9yeS5jcmVhdGVTdGF0ZUNvbnRleHQobWFwcGVkU3RvcmUucGF0aCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,20 +0,0 @@
1
- import { makeEnvironmentProviders } from '@angular/core';
2
- import { ɵNGXS_STATE_CONTEXT_FACTORY, ɵNGXS_STATE_FACTORY } from '@ngxs/store/internals';
3
- import { StateFactory } from './state-factory';
4
- import { StateContextFactory } from './state-context-factory';
5
- // Backward compatibility is provided because these tokens are used by third-party
6
- // libraries. We expose a separate function to allow tree-shaking of these tokens
7
- // if they are not used in standard applications that do not rely on them.
8
- export function ɵprovideNgxsInternalStateTokens() {
9
- return makeEnvironmentProviders([
10
- {
11
- provide: ɵNGXS_STATE_CONTEXT_FACTORY,
12
- useExisting: StateContextFactory
13
- },
14
- {
15
- provide: ɵNGXS_STATE_FACTORY,
16
- useExisting: StateFactory
17
- }
18
- ]);
19
- }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1pbnRlcm5hbC10b2tlbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvaW50ZXJuYWwvcHJvdmlkZS1pbnRlcm5hbC10b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxrRkFBa0Y7QUFDbEYsaUZBQWlGO0FBQ2pGLDBFQUEwRTtBQUMxRSxNQUFNLFVBQVUsK0JBQStCO0lBQzdDLE9BQU8sd0JBQXdCLENBQUM7UUFDOUI7WUFDRSxPQUFPLEVBQUUsMkJBQTJCO1lBQ3BDLFdBQVcsRUFBRSxtQkFBbUI7U0FDakM7UUFDRDtZQUNFLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsV0FBVyxFQUFFLFlBQVk7U0FDMUI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyDJtU5HWFNfU1RBVEVfQ09OVEVYVF9GQUNUT1JZLCDJtU5HWFNfU1RBVEVfRkFDVE9SWSB9IGZyb20gJ0BuZ3hzL3N0b3JlL2ludGVybmFscyc7XG5cbmltcG9ydCB7IFN0YXRlRmFjdG9yeSB9IGZyb20gJy4vc3RhdGUtZmFjdG9yeSc7XG5pbXBvcnQgeyBTdGF0ZUNvbnRleHRGYWN0b3J5IH0gZnJvbSAnLi9zdGF0ZS1jb250ZXh0LWZhY3RvcnknO1xuXG4vLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzIHByb3ZpZGVkIGJlY2F1c2UgdGhlc2UgdG9rZW5zIGFyZSB1c2VkIGJ5IHRoaXJkLXBhcnR5XG4vLyBsaWJyYXJpZXMuIFdlIGV4cG9zZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGFsbG93IHRyZWUtc2hha2luZyBvZiB0aGVzZSB0b2tlbnNcbi8vIGlmIHRoZXkgYXJlIG5vdCB1c2VkIGluIHN0YW5kYXJkIGFwcGxpY2F0aW9ucyB0aGF0IGRvIG5vdCByZWx5IG9uIHRoZW0uXG5leHBvcnQgZnVuY3Rpb24gybVwcm92aWRlTmd4c0ludGVybmFsU3RhdGVUb2tlbnMoKSB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IMm1TkdYU19TVEFURV9DT05URVhUX0ZBQ1RPUlksXG4gICAgICB1c2VFeGlzdGluZzogU3RhdGVDb250ZXh0RmFjdG9yeVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogybVOR1hTX1NUQVRFX0ZBQ1RPUlksXG4gICAgICB1c2VFeGlzdGluZzogU3RhdGVGYWN0b3J5XG4gICAgfVxuICBdKTtcbn1cbiJdfQ==
@@ -1,70 +0,0 @@
1
- import { inject, Injectable } from '@angular/core';
2
- import { getValue, setValue } from '@ngxs/store/plugins';
3
- import { isStateOperator } from '@ngxs/store/operators';
4
- import { InternalStateOperations } from '../internal/state-operations';
5
- import { simplePatch } from './state-operators';
6
- import * as i0 from "@angular/core";
7
- /**
8
- * State Context factory class
9
- * @ignore
10
- */
11
- export class StateContextFactory {
12
- constructor() {
13
- this._internalStateOperations = inject(InternalStateOperations);
14
- }
15
- /**
16
- * Create the state context
17
- */
18
- createStateContext(path) {
19
- const root = this._internalStateOperations.getRootStateOperations();
20
- return {
21
- getState() {
22
- const currentAppState = root.getState();
23
- return getState(currentAppState, path);
24
- },
25
- patchState(val) {
26
- const currentAppState = root.getState();
27
- const patchOperator = simplePatch(val);
28
- setStateFromOperator(root, currentAppState, patchOperator, path);
29
- },
30
- setState(val) {
31
- const currentAppState = root.getState();
32
- if (isStateOperator(val)) {
33
- setStateFromOperator(root, currentAppState, val, path);
34
- }
35
- else {
36
- setStateValue(root, currentAppState, val, path);
37
- }
38
- },
39
- dispatch(actions) {
40
- return root.dispatch(actions);
41
- }
42
- };
43
- }
44
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateContextFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
45
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateContextFactory, providedIn: 'root' }); }
46
- }
47
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateContextFactory, decorators: [{
48
- type: Injectable,
49
- args: [{ providedIn: 'root' }]
50
- }] });
51
- function setStateValue(root, currentAppState, newValue, path) {
52
- const newAppState = setValue(currentAppState, path, newValue);
53
- root.setState(newAppState);
54
- return newAppState;
55
- // In doing this refactoring I noticed that there is a 'bug' where the
56
- // application state is returned instead of this state slice.
57
- // This has worked this way since the beginning see:
58
- // https://github.com/ngxs/store/blame/324c667b4b7debd8eb979006c67ca0ae347d88cd/src/state-factory.ts
59
- // This needs to be fixed, but is a 'breaking' change.
60
- // I will do this fix in a subsequent PR and we can decide how to handle it.
61
- }
62
- function setStateFromOperator(root, currentAppState, stateOperator, path) {
63
- const local = getState(currentAppState, path);
64
- const newValue = stateOperator(local);
65
- return setStateValue(root, currentAppState, newValue, path);
66
- }
67
- function getState(currentAppState, path) {
68
- return getValue(currentAppState, path);
69
- }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtY29udGV4dC1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3RvcmUvc3JjL2ludGVybmFsL3N0YXRlLWNvbnRleHQtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBZ0MsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLdEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUVoRDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRVUsNkJBQXdCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7S0ErQnBFO0lBN0JDOztPQUVHO0lBQ0gsa0JBQWtCLENBQUksSUFBWTtRQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUVwRSxPQUFPO1lBQ0wsUUFBUTtnQkFDTixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsVUFBVSxDQUFDLEdBQWU7Z0JBQ3hCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFJLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBQ0QsUUFBUSxDQUFDLEdBQXlCO2dCQUNoQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLG9CQUFvQixDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sYUFBYSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO1lBQ0gsQ0FBQztZQUNELFFBQVEsQ0FBQyxPQUFvQjtnQkFDM0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztpSUEvQlUsbUJBQW1CO3FJQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7QUFtQ2xDLFNBQVMsYUFBYSxDQUNwQixJQUEwQixFQUMxQixlQUFvQixFQUNwQixRQUFXLEVBQ1gsSUFBWTtJQUVaLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0IsT0FBTyxXQUFXLENBQUM7SUFDbkIsc0VBQXNFO0lBQ3RFLDZEQUE2RDtJQUM3RCxvREFBb0Q7SUFDcEQsb0dBQW9HO0lBQ3BHLHNEQUFzRDtJQUN0RCw0RUFBNEU7QUFDOUUsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLElBQTBCLEVBQzFCLGVBQW9CLEVBQ3BCLGFBQStCLEVBQy9CLElBQVk7SUFFWixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxLQUF5QixDQUFDLENBQUM7SUFDMUQsT0FBTyxhQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFJLGVBQW9CLEVBQUUsSUFBWTtJQUNyRCxPQUFPLFFBQVEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0VmFsdWUsIHNldFZhbHVlIH0gZnJvbSAnQG5neHMvc3RvcmUvcGx1Z2lucyc7XG5pbXBvcnQgeyBFeGlzdGluZ1N0YXRlLCBTdGF0ZU9wZXJhdG9yLCBpc1N0YXRlT3BlcmF0b3IgfSBmcm9tICdAbmd4cy9zdG9yZS9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTdGF0ZUNvbnRleHQgfSBmcm9tICcuLi9zeW1ib2xzJztcbmltcG9ydCB7IFN0YXRlT3BlcmF0aW9ucyB9IGZyb20gJy4uL2ludGVybmFsL2ludGVybmFscyc7XG5pbXBvcnQgeyBJbnRlcm5hbFN0YXRlT3BlcmF0aW9ucyB9IGZyb20gJy4uL2ludGVybmFsL3N0YXRlLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHsgc2ltcGxlUGF0Y2ggfSBmcm9tICcuL3N0YXRlLW9wZXJhdG9ycyc7XG5cbi8qKlxuICogU3RhdGUgQ29udGV4dCBmYWN0b3J5IGNsYXNzXG4gKiBAaWdub3JlXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3RhdGVDb250ZXh0RmFjdG9yeSB7XG4gIHByaXZhdGUgX2ludGVybmFsU3RhdGVPcGVyYXRpb25zID0gaW5qZWN0KEludGVybmFsU3RhdGVPcGVyYXRpb25zKTtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBzdGF0ZSBjb250ZXh0XG4gICAqL1xuICBjcmVhdGVTdGF0ZUNvbnRleHQ8VD4ocGF0aDogc3RyaW5nKTogU3RhdGVDb250ZXh0PFQ+IHtcbiAgICBjb25zdCByb290ID0gdGhpcy5faW50ZXJuYWxTdGF0ZU9wZXJhdGlvbnMuZ2V0Um9vdFN0YXRlT3BlcmF0aW9ucygpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldFN0YXRlKCk6IFQge1xuICAgICAgICBjb25zdCBjdXJyZW50QXBwU3RhdGUgPSByb290LmdldFN0YXRlKCk7XG4gICAgICAgIHJldHVybiBnZXRTdGF0ZShjdXJyZW50QXBwU3RhdGUsIHBhdGgpO1xuICAgICAgfSxcbiAgICAgIHBhdGNoU3RhdGUodmFsOiBQYXJ0aWFsPFQ+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBcHBTdGF0ZSA9IHJvb3QuZ2V0U3RhdGUoKTtcbiAgICAgICAgY29uc3QgcGF0Y2hPcGVyYXRvciA9IHNpbXBsZVBhdGNoPFQ+KHZhbCk7XG4gICAgICAgIHNldFN0YXRlRnJvbU9wZXJhdG9yKHJvb3QsIGN1cnJlbnRBcHBTdGF0ZSwgcGF0Y2hPcGVyYXRvciwgcGF0aCk7XG4gICAgICB9LFxuICAgICAgc2V0U3RhdGUodmFsOiBUIHwgU3RhdGVPcGVyYXRvcjxUPik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50QXBwU3RhdGUgPSByb290LmdldFN0YXRlKCk7XG4gICAgICAgIGlmIChpc1N0YXRlT3BlcmF0b3IodmFsKSkge1xuICAgICAgICAgIHNldFN0YXRlRnJvbU9wZXJhdG9yKHJvb3QsIGN1cnJlbnRBcHBTdGF0ZSwgdmFsLCBwYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRTdGF0ZVZhbHVlKHJvb3QsIGN1cnJlbnRBcHBTdGF0ZSwgdmFsLCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRpc3BhdGNoKGFjdGlvbnM6IGFueSB8IGFueVtdKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiByb290LmRpc3BhdGNoKGFjdGlvbnMpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0U3RhdGVWYWx1ZTxUPihcbiAgcm9vdDogU3RhdGVPcGVyYXRpb25zPGFueT4sXG4gIGN1cnJlbnRBcHBTdGF0ZTogYW55LFxuICBuZXdWYWx1ZTogVCxcbiAgcGF0aDogc3RyaW5nXG4pOiBhbnkge1xuICBjb25zdCBuZXdBcHBTdGF0ZSA9IHNldFZhbHVlKGN1cnJlbnRBcHBTdGF0ZSwgcGF0aCwgbmV3VmFsdWUpO1xuICByb290LnNldFN0YXRlKG5ld0FwcFN0YXRlKTtcbiAgcmV0dXJuIG5ld0FwcFN0YXRlO1xuICAvLyBJbiBkb2luZyB0aGlzIHJlZmFjdG9yaW5nIEkgbm90aWNlZCB0aGF0IHRoZXJlIGlzIGEgJ2J1Zycgd2hlcmUgdGhlXG4gIC8vIGFwcGxpY2F0aW9uIHN0YXRlIGlzIHJldHVybmVkIGluc3RlYWQgb2YgdGhpcyBzdGF0ZSBzbGljZS5cbiAgLy8gVGhpcyBoYXMgd29ya2VkIHRoaXMgd2F5IHNpbmNlIHRoZSBiZWdpbm5pbmcgc2VlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbmd4cy9zdG9yZS9ibGFtZS8zMjRjNjY3YjRiN2RlYmQ4ZWI5NzkwMDZjNjdjYTBhZTM0N2Q4OGNkL3NyYy9zdGF0ZS1mYWN0b3J5LnRzXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQsIGJ1dCBpcyBhICdicmVha2luZycgY2hhbmdlLlxuICAvLyBJIHdpbGwgZG8gdGhpcyBmaXggaW4gYSBzdWJzZXF1ZW50IFBSIGFuZCB3ZSBjYW4gZGVjaWRlIGhvdyB0byBoYW5kbGUgaXQuXG59XG5cbmZ1bmN0aW9uIHNldFN0YXRlRnJvbU9wZXJhdG9yPFQ+KFxuICByb290OiBTdGF0ZU9wZXJhdGlvbnM8YW55PixcbiAgY3VycmVudEFwcFN0YXRlOiBhbnksXG4gIHN0YXRlT3BlcmF0b3I6IFN0YXRlT3BlcmF0b3I8VD4sXG4gIHBhdGg6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGxvY2FsID0gZ2V0U3RhdGUoY3VycmVudEFwcFN0YXRlLCBwYXRoKTtcbiAgY29uc3QgbmV3VmFsdWUgPSBzdGF0ZU9wZXJhdG9yKGxvY2FsIGFzIEV4aXN0aW5nU3RhdGU8VD4pO1xuICByZXR1cm4gc2V0U3RhdGVWYWx1ZShyb290LCBjdXJyZW50QXBwU3RhdGUsIG5ld1ZhbHVlLCBwYXRoKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGU8VD4oY3VycmVudEFwcFN0YXRlOiBhbnksIHBhdGg6IHN0cmluZyk6IFQge1xuICByZXR1cm4gZ2V0VmFsdWUoY3VycmVudEFwcFN0YXRlLCBwYXRoKTtcbn1cbiJdfQ==