taxtank-core 0.28.96 → 0.28.98

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 (187) hide show
  1. package/bundles/taxtank-core.umd.js +2614 -2325
  2. package/bundles/taxtank-core.umd.js.map +1 -1
  3. package/esm2015/lib/collections/index.js +3 -1
  4. package/esm2015/lib/db/Models/abstract-model.js +2 -1
  5. package/esm2015/lib/db/Models/observable-model.js +10 -0
  6. package/esm2015/lib/db/Models/property/property.js +3 -3
  7. package/esm2015/lib/db/Models/sole/bas-report.js +3 -2
  8. package/esm2015/lib/functions/array/index.js +2 -1
  9. package/esm2015/lib/functions/array/to-array.js +7 -0
  10. package/esm2015/lib/interceptors/basiq-client-id.interceptor.js +3 -3
  11. package/esm2015/lib/interceptors/basiq-token.interceptor.js +3 -3
  12. package/esm2015/lib/interceptors/corelogic-interceptor.js +3 -3
  13. package/esm2015/lib/interceptors/financial-year-interceptor.js +3 -3
  14. package/esm2015/lib/interceptors/interceptors.module.js +4 -4
  15. package/esm2015/lib/interceptors/jwt-interceptor.js +3 -3
  16. package/esm2015/lib/interceptors/preloader.interceptor.js +3 -3
  17. package/esm2015/lib/interceptors/user-switcher-interceptor.js +3 -3
  18. package/esm2015/lib/models/event/app-event.js +12 -1
  19. package/esm2015/lib/models/property/property.js +3 -1
  20. package/esm2015/lib/models/user/user-roles.const.js +9 -6
  21. package/esm2015/lib/models/user/user.js +15 -4
  22. package/esm2015/lib/services/account-setup/account-setup.service.js +6 -5
  23. package/esm2015/lib/services/affiliate/rewardful/rewardful.service.js +3 -3
  24. package/esm2015/lib/services/asset/assets.service.js +3 -3
  25. package/esm2015/lib/services/auth/auth.service.js +3 -3
  26. package/esm2015/lib/services/auth/jwt.service.js +3 -3
  27. package/esm2015/lib/services/bank/bank-account-calculation.service.js +3 -3
  28. package/esm2015/lib/services/bank/bank-transaction-calculation.service.js +3 -3
  29. package/esm2015/lib/services/event/event-dispatcher.service.js +15 -4
  30. package/esm2015/lib/services/event/sse.service.js +3 -3
  31. package/esm2015/lib/services/export/export-formatter.service.js +3 -3
  32. package/esm2015/lib/services/header-title/header-title.service.js +3 -3
  33. package/esm2015/lib/services/http/address/address.service.js +3 -3
  34. package/esm2015/lib/services/http/bank/bank-account/bank-account.service.js +5 -5
  35. package/esm2015/lib/services/http/bank/bank-connection/bank-connection.service.js +5 -5
  36. package/esm2015/lib/services/http/bank/bank-transaction/bank-transaction.service.js +5 -5
  37. package/esm2015/lib/services/http/bank/bank.service.js +5 -5
  38. package/esm2015/lib/services/http/bank/basiq/basiq-token.service.js +3 -3
  39. package/esm2015/lib/services/http/bank/basiq/basiq.service.js +5 -5
  40. package/esm2015/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.js +5 -5
  41. package/esm2015/lib/services/http/chart-accounts/chart-accounts.service.js +3 -3
  42. package/esm2015/lib/services/http/chat/chat.service.js +5 -5
  43. package/esm2015/lib/services/http/chat/message/message.service.js +5 -5
  44. package/esm2015/lib/services/http/chat/message-document/message-document.service.js +3 -3
  45. package/esm2015/lib/services/http/depreciation/depreciation-capital-project/depreciation-capital-project.service.js +3 -3
  46. package/esm2015/lib/services/http/depreciation/depreciation-receipt/depreciation-receipt.service.js +3 -3
  47. package/esm2015/lib/services/http/depreciation/depreciation.service.js +5 -5
  48. package/esm2015/lib/services/http/document/document-folder/document-folder.service.js +5 -5
  49. package/esm2015/lib/services/http/document/document.service.js +5 -5
  50. package/esm2015/lib/services/http/facebook/facebook.service.js +3 -3
  51. package/esm2015/lib/services/http/firm/client-income/client-income-types.service.js +3 -3
  52. package/esm2015/lib/services/http/firm/client-invite/client-invite.service.js +5 -5
  53. package/esm2015/lib/services/http/firm/client-movement/client-movement.service.js +5 -5
  54. package/esm2015/lib/services/http/firm/employee/employee.service.js +5 -5
  55. package/esm2015/lib/services/http/firm/employee-invite/employee-invite.service.js +5 -5
  56. package/esm2015/lib/services/http/firm/firm.service.js +3 -3
  57. package/esm2015/lib/services/http/firm/portfolio-report/client-portfolio-report.service.js +3 -3
  58. package/esm2015/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.js +5 -5
  59. package/esm2015/lib/services/http/income-source/income-source.service.js +5 -5
  60. package/esm2015/lib/services/http/income-source/salary-forecast/salary-forecast.service.js +5 -5
  61. package/esm2015/lib/services/http/income-source/sole-forecast/sole-forecast.service.js +5 -5
  62. package/esm2015/lib/services/http/loan/borrowing-expense/borrowing-expense.service.js +3 -3
  63. package/esm2015/lib/services/http/loan/loan.service.js +5 -5
  64. package/esm2015/lib/services/http/property/property-category/property-category.service.js +5 -5
  65. package/esm2015/lib/services/http/property/property-category-movement/property-category-movement.service.js +5 -5
  66. package/esm2015/lib/services/http/property/property-document/property-document.service.js +5 -5
  67. package/esm2015/lib/services/http/property/property-sale/property-sale.service.js +5 -5
  68. package/esm2015/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.js +5 -5
  69. package/esm2015/lib/services/http/property/property-share/property-share.service.js +5 -5
  70. package/esm2015/lib/services/http/property/property.service.js +32 -49
  71. package/esm2015/lib/services/http/receipt/receipt.service.js +3 -3
  72. package/esm2015/lib/services/http/rest/http-method.type.js +2 -0
  73. package/esm2015/lib/services/http/rest/index.js +3 -1
  74. package/esm2015/lib/services/http/rest/rest-method.type.js +2 -0
  75. package/esm2015/lib/services/http/rest/rest-old.service.js +225 -0
  76. package/esm2015/lib/services/http/rest/rest.service.js +146 -149
  77. package/esm2015/lib/services/http/service-notification/service-notification.service.js +5 -5
  78. package/esm2015/lib/services/http/sole/bas-report/bas-report.service.js +5 -5
  79. package/esm2015/lib/services/http/sole/sole-business/sole-business.service.js +5 -5
  80. package/esm2015/lib/services/http/sole/sole-business-activity/sole-business-activity.service.js +5 -5
  81. package/esm2015/lib/services/http/sole/sole-business-loss/sole-business-loss-rules/sole-business-loss-offset-rule.service.js +5 -5
  82. package/esm2015/lib/services/http/sole/sole-business-loss/sole-business-loss.service.js +5 -5
  83. package/esm2015/lib/services/http/sole/sole-contact/sole-contact.service.js +5 -5
  84. package/esm2015/lib/services/http/sole/sole-depreciation-method/sole-depreciation-method.service.js +3 -3
  85. package/esm2015/lib/services/http/sole/sole-details/sole-details.service.js +3 -3
  86. package/esm2015/lib/services/http/sole/sole-invoice/sole-invoice.service.js +5 -5
  87. package/esm2015/lib/services/http/sole/sole-invoice-template/sole-invoice-template.service.js +5 -5
  88. package/esm2015/lib/services/http/subscription/service-price.service.js +5 -5
  89. package/esm2015/lib/services/http/subscription/subscription.service.js +11 -5
  90. package/esm2015/lib/services/http/tax-review/tax-review-history/tax-review-history.service.js +5 -5
  91. package/esm2015/lib/services/http/tax-review/tax-review.service.js +5 -5
  92. package/esm2015/lib/services/http/tax-summary/tax-summary.service.js +3 -3
  93. package/esm2015/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.js +5 -5
  94. package/esm2015/lib/services/http/transaction/transaction-receipt/transaction-receipt.service.js +3 -3
  95. package/esm2015/lib/services/http/transaction/transaction.service.js +5 -5
  96. package/esm2015/lib/services/http/tutorial-video/tutorial-video.service.js +3 -3
  97. package/esm2015/lib/services/http/user/occupation/occupation.service.js +3 -3
  98. package/esm2015/lib/services/http/user/user-event-setting/user-event-setting.service.js +5 -5
  99. package/esm2015/lib/services/http/user/user-event-type/user-event-type.service.js +5 -5
  100. package/esm2015/lib/services/http/user/user.service.js +3 -3
  101. package/esm2015/lib/services/http/user/users-invite/users-invite.service.js +5 -5
  102. package/esm2015/lib/services/http/vehicle/vehicle-claim-details.service.js +3 -3
  103. package/esm2015/lib/services/http/vehicle/vehicle-claim.service.js +5 -5
  104. package/esm2015/lib/services/http/vehicle/vehicle-logbook.service.js +5 -5
  105. package/esm2015/lib/services/http/vehicle/vehicle.service.js +5 -5
  106. package/esm2015/lib/services/intercom/intercom.service.js +3 -3
  107. package/esm2015/lib/services/pdf/pdf-from-dom-element/pdf-from-dom-element.service.js +3 -3
  108. package/esm2015/lib/services/pdf/pdf-from-table/pdf-from-data-table/pdf-from-data-table.service.js +3 -3
  109. package/esm2015/lib/services/pdf/pdf-from-table/pdf-from-html-table/pdf-from-html-table.service.js +3 -3
  110. package/esm2015/lib/services/pdf/pdf-from-table/pdf-from-table.service.js +3 -3
  111. package/esm2015/lib/services/preloader/preloader.service.js +3 -3
  112. package/esm2015/lib/services/property/corelogic/corelogic.service.js +3 -3
  113. package/esm2015/lib/services/property/equity-position-chart/equity-position-chart.service.js +3 -3
  114. package/esm2015/lib/services/property/property-calculation/property-calculation.service.js +3 -3
  115. package/esm2015/lib/services/report/property/property-transaction-report.service.js +5 -6
  116. package/esm2015/lib/services/toast/toast.service.js +3 -3
  117. package/esm2015/lib/services/transaction/transaction-calculation.service.js +3 -3
  118. package/esm2015/lib/services/user/user-switcher.service.js +3 -3
  119. package/esm2015/lib/services/vehicle/logbook-best-period.service.js +3 -3
  120. package/esm2015/lib/services/xlsx/xlsx.service.js +3 -3
  121. package/esm2015/lib/tt-core.module.js +4 -4
  122. package/fesm2015/taxtank-core.js +2238 -1985
  123. package/fesm2015/taxtank-core.js.map +1 -1
  124. package/lib/collections/index.d.ts +2 -0
  125. package/lib/db/Models/observable-model.d.ts +8 -0
  126. package/lib/db/Models/property/property.d.ts +2 -2
  127. package/lib/db/Models/sole/bas-report.d.ts +2 -1
  128. package/lib/functions/array/index.d.ts +1 -0
  129. package/lib/functions/array/to-array.d.ts +4 -0
  130. package/lib/models/event/app-event.d.ts +9 -0
  131. package/lib/models/property/property.d.ts +2 -0
  132. package/lib/models/user/user-roles.const.d.ts +3 -0
  133. package/lib/models/user/user.d.ts +5 -2
  134. package/lib/services/event/event-dispatcher.service.d.ts +9 -1
  135. package/lib/services/http/bank/bank-account/bank-account.service.d.ts +1 -1
  136. package/lib/services/http/bank/bank-connection/bank-connection.service.d.ts +1 -1
  137. package/lib/services/http/bank/bank-transaction/bank-transaction.service.d.ts +1 -1
  138. package/lib/services/http/bank/bank.service.d.ts +1 -1
  139. package/lib/services/http/bank/basiq/basiq.service.d.ts +1 -1
  140. package/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.d.ts +1 -1
  141. package/lib/services/http/chat/chat.service.d.ts +1 -1
  142. package/lib/services/http/chat/message/message.service.d.ts +1 -1
  143. package/lib/services/http/depreciation/depreciation.service.d.ts +1 -1
  144. package/lib/services/http/document/document-folder/document-folder.service.d.ts +1 -1
  145. package/lib/services/http/document/document.service.d.ts +1 -1
  146. package/lib/services/http/firm/client-invite/client-invite.service.d.ts +1 -1
  147. package/lib/services/http/firm/client-movement/client-movement.service.d.ts +1 -1
  148. package/lib/services/http/firm/employee/employee.service.d.ts +1 -1
  149. package/lib/services/http/firm/employee-invite/employee-invite.service.d.ts +1 -1
  150. package/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.d.ts +1 -1
  151. package/lib/services/http/income-source/income-source.service.d.ts +1 -1
  152. package/lib/services/http/income-source/salary-forecast/salary-forecast.service.d.ts +1 -1
  153. package/lib/services/http/income-source/sole-forecast/sole-forecast.service.d.ts +1 -1
  154. package/lib/services/http/loan/loan.service.d.ts +1 -1
  155. package/lib/services/http/property/property-category/property-category.service.d.ts +1 -1
  156. package/lib/services/http/property/property-category-movement/property-category-movement.service.d.ts +1 -1
  157. package/lib/services/http/property/property-document/property-document.service.d.ts +1 -1
  158. package/lib/services/http/property/property-sale/property-sale.service.d.ts +1 -1
  159. package/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.d.ts +1 -1
  160. package/lib/services/http/property/property-share/property-share.service.d.ts +1 -1
  161. package/lib/services/http/property/property.service.d.ts +8 -11
  162. package/lib/services/http/rest/http-method.type.d.ts +1 -0
  163. package/lib/services/http/rest/index.d.ts +2 -0
  164. package/lib/services/http/rest/rest-method.type.d.ts +1 -0
  165. package/lib/services/http/rest/rest-old.service.d.ts +110 -0
  166. package/lib/services/http/rest/rest.service.d.ts +71 -62
  167. package/lib/services/http/service-notification/service-notification.service.d.ts +1 -1
  168. package/lib/services/http/sole/bas-report/bas-report.service.d.ts +1 -1
  169. package/lib/services/http/sole/sole-business/sole-business.service.d.ts +1 -1
  170. package/lib/services/http/sole/sole-business-activity/sole-business-activity.service.d.ts +1 -1
  171. package/lib/services/http/sole/sole-business-loss/sole-business-loss-rules/sole-business-loss-offset-rule.service.d.ts +1 -1
  172. package/lib/services/http/sole/sole-business-loss/sole-business-loss.service.d.ts +1 -1
  173. package/lib/services/http/sole/sole-contact/sole-contact.service.d.ts +1 -1
  174. package/lib/services/http/sole/sole-invoice/sole-invoice.service.d.ts +1 -1
  175. package/lib/services/http/sole/sole-invoice-template/sole-invoice-template.service.d.ts +1 -1
  176. package/lib/services/http/subscription/service-price.service.d.ts +1 -1
  177. package/lib/services/http/tax-review/tax-review-history/tax-review-history.service.d.ts +1 -1
  178. package/lib/services/http/tax-review/tax-review.service.d.ts +1 -1
  179. package/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.d.ts +1 -1
  180. package/lib/services/http/transaction/transaction.service.d.ts +1 -1
  181. package/lib/services/http/user/user-event-setting/user-event-setting.service.d.ts +1 -1
  182. package/lib/services/http/user/user-event-type/user-event-type.service.d.ts +1 -1
  183. package/lib/services/http/user/users-invite/users-invite.service.d.ts +1 -1
  184. package/lib/services/http/vehicle/vehicle-claim.service.d.ts +1 -1
  185. package/lib/services/http/vehicle/vehicle-logbook.service.d.ts +1 -1
  186. package/lib/services/http/vehicle/vehicle.service.d.ts +1 -1
  187. package/package.json +1 -1
