taxtank-core 0.10.6 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/bundles/taxtank-core.umd.js +1723 -1351
  2. package/bundles/taxtank-core.umd.js.map +1 -1
  3. package/esm2015/lib/collections/account-setup-item.collection.js +11 -0
  4. package/esm2015/lib/collections/bank-transaction.collection.js +2 -2
  5. package/esm2015/lib/collections/collection-dictionary.js +4 -4
  6. package/esm2015/lib/collections/collection.js +4 -1
  7. package/esm2015/lib/collections/depreciation.collection.js +24 -10
  8. package/esm2015/lib/collections/transaction-allocation.collection.js +2 -2
  9. package/esm2015/lib/collections/transaction.collection.js +28 -1
  10. package/esm2015/lib/collections/vehicle-logbook.collection.js +88 -0
  11. package/esm2015/lib/collections/vehicle.collection.js +9 -0
  12. package/esm2015/lib/db/Enums/chart-accounts-heading-vehicle-list.enum.js +3 -1
  13. package/esm2015/lib/db/Enums/chart-accounts-list.enum.js +4 -3
  14. package/esm2015/lib/db/Enums/property/property-category-list.enum.js +2 -1
  15. package/esm2015/lib/db/Enums/user-status.enum.js +1 -2
  16. package/esm2015/lib/db/Models/client-details.js +1 -1
  17. package/esm2015/lib/db/Models/client-income-types.js +3 -0
  18. package/esm2015/lib/db/Models/vehicle-claim.js +1 -1
  19. package/esm2015/lib/db/Models/vehicle.js +1 -1
  20. package/esm2015/lib/forms/client/client-income-types.form.js +22 -0
  21. package/esm2015/lib/forms/index.js +4 -1
  22. package/esm2015/lib/forms/vehicle/vehicle-claim.form.js +114 -0
  23. package/esm2015/lib/forms/vehicle/vehicle.form.js +20 -0
  24. package/esm2015/lib/interfaces/event-listener.interface.js +1 -1
  25. package/esm2015/lib/interfaces/expense.interface.js +2 -0
  26. package/esm2015/lib/interfaces/tank.interface.js +1 -1
  27. package/esm2015/lib/models/account-setup/account-setup-item.js +6 -0
  28. package/esm2015/lib/models/account-setup/account-setup-items.const.js +44 -0
  29. package/esm2015/lib/models/account-setup/account-setup-items.enum.js +14 -0
  30. package/esm2015/lib/models/chart-accounts/chart-accounts-value.js +4 -0
  31. package/esm2015/lib/models/chart-accounts/chart-accounts.js +34 -1
  32. package/esm2015/lib/models/client/client-income-types.js +10 -0
  33. package/esm2015/lib/models/depreciation/depreciation.js +5 -1
  34. package/esm2015/lib/models/event/app-event-type.enum.js +4 -1
  35. package/esm2015/lib/models/export/export-data-table.js +6 -0
  36. package/esm2015/lib/models/logbook/logbook-period.js +8 -1
  37. package/esm2015/lib/models/logbook/vehicle-claim.js +63 -4
  38. package/esm2015/lib/models/logbook/vehicle-logbook.js +9 -3
  39. package/esm2015/lib/models/logbook/vehicle.js +7 -29
  40. package/esm2015/lib/models/pdf/pdf-config.js +2 -2
  41. package/esm2015/lib/models/pdf/pdf-orientation.enum.js +6 -0
  42. package/esm2015/lib/models/transaction/transaction.js +1 -1
  43. package/esm2015/lib/services/account-setup/account-setup.service.js +109 -0
  44. package/esm2015/lib/services/http/bank/bank-account/bank-account.service.js +6 -15
  45. package/esm2015/lib/services/http/bank/bank-connection/bank-connection.service.js +6 -15
  46. package/esm2015/lib/services/http/bank/bank-transaction/bank-transaction.service.js +6 -15
  47. package/esm2015/lib/services/http/bank/basiq/basiq.service.js +6 -15
  48. package/esm2015/lib/services/http/chart-accounts/chart-accounts.service.js +1 -1
  49. package/esm2015/lib/services/http/chat/chat.service.js +8 -12
  50. package/esm2015/lib/services/http/chat/message/message.service.js +8 -12
  51. package/esm2015/lib/services/http/chat/message-document/message-document.service.js +1 -1
  52. package/esm2015/lib/services/http/depreciation/depreciation.service.js +6 -23
  53. package/esm2015/lib/services/http/document/document-folder/document-folder.service.js +6 -14
  54. package/esm2015/lib/services/http/firm/client-income/client-income-types.service.js +50 -0
  55. package/esm2015/lib/services/http/firm/client-movement/client-movement.service.js +6 -15
  56. package/esm2015/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.js +6 -15
  57. package/esm2015/lib/services/http/income-source/income-source.service.js +6 -14
  58. package/esm2015/lib/services/http/income-source/salary-forecast/salary-forecast.service.js +6 -15
  59. package/esm2015/lib/services/http/income-source/sole-forecast/sole-forecast.service.js +6 -15
  60. package/esm2015/lib/services/http/loan/loan.service.js +6 -15
  61. package/esm2015/lib/services/http/property/property-document/property-document.service.js +6 -15
  62. package/esm2015/lib/services/http/property/property-share/property-share.service.js +6 -15
  63. package/esm2015/lib/services/http/property/property.service.js +6 -15
  64. package/esm2015/lib/services/http/rest/rest.service.js +31 -4
  65. package/esm2015/lib/services/http/service-notification/service-notification.service.js +8 -12
  66. package/esm2015/lib/services/http/subscription/subscription.service.js +1 -4
  67. package/esm2015/lib/services/http/tax-review/tax-review-history/tax-review-history.service.js +15 -16
  68. package/esm2015/lib/services/http/tax-review/tax-review.service.js +6 -15
  69. package/esm2015/lib/services/http/tax-summary/tax-summary.service.js +1 -1
  70. package/esm2015/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.js +6 -15
  71. package/esm2015/lib/services/http/transaction/transaction.service.js +16 -25
  72. package/esm2015/lib/services/http/user/user-event-setting/user-event-setting.service.js +6 -14
  73. package/esm2015/lib/services/http/user/user-event-type/user-event-type.service.js +6 -14
  74. package/esm2015/lib/services/http/vehicle/messages.enum.js +13 -0
  75. package/esm2015/lib/services/http/vehicle/vehicle-claim.service.js +24 -0
  76. package/esm2015/lib/services/http/vehicle/vehicle-logbook.service.js +59 -0
  77. package/esm2015/lib/services/http/vehicle/vehicle.service.js +49 -213
  78. package/esm2015/lib/services/pdf/pdf.service.js +51 -26
  79. package/esm2015/lib/services/property/property-holding-costs/property-holding-costs.service.js +53 -0
  80. package/esm2015/lib/validators/at-least-one.validator.js +11 -0
  81. package/esm2015/lib/validators/index.js +2 -0
  82. package/esm2015/public-api.js +16 -2
  83. package/fesm2015/taxtank-core.js +1536 -1155
  84. package/fesm2015/taxtank-core.js.map +1 -1
  85. package/lib/collections/account-setup-item.collection.d.ts +6 -0
  86. package/lib/collections/collection.d.ts +1 -0
  87. package/lib/collections/depreciation.collection.d.ts +5 -4
  88. package/lib/collections/transaction.collection.d.ts +9 -0
  89. package/lib/collections/vehicle-logbook.collection.d.ts +30 -0
  90. package/lib/collections/vehicle.collection.d.ts +6 -0
  91. package/lib/db/Enums/chart-accounts-heading-vehicle-list.enum.d.ts +3 -1
  92. package/lib/db/Enums/chart-accounts-list.enum.d.ts +4 -3
  93. package/lib/db/Enums/property/property-category-list.enum.d.ts +2 -1
  94. package/lib/db/Enums/user-status.enum.d.ts +1 -2
  95. package/lib/db/Models/client-details.d.ts +5 -1
  96. package/lib/db/Models/client-income-types.d.ts +11 -0
  97. package/lib/db/Models/vehicle-claim.d.ts +2 -0
  98. package/lib/db/Models/vehicle.d.ts +2 -0
  99. package/lib/forms/client/client-income-types.form.d.ts +7 -0
  100. package/lib/forms/index.d.ts +3 -0
  101. package/lib/forms/vehicle/vehicle-claim.form.d.ts +43 -0
  102. package/lib/forms/vehicle/vehicle.form.d.ts +11 -0
  103. package/lib/interfaces/event-listener.interface.d.ts +1 -0
  104. package/lib/interfaces/expense.interface.d.ts +12 -0
  105. package/lib/interfaces/tank.interface.d.ts +2 -0
  106. package/lib/models/account-setup/account-setup-item.d.ts +9 -0
  107. package/lib/models/account-setup/account-setup-items.const.d.ts +7 -0
  108. package/lib/models/account-setup/account-setup-items.enum.d.ts +12 -0
  109. package/lib/models/chart-accounts/chart-accounts-value.d.ts +3 -0
  110. package/lib/models/chart-accounts/chart-accounts.d.ts +18 -0
  111. package/lib/models/client/client-income-types.d.ts +7 -0
  112. package/lib/models/depreciation/depreciation.d.ts +6 -2
  113. package/lib/models/event/app-event-type.enum.d.ts +4 -1
  114. package/lib/models/export/export-data-table.d.ts +9 -0
  115. package/lib/models/logbook/logbook-period.d.ts +4 -0
  116. package/lib/models/logbook/vehicle-claim.d.ts +20 -3
  117. package/lib/models/logbook/vehicle-logbook.d.ts +8 -2
  118. package/lib/models/logbook/vehicle.d.ts +5 -7
  119. package/lib/models/pdf/pdf-orientation.enum.d.ts +4 -0
  120. package/lib/models/transaction/transaction.d.ts +2 -2
  121. package/lib/services/account-setup/account-setup.service.d.ts +43 -0
  122. package/lib/services/http/bank/bank-account/bank-account.service.d.ts +2 -7
  123. package/lib/services/http/bank/bank-connection/bank-connection.service.d.ts +2 -7
  124. package/lib/services/http/bank/bank-transaction/bank-transaction.service.d.ts +3 -8
  125. package/lib/services/http/bank/basiq/basiq.service.d.ts +2 -7
  126. package/lib/services/http/chat/chat.service.d.ts +4 -7
  127. package/lib/services/http/chat/message/message.service.d.ts +4 -7
  128. package/lib/services/http/chat/message-document/message-document.service.d.ts +3 -3
  129. package/lib/services/http/depreciation/depreciation.service.d.ts +2 -11
  130. package/lib/services/http/document/document-folder/document-folder.service.d.ts +0 -6
  131. package/lib/services/http/firm/client-income/client-income-types.service.d.ts +18 -0
  132. package/lib/services/http/firm/client-movement/client-movement.service.d.ts +2 -7
  133. package/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.d.ts +2 -7
  134. package/lib/services/http/income-source/income-source.service.d.ts +0 -6
  135. package/lib/services/http/income-source/salary-forecast/salary-forecast.service.d.ts +1 -7
  136. package/lib/services/http/income-source/sole-forecast/sole-forecast.service.d.ts +2 -7
  137. package/lib/services/http/loan/loan.service.d.ts +2 -7
  138. package/lib/services/http/property/property-document/property-document.service.d.ts +3 -8
  139. package/lib/services/http/property/property-share/property-share.service.d.ts +2 -7
  140. package/lib/services/http/property/property.service.d.ts +2 -7
  141. package/lib/services/http/rest/rest.service.d.ts +17 -2
  142. package/lib/services/http/service-notification/service-notification.service.d.ts +4 -7
  143. package/lib/services/http/subscription/subscription.service.d.ts +0 -1
  144. package/lib/services/http/tax-review/tax-review-history/tax-review-history.service.d.ts +7 -7
  145. package/lib/services/http/tax-review/tax-review.service.d.ts +1 -7
  146. package/lib/services/http/tax-summary/tax-summary.service.d.ts +2 -1
  147. package/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.d.ts +3 -8
  148. package/lib/services/http/transaction/transaction.service.d.ts +4 -12
  149. package/lib/services/http/user/user-event-setting/user-event-setting.service.d.ts +0 -6
  150. package/lib/services/http/user/user-event-type/user-event-type.service.d.ts +0 -6
  151. package/lib/services/http/vehicle/messages.enum.d.ts +11 -0
  152. package/lib/services/http/vehicle/vehicle-claim.service.d.ts +13 -0
  153. package/lib/services/http/vehicle/vehicle-logbook.service.d.ts +22 -0
  154. package/lib/services/http/vehicle/vehicle.service.d.ts +17 -80
  155. package/lib/services/pdf/pdf.service.d.ts +16 -2
  156. package/lib/services/property/property-holding-costs/property-holding-costs.service.d.ts +24 -0
  157. package/lib/validators/at-least-one.validator.d.ts +6 -0
  158. package/lib/validators/index.d.ts +1 -0
  159. package/package.json +1 -1
  160. package/public-api.d.ts +15 -1
  161. package/esm2015/lib/collections/logbook.collection.js +0 -97
  162. package/lib/collections/logbook.collection.d.ts +0 -19
