@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.
- package/experimental/index.d.ts +6 -5
- package/fesm2022/ngxs-store-experimental.mjs +8 -25
- package/fesm2022/ngxs-store-experimental.mjs.map +1 -1
- package/fesm2022/ngxs-store-internals-testing.mjs +8 -9
- package/fesm2022/ngxs-store-internals-testing.mjs.map +1 -1
- package/fesm2022/ngxs-store-internals.mjs +6 -6
- package/fesm2022/ngxs-store-internals.mjs.map +1 -1
- package/fesm2022/ngxs-store-operators.mjs.map +1 -1
- package/fesm2022/ngxs-store-plugins.mjs.map +1 -1
- package/fesm2022/ngxs-store.mjs +101 -72
- package/fesm2022/ngxs-store.mjs.map +1 -1
- package/index.d.ts +11 -1
- package/package.json +2 -14
- package/schematics/src/actions/actions.factory.js +1 -2
- package/schematics/src/actions/actions.factory.js.map +1 -1
- package/schematics/src/ng-add/add-declaration.js +2 -3
- package/schematics/src/ng-add/add-declaration.js.map +1 -1
- package/schematics/src/ng-add/ng-add.factory.js +1 -2
- package/schematics/src/ng-add/ng-add.factory.js.map +1 -1
- package/schematics/src/starter-kit/starter-kit.factory.js +1 -2
- package/schematics/src/starter-kit/starter-kit.factory.js.map +1 -1
- package/schematics/src/state/state.factory.js +1 -2
- package/schematics/src/state/state.factory.js.map +1 -1
- package/schematics/src/store/store.factory.js +1 -2
- package/schematics/src/store/store.factory.js.map +1 -1
- package/schematics/src/utils/common/properties.js +1 -2
- package/schematics/src/utils/common/properties.js.map +1 -1
- package/schematics/src/utils/config.js +2 -3
- package/schematics/src/utils/config.js.map +1 -1
- package/schematics/src/utils/generate-utils.js +1 -2
- package/schematics/src/utils/generate-utils.js.map +1 -1
- package/schematics/src/utils/normalize-options.js +3 -4
- package/schematics/src/utils/normalize-options.js.map +1 -1
- package/schematics/src/utils/project.js +4 -5
- package/schematics/src/utils/project.js.map +1 -1
- package/schematics/src/utils/versions.json +1 -1
- package/esm2022/experimental/index.mjs +0 -2
- package/esm2022/experimental/ngxs-store-experimental.mjs +0 -5
- package/esm2022/experimental/pending-tasks.mjs +0 -30
- package/esm2022/index.mjs +0 -13
- package/esm2022/internals/custom-rxjs-operators.mjs +0 -19
- package/esm2022/internals/custom-rxjs-subjects.mjs +0 -92
- package/esm2022/internals/index.mjs +0 -11
- package/esm2022/internals/initial-state.mjs +0 -17
- package/esm2022/internals/internal-tokens.mjs +0 -5
- package/esm2022/internals/memoize.mjs +0 -43
- package/esm2022/internals/metadata.mjs +0 -57
- package/esm2022/internals/ngxs-app-bootstrapped-state.mjs +0 -19
- package/esm2022/internals/ngxs-store-internals.mjs +0 -5
- package/esm2022/internals/state-stream.mjs +0 -33
- package/esm2022/internals/state-token.mjs +0 -17
- package/esm2022/internals/symbols.mjs +0 -11
- package/esm2022/internals/testing/fresh-platform.mjs +0 -72
- package/esm2022/internals/testing/helpers/ngxs-test.component.mjs +0 -16
- package/esm2022/internals/testing/helpers/ngxs-test.module.mjs +0 -20
- package/esm2022/internals/testing/index.mjs +0 -4
- package/esm2022/internals/testing/ngxs-store-internals-testing.mjs +0 -5
- package/esm2022/internals/testing/ngxs.setup.mjs +0 -49
- package/esm2022/internals/testing/skip-console-logging.mjs +0 -37
- package/esm2022/internals/testing/symbol.mjs +0 -2
- package/esm2022/ngxs-store.mjs +0 -5
- package/esm2022/operators/append.mjs +0 -20
- package/esm2022/operators/compose.mjs +0 -6
- package/esm2022/operators/iif.mjs +0 -38
- package/esm2022/operators/index.mjs +0 -14
- package/esm2022/operators/insert-item.mjs +0 -29
- package/esm2022/operators/ngxs-store-operators.mjs +0 -5
- package/esm2022/operators/patch.mjs +0 -21
- package/esm2022/operators/remove-item.mjs +0 -22
- package/esm2022/operators/types.mjs +0 -2
- package/esm2022/operators/update-item.mjs +0 -40
- package/esm2022/operators/utils.mjs +0 -19
- package/esm2022/plugins/actions.mjs +0 -16
- package/esm2022/plugins/index.mjs +0 -4
- package/esm2022/plugins/ngxs-store-plugins.mjs +0 -5
- package/esm2022/plugins/symbols.mjs +0 -15
- package/esm2022/plugins/utils.mjs +0 -51
- package/esm2022/src/actions/action-registry.mjs +0 -34
- package/esm2022/src/actions/symbols.mjs +0 -2
- package/esm2022/src/actions-stream.mjs +0 -61
- package/esm2022/src/configs/messages.config.mjs +0 -48
- package/esm2022/src/decorators/action.mjs +0 -31
- package/esm2022/src/decorators/select/select-factory.mjs +0 -29
- package/esm2022/src/decorators/select/select.mjs +0 -29
- package/esm2022/src/decorators/select/symbols.mjs +0 -29
- package/esm2022/src/decorators/selector/selector.mjs +0 -29
- package/esm2022/src/decorators/selector/symbols.mjs +0 -2
- package/esm2022/src/decorators/selector-options.mjs +0 -21
- package/esm2022/src/decorators/state.mjs +0 -35
- package/esm2022/src/dev-features/ngxs-development.module.mjs +0 -28
- package/esm2022/src/dev-features/ngxs-unhandled-actions-logger.mjs +0 -43
- package/esm2022/src/dev-features/symbols.mjs +0 -7
- package/esm2022/src/execution/dispatch-outside-zone-ngxs-execution-strategy.mjs +0 -52
- package/esm2022/src/execution/internal-ngxs-execution-strategy.mjs +0 -21
- package/esm2022/src/execution/noop-ngxs-execution-strategy.mjs +0 -17
- package/esm2022/src/execution/symbols.mjs +0 -28
- package/esm2022/src/internal/dispatcher.mjs +0 -125
- package/esm2022/src/internal/fallback-subscriber.mjs +0 -29
- package/esm2022/src/internal/internals.mjs +0 -205
- package/esm2022/src/internal/lifecycle-state-manager.mjs +0 -81
- package/esm2022/src/internal/provide-internal-tokens.mjs +0 -20
- package/esm2022/src/internal/state-context-factory.mjs +0 -70
- package/esm2022/src/internal/state-factory.mjs +0 -311
- package/esm2022/src/internal/state-operations.mjs +0 -60
- package/esm2022/src/internal/state-operators.mjs +0 -20
- package/esm2022/src/internal/unhandled-rxjs-error-callback.mjs +0 -46
- package/esm2022/src/ivy/ivy-enabled-in-dev-mode.mjs +0 -25
- package/esm2022/src/module.mjs +0 -27
- package/esm2022/src/modules/ngxs-feature.module.mjs +0 -18
- package/esm2022/src/modules/ngxs-root.module.mjs +0 -18
- package/esm2022/src/ngxs-unhandled-error-handler.mjs +0 -29
- package/esm2022/src/operators/leave-ngxs.mjs +0 -9
- package/esm2022/src/operators/of-action.mjs +0 -104
- package/esm2022/src/plugin-manager.mjs +0 -34
- package/esm2022/src/plugin_api.mjs +0 -2
- package/esm2022/src/private_api.mjs +0 -5
- package/esm2022/src/public_api.mjs +0 -20
- package/esm2022/src/selectors/create-model-selector.mjs +0 -30
- package/esm2022/src/selectors/create-pick-selector.mjs +0 -16
- package/esm2022/src/selectors/create-property-selectors.mjs +0 -20
- package/esm2022/src/selectors/create-selector.mjs +0 -9
- package/esm2022/src/selectors/index.mjs +0 -6
- package/esm2022/src/selectors/private_api.mjs +0 -2
- package/esm2022/src/selectors/selector-checks.util.mjs +0 -43
- package/esm2022/src/selectors/selector-metadata.mjs +0 -35
- package/esm2022/src/selectors/selector-models.mjs +0 -2
- package/esm2022/src/selectors/selector-types.util.mjs +0 -2
- package/esm2022/src/selectors/selector-utils.mjs +0 -95
- package/esm2022/src/standalone-features/feature-providers.mjs +0 -18
- package/esm2022/src/standalone-features/index.mjs +0 -5
- package/esm2022/src/standalone-features/initializers.mjs +0 -94
- package/esm2022/src/standalone-features/plugin.mjs +0 -33
- package/esm2022/src/standalone-features/preboot.mjs +0 -31
- package/esm2022/src/standalone-features/provide-states.mjs +0 -26
- package/esm2022/src/standalone-features/provide-store.mjs +0 -26
- package/esm2022/src/standalone-features/root-providers.mjs +0 -34
- package/esm2022/src/store.mjs +0 -117
- package/esm2022/src/symbols.mjs +0 -86
- package/esm2022/src/utils/create-dispatch-map.mjs +0 -11
- package/esm2022/src/utils/create-select-map.mjs +0 -13
- package/esm2022/src/utils/dispatch.mjs +0 -7
- package/esm2022/src/utils/freeze.mjs +0 -20
- package/esm2022/src/utils/public_api.mjs +0 -5
- package/esm2022/src/utils/select.mjs +0 -19
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLXN0YXRlLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvaW50ZXJuYWwvbGlmZWN5Y2xlLXN0YXRlLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdELE9BQU8sRUFBaUIsZ0JBQWdCLEVBQWdCLE1BQU0sWUFBWSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUdsRixNQUFNLE9BQU8scUJBQXFCO0lBRGxDO1FBRVUsV0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2Qiw2QkFBd0IsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzRCx5QkFBb0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNuRCwwQkFBcUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUVqRCxjQUFT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a0JBQWtCLEVBQUUsQ0FBQztnQkFDaEMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFdBQXdCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO2lJQXBGVSxxQkFBcUI7cUlBQXJCLHFCQUFxQixjQURSLE1BQU07OzJGQUNuQixxQkFBcUI7a0JBRGpDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IMm1Tmd4c0FwcEJvb3RzdHJhcHBlZFN0YXRlIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcbmltcG9ydCB7IGdldFZhbHVlLCBJbml0U3RhdGUsIFVwZGF0ZVN0YXRlIH0gZnJvbSAnQG5neHMvc3RvcmUvcGx1Z2lucyc7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1lcmdlTWFwLCBwYWlyd2lzZSwgc3RhcnRXaXRoLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICcuLi9zdG9yZSc7XG5pbXBvcnQgeyBTdGF0ZUNvbnRleHRGYWN0b3J5IH0gZnJvbSAnLi9zdGF0ZS1jb250ZXh0LWZhY3RvcnknO1xuaW1wb3J0IHsgSW50ZXJuYWxTdGF0ZU9wZXJhdGlvbnMgfSBmcm9tICcuL3N0YXRlLW9wZXJhdGlvbnMnO1xuaW1wb3J0IHsgTWFwcGVkU3RvcmUsIFN0YXRlc0FuZERlZmF1bHRzIH0gZnJvbSAnLi9pbnRlcm5hbHMnO1xuaW1wb3J0IHsgTmd4c0xpZmVDeWNsZSwgTmd4c1NpbXBsZUNoYW5nZSwgU3RhdGVDb250ZXh0IH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQgeyBnZXRJbnZhbGlkSW5pdGlhbGl6YXRpb25PcmRlck1lc3NhZ2UgfSBmcm9tICcuLi9jb25maWdzL21lc3NhZ2VzLmNvbmZpZyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTGlmZWN5Y2xlU3RhdGVNYW5hZ2VyIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfc3RvcmUgPSBpbmplY3QoU3RvcmUpO1xuICBwcml2YXRlIF9pbnRlcm5hbFN0YXRlT3BlcmF0aW9ucyA9IGluamVjdChJbnRlcm5hbFN0YXRlT3BlcmF0aW9ucyk7XG4gIHByaXZhdGUgX3N0YXRlQ29udGV4dEZhY3RvcnkgPSBpbmplY3QoU3RhdGVDb250ZXh0RmFjdG9yeSk7XG4gIHByaXZhdGUgX2FwcEJvb3RzdHJhcHBlZFN0YXRlID0gaW5qZWN0KMm1Tmd4c0FwcEJvb3RzdHJhcHBlZFN0YXRlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+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==
|