ngrx-entity-crud 12.0.6-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +259 -0
  2. package/bundles/ngrx-entity-crud.umd.js +1829 -0
  3. package/bundles/ngrx-entity-crud.umd.js.map +1 -0
  4. package/esm2015/lib/actions.js +88 -0
  5. package/esm2015/lib/base-crud-gql.service.js +71 -0
  6. package/esm2015/lib/base-crud.service.js +136 -0
  7. package/esm2015/lib/create_adapter.js +14 -0
  8. package/esm2015/lib/effect.js +467 -0
  9. package/esm2015/lib/entity_state.js +23 -0
  10. package/esm2015/lib/ibase-crud-service.js +2 -0
  11. package/esm2015/lib/j-ngrx-filter.js +133 -0
  12. package/esm2015/lib/models.js +17 -0
  13. package/esm2015/lib/reducer.js +353 -0
  14. package/esm2015/lib/state_selectors.js +56 -0
  15. package/esm2015/lib/utils.js +19 -0
  16. package/esm2015/ngrx-entity-crud.js +5 -0
  17. package/esm2015/public-api.js +7 -0
  18. package/fesm2015/ngrx-entity-crud.js +1367 -0
  19. package/fesm2015/ngrx-entity-crud.js.map +1 -0
  20. package/lib/actions.d.ts +5 -0
  21. package/lib/actions.d.ts.map +1 -0
  22. package/lib/base-crud-gql.service.d.ts +19 -0
  23. package/lib/base-crud-gql.service.d.ts.map +1 -0
  24. package/lib/base-crud.service.d.ts +34 -0
  25. package/lib/base-crud.service.d.ts.map +1 -0
  26. package/lib/create_adapter.d.ts +6 -0
  27. package/lib/create_adapter.d.ts.map +1 -0
  28. package/lib/effect.d.ts +132 -0
  29. package/lib/effect.d.ts.map +1 -0
  30. package/lib/entity_state.d.ts +9 -0
  31. package/lib/entity_state.d.ts.map +1 -0
  32. package/lib/ibase-crud-service.d.ts +13 -0
  33. package/lib/ibase-crud-service.d.ts.map +1 -0
  34. package/lib/j-ngrx-filter.d.ts +14 -0
  35. package/lib/j-ngrx-filter.d.ts.map +1 -0
  36. package/lib/models.d.ts +494 -0
  37. package/lib/models.d.ts.map +1 -0
  38. package/lib/reducer.d.ts +11 -0
  39. package/lib/reducer.d.ts.map +1 -0
  40. package/lib/state_selectors.d.ts +5 -0
  41. package/lib/state_selectors.d.ts.map +1 -0
  42. package/lib/utils.d.ts +8 -0
  43. package/lib/utils.d.ts.map +1 -0
  44. package/ngrx-entity-crud.d.ts +5 -0
  45. package/ngrx-entity-crud.d.ts.map +1 -0
  46. package/ngrx-entity-crud.metadata.json +1 -0
  47. package/package.json +41 -0
  48. package/public-api.d.ts +7 -0
  49. package/public-api.d.ts.map +1 -0
  50. package/schematics/auth/files/model/auth.ts +17 -0
  51. package/schematics/auth/files/store/auth-store/actions.ts +30 -0
  52. package/schematics/auth/files/store/auth-store/auth-mock.service.ts +95 -0
  53. package/schematics/auth/files/store/auth-store/auth-store.module.ts +34 -0
  54. package/schematics/auth/files/store/auth-store/auth.guard.ts +44 -0
  55. package/schematics/auth/files/store/auth-store/auth.service.ts +28 -0
  56. package/schematics/auth/files/store/auth-store/conf.ts +2 -0
  57. package/schematics/auth/files/store/auth-store/effects.ts +53 -0
  58. package/schematics/auth/files/store/auth-store/index.d.ts +13 -0
  59. package/schematics/auth/files/store/auth-store/index.ts +13 -0
  60. package/schematics/auth/files/store/auth-store/names.ts +3 -0
  61. package/schematics/auth/files/store/auth-store/reducer.ts +16 -0
  62. package/schematics/auth/files/store/auth-store/selectors.ts +51 -0
  63. package/schematics/auth/files/store/auth-store/state.ts +16 -0
  64. package/schematics/auth/files/views/login/components/logout-button/logout-button.component.ts +49 -0
  65. package/schematics/auth/files/views/login/login-main/login-main.component.html +25 -0
  66. package/schematics/auth/files/views/login/login-main/login-main.component.ts +57 -0
  67. package/schematics/auth/files/views/login/login-routing.module.ts +30 -0
  68. package/schematics/auth/files/views/login/login.module.ts +30 -0
  69. package/schematics/auth/index.d.ts +2 -0
  70. package/schematics/auth/index.js +77 -0
  71. package/schematics/auth/index.js.map +1 -0
  72. package/schematics/auth/schema.json +21 -0
  73. package/schematics/auth0/files/store/auth-store/actions.ts +21 -0
  74. package/schematics/auth0/files/store/auth-store/auth-store.module.ts +32 -0
  75. package/schematics/auth0/files/store/auth-store/auth.guard.ts +44 -0
  76. package/schematics/auth0/files/store/auth-store/authentication.service.ts +32 -0
  77. package/schematics/auth0/files/store/auth-store/conf.ts +2 -0
  78. package/schematics/auth0/files/store/auth-store/effects.ts +59 -0
  79. package/schematics/auth0/files/store/auth-store/index.d.ts +13 -0
  80. package/schematics/auth0/files/store/auth-store/index.ts +13 -0
  81. package/schematics/auth0/files/store/auth-store/login.component.ts +75 -0
  82. package/schematics/auth0/files/store/auth-store/names.ts +3 -0
  83. package/schematics/auth0/files/store/auth-store/profile.ts +12 -0
  84. package/schematics/auth0/files/store/auth-store/reducer.ts +23 -0
  85. package/schematics/auth0/files/store/auth-store/selectors.ts +24 -0
  86. package/schematics/auth0/files/store/auth-store/state.ts +11 -0
  87. package/schematics/auth0/index.d.ts +2 -0
  88. package/schematics/auth0/index.js +67 -0
  89. package/schematics/auth0/index.js.map +1 -0
  90. package/schematics/auth0/schema.json +21 -0
  91. package/schematics/collection.json +30 -0
  92. package/schematics/my-utility.d.ts +58 -0
  93. package/schematics/my-utility.js +257 -0
  94. package/schematics/my-utility.js.map +1 -0
  95. package/schematics/ng-add/files/root-store/index.d.ts +8 -0
  96. package/schematics/ng-add/files/root-store/index.ts +8 -0
  97. package/schematics/ng-add/files/root-store/root-reducer.ts +11 -0
  98. package/schematics/ng-add/files/root-store/root-store.module.ts +29 -0
  99. package/schematics/ng-add/files/root-store/router-store/actions.ts +27 -0
  100. package/schematics/ng-add/files/root-store/router-store/effects.ts +65 -0
  101. package/schematics/ng-add/files/root-store/router-store/index.d.ts +11 -0
  102. package/schematics/ng-add/files/root-store/router-store/index.ts +11 -0
  103. package/schematics/ng-add/files/root-store/router-store/pop-up-base.component.ts +83 -0
  104. package/schematics/ng-add/files/root-store/router-store/pop-up-base.module.ts +24 -0
  105. package/schematics/ng-add/files/root-store/router-store/reducer.ts +31 -0
  106. package/schematics/ng-add/files/root-store/router-store/router-store.module.ts +30 -0
  107. package/schematics/ng-add/files/root-store/router-store/selectors.ts +63 -0
  108. package/schematics/ng-add/files/root-store/router-store/state.ts +18 -0
  109. package/schematics/ng-add/files/root-store/selectors.ts +20 -0
  110. package/schematics/ng-add/files/root-store/slide-menu-store/actions.ts +11 -0
  111. package/schematics/ng-add/files/root-store/slide-menu-store/effects.ts +10 -0
  112. package/schematics/ng-add/files/root-store/slide-menu-store/index.d.ts +13 -0
  113. package/schematics/ng-add/files/root-store/slide-menu-store/index.ts +13 -0
  114. package/schematics/ng-add/files/root-store/slide-menu-store/names.ts +3 -0
  115. package/schematics/ng-add/files/root-store/slide-menu-store/operators.ts +24 -0
  116. package/schematics/ng-add/files/root-store/slide-menu-store/reducer.ts +8 -0
  117. package/schematics/ng-add/files/root-store/slide-menu-store/selectors.ts +41 -0
  118. package/schematics/ng-add/files/root-store/slide-menu-store/slide-menu-store.module.ts +27 -0
  119. package/schematics/ng-add/files/root-store/slide-menu-store/state.ts +14 -0
  120. package/schematics/ng-add/files/root-store/state.ts +5 -0
  121. package/schematics/ng-add/index.d.ts +2 -0
  122. package/schematics/ng-add/index.js +78 -0
  123. package/schematics/ng-add/index.js.map +1 -0
  124. package/schematics/ng-add/schema.json +22 -0
  125. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.html +52 -0
  126. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.ts +57 -0
  127. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.html +7 -0
  128. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.ts +50 -0
  129. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.html +15 -0
  130. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.ts +23 -0
  131. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__-routing.module.ts +36 -0
  132. package/schematics/section/files/ionic/__clazz@dasherize__/__clazz@dasherize__.module.ts +33 -0
  133. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.html +1 -0
  134. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.ts +16 -0
  135. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.html +1 -0
  136. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.ts +27 -0
  137. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.html +1 -0
  138. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.ts +18 -0
  139. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__-routing.module.ts +36 -0
  140. package/schematics/section/files/no-libs/__clazz@dasherize__/__clazz@dasherize__.module.ts +26 -0
  141. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.html +38 -0
  142. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-edit/__clazz@dasherize__-edit.component.ts +50 -0
  143. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.html +30 -0
  144. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-list/__clazz@dasherize__-list.component.ts +101 -0
  145. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.html +12 -0
  146. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-main/__clazz@dasherize__-main.component.ts +21 -0
  147. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__-routing.module.ts +37 -0
  148. package/schematics/section/files/primeng/__clazz@dasherize__/__clazz@dasherize__.module.ts +49 -0
  149. package/schematics/section/files/primeng/__clazz@dasherize__/components/button-create-many-test-__clazz@dasherize__.component.ts +46 -0
  150. package/schematics/section/files/primeng/__clazz@dasherize__/components/button-delete-__clazz@dasherize__.component.ts +35 -0
  151. package/schematics/section/files/primeng/__clazz@dasherize__/components/button-edit-many-test-__clazz@dasherize__.component.ts +45 -0
  152. package/schematics/section/files/primeng/__clazz@dasherize__/components/button-new-__clazz@dasherize__.component.ts +45 -0
  153. package/schematics/section/index.d.ts +2 -0
  154. package/schematics/section/index.js +56 -0
  155. package/schematics/section/index.js.map +1 -0
  156. package/schematics/section/schema.json +39 -0
  157. package/schematics/store/files/base-model/__clazz@dasherize__.ts +8 -0
  158. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__-store.module.ts +26 -0
  159. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.actions.ts +9 -0
  160. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.effects.ts +11 -0
  161. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.names.ts +3 -0
  162. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.reducer.ts +8 -0
  163. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.selectors.ts +18 -0
  164. package/schematics/store/files/base-store/__clazz@dasherize__-store/__clazz@dasherize__.state.ts +6 -0
  165. package/schematics/store/files/base-store/__clazz@dasherize__-store/index.d.ts +13 -0
  166. package/schematics/store/files/base-store/__clazz@dasherize__-store/index.ts +13 -0
  167. package/schematics/store/files/crud-graphql/__clazz@dasherize__-store/__clazz@dasherize__.criteria.ts +39 -0
  168. package/schematics/store/files/crud-graphql/__clazz@dasherize__-store/__clazz@dasherize__.graphql +34 -0
  169. package/schematics/store/files/crud-model/__clazz@dasherize__.ts +8 -0
  170. package/schematics/store/files/crud-service/__clazz@dasherize__.service.ts +11 -0
  171. package/schematics/store/files/crud-service-graphql/__clazz@dasherize__.service.ts +16 -0
  172. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__-store.module.ts +26 -0
  173. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.actions.ts +55 -0
  174. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.effects.ts +90 -0
  175. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.names.ts +3 -0
  176. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.reducer.ts +103 -0
  177. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.selectors.ts +26 -0
  178. package/schematics/store/files/crud-store/__clazz@dasherize__-store/__clazz@dasherize__.state.ts +11 -0
  179. package/schematics/store/files/crud-store/__clazz@dasherize__-store/index.d.ts +15 -0
  180. package/schematics/store/files/crud-store/__clazz@dasherize__-store/index.ts +15 -0
  181. package/schematics/store/index.d.ts +2 -0
  182. package/schematics/store/index.js +100 -0
  183. package/schematics/store/index.js.map +1 -0
  184. package/schematics/store/schema.json +45 -0