@@ -1,237 +1,73 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { combineLatest, ReplaySubject } from 'rxjs';
3
- import { map } from 'rxjs/operators';
4
- import { ChartAccountsHeadingVehicleListEnum } from '../../../db/Enums/chart-accounts-heading-vehicle-list.enum';
5
- import { ChartAccountsListEnum } from '../../../db/Enums/chart-accounts-list.enum';
6
- import { plainToClass } from 'class-transformer';
7
- import { enumToList } from '../../../functions/enum-to-list';
1
+ import { Injectable } from '@angular/core';
8
2
  import { Vehicle } from '../../../models/logbook/vehicle';
9
- import { VehicleClaim } from '../../../models/logbook/vehicle-claim';
10
- import { VehicleLogbook } from '../../../models/logbook/vehicle-logbook';
3
+ import { RestService } from '../rest/rest.service';
11
4
  import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
12
- import { AppEvent } from '../../../models/event/app-event';
13
- import { FinancialYear } from '../../../models/financial-year/financial-year';
14
- import { Depreciation } from '../../../models/depreciation/depreciation';
5
+ import { replace } from '../../../functions/array';
6
+ import cloneDeep from 'lodash/cloneDeep';
7
+ import { MessagesEnum } from './messages.enum';
15
8
  import * as i0 from "@angular/core";
16
- import * as i1 from "@angular/common/http";
17
- import * as i2 from "../transaction/transaction.service";
18
- import * as i3 from "../depreciation/depreciation.service";
19
- import * as i4 from "../chart-accounts/chart-accounts.service";
20
- import * as i5 from "../../event/event-dispatcher.service";
21
9
  /**
22
10
  * Service that allows to work with WorkTank operations
23
- * @TODO separate into multiple services, extend restService
11
+ * @TODO separate vehicles and logbooks to different api
24
12
  */