@@ -1,2 +1,4 @@
1
1
  export * from './rest.service';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9yZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Jlc3Quc2VydmljZSc7XG4iXX0=
2
+ export * from './rest-method.type';
3
+ export * from './http-method.type';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9yZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yZXN0LnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL3Jlc3QtbWV0aG9kLnR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9odHRwLW1ldGhvZC50eXBlJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1tZXRob2QudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3Jlc3QvcmVzdC1tZXRob2QudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlY2xhcmUgdHlwZSBSZXN0TWV0aG9kID0gJ2dldCcgfCAncG9zdCcgfCAncG9zdEJhdGNoJyB8ICdwdXQnIHwgJ3B1dEJhdGNoJyB8ICdkZWxldGUnIHwgJ2RlbGV0ZUJhdGNoJztcbiJdfQ==
@@ -0,0 +1,225 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { ReplaySubject } from 'rxjs';
3
+ import { map } from 'rxjs/operators';
4
+ import { replace } from '../../../functions/array';
5
+ import { classToPlain, plainToClass } from 'class-transformer';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ import * as i2 from "../../event/event-dispatcher.service";
9
+ import * as i3 from "../../toast/toast.service";
10
+ /**
11
+ * Abstract base service that implements common services functionality
12
+ * and describe abstract methods/properties that have to be implemented in child services
13
+ * Model - entity service is working with
14
+ * BaseModel - base entity model that extends by Model
15
+ * @TODO TT-1777 Alex: remove when all services refactored
16
+ */
17
+ export class RestService {
18
+ constructor(http, eventDispatcherService, environment, toastService) {
19
+ this.http = http;
20
+ this.eventDispatcherService = eventDispatcherService;
21
+ this.environment = environment;
22
+ this.toastService = toastService;
23
+ // subject for service cache
24
+ this.cacheSubject = new ReplaySubject(1);
25
+ this.listenEvents();
26
+ }
27
+ /**
28
+ * get cached list of all instances
29
+ */
30
+ get() {
31
+ if (!this.cache) {
32
+ this.cache = [];
33
+ this.fetch().subscribe();
34
+ }
35
+ return this.cacheSubject.asObservable();
36
+ }
37
+ /**
38
+ * get instance by id from cache
39
+ * @param id ID of required item
40
+ */
41
+ findById(id) {
42
+ return this.get()
43
+ .pipe(map((items) => {
44
+ return items.find((item) => item['id'] === id);
45
+ }));
46
+ }
47
+ find(id) {
48
+ return this.cache.find((item) => item['id'] === id);
49
+ }
50
+ /**
51
+ * add new instance and update cache
52
+ */
53
+ create(data, shouldUpdateCache = true) {
54
+ return this.http.post(`${this.environment.apiV2}/${this.url}`, data)
55
+ .pipe(map((newItem) => {
56
+ if (!shouldUpdateCache) {
57
+ return null;
58
+ }
59
+ const newInstance = this.createModelInstance(this.modelClass, newItem);
60
+ if (this.cache) {
61
+ this.cache.push(newInstance);
62
+ this.updateCache();
63
+ }
64
+ if (this.messageCreated) {
65
+ this.toastService.success(this.messageCreated);
66
+ }
67
+ return newInstance;
68
+ }));
69
+ }
70
+ /**
71
+ * @TODO Alex TT-1777 rename to post
72
+ */
73
+ add(model, shouldUpdateCache = true) {
74
+ return this.create(classToPlain(model), shouldUpdateCache);
75
+ }
76
+ /**
77
+ * @TODO Alex TT-1777 rename to upload
78
+ */
79
+ postForm(file, params = {}) {
80
+ const formData = new FormData();
81
+ formData.append('file', file);
82
+ for (let key in params) {
83
+ formData.append(key, params[key]);
84
+ }
85
+ return this.create(formData);
86
+ }
87
+ /**
88
+ * Add several new items
89
+ * @param models Array of new items for saving
90
+ * @param queryParams query parameters for request
91
+ * @TODO Alex TT-1777 rename to postBatch
92
+ */
93
+ addBatch(models, queryParams = {}) {
94
+ return this.http.post(`${this.environment.apiV2}/${this.url}`, classToPlain(models), queryParams)
95
+ .pipe(map((newItems) => {
96
+ const newInstances = newItems.map((item) => this.createModelInstance(this.modelClass, item));
97
+ if (this.cache) {
98
+ this.cache.push(...newInstances);
99
+ this.updateCache();
100
+ }
101
+ if (this.messageCreatedBatch) {
102
+ this.toastService.success(this.messageCreatedBatch);
103
+ }
104
+ return newInstances;
105
+ }));
106
+ }
107
+ /**
108
+ * Update item
109
+ * @param model Existing instance for updating
110
+ * @param queryParams query parameters for request
111
+ * @TODO Alex TT-1777 rename to put
112
+ */
113
+ update(model, queryParams = {}) {
114
+ return this.http.put(`${this.environment.apiV2}/${this.url}/${model['id']}`, classToPlain(model), queryParams)
115
+ .pipe(map((updatedItem) => {
116
+ const updatedInstance = this.createModelInstance(this.modelClass, updatedItem);
117
+ replace(this.cache, updatedInstance);
118
+ this.updateCache();
119
+ if (this.messageUpdated) {
120
+ this.toastService.success(this.messageUpdated);
121
+ }
122
+ return updatedInstance;
123
+ }));
124
+ }
125
+ /**
126
+ * Update several items
127
+ * @param models Array of items for updating
128
+ * @param queryParams query parameters for request
129
+ * TODO Alex TT-1777 rename to putBatch
130
+ */
131
+ updateBatch(models, queryParams = {}) {
132
+ return this.http.put(`${this.environment.apiV2}/${this.url}`, classToPlain(models), queryParams)
133
+ .pipe(map((updatedItems) => {
134
+ const updatedInstances = updatedItems.map((item) => this.createModelInstance(this.modelClass, item));
135
+ updatedInstances.forEach((instance) => {
136
+ replace(this.cache, instance);
137
+ });
138
+ if (this.messageUpdatedBatch) {
139
+ this.toastService.success(this.messageUpdatedBatch);
140
+ }
141
+ this.updateCache();
142
+ return updatedInstances;
143
+ }));
144
+ }
145
+ /**
146
+ * delete instance of class
147
+ * @param model Class instance for deleting
148
+ */
149
+ delete(model) {
150
+ return this.http.delete(`${this.environment.apiV2}/${this.url}/${model['id']}`)
151
+ .pipe(map(() => {
152
+ this.cache = this.cache.filter((item) => item['id'] !== model['id']);
153
+ this.updateCache();
154
+ if (this.messageDeleted) {
155
+ this.toastService.success(this.messageDeleted);
156
+ }
157
+ }));
158
+ }
159
+ /**
160
+ * delete multiple instances of class
161
+ * @param models Class instances array for deleting
162
+ */
163
+ deleteBatch(models) {
164
+ return this.http.post(`${this.environment.apiV2}/${this.url}/delete`, models)
165
+ .pipe(map(() => {
166
+ const ids = models.map((model) => model['id']);
167
+ this.cache = this.cache.filter((item) => !ids.includes(item['id']));
168
+ this.updateCache();
169
+ if (this.messageDeletedBatch) {
170
+ this.toastService.success(this.messageDeletedBatch);
171
+ }
172
+ }));
173
+ }
174
+ /**
175
+ * clear service cache
176
+ */
177
+ resetCache() {
178
+ this.fetch().subscribe();
179
+ }
180
+ /**
181
+ * get list of base class instances directly from backend
182
+ */
183
+ fetch() {
184
+ return this.http.get(`${this.environment.apiV2}/${this.url}`)
185
+ .pipe(map((response) => {
186
+ const items = (this.isHydra ? response['hydra:member'] : response)
187
+ .map((item) => {
188
+ return this.createModelInstance(this.modelClass, item);
189
+ });
190
+ this.cache = items;
191
+ this.updateCache();
192
+ return items;
193
+ }));
194
+ }
195
+ /**
196
+ * Update cache subject with current cache array value
197
+ */
198
+ updateCache() {
199
+ this.cacheSubject.next(this.cache.slice());
200
+ }
201
+ /**
202
+ * Create new instance of class
203
+ * @param model The class for which you want to create an instance
204
+ * @param baseModel base model instance that we will use as constructor options
205
+ */
206
+ createModelInstance(model, baseModel) {
207
+ return plainToClass(model, baseModel, { excludePrefixes: ['@'] });
208
+ }
209
+ /**
210
+ * Method that call all listeners. Empty by default. Should be redefined by child services if required
211
+ */
212
+ listenEvents() { }
213
+ }
214
+ RestService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: RestService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: 'environment' }, { token: i3.ToastService }], target: i0.ɵɵFactoryTarget.Injectable });
215
+ RestService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: RestService, providedIn: 'root' });
216
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: RestService, decorators: [{
217
+ type: Injectable,
218
+ args: [{
219
+ providedIn: 'root'
220
+ }]
221
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: undefined, decorators: [{
222
+ type: Inject,
223
+ args: ['environment']
224
+ }] }, { type: i3.ToastService }]; } });
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1vbGQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3Jlc3QvcmVzdC1vbGQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFJL0Q7Ozs7OztHQU1HO0FBSUgsTUFBTSxPQUFnQixXQUFXO0lBbUIvQixZQUNZLElBQWdCLEVBQ2hCLHNCQUE4QyxFQUN2QixXQUFnQixFQUN2QyxZQUEwQjtRQUgxQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDdkIsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUFDdkMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFmdEMsNEJBQTRCO1FBQ2xCLGlCQUFZLEdBQTJCLElBQUksYUFBYSxDQUFVLENBQUMsQ0FBQyxDQUFDO1FBZ0I3RSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsR0FBRztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQzFCO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVks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QkF1QkksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyByZXBsYWNlIH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zL2FycmF5JztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXZlbnQvZXZlbnQtZGlzcGF0Y2hlci5zZXJ2aWNlJztcbmltcG9ydCB7IGNsYXNzVG9QbGFpbiwgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdG9hc3QvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBJRXZlbnRMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvZXZlbnQtbGlzdGVuZXIuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIHNlcnZpY2UgdGhhdCBpbXBsZW1lbnRzIGNvbW1vbiBzZXJ2aWNlcyBmdW5jdGlvbmFsaXR5XG4gKiBhbmQgZGVzY3JpYmUgYWJzdHJhY3QgbWV0aG9kcy9wcm9wZXJ0aWVzIHRoYXQgaGF2ZSB0byBiZSBpbXBsZW1lbnRlZCBpbiBjaGlsZCBzZXJ2aWNlc1xuICogTW9kZWwgLSBlbnRpdHkgc2VydmljZSBpcyB3b3JraW5nIHdpdGhcbiAqIEJhc2VNb2RlbCAtIGJhc2UgZW50aXR5IG1vZGVsIHRoYXQgZXh0ZW5kcyBieSBNb2RlbFxuICogQFRPRE8gVFQtMTc3NyBBbGV4OiByZW1vdmUgd2hlbiBhbGwgc2VydmljZXMgcmVmYWN0b3JlZFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXN0U2VydmljZTxCYXNlTW9kZWwsIE1vZGVsIGV4dGVuZHMgQmFzZU1vZGVsPiBpbXBsZW1lbnRzIElFdmVudExpc3RlbmVyIHtcbiAgLy8gdXJsIHBhcnQgZm9yIHNlcnZpY2UgZW50aXR5IEFQSS4gSGF2ZSB0byBiZSBkZWZpbmVkIGluIGV4dGVuZGVkIGNsYXNzZXNcbiAgYWJzdHJhY3QgdXJsOiBzdHJpbmc7XG4gIC8vIE1vZGVsIGNsYXNzIGZvciBpbnN0YW5jZXMgY3JlYXRpbmdcbiAgYWJzdHJhY3QgbW9kZWxDbGFzcztcbiAgLy8gQFRPRE8gTWFrZSBjYWNoZSBSZWFkb25seVxuICAvLyBjYWNoZWQgYXJyYXkgb2Ygc2VydmljZSBjbGFzcyBpbnN0YW5jZXNcbiAgcHJvdGVjdGVkIGNhY2hlOiBNb2RlbFtdO1xuICAvLyBzdWJqZWN0IGZvciBzZXJ2aWNlIGNhY2hlXG4gIHByb3RlY3RlZCBjYWNoZVN1YmplY3Q6IFJlcGxheVN1YmplY3Q8TW9kZWxbXT4gPSBuZXcgUmVwbGF5U3ViamVjdDxNb2RlbFtdPigxKTtcbiAgLy8gZmxhZyBmb3Igd29yayB3aXRoIEFQSSBwbGF0Zm9ybVxuICBwcm90ZWN0ZWQgaXNIeWRyYTogYm9vbGVhbjtcbiAgbWVzc2FnZUNyZWF0ZWQ6IHN0cmluZztcbiAgbWVzc2FnZUNyZWF0ZWRCYXRjaDogc3RyaW5nO1xuICBtZXNzYWdlVXBkYXRlZDogc3RyaW5nO1xuICBtZXNzYWdlVXBkYXRlZEJhdGNoOiBzdHJpbmc7XG4gIG1lc3NhZ2VEZWxldGVkOiBzdHJpbmc7XG4gIG1lc3NhZ2VEZWxldGVkQmF0Y2g6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcm90ZWN0ZWQgZXZlbnREaXNwYXRjaGVyU2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogYW55LFxuICAgIHByb3RlY3RlZCB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZVxuICApIHtcbiAgICB0aGlzLmxpc3RlbkV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBjYWNoZWQgbGlzdCBvZiBhbGwgaW5zdGFuY2VzXG4gICAqL1xuICBnZXQoKTogT2JzZXJ2YWJsZTxNb2RlbFtdPiB7XG4gICAgaWYgKCF0aGlzLmNhY2hlKSB7XG4gICAgICB0aGlzLmNhY2hlID0gW107XG4gICAgICB0aGlzLmZldGNoKCkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FjaGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCBpbnN0YW5jZSBieSBpZCBmcm9tIGNhY2hlXG4gICAqIEBwYXJhbSBpZCBJRCBvZiByZXF1aXJlZCBpdGVtXG4gICAqL1xuICBmaW5kQnlJZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxNb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLmdldCgpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChpdGVtczogTW9kZWxbXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtcy5maW5kKChpdGVtOiBNb2RlbCkgPT4gaXRlbVsnaWQnXSA9PT0gaWQpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGZpbmQoaWQ6IG51bWJlcik6IE1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5maW5kKChpdGVtOiBNb2RlbCkgPT4gaXRlbVsnaWQnXSA9PT0gaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIGFkZCBuZXcgaW5zdGFuY2UgYW5kIHVwZGF0ZSBjYWNoZVxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGUoZGF0YTogb2JqZWN0LCBzaG91bGRVcGRhdGVDYWNoZTogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPE1vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9YCwgZGF0YSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKG5ld0l0ZW06IEJhc2VNb2RlbCkgPT4ge1xuICAgICAgICAgIGlmICghc2hvdWxkVXBkYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbmV3SW5zdGFuY2U6IE1vZGVsID0gdGhpcy5jcmVhdGVNb2RlbEluc3RhbmNlKHRoaXMubW9kZWxDbGFzcywgbmV3SXRlbSk7XG4gICAgICAgICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGUucHVzaChuZXdJbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUNyZWF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3ModGhpcy5tZXNzYWdlQ3JlYXRlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ld0luc3RhbmNlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAVE9ETyBBbGV4IFRULTE3NzcgcmVuYW1lIHRvIHBvc3RcbiAgICovXG4gIGFkZChtb2RlbDogTW9kZWwsIHNob3VsZFVwZGF0ZUNhY2hlOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8TW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGUoY2xhc3NUb1BsYWluKG1vZGVsKSwgc2hvdWxkVXBkYXRlQ2FjaGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBUT0RPIEFsZXggVFQtMTc3NyByZW5hbWUgdG8gdXBsb2FkXG4gICAqL1xuICBwb3N0Rm9ybShmaWxlOiBGaWxlLCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSk6IE9ic2VydmFibGU8TW9kZWw+IHtcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlKTtcbiAgICBmb3IgKGxldCBrZXkgaW4gcGFyYW1zKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBwYXJhbXNba2V5XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKGZvcm1EYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgc2V2ZXJhbCBuZXcgaXRlbXNcbiAgICogQHBhcmFtIG1vZGVscyBBcnJheSBvZiBuZXcgaXRlbXMgZm9yIHNhdmluZ1xuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXMgcXVlcnkgcGFyYW1ldGVycyBmb3IgcmVxdWVzdFxuICAgKiBAVE9ETyBBbGV4IFRULTE3NzcgcmVuYW1lIHRvIHBvc3RCYXRjaFxuICAgKi9cbiAgYWRkQmF0Y2gobW9kZWxzOiBNb2RlbFtdLCBxdWVyeVBhcmFtczogb2JqZWN0ID0ge30pOiBPYnNlcnZhYmxlPE1vZGVsW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH1gLCBjbGFzc1RvUGxhaW4obW9kZWxzKSwgcXVlcnlQYXJhbXMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChuZXdJdGVtczogQmFzZU1vZGVsW10pID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdJbnN0YW5jZXM6IE1vZGVsW10gPSBuZXdJdGVtcy5tYXAoKGl0ZW06IEJhc2VNb2RlbCkgPT4gdGhpcy5jcmVhdGVNb2RlbEluc3RhbmNlKHRoaXMubW9kZWxDbGFzcywgaXRlbSkpO1xuICAgICAgICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlLnB1c2goLi4ubmV3SW5zdGFuY2VzKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlQ3JlYXRlZEJhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMubWVzc2FnZUNyZWF0ZWRCYXRjaCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ld0luc3RhbmNlcztcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGl0ZW1cbiAgICogQHBhcmFtIG1vZGVsIEV4aXN0aW5nIGluc3RhbmNlIGZvciB1cGRhdGluZ1xuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXMgcXVlcnkgcGFyYW1ldGVycyBmb3IgcmVxdWVzdFxuICAgKiBAVE9ETyBBbGV4IFRULTE3NzcgcmVuYW1lIHRvIHB1dFxuICAgKi9cbiAgdXBkYXRlKG1vZGVsOiBNb2RlbCwgcXVlcnlQYXJhbXM6IG9iamVjdCA9IHt9KTogT2JzZXJ2YWJsZTxNb2RlbD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7bW9kZWxbJ2lkJ119YCwgY2xhc3NUb1BsYWluKG1vZGVsKSwgcXVlcnlQYXJhbXMpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh1cGRhdGVkSXRlbTogQmFzZU1vZGVsKSA9PiB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZEluc3RhbmNlOiBNb2RlbCA9IHRoaXMuY3JlYXRlTW9kZWxJbnN0YW5jZSh0aGlzLm1vZGVsQ2xhc3MsIHVwZGF0ZWRJdGVtKTtcbiAgICAgICAgICByZXBsYWNlKHRoaXMuY2FjaGUsIHVwZGF0ZWRJbnN0YW5jZSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMubWVzc2FnZVVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3ModGhpcy5tZXNzYWdlVXBkYXRlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRJbnN0YW5jZTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHNldmVyYWwgaXRlbXNcbiAgICogQHBhcmFtIG1vZGVscyBBcnJheSBvZiBpdGVtcyBmb3IgdXBkYXRpbmdcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHJlcXVlc3RcbiAgICogVE9ETyBBbGV4IFRULTE3NzcgcmVuYW1lIHRvIHB1dEJhdGNoXG4gICAqL1xuICB1cGRhdGVCYXRjaChtb2RlbHM6IE1vZGVsW10sIHF1ZXJ5UGFyYW1zOiBvYmplY3QgPSB7fSk6IE9ic2VydmFibGU8TW9kZWxbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9YCwgY2xhc3NUb1BsYWluKG1vZGVscyksIHF1ZXJ5UGFyYW1zKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodXBkYXRlZEl0ZW1zOiBCYXNlTW9kZWxbXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJbnN0YW5jZXM6IE1vZGVsW10gPSB1cGRhdGVkSXRlbXMubWFwKChpdGVtOiBCYXNlTW9kZWwpID0+IHRoaXMuY3JlYXRlTW9kZWxJbnN0YW5jZSh0aGlzLm1vZGVsQ2xhc3MsIGl0ZW0pKTtcbiAgICAgICAgICB1cGRhdGVkSW5zdGFuY2VzLmZvckVhY2goKGluc3RhbmNlOiBNb2RlbCkgPT4ge1xuICAgICAgICAgICAgcmVwbGFjZSh0aGlzLmNhY2hlLCBpbnN0YW5jZSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlVXBkYXRlZEJhdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMubWVzc2FnZVVwZGF0ZWRCYXRjaCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgICAgIHJldHVybiB1cGRhdGVkSW5zdGFuY2VzO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBkZWxldGUgaW5zdGFuY2Ugb2YgY2xhc3NcbiAgICogQHBhcmFtIG1vZGVsIENsYXNzIGluc3RhbmNlIGZvciBkZWxldGluZ1xuICAgKi9cbiAgZGVsZXRlKG1vZGVsOiBNb2RlbCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9LyR7dGhpcy51cmx9LyR7bW9kZWxbJ2lkJ119YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmNhY2hlLmZpbHRlcigoaXRlbTogTW9kZWwpID0+IGl0ZW1bJ2lkJ10gIT09IG1vZGVsWydpZCddKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlRGVsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2Vzcyh0aGlzLm1lc3NhZ2VEZWxldGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgY2xhc3NcbiAgICogQHBhcmFtIG1vZGVscyBDbGFzcyBpbnN0YW5jZXMgYXJyYXkgZm9yIGRlbGV0aW5nXG4gICAqL1xuICBkZWxldGVCYXRjaChtb2RlbHM6IE1vZGVsW10pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH0vZGVsZXRlYCwgbW9kZWxzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWRzOiBudW1iZXJbXSA9IG1vZGVscy5tYXAoKG1vZGVsOiBNb2RlbCk6IG51bWJlciA9PiBtb2RlbFsnaWQnXSk7XG4gICAgICAgICAgdGhpcy5jYWNoZSA9IHRoaXMuY2FjaGUuZmlsdGVyKChpdGVtOiBNb2RlbCkgPT4gIWlkcy5pbmNsdWRlcyhpdGVtWydpZCddKSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuXG4gICAgICAgICAgaWYgKHRoaXMubWVzc2FnZURlbGV0ZWRCYXRjaCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2Vzcyh0aGlzLm1lc3NhZ2VEZWxldGVkQmF0Y2gpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogY2xlYXIgc2VydmljZSBjYWNoZVxuICAgKi9cbiAgcmVzZXRDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZldGNoKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGxpc3Qgb2YgYmFzZSBjbGFzcyBpbnN0YW5jZXMgZGlyZWN0bHkgZnJvbSBiYWNrZW5kXG4gICAqL1xuICBwcm90ZWN0ZWQgZmV0Y2goKTogT2JzZXJ2YWJsZTxNb2RlbFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vJHt0aGlzLnVybH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IEJhc2VNb2RlbFtdKTogTW9kZWxbXSA9PiB7XG4gICAgICAgICAgY29uc3QgaXRlbXM6IE1vZGVsW10gPSAodGhpcy5pc0h5ZHJhID8gcmVzcG9uc2VbJ2h5ZHJhOm1lbWJlciddIDogcmVzcG9uc2UpXG4gICAgICAgICAgICAubWFwKChpdGVtOiBCYXNlTW9kZWwpOiBNb2RlbCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU1vZGVsSW5zdGFuY2UodGhpcy5tb2RlbENsYXNzLCBpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2FjaGUgPSBpdGVtcztcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY2FjaGUgc3ViamVjdCB3aXRoIGN1cnJlbnQgY2FjaGUgYXJyYXkgdmFsdWVcbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlU3ViamVjdC5uZXh0KHRoaXMuY2FjaGUuc2xpY2UoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBpbnN0YW5jZSBvZiBjbGFzc1xuICAgKiBAcGFyYW0gbW9kZWwgVGhlIGNsYXNzIGZvciB3aGljaCB5b3Ugd2FudCB0byBjcmVhdGUgYW4gaW5zdGFuY2VcbiAgICogQHBhcmFtIGJhc2VNb2RlbCBiYXNlIG1vZGVsIGluc3RhbmNlIHRoYXQgd2Ugd2lsbCB1c2UgYXMgY29uc3RydWN0b3Igb3B0aW9uc1xuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZU1vZGVsSW5zdGFuY2UobW9kZWw6IG5ldyhibTogQmFzZU1vZGVsKSA9PiBNb2RlbCwgYmFzZU1vZGVsOiBCYXNlTW9kZWwpOiBNb2RlbCB7XG4gICAgcmV0dXJuIHBsYWluVG9DbGFzcyhtb2RlbCwgYmFzZU1vZGVsLCB7IGV4Y2x1ZGVQcmVmaXhlczogWydAJ10gfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRoYXQgY2FsbCBhbGwgbGlzdGVuZXJzLiBFbXB0eSBieSBkZWZhdWx0LiBTaG91bGQgYmUgcmVkZWZpbmVkIGJ5IGNoaWxkIHNlcnZpY2VzIGlmIHJlcXVpcmVkXG4gICAqL1xuICBsaXN0ZW5FdmVudHMoKTogdm9pZCB7fVxufVxuIl19