@angular-architects/ngrx-toolkit 0.0.7 → 0.1.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/.eslintrc.json +43 -0
- package/jest.config.ts +22 -0
- package/ng-package.json +7 -0
- package/package.json +3 -16
- package/project.json +37 -0
- package/{index.d.ts → src/index.ts} +3 -2
- package/src/lib/assertions/assertions.ts +9 -0
- package/src/lib/redux-connector/create-redux.ts +94 -0
- package/{lib/redux-connector/index.d.ts → src/lib/redux-connector/index.ts} +1 -0
- package/src/lib/redux-connector/model.ts +67 -0
- package/{lib/redux-connector/rxjs-interop/index.d.ts → src/lib/redux-connector/rxjs-interop/index.ts} +1 -0
- package/src/lib/redux-connector/rxjs-interop/redux-method.ts +61 -0
- package/src/lib/redux-connector/signal-redux-store.ts +54 -0
- package/src/lib/redux-connector/util.ts +22 -0
- package/src/lib/shared/empty.ts +2 -0
- package/src/lib/with-call-state.spec.ts +24 -0
- package/src/lib/with-call-state.ts +136 -0
- package/src/lib/with-data-service.ts +312 -0
- package/src/lib/with-devtools.spec.ts +157 -0
- package/src/lib/with-devtools.ts +128 -0
- package/src/lib/with-redux.spec.ts +100 -0
- package/src/lib/with-redux.ts +261 -0
- package/src/lib/with-storage-sync.spec.ts +237 -0
- package/src/lib/with-storage-sync.ts +160 -0
- package/src/lib/with-undo-redo.ts +184 -0
- package/src/test-setup.ts +8 -0
- package/tsconfig.json +29 -0
- package/tsconfig.lib.json +17 -0
- package/tsconfig.lib.prod.json +9 -0
- package/tsconfig.spec.json +16 -0
- package/esm2022/angular-architects-ngrx-toolkit.mjs +0 -5
- package/esm2022/index.mjs +0 -9
- package/esm2022/lib/assertions/assertions.mjs +0 -6
- package/esm2022/lib/redux-connector/create-redux.mjs +0 -41
- package/esm2022/lib/redux-connector/index.mjs +0 -2
- package/esm2022/lib/redux-connector/model.mjs +0 -2
- package/esm2022/lib/redux-connector/rxjs-interop/index.mjs +0 -2
- package/esm2022/lib/redux-connector/rxjs-interop/redux-method.mjs +0 -22
- package/esm2022/lib/redux-connector/signal-redux-store.mjs +0 -43
- package/esm2022/lib/redux-connector/util.mjs +0 -13
- package/esm2022/lib/shared/empty.mjs +0 -2
- package/esm2022/lib/with-call-state.mjs +0 -58
- package/esm2022/lib/with-data-service.mjs +0 -161
- package/esm2022/lib/with-devtools.mjs +0 -79
- package/esm2022/lib/with-redux.mjs +0 -95
- package/esm2022/lib/with-storage-sync.mjs +0 -56
- package/esm2022/lib/with-undo-redo.mjs +0 -93
- package/fesm2022/angular-architects-ngrx-toolkit.mjs +0 -653
- package/fesm2022/angular-architects-ngrx-toolkit.mjs.map +0 -1
- package/lib/assertions/assertions.d.ts +0 -2
- package/lib/redux-connector/create-redux.d.ts +0 -13
- package/lib/redux-connector/model.d.ts +0 -36
- package/lib/redux-connector/rxjs-interop/redux-method.d.ts +0 -11
- package/lib/redux-connector/signal-redux-store.d.ts +0 -11
- package/lib/redux-connector/util.d.ts +0 -5
- package/lib/shared/empty.d.ts +0 -1
- package/lib/with-call-state.d.ts +0 -56
- package/lib/with-data-service.d.ts +0 -115
- package/lib/with-devtools.d.ts +0 -32
- package/lib/with-redux.d.ts +0 -57
- package/lib/with-storage-sync.d.ts +0 -58
- package/lib/with-undo-redo.d.ts +0 -55
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { computed, inject } from "@angular/core";
|
|
2
|
-
import { patchState, signalStoreFeature, withComputed, withMethods, withState } from "@ngrx/signals";
|
|
3
|
-
import { getCallStateKeys, setError, setLoaded, setLoading } from "./with-call-state";
|
|
4
|
-
import { setAllEntities, addEntity, updateEntity, removeEntity } from "@ngrx/signals/entities";
|
|
5
|
-
export function capitalize(str) {
|
|
6
|
-
return str ? str[0].toUpperCase() + str.substring(1) : str;
|
|
7
|
-
}
|
|
8
|
-
export function getDataServiceKeys(options) {
|
|
9
|
-
const filterKey = options.collection ? `${options.collection}Filter` : 'filter';
|
|
10
|
-
const selectedIdsKey = options.collection ? `selected${capitalize(options.collection)}Ids` : 'selectedIds';
|
|
11
|
-
const selectedEntitiesKey = options.collection ? `selected${capitalize(options.collection)}Entities` : 'selectedEntities';
|
|
12
|
-
const updateFilterKey = options.collection ? `update${capitalize(options.collection)}Filter` : 'updateFilter';
|
|
13
|
-
const updateSelectedKey = options.collection ? `updateSelected${capitalize(options.collection)}Entities` : 'updateSelected';
|
|
14
|
-
const loadKey = options.collection ? `load${capitalize(options.collection)}Entities` : 'load';
|
|
15
|
-
const currentKey = options.collection ? `current${capitalize(options.collection)}` : 'current';
|
|
16
|
-
const loadByIdKey = options.collection ? `load${capitalize(options.collection)}ById` : 'loadById';
|
|
17
|
-
const setCurrentKey = options.collection ? `setCurrent${capitalize(options.collection)}` : 'setCurrent';
|
|
18
|
-
const createKey = options.collection ? `create${capitalize(options.collection)}` : 'create';
|
|
19
|
-
const updateKey = options.collection ? `update${capitalize(options.collection)}` : 'update';
|
|
20
|
-
const updateAllKey = options.collection ? `updateAll${capitalize(options.collection)}` : 'updateAll';
|
|
21
|
-
const deleteKey = options.collection ? `delete${capitalize(options.collection)}` : 'delete';
|
|
22
|
-
// TODO: Take these from @ngrx/signals/entities, when they are exported
|
|
23
|
-
const entitiesKey = options.collection ? `${options.collection}Entities` : 'entities';
|
|
24
|
-
const entityMapKey = options.collection ? `${options.collection}EntityMap` : 'entityMap';
|
|
25
|
-
const idsKey = options.collection ? `${options.collection}Ids` : 'ids';
|
|
26
|
-
return {
|
|
27
|
-
filterKey,
|
|
28
|
-
selectedIdsKey,
|
|
29
|
-
selectedEntitiesKey,
|
|
30
|
-
updateFilterKey,
|
|
31
|
-
updateSelectedKey,
|
|
32
|
-
loadKey,
|
|
33
|
-
entitiesKey,
|
|
34
|
-
entityMapKey,
|
|
35
|
-
idsKey,
|
|
36
|
-
currentKey,
|
|
37
|
-
loadByIdKey,
|
|
38
|
-
setCurrentKey,
|
|
39
|
-
createKey,
|
|
40
|
-
updateKey,
|
|
41
|
-
updateAllKey,
|
|
42
|
-
deleteKey
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
46
|
-
export function withDataService(options) {
|
|
47
|
-
const { dataServiceType, filter, collection: prefix } = options;
|
|
48
|
-
const { entitiesKey, filterKey, loadKey, selectedEntitiesKey, selectedIdsKey, updateFilterKey, updateSelectedKey, currentKey, createKey, updateKey, updateAllKey, deleteKey, loadByIdKey, setCurrentKey } = getDataServiceKeys(options);
|
|
49
|
-
const { callStateKey } = getCallStateKeys({ collection: prefix });
|
|
50
|
-
return signalStoreFeature(withState(() => ({
|
|
51
|
-
[filterKey]: filter,
|
|
52
|
-
[selectedIdsKey]: {},
|
|
53
|
-
[currentKey]: undefined
|
|
54
|
-
})), withComputed((store) => {
|
|
55
|
-
const entities = store[entitiesKey];
|
|
56
|
-
const selectedIds = store[selectedIdsKey];
|
|
57
|
-
return {
|
|
58
|
-
[selectedEntitiesKey]: computed(() => entities().filter(e => selectedIds()[e.id]))
|
|
59
|
-
};
|
|
60
|
-
}), withMethods((store) => {
|
|
61
|
-
const dataService = inject(dataServiceType);
|
|
62
|
-
return {
|
|
63
|
-
[updateFilterKey]: (filter) => {
|
|
64
|
-
patchState(store, { [filterKey]: filter });
|
|
65
|
-
},
|
|
66
|
-
[updateSelectedKey]: (id, selected) => {
|
|
67
|
-
patchState(store, (state) => ({
|
|
68
|
-
[selectedIdsKey]: {
|
|
69
|
-
...state[selectedIdsKey],
|
|
70
|
-
[id]: selected,
|
|
71
|
-
}
|
|
72
|
-
}));
|
|
73
|
-
},
|
|
74
|
-
[loadKey]: async () => {
|
|
75
|
-
const filter = store[filterKey];
|
|
76
|
-
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
77
|
-
try {
|
|
78
|
-
const result = await dataService.load(filter());
|
|
79
|
-
patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));
|
|
80
|
-
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
81
|
-
}
|
|
82
|
-
catch (e) {
|
|
83
|
-
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
84
|
-
throw e;
|
|
85
|
-
}
|
|
86
|
-
},
|
|
87
|
-
[loadByIdKey]: async (id) => {
|
|
88
|
-
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
89
|
-
try {
|
|
90
|
-
const current = await dataService.loadById(id);
|
|
91
|
-
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
92
|
-
patchState(store, { [currentKey]: current });
|
|
93
|
-
}
|
|
94
|
-
catch (e) {
|
|
95
|
-
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
96
|
-
throw e;
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
[setCurrentKey]: (current) => {
|
|
100
|
-
patchState(store, { [currentKey]: current });
|
|
101
|
-
},
|
|
102
|
-
[createKey]: async (entity) => {
|
|
103
|
-
patchState(store, { [currentKey]: entity });
|
|
104
|
-
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
105
|
-
try {
|
|
106
|
-
const created = await dataService.create(entity);
|
|
107
|
-
patchState(store, { [currentKey]: created });
|
|
108
|
-
patchState(store, prefix ? addEntity(created, { collection: prefix }) : addEntity(created));
|
|
109
|
-
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
110
|
-
}
|
|
111
|
-
catch (e) {
|
|
112
|
-
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
113
|
-
throw e;
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
[updateKey]: async (entity) => {
|
|
117
|
-
patchState(store, { [currentKey]: entity });
|
|
118
|
-
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
119
|
-
try {
|
|
120
|
-
const updated = await dataService.update(entity);
|
|
121
|
-
patchState(store, { [currentKey]: updated });
|
|
122
|
-
// Why do we need this cast to Partial<Entity>?
|
|
123
|
-
const updateArg = { id: updated.id, changes: updated };
|
|
124
|
-
patchState(store, prefix ? updateEntity(updateArg, { collection: prefix }) : updateEntity(updateArg));
|
|
125
|
-
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
126
|
-
}
|
|
127
|
-
catch (e) {
|
|
128
|
-
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
129
|
-
throw e;
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
[updateAllKey]: async (entities) => {
|
|
133
|
-
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
134
|
-
try {
|
|
135
|
-
const result = await dataService.updateAll(entities);
|
|
136
|
-
patchState(store, prefix ? setAllEntities(result, { collection: prefix }) : setAllEntities(result));
|
|
137
|
-
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
138
|
-
}
|
|
139
|
-
catch (e) {
|
|
140
|
-
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
141
|
-
throw e;
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
[deleteKey]: async (entity) => {
|
|
145
|
-
patchState(store, { [currentKey]: entity });
|
|
146
|
-
store[callStateKey] && patchState(store, setLoading(prefix));
|
|
147
|
-
try {
|
|
148
|
-
await dataService.delete(entity);
|
|
149
|
-
patchState(store, { [currentKey]: undefined });
|
|
150
|
-
patchState(store, prefix ? removeEntity(entity.id, { collection: prefix }) : removeEntity(entity.id));
|
|
151
|
-
store[callStateKey] && patchState(store, setLoaded(prefix));
|
|
152
|
-
}
|
|
153
|
-
catch (e) {
|
|
154
|
-
store[callStateKey] && patchState(store, setError(e, prefix));
|
|
155
|
-
throw e;
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
};
|
|
159
|
-
}));
|
|
160
|
-
}
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kYXRhLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtZGF0YS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBeUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQXNCLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsY0FBYyxFQUFZLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFpQnpHLE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBVztJQUNsQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQWdDO0lBQy9ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDaEYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUMzRyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENB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LENBQUM7b0JBQzlELE1BQU0sQ0FBQyxDQUFDO2lCQUNYO1lBQ0wsQ0FBQztTQUNKLENBQUM7SUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyVG9rZW4sIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTaWduYWxTdG9yZUZlYXR1cmUsIHBhdGNoU3RhdGUsIHNpZ25hbFN0b3JlRmVhdHVyZSwgd2l0aENvbXB1dGVkLCB3aXRoTWV0aG9kcywgd2l0aFN0YXRlIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHNcIjtcbmltcG9ydCB7IENhbGxTdGF0ZSwgZ2V0Q2FsbFN0YXRlS2V5cywgc2V0RXJyb3IsIHNldExvYWRlZCwgc2V0TG9hZGluZyB9IGZyb20gXCIuL3dpdGgtY2FsbC1zdGF0ZVwiO1xuaW1wb3J0IHsgc2V0QWxsRW50aXRpZXMsIEVudGl0eUlkLCBhZGRFbnRpdHksIHVwZGF0ZUVudGl0eSwgcmVtb3ZlRW50aXR5IH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXNcIjtcbmltcG9ydCB7IEVudGl0eVN0YXRlLCBOYW1lZEVudGl0eVNpZ25hbHMgfSBmcm9tIFwiQG5ncngvc2lnbmFscy9lbnRpdGllcy9zcmMvbW9kZWxzXCI7XG5pbXBvcnQgeyBTdGF0ZVNpZ25hbCB9IGZyb20gXCJAbmdyeC9zaWduYWxzL3NyYy9zdGF0ZS1zaWduYWxcIjtcbmltcG9ydCB7IEVtdHB5IH0gZnJvbSBcIi4vc2hhcmVkL2VtcHR5XCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlciA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuZXhwb3J0IHR5cGUgRW50aXR5ID0geyBpZDogRW50aXR5SWQgfTtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiB7XG4gICAgbG9hZChmaWx0ZXI6IEYpOiBQcm9taXNlPEVbXT47XG4gICAgbG9hZEJ5SWQoaWQ6IEVudGl0eUlkKTogUHJvbWlzZTxFPjtcbiAgICBjcmVhdGUoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcbiAgICB1cGRhdGUoZW50aXR5OiBFKTogUHJvbWlzZTxFPjtcbiAgICB1cGRhdGVBbGwoZW50aXR5OiBFW10pOiBQcm9taXNlPEVbXT47XG4gICAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyID8gc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpIDogc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YVNlcnZpY2VLZXlzKG9wdGlvbnM6IHsgY29sbGVjdGlvbj86IHN0cmluZyB9KSB7XG4gICAgY29uc3QgZmlsdGVyS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUZpbHRlcmAgOiAnZmlsdGVyJztcbiAgICBjb25zdCBzZWxlY3RlZElkc0tleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGBzZWxlY3RlZCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfUlkc2AgOiAnc2VsZWN0ZWRJZHMnO1xuICAgIGNvbnN0IHNlbGVjdGVkRW50aXRpZXNLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgc2VsZWN0ZWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1FbnRpdGllc2AgOiAnc2VsZWN0ZWRFbnRpdGllcyc7XG5cbiAgICBjb25zdCB1cGRhdGVGaWx0ZXJLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgdXBkYXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9RmlsdGVyYCA6ICd1cGRhdGVGaWx0ZXInO1xuICAgIGNvbnN0IHVwZGF0ZVNlbGVjdGVkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZVNlbGVjdGVkJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9RW50aXRpZXNgIDogJ3VwZGF0ZVNlbGVjdGVkJztcbiAgICBjb25zdCBsb2FkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGxvYWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1FbnRpdGllc2AgOiAnbG9hZCc7XG5cbiAgICBjb25zdCBjdXJyZW50S2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGN1cnJlbnQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gIDogJ2N1cnJlbnQnO1xuICAgIGNvbnN0IGxvYWRCeUlkS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYGxvYWQke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1CeUlkYCA6ICdsb2FkQnlJZCc7XG4gICAgY29uc3Qgc2V0Q3VycmVudEtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGBzZXRDdXJyZW50JHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdzZXRDdXJyZW50JztcbiAgICBjb25zdCBjcmVhdGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgY3JlYXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdjcmVhdGUnO1xuICAgIGNvbnN0IHVwZGF0ZUtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGB1cGRhdGUke2NhcGl0YWxpemUob3B0aW9ucy5jb2xsZWN0aW9uKX1gIDogJ3VwZGF0ZSc7XG4gICAgY29uc3QgdXBkYXRlQWxsS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYHVwZGF0ZUFsbCR7Y2FwaXRhbGl6ZShvcHRpb25zLmNvbGxlY3Rpb24pfWAgOiAndXBkYXRlQWxsJztcbiAgICBjb25zdCBkZWxldGVLZXkgPSBvcHRpb25zLmNvbGxlY3Rpb24gPyBgZGVsZXRlJHtjYXBpdGFsaXplKG9wdGlvbnMuY29sbGVjdGlvbil9YCA6ICdkZWxldGUnO1xuXG4gICAgLy8gVE9ETzogVGFrZSB0aGVzZSBmcm9tIEBuZ3J4L3NpZ25hbHMvZW50aXRpZXMsIHdoZW4gdGhleSBhcmUgZXhwb3J0ZWRcbiAgICBjb25zdCBlbnRpdGllc0tleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1FbnRpdGllc2AgOiAnZW50aXRpZXMnO1xuICAgIGNvbnN0IGVudGl0eU1hcEtleSA9IG9wdGlvbnMuY29sbGVjdGlvbiA/IGAke29wdGlvbnMuY29sbGVjdGlvbn1FbnRpdHlNYXBgIDogJ2VudGl0eU1hcCc7XG4gICAgY29uc3QgaWRzS2V5ID0gb3B0aW9ucy5jb2xsZWN0aW9uID8gYCR7b3B0aW9ucy5jb2xsZWN0aW9ufUlkc2AgOiAnaWRzJztcblxuICAgIHJldHVybiB7XG4gICAgICAgIGZpbHRlcktleSxcbiAgICAgICAgc2VsZWN0ZWRJZHNLZXksXG4gICAgICAgIHNlbGVjdGVkRW50aXRpZXNLZXksXG4gICAgICAgIHVwZGF0ZUZpbHRlcktleSxcbiAgICAgICAgdXBkYXRlU2VsZWN0ZWRLZXksXG4gICAgICAgIGxvYWRLZXksXG4gICAgICAgIGVudGl0aWVzS2V5LFxuICAgICAgICBlbnRpdHlNYXBLZXksXG4gICAgICAgIGlkc0tleSxcblxuICAgICAgICBjdXJyZW50S2V5LFxuICAgICAgICBsb2FkQnlJZEtleSxcbiAgICAgICAgc2V0Q3VycmVudEtleSxcbiAgICAgICAgY3JlYXRlS2V5LFxuICAgICAgICB1cGRhdGVLZXksXG4gICAgICAgIHVwZGF0ZUFsbEtleSxcbiAgICAgICAgZGVsZXRlS2V5XG4gICAgfTtcbn1cblxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVN0YXRlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+ID1cbiAgICB7XG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYCR7S31GaWx0ZXJgXTogRjtcbiAgICB9ICYge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBzZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1JZHNgXTogUmVjb3JkPEVudGl0eUlkLCBib29sZWFuPjtcbiAgICB9ICYge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBjdXJyZW50JHtDYXBpdGFsaXplPEs+fWBdOiBFO1xuICAgIH1cblxuZXhwb3J0IHR5cGUgRGF0YVNlcnZpY2VTdGF0ZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPiA9IHtcbiAgICBmaWx0ZXI6IEY7XG4gICAgc2VsZWN0ZWRJZHM6IFJlY29yZDxFbnRpdHlJZCwgYm9vbGVhbj47XG4gICAgY3VycmVudDogRTtcbn1cblxuZXhwb3J0IHR5cGUgTmFtZWREYXRhU2VydmljZVNpZ25hbHM8RSBleHRlbmRzIEVudGl0eSwgQ29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPVxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgc2VsZWN0ZWQke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogU2lnbmFsPEVbXT47XG4gICAgfVxuXG5leHBvcnQgdHlwZSBEYXRhU2VydmljZVNpZ25hbHM8RSBleHRlbmRzIEVudGl0eT4gPVxuICAgIHtcbiAgICAgICAgc2VsZWN0ZWRFbnRpdGllczogU2lnbmFsPEVbXT47XG4gICAgfVxuXG5leHBvcnQgdHlwZSBOYW1lZERhdGFTZXJ2aWNlTWV0aG9kczxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyLCBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPiA9XG4gICAge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGUke0NhcGl0YWxpemU8Sz59RmlsdGVyYF06IChmaWx0ZXI6IEYpID0+IHZvaWQ7XG4gICAgfSAmXG4gICAge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGB1cGRhdGVTZWxlY3RlZCR7Q2FwaXRhbGl6ZTxLPn1FbnRpdGllc2BdOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgICB9ICZcbiAgICB7XG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYGxvYWQke0NhcGl0YWxpemU8Sz59RW50aXRpZXNgXTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICB9ICZcblxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgc2V0Q3VycmVudCR7Q2FwaXRhbGl6ZTxLPn1gXTogKGVudGl0eTogRSkgPT4gdm9pZDtcbiAgICB9ICZcbiAgICB7XG4gICAgICAgIFtLIGluIENvbGxlY3Rpb24gYXMgYGxvYWQke0NhcGl0YWxpemU8Sz59QnlJZGBdOiAoaWQ6IEVudGl0eUlkKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH0gJlxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgY3JlYXRlJHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH0gJlxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgdXBkYXRlJHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAgIH0gJlxuICAgIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgdXBkYXRlQWxsJHtDYXBpdGFsaXplPEs+fWBdOiAoZW50aXR5OiBFW10pID0+IFByb21pc2U8dm9pZD47XG4gICAgfSAmXG4gICAge1xuICAgICAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGBkZWxldGUke0NhcGl0YWxpemU8Sz59YF06IChlbnRpdHk6IEUpID0+IFByb21pc2U8dm9pZD47XG4gICAgfTtcblxuXG5leHBvcnQgdHlwZSBEYXRhU2VydmljZU1ldGhvZHM8RSBleHRlbmRzIEVudGl0eSwgRiBleHRlbmRzIEZpbHRlcj4gPVxuICAgIHtcbiAgICAgICAgdXBkYXRlRmlsdGVyOiAoZmlsdGVyOiBGKSA9PiB2b2lkO1xuICAgICAgICB1cGRhdGVTZWxlY3RlZDogKGlkOiBFbnRpdHlJZCwgc2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgICAgIGxvYWQ6ICgpID0+IFByb21pc2U8dm9pZD47XG5cbiAgICAgICAgc2V0Q3VycmVudChlbnRpdHk6IEUpOiB2b2lkO1xuICAgICAgICBsb2FkQnlJZChpZDogRW50aXR5SWQpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBjcmVhdGUoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgdXBkYXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG4gICAgICAgIHVwZGF0ZUFsbChlbnRpdGllczogRVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgZGVsZXRlKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD47XG4gICAgfVxuXG5leHBvcnQgdHlwZSBFbXB0eSA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPlxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aERhdGFTZXJ2aWNlPEUgZXh0ZW5kcyBFbnRpdHksIEYgZXh0ZW5kcyBGaWx0ZXIsIENvbGxlY3Rpb24gZXh0ZW5kcyBzdHJpbmc+KG9wdGlvbnM6IHsgZGF0YVNlcnZpY2VUeXBlOiBQcm92aWRlclRva2VuPERhdGFTZXJ2aWNlPEUsIEY+PiwgZmlsdGVyOiBGLCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uIH0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gICAge1xuICAgICAgICBzdGF0ZTogRW10cHksXG4gICAgICAgIC8vIFRoZXNlIGFsdGVybmF0aXZlcyBicmVhayB0eXBlIGluZmVyZW5jZTpcbiAgICAgICAgLy8gc3RhdGU6IHsgY2FsbFN0YXRlOiBDYWxsU3RhdGUgfSAmIE5hbWVkRW50aXR5U3RhdGU8RSwgQ29sbGVjdGlvbj4sXG4gICAgICAgIC8vIHN0YXRlOiBOYW1lZEVudGl0eVN0YXRlPEUsIENvbGxlY3Rpb24+LFxuXG4gICAgICAgIHNpZ25hbHM6IE5hbWVkRW50aXR5U2lnbmFsczxFLCBDb2xsZWN0aW9uPixcbiAgICAgICAgbWV0aG9kczogRW10cHksXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHN0YXRlOiBOYW1lZERhdGFTZXJ2aWNlU3RhdGU8RSwgRiwgQ29sbGVjdGlvbj5cbiAgICAgICAgc2lnbmFsczogTmFtZWREYXRhU2VydmljZVNpZ25hbHM8RSwgQ29sbGVjdGlvbj5cbiAgICAgICAgbWV0aG9kczogTmFtZWREYXRhU2VydmljZU1ldGhvZHM8RSwgRiwgQ29sbGVjdGlvbj5cbiAgICB9XG4+O1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyPihvcHRpb25zOiB7IGRhdGFTZXJ2aWNlVHlwZTogUHJvdmlkZXJUb2tlbjxEYXRhU2VydmljZTxFLCBGPj4sIGZpbHRlcjogRiB9KTogU2lnbmFsU3RvcmVGZWF0dXJlPFxuICAgIHtcbiAgICAgICAgc3RhdGU6IHsgY2FsbFN0YXRlOiBDYWxsU3RhdGUgfSAmIEVudGl0eVN0YXRlPEU+XG4gICAgICAgIHNpZ25hbHM6IEVtdHB5LFxuICAgICAgICBtZXRob2RzOiBFbXRweSxcbiAgICB9LFxuICAgIHtcbiAgICAgICAgc3RhdGU6IERhdGFTZXJ2aWNlU3RhdGU8RSwgRj5cbiAgICAgICAgc2lnbmFsczogRGF0YVNlcnZpY2VTaWduYWxzPEU+XG4gICAgICAgIG1ldGhvZHM6IERhdGFTZXJ2aWNlTWV0aG9kczxFLCBGPlxuICAgIH0+O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhEYXRhU2VydmljZTxFIGV4dGVuZHMgRW50aXR5LCBGIGV4dGVuZHMgRmlsdGVyLCBDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPihvcHRpb25zOiB7IGRhdGFTZXJ2aWNlVHlwZTogUHJvdmlkZXJUb2tlbjxEYXRhU2VydmljZTxFLCBGPj4sIGZpbHRlcjogRiwgY29sbGVjdGlvbj86IENvbGxlY3Rpb24gfSk6IFNpZ25hbFN0b3JlRmVhdHVyZTxhbnksIGFueT4ge1xuICAgIGNvbnN0IHsgZGF0YVNlcnZpY2VUeXBlLCBmaWx0ZXIsIGNvbGxlY3Rpb246IHByZWZpeCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7XG4gICAgICAgIGVudGl0aWVzS2V5LFxuICAgICAgICBmaWx0ZXJLZXksXG4gICAgICAgIGxvYWRLZXksXG4gICAgICAgIHNlbGVjdGVkRW50aXRpZXNLZXksXG4gICAgICAgIHNlbGVjdGVkSWRzS2V5LFxuICAgICAgICB1cGRhdGVGaWx0ZXJLZXksXG4gICAgICAgIHVwZGF0ZVNlbGVjdGVkS2V5LFxuXG4gICAgICAgIGN1cnJlbnRLZXksXG4gICAgICAgIGNyZWF0ZUtleSxcbiAgICAgICAgdXBkYXRlS2V5LFxuICAgICAgICB1cGRhdGVBbGxLZXksXG4gICAgICAgIGRlbGV0ZUtleSxcbiAgICAgICAgbG9hZEJ5SWRLZXksXG4gICAgICAgIHNldEN1cnJlbnRLZXlcbiAgICB9ID0gZ2V0RGF0YVNlcnZpY2VLZXlzKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgeyBjYWxsU3RhdGVLZXkgfSA9IGdldENhbGxTdGF0ZUtleXMoeyBjb2xsZWN0aW9uOiBwcmVmaXggfSk7XG5cbiAgICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuICAgICAgICB3aXRoU3RhdGUoKCkgPT4gKHtcbiAgICAgICAgICAgIFtmaWx0ZXJLZXldOiBmaWx0ZXIsXG4gICAgICAgICAgICBbc2VsZWN0ZWRJZHNLZXldOiB7fSBhcyBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+LFxuICAgICAgICAgICAgW2N1cnJlbnRLZXldOiB1bmRlZmluZWQgYXMgRSB8IHVuZGVmaW5lZFxuICAgICAgICB9KSksXG4gICAgICAgIHdpdGhDb21wdXRlZCgoc3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdGllcyA9IHN0b3JlW2VudGl0aWVzS2V5XSBhcyBTaWduYWw8RVtdPjtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gc3RvcmVbc2VsZWN0ZWRJZHNLZXldIGFzIFNpZ25hbDxSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+PjtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWRFbnRpdGllc0tleV06IGNvbXB1dGVkKCgpID0+IGVudGl0aWVzKCkuZmlsdGVyKGUgPT4gc2VsZWN0ZWRJZHMoKVtlLmlkXSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB3aXRoTWV0aG9kcygoc3RvcmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgU3RhdGVTaWduYWw8b2JqZWN0PikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNlcnZpY2UgPSBpbmplY3QoZGF0YVNlcnZpY2VUeXBlKVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbdXBkYXRlRmlsdGVyS2V5XTogKGZpbHRlcjogRik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtmaWx0ZXJLZXldOiBmaWx0ZXIgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU2VsZWN0ZWRLZXldOiAoaWQ6IEVudGl0eUlkLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCAoc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkSWRzS2V5XToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlW3NlbGVjdGVkSWRzS2V5XSBhcyBSZWNvcmQ8RW50aXR5SWQsIGJvb2xlYW4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF06IHNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbbG9hZEtleV06IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gc3RvcmVbZmlsdGVyS2V5XSBhcyBTaWduYWw8Rj47XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YVNlcnZpY2UubG9hZChmaWx0ZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmVmaXggPyBzZXRBbGxFbnRpdGllcyhyZXN1bHQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pIDogc2V0QWxsRW50aXRpZXMocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtsb2FkQnlJZEtleV06IGFzeW5jIChpZDogRW50aXR5SWQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgZGF0YVNlcnZpY2UubG9hZEJ5SWQoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkZWQocHJlZml4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogY3VycmVudCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtzZXRDdXJyZW50S2V5XTogKGN1cnJlbnQ6IEUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGN1cnJlbnQgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbY3JlYXRlS2V5XTogYXN5bmMgKGVudGl0eTogRSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogZW50aXR5IH0pO1xuICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRpbmcocHJlZml4KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBkYXRhU2VydmljZS5jcmVhdGUoZW50aXR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBjcmVhdGVkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcHJlZml4ID8gYWRkRW50aXR5KGNyZWF0ZWQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pIDogYWRkRW50aXR5KGNyZWF0ZWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldEVycm9yKGUsIHByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZUtleV06IGFzeW5jIChlbnRpdHk6IEUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBbY3VycmVudEtleV06IGVudGl0eSB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgZGF0YVNlcnZpY2UudXBkYXRlKGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogdXBkYXRlZCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoeSBkbyB3ZSBuZWVkIHRoaXMgY2FzdCB0byBQYXJ0aWFsPEVudGl0eT4/XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVBcmcgPSB7IGlkOiB1cGRhdGVkLmlkLCBjaGFuZ2VzOiB1cGRhdGVkIGFzIFBhcnRpYWw8RW50aXR5PiB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcHJlZml4ID8gdXBkYXRlRW50aXR5KHVwZGF0ZUFyZywgeyBjb2xsZWN0aW9uOiBwcmVmaXggfSkgOiB1cGRhdGVFbnRpdHkodXBkYXRlQXJnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVBbGxLZXldOiBhc3luYyAoZW50aXRpZXM6IEVbXSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRMb2FkaW5nKHByZWZpeCkpO1xuXG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhU2VydmljZS51cGRhdGVBbGwoZW50aXRpZXMpO1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBwcmVmaXggPyBzZXRBbGxFbnRpdGllcyhyZXN1bHQsIHsgY29sbGVjdGlvbjogcHJlZml4IH0pIDogc2V0QWxsRW50aXRpZXMocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGVkKHByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtkZWxldGVLZXldOiBhc3luYyAoZW50aXR5OiBFKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgW2N1cnJlbnRLZXldOiBlbnRpdHkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlW2NhbGxTdGF0ZUtleV0gJiYgcGF0Y2hTdGF0ZShzdG9yZSwgc2V0TG9hZGluZyhwcmVmaXgpKTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGF0YVNlcnZpY2UuZGVsZXRlKGVudGl0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IFtjdXJyZW50S2V5XTogdW5kZWZpbmVkIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcHJlZml4ID8gcmVtb3ZlRW50aXR5KGVudGl0eS5pZCwgeyBjb2xsZWN0aW9uOiBwcmVmaXggfSkgOiByZW1vdmVFbnRpdHkoZW50aXR5LmlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVtjYWxsU3RhdGVLZXldICYmIHBhdGNoU3RhdGUoc3RvcmUsIHNldExvYWRlZChwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVbY2FsbFN0YXRlS2V5XSAmJiBwYXRjaFN0YXRlKHN0b3JlLCBzZXRFcnJvcihlLCBwcmVmaXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICApO1xufVxuIl19
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { patchState as originalPatchState, } from '@ngrx/signals';
|
|
2
|
-
import { effect, inject, PLATFORM_ID, signal } from '@angular/core';
|
|
3
|
-
import { isPlatformServer } from '@angular/common';
|
|
4
|
-
const storeRegistry = signal({});
|
|
5
|
-
let currentActionNames = new Set();
|
|
6
|
-
let synchronizationInitialized = false;
|
|
7
|
-
function initSynchronization() {
|
|
8
|
-
effect(() => {
|
|
9
|
-
if (!connection) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
const stores = storeRegistry();
|
|
13
|
-
const rootState = {};
|
|
14
|
-
for (const name in stores) {
|
|
15
|
-
const store = stores[name];
|
|
16
|
-
rootState[name] = store();
|
|
17
|
-
}
|
|
18
|
-
const names = Array.from(currentActionNames);
|
|
19
|
-
const type = names.length ? names.join(', ') : 'Store Update';
|
|
20
|
-
currentActionNames = new Set();
|
|
21
|
-
connection.send({ type }, rootState);
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
function getValueFromSymbol(obj, symbol) {
|
|
25
|
-
if (typeof obj === 'object' && obj && symbol in obj) {
|
|
26
|
-
return obj[symbol];
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function getStoreSignal(store) {
|
|
30
|
-
const [signalStateKey] = Object.getOwnPropertySymbols(store);
|
|
31
|
-
if (!signalStateKey) {
|
|
32
|
-
throw new Error('Cannot find State Signal');
|
|
33
|
-
}
|
|
34
|
-
return getValueFromSymbol(store, signalStateKey);
|
|
35
|
-
}
|
|
36
|
-
let connection;
|
|
37
|
-
/**
|
|
38
|
-
* required for testing. is not exported during build
|
|
39
|
-
*/
|
|
40
|
-
export function reset() {
|
|
41
|
-
connection = undefined;
|
|
42
|
-
synchronizationInitialized = false;
|
|
43
|
-
storeRegistry.set({});
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* @param name store's name as it should appear in the DevTools
|
|
47
|
-
*/
|
|
48
|
-
export function withDevtools(name) {
|
|
49
|
-
return (store) => {
|
|
50
|
-
const isServer = isPlatformServer(inject(PLATFORM_ID));
|
|
51
|
-
if (isServer) {
|
|
52
|
-
return store;
|
|
53
|
-
}
|
|
54
|
-
const extensions = window.__REDUX_DEVTOOLS_EXTENSION__;
|
|
55
|
-
if (!extensions) {
|
|
56
|
-
return store;
|
|
57
|
-
}
|
|
58
|
-
if (!connection) {
|
|
59
|
-
connection = extensions.connect({
|
|
60
|
-
name: 'NgRx Signal Store',
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
const storeSignal = getStoreSignal(store);
|
|
64
|
-
storeRegistry.update((value) => ({
|
|
65
|
-
...value,
|
|
66
|
-
[name]: storeSignal,
|
|
67
|
-
}));
|
|
68
|
-
if (!synchronizationInitialized) {
|
|
69
|
-
initSynchronization();
|
|
70
|
-
synchronizationInitialized = true;
|
|
71
|
-
}
|
|
72
|
-
return store;
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
export const patchState = (state, action, ...rest) => {
|
|
76
|
-
currentActionNames.add(action);
|
|
77
|
-
return originalPatchState(state, ...rest);
|
|
78
|
-
};
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kZXZ0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1kZXZ0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxJQUFJLGtCQUFrQixHQUVqQyxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBaUJuRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQWtDLEVBQUUsQ0FBQyxDQUFDO0FBRWxFLElBQUksa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUUzQyxJQUFJLDBCQUEwQixHQUFHLEtBQUssQ0FBQztBQUV2QyxTQUFTLG1CQUFtQjtJQUMxQixNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ1YsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE9BQU87U0FDUjtRQUVELE1BQU0sTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sU0FBUyxHQUE0QixFQUFFLENBQUM7UUFDOUMsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLEVBQUU7WUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztTQUMzQjtRQUVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDOUQsa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUV2QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxHQUFZLEVBQUUsTUFBYztJQUN0RCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRTtRQUNuRCxPQUFRLEdBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDaEQ7QUFDSCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBYztJQUNwQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0tBQzdDO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUtELElBQUksVUFBdUMsQ0FBQztBQUU1Qzs7R0FFRztBQUNILE1BQU0sVUFBVSxLQUFLO0lBQ25CLFVBQVUsR0FBRyxTQUFTLENBQUM7SUFDdkIsMEJBQTBCLEdBQUcsS0FBSyxDQUFDO0lBQ25DLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBWTtJQUVaLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNmLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksUUFBUSxFQUFFO1lBQ1osT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQztRQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDOUIsSUFBSSxFQUFFLG1CQUFtQjthQUMxQixDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLEdBQUcsS0FBSztZQUNSLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVztTQUNwQixDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUMvQixtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLDBCQUEwQixHQUFHLElBQUksQ0FBQztTQUNuQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVNELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtJQUM1RCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBwYXRjaFN0YXRlIGFzIG9yaWdpbmFsUGF0Y2hTdGF0ZSxcbiAgU2lnbmFsU3RvcmVGZWF0dXJlLFxufSBmcm9tICdAbmdyeC9zaWduYWxzJztcbmltcG9ydCB7IFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMvc3JjL3NpZ25hbC1zdG9yZS1tb2RlbHMnO1xuaW1wb3J0IHsgZWZmZWN0LCBpbmplY3QsIFBMQVRGT1JNX0lELCBzaWduYWwsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXzpcbiAgICAgIHwge1xuICAgICAgICAgIGNvbm5lY3Q6IChvcHRpb25zOiB7IG5hbWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICBzZW5kOiAoYWN0aW9uOiBBY3Rpb24sIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgfVxufVxuXG50eXBlIEVtcHR5RmVhdHVyZVJlc3VsdCA9IHsgc3RhdGU6IHt9OyBzaWduYWxzOiB7fTsgbWV0aG9kczoge30gfTtcbmV4cG9ydCB0eXBlIEFjdGlvbiA9IHsgdHlwZTogc3RyaW5nIH07XG5cbmNvbnN0IHN0b3JlUmVnaXN0cnkgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgU2lnbmFsPHVua25vd24+Pj4oe30pO1xuXG5sZXQgY3VycmVudEFjdGlvbk5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmxldCBzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBpbml0U3luY2hyb25pemF0aW9uKCkge1xuICBlZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JlcyA9IHN0b3JlUmVnaXN0cnkoKTtcbiAgICBjb25zdCByb290U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBuYW1lIGluIHN0b3Jlcykge1xuICAgICAgY29uc3Qgc3RvcmUgPSBzdG9yZXNbbmFtZV07XG4gICAgICByb290U3RhdGVbbmFtZV0gPSBzdG9yZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVzID0gQXJyYXkuZnJvbShjdXJyZW50QWN0aW9uTmFtZXMpO1xuICAgIGNvbnN0IHR5cGUgPSBuYW1lcy5sZW5ndGggPyBuYW1lcy5qb2luKCcsICcpIDogJ1N0b3JlIFVwZGF0ZSc7XG4gICAgY3VycmVudEFjdGlvbk5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBjb25uZWN0aW9uLnNlbmQoeyB0eXBlIH0sIHJvb3RTdGF0ZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21TeW1ib2wob2JqOiB1bmtub3duLCBzeW1ib2w6IHN5bWJvbCkge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICYmIHN5bWJvbCBpbiBvYmopIHtcbiAgICByZXR1cm4gKG9iaiBhcyB7IFtrZXk6IHN5bWJvbF06IGFueSB9KVtzeW1ib2xdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFN0b3JlU2lnbmFsKHN0b3JlOiB1bmtub3duKTogU2lnbmFsPHVua25vd24+IHtcbiAgY29uc3QgW3NpZ25hbFN0YXRlS2V5XSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc3RvcmUpO1xuICBpZiAoIXNpZ25hbFN0YXRlS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZmluZCBTdGF0ZSBTaWduYWwnKTtcbiAgfVxuXG4gIHJldHVybiBnZXRWYWx1ZUZyb21TeW1ib2woc3RvcmUsIHNpZ25hbFN0YXRlS2V5KTtcbn1cblxudHlwZSBDb25uZWN0UmVzcG9uc2UgPSB7XG4gIHNlbmQ6IChhY3Rpb246IEFjdGlvbiwgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xufTtcbmxldCBjb25uZWN0aW9uOiBDb25uZWN0UmVzcG9uc2UgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogcmVxdWlyZWQgZm9yIHRlc3RpbmcuIGlzIG5vdCBleHBvcnRlZCBkdXJpbmcgYnVpbGRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0KCkge1xuICBjb25uZWN0aW9uID0gdW5kZWZpbmVkO1xuICBzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCA9IGZhbHNlO1xuICBzdG9yZVJlZ2lzdHJ5LnNldCh7fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIG5hbWUgc3RvcmUncyBuYW1lIGFzIGl0IHNob3VsZCBhcHBlYXIgaW4gdGhlIERldlRvb2xzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRGV2dG9vbHM8SW5wdXQgZXh0ZW5kcyBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQ+KFxuICBuYW1lOiBzdHJpbmdcbik6IFNpZ25hbFN0b3JlRmVhdHVyZTxJbnB1dCwgRW1wdHlGZWF0dXJlUmVzdWx0PiB7XG4gIHJldHVybiAoc3RvcmUpID0+IHtcbiAgICBjb25zdCBpc1NlcnZlciA9IGlzUGxhdGZvcm1TZXJ2ZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSk7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm4gc3RvcmU7XG4gICAgfVxuXG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fO1xuICAgIGlmICghZXh0ZW5zaW9ucykge1xuICAgICAgcmV0dXJuIHN0b3JlO1xuICAgIH1cblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgY29ubmVjdGlvbiA9IGV4dGVuc2lvbnMuY29ubmVjdCh7XG4gICAgICAgIG5hbWU6ICdOZ1J4IFNpZ25hbCBTdG9yZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yZVNpZ25hbCA9IGdldFN0b3JlU2lnbmFsKHN0b3JlKTtcbiAgICBzdG9yZVJlZ2lzdHJ5LnVwZGF0ZSgodmFsdWUpID0+ICh7XG4gICAgICAuLi52YWx1ZSxcbiAgICAgIFtuYW1lXTogc3RvcmVTaWduYWwsXG4gICAgfSkpO1xuXG4gICAgaWYgKCFzeW5jaHJvbml6YXRpb25Jbml0aWFsaXplZCkge1xuICAgICAgaW5pdFN5bmNocm9uaXphdGlvbigpO1xuICAgICAgc3luY2hyb25pemF0aW9uSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9yZTtcbiAgfTtcbn1cblxudHlwZSBQYXRjaEZuID0gdHlwZW9mIG9yaWdpbmFsUGF0Y2hTdGF0ZSBleHRlbmRzIChcbiAgYXJnMTogaW5mZXIgRmlyc3QsXG4gIC4uLmFyZ3M6IGluZmVyIFJlc3RcbikgPT4gaW5mZXIgUmV0dXJuZXJcbiAgPyAoc3RhdGU6IEZpcnN0LCBhY3Rpb246IHN0cmluZywgLi4ucmVzdDogUmVzdCkgPT4gUmV0dXJuZXJcbiAgOiBuZXZlcjtcblxuZXhwb3J0IGNvbnN0IHBhdGNoU3RhdGU6IFBhdGNoRm4gPSAoc3RhdGUsIGFjdGlvbiwgLi4ucmVzdCkgPT4ge1xuICBjdXJyZW50QWN0aW9uTmFtZXMuYWRkKGFjdGlvbik7XG4gIHJldHVybiBvcmlnaW5hbFBhdGNoU3RhdGUoc3RhdGUsIC4uLnJlc3QpO1xufTtcbiJdfQ==
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { Subject } from 'rxjs';
|
|
2
|
-
import { assertActionFnSpecs } from './assertions/assertions';
|
|
3
|
-
export function payload() {
|
|
4
|
-
return {};
|
|
5
|
-
}
|
|
6
|
-
export const noPayload = {};
|
|
7
|
-
function createActionFns(actionFnSpecs, reducerRegistry, effectsRegistry, state) {
|
|
8
|
-
const actionFns = {};
|
|
9
|
-
for (const type in actionFnSpecs) {
|
|
10
|
-
const actionFn = (payload) => {
|
|
11
|
-
const fullPayload = { ...payload, type };
|
|
12
|
-
const reducer = reducerRegistry[type];
|
|
13
|
-
if (reducer) {
|
|
14
|
-
reducer(state, fullPayload);
|
|
15
|
-
}
|
|
16
|
-
const effectSubject = effectsRegistry[type];
|
|
17
|
-
if (effectSubject) {
|
|
18
|
-
effectSubject.next(fullPayload);
|
|
19
|
-
}
|
|
20
|
-
return fullPayload;
|
|
21
|
-
};
|
|
22
|
-
actionFn.type = type.toString();
|
|
23
|
-
actionFns[type] = actionFn;
|
|
24
|
-
}
|
|
25
|
-
return actionFns;
|
|
26
|
-
}
|
|
27
|
-
function createPublicAndAllActionsFns(actionFnSpecs, reducerRegistry, effectsRegistry, state) {
|
|
28
|
-
if ('public' in actionFnSpecs || 'private' in actionFnSpecs) {
|
|
29
|
-
const privates = actionFnSpecs['private'] || {};
|
|
30
|
-
const publics = actionFnSpecs['public'] || {};
|
|
31
|
-
assertActionFnSpecs(privates);
|
|
32
|
-
assertActionFnSpecs(publics);
|
|
33
|
-
const privateActionFns = createActionFns(privates, reducerRegistry, effectsRegistry, state);
|
|
34
|
-
const publicActionFns = createActionFns(publics, reducerRegistry, effectsRegistry, state);
|
|
35
|
-
return {
|
|
36
|
-
all: { ...privateActionFns, ...publicActionFns },
|
|
37
|
-
publics: publicActionFns,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
const actionFns = createActionFns(actionFnSpecs, reducerRegistry, effectsRegistry, state);
|
|
41
|
-
return { all: actionFns, publics: actionFns };
|
|
42
|
-
}
|
|
43
|
-
function fillReducerRegistry(reducer, actionFns, reducerRegistry) {
|
|
44
|
-
function on(action, reducerFn) {
|
|
45
|
-
reducerRegistry[action.type] = reducerFn;
|
|
46
|
-
}
|
|
47
|
-
reducer(actionFns, on);
|
|
48
|
-
return reducerRegistry;
|
|
49
|
-
}
|
|
50
|
-
function fillEffects(effects, actionFns, effectsRegistry = {}) {
|
|
51
|
-
function create(action) {
|
|
52
|
-
const subject = new Subject();
|
|
53
|
-
effectsRegistry[action.type] = subject;
|
|
54
|
-
return subject.asObservable();
|
|
55
|
-
}
|
|
56
|
-
const effectObservables = effects(actionFns, create);
|
|
57
|
-
return Object.values(effectObservables);
|
|
58
|
-
}
|
|
59
|
-
function startSubscriptions(observables) {
|
|
60
|
-
return observables.map((observable) => observable.subscribe());
|
|
61
|
-
}
|
|
62
|
-
function processRedux(actionFnSpecs, reducer, effects, store) {
|
|
63
|
-
const reducerRegistry = {};
|
|
64
|
-
const effectsRegistry = {};
|
|
65
|
-
const actionsMap = createPublicAndAllActionsFns(actionFnSpecs, reducerRegistry, effectsRegistry, store);
|
|
66
|
-
const actionFns = actionsMap.all;
|
|
67
|
-
const publicActionsFns = actionsMap.publics;
|
|
68
|
-
fillReducerRegistry(reducer, actionFns, reducerRegistry);
|
|
69
|
-
const effectObservables = fillEffects(effects, actionFns, effectsRegistry);
|
|
70
|
-
const subscriptions = startSubscriptions(effectObservables);
|
|
71
|
-
return {
|
|
72
|
-
methods: publicActionsFns,
|
|
73
|
-
subscriptions: subscriptions,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* @param redux redux
|
|
78
|
-
*
|
|
79
|
-
* properties do not start with `with` since they are not extension functions on their own.
|
|
80
|
-
*
|
|
81
|
-
* no dependency to NgRx
|
|
82
|
-
*
|
|
83
|
-
* actions are passed to reducer and effects, but it is also possible to use other actions.
|
|
84
|
-
* effects provide forAction and do not return anything. that is important because effects should stay inaccessible
|
|
85
|
-
*/
|
|
86
|
-
export function withRedux(redux) {
|
|
87
|
-
return (store) => {
|
|
88
|
-
const { methods, subscriptions } = processRedux(redux.actions, redux.reducer, redux.effects, store);
|
|
89
|
-
return {
|
|
90
|
-
...store,
|
|
91
|
-
methods,
|
|
92
|
-
};
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZWR1eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10b29sa2l0L3NyYy9saWIvd2l0aC1yZWR1eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBd0M5RCxNQUFNLFVBQVUsT0FBTztJQUNyQixPQUFPLEVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQTBCNUIsU0FBUyxlQUFlLENBQ3RCLGFBQW1CLEVBQ25CLGVBR0MsRUFDRCxlQUFrRSxFQUNsRSxLQUFjO0lBRWQsTUFBTSxTQUFTLEdBQTZCLEVBQUUsQ0FBQztJQUUvQyxLQUFLLE1BQU0sSUFBSSxJQUFJLGFBQWEsRUFBRTtRQUNoQyxNQUFNLFFBQVEsR0FBRyxDQUFDLE9BQWdCLEVBQUUsRUFBRTtZQUNwQyxNQUFNLFdBQVcsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLE9BQU8sRUFBRTtnQkFDVixPQUFzRCxDQUNyRCxLQUFLLEVBQ0wsV0FBc0IsQ0FDdkIsQ0FBQzthQUNIO1lBQ0QsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLElBQUksYUFBYSxFQUFFO2dCQUNoQixhQUE2QyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNsRTtZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUMsQ0FBQztRQUNGLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUM7S0FDNUI7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FDbkMsYUFBbUIsRUFDbkIsZUFHQyxFQUNELGVBQWtFLEVBQ2xFLEtBQWM7SUFFZCxJQUFJLFFBQVEsSUFBSSxhQUFhLElBQUksU0FBUyxJQUFJLGFBQWEsRUFBRTtRQUMzRCxNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFOUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0IsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQ3RDLFFBQVEsRUFDUixlQUFlLEVBQ2YsZUFBZSxFQUNmLEtBQUssQ0FDTixDQUFDO1FBQ0YsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUNyQyxPQUFPLEVBQ1AsZUFBZSxFQUNmLGVBQWUsRUFDZixLQUFLLENBQ04sQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLEVBQUUsRUFBRSxHQUFHLGdCQUFnQixFQUFFLEdBQUcsZUFBZSxFQUFFO1lBQ2hELE9BQU8sRUFBRSxlQUFlO1NBQ3pCLENBQUM7S0FDSDtJQUVELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FDL0IsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsS0FBSyxDQUNOLENBQUM7SUFFRixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQzFCLE9BQTJDLEVBQzNDLFNBQW9CLEVBQ3BCLGVBR0M7SUFFRCxTQUFTLEVBQUUsQ0FDVCxNQUF3QixFQUN4QixTQUFzRTtRQUV0RSxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV2QixPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQ2xCLE9BQWtDLEVBQ2xDLFNBQW9CLEVBQ3BCLGtCQUFxRSxFQUFFO0lBRXZFLFNBQVMsTUFBTSxDQUFDLE1BQXdCO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUE0QixDQUFDO1FBQ3hELGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3ZDLE9BQU8sT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsV0FBa0M7SUFDNUQsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQ25CLGFBQW1CLEVBQ25CLE9BQTJDLEVBQzNDLE9BQWtDLEVBQ2xDLEtBQWM7SUFFZCxNQUFNLGVBQWUsR0FHakIsRUFBRSxDQUFDO0lBQ1AsTUFBTSxlQUFlLEdBQXNELEVBQUUsQ0FBQztJQUM5RSxNQUFNLFVBQVUsR0FBRyw0QkFBNEIsQ0FDN0MsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsS0FBSyxDQUNOLENBQUM7SUFDRixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ2pDLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUU1QyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3pELE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDM0UsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUU1RCxPQUFPO1FBQ0wsT0FBTyxFQUFFLGdCQUE4QjtRQUN2QyxhQUFhLEVBQUUsYUFBYTtLQUM3QixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxTQUFTLENBS3ZCLEtBSUQ7SUFJQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDZixNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLFlBQVksQ0FDN0MsS0FBSyxDQUFDLE9BQU8sRUFDYixLQUFLLENBQUMsT0FBNkMsRUFDbkQsS0FBSyxDQUFDLE9BQW9DLEVBQzFDLEtBQUssQ0FDTixDQUFDO1FBQ0YsT0FBTztZQUNMLEdBQUcsS0FBSztZQUNSLE9BQU87U0FDUixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNpZ25hbFN0b3JlRmVhdHVyZSB9IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHtcbiAgRW1wdHlGZWF0dXJlUmVzdWx0LFxuICBTaWduYWxTdG9yZUZlYXR1cmVSZXN1bHQsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMvc3JjL3NpZ25hbC1zdG9yZS1tb2RlbHMnO1xuaW1wb3J0IHsgU3RhdGVTaWduYWwgfSBmcm9tICdAbmdyeC9zaWduYWxzL3NyYy9zdGF0ZS1zaWduYWwnO1xuaW1wb3J0IHsgYXNzZXJ0QWN0aW9uRm5TcGVjcyB9IGZyb20gJy4vYXNzZXJ0aW9ucy9hc3NlcnRpb25zJztcblxuLyoqIEFjdGlvbnMgKiovXG5cbnR5cGUgUGF5bG9hZCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG50eXBlIEFjdGlvbkZuPFxuICBUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBBY3Rpb25QYXlsb2FkIGV4dGVuZHMgUGF5bG9hZCA9IFBheWxvYWRcbj4gPSAoKHBheWxvYWQ6IEFjdGlvblBheWxvYWQpID0+IEFjdGlvblBheWxvYWQgJiB7IHR5cGU6IFR5cGUgfSkgJiB7XG4gIHR5cGU6IFR5cGU7XG59O1xuXG50eXBlIEFjdGlvbkZucyA9IFJlY29yZDxzdHJpbmcsIEFjdGlvbkZuPjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uc0ZuU3BlY3MgPSBSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkPjtcblxudHlwZSBBY3Rpb25GbkNyZWF0b3I8U3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzPiA9IHtcbiAgW0FjdGlvbk5hbWUgaW4ga2V5b2YgU3BlY106ICgoXG4gICAgcGF5bG9hZDogU3BlY1tBY3Rpb25OYW1lXVxuICApID0+IFNwZWNbQWN0aW9uTmFtZV0gJiB7IHR5cGU6IEFjdGlvbk5hbWUgfSkgJiB7IHR5cGU6IEFjdGlvbk5hbWUgJiBzdHJpbmcgfTtcbn07XG5cbnR5cGUgQWN0aW9uRm5QYXlsb2FkPEFjdGlvbj4gPSBBY3Rpb24gZXh0ZW5kcyAocGF5bG9hZDogaW5mZXIgUGF5bG9hZCkgPT4gdm9pZFxuICA/IFBheWxvYWRcbiAgOiBuZXZlcjtcblxudHlwZSBBY3Rpb25GbnNDcmVhdG9yPFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcz4gPSBTcGVjIGV4dGVuZHMge1xuICBwcml2YXRlOiBSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkPjtcbiAgcHVibGljOiBSZWNvcmQ8c3RyaW5nLCBQYXlsb2FkPjtcbn1cbiAgPyBBY3Rpb25GbkNyZWF0b3I8U3BlY1sncHJpdmF0ZSddPiAmIEFjdGlvbkZuQ3JlYXRvcjxTcGVjWydwdWJsaWMnXT5cbiAgOiBBY3Rpb25GbkNyZWF0b3I8U3BlYz47XG5cbnR5cGUgUHVibGljQWN0aW9uRm5zPFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcz4gPSBTcGVjIGV4dGVuZHMge1xuICBwdWJsaWM6IFJlY29yZDxzdHJpbmcsIFBheWxvYWQ+O1xufVxuICA/IEFjdGlvbkZuQ3JlYXRvcjxTcGVjWydwdWJsaWMnXT5cbiAgOiBBY3Rpb25GbkNyZWF0b3I8U3BlYz47XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXlsb2FkPFR5cGUgZXh0ZW5kcyBQYXlsb2FkPigpOiBUeXBlIHtcbiAgcmV0dXJuIHt9IGFzIFR5cGU7XG59XG5cbmV4cG9ydCBjb25zdCBub1BheWxvYWQgPSB7fTtcblxuLyoqIFJlZHVjZXIgKiovXG5cbnR5cGUgUmVkdWNlckZ1bmN0aW9uPFJlZHVjZXJBY3Rpb24sIFN0YXRlPiA9IChcbiAgc3RhdGU6IFN0YXRlLFxuICBhY3Rpb246IEFjdGlvbkZuUGF5bG9hZDxSZWR1Y2VyQWN0aW9uPlxuKSA9PiB2b2lkO1xuXG50eXBlIFJlZHVjZXJGYWN0b3J5PFN0YXRlQWN0aW9uRm5zIGV4dGVuZHMgQWN0aW9uRm5zLCBTdGF0ZT4gPSAoXG4gIGFjdGlvbnM6IFN0YXRlQWN0aW9uRm5zLFxuICBvbjogPFJlZHVjZXJBY3Rpb24gZXh0ZW5kcyB7IHR5cGU6IHN0cmluZyB9PihcbiAgICBhY3Rpb246IFJlZHVjZXJBY3Rpb24sXG4gICAgcmVkdWNlckZuOiBSZWR1Y2VyRnVuY3Rpb248UmVkdWNlckFjdGlvbiwgU3RhdGU+XG4gICkgPT4gdm9pZFxuKSA9PiB2b2lkO1xuXG4vKiogRWZmZWN0ICoqL1xuXG50eXBlIEVmZmVjdHNGYWN0b3J5PFN0YXRlQWN0aW9uRm5zIGV4dGVuZHMgQWN0aW9uRm5zPiA9IChcbiAgYWN0aW9uczogU3RhdGVBY3Rpb25GbnMsXG4gIGNyZWF0ZTogPEVmZmVjdEFjdGlvbiBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+KFxuICAgIGFjdGlvbjogRWZmZWN0QWN0aW9uXG4gICkgPT4gT2JzZXJ2YWJsZTxBY3Rpb25GblBheWxvYWQ8RWZmZWN0QWN0aW9uPj5cbikgPT4gUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTx1bmtub3duPj47XG5cbmZ1bmN0aW9uIGNyZWF0ZUFjdGlvbkZuczxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3M+KFxuICBhY3Rpb25GblNwZWNzOiBTcGVjLFxuICByZWR1Y2VyUmVnaXN0cnk6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgKHN0YXRlOiB1bmtub3duLCBwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4pID0+IHZvaWRcbiAgPixcbiAgZWZmZWN0c1JlZ2lzdHJ5OiBSZWNvcmQ8c3RyaW5nLCBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4+LFxuICBzdGF0ZTogdW5rbm93blxuKSB7XG4gIGNvbnN0IGFjdGlvbkZuczogUmVjb3JkPHN0cmluZywgQWN0aW9uRm4+ID0ge307XG5cbiAgZm9yIChjb25zdCB0eXBlIGluIGFjdGlvbkZuU3BlY3MpIHtcbiAgICBjb25zdCBhY3Rpb25GbiA9IChwYXlsb2FkOiBQYXlsb2FkKSA9PiB7XG4gICAgICBjb25zdCBmdWxsUGF5bG9hZCA9IHsgLi4ucGF5bG9hZCwgdHlwZSB9O1xuICAgICAgY29uc3QgcmVkdWNlciA9IHJlZHVjZXJSZWdpc3RyeVt0eXBlXTtcbiAgICAgIGlmIChyZWR1Y2VyKSB7XG4gICAgICAgIChyZWR1Y2VyIGFzIChzdGF0ZTogdW5rbm93biwgcGF5bG9hZDogdW5rbm93bikgPT4gdm9pZCkoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgZnVsbFBheWxvYWQgYXMgdW5rbm93blxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgZWZmZWN0U3ViamVjdCA9IGVmZmVjdHNSZWdpc3RyeVt0eXBlXTtcbiAgICAgIGlmIChlZmZlY3RTdWJqZWN0KSB7XG4gICAgICAgIChlZmZlY3RTdWJqZWN0IGFzIHVua25vd24gYXMgU3ViamVjdDx1bmtub3duPikubmV4dChmdWxsUGF5bG9hZCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVsbFBheWxvYWQ7XG4gICAgfTtcbiAgICBhY3Rpb25Gbi50eXBlID0gdHlwZS50b1N0cmluZygpO1xuICAgIGFjdGlvbkZuc1t0eXBlXSA9IGFjdGlvbkZuO1xuICB9XG5cbiAgcmV0dXJuIGFjdGlvbkZucztcbn1cblxuZnVuY3Rpb24gY3JlYXRlUHVibGljQW5kQWxsQWN0aW9uc0ZuczxTcGVjIGV4dGVuZHMgQWN0aW9uc0ZuU3BlY3M+KFxuICBhY3Rpb25GblNwZWNzOiBTcGVjLFxuICByZWR1Y2VyUmVnaXN0cnk6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgKHN0YXRlOiB1bmtub3duLCBwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4pID0+IHZvaWRcbiAgPixcbiAgZWZmZWN0c1JlZ2lzdHJ5OiBSZWNvcmQ8c3RyaW5nLCBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4+LFxuICBzdGF0ZTogdW5rbm93blxuKTogeyBhbGw6IEFjdGlvbkZuczsgcHVibGljczogQWN0aW9uRm5zIH0ge1xuICBpZiAoJ3B1YmxpYycgaW4gYWN0aW9uRm5TcGVjcyB8fCAncHJpdmF0ZScgaW4gYWN0aW9uRm5TcGVjcykge1xuICAgIGNvbnN0IHByaXZhdGVzID0gYWN0aW9uRm5TcGVjc1sncHJpdmF0ZSddIHx8IHt9O1xuICAgIGNvbnN0IHB1YmxpY3MgPSBhY3Rpb25GblNwZWNzWydwdWJsaWMnXSB8fCB7fTtcblxuICAgIGFzc2VydEFjdGlvbkZuU3BlY3MocHJpdmF0ZXMpO1xuICAgIGFzc2VydEFjdGlvbkZuU3BlY3MocHVibGljcyk7XG5cbiAgICBjb25zdCBwcml2YXRlQWN0aW9uRm5zID0gY3JlYXRlQWN0aW9uRm5zKFxuICAgICAgcHJpdmF0ZXMsXG4gICAgICByZWR1Y2VyUmVnaXN0cnksXG4gICAgICBlZmZlY3RzUmVnaXN0cnksXG4gICAgICBzdGF0ZVxuICAgICk7XG4gICAgY29uc3QgcHVibGljQWN0aW9uRm5zID0gY3JlYXRlQWN0aW9uRm5zKFxuICAgICAgcHVibGljcyxcbiAgICAgIHJlZHVjZXJSZWdpc3RyeSxcbiAgICAgIGVmZmVjdHNSZWdpc3RyeSxcbiAgICAgIHN0YXRlXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhbGw6IHsgLi4ucHJpdmF0ZUFjdGlvbkZucywgLi4ucHVibGljQWN0aW9uRm5zIH0sXG4gICAgICBwdWJsaWNzOiBwdWJsaWNBY3Rpb25GbnMsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGFjdGlvbkZucyA9IGNyZWF0ZUFjdGlvbkZucyhcbiAgICBhY3Rpb25GblNwZWNzLFxuICAgIHJlZHVjZXJSZWdpc3RyeSxcbiAgICBlZmZlY3RzUmVnaXN0cnksXG4gICAgc3RhdGVcbiAgKTtcblxuICByZXR1cm4geyBhbGw6IGFjdGlvbkZucywgcHVibGljczogYWN0aW9uRm5zIH07XG59XG5cbmZ1bmN0aW9uIGZpbGxSZWR1Y2VyUmVnaXN0cnkoXG4gIHJlZHVjZXI6IFJlZHVjZXJGYWN0b3J5PEFjdGlvbkZucywgdW5rbm93bj4sXG4gIGFjdGlvbkZuczogQWN0aW9uRm5zLFxuICByZWR1Y2VyUmVnaXN0cnk6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgKHN0YXRlOiB1bmtub3duLCBwYXlsb2FkOiBBY3Rpb25GblBheWxvYWQ8dW5rbm93bj4pID0+IHZvaWRcbiAgPlxuKSB7XG4gIGZ1bmN0aW9uIG9uKFxuICAgIGFjdGlvbjogeyB0eXBlOiBzdHJpbmcgfSxcbiAgICByZWR1Y2VyRm46IChzdGF0ZTogdW5rbm93biwgcGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+KSA9PiB2b2lkXG4gICkge1xuICAgIHJlZHVjZXJSZWdpc3RyeVthY3Rpb24udHlwZV0gPSByZWR1Y2VyRm47XG4gIH1cblxuICByZWR1Y2VyKGFjdGlvbkZucywgb24pO1xuXG4gIHJldHVybiByZWR1Y2VyUmVnaXN0cnk7XG59XG5cbmZ1bmN0aW9uIGZpbGxFZmZlY3RzKFxuICBlZmZlY3RzOiBFZmZlY3RzRmFjdG9yeTxBY3Rpb25GbnM+LFxuICBhY3Rpb25GbnM6IEFjdGlvbkZucyxcbiAgZWZmZWN0c1JlZ2lzdHJ5OiBSZWNvcmQ8c3RyaW5nLCBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4+ID0ge31cbik6IE9ic2VydmFibGU8dW5rbm93bj5bXSB7XG4gIGZ1bmN0aW9uIGNyZWF0ZShhY3Rpb246IHsgdHlwZTogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8QWN0aW9uRm5QYXlsb2FkPHVua25vd24+PigpO1xuICAgIGVmZmVjdHNSZWdpc3RyeVthY3Rpb24udHlwZV0gPSBzdWJqZWN0O1xuICAgIHJldHVybiBzdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgY29uc3QgZWZmZWN0T2JzZXJ2YWJsZXMgPSBlZmZlY3RzKGFjdGlvbkZucywgY3JlYXRlKTtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZWZmZWN0T2JzZXJ2YWJsZXMpO1xufVxuXG5mdW5jdGlvbiBzdGFydFN1YnNjcmlwdGlvbnMob2JzZXJ2YWJsZXM6IE9ic2VydmFibGU8dW5rbm93bj5bXSkge1xuICByZXR1cm4gb2JzZXJ2YWJsZXMubWFwKChvYnNlcnZhYmxlKSA9PiBvYnNlcnZhYmxlLnN1YnNjcmliZSgpKTtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1JlZHV4PFNwZWMgZXh0ZW5kcyBBY3Rpb25zRm5TcGVjcywgUmV0dXJuVHlwZT4oXG4gIGFjdGlvbkZuU3BlY3M6IFNwZWMsXG4gIHJlZHVjZXI6IFJlZHVjZXJGYWN0b3J5PEFjdGlvbkZucywgdW5rbm93bj4sXG4gIGVmZmVjdHM6IEVmZmVjdHNGYWN0b3J5PEFjdGlvbkZucz4sXG4gIHN0b3JlOiB1bmtub3duXG4pIHtcbiAgY29uc3QgcmVkdWNlclJlZ2lzdHJ5OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIChzdGF0ZTogdW5rbm93biwgcGF5bG9hZDogQWN0aW9uRm5QYXlsb2FkPHVua25vd24+KSA9PiB2b2lkXG4gID4gPSB7fTtcbiAgY29uc3QgZWZmZWN0c1JlZ2lzdHJ5OiBSZWNvcmQ8c3RyaW5nLCBTdWJqZWN0PEFjdGlvbkZuUGF5bG9hZDx1bmtub3duPj4+ID0ge307XG4gIGNvbnN0IGFjdGlvbnNNYXAgPSBjcmVhdGVQdWJsaWNBbmRBbGxBY3Rpb25zRm5zKFxuICAgIGFjdGlvbkZuU3BlY3MsXG4gICAgcmVkdWNlclJlZ2lzdHJ5LFxuICAgIGVmZmVjdHNSZWdpc3RyeSxcbiAgICBzdG9yZVxuICApO1xuICBjb25zdCBhY3Rpb25GbnMgPSBhY3Rpb25zTWFwLmFsbDtcbiAgY29uc3QgcHVibGljQWN0aW9uc0ZucyA9IGFjdGlvbnNNYXAucHVibGljcztcblxuICBmaWxsUmVkdWNlclJlZ2lzdHJ5KHJlZHVjZXIsIGFjdGlvbkZucywgcmVkdWNlclJlZ2lzdHJ5KTtcbiAgY29uc3QgZWZmZWN0T2JzZXJ2YWJsZXMgPSBmaWxsRWZmZWN0cyhlZmZlY3RzLCBhY3Rpb25GbnMsIGVmZmVjdHNSZWdpc3RyeSk7XG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBzdGFydFN1YnNjcmlwdGlvbnMoZWZmZWN0T2JzZXJ2YWJsZXMpO1xuXG4gIHJldHVybiB7XG4gICAgbWV0aG9kczogcHVibGljQWN0aW9uc0ZucyBhcyBSZXR1cm5UeXBlLFxuICAgIHN1YnNjcmlwdGlvbnM6IHN1YnNjcmlwdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHJlZHV4IHJlZHV4XG4gKlxuICogcHJvcGVydGllcyBkbyBub3Qgc3RhcnQgd2l0aCBgd2l0aGAgc2luY2UgdGhleSBhcmUgbm90IGV4dGVuc2lvbiBmdW5jdGlvbnMgb24gdGhlaXIgb3duLlxuICpcbiAqIG5vIGRlcGVuZGVuY3kgdG8gTmdSeFxuICpcbiAqIGFjdGlvbnMgYXJlIHBhc3NlZCB0byByZWR1Y2VyIGFuZCBlZmZlY3RzLCBidXQgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2Ugb3RoZXIgYWN0aW9ucy5cbiAqIGVmZmVjdHMgcHJvdmlkZSBmb3JBY3Rpb24gYW5kIGRvIG5vdCByZXR1cm4gYW55dGhpbmcuIHRoYXQgaXMgaW1wb3J0YW50IGJlY2F1c2UgZWZmZWN0cyBzaG91bGQgc3RheSBpbmFjY2Vzc2libGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZWR1eDxcbiAgU3BlYyBleHRlbmRzIEFjdGlvbnNGblNwZWNzLFxuICBJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZVJlc3VsdCxcbiAgU3RhdGVBY3Rpb25GbnMgZXh0ZW5kcyBBY3Rpb25GbnNDcmVhdG9yPFNwZWM+ID0gQWN0aW9uRm5zQ3JlYXRvcjxTcGVjPixcbiAgUHVibGljU3RvcmVBY3Rpb25GbnMgZXh0ZW5kcyBQdWJsaWNBY3Rpb25GbnM8U3BlYz4gPSBQdWJsaWNBY3Rpb25GbnM8U3BlYz5cbj4ocmVkdXg6IHtcbiAgYWN0aW9uczogU3BlYztcbiAgcmVkdWNlcjogUmVkdWNlckZhY3Rvcnk8U3RhdGVBY3Rpb25GbnMsIFN0YXRlU2lnbmFsPElucHV0WydzdGF0ZSddPj47XG4gIGVmZmVjdHM6IEVmZmVjdHNGYWN0b3J5PFN0YXRlQWN0aW9uRm5zPjtcbn0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gIElucHV0LFxuICBFbXB0eUZlYXR1cmVSZXN1bHQgJiB7IG1ldGhvZHM6IFB1YmxpY1N0b3JlQWN0aW9uRm5zIH1cbj4ge1xuICByZXR1cm4gKHN0b3JlKSA9PiB7XG4gICAgY29uc3QgeyBtZXRob2RzLCBzdWJzY3JpcHRpb25zIH0gPSBwcm9jZXNzUmVkdXg8U3BlYywgUHVibGljU3RvcmVBY3Rpb25GbnM+KFxuICAgICAgcmVkdXguYWN0aW9ucyxcbiAgICAgIHJlZHV4LnJlZHVjZXIgYXMgUmVkdWNlckZhY3Rvcnk8QWN0aW9uRm5zLCB1bmtub3duPixcbiAgICAgIHJlZHV4LmVmZmVjdHMgYXMgRWZmZWN0c0ZhY3Rvcnk8QWN0aW9uRm5zPixcbiAgICAgIHN0b3JlXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RvcmUsXG4gICAgICBtZXRob2RzLFxuICAgIH07XG4gIH07XG59XG4iXX0=
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { isPlatformServer } from '@angular/common';
|
|
2
|
-
import { PLATFORM_ID, effect, inject } from '@angular/core';
|
|
3
|
-
import { getState, patchState, signalStoreFeature, withHooks, withMethods, } from '@ngrx/signals';
|
|
4
|
-
const NOOP = () => { };
|
|
5
|
-
const StorageSyncStub = {
|
|
6
|
-
clearStorage: NOOP,
|
|
7
|
-
readFromStorage: NOOP,
|
|
8
|
-
writeToStorage: NOOP,
|
|
9
|
-
};
|
|
10
|
-
export function withStorageSync(configOrKey) {
|
|
11
|
-
const { key, autoSync = true, select = (state) => state, parse = JSON.parse, stringify = JSON.stringify, storage: storageFactory = () => localStorage, } = typeof configOrKey === 'string' ? { key: configOrKey } : configOrKey;
|
|
12
|
-
return signalStoreFeature(withMethods((store, platformId = inject(PLATFORM_ID)) => {
|
|
13
|
-
if (isPlatformServer(platformId)) {
|
|
14
|
-
console.warn(`'withStorageSync' provides non-functional implementation due to server-side execution`);
|
|
15
|
-
return StorageSyncStub;
|
|
16
|
-
}
|
|
17
|
-
const storage = storageFactory();
|
|
18
|
-
return {
|
|
19
|
-
/**
|
|
20
|
-
* Removes the item stored in storage.
|
|
21
|
-
*/
|
|
22
|
-
clearStorage() {
|
|
23
|
-
storage.removeItem(key);
|
|
24
|
-
},
|
|
25
|
-
/**
|
|
26
|
-
* Reads item from storage and patches the state.
|
|
27
|
-
*/
|
|
28
|
-
readFromStorage() {
|
|
29
|
-
const stateString = storage.getItem(key);
|
|
30
|
-
if (stateString) {
|
|
31
|
-
patchState(store, parse(stateString));
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
/**
|
|
35
|
-
* Writes selected portion to storage.
|
|
36
|
-
*/
|
|
37
|
-
writeToStorage() {
|
|
38
|
-
const slicedState = select(getState(store));
|
|
39
|
-
storage.setItem(key, stringify(slicedState));
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
}), withHooks({
|
|
43
|
-
onInit(store, platformId = inject(PLATFORM_ID)) {
|
|
44
|
-
if (isPlatformServer(platformId)) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (autoSync) {
|
|
48
|
-
store.readFromStorage();
|
|
49
|
-
effect(() => {
|
|
50
|
-
store.writeToStorage();
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
}));
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1zdG9yYWdlLXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtc3RvcmFnZS1zeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBRUwsUUFBUSxFQUNSLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsU0FBUyxFQUNULFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQVV2QixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7QUFZdEIsTUFBTSxlQUFlLEdBR047SUFDYixZQUFZLEVBQUUsSUFBSTtJQUNsQixlQUFlLEVBQUUsSUFBSTtJQUNyQixjQUFjLEVBQUUsSUFBSTtDQUNyQixDQUFDO0FBc0RGLE1BQU0sVUFBVSxlQUFlLENBSTdCLFdBQWdEO0lBRWhELE1BQU0sRUFDSixHQUFHLEVBQ0gsUUFBUSxHQUFHLElBQUksRUFDZixNQUFNLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFDaEMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQ2xCLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUMxQixPQUFPLEVBQUUsY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLFlBQVksR0FDN0MsR0FBRyxPQUFPLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFFekUsT0FBTyxrQkFBa0IsQ0FDdkIsV0FBVyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRTtRQUN0RCxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsdUZBQXVGLENBQ3hGLENBQUM7WUFDRixPQUFPLGVBQWUsQ0FBQztTQUN4QjtRQUVELE1BQU0sT0FBTyxHQUFHLGNBQWMsRUFBRSxDQUFDO1FBRWpDLE9BQU87WUFDTDs7ZUFFRztZQUNILFlBQVk7Z0JBQ1YsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBQ0Q7O2VBRUc7WUFDSCxlQUFlO2dCQUNiLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksV0FBVyxFQUFFO29CQUNmLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO1lBQ0gsQ0FBQztZQUNEOztlQUVHO1lBQ0gsY0FBYztnQkFDWixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBVSxDQUFDLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDO1FBQ1IsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUM1QyxJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNoQyxPQUFPO2FBQ1I7WUFFRCxJQUFJLFFBQVEsRUFBRTtnQkFDWixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBRXhCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7b0JBQ1YsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQztLQUNGLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUExBVEZPUk1fSUQsIGVmZmVjdCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTaWduYWxTdG9yZUZlYXR1cmUsXG4gIGdldFN0YXRlLFxuICBwYXRjaFN0YXRlLFxuICBzaWduYWxTdG9yZUZlYXR1cmUsXG4gIHdpdGhIb29rcyxcbiAgd2l0aE1ldGhvZHMsXG59IGZyb20gJ0BuZ3J4L3NpZ25hbHMnO1xuaW1wb3J0IHsgRW10cHkgfSBmcm9tICcuL3NoYXJlZC9lbXB0eSc7XG5cbnR5cGUgU2lnbmFsU3RvcmVGZWF0dXJlSW5wdXQ8U3RhdGU+ID0gUGljazxcbiAgUGFyYW1ldGVyczxTaWduYWxTdG9yZUZlYXR1cmU+WzBdLFxuICAnc2lnbmFscycgfCAnbWV0aG9kcydcbj4gJiB7XG4gIHN0YXRlOiBTdGF0ZTtcbn07XG5cbmNvbnN0IE5PT1AgPSAoKSA9PiB7fTtcblxudHlwZSBXaXRoU3RvcmFnZVN5bmNGZWF0dXJlUmVzdWx0ID0ge1xuICBzdGF0ZTogRW10cHk7XG4gIHNpZ25hbHM6IEVtdHB5O1xuICBtZXRob2RzOiB7XG4gICAgY2xlYXJTdG9yYWdlKCk6IHZvaWQ7XG4gICAgcmVhZEZyb21TdG9yYWdlKCk6IHZvaWQ7XG4gICAgd3JpdGVUb1N0b3JhZ2UoKTogdm9pZDtcbiAgfTtcbn07XG5cbmNvbnN0IFN0b3JhZ2VTeW5jU3R1YjogUGljazxcbiAgV2l0aFN0b3JhZ2VTeW5jRmVhdHVyZVJlc3VsdCxcbiAgJ21ldGhvZHMnXG4+WydtZXRob2RzJ10gPSB7XG4gIGNsZWFyU3RvcmFnZTogTk9PUCxcbiAgcmVhZEZyb21TdG9yYWdlOiBOT09QLFxuICB3cml0ZVRvU3RvcmFnZTogTk9PUCxcbn07XG5cbmV4cG9ydCB0eXBlIFN5bmNDb25maWc8U3RhdGU+ID0ge1xuICAvKipcbiAgICogVGhlIGtleSB3aGljaCBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgc3RvcmFnZS5cbiAgICovXG4gIGtleTogc3RyaW5nO1xuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBzdG9yZSBzaG91bGQgcmVhZCBmcm9tIHN0b3JhZ2Ugb24gaW5pdCBhbmQgd3JpdGUgdG8gc3RvcmFnZSBvbiBldmVyeSBzdGF0ZSBjaGFuZ2UuXG4gICAqXG4gICAqIGB0cnVlYCBieSBkZWZhdWx0XG4gICAqL1xuICBhdXRvU3luYz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBzZWxlY3QgdGhhdCBwb3J0aW9uIG9mIHRoZSBzdGF0ZSB3aGljaCBzaG91bGQgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSB3aG9sZSBzdGF0ZSBvYmplY3QgYnkgZGVmYXVsdFxuICAgKi9cbiAgc2VsZWN0PzogKHN0YXRlOiBTdGF0ZSkgPT4gUGFydGlhbDxTdGF0ZT47XG4gIC8qKlxuICAgKiBGdW5jdGlvbiB1c2VkIHRvIHBhcnNlIHRoZSBzdGF0ZSBjb21pbmcgZnJvbSBzdG9yYWdlLlxuICAgKlxuICAgKiBgSlNPTi5wYXJzZSgpYCBieSBkZWZhdWx0XG4gICAqL1xuICBwYXJzZT86IChzdGF0ZVN0cmluZzogc3RyaW5nKSA9PiBTdGF0ZTtcbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHVzZWQgdG8gdHJhbmZvcm0gdGhlIHN0YXRlIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gICAqXG4gICAqIGBKU09OLnN0cmluZ2lmeSgpYCBieSBkZWZhdWx0XG4gICAqL1xuICBzdHJpbmdpZnk/OiAoc3RhdGU6IFN0YXRlKSA9PiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGYWN0b3J5IGZ1bmN0aW9uIHVzZWQgdG8gc2VsZWN0IHRoZSBzdG9yYWdlLlxuICAgKlxuICAgKiBgbG9jYWxzdG9yYWdlYCBieSBkZWZhdWx0XG4gICAqL1xuICBzdG9yYWdlPzogKCkgPT4gU3RvcmFnZTtcbn07XG5cbi8qKlxuICogRW5hYmxlcyBzdG9yZSBzeW5jaHJvbml6YXRpb24gd2l0aCBzdG9yYWdlLlxuICpcbiAqIE9ubHkgd29ya3Mgb24gYnJvd3NlciBwbGF0Zm9ybS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTdG9yYWdlU3luYzxcbiAgU3RhdGUgZXh0ZW5kcyBvYmplY3QsXG4gIElucHV0IGV4dGVuZHMgU2lnbmFsU3RvcmVGZWF0dXJlSW5wdXQ8U3RhdGU+XG4+KGtleTogc3RyaW5nKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBXaXRoU3RvcmFnZVN5bmNGZWF0dXJlUmVzdWx0PjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3RvcmFnZVN5bmM8XG4gIFN0YXRlIGV4dGVuZHMgb2JqZWN0LFxuICBJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZUlucHV0PFN0YXRlPlxuPihcbiAgY29uZmlnOiBTeW5jQ29uZmlnPElucHV0WydzdGF0ZSddPlxuKTogU2lnbmFsU3RvcmVGZWF0dXJlPElucHV0LCBXaXRoU3RvcmFnZVN5bmNGZWF0dXJlUmVzdWx0PjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3RvcmFnZVN5bmM8XG4gIFN0YXRlIGV4dGVuZHMgb2JqZWN0LFxuICBJbnB1dCBleHRlbmRzIFNpZ25hbFN0b3JlRmVhdHVyZUlucHV0PFN0YXRlPlxuPihcbiAgY29uZmlnT3JLZXk6IFN5bmNDb25maWc8SW5wdXRbJ3N0YXRlJ10+IHwgc3RyaW5nXG4pOiBTaWduYWxTdG9yZUZlYXR1cmU8SW5wdXQsIFdpdGhTdG9yYWdlU3luY0ZlYXR1cmVSZXN1bHQ+IHtcbiAgY29uc3Qge1xuICAgIGtleSxcbiAgICBhdXRvU3luYyA9IHRydWUsXG4gICAgc2VsZWN0ID0gKHN0YXRlOiBTdGF0ZSkgPT4gc3RhdGUsXG4gICAgcGFyc2UgPSBKU09OLnBhcnNlLFxuICAgIHN0cmluZ2lmeSA9IEpTT04uc3RyaW5naWZ5LFxuICAgIHN0b3JhZ2U6IHN0b3JhZ2VGYWN0b3J5ID0gKCkgPT4gbG9jYWxTdG9yYWdlLFxuICB9ID0gdHlwZW9mIGNvbmZpZ09yS2V5ID09PSAnc3RyaW5nJyA/IHsga2V5OiBjb25maWdPcktleSB9IDogY29uZmlnT3JLZXk7XG5cbiAgcmV0dXJuIHNpZ25hbFN0b3JlRmVhdHVyZShcbiAgICB3aXRoTWV0aG9kcygoc3RvcmUsIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpKSA9PiB7XG4gICAgICBpZiAoaXNQbGF0Zm9ybVNlcnZlcihwbGF0Zm9ybUlkKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYCd3aXRoU3RvcmFnZVN5bmMnIHByb3ZpZGVzIG5vbi1mdW5jdGlvbmFsIGltcGxlbWVudGF0aW9uIGR1ZSB0byBzZXJ2ZXItc2lkZSBleGVjdXRpb25gXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBTdG9yYWdlU3luY1N0dWI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0b3JhZ2UgPSBzdG9yYWdlRmFjdG9yeSgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICogUmVtb3ZlcyB0aGUgaXRlbSBzdG9yZWQgaW4gc3RvcmFnZS5cbiAgICAgICAgICovXG4gICAgICAgIGNsZWFyU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgICBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgfSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlYWRzIGl0ZW0gZnJvbSBzdG9yYWdlIGFuZCBwYXRjaGVzIHRoZSBzdGF0ZS5cbiAgICAgICAgICovXG4gICAgICAgIHJlYWRGcm9tU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZVN0cmluZyA9IHN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgICAgIGlmIChzdGF0ZVN0cmluZykge1xuICAgICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgcGFyc2Uoc3RhdGVTdHJpbmcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXcml0ZXMgc2VsZWN0ZWQgcG9ydGlvbiB0byBzdG9yYWdlLlxuICAgICAgICAgKi9cbiAgICAgICAgd3JpdGVUb1N0b3JhZ2UoKTogdm9pZCB7XG4gICAgICAgICAgY29uc3Qgc2xpY2VkU3RhdGUgPSBzZWxlY3QoZ2V0U3RhdGUoc3RvcmUpIGFzIFN0YXRlKTtcbiAgICAgICAgICBzdG9yYWdlLnNldEl0ZW0oa2V5LCBzdHJpbmdpZnkoc2xpY2VkU3RhdGUpKTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSksXG4gICAgd2l0aEhvb2tzKHtcbiAgICAgIG9uSW5pdChzdG9yZSwgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCkpIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1TZXJ2ZXIocGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXV0b1N5bmMpIHtcbiAgICAgICAgICBzdG9yZS5yZWFkRnJvbVN0b3JhZ2UoKTtcblxuICAgICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBzdG9yZS53cml0ZVRvU3RvcmFnZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pXG4gICk7XG59XG4iXX0=
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { patchState, signalStoreFeature, withComputed, withHooks, withMethods } from "@ngrx/signals";
|
|
2
|
-
import { effect, signal, untracked, isSignal } from "@angular/core";
|
|
3
|
-
import { capitalize } from "./with-data-service";
|
|
4
|
-
const defaultOptions = {
|
|
5
|
-
maxStackSize: 100
|
|
6
|
-
};
|
|
7
|
-
export function getUndoRedoKeys(collections) {
|
|
8
|
-
if (collections) {
|
|
9
|
-
return collections.flatMap(c => [`${c}EntityMap`, `${c}Ids`, `selected${capitalize(c)}Ids`, `${c}Filter`]);
|
|
10
|
-
}
|
|
11
|
-
return ['entityMap', 'ids', 'selectedIds', 'filter'];
|
|
12
|
-
}
|
|
13
|
-
export function withUndoRedo(options = {}) {
|
|
14
|
-
let previous = null;
|
|
15
|
-
let skipOnce = false;
|
|
16
|
-
const normalized = {
|
|
17
|
-
...defaultOptions,
|
|
18
|
-
...options
|
|
19
|
-
};
|
|
20
|
-
//
|
|
21
|
-
// Design Decision: This feature has its own
|
|
22
|
-
// internal state.
|
|
23
|
-
//
|
|
24
|
-
const undoStack = [];
|
|
25
|
-
const redoStack = [];
|
|
26
|
-
const canUndo = signal(false);
|
|
27
|
-
const canRedo = signal(false);
|
|
28
|
-
const updateInternal = () => {
|
|
29
|
-
canUndo.set(undoStack.length !== 0);
|
|
30
|
-
canRedo.set(redoStack.length !== 0);
|
|
31
|
-
};
|
|
32
|
-
const keys = getUndoRedoKeys(normalized?.collections);
|
|
33
|
-
return signalStoreFeature(withComputed(() => ({
|
|
34
|
-
canUndo: canUndo.asReadonly(),
|
|
35
|
-
canRedo: canRedo.asReadonly()
|
|
36
|
-
})), withMethods((store) => ({
|
|
37
|
-
undo() {
|
|
38
|
-
const item = undoStack.pop();
|
|
39
|
-
if (item && previous) {
|
|
40
|
-
redoStack.push(previous);
|
|
41
|
-
}
|
|
42
|
-
if (item) {
|
|
43
|
-
skipOnce = true;
|
|
44
|
-
patchState(store, item);
|
|
45
|
-
previous = item;
|
|
46
|
-
}
|
|
47
|
-
updateInternal();
|
|
48
|
-
},
|
|
49
|
-
redo() {
|
|
50
|
-
const item = redoStack.pop();
|
|
51
|
-
if (item && previous) {
|
|
52
|
-
undoStack.push(previous);
|
|
53
|
-
}
|
|
54
|
-
if (item) {
|
|
55
|
-
skipOnce = true;
|
|
56
|
-
patchState(store, item);
|
|
57
|
-
previous = item;
|
|
58
|
-
}
|
|
59
|
-
updateInternal();
|
|
60
|
-
}
|
|
61
|
-
})), withHooks({
|
|
62
|
-
onInit(store) {
|
|
63
|
-
effect(() => {
|
|
64
|
-
const cand = keys.reduce((acc, key) => {
|
|
65
|
-
const s = store[key];
|
|
66
|
-
if (s && isSignal(s)) {
|
|
67
|
-
return {
|
|
68
|
-
...acc,
|
|
69
|
-
[key]: s()
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
return acc;
|
|
73
|
-
}, {});
|
|
74
|
-
if (skipOnce) {
|
|
75
|
-
skipOnce = false;
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
// Clear redoStack after recorded action
|
|
79
|
-
redoStack.splice(0);
|
|
80
|
-
if (previous) {
|
|
81
|
-
undoStack.push(previous);
|
|
82
|
-
}
|
|
83
|
-
if (redoStack.length > normalized.maxStackSize) {
|
|
84
|
-
undoStack.unshift();
|
|
85
|
-
}
|
|
86
|
-
previous = cand;
|
|
87
|
-
// Don't propogate current reactive context
|
|
88
|
-
untracked(() => updateInternal());
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
}));
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC11bmRvLXJlZG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdG9vbGtpdC9zcmMvbGliL3dpdGgtdW5kby1yZWRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0IsVUFBVSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpILE9BQU8sRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUUsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBVXpELE1BQU0sY0FBYyxHQUE4QjtJQUM5QyxZQUFZLEVBQUUsR0FBRztDQUNwQixDQUFDO0FBWUYsTUFBTSxVQUFVLGVBQWUsQ0FBQyxXQUFzQjtJQUNsRCxJQUFJLFdBQVcsRUFBRTtRQUNiLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7S0FDN0c7SUFDRCxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekQsQ0FBQztBQXdDRCxNQUFNLFVBQVUsWUFBWSxDQUE0QixVQUdwRCxFQUFFO0lBR0YsSUFBSSxRQUFRLEdBQXFCLElBQUksQ0FBQztJQUN0QyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFckIsTUFBTSxVQUFVLEdBQUc7UUFDZixHQUFHLGNBQWM7UUFDakIsR0FBRyxPQUFPO0tBQ2IsQ0FBQztJQUVGLEVBQUU7SUFDRiw0Q0FBNEM7SUFDNUMsa0JBQWtCO0lBQ2xCLEVBQUU7SUFFRixNQUFNLFNBQVMsR0FBZ0IsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sU0FBUyxHQUFnQixFQUFFLENBQUM7SUFFbEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU5QixNQUFNLGNBQWMsR0FBRyxHQUFHLEVBQUU7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUM7SUFFRixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXRELE9BQU8sa0JBQWtCLENBRXJCLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFO1FBQzdCLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFO0tBQ2hDLENBQUMsQ0FBQyxFQUNILFdBQVcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQixJQUFJO1lBQ0EsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRTdCLElBQUksSUFBSSxJQUFJLFFBQVEsRUFBRTtnQkFDbEIsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM1QjtZQUVELElBQUksSUFBSSxFQUFFO2dCQUNOLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ2hCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDbkI7WUFFRCxjQUFjLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQ0QsSUFBSTtZQUNBLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUU3QixJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7Z0JBQ2xCLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDNUI7WUFFRCxJQUFJLElBQUksRUFBRTtnQkFDTixRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNoQixVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN4QixRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQ25CO1lBRUQsY0FBYyxFQUFFLENBQUM7UUFDckIsQ0FBQztLQUNKLENBQUMsQ0FBQyxFQUNILFNBQVMsQ0FBQztRQUNOLE1BQU0sQ0FBQyxLQUE4QjtZQUNqQyxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUVSLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7b0JBQ2xDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDckIsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUNsQixPQUFPOzRCQUNILEdBQUcsR0FBRzs0QkFDTixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTt5QkFDYixDQUFBO3FCQUNKO29CQUNELE9BQU8sR0FBRyxDQUFDO2dCQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFUCxJQUFJLFFBQVEsRUFBRTtvQkFDVixRQUFRLEdBQUcsS0FBSyxDQUFDO29CQUNqQixPQUFPO2lCQUNWO2dCQUVELHdDQUF3QztnQkFDeEMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFcEIsSUFBSSxRQUFRLEVBQUU7b0JBQ1YsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDNUI7Z0JBRUQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxZQUFZLEVBQUU7b0JBQzVDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDdkI7Z0JBRUQsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFFaEIsMkNBQTJDO2dCQUMzQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7S0FDSixDQUFDLENBRUwsQ0FBQTtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWxTdG9yZUZlYXR1cmUsIHBhdGNoU3RhdGUsIHNpZ25hbFN0b3JlRmVhdHVyZSwgd2l0aENvbXB1dGVkLCB3aXRoSG9va3MsIHdpdGhNZXRob2RzIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHNcIjtcbmltcG9ydCB7IEVudGl0eUlkLCBFbnRpdHlNYXAsIEVudGl0eVN0YXRlIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXNcIjtcbmltcG9ydCB7IFNpZ25hbCwgZWZmZWN0LCBzaWduYWwsIHVudHJhY2tlZCwgaXNTaWduYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRW50aXR5U2lnbmFscywgTmFtZWRFbnRpdHlTaWduYWxzIH0gZnJvbSBcIkBuZ3J4L3NpZ25hbHMvZW50aXRpZXMvc3JjL21vZGVsc1wiO1xuaW1wb3J0IHsgRW50aXR5LCBjYXBpdGFsaXplIH0gZnJvbSBcIi4vd2l0aC1kYXRhLXNlcnZpY2VcIjtcbmltcG9ydCB7IEVtdHB5IH0gZnJvbSBcIi4vc2hhcmVkL2VtcHR5XCI7XG5cbmV4cG9ydCB0eXBlIFN0YWNrSXRlbSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBOb3JtYWxpemVkVW5kb1JlZG9PcHRpb25zID0ge1xuICAgIG1heFN0YWNrU2l6ZTogbnVtYmVyO1xuICAgIGNvbGxlY3Rpb25zPzogc3RyaW5nW11cbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5vcm1hbGl6ZWRVbmRvUmVkb09wdGlvbnMgPSB7XG4gICAgbWF4U3RhY2tTaXplOiAxMDBcbn07XG5cbmV4cG9ydCB0eXBlIE5hbWVkVW5kb1JlZG9TdGF0ZTxDb2xsZWN0aW9uIGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgICBbSyBpbiBDb2xsZWN0aW9uIGFzIGAke0t9RW50aXR5TWFwYF06IEVudGl0eU1hcDxFbnRpdHk+O1xufSAmIHtcbiAgICAgICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtLfUlkc2BdOiBFbnRpdHlJZFtdO1xuICAgIH1cblxuZXhwb3J0IHR5cGUgTmFtZWRVbmRvUmVkb1NpZ25hbHM8Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4gPSB7XG4gICAgW0sgaW4gQ29sbGVjdGlvbiBhcyBgJHtLfUVudGl0aWVzYF06IFNpZ25hbDxFbnRpdHlbXT5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuZG9SZWRvS2V5cyhjb2xsZWN0aW9ucz86IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIGlmIChjb2xsZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuZmxhdE1hcChjID0+IFtgJHtjfUVudGl0eU1hcGAsIGAke2N9SWRzYCwgYHNlbGVjdGVkJHtjYXBpdGFsaXplKGMpfUlkc2AsIGAke2N9RmlsdGVyYF0pXG4gICAgfVxuICAgIHJldHVybiBbJ2VudGl0eU1hcCcsICdpZHMnLCAnc2VsZWN0ZWRJZHMnLCAnZmlsdGVyJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVW5kb1JlZG88Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4ob3B0aW9ucz86IHsgbWF4U3RhY2tTaXplPzogbnVtYmVyOyBjb2xsZWN0aW9uczogQ29sbGVjdGlvbltdIH0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gICAge1xuICAgICAgICBzdGF0ZTogRW10cHksXG4gICAgICAgIC8vIFRoaXMgYWx0ZXJuYXRpdmUgYnJlYWtzIHR5cGUgaW5mZXJlbmNlOlxuICAgICAgICAvLyBzdGF0ZTogTmFtZWRFbnRpdHlTdGF0ZTxFbnRpdHksIENvbGxlY3Rpb24+XG4gICAgICAgIHNpZ25hbHM6IE5hbWVkRW50aXR5U2lnbmFsczxFbnRpdHksIENvbGxlY3Rpb24+LFxuICAgICAgICBtZXRob2RzOiBFbXRweVxuICAgIH0sXG4gICAge1xuICAgICAgICBzdGF0ZTogRW10cHksXG4gICAgICAgIHNpZ25hbHM6IHtcbiAgICAgICAgICAgIGNhblVuZG86IFNpZ25hbDxib29sZWFuPixcbiAgICAgICAgICAgIGNhblJlZG86IFNpZ25hbDxib29sZWFuPlxuICAgICAgICB9LFxuICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICB1bmRvOiAoKSA9PiB2b2lkLFxuICAgICAgICAgICAgcmVkbzogKCkgPT4gdm9pZFxuICAgICAgICB9XG4gICAgfT47XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVW5kb1JlZG8ob3B0aW9ucz86IHsgbWF4U3RhY2tTaXplPzogbnVtYmVyIH0pOiBTaWduYWxTdG9yZUZlYXR1cmU8XG4gICAge1xuICAgICAgICBzdGF0ZTogRW50aXR5U3RhdGU8RW50aXR5PixcbiAgICAgICAgc2lnbmFsczogRW50aXR5U2lnbmFsczxFbnRpdHk+LFxuICAgICAgICBtZXRob2RzOiBFbXRweVxuICAgIH0sXG4gICAge1xuICAgICAgICBzdGF0ZTogRW10cHksXG4gICAgICAgIHNpZ25hbHM6IHtcbiAgICAgICAgICAgIGNhblVuZG86IFNpZ25hbDxib29sZWFuPixcbiAgICAgICAgICAgIGNhblJlZG86IFNpZ25hbDxib29sZWFuPlxuICAgICAgICB9LFxuICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICB1bmRvOiAoKSA9PiB2b2lkLFxuICAgICAgICAgICAgcmVkbzogKCkgPT4gdm9pZFxuICAgICAgICB9XG4gICAgfT47XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVW5kb1JlZG88Q29sbGVjdGlvbiBleHRlbmRzIHN0cmluZz4ob3B0aW9uczoge1xuICAgIG1heFN0YWNrU2l6ZT86IG51bWJlcjtcbiAgICBjb2xsZWN0aW9ucz86IENvbGxlY3Rpb25bXVxufSA9IHt9KTogXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuU2lnbmFsU3RvcmVGZWF0dXJlPGFueSwgYW55PiB7XG4gICAgbGV0IHByZXZpb3VzOiBTdGFja0l0ZW0gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgc2tpcE9uY2UgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgfTtcblxuICAgIC8vXG4gICAgLy8gRGVzaWduIERlY2lzaW9uOiBUaGlzIGZlYXR1cmUgaGFzIGl0cyBvd25cbiAgICAvLyBpbnRlcm5hbCBzdGF0ZS5cbiAgICAvL1xuXG4gICAgY29uc3QgdW5kb1N0YWNrOiBTdGFja0l0ZW1bXSA9IFtdO1xuICAgIGNvbnN0IHJlZG9TdGFjazogU3RhY2tJdGVtW10gPSBbXTtcblxuICAgIGNvbnN0IGNhblVuZG8gPSBzaWduYWwoZmFsc2UpO1xuICAgIGNvbnN0IGNhblJlZG8gPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgY29uc3QgdXBkYXRlSW50ZXJuYWwgPSAoKSA9PiB7XG4gICAgICAgIGNhblVuZG8uc2V0KHVuZG9TdGFjay5sZW5ndGggIT09IDApO1xuICAgICAgICBjYW5SZWRvLnNldChyZWRvU3RhY2subGVuZ3RoICE9PSAwKTtcbiAgICB9O1xuXG4gICAgY29uc3Qga2V5cyA9IGdldFVuZG9SZWRvS2V5cyhub3JtYWxpemVkPy5jb2xsZWN0aW9ucyk7XG5cbiAgICByZXR1cm4gc2lnbmFsU3RvcmVGZWF0dXJlKFxuXG4gICAgICAgIHdpdGhDb21wdXRlZCgoKSA9PiAoe1xuICAgICAgICAgICAgY2FuVW5kbzogY2FuVW5kby5hc1JlYWRvbmx5KCksXG4gICAgICAgICAgICBjYW5SZWRvOiBjYW5SZWRvLmFzUmVhZG9ubHkoKVxuICAgICAgICB9KSksXG4gICAgICAgIHdpdGhNZXRob2RzKChzdG9yZSkgPT4gKHtcbiAgICAgICAgICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHVuZG9TdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgIGlmIChpdGVtICYmIHByZXZpb3VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZG9TdGFjay5wdXNoKHByZXZpb3VzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBza2lwT25jZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdXBkYXRlSW50ZXJuYWwoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSByZWRvU3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXRlbSAmJiBwcmV2aW91cykge1xuICAgICAgICAgICAgICAgICAgICB1bmRvU3RhY2sucHVzaChwcmV2aW91cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2tpcE9uY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBpdGVtO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVwZGF0ZUludGVybmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKSxcbiAgICAgICAgd2l0aEhvb2tzKHtcbiAgICAgICAgICAgIG9uSW5pdChzdG9yZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICAgICAgICAgICAgICBlZmZlY3QoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbmQgPSBrZXlzLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBzdG9yZVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgJiYgaXNTaWduYWwocykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZXldOiBzKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBPbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwT25jZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgcmVkb1N0YWNrIGFmdGVyIHJlY29yZGVkIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICByZWRvU3RhY2suc3BsaWNlKDApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5kb1N0YWNrLnB1c2gocHJldmlvdXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZG9TdGFjay5sZW5ndGggPiBub3JtYWxpemVkLm1heFN0YWNrU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5kb1N0YWNrLnVuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzID0gY2FuZDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBwcm9wb2dhdGUgY3VycmVudCByZWFjdGl2ZSBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB1cGRhdGVJbnRlcm5hbCgpKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgKVxufVxuIl19
|