@@ -0,0 +1,467 @@
1
+ import { ofType } from '@ngrx/effects';
2
+ import { from } from 'rxjs';
3
+ import { catchError, concatMap, map, repeat, switchMap } from 'rxjs/operators';
4
+ export const searchCall = (service) => {
5
+ return input$ => input$.pipe(switchMap(payload => service.search(payload).pipe(map((response) => ({ response, payload })))));
6
+ };
7
+ export const searchResponse = (actions, optEffect) => {
8
+ return input$ => input$.pipe(switchMap(({ response, payload }) => {
9
+ const result = [];
10
+ if (response.hasError) {
11
+ result.push(actions.SearchFailure({ error: response.message }));
12
+ if (payload.onFault) {
13
+ result.push(...payload.onFault);
14
+ }
15
+ }
16
+ else {
17
+ result.push(actions.SearchSuccess({ items: response.data, request: payload }));
18
+ result.push(actions.Filters({ filters: {} }));
19
+ if (payload.onResult) {
20
+ const onResults = payload.onResult.map(a => a.newAction ? a.newAction(response, payload) : a);
21
+ result.push(...onResults);
22
+ }
23
+ }
24
+ if ((optEffect || {}).dispatchResponse || payload.dispatchResponse) {
25
+ result.push(actions.Response({
26
+ actionType: payload.type,
27
+ request: payload,
28
+ response
29
+ }));
30
+ }
31
+ return result;
32
+ }));
33
+ };
34
+ export const searchCatchError = (actions) => {
35
+ return input$ => input$.pipe(catchError((error, caught) => {
36
+ const response = [];
37
+ response.push(actions.SearchFailure({ error }));
38
+ response.push(actions.Response({
39
+ actionType: 'Failure',
40
+ request: null,
41
+ response: { hasError: true, message: error.message, data: null }
42
+ }));
43
+ return from(response);
44
+ }));
45
+ };
46
+ export const searchRequest = (actions, service, optEffect) => {
47
+ return input$ => input$.pipe(ofType(actions.SearchRequest), searchCall(service), searchResponse(actions, optEffect), searchCatchError(actions), repeat());
48
+ };
49
+ /**
50
+ * @deprecated use:
51
+ *
52
+ * actions$.pipe(
53
+ * searchRequest(actions, service, clazz, optEffect)
54
+ * );
55
+ *
56
+ * or:
57
+ *
58
+ * actions$.pipe(
59
+ * ofType(actions.SearchRequest),
60
+ * searchCall(service),
61
+ * searchResponse(actions, optEffect),
62
+ * searchCatchError(actions),
63
+ * repeat()
64
+ * );
65
+ *
66
+ */
67
+ export const searchRequestEffect = (actions$, actions, service, optEffect) => actions$.pipe(searchRequest(actions, service, optEffect));
68
+ export const deleteCall = (service) => {
69
+ return input$ => input$.pipe(concatMap(payload => service.delete(payload).pipe(map((response) => ({ response, payload })))));
70
+ };
71
+ export const deleteResponse = (actions, clazz, optEffect) => {
72
+ return input$ => input$.pipe(concatMap(({ response, payload }) => {
73
+ const result = [];
74
+ if (response.hasError) {
75
+ result.push(actions.DeleteFailure({ error: response.message }));
76
+ if (payload.onFault) {
77
+ result.push(...payload.onFault);
78
+ }
79
+ }
80
+ else {
81
+ if (!clazz.selectId) {
82
+ throw Error('the selectId method is not present in the managed entity.');
83
+ }
84
+ const id = clazz.selectId(payload.mutationParams);
85
+ result.push(actions.DeleteSuccess({ id }));
86
+ if (payload.onResult) {
87
+ const onResults = payload.onResult.map(a => a.newAction ? a.newAction(response, payload) : a);
88
+ result.push(...onResults);
89
+ }
90
+ }
91
+ if ((optEffect || {}).dispatchResponse || payload.dispatchResponse) {
92
+ result.push(actions.Response({
93
+ actionType: payload.type,
94
+ request: payload,
95
+ response
96
+ }));
97
+ }
98
+ return result;
99
+ }));
100
+ };
101
+ export const deleteCatchError = (actions) => {
102
+ return input$ => input$.pipe(catchError((error, caught) => {
103
+ const response = [];
104
+ response.push(actions.EditFailure({ error }));
105
+ response.push(actions.Response({
106
+ actionType: 'Failure',
107
+ request: null,
108
+ response: { hasError: true, message: error.message, data: null }
109
+ }));
110
+ return from(response);
111
+ }));
112
+ };
113
+ export const deleteRequest = (actions, service, clazz, optEffect) => {
114
+ return input$ => input$.pipe(ofType(actions.DeleteRequest), deleteCall(service), deleteResponse(actions, clazz, optEffect), deleteCatchError(actions), repeat());
115
+ };
116
+ /**
117
+ * @deprecated use:
118
+ *
119
+ * actions$.pipe(
120
+ * deleteRequest(actions, service, clazz, optEffect)
121
+ * );
122
+ *
123
+ * or:
124
+ *
125
+ * actions$.pipe(
126
+ * ofType(actions.DeleteRequest),
127
+ * deleteCall(service),
128
+ * deleteResponse(actions, clazz, optEffect),
129
+ * deleteCatchError(actions),
130
+ * repeat()
131
+ * );
132
+ *
133
+ */
134
+ export const deleteRequestEffect = (actions$, actions, service, clazz, optEffect) => actions$.pipe(deleteRequest(actions, service, clazz, optEffect));
135
+ export const deleteManyCall = (service) => {
136
+ return input$ => input$.pipe(concatMap(payload => service.deleteMany((payload)).pipe(map((response) => ({ response, payload })))));
137
+ };
138
+ export const deleteManyResponse = (actions, clazz, optEffect) => {
139
+ return input$ => input$.pipe(concatMap(({ response, payload }) => {
140
+ const result = [];
141
+ if (response.hasError) {
142
+ result.push(actions.DeleteManyFailure({ error: response.message }));
143
+ if (payload.onFault) {
144
+ result.push(...payload.onFault);
145
+ }
146
+ }
147
+ else {
148
+ if (!clazz.selectId) {
149
+ throw Error('the selectId method is not present in the managed entity.');
150
+ }
151
+ const ids = payload.mutationParams.map(id => clazz.selectId(id));
152
+ result.push(actions.DeleteManySuccess({ ids }));
153
+ if (payload.onResult) {
154
+ const onResults = payload.onResult.map(a => a.newAction ? a.newAction(response, payload) : a);
155
+ result.push(...onResults);
156
+ }
157
+ }
158
+ if ((optEffect || {}).dispatchResponse || payload.dispatchResponse) {
159
+ result.push(actions.Response({
160
+ actionType: payload.type,
161
+ request: payload,
162
+ response
163
+ }));
164
+ }
165
+ return result;
166
+ }));
167
+ };
168
+ export const deleteManyCatchError = (actions) => {
169
+ return input$ => input$.pipe(catchError((error, caught) => {
170
+ const response = [];
171
+ response.push(actions.DeleteManyFailure({ error }));
172
+ response.push(actions.Response({
173
+ actionType: 'Failure',
174
+ request: null,
175
+ response: { hasError: true, message: error.message, data: null }
176
+ }));
177
+ return from(response);
178
+ }));
179
+ };
180
+ export const deleteManyRequest = (actions, service, clazz, optEffect) => {
181
+ return input$ => input$.pipe(ofType(actions.DeleteManyRequest), deleteManyCall(service), deleteManyResponse(actions, clazz, optEffect), deleteManyCatchError(actions), repeat());
182
+ };
183
+ export const createCall = (service) => {
184
+ return input$ => input$.pipe(concatMap(payload => service.create(payload).pipe(map((response) => ({ response, payload })))));
185
+ };
186
+ export const createResponse = (actions, optEffect) => {
187
+ return input$ => input$.pipe(concatMap(({ response, payload }) => {
188
+ const result = [];
189
+ if (response.hasError) {
190
+ result.push(actions.CreateFailure({ error: response.message }));
191
+ if (payload.onFault) {
192
+ result.push(...payload.onFault);
193
+ }
194
+ }
195
+ else {
196
+ const item = response.data;
197
+ result.push(actions.CreateSuccess({ item }));
198
+ if (payload.onResult) {
199
+ const onResults = payload.onResult.map(a => a.newAction ? a.newAction(response, payload) : a);
200
+ result.push(...onResults);
201
+ }
202
+ }
203
+ if ((optEffect || {}).dispatchResponse || payload.dispatchResponse) {
204
+ result.push(actions.Response({
205
+ actionType: payload.type,
206
+ request: payload,
207
+ response
208
+ }));
209
+ }
210
+ return result;
211
+ }));
212
+ };
213
+ export const createCatchError = (actions) => {
214
+ return input$ => input$.pipe(catchError((error, caught) => {
215
+ const response = [];
216
+ response.push(actions.CreateFailure({ error }));
217
+ response.push(actions.Response({
218
+ actionType: 'Failure',
219
+ request: null,
220
+ response: { hasError: true, message: error.message, data: null }
221
+ }));
222
+ return from(response);
223
+ }));
224
+ };
225
+ export const createRequest = (actions, service, optEffect) => {
226
+ return input$ => input$.pipe(ofType(actions.CreateRequest), createCall(service), createResponse(actions, optEffect), createCatchError(actions), repeat());
227
+ };
228
+ /**
229
+ * @deprecated use:
230
+ *
231
+ * actions$.pipe(
232
+ * createRequest(actions, service, optEffect)
233
+ * );
234
+ *
235
+ * or:
236
+ *
237
+ * actions$.pipe(
238
+ * ofType(actions.DeleteRequest),
239
+ * createCall(service),
240
+ * createResponse(actions, optEffect),
241
+ * createCatchError(actions),
242
+ * repeat()
243
+ * );
244
+ *
245
+ */
246
+ export const createRequestEffect = (actions$, actions, service, optEffect) => actions$.pipe(createRequest(actions, service, optEffect));
247
+ export const createManyCall = (service) => {
248
+ return input$ => input$.pipe(concatMap(payload => service.createMany(payload).pipe(map((response) => ({ response, payload })))));
249
+ };
250
+ export const createManyResponse = (actions, optEffect) => {
251
+ return input$ => input$.pipe(concatMap(({ response, payload }) => {
252
+ const result = [];
253
+ if (response.hasError) {
254
+ result.push(actions.CreateManyFailure({ error: response.message }));
255
+ if (payload.onFault) {
256
+ result.push(...payload.onFault);
257
+ }
258
+ }
259
+ else {
260
+ const items = response.data;
261
+ result.push(actions.CreateManySuccess({ items }));
262
+ if (payload.onResult) {
263
+ const onResults = payload.onResult.map(a => a.newAction ? a.newAction(response, payload) : a);
264
+ result.push(...onResults);
265
+ }
266
+ }
267
+ if ((optEffect || {}).dispatchResponse || payload.dispatchResponse) {
268
+ result.push(actions.Response({
269
+ actionType: payload.type,
270
+ request: payload,
271
+ response
272
+ }));
273
+ }
274
+ return result;
275
+ }));
276
+ };
277
+ export const createManyCatchError = (actions) => {
278
+ return input$ => input$.pipe(catchError((error, caught) => {
279
+ const response = [];
280
+ response.push(actions.EditManyFailure({ error }));
281
+ response.push(actions.Response({
282
+ actionType: 'Failure',
283
+ request: null,
284
+ response: { hasError: true, message: error.message, data: null }
285
+ }));
286
+ return from(response);
287
+ }));
288
+ };
289
+ export const createManyRequest = (actions, service, optEffect) => {
290
+ return input$ => input$.pipe(ofType(actions.CreateManyRequest), createManyCall(service), createManyResponse(actions, optEffect), createManyCatchError(actions), repeat());
291
+ };
292
+ export const editCall = (service) => {
293
+ return input$ => input$.pipe(concatMap(payload => service.update(payload).pipe(map((response) => ({ response, payload })))));
294
+ };
295
+ export const editResponse = (actions, optEffect) => {
296
+ return input$ => input$.pipe(concatMap(({ response, payload }) => {
297
+ const result = [];
298
+ if (response.hasError) {
299
+ result.push(actions.EditFailure({ error: response.message }));
300
+ if (payload.onFault) {
301
+ result.push(...payload.onFault);
302
+ }
303
+ }
304
+ else {
305
+ const item = response.data;
306
+ result.push(actions.EditSuccess({ item }));
307
+ if (payload.onResult) {
308
+ const onResults = payload.onResult.map(a => a.newAction ? a.newAction(response, payload) : a);
309
+ result.push(...onResults);
310
+ }
311
+ }
312
+ if ((optEffect || {}).dispatchResponse || payload.dispatchResponse) {
313
+ result.push(actions.Response({
314
+ actionType: payload.type,
315
+ request: payload,
316
+ response
317
+ }));
318
+ }
319
+ return result;
320
+ }));
321
+ };
322
+ export const editCatchError = (actions) => {
323
+ return input$ => input$.pipe(catchError((error, caught) => {
324
+ const response = [];
325
+ response.push(actions.EditFailure({ error }));
326
+ response.push(actions.Response({
327
+ actionType: 'Failure',
328
+ request: null,
329
+ response: { hasError: true, message: error.message, data: null }
330
+ }));
331
+ return from(response);
332
+ }));
333
+ };
334
+ export const editRequest = (actions, service, optEffect) => {
335
+ return input$ => input$.pipe(ofType(actions.EditRequest), editCall(service), editResponse(actions, optEffect), editCatchError(actions), repeat());
336
+ };
337
+ /**
338
+ * @deprecated use:
339
+ *
340
+ * actions$.pipe(
341
+ * editRequest(actions, service, optEffect)
342
+ * );
343
+ *
344
+ * or:
345
+ *
346
+ * actions$.pipe(
347
+ * ofType(actions.EditRequest),
348
+ * editCall(service),
349
+ * editResponse(actions, optEffect),
350
+ * editCatchError(actions),
351
+ * repeat()
352
+ * );
353
+ *
354
+ */
355
+ export const editRequestEffect = (actions$, actions, service, optEffect) => actions$.pipe(editRequest(actions, service, optEffect));
356
+ export const editManyCall = (service) => {
357
+ return input$ => input$.pipe(concatMap(payload => service.updateMany(payload).pipe(map((response) => ({ response, payload })))));
358
+ };
359
+ export const editManyResponse = (actions, optEffect) => {
360
+ return input$ => input$.pipe(concatMap(({ response, payload }) => {
361
+ const result = [];
362
+ if (response.hasError) {
363
+ result.push(actions.EditManyFailure({ error: response.message }));
364
+ if (payload.onFault) {
365
+ result.push(...payload.onFault);
366
+ }
367
+ }
368
+ else {
369
+ const items = response.data;
370
+ result.push(actions.EditManySuccess({ items }));
371
+ if (payload.onResult) {
372
+ const onResults = payload.onResult.map(a => a.newAction ? a.newAction(response, payload) : a);
373
+ result.push(...onResults);
374
+ }
375
+ }
376
+ if ((optEffect || {}).dispatchResponse || payload.dispatchResponse) {
377
+ result.push(actions.Response({
378
+ actionType: payload.type,
379
+ request: payload,
380
+ response
381
+ }));
382
+ }
383
+ return result;
384
+ }));
385
+ };
386
+ export const editManyCatchError = (actions) => {
387
+ return input$ => input$.pipe(catchError((error, caught) => {
388
+ const response = [];
389
+ response.push(actions.EditManyFailure({ error }));
390
+ response.push(actions.Response({
391
+ actionType: 'Failure',
392
+ request: null,
393
+ response: { hasError: true, message: error.message, data: null }
394
+ }));
395
+ return from(response);
396
+ }));
397
+ };
398
+ export const editManyRequest = (actions, service, optEffect) => {
399
+ return input$ => input$.pipe(ofType(actions.EditManyRequest), editManyCall(service), editManyResponse(actions, optEffect), editManyCatchError(actions), repeat());
400
+ };
401
+ export const selectCall = (service) => {
402
+ return input$ => input$.pipe(concatMap(payload => service.select(payload).pipe(
403
+ // @ts-ignore
404
+ map((response) => ({ response, payload })))));
405
+ };
406
+ export const selectResponse = (actions, optEffect) => {
407
+ return input$ => input$.pipe(concatMap(({ response, payload }) => {
408
+ const result = [];
409
+ if (response.hasError) {
410
+ result.push(actions.SelectFailure({ error: response.message }));
411
+ if (payload.onFault) {
412
+ result.push(...payload.onFault);
413
+ }
414
+ }
415
+ else {
416
+ const item = response.data;
417
+ result.push(actions.SelectSuccess({ item }));
418
+ if (payload.onResult) {
419
+ const onResults = payload.onResult.map(a => a.newAction ? a.newAction(response, payload) : a);
420
+ result.push(...onResults);
421
+ }
422
+ }
423
+ if ((optEffect || {}).dispatchResponse || payload.dispatchResponse) {
424
+ result.push(actions.Response({
425
+ actionType: payload.type,
426
+ request: payload,
427
+ response
428
+ }));
429
+ }
430
+ return result;
431
+ }));
432
+ };
433
+ export const selectCatchError = (actions) => {
434
+ return input$ => input$.pipe(catchError((error, caught) => {
435
+ const response = [];
436
+ response.push(actions.EditFailure({ error }));
437
+ response.push(actions.Response({
438
+ actionType: 'Failure',
439
+ request: null,
440
+ response: { hasError: true, message: error.message, data: null }
441
+ }));
442
+ return from(response);
443
+ }));
444
+ };
445
+ export const selectRequest = (actions, service, optEffect) => {
446
+ return input$ => input$.pipe(ofType(actions.SelectRequest), selectCall(service), selectResponse(actions, optEffect), selectCatchError(actions), repeat());
447
+ };
448
+ /**
449
+ * @deprecated use:
450
+ *
451
+ * actions$.pipe(
452
+ * selectRequest(actions, service, clazz, optEffect)
453
+ * );
454
+ *
455
+ * or:
456
+ *
457
+ * actions$.pipe(
458
+ * ofType(actions.SelectRequest),
459
+ * selectCall(service),
460
+ * selectResponse(actions, optEffect),
461
+ * selectCatchError(actions),
462
+ * repeat()
463
+ * );
464
+ *
465
+ */
466
+ export const selectRequestEffect = (actions$, actions, service, optEffect) => actions$.pipe(selectRequest(actions, service, optEffect));
467
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdyeC1lbnRpdHktY3J1ZC9zcmMvbGliL2VmZmVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXJDLE9BQU8sRUFBQyxJQUFJLEVBQTJCLE1BQU0sTUFBTSxDQUFDO0FBRXBELE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHN0UsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUksT0FBNEIsRUFBaUMsRUFBRTtJQUMzRixPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDMUIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQy9DLEdBQUcsQ0FBQyxDQUFDLFFBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDLENBQ0gsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFJLE9BQW1CLEVBQUUsU0FBcUIsRUFBaUMsRUFBRTtJQUM3RyxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDMUIsU0FBUyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLEVBQUUsRUFBRTtRQUM5QixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsT0FB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QUMsRUFDbkIsY0FBYyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFDbEMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQ3pCLE1BQU0sRUFBRSxDQUNULENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFJLFFBQVEsRUFBRSxPQUFtQixFQUFFLE9BQTRCLEVBQUUsU0FBcUIsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDekksYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge29mVHlwZX0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XHJcbmltcG9ydCB7QWN0aW9ucywgSUNyaXRlcmlhLCBPcHRFZmZlY3QsIE9wdFJlcXVlc3QsIFJlc3BvbnNlfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7ZnJvbSwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtBY3Rpb259IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHtjYXRjaEVycm9yLCBjb25jYXRNYXAsIG1hcCwgcmVwZWF0LCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtJQmFzZUNydWRTZXJ2aWNlfSBmcm9tICcuL2liYXNlLWNydWQtc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3Qgc2VhcmNoQ2FsbCA9IDxUPihzZXJ2aWNlOiBJQmFzZUNydWRTZXJ2aWNlPFQ+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPGFueT4gPT4gey8vIFRPRE86IHRpcGl6emFyZSBhbnlcclxuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKFxyXG4gICAgc3dpdGNoTWFwKHBheWxvYWQgPT4gc2VydmljZS5zZWFyY2gocGF5bG9hZCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogUmVzcG9uc2U8VFtdPikgPT4gKHtyZXNwb25zZSwgcGF5bG9hZH0pKVxyXG4gICAgKSlcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNlYXJjaFJlc3BvbnNlID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4sIG9wdEVmZmVjdD86IE9wdEVmZmVjdCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIHN3aXRjaE1hcCgoe3Jlc3BvbnNlLCBwYXlsb2FkfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogQWN0aW9uW10gPSBbXTtcclxuICAgICAgICBpZiAocmVzcG9uc2UuaGFzRXJyb3IpIHtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKGFjdGlvbnMuU2VhcmNoRmFpbHVyZSh7ZXJyb3I6IHJlc3BvbnNlLm1lc3NhZ2V9KSk7XHJcbiAgICAgICAgICBpZiAocGF5bG9hZC5vbkZhdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnBheWxvYWQub25GYXVsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKGFjdGlvbnMuU2VhcmNoU3VjY2Vzcyh7aXRlbXM6IHJlc3BvbnNlLmRhdGEsIHJlcXVlc3Q6IHBheWxvYWR9KSk7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChhY3Rpb25zLkZpbHRlcnMoe2ZpbHRlcnM6IHt9fSkpO1xyXG4gICAgICAgICAgaWYgKHBheWxvYWQub25SZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc3Qgb25SZXN1bHRzID0gKHBheWxvYWQub25SZXN1bHQgYXMgQWN0aW9uW10pLm1hcChhID0+IChhIGFzIGFueSkubmV3QWN0aW9uID8gKGEgYXMgYW55KS5uZXdBY3Rpb24ocmVzcG9uc2UsIHBheWxvYWQpIDogYSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLm9uUmVzdWx0cyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKG9wdEVmZmVjdCB8fCB7fSkuZGlzcGF0Y2hSZXNwb25zZSB8fCBwYXlsb2FkLmRpc3BhdGNoUmVzcG9uc2UpIHtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKGFjdGlvbnMuUmVzcG9uc2Uoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlOiBwYXlsb2FkLnR5cGUsXHJcbiAgICAgICAgICAgIHJlcXVlc3Q6IHBheWxvYWQsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICApXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZWFyY2hDYXRjaEVycm9yID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248YW55PiA9PiB7IC8vIFRPRE86IHRpcGl6emFyZSBhbnlcclxuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKFxyXG4gICAgY2F0Y2hFcnJvcigoZXJyb3IsIGNhdWdodCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gW107XHJcbiAgICAgICAgcmVzcG9uc2UucHVzaChhY3Rpb25zLlNlYXJjaEZhaWx1cmUoe2Vycm9yfSkpO1xyXG4gICAgICAgIHJlc3BvbnNlLnB1c2goYWN0aW9ucy5SZXNwb25zZSh7XHJcbiAgICAgICAgICBhY3Rpb25UeXBlOiAnRmFpbHVyZScsXHJcbiAgICAgICAgICByZXF1ZXN0OiBudWxsLFxyXG4gICAgICAgICAgcmVzcG9uc2U6IHtoYXNFcnJvcjogdHJ1ZSwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgZGF0YTogbnVsbH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgcmV0dXJuIGZyb20ocmVzcG9uc2UpO1xyXG4gICAgICB9XHJcbiAgICApLFxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgc2VhcmNoUmVxdWVzdCA9IDxUPihhY3Rpb25zOiBBY3Rpb25zPFQ+LCBzZXJ2aWNlOiBJQmFzZUNydWRTZXJ2aWNlPFQ+LCBvcHRFZmZlY3Q/OiBPcHRFZmZlY3QpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248QWN0aW9uPiA9PiB7XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIG9mVHlwZShhY3Rpb25zLlNlYXJjaFJlcXVlc3QpLFxyXG4gICAgc2VhcmNoQ2FsbChzZXJ2aWNlKSxcclxuICAgIHNlYXJjaFJlc3BvbnNlKGFjdGlvbnMsIG9wdEVmZmVjdCksXHJcbiAgICBzZWFyY2hDYXRjaEVycm9yKGFjdGlvbnMpLFxyXG4gICAgcmVwZWF0KClcclxuICApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIHVzZTpcclxuICpcclxuICogYWN0aW9ucyQucGlwZShcclxuICogICBzZWFyY2hSZXF1ZXN0KGFjdGlvbnMsIHNlcnZpY2UsIGNsYXp6LCBvcHRFZmZlY3QpXHJcbiAqICk7XHJcbiAqXHJcbiAqIG9yOlxyXG4gKlxyXG4gKiBhY3Rpb25zJC5waXBlKFxyXG4gKiAgb2ZUeXBlKGFjdGlvbnMuU2VhcmNoUmVxdWVzdCksXHJcbiAqICBzZWFyY2hDYWxsKHNlcnZpY2UpLFxyXG4gKiAgc2VhcmNoUmVzcG9uc2UoYWN0aW9ucywgb3B0RWZmZWN0KSxcclxuICogIHNlYXJjaENhdGNoRXJyb3IoYWN0aW9ucyksXHJcbiAqICByZXBlYXQoKVxyXG4gKiAgKTtcclxuICpcclxuICovXHJcblxyXG5leHBvcnQgY29uc3Qgc2VhcmNoUmVxdWVzdEVmZmVjdCA9IDxUPihhY3Rpb25zJCwgYWN0aW9uczogQWN0aW9uczxUPiwgc2VydmljZTogSUJhc2VDcnVkU2VydmljZTxUPiwgb3B0RWZmZWN0PzogT3B0RWZmZWN0KSA9PiBhY3Rpb25zJC5waXBlKFxyXG4gIHNlYXJjaFJlcXVlc3QoYWN0aW9ucywgc2VydmljZSwgb3B0RWZmZWN0KVxyXG4pO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZUNhbGwgPSA8VD4oc2VydmljZTogSUJhc2VDcnVkU2VydmljZTxUPik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcChwYXlsb2FkID0+IHNlcnZpY2UuZGVsZXRlKChwYXlsb2FkIGFzIE9wdFJlcXVlc3Q8VD4pKS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBSZXNwb25zZTxzdHJpbmc+KSA9PiAoe3Jlc3BvbnNlLCBwYXlsb2FkfSkpXHJcbiAgICApKSxcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZVJlc3BvbnNlID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4sIGNsYXp6OiBhbnksIG9wdEVmZmVjdD86IE9wdEVmZmVjdCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcCgoe3Jlc3BvbnNlLCBwYXlsb2FkfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNFcnJvcikge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9ucy5EZWxldGVGYWlsdXJlKHtlcnJvcjogcmVzcG9uc2UubWVzc2FnZX0pKTtcclxuICAgICAgICAgIGlmIChwYXlsb2FkLm9uRmF1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4ucGF5bG9hZC5vbkZhdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFjbGF6ei5zZWxlY3RJZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcigndGhlIHNlbGVjdElkIG1ldGhvZCBpcyBub3QgcHJlc2VudCBpbiB0aGUgbWFuYWdlZCBlbnRpdHkuJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBpZCA9IGNsYXp6LnNlbGVjdElkKHBheWxvYWQubXV0YXRpb25QYXJhbXMpO1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9ucy5EZWxldGVTdWNjZXNzKHtpZH0pKTtcclxuICAgICAgICAgIGlmIChwYXlsb2FkLm9uUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9uUmVzdWx0cyA9IChwYXlsb2FkLm9uUmVzdWx0IGFzIEFjdGlvbltdKS5tYXAoYSA9PiAoYSBhcyBhbnkpLm5ld0FjdGlvbiA/IChhIGFzIGFueSkubmV3QWN0aW9uKHJlc3BvbnNlLCBwYXlsb2FkKSA6IGEpO1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5vblJlc3VsdHMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChvcHRFZmZlY3QgfHwge30pLmRpc3BhdGNoUmVzcG9uc2UgfHwgcGF5bG9hZC5kaXNwYXRjaFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChhY3Rpb25zLlJlc3BvbnNlKHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZTogcGF5bG9hZC50eXBlLFxyXG4gICAgICAgICAgICByZXF1ZXN0OiBwYXlsb2FkLFxyXG4gICAgICAgICAgICByZXNwb25zZVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgKSxcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZUNhdGNoRXJyb3IgPSA8VD4oYWN0aW9uczogQWN0aW9uczxUPik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNhdGNoRXJyb3IoKGVycm9yLCBjYXVnaHQpID0+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IFtdO1xyXG4gICAgICAgIHJlc3BvbnNlLnB1c2goYWN0aW9ucy5FZGl0RmFpbHVyZSh7ZXJyb3J9KSk7XHJcbiAgICAgICAgcmVzcG9uc2UucHVzaChhY3Rpb25zLlJlc3BvbnNlKHtcclxuICAgICAgICAgIGFjdGlvblR5cGU6ICdGYWlsdXJlJyxcclxuICAgICAgICAgIHJlcXVlc3Q6IG51bGwsXHJcbiAgICAgICAgICByZXNwb25zZToge2hhc0Vycm9yOiB0cnVlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBkYXRhOiBudWxsfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICByZXR1cm4gZnJvbShyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIClcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZVJlcXVlc3QgPSA8VD4oYWN0aW9uczogQWN0aW9uczxUPiwgc2VydmljZTogSUJhc2VDcnVkU2VydmljZTxUPiwgY2xheno6IGFueSwgb3B0RWZmZWN0PzogT3B0RWZmZWN0KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPGFueT4gPT4gey8vIFRPRE86IHRpcGl6emFyZSBhbnlcclxuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKFxyXG4gICAgb2ZUeXBlKGFjdGlvbnMuRGVsZXRlUmVxdWVzdCksXHJcbiAgICBkZWxldGVDYWxsKHNlcnZpY2UpLFxyXG4gICAgZGVsZXRlUmVzcG9uc2UoYWN0aW9ucywgY2xhenosIG9wdEVmZmVjdCksXHJcbiAgICBkZWxldGVDYXRjaEVycm9yKGFjdGlvbnMpLFxyXG4gICAgcmVwZWF0KClcclxuICApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIHVzZTpcclxuICpcclxuICogYWN0aW9ucyQucGlwZShcclxuICogICBkZWxldGVSZXF1ZXN0KGFjdGlvbnMsIHNlcnZpY2UsIGNsYXp6LCBvcHRFZmZlY3QpXHJcbiAqICk7XHJcbiAqXHJcbiAqIG9yOlxyXG4gKlxyXG4gKiBhY3Rpb25zJC5waXBlKFxyXG4gKiAgb2ZUeXBlKGFjdGlvbnMuRGVsZXRlUmVxdWVzdCksXHJcbiAqICBkZWxldGVDYWxsKHNlcnZpY2UpLFxyXG4gKiAgZGVsZXRlUmVzcG9uc2UoYWN0aW9ucywgY2xhenosIG9wdEVmZmVjdCksXHJcbiAqICBkZWxldGVDYXRjaEVycm9yKGFjdGlvbnMpLFxyXG4gKiAgcmVwZWF0KClcclxuICogICk7XHJcbiAqXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZGVsZXRlUmVxdWVzdEVmZmVjdCA9IDxUPihhY3Rpb25zJCwgYWN0aW9uczogQWN0aW9uczxUPiwgc2VydmljZTogSUJhc2VDcnVkU2VydmljZTxUPiwgY2xheno6IGFueSwgb3B0RWZmZWN0PzogT3B0RWZmZWN0KSA9PiBhY3Rpb25zJC5waXBlKFxyXG4gIGRlbGV0ZVJlcXVlc3QoYWN0aW9ucywgc2VydmljZSwgY2xhenosIG9wdEVmZmVjdClcclxuKTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZGVsZXRlTWFueUNhbGwgPSA8VD4oc2VydmljZTogSUJhc2VDcnVkU2VydmljZTxUPik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcChwYXlsb2FkID0+IHNlcnZpY2UuZGVsZXRlTWFueSgocGF5bG9hZCkpLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IFJlc3BvbnNlPHN0cmluZz4pID0+ICh7cmVzcG9uc2UsIHBheWxvYWR9KSlcclxuICAgICkpLFxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZGVsZXRlTWFueVJlc3BvbnNlID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4sIGNsYXp6OiBhbnksIG9wdEVmZmVjdD86IE9wdEVmZmVjdCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcCgoe3Jlc3BvbnNlLCBwYXlsb2FkfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNFcnJvcikge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9ucy5EZWxldGVNYW55RmFpbHVyZSh7ZXJyb3I6IHJlc3BvbnNlLm1lc3NhZ2V9KSk7XHJcbiAgICAgICAgICBpZiAocGF5bG9hZC5vbkZhdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnBheWxvYWQub25GYXVsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghY2xhenouc2VsZWN0SWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ3RoZSBzZWxlY3RJZCBtZXRob2QgaXMgbm90IHByZXNlbnQgaW4gdGhlIG1hbmFnZWQgZW50aXR5LicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgaWRzID0gKHBheWxvYWQgYXMgT3B0UmVxdWVzdDxUW10+KS5tdXRhdGlvblBhcmFtcy5tYXAoaWQgPT4gY2xhenouc2VsZWN0SWQoaWQpKTtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKGFjdGlvbnMuRGVsZXRlTWFueVN1Y2Nlc3Moe2lkc30pKTtcclxuICAgICAgICAgIGlmIChwYXlsb2FkLm9uUmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9uUmVzdWx0cyA9IChwYXlsb2FkLm9uUmVzdWx0IGFzIEFjdGlvbltdKS5tYXAoYSA9PiAoYSBhcyBhbnkpLm5ld0FjdGlvbiA/IChhIGFzIGFueSkubmV3QWN0aW9uKHJlc3BvbnNlLCBwYXlsb2FkKSA6IGEpO1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5vblJlc3VsdHMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChvcHRFZmZlY3QgfHwge30pLmRpc3BhdGNoUmVzcG9uc2UgfHwgcGF5bG9hZC5kaXNwYXRjaFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChhY3Rpb25zLlJlc3BvbnNlKHtcclxuICAgICAgICAgICAgYWN0aW9uVHlwZTogcGF5bG9hZC50eXBlLFxyXG4gICAgICAgICAgICByZXF1ZXN0OiBwYXlsb2FkLFxyXG4gICAgICAgICAgICByZXNwb25zZVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgKSxcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGRlbGV0ZU1hbnlDYXRjaEVycm9yID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4pOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248YW55PiA9PiB7Ly8gVE9ETzogdGlwaXp6YXJlIGFueVxyXG4gIHJldHVybiBpbnB1dCQgPT4gaW5wdXQkLnBpcGUoXHJcbiAgICBjYXRjaEVycm9yKChlcnJvciwgY2F1Z2h0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbXTtcclxuICAgICAgICByZXNwb25zZS5wdXNoKGFjdGlvbnMuRGVsZXRlTWFueUZhaWx1cmUoe2Vycm9yfSkpO1xyXG4gICAgICAgIHJlc3BvbnNlLnB1c2goYWN0aW9ucy5SZXNwb25zZSh7XHJcbiAgICAgICAgICBhY3Rpb25UeXBlOiAnRmFpbHVyZScsXHJcbiAgICAgICAgICByZXF1ZXN0OiBudWxsLFxyXG4gICAgICAgICAgcmVzcG9uc2U6IHtoYXNFcnJvcjogdHJ1ZSwgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgZGF0YTogbnVsbH1cclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgcmV0dXJuIGZyb20ocmVzcG9uc2UpO1xyXG4gICAgICB9XHJcbiAgICApXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBkZWxldGVNYW55UmVxdWVzdCA9IDxUPihhY3Rpb25zOiBBY3Rpb25zPFQ+LCBzZXJ2aWNlOiBJQmFzZUNydWRTZXJ2aWNlPFQ+LCBjbGF6ejogYW55LCBvcHRFZmZlY3Q/OiBPcHRFZmZlY3QpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248YW55PiA9PiB7Ly8gVE9ETzogdGlwaXp6YXJlIGFueVxyXG4gIHJldHVybiBpbnB1dCQgPT4gaW5wdXQkLnBpcGUoXHJcbiAgICBvZlR5cGUoYWN0aW9ucy5EZWxldGVNYW55UmVxdWVzdCksXHJcbiAgICBkZWxldGVNYW55Q2FsbChzZXJ2aWNlKSxcclxuICAgIGRlbGV0ZU1hbnlSZXNwb25zZShhY3Rpb25zLCBjbGF6eiwgb3B0RWZmZWN0KSxcclxuICAgIGRlbGV0ZU1hbnlDYXRjaEVycm9yKGFjdGlvbnMpLFxyXG4gICAgcmVwZWF0KClcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNhbGwgPSA8VD4oc2VydmljZTogSUJhc2VDcnVkU2VydmljZTxUPik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcChwYXlsb2FkID0+IHNlcnZpY2UuY3JlYXRlKChwYXlsb2FkIGFzIE9wdFJlcXVlc3Q8VD4pKS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBSZXNwb25zZTxUPikgPT4gKHtyZXNwb25zZSwgcGF5bG9hZH0pKVxyXG4gICAgKSlcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlc3BvbnNlID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4sIG9wdEVmZmVjdD86IE9wdEVmZmVjdCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcCgoe3Jlc3BvbnNlLCBwYXlsb2FkfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNFcnJvcikge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9ucy5DcmVhdGVGYWlsdXJlKHtlcnJvcjogcmVzcG9uc2UubWVzc2FnZX0pKTtcclxuICAgICAgICAgIGlmIChwYXlsb2FkLm9uRmF1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4ucGF5bG9hZC5vbkZhdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChhY3Rpb25zLkNyZWF0ZVN1Y2Nlc3Moe2l0ZW19KSk7XHJcbiAgICAgICAgICBpZiAocGF5bG9hZC5vblJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCBvblJlc3VsdHMgPSAocGF5bG9hZC5vblJlc3VsdCBhcyBBY3Rpb25bXSkubWFwKGEgPT4gKGEgYXMgYW55KS5uZXdBY3Rpb24gPyAoYSBhcyBhbnkpLm5ld0FjdGlvbihyZXNwb25zZSwgcGF5bG9hZCkgOiBhKTtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4ub25SZXN1bHRzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgob3B0RWZmZWN0IHx8IHt9KS5kaXNwYXRjaFJlc3BvbnNlIHx8IHBheWxvYWQuZGlzcGF0Y2hSZXNwb25zZSkge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9ucy5SZXNwb25zZSh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGU6IHBheWxvYWQudHlwZSxcclxuICAgICAgICAgICAgcmVxdWVzdDogcGF5bG9hZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIClcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNhdGNoRXJyb3IgPSA8VD4oYWN0aW9uczogQWN0aW9uczxUPik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNhdGNoRXJyb3IoKGVycm9yLCBjYXVnaHQpID0+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IFtdO1xyXG4gICAgICAgIHJlc3BvbnNlLnB1c2goYWN0aW9ucy5DcmVhdGVGYWlsdXJlKHtlcnJvcn0pKTtcclxuICAgICAgICByZXNwb25zZS5wdXNoKGFjdGlvbnMuUmVzcG9uc2Uoe1xyXG4gICAgICAgICAgYWN0aW9uVHlwZTogJ0ZhaWx1cmUnLFxyXG4gICAgICAgICAgcmVxdWVzdDogbnVsbCxcclxuICAgICAgICAgIHJlc3BvbnNlOiB7aGFzRXJyb3I6IHRydWUsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRhdGE6IG51bGx9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHJldHVybiBmcm9tKHJlc3BvbnNlKTtcclxuICAgICAgfVxyXG4gICAgKVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlUmVxdWVzdCA9IDxUPihhY3Rpb25zOiBBY3Rpb25zPFQ+LCBzZXJ2aWNlOiBJQmFzZUNydWRTZXJ2aWNlPFQ+LCBvcHRFZmZlY3Q/OiBPcHRFZmZlY3QpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248YW55PiA9PiB7Ly8gVE9ETzogdGlwaXp6YXJlIGFueVxyXG4gIHJldHVybiBpbnB1dCQgPT4gaW5wdXQkLnBpcGUoXHJcbiAgICBvZlR5cGUoYWN0aW9ucy5DcmVhdGVSZXF1ZXN0KSxcclxuICAgIGNyZWF0ZUNhbGwoc2VydmljZSksXHJcbiAgICBjcmVhdGVSZXNwb25zZShhY3Rpb25zLCBvcHRFZmZlY3QpLFxyXG4gICAgY3JlYXRlQ2F0Y2hFcnJvcihhY3Rpb25zKSxcclxuICAgIHJlcGVhdCgpXHJcbiAgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCB1c2U6XHJcbiAqXHJcbiAqIGFjdGlvbnMkLnBpcGUoXHJcbiAqICAgY3JlYXRlUmVxdWVzdChhY3Rpb25zLCBzZXJ2aWNlLCBvcHRFZmZlY3QpXHJcbiAqICk7XHJcbiAqXHJcbiAqIG9yOlxyXG4gKlxyXG4gKiBhY3Rpb25zJC5waXBlKFxyXG4gKiAgb2ZUeXBlKGFjdGlvbnMuRGVsZXRlUmVxdWVzdCksXHJcbiAqICBjcmVhdGVDYWxsKHNlcnZpY2UpLFxyXG4gKiAgY3JlYXRlUmVzcG9uc2UoYWN0aW9ucywgb3B0RWZmZWN0KSxcclxuICogIGNyZWF0ZUNhdGNoRXJyb3IoYWN0aW9ucyksXHJcbiAqICByZXBlYXQoKVxyXG4gKiAgKTtcclxuICpcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVSZXF1ZXN0RWZmZWN0ID0gPFQ+KGFjdGlvbnMkLCBhY3Rpb25zOiBBY3Rpb25zPFQ+LCBzZXJ2aWNlOiBJQmFzZUNydWRTZXJ2aWNlPFQ+LCBvcHRFZmZlY3Q/OiBPcHRFZmZlY3QpID0+IGFjdGlvbnMkLnBpcGUoXHJcbiAgY3JlYXRlUmVxdWVzdChhY3Rpb25zLCBzZXJ2aWNlLCBvcHRFZmZlY3QpXHJcbik7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlTWFueUNhbGwgPSA8VD4oc2VydmljZTogSUJhc2VDcnVkU2VydmljZTxUPik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcChwYXlsb2FkID0+IHNlcnZpY2UuY3JlYXRlTWFueSgocGF5bG9hZCBhcyBPcHRSZXF1ZXN0PFRbXT4pKS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBSZXNwb25zZTxUW10+KSA9PiAoe3Jlc3BvbnNlLCBwYXlsb2FkfSkpXHJcbiAgICApKVxyXG4gICk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlTWFueVJlc3BvbnNlID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4sIG9wdEVmZmVjdD86IE9wdEVmZmVjdCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcCgoe3Jlc3BvbnNlLCBwYXlsb2FkfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNFcnJvcikge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9ucy5DcmVhdGVNYW55RmFpbHVyZSh7ZXJyb3I6IHJlc3BvbnNlLm1lc3NhZ2V9KSk7XHJcbiAgICAgICAgICBpZiAocGF5bG9hZC5vbkZhdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnBheWxvYWQub25GYXVsdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW1zID0gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKGFjdGlvbnMuQ3JlYXRlTWFueVN1Y2Nlc3Moe2l0ZW1zfSkpO1xyXG4gICAgICAgICAgaWYgKHBheWxvYWQub25SZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc3Qgb25SZXN1bHRzID0gKHBheWxvYWQub25SZXN1bHQgYXMgQWN0aW9uW10pLm1hcChhID0+IChhIGFzIGFueSkubmV3QWN0aW9uID8gKGEgYXMgYW55KS5uZXdBY3Rpb24ocmVzcG9uc2UsIHBheWxvYWQpIDogYSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLm9uUmVzdWx0cyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKG9wdEVmZmVjdCB8fCB7fSkuZGlzcGF0Y2hSZXNwb25zZSB8fCBwYXlsb2FkLmRpc3BhdGNoUmVzcG9uc2UpIHtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKGFjdGlvbnMuUmVzcG9uc2Uoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlOiBwYXlsb2FkLnR5cGUsXHJcbiAgICAgICAgICAgIHJlcXVlc3Q6IHBheWxvYWQsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICApXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVNYW55Q2F0Y2hFcnJvciA9IDxUPihhY3Rpb25zOiBBY3Rpb25zPFQ+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPGFueT4gPT4gey8vIFRPRE86IHRpcGl6emFyZSBhbnlcclxuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKFxyXG4gICAgY2F0Y2hFcnJvcigoZXJyb3IsIGNhdWdodCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gW107XHJcbiAgICAgICAgcmVzcG9uc2UucHVzaChhY3Rpb25zLkVkaXRNYW55RmFpbHVyZSh7ZXJyb3J9KSk7XHJcbiAgICAgICAgcmVzcG9uc2UucHVzaChhY3Rpb25zLlJlc3BvbnNlKHtcclxuICAgICAgICAgIGFjdGlvblR5cGU6ICdGYWlsdXJlJyxcclxuICAgICAgICAgIHJlcXVlc3Q6IG51bGwsXHJcbiAgICAgICAgICByZXNwb25zZToge2hhc0Vycm9yOiB0cnVlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBkYXRhOiBudWxsfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICByZXR1cm4gZnJvbShyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIClcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1hbnlSZXF1ZXN0ID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4sIHNlcnZpY2U6IElCYXNlQ3J1ZFNlcnZpY2U8VD4sIG9wdEVmZmVjdD86IE9wdEVmZmVjdCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIG9mVHlwZShhY3Rpb25zLkNyZWF0ZU1hbnlSZXF1ZXN0KSxcclxuICAgIGNyZWF0ZU1hbnlDYWxsKHNlcnZpY2UpLFxyXG4gICAgY3JlYXRlTWFueVJlc3BvbnNlKGFjdGlvbnMsIG9wdEVmZmVjdCksXHJcbiAgICBjcmVhdGVNYW55Q2F0Y2hFcnJvcihhY3Rpb25zKSxcclxuICAgIHJlcGVhdCgpXHJcbiAgKTtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZWRpdENhbGwgPSA8VD4oc2VydmljZTogSUJhc2VDcnVkU2VydmljZTxUPik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcChwYXlsb2FkID0+IHNlcnZpY2UudXBkYXRlKChwYXlsb2FkIGFzIE9wdFJlcXVlc3Q8VD4pKS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBSZXNwb25zZTxUPikgPT4gKHtyZXNwb25zZSwgcGF5bG9hZH0pKVxyXG4gICAgKSksXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlZGl0UmVzcG9uc2UgPSA8VD4oYWN0aW9uczogQWN0aW9uczxUPiwgb3B0RWZmZWN0PzogT3B0RWZmZWN0KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPGFueT4gPT4gey8vIFRPRE86IHRpcGl6emFyZSBhbnlcclxuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKFxyXG4gICAgY29uY2F0TWFwKCh7cmVzcG9uc2UsIHBheWxvYWR9KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmhhc0Vycm9yKSB7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChhY3Rpb25zLkVkaXRGYWlsdXJlKHtlcnJvcjogcmVzcG9uc2UubWVzc2FnZX0pKTtcclxuICAgICAgICAgIGlmIChwYXlsb2FkLm9uRmF1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4ucGF5bG9hZC5vbkZhdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChhY3Rpb25zLkVkaXRTdWNjZXNzKHtpdGVtfSkpO1xyXG4gICAgICAgICAgaWYgKHBheWxvYWQub25SZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc3Qgb25SZXN1bHRzID0gKHBheWxvYWQub25SZXN1bHQgYXMgQWN0aW9uW10pLm1hcChhID0+IChhIGFzIGFueSkubmV3QWN0aW9uID8gKGEgYXMgYW55KS5uZXdBY3Rpb24ocmVzcG9uc2UsIHBheWxvYWQpIDogYSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLm9uUmVzdWx0cyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKG9wdEVmZmVjdCB8fCB7fSkuZGlzcGF0Y2hSZXNwb25zZSB8fCBwYXlsb2FkLmRpc3BhdGNoUmVzcG9uc2UpIHtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKGFjdGlvbnMuUmVzcG9uc2Uoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlOiBwYXlsb2FkLnR5cGUsXHJcbiAgICAgICAgICAgIHJlcXVlc3Q6IHBheWxvYWQsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICApXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlZGl0Q2F0Y2hFcnJvciA9IDxUPihhY3Rpb25zOiBBY3Rpb25zPFQ+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPGFueT4gPT4gey8vIFRPRE86IHRpcGl6emFyZSBhbnlcclxuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKFxyXG4gICAgY2F0Y2hFcnJvcigoZXJyb3IsIGNhdWdodCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gW107XHJcbiAgICAgICAgcmVzcG9uc2UucHVzaChhY3Rpb25zLkVkaXRGYWlsdXJlKHtlcnJvcn0pKTtcclxuICAgICAgICByZXNwb25zZS5wdXNoKGFjdGlvbnMuUmVzcG9uc2Uoe1xyXG4gICAgICAgICAgYWN0aW9uVHlwZTogJ0ZhaWx1cmUnLFxyXG4gICAgICAgICAgcmVxdWVzdDogbnVsbCxcclxuICAgICAgICAgIHJlc3BvbnNlOiB7aGFzRXJyb3I6IHRydWUsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRhdGE6IG51bGx9XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHJldHVybiBmcm9tKHJlc3BvbnNlKTtcclxuICAgICAgfVxyXG4gICAgKSxcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVkaXRSZXF1ZXN0ID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4sIHNlcnZpY2U6IElCYXNlQ3J1ZFNlcnZpY2U8VD4sIG9wdEVmZmVjdD86IE9wdEVmZmVjdCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIG9mVHlwZShhY3Rpb25zLkVkaXRSZXF1ZXN0KSxcclxuICAgIGVkaXRDYWxsKHNlcnZpY2UpLFxyXG4gICAgZWRpdFJlc3BvbnNlKGFjdGlvbnMsIG9wdEVmZmVjdCksXHJcbiAgICBlZGl0Q2F0Y2hFcnJvcihhY3Rpb25zKSxcclxuICAgIHJlcGVhdCgpXHJcbiAgKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCB1c2U6XHJcbiAqXHJcbiAqIGFjdGlvbnMkLnBpcGUoXHJcbiAqICAgZWRpdFJlcXVlc3QoYWN0aW9ucywgc2VydmljZSwgb3B0RWZmZWN0KVxyXG4gKiApO1xyXG4gKlxyXG4gKiBvcjpcclxuICpcclxuICogYWN0aW9ucyQucGlwZShcclxuICogIG9mVHlwZShhY3Rpb25zLkVkaXRSZXF1ZXN0KSxcclxuICogIGVkaXRDYWxsKHNlcnZpY2UpLFxyXG4gKiAgZWRpdFJlc3BvbnNlKGFjdGlvbnMsIG9wdEVmZmVjdCksXHJcbiAqICBlZGl0Q2F0Y2hFcnJvcihhY3Rpb25zKSxcclxuICogIHJlcGVhdCgpXHJcbiAqICApO1xyXG4gKlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGVkaXRSZXF1ZXN0RWZmZWN0ID0gPFQ+KGFjdGlvbnMkLCBhY3Rpb25zOiBBY3Rpb25zPFQ+LCBzZXJ2aWNlOiBJQmFzZUNydWRTZXJ2aWNlPFQ+LCBvcHRFZmZlY3Q/OiBPcHRFZmZlY3QpID0+IGFjdGlvbnMkLnBpcGUoXHJcbiAgZWRpdFJlcXVlc3QoYWN0aW9ucywgc2VydmljZSwgb3B0RWZmZWN0KVxyXG4pO1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCBlZGl0TWFueUNhbGwgPSA8VD4oc2VydmljZTogSUJhc2VDcnVkU2VydmljZTxUPik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcChwYXlsb2FkID0+IHNlcnZpY2UudXBkYXRlTWFueSgocGF5bG9hZCBhcyBPcHRSZXF1ZXN0PFRbXT4pKS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBSZXNwb25zZTxUPikgPT4gKHtyZXNwb25zZSwgcGF5bG9hZH0pKVxyXG4gICAgKSksXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlZGl0TWFueVJlc3BvbnNlID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4sIG9wdEVmZmVjdD86IE9wdEVmZmVjdCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcCgoe3Jlc3BvbnNlLCBwYXlsb2FkfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNFcnJvcikge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9ucy5FZGl0TWFueUZhaWx1cmUoe2Vycm9yOiByZXNwb25zZS5tZXNzYWdlfSkpO1xyXG4gICAgICAgICAgaWYgKHBheWxvYWQub25GYXVsdCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5wYXlsb2FkLm9uRmF1bHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtcyA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChhY3Rpb25zLkVkaXRNYW55U3VjY2Vzcyh7aXRlbXN9KSk7XHJcbiAgICAgICAgICBpZiAocGF5bG9hZC5vblJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCBvblJlc3VsdHMgPSAocGF5bG9hZC5vblJlc3VsdCBhcyBBY3Rpb25bXSkubWFwKGEgPT4gKGEgYXMgYW55KS5uZXdBY3Rpb24gPyAoYSBhcyBhbnkpLm5ld0FjdGlvbihyZXNwb25zZSwgcGF5bG9hZCkgOiBhKTtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4ub25SZXN1bHRzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgob3B0RWZmZWN0IHx8IHt9KS5kaXNwYXRjaFJlc3BvbnNlIHx8IHBheWxvYWQuZGlzcGF0Y2hSZXNwb25zZSkge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9ucy5SZXNwb25zZSh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGU6IHBheWxvYWQudHlwZSxcclxuICAgICAgICAgICAgcmVxdWVzdDogcGF5bG9hZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIClcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGVkaXRNYW55Q2F0Y2hFcnJvciA9IDxUPihhY3Rpb25zOiBBY3Rpb25zPFQ+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPGFueT4gPT4gey8vIFRPRE86IHRpcGl6emFyZSBhbnlcclxuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKFxyXG4gICAgY2F0Y2hFcnJvcigoZXJyb3IsIGNhdWdodCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gW107XHJcbiAgICAgICAgcmVzcG9uc2UucHVzaChhY3Rpb25zLkVkaXRNYW55RmFpbHVyZSh7ZXJyb3J9KSk7XHJcbiAgICAgICAgcmVzcG9uc2UucHVzaChhY3Rpb25zLlJlc3BvbnNlKHtcclxuICAgICAgICAgIGFjdGlvblR5cGU6ICdGYWlsdXJlJyxcclxuICAgICAgICAgIHJlcXVlc3Q6IG51bGwsXHJcbiAgICAgICAgICByZXNwb25zZToge2hhc0Vycm9yOiB0cnVlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBkYXRhOiBudWxsfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICByZXR1cm4gZnJvbShyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgICksXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBlZGl0TWFueVJlcXVlc3QgPSA8VD4oYWN0aW9uczogQWN0aW9uczxUPiwgc2VydmljZTogSUJhc2VDcnVkU2VydmljZTxUPiwgb3B0RWZmZWN0PzogT3B0RWZmZWN0KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPGFueT4gPT4gey8vIFRPRE86IHRpcGl6emFyZSBhbnlcclxuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKFxyXG4gICAgb2ZUeXBlKGFjdGlvbnMuRWRpdE1hbnlSZXF1ZXN0KSxcclxuICAgIGVkaXRNYW55Q2FsbChzZXJ2aWNlKSxcclxuICAgIGVkaXRNYW55UmVzcG9uc2UoYWN0aW9ucywgb3B0RWZmZWN0KSxcclxuICAgIGVkaXRNYW55Q2F0Y2hFcnJvcihhY3Rpb25zKSxcclxuICAgIHJlcGVhdCgpXHJcbiAgKTtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY29uc3Qgc2VsZWN0Q2FsbCA9IDxUPihzZXJ2aWNlOiBJQmFzZUNydWRTZXJ2aWNlPFQ+KTogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPGFueT4gPT4gey8vIFRPRE86IHRpcGl6emFyZSBhbnlcclxuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKFxyXG4gICAgY29uY2F0TWFwKHBheWxvYWQgPT4gc2VydmljZS5zZWxlY3QoKHBheWxvYWQgYXMgSUNyaXRlcmlhKSkucGlwZShcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBSZXNwb25zZTxUPikgPT4gKHtyZXNwb25zZSwgcGF5bG9hZH0pKVxyXG4gICAgKSlcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNlbGVjdFJlc3BvbnNlID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4sIG9wdEVmZmVjdD86IE9wdEVmZmVjdCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNvbmNhdE1hcCgoe3Jlc3BvbnNlLCBwYXlsb2FkfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5oYXNFcnJvcikge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9ucy5TZWxlY3RGYWlsdXJlKHtlcnJvcjogcmVzcG9uc2UubWVzc2FnZX0pKTtcclxuICAgICAgICAgIGlmIChwYXlsb2FkLm9uRmF1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4ucGF5bG9hZC5vbkZhdWx0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChhY3Rpb25zLlNlbGVjdFN1Y2Nlc3Moe2l0ZW19KSk7XHJcbiAgICAgICAgICBpZiAocGF5bG9hZC5vblJlc3VsdCkge1xyXG4gICAgICAgICAgICBjb25zdCBvblJlc3VsdHMgPSAocGF5bG9hZC5vblJlc3VsdCBhcyBBY3Rpb25bXSkubWFwKGEgPT4gKGEgYXMgYW55KS5uZXdBY3Rpb24gPyAoYSBhcyBhbnkpLm5ld0FjdGlvbihyZXNwb25zZSwgcGF5bG9hZCkgOiBhKTtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4ub25SZXN1bHRzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgob3B0RWZmZWN0IHx8IHt9KS5kaXNwYXRjaFJlc3BvbnNlIHx8IHBheWxvYWQuZGlzcGF0Y2hSZXNwb25zZSkge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goYWN0aW9ucy5SZXNwb25zZSh7XHJcbiAgICAgICAgICAgIGFjdGlvblR5cGU6IHBheWxvYWQudHlwZSxcclxuICAgICAgICAgICAgcmVxdWVzdDogcGF5bG9hZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIClcclxuICApO1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IHNlbGVjdENhdGNoRXJyb3IgPSA8VD4oYWN0aW9uczogQWN0aW9uczxUPik6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIGNhdGNoRXJyb3IoKGVycm9yLCBjYXVnaHQpID0+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IFtdO1xyXG4gICAgICAgIHJlc3BvbnNlLnB1c2goYWN0aW9ucy5FZGl0RmFpbHVyZSh7ZXJyb3J9KSk7XHJcbiAgICAgICAgcmVzcG9uc2UucHVzaChhY3Rpb25zLlJlc3BvbnNlKHtcclxuICAgICAgICAgIGFjdGlvblR5cGU6ICdGYWlsdXJlJyxcclxuICAgICAgICAgIHJlcXVlc3Q6IG51bGwsXHJcbiAgICAgICAgICByZXNwb25zZToge2hhc0Vycm9yOiB0cnVlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBkYXRhOiBudWxsfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICByZXR1cm4gZnJvbShyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgICksXHJcbiAgKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBzZWxlY3RSZXF1ZXN0ID0gPFQ+KGFjdGlvbnM6IEFjdGlvbnM8VD4sIHNlcnZpY2U6IElCYXNlQ3J1ZFNlcnZpY2U8VD4sIG9wdEVmZmVjdD86IE9wdEVmZmVjdCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxhbnk+ID0+IHsvLyBUT0RPOiB0aXBpenphcmUgYW55XHJcbiAgcmV0dXJuIGlucHV0JCA9PiBpbnB1dCQucGlwZShcclxuICAgIG9mVHlwZShhY3Rpb25zLlNlbGVjdFJlcXVlc3QpLFxyXG4gICAgc2VsZWN0Q2FsbChzZXJ2aWNlKSxcclxuICAgIHNlbGVjdFJlc3BvbnNlKGFjdGlvbnMsIG9wdEVmZmVjdCksXHJcbiAgICBzZWxlY3RDYXRjaEVycm9yKGFjdGlvbnMpLFxyXG4gICAgcmVwZWF0KClcclxuICApO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBkZXByZWNhdGVkIHVzZTpcclxuICpcclxuICogYWN0aW9ucyQucGlwZShcclxuICogICBzZWxlY3RSZXF1ZXN0KGFjdGlvbnMsIHNlcnZpY2UsIGNsYXp6LCBvcHRFZmZlY3QpXHJcbiAqICk7XHJcbiAqXHJcbiAqIG9yOlxyXG4gKlxyXG4gKiBhY3Rpb25zJC5waXBlKFxyXG4gKiAgb2ZUeXBlKGFjdGlvbnMuU2VsZWN0UmVxdWVzdCksXHJcbiAqICBzZWxlY3RDYWxsKHNlcnZpY2UpLFxyXG4gKiAgc2VsZWN0UmVzcG9uc2UoYWN0aW9ucywgb3B0RWZmZWN0KSxcclxuICogIHNlbGVjdENhdGNoRXJyb3IoYWN0aW9ucyksXHJcbiAqICByZXBlYXQoKVxyXG4gKiAgKTtcclxuICpcclxuICovXHJcbmV4cG9ydCBjb25zdCBzZWxlY3RSZXF1ZXN0RWZmZWN0ID0gPFQ+KGFjdGlvbnMkLCBhY3Rpb25zOiBBY3Rpb25zPFQ+LCBzZXJ2aWNlOiBJQmFzZUNydWRTZXJ2aWNlPFQ+LCBvcHRFZmZlY3Q/OiBPcHRFZmZlY3QpID0+IGFjdGlvbnMkLnBpcGUoXHJcbiAgc2VsZWN0UmVxdWVzdChhY3Rpb25zLCBzZXJ2aWNlLCBvcHRFZmZlY3QpXHJcbik7XHJcbiJdfQ==
@@ -0,0 +1,23 @@
1
+ export function getInitialEntityCrudState() {
2
+ return {
3
+ ids: [],
4
+ entities: {},
5
+ isLoading: false,
6
+ isLoaded: false,
7
+ error: null,
8
+ filters: {},
9
+ lastCriteria: null,
10
+ entitiesSelected: {},
11
+ idsSelected: [],
12
+ itemSelected: null,
13
+ idSelected: null,
14
+ responses: []
15
+ };
16
+ }
17
+ export function createInitialCrudStateFactory() {
18
+ function getInitialCrudState(additionalState = {}) {
19
+ return Object.assign(getInitialEntityCrudState(), additionalState);
20
+ }
21
+ return { getInitialCrudState };
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5X3N0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdyeC1lbnRpdHktY3J1ZC9zcmMvbGliL2VudGl0eV9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE9BQU87UUFDTCxHQUFHLEVBQUUsRUFBRTtRQUNQLFFBQVEsRUFBRSxFQUFFO1FBQ1osU0FBUyxFQUFFLEtBQUs7UUFDaEIsUUFBUSxFQUFFLEtBQUs7UUFDZixLQUFLLEVBQUUsSUFBSTtRQUNYLE9BQU8sRUFBRSxFQUFFO1FBQ1gsWUFBWSxFQUFFLElBQUk7UUFDbEIsZ0JBQWdCLEVBQUUsRUFBRTtRQUNwQixXQUFXLEVBQUUsRUFBRTtRQUNmLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFVBQVUsRUFBRSxJQUFJO1FBQ2hCLFNBQVMsRUFBRSxFQUFFO0tBQ2QsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsNkJBQTZCO0lBSzNDLFNBQVMsbUJBQW1CLENBQUMsa0JBQXVCLEVBQUU7UUFDcEQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxDQUFDO0FBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0VudGl0eUNydWRTdGF0ZX0gZnJvbSAnLi9tb2RlbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbEVudGl0eUNydWRTdGF0ZTxWPigpOiBFbnRpdHlDcnVkU3RhdGU8Vj4ge1xuICByZXR1cm4ge1xuICAgIGlkczogW10sXG4gICAgZW50aXRpZXM6IHt9LFxuICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgaXNMb2FkZWQ6IGZhbHNlLFxuICAgIGVycm9yOiBudWxsLFxuICAgIGZpbHRlcnM6IHt9LFxuICAgIGxhc3RDcml0ZXJpYTogbnVsbCxcbiAgICBlbnRpdGllc1NlbGVjdGVkOiB7fSxcbiAgICBpZHNTZWxlY3RlZDogW10sXG4gICAgaXRlbVNlbGVjdGVkOiBudWxsLFxuICAgIGlkU2VsZWN0ZWQ6IG51bGwsXG4gICAgcmVzcG9uc2VzOiBbXVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5pdGlhbENydWRTdGF0ZUZhY3Rvcnk8Vj4oKSB7XG4gIGZ1bmN0aW9uIGdldEluaXRpYWxDcnVkU3RhdGUoKTogRW50aXR5Q3J1ZFN0YXRlPFY+O1xuICBmdW5jdGlvbiBnZXRJbml0aWFsQ3J1ZFN0YXRlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIGFkZGl0aW9uYWxTdGF0ZTogU1xuICApOiBFbnRpdHlDcnVkU3RhdGU8Vj4gJiBTO1xuICBmdW5jdGlvbiBnZXRJbml0aWFsQ3J1ZFN0YXRlKGFkZGl0aW9uYWxTdGF0ZTogYW55ID0ge30pOiBhbnkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGdldEluaXRpYWxFbnRpdHlDcnVkU3RhdGUoKSwgYWRkaXRpb25hbFN0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB7Z2V0SW5pdGlhbENydWRTdGF0ZX07XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWJhc2UtY3J1ZC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmdyeC1lbnRpdHktY3J1ZC9zcmMvbGliL2liYXNlLWNydWQtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJQ3JpdGVyaWEsIE9wdFJlcXVlc3QsIFJlc3BvbnNlfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlQ3J1ZFNlcnZpY2U8VD4ge1xuXG4gIGNyZWF0ZShvcHQ6IE9wdFJlcXVlc3Q8VD4pOiBPYnNlcnZhYmxlPFJlc3BvbnNlPFQ+PjtcblxuICBjcmVhdGVNYW55KG9wdDogT3B0UmVxdWVzdDxUW10gfCBUPik6IE9ic2VydmFibGU8UmVzcG9uc2U8VFtdPj47XG5cbiAgc2VhcmNoKHZhbHVlPzogSUNyaXRlcmlhKTogT2JzZXJ2YWJsZTxSZXNwb25zZTxUW10+PjtcblxuICBzZWxlY3Qob3B0OiBJQ3JpdGVyaWEpOiBPYnNlcnZhYmxlPFJlc3BvbnNlPFQ+PjtcblxuICB1cGRhdGUob3B0OiBPcHRSZXF1ZXN0PFQ+KTogT2JzZXJ2YWJsZTxSZXNwb25zZTxUPj47XG5cbiAgdXBkYXRlTWFueShvcHQ6IE9wdFJlcXVlc3Q8VFtdIHwgVD4pOiBPYnNlcnZhYmxlPFJlc3BvbnNlPFRbXT4+O1xuXG4gIGRlbGV0ZShvcHQ6IE9wdFJlcXVlc3Q8VD4pOiBPYnNlcnZhYmxlPFJlc3BvbnNlPHN0cmluZ1tdPj47XG5cbiAgZGVsZXRlTWFueShvcHQ6IE9wdFJlcXVlc3Q8VFtdIHwgVD4pOiBPYnNlcnZhYmxlPFJlc3BvbnNlPHN0cmluZ1tdPj47XG5cbn1cbiJdfQ==