25
- export class VehicleService {
26
- constructor(http, transactionService, depreciationService, chartAccountsService, eventDispatcherService, environment) {
27
- this.http = http;
28
- this.transactionService = transactionService;
29
- this.depreciationService = depreciationService;
30
- this.chartAccountsService = chartAccountsService;
31
- this.eventDispatcherService = eventDispatcherService;
32
- this.environment = environment;
33
- this.vehiclesSubject = new ReplaySubject(1);
34
- this.vehicleClaimSubject = new ReplaySubject(1);
35
- this.vehicleClaimRateSubject = new ReplaySubject(1);
36
- this.vehicleTaxReturnSubject = new ReplaySubject(1);
37
- this.incomePositionsSubject = new ReplaySubject(1);
13
+ export class VehicleService extends RestService {
14
+ constructor() {
15
+ super(...arguments);
16
+ this.url = 'vehicles';
17
+ this.modelClass = Vehicle;
18
+ this.messageCreated = MessagesEnum.VEHICLE_CREATED;
19
+ this.messageUpdated = MessagesEnum.VEHICLE_UPDATED;
20
+ this.messageDeleted = MessagesEnum.VEHICLE_DELETED;
38
21
  }
39
- getVehicles() {
40
- // @TODO create backend for get logbook
41
- if (!this._vehicles) {
42
- this.http.get(`${this.environment.apiV2}/vehicles`)
43
- .pipe(map((response) => {
44
- return response.map((item) => plainToClass(Vehicle, item));
45
- }))
46
- .subscribe((vehicles) => {
47
- this._vehicles = vehicles;
48
- this.vehiclesSubject.next(vehicles);
49
- });
50
- }
51
- return this.vehiclesSubject.asObservable();
22
+ listenEvents() {
23
+ this.listenLogbookAdded();
24
+ this.listenLogbookUpdated();
25
+ this.listenLogbookDeleted();
52
26
  }
53
27
  /**
54
- * Get vehicles claim amount
28
+ * Add a new logbook items to the vehicle when a new one created
55
29
  */
56
- getVehiclesClaim() {
57
- if (!this._vehicleClaim) {
58
- this.http.get(`${this.environment.apiV2}/vehicle-claims`)
59
- .pipe(map((response) => {
60
- // return Vehicle claim from backend or create new if it not exist
61
- return response.length ? response.map((item) => plainToClass(VehicleClaim, item))[0] : plainToClass(VehicleClaim, {});
62
- }))
63
- .subscribe((vehicleClaim) => {
64
- this._vehicleClaim = vehicleClaim;
65
- this.vehicleClaimSubject.next(vehicleClaim);
66
- });
67
- }
68
- return this.vehicleClaimSubject.asObservable();
30
+ listenLogbookAdded() {
31
+ this.eventDispatcherService.on(AppEventTypeEnum.VEHICLE_LOGBOOK_CREATED)
32
+ .subscribe((result) => {
33
+ const tempCache = cloneDeep(this.cache);
34
+ tempCache.find((vehicle) => vehicle.id === result.vehicleId).logbook.push(result.logbook);
35
+ this.cache = tempCache;
36
+ this.updateCache();
37
+ });
69
38
  }
70
39
  /**
71
- * Add new vehicle claim
72
- * @param claim object which should be added
40
+ * Replace vehicle's logbook with updated instance when logbook item updated
73
41
  */
74
- addVehicleClaim(claim) {
75
- return this.http.post(`${this.environment.apiV2}/vehicle-claims`, claim).pipe(map((response) => {
76
- this._vehicleClaim = plainToClass(VehicleClaim, response);
77
- this.vehicleClaimSubject.next(this._vehicleClaim);
78
- this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_CLAIM_CREATED, null));
79
- }));
42
+ listenLogbookUpdated() {
43
+ this.eventDispatcherService.on(AppEventTypeEnum.VEHICLE_LOGBOOK_UPDATED)
44
+ .subscribe((result) => {
45
+ const tempCache = cloneDeep(this.cache);
46
+ replace(tempCache.find((vehicle) => vehicle.id === result.vehicleId).logbook, result.logbook);
47
+ this.cache = tempCache;
48
+ this.updateCache();
49
+ });
80
50
  }
81
51
  /**
82
- * Get vehicles claim rate for current financial year
52
+ * Remove logbook item from vehicle when logbook deleted
83
53
  */
84
- getVehiclesClaimRate() {
85
- if (!this._vehicleClaimRate) {
86
- this.chartAccountsService.getChartAccountsById(ChartAccountsListEnum.KLMS_TRAVELLED_FOR_WORK)
87
- .pipe(map((response) => {
88
- return response.values.find((chartAccount) => chartAccount.financialYear === new FinancialYear().year).value;
89
- }))
90
- .subscribe((claimRate) => {
91
- this._vehicleClaimRate = claimRate;
92
- this.vehicleClaimRateSubject.next(this._vehicleClaimRate);
93
- });
94
- }
95
- return this.vehicleClaimRateSubject.asObservable();
96
- }
97
- /**
98
- * Get vehicles tax return for vehicle transactions & depreciations
99
- */
100
- getVehiclesTaxReturn() {
101
- if (!this._vehicleTaxReturn) {
102
- combineLatest([
103
- // @Todo refactor to avoid injection of another services
104
- this.transactionService.get(),
105
- this.depreciationService.get(),
106
- this.getVehiclesClaim()
107
- ]).pipe(map(([transactions, depreciations, vehicleClaim]) => {
108
- const chartAccountsHeadingsIds = enumToList(ChartAccountsHeadingVehicleListEnum)
109
- .map((item) => item.value);
110
- // get transactions & depreciations which chart accounts headings are belong to vehicle category
111
- // but except KLMS transaction
112
- const filteredItems = [...transactions, ...depreciations].filter((item) => {
113
- var _a;
114
- return chartAccountsHeadingsIds.includes((_a = item.chartAccounts.heading) === null || _a === void 0 ? void 0 : _a.id) && !item.chartAccounts.isKlmsForWork();
115
- });
116
- // get claim amount sum
117
- return filteredItems.reduce((sum, item) =>
118
- // @Todo remove item.amount negative sign when depreciations will be refactored and will have negative sign
119
- sum + ((item instanceof Depreciation ? item.currentYearForecast.amount : -item.amount) * (vehicleClaim.workUsage / 100)), 0);
120
- }))
121
- .subscribe((taxReturn) => {
122
- this._vehicleTaxReturn = taxReturn;
123
- this.vehicleTaxReturnSubject.next(this._vehicleTaxReturn);
124
- });
125
- }
126
- return this.vehicleTaxReturnSubject.asObservable();
127
- }
128
- /**
129
- * Update vehicle claim
130
- * @param claim which should be updated
131
- *
132
- * @TODO alex refresh depreciation/transaction cache
133
- */
134
- updateVehicleClaim(claim) {
135
- return this.http.put(`${this.environment.apiV2}/vehicle-claims/${claim.id}`, claim).pipe(map((response) => {
136
- const updatedVehicleClaim = plainToClass(VehicleClaim, response);
137
- this._vehicleClaim = updatedVehicleClaim;
138
- this.vehicleClaimSubject.next(this._vehicleClaim);
139
- this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.VEHICLE_CLAIM_UPDATED, null));
140
- return updatedVehicleClaim;
141
- }));
142
- }
143
- /**
144
- * Add new logbook for desired vehicle
145
- * @param logbook which should be added
146
- * @param vehicle for which logbook object should be added
147
- */
148
- addLogbook(logbook, vehicle) {
149
- return this.http.post(`${this.environment.apiV2}/vehicles/${vehicle.id}/logbooks`, logbook)
150
- .pipe(map((response) => {
151
- this._vehicles.find((v) => v.id === vehicle.id).logbook.push(response);
152
- // we update nested logbook object inside vehicles list. So list is not changed and next not emit subscriptions updates.
153
- // that is why we recreate vehicles array
154
- this.vehiclesSubject.next(this._vehicles.map((item) => plainToClass(Vehicle, item)));
155
- }));
156
- }
157
- /**
158
- * Update logbook
159
- * @param logbook which should be updated
160
- * @param vehicle for which logbook object should be updated
161
- */
162
- updateLogbook(logbook, vehicle) {
163
- return this.http.put(`${this.environment.apiV2}/vehicles/${vehicle.id}/logbooks/${logbook.id}`, logbook).pipe(map((response) => {
164
- const editedVehicle = this._vehicles.find((v) => v.id === vehicle.id);
165
- const editedLogbookIndex = editedVehicle.logbook.findIndex((l) => l.id === logbook.id);
166
- editedVehicle.logbook.splice(editedLogbookIndex, 1, plainToClass(VehicleLogbook, response));
167
- // we update nested logbook object inside vehicles list. So list is not changed and next not emit subscriptions updates.
168
- // that is why we recreate vehicles array
169
- this.vehiclesSubject.next(this._vehicles.map((item) => plainToClass(Vehicle, item)));
170
- }));
171
- }
172
- /**
173
- * Delete trip
174
- * @param logbook for which trip should be deleted
175
- * @param vehicle for which trip should be deleted
176
- */
177
- deleteTrip(logbook, vehicle) {
178
- return this.http.delete(`${this.environment.apiV2}/vehicles/${vehicle.id}/logbooks/${logbook.id}`)
179
- .pipe(map(() => {
180
- const editedVehicle = this._vehicles.find((v) => v.id === vehicle.id);
181
- const deletedLogbookIndex = editedVehicle.logbook.findIndex((l) => l.id === logbook.id);
182
- editedVehicle.logbook.splice(deletedLogbookIndex, 1);
183
- // we update nested logbook object inside vehicles list. So list is not changed and next not emit subscriptions updates.
184
- // that is why we recreate vehicles array
185
- this.vehiclesSubject.next(this._vehicles.map((item) => plainToClass(Vehicle, item)));
186
- }));
187
- }
188
- /**
189
- * Add new vehicle
190
- * @param vehicle which should be added
191
- */
192
- addVehicle(vehicle) {
193
- return this.http.post(`${this.environment.apiV2}/vehicles`, { name: vehicle.name })
194
- .pipe(map((response) => {
195
- this._vehicles.push(plainToClass(Vehicle, response));
196
- this.vehiclesSubject.next(this._vehicles);
197
- }));
198
- }
199
- /**
200
- * Update vehicle
201
- * @param vehicle which should be updated
202
- */
203
- updateVehicle(vehicle) {
204
- return this.http.put(`${this.environment.apiV2}/vehicles/${vehicle.id}`, { name: vehicle.name })
205
- .pipe(map((response) => {
206
- const editedVehicleIndex = this._vehicles.findIndex((v) => v.id === vehicle.id);
207
- this._vehicles.splice(editedVehicleIndex, 1, plainToClass(Vehicle, response));
208
- this.vehiclesSubject.next(this._vehicles);
209
- }));
210
- }
211
- /**
212
- * Delete vehicle
213
- * @param vehicle which should be deleted
214
- */
215
- deleteVehicle(vehicle) {
216
- return this.http.delete(`${this.environment.apiV2}/vehicles/${vehicle.id}`)
217
- .pipe(map(() => {
218
- const deletedVehicleIndex = this._vehicles.findIndex((v) => v.id === vehicle.id);
219
- this._vehicles.splice(deletedVehicleIndex, 1);
220
- // we update nested logbook object inside vehicles list. So list is not changed and next not emit subscriptions updates.
221
- // that is why we recreate vehicles array
222
- this.vehiclesSubject.next(this._vehicles.map((item) => plainToClass(Vehicle, item)));
223
- }));
54
+ listenLogbookDeleted() {
55
+ this.eventDispatcherService.on(AppEventTypeEnum.VEHICLE_LOGBOOK_DELETED)
56
+ .subscribe((result) => {
57
+ const tempCache = cloneDeep(this.cache);
58
+ const vehicle = tempCache.find((vehicle) => vehicle.id === result.vehicleId);
59
+ vehicle.logbook = vehicle.logbook.filter((logbook) => logbook.id !== result.logbook.id);
60
+ this.cache = tempCache;
61
+ this.updateCache();
62
+ });
224
63
  }
225
64
  }
226
- VehicleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: VehicleService, deps: [{ token: i1.HttpClient }, { token: i2.TransactionService }, { token: i3.DepreciationService }, { token: i4.ChartAccountsService }, { token: i5.EventDispatcherService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
65
+ VehicleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: VehicleService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
227
66
  VehicleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: VehicleService, providedIn: 'root' });
228
67
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: VehicleService, decorators: [{
229
68
  type: Injectable,
230
69
  args: [{
231
70
  providedIn: 'root'
232
71
  }]
233
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.TransactionService }, { type: i3.DepreciationService }, { type: i4.ChartAccountsService }, { type: i5.EventDispatcherService }, { type: undefined, decorators: [{
234
- type: Inject,
235
- args: ['environment']
236
- }] }]; } });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVoaWNsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvdmVoaWNsZS92ZWhpY2xlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGFBQWEsRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ2pILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7QUFLekU7OztHQUdHO0FBSUgsTUFBTSxPQUFPLGNBQWM7SUFhekIsWUFDVSxJQUFnQixFQUNoQixrQkFBc0MsRUFDdEMsbUJBQXdDLEVBQ3hDLG9CQUEwQyxF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OztPQUdHO0lBQ0gsYUFBYSxDQUFDLE9BQWdCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssYUFBYSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDeEUsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxNQUFNLG1CQUFtQixHQUFXLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5Qyx3SEFBd0g7WUFDeEgseUNBQXlDO1lBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQzs7NEdBdlBVLGNBQWMsMkxBbUJmLGFBQWE7Z0hBbkJaLGNBQWMsY0FGYixNQUFNOzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFvQkksTUFBTTsyQkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hhcnRBY2NvdW50c0hlYWRpbmdWZWhpY2xlTGlzdEVudW0gfSBmcm9tICcuLi8uLi8uLi9kYi9FbnVtcy9jaGFydC1hY2NvdW50cy1oZWFkaW5nLXZlaGljbGUtbGlzdC5lbnVtJztcbmltcG9ydCB7IENoYXJ0QWNjb3VudHNMaXN0RW51bSB9IGZyb20gJy4uLy4uLy4uL2RiL0VudW1zL2NoYXJ0LWFjY291bnRzLWxpc3QuZW51bSc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3MgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblNlcnZpY2UgfSBmcm9tICcuLi90cmFuc2FjdGlvbi90cmFuc2FjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGVudW1Ub0xpc3QgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvZW51bS10by1saXN0JztcbmltcG9ydCB7IFZlaGljbGUgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvbG9nYm9vay92ZWhpY2xlJztcbmltcG9ydCB7IFZlaGljbGVDbGFpbSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9sb2dib29rL3ZlaGljbGUtY2xhaW0nO1xuaW1wb3J0IHsgVmVoaWNsZUxvZ2Jvb2sgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvbG9nYm9vay92ZWhpY2xlLWxvZ2Jvb2snO1xuaW1wb3J0IHsgSW5jb21lUG9zaXRpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvaW5jb21lLXBvc2l0aW9uL2luY29tZS1wb3NpdGlvbic7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgQXBwRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcbmltcG9ydCB7IEZpbmFuY2lhbFllYXIgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmluYW5jaWFsLXllYXIvZmluYW5jaWFsLXllYXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgRGVwcmVjaWF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2RlcHJlY2lhdGlvbi9kZXByZWNpYXRpb24nO1xuaW1wb3J0IHsgRGVwcmVjaWF0aW9uU2VydmljZSB9IGZyb20gJy4uL2RlcHJlY2lhdGlvbi9kZXByZWNpYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBDaGFydEFjY291bnRzU2VydmljZSB9IGZyb20gJy4uL2NoYXJ0LWFjY291bnRzL2NoYXJ0LWFjY291bnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5cbi8qKlxuICogU2VydmljZSB0aGF0IGFsbG93cyB0byB3b3JrIHdpdGggV29ya1Rhbmsgb3BlcmF0aW9uc1xuICogQFRPRE8gc2VwYXJhdGUgaW50byBtdWx0aXBsZSBzZXJ2aWNlcywgZXh0ZW5kIHJlc3RTZXJ2aWNlXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFZlaGljbGVTZXJ2aWNlIHtcbiAgLy8gQFRPRE8gcmVmYWN0b3IgYW5kIG1heWJlIGJyZWFrIHRvIHNlcGFyYXRlZCBzZXJ2aWNlc1xuICBfdmVoaWNsZXM6IFZlaGljbGVbXTtcbiAgdmVoaWNsZXNTdWJqZWN0OiBSZXBsYXlTdWJqZWN0PFZlaGljbGVbXT4gPSBuZXcgUmVwbGF5U3ViamVjdDxWZWhpY2xlW10+KDEpO1xuICBfdmVoaWNsZUNsYWltOiBWZWhpY2xlQ2xhaW07XG4gIHZlaGljbGVDbGFpbVN1YmplY3Q6IFJlcGxheVN1YmplY3Q8VmVoaWNsZUNsYWltPiA9IG5ldyBSZXBsYXlTdWJqZWN0PFZlaGljbGVDbGFpbT4oMSk7XG4gIF92ZWhpY2xlQ2xhaW1SYXRlOiBudW1iZXI7XG4gIHZlaGljbGVDbGFpbVJhdGVTdWJqZWN0OiBSZXBsYXlTdWJqZWN0PG51bWJlcj4gPSBuZXcgUmVwbGF5U3ViamVjdDxudW1iZXI+KDEpO1xuICBfdmVoaWNsZVRheFJldHVybjogbnVtYmVyO1xuICB2ZWhpY2xlVGF4UmV0dXJuU3ViamVjdDogUmVwbGF5U3ViamVjdDxudW1iZXI+ID0gbmV3IFJlcGxheVN1YmplY3Q8bnVtYmVyPigxKTtcbiAgX2luY29tZVBvc2l0aW9uczogSW5jb21lUG9zaXRpb25bXTtcbiAgaW5jb21lUG9zaXRpb25zU3ViamVjdDogUmVwbGF5U3ViamVjdDxJbmNvbWVQb3NpdGlvbltdPiA9IG5ldyBSZXBsYXlTdWJqZWN0PEluY29tZVBvc2l0aW9uW10+KDEpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIHRyYW5zYWN0aW9uU2VydmljZTogVHJhbnNhY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZGVwcmVjaWF0aW9uU2VydmljZTogRGVwcmVjaWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNoYXJ0QWNjb3VudHNTZXJ2aWNlOiBDaGFydEFjY291bnRzU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50RGlzcGF0Y2hlclNlcnZpY2U6IEV2ZW50RGlzcGF0Y2hlclNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG4gIH1cblxuICBnZXRWZWhpY2xlcygpOiBPYnNlcnZhYmxlPFZlaGljbGVbXT4ge1xuICAgIC8vIEBUT0RPIGNyZWF0ZSBiYWNrZW5kIGZvciBnZXQgbG9nYm9va1xuICAgIGlmICghdGhpcy5fdmVoaWNsZXMpIHtcbiAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vdmVoaWNsZXNgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5tYXAoKGl0ZW06IGFueSkgPT4gcGxhaW5Ub0NsYXNzKFZlaGljbGUsIGl0ZW0pKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHZlaGljbGVzOiBWZWhpY2xlW10pID0+IHtcbiAgICAgICAgICB0aGlzLl92ZWhpY2xlcyA9IHZlaGljbGVzO1xuICAgICAgICAgIHRoaXMudmVoaWNsZXNTdWJqZWN0Lm5leHQodmVoaWNsZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy52ZWhpY2xlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZlaGljbGVzIGNsYWltIGFtb3VudFxuICAgKi9cbiAgZ2V0VmVoaWNsZXNDbGFpbSgpOiBPYnNlcnZhYmxlPFZlaGljbGVDbGFpbT4ge1xuICAgIGlmICghdGhpcy5fdmVoaWNsZUNsYWltKSB7XG4gICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3ZlaGljbGUtY2xhaW1zYClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyByZXR1cm4gVmVoaWNsZSBjbGFpbSBmcm9tIGJhY2tlbmQgb3IgY3JlYXRlIG5ldyBpZiBpdCBub3QgZXhpc3RcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5sZW5ndGggPyByZXNwb25zZS5tYXAoKGl0ZW06IGFueSkgPT4gcGxhaW5Ub0NsYXNzKFZlaGljbGVDbGFpbSwgaXRlbSkpWzBdIDogcGxhaW5Ub0NsYXNzKFZlaGljbGVDbGFpbSwge30pO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmVoaWNsZUNsYWltOiBWZWhpY2xlQ2xhaW0pID0+IHtcbiAgICAgICAgICB0aGlzLl92ZWhpY2xlQ2xhaW0gPSB2ZWhpY2xlQ2xhaW07XG4gICAgICAgICAgdGhpcy52ZWhpY2xlQ2xhaW1TdWJqZWN0Lm5leHQodmVoaWNsZUNsYWltKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmVoaWNsZUNsYWltU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IHZlaGljbGUgY2xhaW1cbiAgICogQHBhcmFtIGNsYWltIG9iamVjdCB3aGljaCBzaG91bGQgYmUgYWRkZWRcbiAgICovXG4gIGFkZFZlaGljbGVDbGFpbShjbGFpbTogVmVoaWNsZUNsYWltKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vdmVoaWNsZS1jbGFpbXNgLCBjbGFpbSkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLl92ZWhpY2xlQ2xhaW0gPSBwbGFpblRvQ2xhc3MoVmVoaWNsZUNsYWltLCByZXNwb25zZSk7XG4gICAgICAgIHRoaXMudmVoaWNsZUNsYWltU3ViamVjdC5uZXh0KHRoaXMuX3ZlaGljbGVDbGFpbSk7XG4gICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5WRUhJQ0xFX0NMQUlNX0NSRUFURUQsIG51bGwpKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmVoaWNsZXMgY2xhaW0gcmF0ZSBmb3IgY3VycmVudCBmaW5hbmNpYWwgeWVhclxuICAgKi9cbiAgZ2V0VmVoaWNsZXNDbGFpbVJhdGUoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBpZiAoIXRoaXMuX3ZlaGljbGVDbGFpbVJhdGUpIHtcbiAgICAgIHRoaXMuY2hhcnRBY2NvdW50c1NlcnZpY2UuZ2V0Q2hhcnRBY2NvdW50c0J5SWQoQ2hhcnRBY2NvdW50c0xpc3RFbnVtLktMTVNfVFJBVkVMTEVEX0ZPUl9XT1JLKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS52YWx1ZXMuZmluZCgoY2hhcnRBY2NvdW50OiBhbnkpID0+IGNoYXJ0QWNjb3VudC5maW5hbmNpYWxZZWFyID09PSBuZXcgRmluYW5jaWFsWWVhcigpLnllYXIpLnZhbHVlO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoY2xhaW1SYXRlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICB0aGlzLl92ZWhpY2xlQ2xhaW1SYXRlID0gY2xhaW1SYXRlO1xuICAgICAgICAgIHRoaXMudmVoaWNsZUNsYWltUmF0ZVN1YmplY3QubmV4dCh0aGlzLl92ZWhpY2xlQ2xhaW1SYXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmVoaWNsZUNsYWltUmF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZlaGljbGVzIHRheCByZXR1cm4gZm9yIHZlaGljbGUgdHJhbnNhY3Rpb25zICYgZGVwcmVjaWF0aW9uc1xuICAgKi9cbiAgZ2V0VmVoaWNsZXNUYXhSZXR1cm4oKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICBpZiAoIXRoaXMuX3ZlaGljbGVUYXhSZXR1cm4pIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAvLyBAVG9kbyByZWZhY3RvciB0byBhdm9pZCBpbmplY3Rpb24gb2YgYW5vdGhlciBzZXJ2aWNlc1xuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU2VydmljZS5nZXQoKSxcbiAgICAgICAgdGhpcy5kZXByZWNpYXRpb25TZXJ2aWNlLmdldCgpLFxuICAgICAgICB0aGlzLmdldFZlaGljbGVzQ2xhaW0oKVxuICAgICAgXSkucGlwZShcbiAgICAgICAgICBtYXAoKFt0cmFuc2FjdGlvbnMsIGRlcHJlY2lhdGlvbnMsIHZlaGljbGVDbGFpbV06IFtUcmFuc2FjdGlvbltdLCBEZXByZWNpYXRpb25bXSwgVmVoaWNsZUNsYWltXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hhcnRBY2NvdW50c0hlYWRpbmdzSWRzOiBudW1iZXJbXSA9IGVudW1Ub0xpc3QoQ2hhcnRBY2NvdW50c0hlYWRpbmdWZWhpY2xlTGlzdEVudW0pXG4gICAgICAgICAgICAgIC5tYXAoKGl0ZW06IHsgbGFiZWw6IHN0cmluZywgdmFsdWU6IG51bWJlciB9KSA9PiBpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgIC8vIGdldCB0cmFuc2FjdGlvbnMgJiBkZXByZWNpYXRpb25zIHdoaWNoIGNoYXJ0IGFjY291bnRzIGhlYWRpbmdzIGFyZSBiZWxvbmcgdG8gdmVoaWNsZSBjYXRlZ29yeVxuICAgICAgICAgICAgLy8gYnV0IGV4Y2VwdCBLTE1TIHRyYW5zYWN0aW9uXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zOiBBcnJheTxUcmFuc2FjdGlvbiB8IERlcHJlY2lhdGlvbj4gPSBbLi4udHJhbnNhY3Rpb25zLCAuLi5kZXByZWNpYXRpb25zXS5maWx0ZXIoKGl0ZW06IFRyYW5zYWN0aW9uIHwgRGVwcmVjaWF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBjaGFydEFjY291bnRzSGVhZGluZ3NJZHMuaW5jbHVkZXMoaXRlbS5jaGFydEFjY291bnRzLmhlYWRpbmc/LmlkKSAmJiAhaXRlbS5jaGFydEFjY291bnRzLmlzS2xtc0ZvcldvcmsoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBnZXQgY2xhaW0gYW1vdW50IHN1bVxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMucmVkdWNlKChzdW06IG51bWJlciwgaXRlbTogVHJhbnNhY3Rpb24gfCBEZXByZWNpYXRpb24pID0+XG4gICAgICAgICAgICAgIC8vIEBUb2RvIHJlbW92ZSBpdGVtLmFtb3VudCBuZWdhdGl2ZSBzaWduIHdoZW4gZGVwcmVjaWF0aW9ucyB3aWxsIGJlIHJlZmFjdG9yZWQgYW5kIHdpbGwgaGF2ZSBuZWdhdGl2ZSBzaWduXG4gICAgICAgICAgICAgIHN1bSArICgoaXRlbSBpbnN0YW5jZW9mIERlcHJlY2lhdGlvbiA/IGl0ZW0uY3VycmVudFllYXJGb3JlY2FzdC5hbW91bnQgOiAtaXRlbS5hbW91bnQpICogKHZlaGljbGVDbGFpbS53b3JrVXNhZ2UgLyAxMDApKSwgMCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodGF4UmV0dXJuOiBudW1iZXIpID0+IHtcbiAgICAgICAgdGhpcy5fdmVoaWNsZVRheFJldHVybiA9IHRheFJldHVybjtcbiAgICAgICAgdGhpcy52ZWhpY2xlVGF4UmV0dXJuU3ViamVjdC5uZXh0KHRoaXMuX3ZlaGljbGVUYXhSZXR1cm4pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmVoaWNsZVRheFJldHVyblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHZlaGljbGUgY2xhaW1cbiAgICogQHBhcmFtIGNsYWltIHdoaWNoIHNob3VsZCBiZSB1cGRhdGVkXG4gICAqXG4gICAqIEBUT0RPIGFsZXggcmVmcmVzaCBkZXByZWNpYXRpb24vdHJhbnNhY3Rpb24gY2FjaGVcbiAgICovXG4gIHVwZGF0ZVZlaGljbGVDbGFpbShjbGFpbTogVmVoaWNsZUNsYWltKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS92ZWhpY2xlLWNsYWltcy8ke2NsYWltLmlkfWAsIGNsYWltKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRWZWhpY2xlQ2xhaW06IFZlaGljbGVDbGFpbSA9IHBsYWluVG9DbGFzcyhWZWhpY2xlQ2xhaW0sIHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5fdmVoaWNsZUNsYWltID0gdXBkYXRlZFZlaGljbGVDbGFpbTtcbiAgICAgICAgdGhpcy52ZWhpY2xlQ2xhaW1TdWJqZWN0Lm5leHQodGhpcy5fdmVoaWNsZUNsYWltKTtcblxuICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uVkVISUNMRV9DTEFJTV9VUERBVEVELCBudWxsKSk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRWZWhpY2xlQ2xhaW07XG4gICAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5ldyBsb2dib29rIGZvciBkZXNpcmVkIHZlaGljbGVcbiAgICogQHBhcmFtIGxvZ2Jvb2sgd2hpY2ggc2hvdWxkIGJlIGFkZGVkXG4gICAqIEBwYXJhbSB2ZWhpY2xlIGZvciB3aGljaCBsb2dib29rIG9iamVjdCBzaG91bGQgYmUgYWRkZWRcbiAgICovXG4gIGFkZExvZ2Jvb2sobG9nYm9vazogVmVoaWNsZUxvZ2Jvb2ssIHZlaGljbGU6IFZlaGljbGUpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vdmVoaWNsZXMvJHt2ZWhpY2xlLmlkfS9sb2dib29rc2AsIGxvZ2Jvb2spXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5fdmVoaWNsZXMuZmluZCgodjogVmVoaWNsZSkgPT4gdi5pZCA9PT0gdmVoaWNsZS5pZCkubG9nYm9vay5wdXNoKHJlc3BvbnNlKTtcbiAgICAgICAgICAvLyB3ZSB1cGRhdGUgbmVzdGVkIGxvZ2Jvb2sgb2JqZWN0IGluc2lkZSB2ZWhpY2xlcyBsaXN0LiBTbyBsaXN0IGlzIG5vdCBjaGFuZ2VkIGFuZCBuZXh0IG5vdCBlbWl0IHN1YnNjcmlwdGlvbnMgdXBkYXRlcy5cbiAgICAgICAgICAvLyB0aGF0IGlzIHdoeSB3ZSByZWNyZWF0ZSB2ZWhpY2xlcyBhcnJheVxuICAgICAgICAgIHRoaXMudmVoaWNsZXNTdWJqZWN0Lm5leHQodGhpcy5fdmVoaWNsZXMubWFwKChpdGVtOiBvYmplY3QpID0+IHBsYWluVG9DbGFzcyhWZWhpY2xlLCBpdGVtKSkpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbG9nYm9va1xuICAgKiBAcGFyYW0gbG9nYm9vayB3aGljaCBzaG91bGQgYmUgdXBkYXRlZFxuICAgKiBAcGFyYW0gdmVoaWNsZSBmb3Igd2hpY2ggbG9nYm9vayBvYmplY3Qgc2hvdWxkIGJlIHVwZGF0ZWRcbiAgICovXG4gIHVwZGF0ZUxvZ2Jvb2sobG9nYm9vazogVmVoaWNsZUxvZ2Jvb2ssIHZlaGljbGU6IFZlaGljbGUpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3ZlaGljbGVzLyR7dmVoaWNsZS5pZH0vbG9nYm9va3MvJHtsb2dib29rLmlkfWAsIGxvZ2Jvb2spLnBpcGUoXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgZWRpdGVkVmVoaWNsZTogVmVoaWNsZSA9IHRoaXMuX3ZlaGljbGVzLmZpbmQoKHY6IFZlaGljbGUpID0+IHYuaWQgPT09IHZlaGljbGUuaWQpO1xuICAgICAgICBjb25zdCBlZGl0ZWRMb2dib29rSW5kZXg6IG51bWJlciA9IGVkaXRlZFZlaGljbGUubG9nYm9vay5maW5kSW5kZXgoKGw6IFZlaGljbGVMb2dib29rKSA9PiBsLmlkID09PSBsb2dib29rLmlkKTtcbiAgICAgICAgZWRpdGVkVmVoaWNsZS5sb2dib29rLnNwbGljZShlZGl0ZWRMb2dib29rSW5kZXgsIDEsIHBsYWluVG9DbGFzcyhWZWhpY2xlTG9nYm9vaywgcmVzcG9uc2UpKTtcbiAgICAgICAgLy8gd2UgdXBkYXRlIG5lc3RlZCBsb2dib29rIG9iamVjdCBpbnNpZGUgdmVoaWNsZXMgbGlzdC4gU28gbGlzdCBpcyBub3QgY2hhbmdlZCBhbmQgbmV4dCBub3QgZW1pdCBzdWJzY3JpcHRpb25zIHVwZGF0ZXMuXG4gICAgICAgIC8vIHRoYXQgaXMgd2h5IHdlIHJlY3JlYXRlIHZlaGljbGVzIGFycmF5XG4gICAgICAgIHRoaXMudmVoaWNsZXNTdWJqZWN0Lm5leHQodGhpcy5fdmVoaWNsZXMubWFwKChpdGVtOiBvYmplY3QpID0+IHBsYWluVG9DbGFzcyhWZWhpY2xlLCBpdGVtKSkpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0cmlwXG4gICAqIEBwYXJhbSBsb2dib29rIGZvciB3aGljaCB0cmlwIHNob3VsZCBiZSBkZWxldGVkXG4gICAqIEBwYXJhbSB2ZWhpY2xlIGZvciB3aGljaCB0cmlwIHNob3VsZCBiZSBkZWxldGVkXG4gICAqL1xuICBkZWxldGVUcmlwKGxvZ2Jvb2s6IFZlaGljbGVMb2dib29rLCB2ZWhpY2xlOiBWZWhpY2xlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS92ZWhpY2xlcy8ke3ZlaGljbGUuaWR9L2xvZ2Jvb2tzLyR7bG9nYm9vay5pZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWRpdGVkVmVoaWNsZTogVmVoaWNsZSA9IHRoaXMuX3ZlaGljbGVzLmZpbmQoKHY6IFZlaGljbGUpID0+IHYuaWQgPT09IHZlaGljbGUuaWQpO1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZWRMb2dib29rSW5kZXg6IG51bWJlciA9IGVkaXRlZFZlaGljbGUubG9nYm9vay5maW5kSW5kZXgoKGw6IFZlaGljbGVMb2dib29rKSA9PiBsLmlkID09PSBsb2dib29rLmlkKTtcbiAgICAgICAgICBlZGl0ZWRWZWhpY2xlLmxvZ2Jvb2suc3BsaWNlKGRlbGV0ZWRMb2dib29rSW5kZXgsIDEpO1xuICAgICAgICAgIC8vIHdlIHVwZGF0ZSBuZXN0ZWQgbG9nYm9vayBvYmplY3QgaW5zaWRlIHZlaGljbGVzIGxpc3QuIFNvIGxpc3QgaXMgbm90IGNoYW5nZWQgYW5kIG5leHQgbm90IGVtaXQgc3Vic2NyaXB0aW9ucyB1cGRhdGVzLlxuICAgICAgICAgIC8vIHRoYXQgaXMgd2h5IHdlIHJlY3JlYXRlIHZlaGljbGVzIGFycmF5XG4gICAgICAgICAgdGhpcy52ZWhpY2xlc1N1YmplY3QubmV4dCh0aGlzLl92ZWhpY2xlcy5tYXAoKGl0ZW06IG9iamVjdCkgPT4gcGxhaW5Ub0NsYXNzKFZlaGljbGUsIGl0ZW0pKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgdmVoaWNsZVxuICAgKiBAcGFyYW0gdmVoaWNsZSB3aGljaCBzaG91bGQgYmUgYWRkZWRcbiAgICovXG4gIGFkZFZlaGljbGUodmVoaWNsZTogVmVoaWNsZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3ZlaGljbGVzYCwge25hbWU6IHZlaGljbGUubmFtZX0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5fdmVoaWNsZXMucHVzaChwbGFpblRvQ2xhc3MoVmVoaWNsZSwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB0aGlzLnZlaGljbGVzU3ViamVjdC5uZXh0KHRoaXMuX3ZlaGljbGVzKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHZlaGljbGVcbiAgICogQHBhcmFtIHZlaGljbGUgd2hpY2ggc2hvdWxkIGJlIHVwZGF0ZWRcbiAgICovXG4gIHVwZGF0ZVZlaGljbGUodmVoaWNsZTogVmVoaWNsZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vdmVoaWNsZXMvJHt2ZWhpY2xlLmlkfWAsIHtuYW1lOiB2ZWhpY2xlLm5hbWV9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVkaXRlZFZlaGljbGVJbmRleDogbnVtYmVyID0gdGhpcy5fdmVoaWNsZXMuZmluZEluZGV4KCh2OiBWZWhpY2xlKSA9PiB2LmlkID09PSB2ZWhpY2xlLmlkKTtcbiAgICAgICAgICB0aGlzLl92ZWhpY2xlcy5zcGxpY2UoZWRpdGVkVmVoaWNsZUluZGV4LCAxLCBwbGFpblRvQ2xhc3MoVmVoaWNsZSwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB0aGlzLnZlaGljbGVzU3ViamVjdC5uZXh0KHRoaXMuX3ZlaGljbGVzKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHZlaGljbGVcbiAgICogQHBhcmFtIHZlaGljbGUgd2hpY2ggc2hvdWxkIGJlIGRlbGV0ZWRcbiAgICovXG4gIGRlbGV0ZVZlaGljbGUodmVoaWNsZTogVmVoaWNsZSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3ZlaGljbGVzLyR7dmVoaWNsZS5pZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVsZXRlZFZlaGljbGVJbmRleDogbnVtYmVyID0gdGhpcy5fdmVoaWNsZXMuZmluZEluZGV4KCh2OiBWZWhpY2xlKSA9PiB2LmlkID09PSB2ZWhpY2xlLmlkKTtcbiAgICAgICAgICB0aGlzLl92ZWhpY2xlcy5zcGxpY2UoZGVsZXRlZFZlaGljbGVJbmRleCwgMSk7XG4gICAgICAgICAgLy8gd2UgdXBkYXRlIG5lc3RlZCBsb2dib29rIG9iamVjdCBpbnNpZGUgdmVoaWNsZXMgbGlzdC4gU28gbGlzdCBpcyBub3QgY2hhbmdlZCBhbmQgbmV4dCBub3QgZW1pdCBzdWJzY3JpcHRpb25zIHVwZGF0ZXMuXG4gICAgICAgICAgLy8gdGhhdCBpcyB3aHkgd2UgcmVjcmVhdGUgdmVoaWNsZXMgYXJyYXlcbiAgICAgICAgICB0aGlzLnZlaGljbGVzU3ViamVjdC5uZXh0KHRoaXMuX3ZlaGljbGVzLm1hcCgoaXRlbTogb2JqZWN0KSA9PiBwbGFpblRvQ2xhc3MoVmVoaWNsZSwgaXRlbSkpKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
72
+ }] });
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVoaWNsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvdmVoaWNsZS92ZWhpY2xlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBRy9DOzs7R0FHRztBQUlILE1BQU0sT0FBTyxjQUFlLFNBQVEsV0FBaUM7SUFIckU7O1FBSUUsUUFBRyxHQUFXLFVBQVUsQ0FBQztRQUN6QixlQUFVLEdBQW1CLE9BQU8sQ0FBQztRQUNyQyxtQkFBYyxHQUFXLFlBQVksQ0FBQyxlQUFlLENBQUM7UUFDdEQsbUJBQWMsR0FBVyxZQUFZLENBQUMsZUFBZSxDQUFDO1FBQ3RELG1CQUFjLEdBQVcsWUFBWSxDQUFDLGVBQWUsQ0FBQztLQStDdkQ7SUE3Q0MsWUFBWTtRQUNWLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDO2FBQ3JFLFNBQVMsQ0FBQyxDQUFDLE1BQW9ELEVBQUUsRUFBRTtZQUNsRSxNQUFNLFNBQVMsR0FBYyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFnQixFQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1RyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQzthQUNyRSxTQUFTLENBQUMsQ0FBQyxNQUFvRCxFQUFRLEVBQUU7WUFDeEUsTUFBTSxTQUFTLEdBQWMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuRCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQWdCLEVBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEgsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUM7YUFDckUsU0FBUyxDQUFDLENBQUMsTUFBb0QsRUFBRSxFQUFFO1lBQ2xFLE1BQU0sU0FBUyxHQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsTUFBTSxPQUFPLEdBQVksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQWdCLEVBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUF1QixFQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakgsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7NEdBbkRVLGNBQWM7Z0hBQWQsY0FBYyxjQUZiLE1BQU07NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBWZWhpY2xlIGFzIFZlaGljbGVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vZGIvTW9kZWxzL3ZlaGljbGUnO1xuaW1wb3J0IHsgVmVoaWNsZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9sb2dib29rL3ZlaGljbGUnO1xuaW1wb3J0IHsgVGFua1R5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vZGIvRW51bXMvdGFuay10eXBlLmVudW0nO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi9yZXN0L3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgVmVoaWNsZUxvZ2Jvb2sgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvbG9nYm9vay92ZWhpY2xlLWxvZ2Jvb2snO1xuaW1wb3J0IHsgcmVwbGFjZSB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9hcnJheSc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuaW1wb3J0IHsgTWVzc2FnZXNFbnVtIH0gZnJvbSAnLi9tZXNzYWdlcy5lbnVtJztcbmltcG9ydCB7IElFdmVudExpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9ldmVudC1saXN0ZW5lci5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFNlcnZpY2UgdGhhdCBhbGxvd3MgdG8gd29yayB3aXRoIFdvcmtUYW5rIG9wZXJhdGlvbnNcbiAqIEBUT0RPIHNlcGFyYXRlIHZlaGljbGVzIGFuZCBsb2dib29rcyB0byBkaWZmZXJlbnQgYXBpXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFZlaGljbGVTZXJ2aWNlIGV4dGVuZHMgUmVzdFNlcnZpY2U8VmVoaWNsZUJhc2UsIFZlaGljbGU+IGltcGxlbWVudHMgSUV2ZW50TGlzdGVuZXIge1xuICB1cmw6IHN0cmluZyA9ICd2ZWhpY2xlcyc7XG4gIG1vZGVsQ2xhc3M6IHR5cGVvZiBWZWhpY2xlID0gVmVoaWNsZTtcbiAgbWVzc2FnZUNyZWF0ZWQ6IHN0cmluZyA9IE1lc3NhZ2VzRW51bS5WRUhJQ0xFX0NSRUFURUQ7XG4gIG1lc3NhZ2VVcGRhdGVkOiBzdHJpbmcgPSBNZXNzYWdlc0VudW0uVkVISUNMRV9VUERBVEVEO1xuICBtZXNzYWdlRGVsZXRlZDogc3RyaW5nID0gTWVzc2FnZXNFbnVtLlZFSElDTEVfREVMRVRFRDtcblxuICBsaXN0ZW5FdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5Mb2dib29rQWRkZWQoKTtcbiAgICB0aGlzLmxpc3RlbkxvZ2Jvb2tVcGRhdGVkKCk7XG4gICAgdGhpcy5saXN0ZW5Mb2dib29rRGVsZXRlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBsb2dib29rIGl0ZW1zIHRvIHRoZSB2ZWhpY2xlIHdoZW4gYSBuZXcgb25lIGNyZWF0ZWRcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuTG9nYm9va0FkZGVkKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLlZFSElDTEVfTE9HQk9PS19DUkVBVEVEKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiB7bG9nYm9vazogVmVoaWNsZUxvZ2Jvb2ssIHZlaGljbGVJZDogbnVtYmVyfSkgPT4ge1xuICAgICAgICBjb25zdCB0ZW1wQ2FjaGU6IFZlaGljbGVbXSA9IGNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgdGVtcENhY2hlLmZpbmQoKHZlaGljbGU6IFZlaGljbGUpOiBib29sZWFuID0+IHZlaGljbGUuaWQgPT09IHJlc3VsdC52ZWhpY2xlSWQpLmxvZ2Jvb2sucHVzaChyZXN1bHQubG9nYm9vayk7XG4gICAgICAgIHRoaXMuY2FjaGUgPSB0ZW1wQ2FjaGU7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgdmVoaWNsZSdzIGxvZ2Jvb2sgd2l0aCB1cGRhdGVkIGluc3RhbmNlIHdoZW4gbG9nYm9vayBpdGVtIHVwZGF0ZWRcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuTG9nYm9va1VwZGF0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uVkVISUNMRV9MT0dCT09LX1VQREFURUQpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IHtsb2dib29rOiBWZWhpY2xlTG9nYm9vaywgdmVoaWNsZUlkOiBudW1iZXJ9KTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IHRlbXBDYWNoZTogVmVoaWNsZVtdID0gY2xvbmVEZWVwKHRoaXMuY2FjaGUpO1xuICAgICAgICByZXBsYWNlKHRlbXBDYWNoZS5maW5kKCh2ZWhpY2xlOiBWZWhpY2xlKTogYm9vbGVhbiA9PiB2ZWhpY2xlLmlkID09PSByZXN1bHQudmVoaWNsZUlkKS5sb2dib29rLCByZXN1bHQubG9nYm9vayk7XG4gICAgICAgIHRoaXMuY2FjaGUgPSB0ZW1wQ2FjaGU7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBsb2dib29rIGl0ZW0gZnJvbSB2ZWhpY2xlIHdoZW4gbG9nYm9vayBkZWxldGVkXG4gICAqL1xuICBwcml2YXRlIGxpc3RlbkxvZ2Jvb2tEZWxldGVkKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLlZFSElDTEVfTE9HQk9PS19ERUxFVEVEKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiB7bG9nYm9vazogVmVoaWNsZUxvZ2Jvb2ssIHZlaGljbGVJZDogbnVtYmVyfSkgPT4ge1xuICAgICAgICBjb25zdCB0ZW1wQ2FjaGU6IFZlaGljbGVbXSA9IGNsb25lRGVlcCh0aGlzLmNhY2hlKTtcbiAgICAgICAgY29uc3QgdmVoaWNsZTogVmVoaWNsZSA9IHRlbXBDYWNoZS5maW5kKCh2ZWhpY2xlOiBWZWhpY2xlKTogYm9vbGVhbiA9PiB2ZWhpY2xlLmlkID09PSByZXN1bHQudmVoaWNsZUlkKTtcbiAgICAgICAgdmVoaWNsZS5sb2dib29rID0gdmVoaWNsZS5sb2dib29rLmZpbHRlcigobG9nYm9vazogVmVoaWNsZUxvZ2Jvb2spOiBib29sZWFuID0+IGxvZ2Jvb2suaWQgIT09IHJlc3VsdC5sb2dib29rLmlkKTtcbiAgICAgICAgdGhpcy5jYWNoZSA9IHRlbXBDYWNoZTtcbiAgICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -8,45 +8,70 @@ import * as i0 from "@angular/core";
8
8
  */
