@smartsoft001/crud-shell-angular 1.2.90 → 2.69.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/.storybook/addons.js +1 -0
- package/.storybook/config.js +5 -0
- package/.storybook/tsconfig.json +8 -0
- package/.storybook/webpack.config.js +7 -0
- package/jest.config.ts +38 -0
- package/ng-package.json +7 -0
- package/package.json +12 -23
- package/project.json +49 -0
- package/src/index.ts +13 -0
- package/src/lib/+state/crud.facade.ts +82 -0
- package/src/lib/+state/crud.feature.methods.ts +258 -0
- package/src/lib/+state/crud.feature.store.ts +77 -0
- package/src/lib/components/components.module.ts +58 -0
- package/src/lib/components/export/export.component.ts +69 -0
- package/src/lib/components/filter/base/base.component.ts +175 -0
- package/src/lib/components/filter/check/check.component.scss +25 -0
- package/src/lib/components/filter/check/check.component.ts +72 -0
- package/src/lib/components/filter/date/date.component.html +30 -0
- package/src/lib/components/filter/date/date.component.ts +70 -0
- package/src/lib/components/filter/date-time/date-time.component.html +62 -0
- package/src/lib/components/filter/date-time/date-time.component.ts +56 -0
- package/src/lib/components/filter/date-with-edit/date-with-edit.component.html +109 -0
- package/src/lib/components/filter/date-with-edit/date-with-edit.component.ts +70 -0
- package/src/lib/components/filter/filter.component.html +52 -0
- package/src/lib/components/filter/filter.component.ts +34 -0
- package/src/lib/components/filter/flag/flag.component.ts +55 -0
- package/src/lib/components/filter/index.ts +9 -0
- package/src/lib/components/filter/int/int.component.html +74 -0
- package/src/lib/components/filter/int/int.component.ts +57 -0
- package/src/lib/components/filter/radio/radio.component.ts +74 -0
- package/src/lib/components/filter/text/text.component.ts +46 -0
- package/src/lib/components/filters/filters.component.scss +150 -0
- package/src/lib/components/filters/filters.component.ts +157 -0
- package/src/lib/components/filters-config/filters-config.component.ts +69 -0
- package/src/lib/components/group/group.component.ts +93 -0
- package/src/lib/components/index.ts +7 -0
- package/src/lib/components/multiselect/multiselect.component.html +41 -0
- package/src/lib/components/multiselect/multiselect.component.scss +125 -0
- package/src/lib/components/multiselect/multiselect.component.ts +104 -0
- package/src/lib/crud-full.module.ts +51 -0
- package/src/lib/crud.config.ts +79 -0
- package/src/lib/crud.module.ts +72 -0
- package/src/lib/factories/list-pagination/list-pagination.factory.ts +77 -0
- package/src/lib/models/index.ts +1 -0
- package/src/lib/models/interfaces.ts +34 -0
- package/src/lib/pages/index.ts +6 -0
- package/src/lib/pages/item/base/base.component.ts +54 -0
- package/src/lib/pages/item/item.component.ts +513 -0
- package/src/lib/pages/item/standard/standard.component.scss +0 -0
- package/src/lib/pages/item/standard/standard.component.ts +50 -0
- package/src/lib/pages/list/base/base.component.ts +29 -0
- package/src/lib/pages/list/list.component.stories.ts +77 -0
- package/src/lib/pages/list/list.component.ts +438 -0
- package/src/lib/pages/list/standard/standard.component.ts +42 -0
- package/src/lib/pipes/form-options/form-options.pipe.ts +61 -0
- package/src/lib/pipes/index.ts +2 -0
- package/src/lib/pipes/pipes.module.ts +9 -0
- package/src/lib/providers/model-possibilities/model-possibilities.provider.ts +19 -0
- package/src/lib/services/crud/crud.service.spec.ts +303 -0
- package/src/lib/services/crud/crud.service.ts +178 -0
- package/src/lib/services/list-group/list-group.service.spec.ts +87 -0
- package/src/lib/services/list-group/list-group.service.ts +65 -0
- package/src/lib/services/page/page.service.spec.ts +143 -0
- package/src/lib/services/page/page.service.ts +44 -0
- package/src/lib/services/search/search.service.spec.ts +134 -0
- package/src/lib/services/search/search.service.ts +42 -0
- package/test-setup.ts +0 -0
- package/tsconfig.json +13 -0
- package/tsconfig.lib.json +31 -0
- package/tsconfig.lib.prod.json +11 -0
- package/tsconfig.spec.json +10 -0
- package/tslint.json +10 -0
- package/esm2022/index.mjs +0 -18
- package/esm2022/lib/+state/crud.actions.mjs +0 -224
- package/esm2022/lib/+state/crud.effects.mjs +0 -182
- package/esm2022/lib/+state/crud.facade.mjs +0 -91
- package/esm2022/lib/+state/crud.reducer.mjs +0 -214
- package/esm2022/lib/+state/crud.selectors.mjs +0 -11
- package/esm2022/lib/components/components.module.mjs +0 -110
- package/esm2022/lib/components/export/export.component.mjs +0 -47
- package/esm2022/lib/components/filter/base/base.component.mjs +0 -152
- package/esm2022/lib/components/filter/check/check.component.mjs +0 -36
- package/esm2022/lib/components/filter/date/date.component.mjs +0 -47
- package/esm2022/lib/components/filter/date-time/date-time.component.mjs +0 -43
- package/esm2022/lib/components/filter/date-with-edit/date-with-edit.component.mjs +0 -49
- package/esm2022/lib/components/filter/filter.component.mjs +0 -30
- package/esm2022/lib/components/filter/flag/flag.component.mjs +0 -16
- package/esm2022/lib/components/filter/index.mjs +0 -10
- package/esm2022/lib/components/filter/int/int.component.mjs +0 -38
- package/esm2022/lib/components/filter/radio/radio.component.mjs +0 -16
- package/esm2022/lib/components/filter/text/text.component.mjs +0 -16
- package/esm2022/lib/components/filters/filters.component.mjs +0 -111
- package/esm2022/lib/components/filters-config/filters-config.component.mjs +0 -37
- package/esm2022/lib/components/group/group.component.mjs +0 -54
- package/esm2022/lib/components/index.mjs +0 -8
- package/esm2022/lib/components/multiselect/multiselect.component.mjs +0 -71
- package/esm2022/lib/crud-full.module.mjs +0 -103
- package/esm2022/lib/crud.config.mjs +0 -17
- package/esm2022/lib/crud.module.mjs +0 -106
- package/esm2022/lib/factories/list-pagination/list-pagination.factory.mjs +0 -69
- package/esm2022/lib/models/index.mjs +0 -2
- package/esm2022/lib/models/interfaces.mjs +0 -2
- package/esm2022/lib/pages/index.mjs +0 -7
- package/esm2022/lib/pages/item/base/base.component.mjs +0 -44
- package/esm2022/lib/pages/item/item.component.mjs +0 -395
- package/esm2022/lib/pages/item/standard/standard.component.mjs +0 -15
- package/esm2022/lib/pages/list/base/base.component.mjs +0 -23
- package/esm2022/lib/pages/list/list.component.mjs +0 -355
- package/esm2022/lib/pages/list/standard/standard.component.mjs +0 -34
- package/esm2022/lib/pipes/form-options/form-options.pipe.mjs +0 -55
- package/esm2022/lib/pipes/index.mjs +0 -3
- package/esm2022/lib/pipes/pipes.module.mjs +0 -20
- package/esm2022/lib/providers/model-possibilities/model-possibilities.provider.mjs +0 -11
- package/esm2022/lib/services/crud/crud.service.mjs +0 -138
- package/esm2022/lib/services/list-group/list-group.service.mjs +0 -60
- package/esm2022/lib/services/page/page.service.mjs +0 -41
- package/esm2022/lib/services/search/search.service.mjs +0 -41
- package/esm2022/lib/services/socket/socket.service.mjs +0 -17
- package/esm2022/smartsoft001-crud-shell-angular.mjs +0 -5
- package/fesm2022/smartsoft001-crud-shell-angular.mjs +0 -2810
- package/fesm2022/smartsoft001-crud-shell-angular.mjs.map +0 -1
- package/index.d.ts +0 -18
- package/index.d.ts.map +0 -1
- package/lib/+state/crud.actions.d.ts +0 -152
- package/lib/+state/crud.actions.d.ts.map +0 -1
- package/lib/+state/crud.effects.d.ts +0 -18
- package/lib/+state/crud.effects.d.ts.map +0 -1
- package/lib/+state/crud.facade.d.ts +0 -44
- package/lib/+state/crud.facade.d.ts.map +0 -1
- package/lib/+state/crud.reducer.d.ts +0 -43
- package/lib/+state/crud.reducer.d.ts.map +0 -1
- package/lib/+state/crud.selectors.d.ts +0 -10
- package/lib/+state/crud.selectors.d.ts.map +0 -1
- package/lib/components/components.module.d.ts +0 -27
- package/lib/components/components.module.d.ts.map +0 -1
- package/lib/components/export/export.component.d.ts +0 -21
- package/lib/components/export/export.component.d.ts.map +0 -1
- package/lib/components/filter/base/base.component.d.ts +0 -39
- package/lib/components/filter/base/base.component.d.ts.map +0 -1
- package/lib/components/filter/check/check.component.d.ts +0 -19
- package/lib/components/filter/check/check.component.d.ts.map +0 -1
- package/lib/components/filter/date/date.component.d.ts +0 -16
- package/lib/components/filter/date/date.component.d.ts.map +0 -1
- package/lib/components/filter/date-time/date-time.component.d.ts +0 -15
- package/lib/components/filter/date-time/date-time.component.d.ts.map +0 -1
- package/lib/components/filter/date-with-edit/date-with-edit.component.d.ts +0 -17
- package/lib/components/filter/date-with-edit/date-with-edit.component.d.ts.map +0 -1
- package/lib/components/filter/filter.component.d.ts +0 -14
- package/lib/components/filter/filter.component.d.ts.map +0 -1
- package/lib/components/filter/flag/flag.component.d.ts +0 -8
- package/lib/components/filter/flag/flag.component.d.ts.map +0 -1
- package/lib/components/filter/index.d.ts +0 -10
- package/lib/components/filter/index.d.ts.map +0 -1
- package/lib/components/filter/int/int.component.d.ts +0 -15
- package/lib/components/filter/int/int.component.d.ts.map +0 -1
- package/lib/components/filter/radio/radio.component.d.ts +0 -8
- package/lib/components/filter/radio/radio.component.d.ts.map +0 -1
- package/lib/components/filter/text/text.component.d.ts +0 -8
- package/lib/components/filter/text/text.component.d.ts.map +0 -1
- package/lib/components/filters/filters.component.d.ts +0 -83
- package/lib/components/filters/filters.component.d.ts.map +0 -1
- package/lib/components/filters-config/filters-config.component.d.ts +0 -19
- package/lib/components/filters-config/filters-config.component.d.ts.map +0 -1
- package/lib/components/group/group.component.d.ts +0 -23
- package/lib/components/group/group.component.d.ts.map +0 -1
- package/lib/components/index.d.ts +0 -8
- package/lib/components/index.d.ts.map +0 -1
- package/lib/components/multiselect/multiselect.component.d.ts +0 -28
- package/lib/components/multiselect/multiselect.component.d.ts.map +0 -1
- package/lib/crud-full.module.d.ts +0 -28
- package/lib/crud-full.module.d.ts.map +0 -1
- package/lib/crud.config.d.ts +0 -65
- package/lib/crud.config.d.ts.map +0 -1
- package/lib/crud.module.d.ts +0 -34
- package/lib/crud.module.d.ts.map +0 -1
- package/lib/factories/list-pagination/list-pagination.factory.d.ts +0 -20
- package/lib/factories/list-pagination/list-pagination.factory.d.ts.map +0 -1
- package/lib/models/index.d.ts +0 -2
- package/lib/models/index.d.ts.map +0 -1
- package/lib/models/interfaces.d.ts +0 -30
- package/lib/models/interfaces.d.ts.map +0 -1
- package/lib/pages/index.d.ts +0 -7
- package/lib/pages/index.d.ts.map +0 -1
- package/lib/pages/item/base/base.component.d.ts +0 -25
- package/lib/pages/item/base/base.component.d.ts.map +0 -1
- package/lib/pages/item/item.component.d.ts +0 -70
- package/lib/pages/item/item.component.d.ts.map +0 -1
- package/lib/pages/item/standard/standard.component.d.ts +0 -8
- package/lib/pages/item/standard/standard.component.d.ts.map +0 -1
- package/lib/pages/list/base/base.component.d.ts +0 -15
- package/lib/pages/list/base/base.component.d.ts.map +0 -1
- package/lib/pages/list/list.component.d.ts +0 -54
- package/lib/pages/list/list.component.d.ts.map +0 -1
- package/lib/pages/list/standard/standard.component.d.ts +0 -14
- package/lib/pages/list/standard/standard.component.d.ts.map +0 -1
- package/lib/pipes/form-options/form-options.pipe.d.ts +0 -15
- package/lib/pipes/form-options/form-options.pipe.d.ts.map +0 -1
- package/lib/pipes/index.d.ts +0 -3
- package/lib/pipes/index.d.ts.map +0 -1
- package/lib/pipes/pipes.module.d.ts +0 -8
- package/lib/pipes/pipes.module.d.ts.map +0 -1
- package/lib/providers/model-possibilities/model-possibilities.provider.d.ts +0 -18
- package/lib/providers/model-possibilities/model-possibilities.provider.d.ts.map +0 -1
- package/lib/services/crud/crud.service.d.ts +0 -38
- package/lib/services/crud/crud.service.d.ts.map +0 -1
- package/lib/services/list-group/list-group.service.d.ts +0 -15
- package/lib/services/list-group/list-group.service.d.ts.map +0 -1
- package/lib/services/page/page.service.d.ts +0 -12
- package/lib/services/page/page.service.d.ts.map +0 -1
- package/lib/services/search/search.service.d.ts +0 -16
- package/lib/services/search/search.service.d.ts.map +0 -1
- package/lib/services/socket/socket.service.d.ts +0 -10
- package/lib/services/socket/socket.service.d.ts.map +0 -1
- package/smartsoft001-crud-shell-angular.d.ts.map +0 -1
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Create
|
|
3
|
-
*/
|
|
4
|
-
export const create = function (entity, item) {
|
|
5
|
-
return {
|
|
6
|
-
type: `[${entity}] Create`,
|
|
7
|
-
item
|
|
8
|
-
};
|
|
9
|
-
};
|
|
10
|
-
export const createSuccess = function (entity, item) {
|
|
11
|
-
return {
|
|
12
|
-
type: `[${entity}] Create Success`,
|
|
13
|
-
item
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
export const createFailure = function (entity, item, error) {
|
|
17
|
-
return {
|
|
18
|
-
type: `[${entity}] Create Failure`,
|
|
19
|
-
item,
|
|
20
|
-
error
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
/*
|
|
24
|
-
* Create many
|
|
25
|
-
*/
|
|
26
|
-
export const createMany = function (entity, data) {
|
|
27
|
-
return {
|
|
28
|
-
type: `[${entity}] Create Many`,
|
|
29
|
-
data
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
export const createManySuccess = function (entity, data) {
|
|
33
|
-
return {
|
|
34
|
-
type: `[${entity}] Create Many Success`,
|
|
35
|
-
data
|
|
36
|
-
};
|
|
37
|
-
};
|
|
38
|
-
export const createManyFailure = function (entity, data, error) {
|
|
39
|
-
return {
|
|
40
|
-
type: `[${entity}] Create Many Failure`,
|
|
41
|
-
data,
|
|
42
|
-
error
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
/*
|
|
46
|
-
* Read
|
|
47
|
-
*/
|
|
48
|
-
export const read = function (entity, filter = null) {
|
|
49
|
-
return {
|
|
50
|
-
type: `[${entity}] Read`,
|
|
51
|
-
filter
|
|
52
|
-
};
|
|
53
|
-
};
|
|
54
|
-
export const readSuccess = function (entity, filter, result) {
|
|
55
|
-
return {
|
|
56
|
-
type: `[${entity}] Read Success`,
|
|
57
|
-
result,
|
|
58
|
-
filter
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
export const readFailure = function (entity, filter, error) {
|
|
62
|
-
return {
|
|
63
|
-
type: `[${entity}] Read Failure`,
|
|
64
|
-
filter,
|
|
65
|
-
error
|
|
66
|
-
};
|
|
67
|
-
};
|
|
68
|
-
/*
|
|
69
|
-
* Clear
|
|
70
|
-
*/
|
|
71
|
-
export const clear = function (entity) {
|
|
72
|
-
return {
|
|
73
|
-
type: `[${entity}] Clear`
|
|
74
|
-
};
|
|
75
|
-
};
|
|
76
|
-
/*
|
|
77
|
-
* Export
|
|
78
|
-
*/
|
|
79
|
-
export const exportList = function (entity, filter = null, format) {
|
|
80
|
-
return {
|
|
81
|
-
type: `[${entity}] Export`,
|
|
82
|
-
filter,
|
|
83
|
-
format
|
|
84
|
-
};
|
|
85
|
-
};
|
|
86
|
-
export const exportListSuccess = function (entity, filter) {
|
|
87
|
-
return {
|
|
88
|
-
type: `[${entity}] Export Success`,
|
|
89
|
-
filter
|
|
90
|
-
};
|
|
91
|
-
};
|
|
92
|
-
export const exportListFailure = function (entity, filter, error) {
|
|
93
|
-
return {
|
|
94
|
-
type: `[${entity}] Export Failure`,
|
|
95
|
-
filter,
|
|
96
|
-
error
|
|
97
|
-
};
|
|
98
|
-
};
|
|
99
|
-
/*
|
|
100
|
-
* Select
|
|
101
|
-
*/
|
|
102
|
-
export const select = function (entity, id) {
|
|
103
|
-
return {
|
|
104
|
-
type: `[${entity}] Select`,
|
|
105
|
-
id
|
|
106
|
-
};
|
|
107
|
-
};
|
|
108
|
-
export const selectSuccess = function (entity, id, item) {
|
|
109
|
-
return {
|
|
110
|
-
type: `[${entity}] Select Success`,
|
|
111
|
-
id,
|
|
112
|
-
item
|
|
113
|
-
};
|
|
114
|
-
};
|
|
115
|
-
export const selectFailure = function (entity, id, error) {
|
|
116
|
-
return {
|
|
117
|
-
type: `[${entity}] Select Failure`,
|
|
118
|
-
id,
|
|
119
|
-
error
|
|
120
|
-
};
|
|
121
|
-
};
|
|
122
|
-
export const unselect = function (entity) {
|
|
123
|
-
return {
|
|
124
|
-
type: `[${entity}] Unselect`
|
|
125
|
-
};
|
|
126
|
-
};
|
|
127
|
-
/*
|
|
128
|
-
* MultiSelect
|
|
129
|
-
*/
|
|
130
|
-
export const multiSelect = function (entity, items) {
|
|
131
|
-
return {
|
|
132
|
-
type: `[${entity}] MultiSelect`,
|
|
133
|
-
items
|
|
134
|
-
};
|
|
135
|
-
};
|
|
136
|
-
/*
|
|
137
|
-
* Update
|
|
138
|
-
*/
|
|
139
|
-
export const update = function (entity, item) {
|
|
140
|
-
return {
|
|
141
|
-
type: `[${entity}] Update`,
|
|
142
|
-
item
|
|
143
|
-
};
|
|
144
|
-
};
|
|
145
|
-
export const updateSuccess = function (entity, item) {
|
|
146
|
-
return {
|
|
147
|
-
type: `[${entity}] Update Success`,
|
|
148
|
-
item
|
|
149
|
-
};
|
|
150
|
-
};
|
|
151
|
-
export const updateFailure = function (entity, item, error) {
|
|
152
|
-
return {
|
|
153
|
-
type: `[${entity}] Update Failure`,
|
|
154
|
-
item,
|
|
155
|
-
error
|
|
156
|
-
};
|
|
157
|
-
};
|
|
158
|
-
/*
|
|
159
|
-
* Update partial
|
|
160
|
-
*/
|
|
161
|
-
export const updatePartial = function (entity, item) {
|
|
162
|
-
return {
|
|
163
|
-
type: `[${entity}] Update partial`,
|
|
164
|
-
item
|
|
165
|
-
};
|
|
166
|
-
};
|
|
167
|
-
export const updatePartialSuccess = function (entity, item) {
|
|
168
|
-
return {
|
|
169
|
-
type: `[${entity}] Update partial Success`,
|
|
170
|
-
item
|
|
171
|
-
};
|
|
172
|
-
};
|
|
173
|
-
export const updatePartialFailure = function (entity, item, error) {
|
|
174
|
-
return {
|
|
175
|
-
type: `[${entity}] Update partial Failure`,
|
|
176
|
-
item,
|
|
177
|
-
error
|
|
178
|
-
};
|
|
179
|
-
};
|
|
180
|
-
/*
|
|
181
|
-
* Update partial many
|
|
182
|
-
*/
|
|
183
|
-
export const updatePartialMany = function (entity, items) {
|
|
184
|
-
return {
|
|
185
|
-
type: `[${entity}] Update partial many`,
|
|
186
|
-
items
|
|
187
|
-
};
|
|
188
|
-
};
|
|
189
|
-
export const updatePartialManySuccess = function (entity, items) {
|
|
190
|
-
return {
|
|
191
|
-
type: `[${entity}] Update partial many Success`,
|
|
192
|
-
items
|
|
193
|
-
};
|
|
194
|
-
};
|
|
195
|
-
export const updatePartialManyFailure = function (entity, items, error) {
|
|
196
|
-
return {
|
|
197
|
-
type: `[${entity}] Update partial many Failure`,
|
|
198
|
-
items,
|
|
199
|
-
error
|
|
200
|
-
};
|
|
201
|
-
};
|
|
202
|
-
/*
|
|
203
|
-
* Delete
|
|
204
|
-
*/
|
|
205
|
-
export const deleteItem = function (entity, id) {
|
|
206
|
-
return {
|
|
207
|
-
type: `[${entity}] Delete`,
|
|
208
|
-
id
|
|
209
|
-
};
|
|
210
|
-
};
|
|
211
|
-
export const deleteSuccess = function (entity, id) {
|
|
212
|
-
return {
|
|
213
|
-
type: `[${entity}] Delete Success`,
|
|
214
|
-
id
|
|
215
|
-
};
|
|
216
|
-
};
|
|
217
|
-
export const deleteFailure = function (entity, id, error) {
|
|
218
|
-
return {
|
|
219
|
-
type: `[${entity}] Delete Failure`,
|
|
220
|
-
id,
|
|
221
|
-
error
|
|
222
|
-
};
|
|
223
|
-
};
|
|
224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcnVkL3NoZWxsL2FuZ3VsYXIvc3JjL2xpYi8rc3RhdGUvY3J1ZC5hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFVBQ3BCLE1BQWMsRUFDZCxJQUFPO0lBRVAsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJLE1BQU0sVUFBVTtRQUMxQixJQUFJO0tBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxVQUMzQixNQUFjLEVBQ2QsSUFBTztJQUVQLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxNQUFNLGtCQUFrQjtRQUNsQyxJQUFJO0tBQ0wsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxVQUMzQixNQUFjLEVBQ2QsSUFBTyxFQUNQLEtBQUs7SUFFTCxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksTUFBTSxrQkFBa0I7UUFDbEMsSUFBSTtRQUNKLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsVUFDeEIsTUFBYyxFQUNkLElBQXFEO0lBRXJELE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxNQUFNLGVBQWU7UUFDL0IsSUFBSTtLQUNMLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxVQUMvQixNQUFjLEVBQ2QsSUFBcUQ7SUFFckQsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJLE1BQU0sdUJBQXVCO1FBQ3ZDLElBQUk7S0FDTCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsVUFDL0IsTUFB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QWMsRUFDZCxLQUFvQztJQUV0QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksTUFBTSx1QkFBdUI7UUFDdkMsS0FBSztLQUNOLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxVQUNwQyxNQUFjLEVBQ2QsS0FBb0M7SUFFdEMsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJLE1BQU0sK0JBQStCO1FBQy9DLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsVUFDcEMsTUFBYyxFQUNkLEtBQW9DLEVBQ3BDLEtBQUs7SUFFUCxPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksTUFBTSwrQkFBK0I7UUFDL0MsS0FBSztRQUNMLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsVUFDeEIsTUFBYyxFQUNkLEVBQVU7SUFFVixPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUksTUFBTSxVQUFVO1FBQzFCLEVBQUU7S0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFVBQzNCLE1BQWMsRUFDZCxFQUFVO0lBRVYsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJLE1BQU0sa0JBQWtCO1FBQ2xDLEVBQUU7S0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLFVBQzNCLE1BQWMsRUFDZCxFQUFVLEVBQ1YsS0FBSztJQUVMLE9BQU87UUFDTCxJQUFJLEVBQUUsSUFBSSxNQUFNLGtCQUFrQjtRQUNsQyxFQUFFO1FBQ0YsS0FBSztLQUNOLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiQG5ncngvc3RvcmVcIjtcblxuaW1wb3J0IHsgSUVudGl0eSB9IGZyb20gXCJAc21hcnRzb2Z0MDAxL2RvbWFpbi1jb3JlXCI7XG5pbXBvcnQgeyBJQ3J1ZENyZWF0ZU1hbnlPcHRpb25zLCBJQ3J1ZEZpbHRlciB9IGZyb20gXCIuLi9tb2RlbHMvaW50ZXJmYWNlc1wiO1xuXG5cbi8qXG4gKiBDcmVhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZSA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgaXRlbTogVFxuKTogQWN0aW9uICYgeyBpdGVtOiBUIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBDcmVhdGVgLFxuICAgIGl0ZW1cbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTdWNjZXNzID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpdGVtOiBUXG4pOiBBY3Rpb24gJiB7IGl0ZW06IFQgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIENyZWF0ZSBTdWNjZXNzYCxcbiAgICBpdGVtXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRmFpbHVyZSA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgaXRlbTogVCxcbiAgZXJyb3Jcbik6IEFjdGlvbiAmIHsgaXRlbTogVDsgZXJyb3IgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIENyZWF0ZSBGYWlsdXJlYCxcbiAgICBpdGVtLFxuICAgIGVycm9yXG4gIH07XG59O1xuXG4vKlxuICogQ3JlYXRlIG1hbnlcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbnkgPSBmdW5jdGlvbjxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+PihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGRhdGE6IHsgaXRlbXM6IFRbXTsgb3B0aW9uczogSUNydWRDcmVhdGVNYW55T3B0aW9ucyB9XG4pOiBBY3Rpb24gJiB7IGRhdGE6IHsgaXRlbXM6IFRbXTsgb3B0aW9uczogSUNydWRDcmVhdGVNYW55T3B0aW9ucyB9IH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBDcmVhdGUgTWFueWAsXG4gICAgZGF0YVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbnlTdWNjZXNzID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBkYXRhOiB7IGl0ZW1zOiBUW107IG9wdGlvbnM6IElDcnVkQ3JlYXRlTWFueU9wdGlvbnMgfVxuKTogQWN0aW9uICYgeyBkYXRhOiB7IGl0ZW1zOiBUW107IG9wdGlvbnM6IElDcnVkQ3JlYXRlTWFueU9wdGlvbnMgfSB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gQ3JlYXRlIE1hbnkgU3VjY2Vzc2AsXG4gICAgZGF0YVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbnlGYWlsdXJlID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBkYXRhOiB7IGl0ZW1zOiBUW107IG9wdGlvbnM6IElDcnVkQ3JlYXRlTWFueU9wdGlvbnMgfSxcbiAgZXJyb3Jcbik6IEFjdGlvbiAmIHsgZGF0YTogeyBpdGVtczogVFtdOyBvcHRpb25zOiBJQ3J1ZENyZWF0ZU1hbnlPcHRpb25zIH07IGVycm9yIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBDcmVhdGUgTWFueSBGYWlsdXJlYCxcbiAgICBkYXRhLFxuICAgIGVycm9yXG4gIH07XG59O1xuXG4vKlxuICogUmVhZFxuICovXG5leHBvcnQgY29uc3QgcmVhZCA9IGZ1bmN0aW9uKFxuICBlbnRpdHk6IHN0cmluZyxcbiAgZmlsdGVyOiBJQ3J1ZEZpbHRlciA9IG51bGxcbik6IEFjdGlvbiAmIHsgZmlsdGVyOiBJQ3J1ZEZpbHRlciB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gUmVhZGAsXG4gICAgZmlsdGVyXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmVhZFN1Y2Nlc3MgPSBmdW5jdGlvbjxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+LCBGPihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGZpbHRlcjogRixcbiAgcmVzdWx0OiB7IGRhdGE6IFRbXTsgdG90YWxDb3VudDogbnVtYmVyOyBsaW5rcyB9XG4pOiBBY3Rpb24gJiB7IHJlc3VsdDogeyBkYXRhOiBUW107IHRvdGFsQ291bnQ6IG51bWJlcjsgbGlua3MgfTsgZmlsdGVyOiBGIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBSZWFkIFN1Y2Nlc3NgLFxuICAgIHJlc3VsdCxcbiAgICBmaWx0ZXJcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWFkRmFpbHVyZSA9IGZ1bmN0aW9uPEY+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgZmlsdGVyOiBGLFxuICBlcnJvclxuKTogQWN0aW9uICYgeyBmaWx0ZXI6IEY7IGVycm9yIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBSZWFkIEZhaWx1cmVgLFxuICAgIGZpbHRlcixcbiAgICBlcnJvclxuICB9O1xufTtcblxuLypcbiAqIENsZWFyXG4gKi9cbmV4cG9ydCBjb25zdCBjbGVhciA9IGZ1bmN0aW9uKFxuICAgIGVudGl0eTogc3RyaW5nLFxuKTogQWN0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gQ2xlYXJgXG4gIH07XG59O1xuXG4vKlxuICogRXhwb3J0XG4gKi9cbmV4cG9ydCBjb25zdCBleHBvcnRMaXN0ID0gZnVuY3Rpb24oXG4gIGVudGl0eTogc3RyaW5nLFxuICBmaWx0ZXI6IElDcnVkRmlsdGVyID0gbnVsbCxcbiAgZm9ybWF0XG4pOiBBY3Rpb24gJiB7IGZpbHRlcjogSUNydWRGaWx0ZXIsIGZvcm1hdCB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gRXhwb3J0YCxcbiAgICBmaWx0ZXIsXG4gICAgZm9ybWF0XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZXhwb3J0TGlzdFN1Y2Nlc3MgPSBmdW5jdGlvbjxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+LCBGPihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGZpbHRlcjogRlxuKTogQWN0aW9uICYgeyBmaWx0ZXI6IEYgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIEV4cG9ydCBTdWNjZXNzYCxcbiAgICBmaWx0ZXJcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHBvcnRMaXN0RmFpbHVyZSA9IGZ1bmN0aW9uPEY+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgZmlsdGVyOiBGLFxuICBlcnJvclxuKTogQWN0aW9uICYgeyBmaWx0ZXI6IEY7IGVycm9yIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBFeHBvcnQgRmFpbHVyZWAsXG4gICAgZmlsdGVyLFxuICAgIGVycm9yXG4gIH07XG59O1xuXG4vKlxuICogU2VsZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBzZWxlY3QgPSBmdW5jdGlvbihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmdcbik6IEFjdGlvbiAmIHsgaWQ6IHN0cmluZyB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gU2VsZWN0YCxcbiAgICBpZFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFN1Y2Nlc3MgPSBmdW5jdGlvbjxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+LCBGPihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGl0ZW06IFRcbik6IEFjdGlvbiAmIHsgaWQ6IHN0cmluZzsgaXRlbTogVCB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gU2VsZWN0IFN1Y2Nlc3NgLFxuICAgIGlkLFxuICAgIGl0ZW1cbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RGYWlsdXJlID0gZnVuY3Rpb248Rj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICBlcnJvclxuKTogQWN0aW9uICYgeyBpZDogc3RyaW5nOyBlcnJvciB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gU2VsZWN0IEZhaWx1cmVgLFxuICAgIGlkLFxuICAgIGVycm9yXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgdW5zZWxlY3QgPSBmdW5jdGlvbihlbnRpdHk6IHN0cmluZyk6IEFjdGlvbiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIFVuc2VsZWN0YFxuICB9O1xufTtcblxuLypcbiAqIE11bHRpU2VsZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBtdWx0aVNlbGVjdCA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICAgIGVudGl0eTogc3RyaW5nLFxuICAgIGl0ZW1zOiBBcnJheTxUPlxuKTogQWN0aW9uICYgeyBpdGVtczogQXJyYXk8VD4gfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIE11bHRpU2VsZWN0YCxcbiAgICBpdGVtc1xuICB9O1xufTtcblxuLypcbiAqIFVwZGF0ZVxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpdGVtOiBUXG4pOiBBY3Rpb24gJiB7IGl0ZW06IFQgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIFVwZGF0ZWAsXG4gICAgaXRlbVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVN1Y2Nlc3MgPSBmdW5jdGlvbjxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+PihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGl0ZW06IFRcbik6IEFjdGlvbiAmIHsgaXRlbTogVCB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gVXBkYXRlIFN1Y2Nlc3NgLFxuICAgIGl0ZW1cbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVGYWlsdXJlID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpdGVtOiBULFxuICBlcnJvclxuKTogQWN0aW9uICYgeyBpdGVtOiBUOyBlcnJvciB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gVXBkYXRlIEZhaWx1cmVgLFxuICAgIGl0ZW0sXG4gICAgZXJyb3JcbiAgfTtcbn07XG5cbi8qXG4gKiBVcGRhdGUgcGFydGlhbFxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlUGFydGlhbCA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgaXRlbTogUGFydGlhbDxUPiAmIHsgaWQ6IHN0cmluZyB9XG4pOiBBY3Rpb24gJiB7IGl0ZW06IFBhcnRpYWw8VD4gJiB7IGlkOiBzdHJpbmcgfSB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gVXBkYXRlIHBhcnRpYWxgLFxuICAgIGl0ZW1cbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQYXJ0aWFsU3VjY2VzcyA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICBlbnRpdHk6IHN0cmluZyxcbiAgaXRlbTogUGFydGlhbDxUPiAmIHsgaWQ6IHN0cmluZyB9XG4pOiBBY3Rpb24gJiB7IGl0ZW06IFBhcnRpYWw8VD4gJiB7IGlkOiBzdHJpbmcgfSB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gVXBkYXRlIHBhcnRpYWwgU3VjY2Vzc2AsXG4gICAgaXRlbVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBhcnRpYWxGYWlsdXJlID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpdGVtOiBQYXJ0aWFsPFQ+ICYgeyBpZDogc3RyaW5nIH0sXG4gIGVycm9yXG4pOiBBY3Rpb24gJiB7IGl0ZW06IFBhcnRpYWw8VD4gJiB7IGlkOiBzdHJpbmcgfTsgZXJyb3IgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIFVwZGF0ZSBwYXJ0aWFsIEZhaWx1cmVgLFxuICAgIGl0ZW0sXG4gICAgZXJyb3JcbiAgfTtcbn07XG5cbi8qXG4gKiBVcGRhdGUgcGFydGlhbCBtYW55XG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVQYXJ0aWFsTWFueSA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICAgIGVudGl0eTogc3RyaW5nLFxuICAgIGl0ZW1zOiBQYXJ0aWFsPFQ+ICYgeyBpZDogc3RyaW5nIH1bXVxuKTogQWN0aW9uICYgeyBpdGVtczogUGFydGlhbDxUPiAmIHsgaWQ6IHN0cmluZyB9W10gfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIFVwZGF0ZSBwYXJ0aWFsIG1hbnlgLFxuICAgIGl0ZW1zXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUGFydGlhbE1hbnlTdWNjZXNzID0gZnVuY3Rpb248VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4oXG4gICAgZW50aXR5OiBzdHJpbmcsXG4gICAgaXRlbXM6IFBhcnRpYWw8VD4gJiB7IGlkOiBzdHJpbmcgfVtdXG4pOiBBY3Rpb24gJiB7IGl0ZW1zOiBQYXJ0aWFsPFQ+ICYgeyBpZDogc3RyaW5nIH1bXSB9IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBgWyR7ZW50aXR5fV0gVXBkYXRlIHBhcnRpYWwgbWFueSBTdWNjZXNzYCxcbiAgICBpdGVtc1xuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBhcnRpYWxNYW55RmFpbHVyZSA9IGZ1bmN0aW9uPFQgZXh0ZW5kcyBJRW50aXR5PHN0cmluZz4+KFxuICAgIGVudGl0eTogc3RyaW5nLFxuICAgIGl0ZW1zOiBQYXJ0aWFsPFQ+ICYgeyBpZDogc3RyaW5nIH1bXSxcbiAgICBlcnJvclxuKTogQWN0aW9uICYgeyBpdGVtczogUGFydGlhbDxUPiAmIHsgaWQ6IHN0cmluZyB9W107IGVycm9yIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBVcGRhdGUgcGFydGlhbCBtYW55IEZhaWx1cmVgLFxuICAgIGl0ZW1zLFxuICAgIGVycm9yXG4gIH07XG59O1xuXG4vKlxuICogRGVsZXRlXG4gKi9cbmV4cG9ydCBjb25zdCBkZWxldGVJdGVtID0gZnVuY3Rpb24oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpZDogc3RyaW5nXG4pOiBBY3Rpb24gJiB7IGlkOiBzdHJpbmcgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIERlbGV0ZWAsXG4gICAgaWRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVTdWNjZXNzID0gZnVuY3Rpb24oXG4gIGVudGl0eTogc3RyaW5nLFxuICBpZDogc3RyaW5nXG4pOiBBY3Rpb24gJiB7IGlkOiBzdHJpbmcgfSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogYFske2VudGl0eX1dIERlbGV0ZSBTdWNjZXNzYCxcbiAgICBpZFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUZhaWx1cmUgPSBmdW5jdGlvbjxGPihcbiAgZW50aXR5OiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcsXG4gIGVycm9yXG4pOiBBY3Rpb24gJiB7IGlkOiBzdHJpbmc7IGVycm9yIH0ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGBbJHtlbnRpdHl9XSBEZWxldGUgRmFpbHVyZWAsXG4gICAgaWQsXG4gICAgZXJyb3JcbiAgfTtcbn07XG4iXX0=
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import "reflect-metadata";
|
|
2
|
-
import { Injectable } from "@angular/core";
|
|
3
|
-
import { catchError, first, tap } from "rxjs/operators";
|
|
4
|
-
import { of } from "rxjs";
|
|
5
|
-
import { ActionsSubject, select, State, Store } from "@ngrx/store";
|
|
6
|
-
import { CrudService } from "../services/crud/crud.service";
|
|
7
|
-
import * as CrudActions from "./crud.actions";
|
|
8
|
-
import { CrudConfig } from "../crud.config";
|
|
9
|
-
import { getCrudFilter } from "./crud.selectors";
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@ngrx/store";
|
|
12
|
-
import * as i2 from "../services/crud/crud.service";
|
|
13
|
-
import * as i3 from "../crud.config";
|
|
14
|
-
export class CrudEffects {
|
|
15
|
-
constructor(actions$, service, config, store, state) {
|
|
16
|
-
this.actions$ = actions$;
|
|
17
|
-
this.service = service;
|
|
18
|
-
this.config = config;
|
|
19
|
-
this.store = store;
|
|
20
|
-
this.state = state;
|
|
21
|
-
}
|
|
22
|
-
init() {
|
|
23
|
-
const metadata = Reflect.getMetadata(this.config.entity, CrudEffects);
|
|
24
|
-
if (metadata)
|
|
25
|
-
return;
|
|
26
|
-
Reflect.defineMetadata(this.config.entity, true, CrudEffects);
|
|
27
|
-
this.actions$.subscribe((action) => {
|
|
28
|
-
switch (action.type) {
|
|
29
|
-
case `[${this.config.entity}] Create`:
|
|
30
|
-
this.service
|
|
31
|
-
.create(action.item)
|
|
32
|
-
.pipe(tap(() => this.store.dispatch(CrudActions.createSuccess(this.config.entity, action.item))), catchError((error) => {
|
|
33
|
-
this.store.dispatch(CrudActions.createFailure(this.config.entity, action.item, error));
|
|
34
|
-
return of();
|
|
35
|
-
}))
|
|
36
|
-
.subscribe();
|
|
37
|
-
break;
|
|
38
|
-
case `[${this.config.entity}] Create Success`:
|
|
39
|
-
const createState = this.state.getValue()[this.config.entity];
|
|
40
|
-
this.store.dispatch(CrudActions.read(this.config.entity, createState.filter ? { ...createState.filter, offset: 0 } : null));
|
|
41
|
-
break;
|
|
42
|
-
case `[${this.config.entity}] Create Many`:
|
|
43
|
-
this.service
|
|
44
|
-
.createMany(action.data.items, action.data.options)
|
|
45
|
-
.pipe(tap(() => this.store.dispatch(CrudActions.createManySuccess(this.config.entity, {
|
|
46
|
-
items: action.data.items,
|
|
47
|
-
options: action.data.options,
|
|
48
|
-
}))), catchError((error) => {
|
|
49
|
-
this.store.dispatch(CrudActions.createManyFailure(this.config.entity, {
|
|
50
|
-
items: action.data.items,
|
|
51
|
-
options: action.data.options,
|
|
52
|
-
}, error));
|
|
53
|
-
return of();
|
|
54
|
-
}))
|
|
55
|
-
.subscribe();
|
|
56
|
-
break;
|
|
57
|
-
case `[${this.config.entity}] Create Many Success`:
|
|
58
|
-
const createManyState = this.state.getValue()[this.config.entity];
|
|
59
|
-
this.store.dispatch(CrudActions.read(this.config.entity, createManyState.filter
|
|
60
|
-
? { ...createManyState.filter, offset: 0 }
|
|
61
|
-
: null));
|
|
62
|
-
break;
|
|
63
|
-
case `[${this.config.entity}] Read`:
|
|
64
|
-
this.service
|
|
65
|
-
.getList(action.filter)
|
|
66
|
-
.pipe(tap((result) => this.store.dispatch(CrudActions.readSuccess(this.config.entity, action.filter, result))), catchError((error) => {
|
|
67
|
-
this.store.dispatch(CrudActions.readFailure(this.config.entity, action.filter, error));
|
|
68
|
-
return of();
|
|
69
|
-
}))
|
|
70
|
-
.subscribe();
|
|
71
|
-
break;
|
|
72
|
-
case `[${this.config.entity}] Export`:
|
|
73
|
-
this.service
|
|
74
|
-
.exportList(action.filter, action.format)
|
|
75
|
-
.pipe(tap((result) => this.store.dispatch(CrudActions.exportListSuccess(this.config.entity, action.filter))), catchError((error) => {
|
|
76
|
-
this.store.dispatch(CrudActions.exportListFailure(this.config.entity, action.filter, error));
|
|
77
|
-
return of();
|
|
78
|
-
}))
|
|
79
|
-
.subscribe();
|
|
80
|
-
break;
|
|
81
|
-
case `[${this.config.entity}] Select`:
|
|
82
|
-
this.service
|
|
83
|
-
.getById(action.id)
|
|
84
|
-
.pipe(tap((result) => this.store.dispatch(CrudActions.selectSuccess(this.config.entity, action.id, result))), catchError((error) => {
|
|
85
|
-
this.store.dispatch(CrudActions.selectFailure(this.config.entity, action.id, error));
|
|
86
|
-
return of();
|
|
87
|
-
}))
|
|
88
|
-
.subscribe();
|
|
89
|
-
break;
|
|
90
|
-
case `[${this.config.entity}] Update`:
|
|
91
|
-
this.service
|
|
92
|
-
.updatePartial(action.item)
|
|
93
|
-
.pipe(tap(() => this.store.dispatch(CrudActions.updateSuccess(this.config.entity, action.item))), catchError((error) => {
|
|
94
|
-
this.store.dispatch(CrudActions.updateFailure(this.config.entity, action.item, error));
|
|
95
|
-
this.store.dispatch(CrudActions.read(this.config.entity));
|
|
96
|
-
return of();
|
|
97
|
-
}))
|
|
98
|
-
.subscribe();
|
|
99
|
-
break;
|
|
100
|
-
case `[${this.config.entity}] Update Success`:
|
|
101
|
-
this.store
|
|
102
|
-
.pipe(select(getCrudFilter(this.config.entity)), first())
|
|
103
|
-
.subscribe((filter) => {
|
|
104
|
-
this.store.dispatch(CrudActions.read(this.config.entity, {
|
|
105
|
-
...filter,
|
|
106
|
-
offset: 0,
|
|
107
|
-
}));
|
|
108
|
-
this.store.dispatch(CrudActions.select(this.config.entity, action.item.id));
|
|
109
|
-
});
|
|
110
|
-
break;
|
|
111
|
-
case `[${this.config.entity}] Update partial`:
|
|
112
|
-
this.service
|
|
113
|
-
.updatePartial(action.item)
|
|
114
|
-
.pipe(tap(() => this.store.dispatch(CrudActions.updatePartialSuccess(this.config.entity, action.item))), catchError((error) => {
|
|
115
|
-
this.store.dispatch(CrudActions.updatePartialFailure(this.config.entity, action.item, error));
|
|
116
|
-
this.store.dispatch(CrudActions.read(this.config.entity));
|
|
117
|
-
return of();
|
|
118
|
-
}))
|
|
119
|
-
.subscribe();
|
|
120
|
-
break;
|
|
121
|
-
case `[${this.config.entity}] Update partial Success`:
|
|
122
|
-
this.store
|
|
123
|
-
.pipe(select(getCrudFilter(this.config.entity)), first())
|
|
124
|
-
.subscribe((filter) => {
|
|
125
|
-
this.store.dispatch(CrudActions.read(this.config.entity, {
|
|
126
|
-
...filter,
|
|
127
|
-
offset: 0,
|
|
128
|
-
}));
|
|
129
|
-
this.store.dispatch(CrudActions.select(this.config.entity, action.item.id));
|
|
130
|
-
});
|
|
131
|
-
break;
|
|
132
|
-
case `[${this.config.entity}] Update partial many`:
|
|
133
|
-
this.service
|
|
134
|
-
.updatePartialMany(action.items)
|
|
135
|
-
.pipe(tap(() => this.store.dispatch(CrudActions.updatePartialManySuccess(this.config.entity, action.items))), catchError((error) => {
|
|
136
|
-
this.store.dispatch(CrudActions.updatePartialManyFailure(this.config.entity, action.items, error));
|
|
137
|
-
this.store.dispatch(CrudActions.read(this.config.entity));
|
|
138
|
-
return of();
|
|
139
|
-
}))
|
|
140
|
-
.subscribe();
|
|
141
|
-
break;
|
|
142
|
-
case `[${this.config.entity}] Update partial many Success`:
|
|
143
|
-
this.store
|
|
144
|
-
.pipe(select(getCrudFilter(this.config.entity)), first())
|
|
145
|
-
.subscribe((filter) => {
|
|
146
|
-
this.store.dispatch(CrudActions.read(this.config.entity, {
|
|
147
|
-
...filter,
|
|
148
|
-
offset: 0,
|
|
149
|
-
}));
|
|
150
|
-
});
|
|
151
|
-
break;
|
|
152
|
-
case `[${this.config.entity}] Delete`:
|
|
153
|
-
this.service
|
|
154
|
-
.delete(action.id)
|
|
155
|
-
.pipe(tap(() => this.store.dispatch(CrudActions.deleteSuccess(this.config.entity, action.id))), catchError((error) => {
|
|
156
|
-
this.store.dispatch(CrudActions.deleteFailure(this.config.entity, action.id, error));
|
|
157
|
-
return of();
|
|
158
|
-
}))
|
|
159
|
-
.subscribe();
|
|
160
|
-
break;
|
|
161
|
-
case `[${this.config.entity}] Delete Success`:
|
|
162
|
-
this.store
|
|
163
|
-
.pipe(select(getCrudFilter(this.config.entity)), first())
|
|
164
|
-
.subscribe((filter) => {
|
|
165
|
-
this.store.dispatch(CrudActions.read(this.config.entity, {
|
|
166
|
-
...filter,
|
|
167
|
-
offset: 0,
|
|
168
|
-
}));
|
|
169
|
-
});
|
|
170
|
-
break;
|
|
171
|
-
default:
|
|
172
|
-
break;
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudEffects, deps: [{ token: i1.ActionsSubject }, { token: i2.CrudService }, { token: i3.CrudConfig }, { token: i1.Store }, { token: i1.State }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
177
|
-
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudEffects }); }
|
|
178
|
-
}
|
|
179
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudEffects, decorators: [{
|
|
180
|
-
type: Injectable
|
|
181
|
-
}], ctorParameters: function () { return [{ type: i1.ActionsSubject }, { type: i2.CrudService }, { type: i3.CrudConfig }, { type: i1.Store }, { type: i1.State }]; } });
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jcnVkL3NoZWxsL2FuZ3VsYXIvc3JjL2xpYi8rc3RhdGUvY3J1ZC5lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sa0JBQWtCLENBQUM7QUFFMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBVSxjQUFjLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVELE9BQU8sS0FBSyxXQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFHakQsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDVSxRQUF3QixFQUN4QixPQUF1QixFQUN2QixNQUFxQixFQUNyQixLQUFpQixFQUNqQixLQUFpQjtRQUpqQixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBWTtJQUN4QixDQUFDO0lBRUosSUFBSTtRQUNGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENB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QUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsV0FBVyxDQUFDLGFBQWEsQ0FDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQ2xCLE1BQU0sQ0FBQyxFQUFFLEVBQ1QsS0FBSyxDQUNOLENBQ0YsQ0FBQzt3QkFDRixPQUFPLEVBQUUsRUFBRSxDQUFDO29CQUNkLENBQUMsQ0FBQyxDQUNIO3lCQUNBLFNBQVMsRUFBRSxDQUFDO29CQUNmLE1BQU07Z0JBRVIsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxrQkFBa0I7b0JBQ3pDLElBQUksQ0FBQyxLQUFLO3lCQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQzt5QkFDeEQsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7d0JBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUNmLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7NEJBQ2pDLEdBQUcsTUFBTTs0QkFDVCxNQUFNLEVBQUUsQ0FBQzt5QkFDWixDQUFDLENBQ0wsQ0FBQztvQkFDTixDQUFDLENBQUMsQ0FBQztvQkFDVCxNQUFNO2dCQUVSO29CQUNFLE1BQU07YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztpSUE3VVUsV0FBVztxSUFBWCxXQUFXOzsyRkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwicmVmbGVjdC1tZXRhZGF0YVwiO1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpcnN0LCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IG9mIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEFjdGlvbiwgQWN0aW9uc1N1YmplY3QsIHNlbGVjdCwgU3RhdGUsIFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XG5cbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2NydWQvY3J1ZC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSBcIkBzbWFydHNvZnQwMDEvZG9tYWluLWNvcmVcIjtcbmltcG9ydCAqIGFzIENydWRBY3Rpb25zIGZyb20gXCIuL2NydWQuYWN0aW9uc1wiO1xuaW1wb3J0IHsgQ3J1ZENvbmZpZyB9IGZyb20gXCIuLi9jcnVkLmNvbmZpZ1wiO1xuaW1wb3J0IHsgZ2V0Q3J1ZEZpbHRlciB9IGZyb20gXCIuL2NydWQuc2VsZWN0b3JzXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDcnVkRWZmZWN0czxUIGV4dGVuZHMgSUVudGl0eTxzdHJpbmc+PiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aW9ucyQ6IEFjdGlvbnNTdWJqZWN0LFxuICAgIHByaXZhdGUgc2VydmljZTogQ3J1ZFNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSBjb25maWc6IENydWRDb25maWc8VD4sXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHN0YXRlOiBTdGF0ZTxhbnk+XG4gICkge31cblxuICBpbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YSh0aGlzLmNvbmZpZy5lbnRpdHksIENydWRFZmZlY3RzKTtcblxuICAgIGlmIChtZXRhZGF0YSkgcmV0dXJuO1xuXG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YSh0aGlzLmNvbmZpZy5lbnRpdHksIHRydWUsIENydWRFZmZlY3RzKTtcblxuICAgIHRoaXMuYWN0aW9ucyQuc3Vic2NyaWJlKChhY3Rpb246IEFjdGlvbiAmIGFueSkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgICBjYXNlIGBbJHt0aGlzLmNvbmZpZy5lbnRpdHl9XSBDcmVhdGVgOlxuICAgICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLmNyZWF0ZShhY3Rpb24uaXRlbSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMuY3JlYXRlU3VjY2Vzcyh0aGlzLmNvbmZpZy5lbnRpdHksIGFjdGlvbi5pdGVtKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMuY3JlYXRlRmFpbHVyZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIENyZWF0ZSBTdWNjZXNzYDpcbiAgICAgICAgICBjb25zdCBjcmVhdGVTdGF0ZSA9IHRoaXMuc3RhdGUuZ2V0VmFsdWUoKVt0aGlzLmNvbmZpZy5lbnRpdHldO1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICBDcnVkQWN0aW9ucy5yZWFkKFxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgIGNyZWF0ZVN0YXRlLmZpbHRlciA/IHsgLi4uY3JlYXRlU3RhdGUuZmlsdGVyLCBvZmZzZXQ6IDAgfSA6IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIENyZWF0ZSBNYW55YDpcbiAgICAgICAgICB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC5jcmVhdGVNYW55KGFjdGlvbi5kYXRhLml0ZW1zLCBhY3Rpb24uZGF0YS5vcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCgoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy5jcmVhdGVNYW55U3VjY2Vzcyh0aGlzLmNvbmZpZy5lbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGFjdGlvbi5kYXRhLml0ZW1zLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBhY3Rpb24uZGF0YS5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLmNyZWF0ZU1hbnlGYWlsdXJlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtczogYWN0aW9uLmRhdGEuaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogYWN0aW9uLmRhdGEub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIENyZWF0ZSBNYW55IFN1Y2Nlc3NgOlxuICAgICAgICAgIGNvbnN0IGNyZWF0ZU1hbnlTdGF0ZSA9IHRoaXMuc3RhdGUuZ2V0VmFsdWUoKVt0aGlzLmNvbmZpZy5lbnRpdHldO1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICBDcnVkQWN0aW9ucy5yZWFkKFxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgIGNyZWF0ZU1hbnlTdGF0ZS5maWx0ZXJcbiAgICAgICAgICAgICAgICA/IHsgLi4uY3JlYXRlTWFueVN0YXRlLmZpbHRlciwgb2Zmc2V0OiAwIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIFJlYWRgOlxuICAgICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLmdldExpc3QoYWN0aW9uLmZpbHRlcilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKHJlc3VsdCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMucmVhZFN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy5yZWFkRmFpbHVyZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBgWyR7dGhpcy5jb25maWcuZW50aXR5fV0gRXhwb3J0YDpcbiAgICAgICAgICB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC5leHBvcnRMaXN0KGFjdGlvbi5maWx0ZXIsIGFjdGlvbi5mb3JtYXQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFwKChyZXN1bHQpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLmV4cG9ydExpc3RTdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5maWx0ZXJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLmV4cG9ydExpc3RGYWlsdXJlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGBbJHt0aGlzLmNvbmZpZy5lbnRpdHl9XSBTZWxlY3RgOlxuICAgICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLmdldEJ5SWQoYWN0aW9uLmlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRhcCgocmVzdWx0KSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy5zZWxlY3RTdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy5zZWxlY3RGYWlsdXJlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5pZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIFVwZGF0ZWA6XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAudXBkYXRlUGFydGlhbChhY3Rpb24uaXRlbSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMudXBkYXRlU3VjY2Vzcyh0aGlzLmNvbmZpZy5lbnRpdHksIGFjdGlvbi5pdGVtKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMudXBkYXRlRmFpbHVyZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMucmVhZCh0aGlzLmNvbmZpZy5lbnRpdHkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGBbJHt0aGlzLmNvbmZpZy5lbnRpdHl9XSBVcGRhdGUgU3VjY2Vzc2A6XG4gICAgICAgICAgdGhpcy5zdG9yZVxuICAgICAgICAgICAgLnBpcGUoc2VsZWN0KGdldENydWRGaWx0ZXIodGhpcy5jb25maWcuZW50aXR5KSksIGZpcnN0KCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy5yZWFkKHRoaXMuY29uZmlnLmVudGl0eSwge1xuICAgICAgICAgICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDcnVkQWN0aW9ucy5zZWxlY3QodGhpcy5jb25maWcuZW50aXR5LCBhY3Rpb24uaXRlbS5pZCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBgWyR7dGhpcy5jb25maWcuZW50aXR5fV0gVXBkYXRlIHBhcnRpYWxgOlxuICAgICAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZVBhcnRpYWwoYWN0aW9uLml0ZW0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFwKCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLnVwZGF0ZVBhcnRpYWxTdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbi5pdGVtXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICAgICAgICBDcnVkQWN0aW9ucy51cGRhdGVQYXJ0aWFsRmFpbHVyZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMucmVhZCh0aGlzLmNvbmZpZy5lbnRpdHkpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGBbJHt0aGlzLmNvbmZpZy5lbnRpdHl9XSBVcGRhdGUgcGFydGlhbCBTdWNjZXNzYDpcbiAgICAgICAgICB0aGlzLnN0b3JlXG4gICAgICAgICAgICAucGlwZShzZWxlY3QoZ2V0Q3J1ZEZpbHRlcih0aGlzLmNvbmZpZy5lbnRpdHkpKSwgZmlyc3QoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLnJlYWQodGhpcy5jb25maWcuZW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENydWRBY3Rpb25zLnNlbGVjdCh0aGlzLmNvbmZpZy5lbnRpdHksIGFjdGlvbi5pdGVtLmlkKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIGBbJHt0aGlzLmNvbmZpZy5lbnRpdHl9XSBVcGRhdGUgcGFydGlhbCBtYW55YDpcbiAgICAgICAgICB0aGlzLnNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVQYXJ0aWFsTWFueShhY3Rpb24uaXRlbXMpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFwKCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLnVwZGF0ZVBhcnRpYWxNYW55U3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXRlbXNcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLnVwZGF0ZVBhcnRpYWxNYW55RmFpbHVyZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcuZW50aXR5LFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENydWRBY3Rpb25zLnJlYWQodGhpcy5jb25maWcuZW50aXR5KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBgWyR7dGhpcy5jb25maWcuZW50aXR5fV0gVXBkYXRlIHBhcnRpYWwgbWFueSBTdWNjZXNzYDpcbiAgICAgICAgICB0aGlzLnN0b3JlXG4gICAgICAgICAgICAucGlwZShzZWxlY3QoZ2V0Q3J1ZEZpbHRlcih0aGlzLmNvbmZpZy5lbnRpdHkpKSwgZmlyc3QoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLnJlYWQodGhpcy5jb25maWcuZW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICBvZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgYFske3RoaXMuY29uZmlnLmVudGl0eX1dIERlbGV0ZWA6XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlXG4gICAgICAgICAgICAuZGVsZXRlKGFjdGlvbi5pZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YXAoKCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMuZGVsZXRlU3VjY2Vzcyh0aGlzLmNvbmZpZy5lbnRpdHksIGFjdGlvbi5pZClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICAgIENydWRBY3Rpb25zLmRlbGV0ZUZhaWx1cmUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLmVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBgWyR7dGhpcy5jb25maWcuZW50aXR5fV0gRGVsZXRlIFN1Y2Nlc3NgOlxuICAgICAgICAgICAgdGhpcy5zdG9yZVxuICAgICAgICAgICAgICAgIC5waXBlKHNlbGVjdChnZXRDcnVkRmlsdGVyKHRoaXMuY29uZmlnLmVudGl0eSkpLCBmaXJzdCgpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgQ3J1ZEFjdGlvbnMucmVhZCh0aGlzLmNvbmZpZy5lbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5maWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { select, Store } from "@ngrx/store";
|
|
2
|
-
import { Injectable } from "@angular/core";
|
|
3
|
-
import { map, tap } from "rxjs/operators";
|
|
4
|
-
import { CrudConfig } from "../crud.config";
|
|
5
|
-
import * as CrudActions from "./crud.actions";
|
|
6
|
-
import * as CrudSelectors from "./crud.selectors";
|
|
7
|
-
import { NgrxStoreService } from "@smartsoft001/angular";
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@ngrx/store";
|
|
10
|
-
import * as i2 from "../crud.config";
|
|
11
|
-
export class CrudFacade {
|
|
12
|
-
constructor(store, config) {
|
|
13
|
-
this.store = store;
|
|
14
|
-
this.config = config;
|
|
15
|
-
this.loaded$ = this.store.pipe(select(CrudSelectors.getCrudLoaded(this.config.entity)));
|
|
16
|
-
this.loading$ = this.store.pipe(select(CrudSelectors.getCrudLoaded(this.config.entity)), map(l => !l));
|
|
17
|
-
this.selected$ = this.store.pipe(select(CrudSelectors.getCrudSelected(this.config.entity)), tap(s => {
|
|
18
|
-
this.selected = s;
|
|
19
|
-
}));
|
|
20
|
-
this.multiSelected$ = this.store.pipe(select(CrudSelectors.getCrudMultiSelected(this.config.entity)), tap(s => {
|
|
21
|
-
this.multiSelected = s;
|
|
22
|
-
}));
|
|
23
|
-
this.list$ = this.store.pipe(select(CrudSelectors.getCrudList(this.config.entity)), tap(l => {
|
|
24
|
-
this.list = l;
|
|
25
|
-
}));
|
|
26
|
-
this.filter$ = this.store.pipe(select(CrudSelectors.getCrudFilter(this.config.entity)), tap(f => {
|
|
27
|
-
this.filter = f;
|
|
28
|
-
}));
|
|
29
|
-
this.totalCount$ = this.store.pipe(select(CrudSelectors.getCrudTotalCount(this.config.entity)));
|
|
30
|
-
this.links$ = this.store.pipe(select(CrudSelectors.getCrudLinks(this.config.entity)));
|
|
31
|
-
this.error$ = this.store.pipe(select(CrudSelectors.getCrudError(this.config.entity)));
|
|
32
|
-
if (NgrxStoreService.store) {
|
|
33
|
-
this.store = NgrxStoreService.store;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
create(item) {
|
|
37
|
-
this.store.dispatch(CrudActions.create(this.config.entity, item));
|
|
38
|
-
}
|
|
39
|
-
createMany(items, options) {
|
|
40
|
-
this.store.dispatch(CrudActions.createMany(this.config.entity, { items, options }));
|
|
41
|
-
}
|
|
42
|
-
read(filter = null) {
|
|
43
|
-
let baseQuery = [];
|
|
44
|
-
if (this.config.baseQuery) {
|
|
45
|
-
baseQuery = this.config.baseQuery;
|
|
46
|
-
}
|
|
47
|
-
const fullFilter = {
|
|
48
|
-
...(filter ? filter : {}),
|
|
49
|
-
query: filter && filter.query ? filter.query : baseQuery
|
|
50
|
-
};
|
|
51
|
-
this.store.dispatch(CrudActions.read(this.config.entity, fullFilter));
|
|
52
|
-
}
|
|
53
|
-
clear() {
|
|
54
|
-
this.store.dispatch(CrudActions.clear(this.config.entity));
|
|
55
|
-
}
|
|
56
|
-
select(id) {
|
|
57
|
-
this.store.dispatch(CrudActions.select(this.config.entity, id));
|
|
58
|
-
}
|
|
59
|
-
unselect() {
|
|
60
|
-
this.store.dispatch(CrudActions.unselect(this.config.entity));
|
|
61
|
-
}
|
|
62
|
-
multiSelect(items) {
|
|
63
|
-
this.store.dispatch(CrudActions.multiSelect(this.config.entity, items));
|
|
64
|
-
}
|
|
65
|
-
update(item) {
|
|
66
|
-
this.getStore().dispatch(CrudActions.update(this.config.entity, item));
|
|
67
|
-
}
|
|
68
|
-
export(filter = null, format = null) {
|
|
69
|
-
this.getStore().dispatch(CrudActions.exportList(this.config.entity, filter, format));
|
|
70
|
-
}
|
|
71
|
-
updatePartial(item) {
|
|
72
|
-
this.getStore().dispatch(CrudActions.updatePartial(this.config.entity, item));
|
|
73
|
-
}
|
|
74
|
-
updatePartialMany(items) {
|
|
75
|
-
this.getStore().dispatch(CrudActions.updatePartialMany(this.config.entity, items));
|
|
76
|
-
}
|
|
77
|
-
delete(id) {
|
|
78
|
-
this.getStore().dispatch(CrudActions.deleteItem(this.config.entity, id));
|
|
79
|
-
}
|
|
80
|
-
getStore() {
|
|
81
|
-
if (NgrxStoreService.store)
|
|
82
|
-
return NgrxStoreService.store;
|
|
83
|
-
return this.store;
|
|
84
|
-
}
|
|
85
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudFacade, deps: [{ token: i1.Store }, { token: i2.CrudConfig }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
86
|
-
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudFacade }); }
|
|
87
|
-
}
|
|
88
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: CrudFacade, decorators: [{
|
|
89
|
-
type: Injectable
|
|
90
|
-
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.CrudConfig }]; } });
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5mYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NydWQvc2hlbGwvYW5ndWxhci9zcmMvbGliLytzdGF0ZS9jcnVkLmZhY2FkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxXQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxLQUFLLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUl2RCxNQUFNLE9BQU8sVUFBVTtJQWdEckIsWUFBb0IsS0FBaUIsRUFBVSxNQUFxQjtRQUFoRCxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQTFDcEUsWUFBTyxHQUF3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDNUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUN4RCxDQUFDO1FBQ0YsYUFBUSxHQUF3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDN0MsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUN2RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNiLENBQUM7UUFDRixjQUFTLEdBQWtCLElBQUks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LENBQUM7WUFDekIsS0FBSyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3pELENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQVU7UUFDZixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWU7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBTztRQUNaLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBc0IsSUFBSSxFQUFFLE1BQU0sR0FBRyxJQUFJO1FBQzlDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWlDO1FBQzdDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFvQztRQUNwRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBVTtRQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTyxRQUFRO1FBQ2QsSUFBSSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFFMUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7aUlBcEhVLFVBQVU7cUlBQVYsVUFBVTs7MkZBQVYsVUFBVTtrQkFEdEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tIFwiQG5ncngvc3RvcmVcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBtYXAsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmltcG9ydCB7IElFbnRpdHkgfSBmcm9tIFwiQHNtYXJ0c29mdDAwMS9kb21haW4tY29yZVwiO1xuXG5pbXBvcnQgeyBDcnVkQ29uZmlnIH0gZnJvbSBcIi4uL2NydWQuY29uZmlnXCI7XG5pbXBvcnQgKiBhcyBDcnVkQWN0aW9ucyBmcm9tIFwiLi9jcnVkLmFjdGlvbnNcIjtcbmltcG9ydCAqIGFzIENydWRTZWxlY3RvcnMgZnJvbSBcIi4vY3J1ZC5zZWxlY3RvcnNcIjtcbmltcG9ydCB7SUNydWRDcmVhdGVNYW55T3B0aW9ucywgSUNydWRGaWx0ZXJ9IGZyb20gXCIuLi9tb2RlbHMvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHtOZ3J4U3RvcmVTZXJ2aWNlfSBmcm9tIFwiQHNtYXJ0c29mdDAwMS9hbmd1bGFyXCI7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENydWRGYWNhZGU8VCBleHRlbmRzIElFbnRpdHk8c3RyaW5nPj4ge1xuICBzZWxlY3RlZDogVDtcbiAgbXVsdGlTZWxlY3RlZDogQXJyYXk8VD47XG4gIGxpc3Q6IEFycmF5PFQ+O1xuICBmaWx0ZXI6IElDcnVkRmlsdGVyO1xuXG4gIGxvYWRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnN0b3JlLnBpcGUoXG4gICAgc2VsZWN0KENydWRTZWxlY3RvcnMuZ2V0Q3J1ZExvYWRlZCh0aGlzLmNvbmZpZy5lbnRpdHkpKVxuICApO1xuICBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc3RvcmUucGlwZShcbiAgICBzZWxlY3QoQ3J1ZFNlbGVjdG9ycy5nZXRDcnVkTG9hZGVkKHRoaXMuY29uZmlnLmVudGl0eSkpLFxuICAgIG1hcChsID0+ICFsKVxuICApO1xuICBzZWxlY3RlZCQ6IE9ic2VydmFibGU8VD4gPSB0aGlzLnN0b3JlLnBpcGUoXG4gICAgc2VsZWN0KENydWRTZWxlY3RvcnMuZ2V0Q3J1ZFNlbGVjdGVkKHRoaXMuY29uZmlnLmVudGl0eSkpLFxuICAgIHRhcChzID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBzO1xuICAgIH0pXG4gICk7XG4gIG11bHRpU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPFRbXT4gPSB0aGlzLnN0b3JlLnBpcGUoXG4gICAgICBzZWxlY3QoQ3J1ZFNlbGVjdG9ycy5nZXRDcnVkTXVsdGlTZWxlY3RlZCh0aGlzLmNvbmZpZy5lbnRpdHkpKSxcbiAgICAgIHRhcChzID0+IHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdGVkID0gcztcbiAgICAgIH0pXG4gICk7XG4gIGxpc3QkOiBPYnNlcnZhYmxlPFRbXT4gPSB0aGlzLnN0b3JlLnBpcGUoXG4gICAgc2VsZWN0KENydWRTZWxlY3RvcnMuZ2V0Q3J1ZExpc3QodGhpcy5jb25maWcuZW50aXR5KSksXG4gICAgdGFwKGwgPT4ge1xuICAgICAgdGhpcy5saXN0ID0gbDtcbiAgICB9KVxuICApO1xuICBmaWx0ZXIkOiBPYnNlcnZhYmxlPElDcnVkRmlsdGVyPiA9IHRoaXMuc3RvcmUucGlwZShcbiAgICBzZWxlY3QoQ3J1ZFNlbGVjdG9ycy5nZXRDcnVkRmlsdGVyKHRoaXMuY29uZmlnLmVudGl0eSkpLFxuICAgIHRhcChmID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyID0gZjtcbiAgICB9KVxuICApO1xuICB0b3RhbENvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+ID0gdGhpcy5zdG9yZS5waXBlKFxuICAgIHNlbGVjdChDcnVkU2VsZWN0b3JzLmdldENydWRUb3RhbENvdW50KHRoaXMuY29uZmlnLmVudGl0eSkpXG4gICk7XG4gIGxpbmtzJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5zdG9yZS5waXBlKFxuICAgIHNlbGVjdChDcnVkU2VsZWN0b3JzLmdldENydWRMaW5rcyh0aGlzLmNvbmZpZy5lbnRpdHkpKVxuICApO1xuXG4gIGVycm9yJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5zdG9yZS5waXBlKFxuICAgICAgc2VsZWN0KENydWRTZWxlY3RvcnMuZ2V0Q3J1ZEVycm9yKHRoaXMuY29uZmlnLmVudGl0eSkpXG4gICk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PiwgcHJpdmF0ZSBjb25maWc6IENydWRDb25maWc8VD4pIHtcbiAgICBpZiAoTmdyeFN0b3JlU2VydmljZS5zdG9yZSkge1xuICAgICAgdGhpcy5zdG9yZSA9IE5ncnhTdG9yZVNlcnZpY2Uuc3RvcmU7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlKGl0ZW06IFQpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENydWRBY3Rpb25zLmNyZWF0ZSh0aGlzLmNvbmZpZy5lbnRpdHksIGl0ZW0pKTtcbiAgfVxuXG4gIGNyZWF0ZU1hbnkoaXRlbXM6IEFycmF5PFQ+LCBvcHRpb25zOiBJQ3J1ZENyZWF0ZU1hbnlPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChDcnVkQWN0aW9ucy5jcmVhdGVNYW55KHRoaXMuY29uZmlnLmVudGl0eSwgeyBpdGVtcywgb3B0aW9ucyB9KSk7XG4gIH1cblxuICByZWFkKGZpbHRlcjogSUNydWRGaWx0ZXIgPSBudWxsKTogdm9pZCB7XG4gICAgbGV0IGJhc2VRdWVyeSA9IFtdO1xuICAgIGlmICh0aGlzLmNvbmZpZy5iYXNlUXVlcnkpIHtcbiAgICAgIGJhc2VRdWVyeSA9IHRoaXMuY29uZmlnLmJhc2VRdWVyeTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsRmlsdGVyID0ge1xuICAgICAgLi4uKGZpbHRlciA/IGZpbHRlciA6IHt9KSxcbiAgICAgIHF1ZXJ5OiBmaWx0ZXIgJiYgZmlsdGVyLnF1ZXJ5ID8gZmlsdGVyLnF1ZXJ5IDogYmFzZVF1ZXJ5XG4gICAgfTtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMucmVhZCh0aGlzLmNvbmZpZy5lbnRpdHksIGZ1bGxGaWx0ZXIpKTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMuY2xlYXIodGhpcy5jb25maWcuZW50aXR5KSk7XG4gIH1cblxuICBzZWxlY3QoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMuc2VsZWN0KHRoaXMuY29uZmlnLmVudGl0eSwgaWQpKTtcbiAgfVxuXG4gIHVuc2VsZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMudW5zZWxlY3QodGhpcy5jb25maWcuZW50aXR5KSk7XG4gIH1cblxuICBtdWx0aVNlbGVjdChpdGVtczogQXJyYXk8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENydWRBY3Rpb25zLm11bHRpU2VsZWN0KHRoaXMuY29uZmlnLmVudGl0eSwgaXRlbXMpKTtcbiAgfVxuXG4gIHVwZGF0ZShpdGVtOiBUKTogdm9pZCB7XG4gICAgdGhpcy5nZXRTdG9yZSgpLmRpc3BhdGNoKENydWRBY3Rpb25zLnVwZGF0ZSh0aGlzLmNvbmZpZy5lbnRpdHksIGl0ZW0pKTtcbiAgfVxuXG4gIGV4cG9ydChmaWx0ZXI6IElDcnVkRmlsdGVyID0gbnVsbCwgZm9ybWF0ID0gbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0U3RvcmUoKS5kaXNwYXRjaChDcnVkQWN0aW9ucy5leHBvcnRMaXN0KHRoaXMuY29uZmlnLmVudGl0eSwgZmlsdGVyLCBmb3JtYXQpKTtcbiAgfVxuXG4gIHVwZGF0ZVBhcnRpYWwoaXRlbTogUGFydGlhbDxUPiAmIHsgaWQ6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgdGhpcy5nZXRTdG9yZSgpLmRpc3BhdGNoKENydWRBY3Rpb25zLnVwZGF0ZVBhcnRpYWwodGhpcy5jb25maWcuZW50aXR5LCBpdGVtKSk7XG4gIH1cblxuICB1cGRhdGVQYXJ0aWFsTWFueShpdGVtczogKFBhcnRpYWw8VD4gJiB7aWQ6IHN0cmluZ30pW10pIHtcbiAgICB0aGlzLmdldFN0b3JlKCkuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMudXBkYXRlUGFydGlhbE1hbnkodGhpcy5jb25maWcuZW50aXR5LCBpdGVtcykpO1xuICB9XG5cbiAgZGVsZXRlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmdldFN0b3JlKCkuZGlzcGF0Y2goQ3J1ZEFjdGlvbnMuZGVsZXRlSXRlbSh0aGlzLmNvbmZpZy5lbnRpdHksIGlkKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFN0b3JlKCk6IFN0b3JlIHtcbiAgICBpZiAoTmdyeFN0b3JlU2VydmljZS5zdG9yZSkgcmV0dXJuIE5ncnhTdG9yZVNlcnZpY2Uuc3RvcmU7XG5cbiAgICByZXR1cm4gdGhpcy5zdG9yZTtcbiAgfVxufVxuIl19
|