9
9
  export class PdfService {
10
10
  /**
11
- * Export file form provided HTML tables
11
+ * Export file from provided HTML tables
12
12
  */
13
- exportTables(tables, title, fileName) {
14
- const document = this.generateFromTables(tables, title);
13
+ exportTables(tables, title, fileName, orientation) {
14
+ const document = this.generateFromTables(orientation, tables, title);
15
15
  document.save(`${fileName}.pdf`);
16
16
  }
17
- generateFromTables(tables, title) {
17
+ /**
18
+ * Export file from provided array-like table data
19
+ */
20
+ exportFromDataTables(dataTables, title, fileName) {
21
+ const document = this.generateFromDataTables(title, dataTables);
22
+ document.save(`${fileName}.pdf`);
23
+ }
24
+ /**
25
+ * Generate file from array-like table data
26
+ */
27
+ generateFromDataTables(title, dataTables) {
18
28
  const pdf = new jsPDF();
19
29
  this.setDocumentTitle(pdf, title);
20
30
  this.setDocumentLogo(pdf);
31
+ dataTables.forEach((dataTable) => {
32
+ autoTable(pdf, Object.assign({ head: [dataTable.header], body: dataTable.rows, foot: [dataTable.footer] }, this.setTableOptions(pdf, dataTable.caption)));
33
+ });
34
+ return pdf;
35
+ }
36
+ generateFromTables(orientation, tables, title) {
37
+ const pdf = new jsPDF(orientation);
38
+ this.setDocumentTitle(pdf, title);
39
+ this.setDocumentLogo(pdf);
21
40
  tables.forEach((table) => {
22
- var _a;
23
41
  // Add table caption if not provided
24
42
  if (!table.caption) {
25
43
  table.createCaption();
26
44
  table.caption.innerText = '';
27
45
  }
28
- // coords of last table
29
- const lastTableCoords = pdf['lastAutoTable'].finalY || PDF_CONFIG.contentCoords.marginTop;
30
- pdf.text(table.caption.innerText, PDF_CONFIG.contentCoords.marginLeft, lastTableCoords + PDF_CONFIG.contentCoords.marginTop);
31
- // get caption height based on caption content height
32
- const captionHeight = pdf.getTextDimensions(pdf.splitTextToSize((_a = table.caption) === null || _a === void 0 ? void 0 : _a.innerText, pdf.internal.pageSize.width)).h;
33
- // table options
34
- const options = {
35
- html: table,
36
- startY: lastTableCoords + captionHeight + PDF_CONFIG.contentTitleCoords.marginTop,
37
- headStyles: PDF_CONFIG.table.headStyles,
38
- footStyles: PDF_CONFIG.table.footStyles,
39
- didParseCell: (data) => {
40
- // Align last column content to right
41
- if (data.table.columns.length > 1 && (data.column.index === data.table.columns.length - 1)) {
42
- data.cell.styles.halign = 'right';
43
- }
44
- }
45
- };
46
- autoTable(pdf, options);
46
+ autoTable(pdf, Object.assign({ html: table }, this.setTableOptions(pdf, table.caption.innerText)));
47
47
  });
48
48
  return pdf;
49
49
  }
50
+ /**
51
+ * Set basic options for PDF table
52
+ */
53
+ setTableOptions(pdf, tableCaption = '') {
54
+ const lastTableCoords = pdf['lastAutoTable'].finalY || PDF_CONFIG.contentCoords.marginTop;
55
+ // get caption height based on caption content height
56
+ const captionHeight = pdf.getTextDimensions(pdf.splitTextToSize(tableCaption, pdf.internal.pageSize.width)).h;
57
+ pdf.text(tableCaption, PDF_CONFIG.contentCoords.marginLeft, lastTableCoords + PDF_CONFIG.contentCoords.marginTop);
58
+ return {
59
+ headStyles: {
60
+ fillColor: PDF_CONFIG.text.colorPrimary,
61
+ },
62
+ footStyles: {
63
+ fillColor: PDF_CONFIG.text.colorWhite,
64
+ textColor: PDF_CONFIG.text.colorBlack
65
+ },
66
+ startY: lastTableCoords + captionHeight + PDF_CONFIG.contentTitleCoords.marginTop,
67
+ didParseCell: (data) => {
68
+ // Align last column content to right
69
+ if (data.table.columns.length > 1 && (data.column.index === data.table.columns.length - 1)) {
70
+ data.cell.styles.halign = 'right';
71
+ }
72
+ }
73
+ };
74
+ }
50
75
  setDocumentTitle(doc, title) {
51
76
  doc.setFontSize(PDF_CONFIG.text.fontSize)
52
77
  .setFont(PDF_CONFIG.text.fontName, PDF_CONFIG.text.fontStyle, PDF_CONFIG.text.fontWeight)
@@ -55,7 +80,7 @@ export class PdfService {
55
80
  setDocumentLogo(doc) {
56
81
  const logo = new Image();
57
82
  logo.src = PDF_CONFIG.logo.src;
58
- doc.addImage(logo, 'PNG', PDF_CONFIG.logo.positionX, PDF_CONFIG.logo.positionY, PDF_CONFIG.logo.width, PDF_CONFIG.logo.height);
83
+ doc.addImage(logo, 'PNG', doc.internal.pageSize.width - PDF_CONFIG.logo.positionX, PDF_CONFIG.logo.positionY, PDF_CONFIG.logo.width, PDF_CONFIG.logo.height);
59
84
  }
60
85
  }
61
86
  PdfService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PdfService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -66,4 +91,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
66
91
  providedIn: 'root'
67
92
  }]
68
93
  }] });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvcGRmL3BkZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFNekQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNyQjs7T0FFRztJQUNILFlBQVksQ0FBQyxNQUFvQyxFQUFFLEtBQWEsRUFBRSxRQUFnQjtRQUNoRixNQUFNLFFBQVEsR0FBVSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9ELFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxNQUFvQyxFQUFFLEtBQWM7UUFDN0UsTUFBTSxHQUFHLEdBQVUsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUUvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQXVCLEVBQUUsRUFBRTs7WUFDekMsb0NBQW9DO1lBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUNsQixLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTthQUM3QjtZQUVELHVCQUF1QjtZQUN2QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQzFGLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsZUFBZSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0gscURBQXFEO1lBQ3JELE1BQU0sYUFBYSxHQUFXLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xJLGdCQUFnQjtZQUNoQixNQUFNLE9BQU8sR0FBRztnQkFDZCxJQUFJLEVBQUUsS0FBSztnQkFDWCxNQUFNLEVBQUUsZUFBZSxHQUFHLGFBQWEsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsU0FBUztnQkFDakYsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVTtnQkFDdkMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVTtnQkFDdkMsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3JCLHFDQUFxQztvQkFDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUMxRixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFBO3FCQUNsQztnQkFDSCxDQUFDO2FBQ0YsQ0FBQztZQUVGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxHQUFVLEVBQUUsS0FBYztRQUNqRCxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ3RDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUN4RixJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxHQUFVO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUMvQixHQUFHLENBQUMsUUFBUSxDQUNWLElBQUksRUFDSixLQUFLLEVBQ0wsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQ3pCLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUN6QixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFDckIsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQ3ZCLENBQUE7SUFDSCxDQUFDOzt3R0FoRVUsVUFBVTs0R0FBVixVQUFVLGNBTlQsTUFBTTs0RkFNUCxVQUFVO2tCQVB0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XG5pbXBvcnQgYXV0b1RhYmxlIGZyb20gJ2pzcGRmLWF1dG90YWJsZSc7XG5pbXBvcnQgeyBQREZfQ09ORklHIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BkZi9wZGYtY29uZmlnJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5cbi8qKlxuICogU2VydmljZSB0byB3b3JrIHdpdGggUERGIChnZW5lcmF0ZSwgZG93bmxvYWQsIGUudC5jLilcbiAqL1xuZXhwb3J0IGNsYXNzIFBkZlNlcnZpY2Uge1xuICAvKipcbiAgICogRXhwb3J0IGZpbGUgZm9ybSBwcm92aWRlZCBIVE1MIHRhYmxlc1xuICAgKi9cbiAgZXhwb3J0VGFibGVzKHRhYmxlczogTm9kZUxpc3RPZjxIVE1MVGFibGVFbGVtZW50PiwgdGl0bGU6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRvY3VtZW50OiBqc1BERiA9IHRoaXMuZ2VuZXJhdGVGcm9tVGFibGVzKHRhYmxlcywgdGl0bGUpO1xuICAgIGRvY3VtZW50LnNhdmUoYCR7ZmlsZU5hbWV9LnBkZmApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZyb21UYWJsZXModGFibGVzOiBOb2RlTGlzdE9mPEhUTUxUYWJsZUVsZW1lbnQ+LCB0aXRsZT86IHN0cmluZyk6IGpzUERGIHtcbiAgICBjb25zdCBwZGY6IGpzUERGID0gbmV3IGpzUERGKCk7XG5cbiAgICB0aGlzLnNldERvY3VtZW50VGl0bGUocGRmLCB0aXRsZSk7XG4gICAgdGhpcy5zZXREb2N1bWVudExvZ28ocGRmKTtcblxuICAgIHRhYmxlcy5mb3JFYWNoKCh0YWJsZTogSFRNTFRhYmxlRWxlbWVudCkgPT4ge1xuICAgICAgLy8gQWRkIHRhYmxlIGNhcHRpb24gaWYgbm90IHByb3ZpZGVkXG4gICAgICBpZiAoIXRhYmxlLmNhcHRpb24pIHtcbiAgICAgICAgdGFibGUuY3JlYXRlQ2FwdGlvbigpO1xuICAgICAgICB0YWJsZS5jYXB0aW9uLmlubmVyVGV4dCA9ICcnXG4gICAgICB9XG5cbiAgICAgIC8vIGNvb3JkcyBvZiBsYXN0IHRhYmxlXG4gICAgICBjb25zdCBsYXN0VGFibGVDb29yZHMgPSBwZGZbJ2xhc3RBdXRvVGFibGUnXS5maW5hbFkgfHwgUERGX0NPTkZJRy5jb250ZW50Q29vcmRzLm1hcmdpblRvcDtcbiAgICAgIHBkZi50ZXh0KHRhYmxlLmNhcHRpb24uaW5uZXJUZXh0LCBQREZfQ09ORklHLmNvbnRlbnRDb29yZHMubWFyZ2luTGVmdCwgbGFzdFRhYmxlQ29vcmRzICsgUERGX0NPTkZJRy5jb250ZW50Q29vcmRzLm1hcmdpblRvcCk7XG4gICAgICAvLyBnZXQgY2FwdGlvbiBoZWlnaHQgYmFzZWQgb24gY2FwdGlvbiBjb250ZW50IGhlaWdodFxuICAgICAgY29uc3QgY2FwdGlvbkhlaWdodDogbnVtYmVyID0gcGRmLmdldFRleHREaW1lbnNpb25zKHBkZi5zcGxpdFRleHRUb1NpemUodGFibGUuY2FwdGlvbj8uaW5uZXJUZXh0LCBwZGYuaW50ZXJuYWwucGFnZVNpemUud2lkdGgpKS5oO1xuICAgICAgLy8gdGFibGUgb3B0aW9uc1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgaHRtbDogdGFibGUsXG4gICAgICAgIHN0YXJ0WTogbGFzdFRhYmxlQ29vcmRzICsgY2FwdGlvbkhlaWdodCArIFBERl9DT05GSUcuY29udGVudFRpdGxlQ29vcmRzLm1hcmdpblRvcCxcbiAgICAgICAgaGVhZFN0eWxlczogUERGX0NPTkZJRy50YWJsZS5oZWFkU3R5bGVzLFxuICAgICAgICBmb290U3R5bGVzOiBQREZfQ09ORklHLnRhYmxlLmZvb3RTdHlsZXMsXG4gICAgICAgIGRpZFBhcnNlQ2VsbDogKGRhdGEpID0+IHtcbiAgICAgICAgICAvLyBBbGlnbiBsYXN0IGNvbHVtbiBjb250ZW50IHRvIHJpZ2h0XG4gICAgICAgICAgaWYgKGRhdGEudGFibGUuY29sdW1ucy5sZW5ndGggPiAxICYmIChkYXRhLmNvbHVtbi5pbmRleCA9PT0gZGF0YS50YWJsZS5jb2x1bW5zLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICBkYXRhLmNlbGwuc3R5bGVzLmhhbGlnbiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGF1dG9UYWJsZShwZGYsIG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBkZjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RG9jdW1lbnRUaXRsZShkb2M6IGpzUERGLCB0aXRsZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGRvYy5zZXRGb250U2l6ZShQREZfQ09ORklHLnRleHQuZm9udFNpemUpXG4gICAgICAuc2V0Rm9udChQREZfQ09ORklHLnRleHQuZm9udE5hbWUsIFBERl9DT05GSUcudGV4dC5mb250U3R5bGUsIFBERl9DT05GSUcudGV4dC5mb250V2VpZ2h0KVxuICAgICAgLnRleHQodGl0bGUsIFBERl9DT05GSUcudGV4dC5wb3NpdGlvblgsIFBERl9DT05GSUcudGV4dC5wb3NpdGlvblkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREb2N1bWVudExvZ28oZG9jOiBqc1BERik6IHZvaWQge1xuICAgIGNvbnN0IGxvZ28gPSBuZXcgSW1hZ2UoKTtcbiAgICBsb2dvLnNyYyA9IFBERl9DT05GSUcubG9nby5zcmM7XG4gICAgZG9jLmFkZEltYWdlKFxuICAgICAgbG9nbyxcbiAgICAgICdQTkcnLFxuICAgICAgUERGX0NPTkZJRy5sb2dvLnBvc2l0aW9uWCxcbiAgICAgIFBERl9DT05GSUcubG9nby5wb3NpdGlvblksXG4gICAgICBQREZfQ09ORklHLmxvZ28ud2lkdGgsXG4gICAgICBQREZfQ09ORklHLmxvZ28uaGVpZ2h0XG4gICAgKVxuICB9XG59XG4iXX0=
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvcGRmL3BkZi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFRekQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNyQjs7T0FFRztJQUNILFlBQVksQ0FBQyxNQUFvQyxFQUFFLEtBQWEsRUFBRSxRQUFnQixFQUFFLFdBQStCO1FBQ2pILE1BQU0sUUFBUSxHQUFVLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLFVBQTZCLEVBQUUsS0FBYSxFQUFFLFFBQWdCO1FBQ2pGLE1BQU0sUUFBUSxHQUFVLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdkUsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssc0JBQXNCLENBQUMsS0FBYSxFQUFFLFVBQTZCO1FBQ3pFLE1BQU0sR0FBRyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7UUFFL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTFCLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUEwQixFQUFFLEVBQUU7WUFDaEQsU0FBUyxDQUNQLEdBQUcsa0JBQ0QsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUN4QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFDcEIsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQy9DLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFdBQStCLEVBQUUsTUFBb0MsRUFBRSxLQUFjO1FBQzlHLE1BQU0sR0FBRyxHQUFVLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBdUIsRUFBRSxFQUFFO1lBQ3pDLG9DQUFvQztZQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDbEIsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN0QixLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUE7YUFDN0I7WUFFRCxTQUFTLENBQ1AsR0FBRyxrQkFFRCxJQUFJLEVBQUUsS0FBSyxJQUNSLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQ3JELENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZUFBZSxDQUFDLEdBQVUsRUFBRSxlQUF1QixFQUFFO1FBQzNELE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDMUYscURBQXFEO1FBQ3JELE1BQU0sYUFBYSxHQUFXLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0SCxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxlQUFlLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVsSCxPQUFPO1lBQ0wsVUFBVSxFQUFFO2dCQUNWLFNBQVMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVk7YUFDeEM7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDckMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVTthQUN0QztZQUNELE1BQU0sRUFBRSxlQUFlLEdBQUcsYUFBYSxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTO1lBQ2pGLFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNyQixxQ0FBcUM7Z0JBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDMUYsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQTtpQkFDbEM7WUFDSCxDQUFDO1NBQ0YsQ0FBQTtJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxHQUFVLEVBQUUsS0FBYztRQUNqRCxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2FBQ3RDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUN4RixJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxHQUFVO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUMvQixHQUFHLENBQUMsUUFBUSxDQUNWLElBQUksRUFDSixLQUFLLEVBQ0wsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUN2RCxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFDekIsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQ3JCLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUN2QixDQUFBO0lBQ0gsQ0FBQzs7d0dBM0dVLFVBQVU7NEdBQVYsVUFBVSxjQU5ULE1BQU07NEZBTVAsVUFBVTtrQkFQdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xuaW1wb3J0IGF1dG9UYWJsZSBmcm9tICdqc3BkZi1hdXRvdGFibGUnO1xuaW1wb3J0IHsgUERGX0NPTkZJRyB9IGZyb20gJy4uLy4uL21vZGVscy9wZGYvcGRmLWNvbmZpZyc7XG5pbXBvcnQgeyBFeHBvcnREYXRhVGFibGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZXhwb3J0L2V4cG9ydC1kYXRhLXRhYmxlJztcbmltcG9ydCB7IFBkZk9yaWVudGF0aW9uRW51bSB9IGZyb20gJy4uLy4uL21vZGVscy9wZGYvcGRmLW9yaWVudGF0aW9uLmVudW0nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcblxuLyoqXG4gKiBTZXJ2aWNlIHRvIHdvcmsgd2l0aCBQREYgKGdlbmVyYXRlLCBkb3dubG9hZCwgZS50LmMuKVxuICovXG5leHBvcnQgY2xhc3MgUGRmU2VydmljZSB7XG4gIC8qKlxuICAgKiBFeHBvcnQgZmlsZSBmcm9tIHByb3ZpZGVkIEhUTUwgdGFibGVzXG4gICAqL1xuICBleHBvcnRUYWJsZXModGFibGVzOiBOb2RlTGlzdE9mPEhUTUxUYWJsZUVsZW1lbnQ+LCB0aXRsZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCBvcmllbnRhdGlvbjogUGRmT3JpZW50YXRpb25FbnVtKTogdm9pZCB7XG4gICAgY29uc3QgZG9jdW1lbnQ6IGpzUERGID0gdGhpcy5nZW5lcmF0ZUZyb21UYWJsZXMob3JpZW50YXRpb24sIHRhYmxlcywgdGl0bGUpO1xuICAgIGRvY3VtZW50LnNhdmUoYCR7ZmlsZU5hbWV9LnBkZmApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBmaWxlIGZyb20gcHJvdmlkZWQgYXJyYXktbGlrZSB0YWJsZSBkYXRhXG4gICAqL1xuICBleHBvcnRGcm9tRGF0YVRhYmxlcyhkYXRhVGFibGVzOiBFeHBvcnREYXRhVGFibGVbXSwgdGl0bGU6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRvY3VtZW50OiBqc1BERiA9IHRoaXMuZ2VuZXJhdGVGcm9tRGF0YVRhYmxlcyh0aXRsZSwgZGF0YVRhYmxlcyk7XG4gICAgZG9jdW1lbnQuc2F2ZShgJHtmaWxlTmFtZX0ucGRmYCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgZmlsZSBmcm9tIGFycmF5LWxpa2UgdGFibGUgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZyb21EYXRhVGFibGVzKHRpdGxlOiBzdHJpbmcsIGRhdGFUYWJsZXM6IEV4cG9ydERhdGFUYWJsZVtdKToganNQREYge1xuICAgIGNvbnN0IHBkZjoganNQREYgPSBuZXcganNQREYoKTtcblxuICAgIHRoaXMuc2V0RG9jdW1lbnRUaXRsZShwZGYsIHRpdGxlKTtcbiAgICB0aGlzLnNldERvY3VtZW50TG9nbyhwZGYpO1xuXG4gICAgZGF0YVRhYmxlcy5mb3JFYWNoKChkYXRhVGFibGU6IEV4cG9ydERhdGFUYWJsZSkgPT4ge1xuICAgICAgYXV0b1RhYmxlKFxuICAgICAgICBwZGYsIHtcbiAgICAgICAgICBoZWFkOiBbZGF0YVRhYmxlLmhlYWRlcl0sXG4gICAgICAgICAgYm9keTogZGF0YVRhYmxlLnJvd3MsXG4gICAgICAgICAgZm9vdDogW2RhdGFUYWJsZS5mb290ZXJdLFxuICAgICAgICAgIC4uLnRoaXMuc2V0VGFibGVPcHRpb25zKHBkZiwgZGF0YVRhYmxlLmNhcHRpb24pXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHBkZjtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVGcm9tVGFibGVzKG9yaWVudGF0aW9uOiBQZGZPcmllbnRhdGlvbkVudW0sIHRhYmxlczogTm9kZUxpc3RPZjxIVE1MVGFibGVFbGVtZW50PiwgdGl0bGU/OiBzdHJpbmcpOiBqc1BERiB7XG4gICAgY29uc3QgcGRmOiBqc1BERiA9IG5ldyBqc1BERihvcmllbnRhdGlvbik7XG5cbiAgICB0aGlzLnNldERvY3VtZW50VGl0bGUocGRmLCB0aXRsZSk7XG4gICAgdGhpcy5zZXREb2N1bWVudExvZ28ocGRmKTtcblxuICAgIHRhYmxlcy5mb3JFYWNoKCh0YWJsZTogSFRNTFRhYmxlRWxlbWVudCkgPT4ge1xuICAgICAgLy8gQWRkIHRhYmxlIGNhcHRpb24gaWYgbm90IHByb3ZpZGVkXG4gICAgICBpZiAoIXRhYmxlLmNhcHRpb24pIHtcbiAgICAgICAgdGFibGUuY3JlYXRlQ2FwdGlvbigpO1xuICAgICAgICB0YWJsZS5jYXB0aW9uLmlubmVyVGV4dCA9ICcnXG4gICAgICB9XG5cbiAgICAgIGF1dG9UYWJsZShcbiAgICAgICAgcGRmLFxuICAgICAgICB7XG4gICAgICAgICAgaHRtbDogdGFibGUsXG4gICAgICAgICAgLi4udGhpcy5zZXRUYWJsZU9wdGlvbnMocGRmLCB0YWJsZS5jYXB0aW9uLmlubmVyVGV4dClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGRmO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBiYXNpYyBvcHRpb25zIGZvciBQREYgdGFibGVcbiAgICovXG4gIHByaXZhdGUgc2V0VGFibGVPcHRpb25zKHBkZjoganNQREYsIHRhYmxlQ2FwdGlvbjogc3RyaW5nID0gJycpOiBvYmplY3Qge1xuICAgIGNvbnN0IGxhc3RUYWJsZUNvb3JkcyA9IHBkZlsnbGFzdEF1dG9UYWJsZSddLmZpbmFsWSB8fCBQREZfQ09ORklHLmNvbnRlbnRDb29yZHMubWFyZ2luVG9wO1xuICAgIC8vIGdldCBjYXB0aW9uIGhlaWdodCBiYXNlZCBvbiBjYXB0aW9uIGNvbnRlbnQgaGVpZ2h0XG4gICAgY29uc3QgY2FwdGlvbkhlaWdodDogbnVtYmVyID0gcGRmLmdldFRleHREaW1lbnNpb25zKHBkZi5zcGxpdFRleHRUb1NpemUodGFibGVDYXB0aW9uLCBwZGYuaW50ZXJuYWwucGFnZVNpemUud2lkdGgpKS5oO1xuICAgIHBkZi50ZXh0KHRhYmxlQ2FwdGlvbiwgUERGX0NPTkZJRy5jb250ZW50Q29vcmRzLm1hcmdpbkxlZnQsIGxhc3RUYWJsZUNvb3JkcyArIFBERl9DT05GSUcuY29udGVudENvb3Jkcy5tYXJnaW5Ub3ApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRTdHlsZXM6IHtcbiAgICAgICAgZmlsbENvbG9yOiBQREZfQ09ORklHLnRleHQuY29sb3JQcmltYXJ5LFxuICAgICAgfSxcbiAgICAgIGZvb3RTdHlsZXM6IHtcbiAgICAgICAgZmlsbENvbG9yOiBQREZfQ09ORklHLnRleHQuY29sb3JXaGl0ZSxcbiAgICAgICAgdGV4dENvbG9yOiBQREZfQ09ORklHLnRleHQuY29sb3JCbGFja1xuICAgICAgfSxcbiAgICAgIHN0YXJ0WTogbGFzdFRhYmxlQ29vcmRzICsgY2FwdGlvbkhlaWdodCArIFBERl9DT05GSUcuY29udGVudFRpdGxlQ29vcmRzLm1hcmdpblRvcCxcbiAgICAgIGRpZFBhcnNlQ2VsbDogKGRhdGEpID0+IHtcbiAgICAgICAgLy8gQWxpZ24gbGFzdCBjb2x1bW4gY29udGVudCB0byByaWdodFxuICAgICAgICBpZiAoZGF0YS50YWJsZS5jb2x1bW5zLmxlbmd0aCA+IDEgJiYgKGRhdGEuY29sdW1uLmluZGV4ID09PSBkYXRhLnRhYmxlLmNvbHVtbnMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICBkYXRhLmNlbGwuc3R5bGVzLmhhbGlnbiA9ICdyaWdodCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0RG9jdW1lbnRUaXRsZShkb2M6IGpzUERGLCB0aXRsZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGRvYy5zZXRGb250U2l6ZShQREZfQ09ORklHLnRleHQuZm9udFNpemUpXG4gICAgICAuc2V0Rm9udChQREZfQ09ORklHLnRleHQuZm9udE5hbWUsIFBERl9DT05GSUcudGV4dC5mb250U3R5bGUsIFBERl9DT05GSUcudGV4dC5mb250V2VpZ2h0KVxuICAgICAgLnRleHQodGl0bGUsIFBERl9DT05GSUcudGV4dC5wb3NpdGlvblgsIFBERl9DT05GSUcudGV4dC5wb3NpdGlvblkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREb2N1bWVudExvZ28oZG9jOiBqc1BERik6IHZvaWQge1xuICAgIGNvbnN0IGxvZ28gPSBuZXcgSW1hZ2UoKTtcbiAgICBsb2dvLnNyYyA9IFBERl9DT05GSUcubG9nby5zcmM7XG4gICAgZG9jLmFkZEltYWdlKFxuICAgICAgbG9nbyxcbiAgICAgICdQTkcnLFxuICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoIC0gUERGX0NPTkZJRy5sb2dvLnBvc2l0aW9uWCxcbiAgICAgIFBERl9DT05GSUcubG9nby5wb3NpdGlvblksXG4gICAgICBQREZfQ09ORklHLmxvZ28ud2lkdGgsXG4gICAgICBQREZfQ09ORklHLmxvZ28uaGVpZ2h0XG4gICAgKVxuICB9XG59XG4iXX0=
@@ -0,0 +1,53 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Transaction } from '../../../models/transaction/transaction';
3
+ import { plainToClass } from 'class-transformer';
4
+ import { ExportDataTable } from '../../../models/export/export-data-table';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../pdf/pdf.service";
7
+ import * as i2 from "@angular/common";
8
+ /**
9
+ * Service to work with holding costs (transactions related to vacant land property)
10
+ */
11
+ export class PropertyHoldingCostsService {
12
+ constructor(pdfService, currencyPipe, datePipe) {
13
+ this.pdfService = pdfService;
14
+ this.currencyPipe = currencyPipe;
15
+ this.datePipe = datePipe;
16
+ this.url = 'transactions';
17
+ this.modelClass = Transaction;
18
+ }
19
+ initDataTable(holdingCosts) {
20
+ return plainToClass(ExportDataTable, {
21
+ header: ['Date', 'Description', 'Debit', 'Credit'],
22
+ rows: this.getDataTableRows(holdingCosts),
23
+ footer: [
24
+ 'Total',
25
+ '',
26
+ this.currencyPipe.transform(holdingCosts.sumBy('debit')).toString(),
27
+ this.currencyPipe.transform(holdingCosts.sumBy('credit')).toString(),
28
+ ]
29
+ });
30
+ }
31
+ /**
32
+ * Get data for the exporting table rows
33
+ */
34
+ getDataTableRows(holdingCosts) {
35
+ return holdingCosts.items.map((transaction) => {
36
+ return [
37
+ this.datePipe.transform(transaction.date, 'dd/MM/YYYY').toString(),
38
+ transaction.description,
39
+ this.currencyPipe.transform(transaction.debit).toString(),
40
+ this.currencyPipe.transform(transaction.credit).toString()
41
+ ];
42
+ });
43
+ }
44
+ }
45
+ PropertyHoldingCostsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyHoldingCostsService, deps: [{ token: i1.PdfService }, { token: i2.CurrencyPipe }, { token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Injectable });
46
+ PropertyHoldingCostsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyHoldingCostsService, providedIn: 'root' });
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyHoldingCostsService, decorators: [{
48
+ type: Injectable,
49
+ args: [{
50
+ providedIn: 'root'
51
+ }]
52
+ }], ctorParameters: function () { return [{ type: i1.PdfService }, { type: i2.CurrencyPipe }, { type: i2.DatePipe }]; } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHktaG9sZGluZy1jb3N0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL3Byb3BlcnR5L3Byb3BlcnR5LWhvbGRpbmctY29zdHMvcHJvcGVydHktaG9sZGluZy1jb3N0cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7QUFLM0U7O0dBRUc7QUFJSCxNQUFNLE9BQU8sMkJBQTJCO0lBSXRDLFlBQ1UsVUFBc0IsRUFDdEIsWUFBMEIsRUFDMUIsUUFBa0I7UUFGbEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBTjVCLFFBQUcsR0FBVyxjQUFjLENBQUM7UUFDN0IsZUFBVSxHQUFHLFdBQVcsQ0FBQztJQU96QixDQUFDO0lBRUQsYUFBYSxDQUFDLFlBQW1DO1FBQy9DLE9BQU8sWUFBWSxDQUFDLGVBQWUsRUFBRTtZQUNuQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUM7WUFDbEQsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7WUFDekMsTUFBTSxFQUFFO2dCQUNOLE9BQU87Z0JBQ1AsRUFBRTtnQkFDRixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO2FBQ3JFO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsWUFBbUM7UUFDMUQsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtZQUN6RCxPQUFPO2dCQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNsRSxXQUFXLENBQUMsV0FBVztnQkFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRTthQUMzRCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt5SEFwQ1UsMkJBQTJCOzZIQUEzQiwyQkFBMkIsY0FGMUIsTUFBTTs0RkFFUCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdHJhbnNhY3Rpb24vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgRXhwb3J0RGF0YVRhYmxlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V4cG9ydC9leHBvcnQtZGF0YS10YWJsZSc7XG5pbXBvcnQgeyBQZGZTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcGRmL3BkZi5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQ29sbGVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvbGxlY3Rpb25zL3RyYW5zYWN0aW9uLmNvbGxlY3Rpb24nO1xuaW1wb3J0IHsgQ3VycmVuY3lQaXBlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbi8qKlxuICogU2VydmljZSB0byB3b3JrIHdpdGggaG9sZGluZyBjb3N0cyAodHJhbnNhY3Rpb25zIHJlbGF0ZWQgdG8gdmFjYW50IGxhbmQgcHJvcGVydHkpXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5SG9sZGluZ0Nvc3RzU2VydmljZSB7XG4gIHVybDogc3RyaW5nID0gJ3RyYW5zYWN0aW9ucyc7XG4gIG1vZGVsQ2xhc3MgPSBUcmFuc2FjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBkZlNlcnZpY2U6IFBkZlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXJyZW5jeVBpcGU6IEN1cnJlbmN5UGlwZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgKSB7XG4gIH1cblxuICBpbml0RGF0YVRhYmxlKGhvbGRpbmdDb3N0czogVHJhbnNhY3Rpb25Db2xsZWN0aW9uKTogRXhwb3J0RGF0YVRhYmxlIHtcbiAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKEV4cG9ydERhdGFUYWJsZSwge1xuICAgICAgaGVhZGVyOiBbJ0RhdGUnLCAnRGVzY3JpcHRpb24nLCAnRGViaXQnLCAnQ3JlZGl0J10sXG4gICAgICByb3dzOiB0aGlzLmdldERhdGFUYWJsZVJvd3MoaG9sZGluZ0Nvc3RzKSxcbiAgICAgIGZvb3RlcjogW1xuICAgICAgICAnVG90YWwnLFxuICAgICAgICAnJyxcbiAgICAgICAgdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGhvbGRpbmdDb3N0cy5zdW1CeSgnZGViaXQnKSkudG9TdHJpbmcoKSxcbiAgICAgICAgdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGhvbGRpbmdDb3N0cy5zdW1CeSgnY3JlZGl0JykpLnRvU3RyaW5nKCksXG4gICAgICBdXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGEgZm9yIHRoZSBleHBvcnRpbmcgdGFibGUgcm93c1xuICAgKi9cbiAgcHJpdmF0ZSBnZXREYXRhVGFibGVSb3dzKGhvbGRpbmdDb3N0czogVHJhbnNhY3Rpb25Db2xsZWN0aW9uKTogc3RyaW5nW11bXSB7XG4gICAgcmV0dXJuIGhvbGRpbmdDb3N0cy5pdGVtcy5tYXAoKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odHJhbnNhY3Rpb24uZGF0ZSwgJ2RkL01NL1lZWVknKS50b1N0cmluZygpLFxuICAgICAgICB0cmFuc2FjdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKHRyYW5zYWN0aW9uLmRlYml0KS50b1N0cmluZygpLFxuICAgICAgICB0aGlzLmN1cnJlbmN5UGlwZS50cmFuc2Zvcm0odHJhbnNhY3Rpb24uY3JlZGl0KS50b1N0cmluZygpXG4gICAgICBdO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Check if at least one form field is true, otherwise form is invalid.
3
+ * Use with groups of boolean form controls (checkbox, toggle, etc.)
4
+ */
5
+ export function atLeastOneCheckedValidator() {
6
+ return (formGroup) => {
7
+ return Object.values(formGroup.controls)
8
+ .find((control) => control.value) ? null : { nothingChecked: true };
9
+ };
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXQtbGVhc3Qtb25lLnZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi92YWxpZGF0b3JzL2F0LWxlYXN0LW9uZS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQjtJQUN4QyxPQUFPLENBQUMsU0FBb0IsRUFBb0IsRUFBRTtRQUNoRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzthQUNyQyxJQUFJLENBQUMsQ0FBQyxPQUFvQixFQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBQyxjQUFjLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDNUYsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG4vKipcbiAqIENoZWNrIGlmIGF0IGxlYXN0IG9uZSBmb3JtIGZpZWxkIGlzIHRydWUsIG90aGVyd2lzZSBmb3JtIGlzIGludmFsaWQuXG4gKiBVc2Ugd2l0aCBncm91cHMgb2YgYm9vbGVhbiBmb3JtIGNvbnRyb2xzIChjaGVja2JveCwgdG9nZ2xlLCBldGMuKVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXRMZWFzdE9uZUNoZWNrZWRWYWxpZGF0b3IoKTogVmFsaWRhdG9yRm4ge1xuICByZXR1cm4gKGZvcm1Hcm91cDogRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZm9ybUdyb3VwLmNvbnRyb2xzKVxuICAgICAgLmZpbmQoKGNvbnRyb2w6IEZvcm1Db250cm9sKTogYm9vbGVhbiA9PiBjb250cm9sLnZhbHVlKSA/IG51bGwgOiB7bm90aGluZ0NoZWNrZWQ6IHRydWV9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './at-least-one.validator';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvdmFsaWRhdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hdC1sZWFzdC1vbmUudmFsaWRhdG9yJztcbiJdfQ==