taxtank-core 0.28.97 → 0.28.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/taxtank-core.umd.js +2303 -2040
- package/bundles/taxtank-core.umd.js.map +1 -1
- package/esm2015/lib/collections/index.js +3 -1
- package/esm2015/lib/collections/sole/sole-business-losses.collection.js +2 -2
- package/esm2015/lib/db/Models/abstract-model.js +2 -1
- package/esm2015/lib/db/Models/observable-model.js +10 -0
- package/esm2015/lib/db/Models/property/property.js +3 -3
- package/esm2015/lib/db/Models/sole/bas-report.js +3 -2
- package/esm2015/lib/functions/array/index.js +2 -1
- package/esm2015/lib/functions/array/to-array.js +7 -0
- package/esm2015/lib/models/event/app-event.js +12 -1
- package/esm2015/lib/models/property/property.js +3 -1
- package/esm2015/lib/models/report/sole/sole-business/sole-business-loss-report.js +4 -2
- package/esm2015/lib/services/account-setup/account-setup.service.js +3 -2
- package/esm2015/lib/services/event/event-dispatcher.service.js +12 -1
- package/esm2015/lib/services/http/bank/bank-account/bank-account.service.js +2 -2
- package/esm2015/lib/services/http/bank/bank-connection/bank-connection.service.js +2 -2
- package/esm2015/lib/services/http/bank/bank-transaction/bank-transaction.service.js +2 -2
- package/esm2015/lib/services/http/bank/bank.service.js +2 -2
- package/esm2015/lib/services/http/bank/basiq/basiq.service.js +2 -2
- package/esm2015/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.js +2 -2
- package/esm2015/lib/services/http/chat/chat.service.js +2 -2
- package/esm2015/lib/services/http/chat/message/message.service.js +2 -2
- package/esm2015/lib/services/http/depreciation/depreciation.service.js +2 -2
- package/esm2015/lib/services/http/document/document-folder/document-folder.service.js +2 -2
- package/esm2015/lib/services/http/document/document.service.js +2 -2
- package/esm2015/lib/services/http/firm/client-invite/client-invite.service.js +2 -2
- package/esm2015/lib/services/http/firm/client-movement/client-movement.service.js +2 -2
- package/esm2015/lib/services/http/firm/employee/employee.service.js +2 -2
- package/esm2015/lib/services/http/firm/employee-invite/employee-invite.service.js +2 -2
- package/esm2015/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.js +2 -2
- package/esm2015/lib/services/http/income-source/income-source.service.js +2 -2
- package/esm2015/lib/services/http/income-source/salary-forecast/salary-forecast.service.js +2 -2
- package/esm2015/lib/services/http/income-source/sole-forecast/sole-forecast.service.js +2 -2
- package/esm2015/lib/services/http/loan/loan.service.js +2 -2
- package/esm2015/lib/services/http/property/property-category/property-category.service.js +2 -2
- package/esm2015/lib/services/http/property/property-category-movement/property-category-movement.service.js +2 -2
- package/esm2015/lib/services/http/property/property-document/property-document.service.js +2 -2
- package/esm2015/lib/services/http/property/property-sale/property-sale.service.js +2 -2
- package/esm2015/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.js +2 -2
- package/esm2015/lib/services/http/property/property-share/property-share.service.js +2 -2
- package/esm2015/lib/services/http/property/property.service.js +29 -46
- package/esm2015/lib/services/http/rest/http-method.type.js +2 -0
- package/esm2015/lib/services/http/rest/index.js +3 -1
- package/esm2015/lib/services/http/rest/rest-method.type.js +2 -0
- package/esm2015/lib/services/http/rest/rest-old.service.js +225 -0
- package/esm2015/lib/services/http/rest/rest.service.js +144 -147
- package/esm2015/lib/services/http/service-notification/service-notification.service.js +2 -2
- package/esm2015/lib/services/http/sole/bas-report/bas-report.service.js +2 -2
- package/esm2015/lib/services/http/sole/sole-business/sole-business.service.js +2 -2
- package/esm2015/lib/services/http/sole/sole-business-activity/sole-business-activity.service.js +2 -2
- package/esm2015/lib/services/http/sole/sole-business-loss/sole-business-loss-rules/sole-business-loss-offset-rule.service.js +2 -2
- package/esm2015/lib/services/http/sole/sole-business-loss/sole-business-loss.service.js +2 -2
- package/esm2015/lib/services/http/sole/sole-contact/sole-contact.service.js +2 -2
- package/esm2015/lib/services/http/sole/sole-invoice/sole-invoice.service.js +2 -2
- package/esm2015/lib/services/http/sole/sole-invoice-template/sole-invoice-template.service.js +2 -2
- package/esm2015/lib/services/http/subscription/service-price.service.js +2 -2
- package/esm2015/lib/services/http/tax-review/tax-review-history/tax-review-history.service.js +2 -2
- package/esm2015/lib/services/http/tax-review/tax-review.service.js +2 -2
- package/esm2015/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.js +2 -2
- package/esm2015/lib/services/http/transaction/transaction.service.js +2 -2
- package/esm2015/lib/services/http/user/user-event-setting/user-event-setting.service.js +2 -2
- package/esm2015/lib/services/http/user/user-event-type/user-event-type.service.js +2 -2
- package/esm2015/lib/services/http/user/users-invite/users-invite.service.js +2 -2
- package/esm2015/lib/services/http/vehicle/vehicle-claim.service.js +2 -2
- package/esm2015/lib/services/http/vehicle/vehicle-logbook.service.js +2 -2
- package/esm2015/lib/services/http/vehicle/vehicle.service.js +2 -2
- package/esm2015/lib/services/report/property/property-transaction-report.service.js +2 -3
- package/fesm2015/taxtank-core.js +1964 -1728
- package/fesm2015/taxtank-core.js.map +1 -1
- package/lib/collections/index.d.ts +2 -0
- package/lib/db/Models/observable-model.d.ts +8 -0
- package/lib/db/Models/property/property.d.ts +2 -2
- package/lib/db/Models/sole/bas-report.d.ts +2 -1
- package/lib/functions/array/index.d.ts +1 -0
- package/lib/functions/array/to-array.d.ts +4 -0
- package/lib/models/event/app-event.d.ts +9 -0
- package/lib/models/property/property.d.ts +2 -0
- package/lib/services/event/event-dispatcher.service.d.ts +9 -1
- package/lib/services/http/bank/bank-account/bank-account.service.d.ts +1 -1
- package/lib/services/http/bank/bank-connection/bank-connection.service.d.ts +1 -1
- package/lib/services/http/bank/bank-transaction/bank-transaction.service.d.ts +1 -1
- package/lib/services/http/bank/bank.service.d.ts +1 -1
- package/lib/services/http/bank/basiq/basiq.service.d.ts +1 -1
- package/lib/services/http/chart-accounts/chart-accounts-depreciations/chart-accounts-depreciations.service.d.ts +1 -1
- package/lib/services/http/chat/chat.service.d.ts +1 -1
- package/lib/services/http/chat/message/message.service.d.ts +1 -1
- package/lib/services/http/depreciation/depreciation.service.d.ts +1 -1
- package/lib/services/http/document/document-folder/document-folder.service.d.ts +1 -1
- package/lib/services/http/document/document.service.d.ts +1 -1
- package/lib/services/http/firm/client-invite/client-invite.service.d.ts +1 -1
- package/lib/services/http/firm/client-movement/client-movement.service.d.ts +1 -1
- package/lib/services/http/firm/employee/employee.service.d.ts +1 -1
- package/lib/services/http/firm/employee-invite/employee-invite.service.d.ts +1 -1
- package/lib/services/http/income-source/income-source-forecast/income-source-forecast.service.d.ts +1 -1
- package/lib/services/http/income-source/income-source.service.d.ts +1 -1
- package/lib/services/http/income-source/salary-forecast/salary-forecast.service.d.ts +1 -1
- package/lib/services/http/income-source/sole-forecast/sole-forecast.service.d.ts +1 -1
- package/lib/services/http/loan/loan.service.d.ts +1 -1
- package/lib/services/http/property/property-category/property-category.service.d.ts +1 -1
- package/lib/services/http/property/property-category-movement/property-category-movement.service.d.ts +1 -1
- package/lib/services/http/property/property-document/property-document.service.d.ts +1 -1
- package/lib/services/http/property/property-sale/property-sale.service.d.ts +1 -1
- package/lib/services/http/property/property-sale/tax-exemption/tax-exemption.service.d.ts +1 -1
- package/lib/services/http/property/property-share/property-share.service.d.ts +1 -1
- package/lib/services/http/property/property.service.d.ts +8 -11
- package/lib/services/http/rest/http-method.type.d.ts +1 -0
- package/lib/services/http/rest/index.d.ts +2 -0
- package/lib/services/http/rest/rest-method.type.d.ts +1 -0
- package/lib/services/http/rest/rest-old.service.d.ts +110 -0
- package/lib/services/http/rest/rest.service.d.ts +71 -62
- package/lib/services/http/service-notification/service-notification.service.d.ts +1 -1
- package/lib/services/http/sole/bas-report/bas-report.service.d.ts +1 -1
- package/lib/services/http/sole/sole-business/sole-business.service.d.ts +1 -1
- package/lib/services/http/sole/sole-business-activity/sole-business-activity.service.d.ts +1 -1
- package/lib/services/http/sole/sole-business-loss/sole-business-loss-rules/sole-business-loss-offset-rule.service.d.ts +1 -1
- package/lib/services/http/sole/sole-business-loss/sole-business-loss.service.d.ts +1 -1
- package/lib/services/http/sole/sole-contact/sole-contact.service.d.ts +1 -1
- package/lib/services/http/sole/sole-invoice/sole-invoice.service.d.ts +1 -1
- package/lib/services/http/sole/sole-invoice-template/sole-invoice-template.service.d.ts +1 -1
- package/lib/services/http/subscription/service-price.service.d.ts +1 -1
- package/lib/services/http/tax-review/tax-review-history/tax-review-history.service.d.ts +1 -1
- package/lib/services/http/tax-review/tax-review.service.d.ts +1 -1
- package/lib/services/http/transaction/transaction-allocation/transaction-allocation.service.d.ts +1 -1
- package/lib/services/http/transaction/transaction.service.d.ts +1 -1
- package/lib/services/http/user/user-event-setting/user-event-setting.service.d.ts +1 -1
- package/lib/services/http/user/user-event-type/user-event-type.service.d.ts +1 -1
- package/lib/services/http/user/users-invite/users-invite.service.d.ts +1 -1
- package/lib/services/http/vehicle/vehicle-claim.service.d.ts +1 -1
- package/lib/services/http/vehicle/vehicle-logbook.service.d.ts +1 -1
- package/lib/services/http/vehicle/vehicle.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,25 +1,42 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { map } from 'rxjs/operators';
|
|
3
|
-
import { replace } from '../../../functions/array';
|
|
4
3
|
import { plainToClass } from 'class-transformer';
|
|
5
|
-
import { RestService } from '../rest/rest.service';
|
|
6
4
|
import { Property } from '../../../models/property/property';
|
|
7
5
|
import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
|
|
8
|
-
import { AppEvent } from '../../../models/event/app-event';
|
|
9
6
|
import { PropertySubscription } from '../../../models/property/property-subscription';
|
|
10
7
|
import { PropertySale } from '../../../models/property/property-sale/property-sale';
|
|
8
|
+
import merge from 'lodash/merge';
|
|
9
|
+
import { AppEvent } from '../../../models/event/app-event';
|
|
10
|
+
import { RestService } from '../rest/rest.service';
|
|
11
|
+
import { PropertyCollection } from '../../../collections';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
13
|
/**
|
|
13
14
|
* @Todo Alex remove functionality related to PropertyShare
|
|
15
|
+
* @TODO Alex (TT-1777): replace all event listeners with the new this.listen()
|
|
14
16
|
* Service for work with Property
|
|
15
17
|
*/
|
|
16
18
|
export class PropertyService extends RestService {
|
|
17
19
|
constructor() {
|
|
18
20
|
super(...arguments);
|
|
19
21
|
this.modelClass = Property;
|
|
20
|
-
this.
|
|
22
|
+
this.collectionClass = PropertyCollection;
|
|
23
|
+
this.entityUrl = 'properties';
|
|
24
|
+
}
|
|
25
|
+
post(property) {
|
|
26
|
+
return super.post(property)
|
|
27
|
+
// @TODO Alex (TT-1777): handle this events and refactor
|
|
28
|
+
.pipe(map((updatedProperty) => {
|
|
29
|
+
if (property.documentFile) {
|
|
30
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_UPDATED_WITH_DOCUMENT, property));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_UPDATED, property));
|
|
34
|
+
}
|
|
35
|
+
return updatedProperty;
|
|
36
|
+
}));
|
|
21
37
|
}
|
|
22
38
|
listenEvents() {
|
|
39
|
+
this.cache;
|
|
23
40
|
this.listenShareInviteAccepted();
|
|
24
41
|
// @TODO Alex: consider to refactor property movements logic similar to client-movements
|
|
25
42
|
this.listenMovementsChanged();
|
|
@@ -48,39 +65,21 @@ export class PropertyService extends RestService {
|
|
|
48
65
|
this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_SALE_ADDED).subscribe((propertySale) => {
|
|
49
66
|
const propertyToReplace = this.cache.find((property) => property.myShare.id === propertySale.share.id);
|
|
50
67
|
propertyToReplace.myShare.sale = plainToClass(PropertySale, { id: propertySale.id });
|
|
51
|
-
|
|
52
|
-
this.updateCache();
|
|
68
|
+
this.updateCache([propertyToReplace], 'put');
|
|
53
69
|
});
|
|
54
70
|
}
|
|
55
71
|
listenSalesDeleted() {
|
|
56
72
|
this.eventDispatcherService.on(AppEventTypeEnum.PROPERTY_SALE_DELETED).subscribe((propertySale) => {
|
|
57
73
|
const propertyToReplace = this.cache.find((property) => property.myShare.id === propertySale.share.id);
|
|
58
74
|
propertyToReplace.myShare.sale = null;
|
|
59
|
-
|
|
60
|
-
this.updateCache();
|
|
75
|
+
this.updateCache([propertyToReplace], 'put');
|
|
61
76
|
});
|
|
62
77
|
}
|
|
63
|
-
update(property) {
|
|
64
|
-
return super.update(property).pipe(map((updatedProperty) => {
|
|
65
|
-
if (property.documentFile) {
|
|
66
|
-
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_UPDATED_WITH_DOCUMENT, property));
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_UPDATED, property));
|
|
70
|
-
}
|
|
71
|
-
return updatedProperty;
|
|
72
|
-
}));
|
|
73
|
-
}
|
|
74
78
|
updateDepreciationCalculation(property) {
|
|
75
79
|
const propertyToUpdate = plainToClass(Property, { id: property.id, depreciationCalculation: property.depreciationCalculation });
|
|
76
|
-
return this.
|
|
80
|
+
return this.post(propertyToUpdate)
|
|
81
|
+
.pipe(map((updatedProperty) => {
|
|
77
82
|
this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.PROPERTY_DEPRECIATION_CALCULATION_UPDATED, updatedProperty));
|
|
78
|
-
return updatedProperty;
|
|
79
|
-
}));
|
|
80
|
-
}
|
|
81
|
-
getByCategoryId(id) {
|
|
82
|
-
return this.get().pipe(map((properties) => {
|
|
83
|
-
return properties.filter((property) => property.category.id === id);
|
|
84
83
|
}));
|
|
85
84
|
}
|
|
86
85
|
/**
|
|
@@ -91,8 +90,7 @@ export class PropertyService extends RestService {
|
|
|
91
90
|
.pipe(map((propertySubscriptionBase) => {
|
|
92
91
|
const newPropertySubscription = plainToClass(PropertySubscription, propertySubscriptionBase);
|
|
93
92
|
const activatedProperty = plainToClass(Property, Object.assign({}, property, { subscriptions: [newPropertySubscription] }));
|
|
94
|
-
|
|
95
|
-
this.updateCache();
|
|
93
|
+
this.updateCache([activatedProperty], 'put');
|
|
96
94
|
}));
|
|
97
95
|
}
|
|
98
96
|
/**
|
|
@@ -102,8 +100,7 @@ export class PropertyService extends RestService {
|
|
|
102
100
|
return this.http.delete(`${this.environment.apiV2}/property-subscriptions/${property.getCurrentSubscription().id}`)
|
|
103
101
|
.pipe(map(() => {
|
|
104
102
|
const deactivatedProperty = plainToClass(Property, Object.assign({}, property, { subscriptions: [] }));
|
|
105
|
-
|
|
106
|
-
this.updateCache();
|
|
103
|
+
this.updateCache([deactivatedProperty], 'put');
|
|
107
104
|
}));
|
|
108
105
|
}
|
|
109
106
|
/**
|
|
@@ -114,23 +111,9 @@ export class PropertyService extends RestService {
|
|
|
114
111
|
updatePhoto(property, photoFormData) {
|
|
115
112
|
return this.http.post(`${this.environment.apiV2}/properties/${property.id}/photo?_method=PUT`, photoFormData)
|
|
116
113
|
.pipe(map((photoLink) => {
|
|
117
|
-
property
|
|
118
|
-
// update properties cache
|
|
119
|
-
replace(this.cache, property);
|
|
120
|
-
this.updateCache();
|
|
121
|
-
}));
|
|
122
|
-
}
|
|
123
|
-
getByShareId(id) {
|
|
124
|
-
return this.get().pipe(map((properties) => {
|
|
125
|
-
return properties.filter((property) => property.user.id === id);
|
|
114
|
+
this.updateCache([plainToClass(Property, merge(property, { photo: photoLink }))], 'put');
|
|
126
115
|
}));
|
|
127
116
|
}
|
|
128
|
-
/**
|
|
129
|
-
* Get list of active user's properties
|
|
130
|
-
*/
|
|
131
|
-
getActive() {
|
|
132
|
-
return this.get().pipe(map((properties) => properties.filter((property) => property.isActive)));
|
|
133
|
-
}
|
|
134
117
|
}
|
|
135
118
|
PropertyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
136
119
|
PropertyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PropertyService, providedIn: 'root' });
|
|
@@ -140,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
|
|
|
140
123
|
providedIn: 'root'
|
|
141
124
|
}]
|
|
142
125
|
}] });
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3Byb3BlcnR5L3Byb3BlcnR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUV0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0RBQXNELENBQUM7O0FBRXBGOzs7R0FHRztBQUlILE1BQU0sT0FBTyxlQUFnQixTQUFRLFdBQW1DO0lBSHhFOztRQUlFLGVBQVUsR0FBb0IsUUFBUSxDQUFDO1FBQ3ZDLFFBQUcsR0FBVyxZQUFZLENBQUM7S0FxSjVCO0lBbkpDLFlBQVk7UUFDVixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQyx3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztP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LEdBQUcsQ0FBQyxDQUFDLFNBQWlCLEVBQVEsRUFBRTtZQUM5QixRQUFRLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUMzQiwwQkFBMEI7WUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDTixDQUFDO0lBRUQsWUFBWSxDQUFDLEVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUNwQixHQUFHLENBQUMsQ0FBQyxVQUFzQixFQUFjLEVBQUU7WUFDekMsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBa0IsRUFBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckYsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQ3BCLEdBQUcsQ0FBQyxDQUFDLFVBQXNCLEVBQWMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFrQixFQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDbkgsQ0FBQztJQUNKLENBQUM7OzZHQXRKVSxlQUFlO2lIQUFmLGVBQWUsY0FGZCxNQUFNOzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvcGVydHkgYXMgUHJvcGVydHlCYXNlIH0gZnJvbSAnLi4vLi4vLi4vZGIvTW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHJlcGxhY2UgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMvYXJyYXknO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgUHJvcGVydHlTdWJzY3JpcHRpb24gYXMgUHJvcGVydHlTdWJzY3JpcHRpb25CYXNlIH0gZnJvbSAnLi4vLi4vLi4vZGIvTW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5LXN1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uL3Jlc3QvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb3BlcnR5IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5JztcbmltcG9ydCB7IEFwcEV2ZW50VHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50LXR5cGUuZW51bSc7XG5pbXBvcnQgeyBBcHBFdmVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9ldmVudC9hcHAtZXZlbnQnO1xuaW1wb3J0IHsgUHJvcGVydHlTdWJzY3JpcHRpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcHJvcGVydHkvcHJvcGVydHktc3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IElFdmVudExpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9ldmVudC1saXN0ZW5lci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJvcGVydHlTYWxlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5LXNhbGUvcHJvcGVydHktc2FsZSc7XG5cbi8qKlxuICogQFRvZG8gQWxleCByZW1vdmUgZnVuY3Rpb25hbGl0eSByZWxhdGVkIHRvIFByb3BlcnR5U2hhcmVcbiAqIFNlcnZpY2UgZm9yIHdvcmsgd2l0aCBQcm9wZXJ0eVxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eVNlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxQcm9wZXJ0eUJhc2UsIFByb3BlcnR5PiBpbXBsZW1lbnRzIElFdmVudExpc3RlbmVyIHtcbiAgbW9kZWxDbGFzczogdHlwZW9mIFByb3BlcnR5ID0gUHJvcGVydHk7XG4gIHVybDogc3RyaW5nID0gJ3Byb3BlcnRpZXMnO1xuXG4gIGxpc3RlbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlblNoYXJlSW52aXRlQWNjZXB0ZWQoKTtcbiAgICAvLyBAVE9ETyBBbGV4OiBjb25zaWRlciB0byByZWZhY3RvciBwcm9wZXJ0eSBtb3ZlbWVudHMgbG9naWMgc2ltaWxhciB0byBjbGllbnQtbW92ZW1lbnRzXG4gICAgdGhpcy5saXN0ZW5Nb3ZlbWVudHNDaGFuZ2VkKCk7XG4gICAgdGhpcy5saXN0ZW5TYWxlc0FkZGVkKCk7XG4gICAgdGhpcy5saXN0ZW5TYWxlc0RlbGV0ZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY2FjaGUgd2hlbiBzaGFyZSBpbnZpdGF0aW9uIGFjY2VwdGVkXG4gICAqL1xuICBwcml2YXRlIGxpc3RlblNoYXJlSW52aXRlQWNjZXB0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uUFJPUEVSVFlfU0hBUkVfVVBEQVRFRCkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzZXRDYWNoZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY2FjaGUgd2hlbiBwcm9wZXJ0eSBjYXRlZ29yeSBjaGFuZ2VkXG4gICAqL1xuICBwcml2YXRlIGxpc3Rlbk1vdmVtZW50c0NoYW5nZWQoKTogdm9pZCB7XG4gICAgLy8gQFRPRE8gY2hhbmdlIGRpc3BhdGNoZXIgbG9naWMgdG8gd29yayB3aXRoIG11bHRpcGxlIGV2ZW50c1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLlBST1BFUlRZX01PVkVNRU5UX0NSRUFURUQpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2V0Q2FjaGUoKSk7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uUFJPUEVSVFlfTU9WRU1FTlRfVVBEQVRFRCkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzZXRDYWNoZSgpKTtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9NT1ZFTUVOVF9ERUxFVEVEKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNldENhY2hlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBUb2RvIEFsZXggcmVmYWN0b3IgYWZ0ZXIgUHJvcGVydHlTaGFyZSB3aWxsIGJlIGNsZWFyZWQgdXBcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuU2FsZXNBZGRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9TQUxFX0FEREVEKS5zdWJzY3JpYmUoKHByb3BlcnR5U2FsZTogUHJvcGVydHlTYWxlKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVRvUmVwbGFjZTogUHJvcGVydHkgPSB0aGlzLmNhY2hlLmZpbmQoKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4gcHJvcGVydHkubXlTaGFyZS5pZCA9PT0gcHJvcGVydHlTYWxlLnNoYXJlLmlkKTtcbiAgICAgIHByb3BlcnR5VG9SZXBsYWNlLm15U2hhcmUuc2FsZSA9IHBsYWluVG9DbGFzcyhQcm9wZXJ0eVNhbGUsIHtpZDogcHJvcGVydHlTYWxlLmlkfSk7XG5cbiAgICAgIHJlcGxhY2UodGhpcy5jYWNoZSwgcHJvcGVydHlUb1JlcGxhY2UpO1xuICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5TYWxlc0RlbGV0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uUFJPUEVSVFlfU0FMRV9ERUxFVEVEKS5zdWJzY3JpYmUoKHByb3BlcnR5U2FsZTogUHJvcGVydHlTYWxlKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVRvUmVwbGFjZTogUHJvcGVydHkgPSB0aGlzLmNhY2hlLmZpbmQoKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4gcHJvcGVydHkubXlTaGFyZS5pZCA9PT0gcHJvcGVydHlTYWxlLnNoYXJlLmlkKTtcbiAgICAgIHByb3BlcnR5VG9SZXBsYWNlLm15U2hhcmUuc2FsZSA9IG51bGw7XG5cbiAgICAgIHJlcGxhY2UodGhpcy5jYWNoZSwgcHJvcGVydHlUb1JlcGxhY2UpO1xuICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgIH0pO1xuICB9XG5cblxuICB1cGRhdGUocHJvcGVydHk6IFByb3BlcnR5KTogT2JzZXJ2YWJsZTxQcm9wZXJ0eT4ge1xuICAgIHJldHVybiBzdXBlci51cGRhdGUocHJvcGVydHkpLnBpcGUoXG4gICAgICBtYXAoKHVwZGF0ZWRQcm9wZXJ0eTogUHJvcGVydHkpOiBQcm9wZXJ0eSA9PiB7XG4gICAgICAgIGlmIChwcm9wZXJ0eS5kb2N1bWVudEZpbGUpIHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uUFJPUEVSVFlfVVBEQVRFRF9XSVRIX0RPQ1VNRU5ULCBwcm9wZXJ0eSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9VUERBVEVELCBwcm9wZXJ0eSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRQcm9wZXJ0eTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZURlcHJlY2lhdGlvbkNhbGN1bGF0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eSk6IE9ic2VydmFibGU8UHJvcGVydHk+IHtcbiAgICBjb25zdCBwcm9wZXJ0eVRvVXBkYXRlOiBQcm9wZXJ0eSA9IHBsYWluVG9DbGFzcyhQcm9wZXJ0eSwge2lkOiBwcm9wZXJ0eS5pZCwgZGVwcmVjaWF0aW9uQ2FsY3VsYXRpb246IHByb3BlcnR5LmRlcHJlY2lhdGlvbkNhbGN1bGF0aW9ufSlcblxuICAgIHJldHVybiB0aGlzLnVwZGF0ZShwcm9wZXJ0eVRvVXBkYXRlKS5waXBlKFxuICAgICAgbWFwKCh1cGRhdGVkUHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG4gICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9ERVBSRUNJQVRJT05fQ0FMQ1VMQVRJT05fVVBEQVRFRCwgdXBkYXRlZFByb3BlcnR5KSk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRQcm9wZXJ0eTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldEJ5Q2F0ZWdvcnlJZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxQcm9wZXJ0eVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCkucGlwZShcbiAgICAgIG1hcCgocHJvcGVydGllczogUHJvcGVydHlbXSk6IFByb3BlcnR5W10gPT4ge1xuICAgICAgICByZXR1cm4gcHJvcGVydGllcy5maWx0ZXIoKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gPT4gcHJvcGVydHkuY2F0ZWdvcnkuaWQgPT09IGlkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBkZWFjdGl2YXRlZCBwcm9wZXJ0eVxuICAgKi9cbiAgYWN0aXZhdGUocHJvcGVydHk6IFByb3BlcnR5KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3Byb3BlcnR5LXN1YnNjcmlwdGlvbnNgLCB7cHJvcGVydHl9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocHJvcGVydHlTdWJzY3JpcHRpb25CYXNlOiBQcm9wZXJ0eVN1YnNjcmlwdGlvbkJhc2UpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdQcm9wZXJ0eVN1YnNjcmlwdGlvbjogUHJvcGVydHlTdWJzY3JpcHRpb24gPSBwbGFpblRvQ2xhc3MoUHJvcGVydHlTdWJzY3JpcHRpb24sIHByb3BlcnR5U3Vic2NyaXB0aW9uQmFzZSk7XG4gICAgICAgICAgY29uc3QgYWN0aXZhdGVkUHJvcGVydHk6IFByb3BlcnR5ID0gcGxhaW5Ub0NsYXNzKFByb3BlcnR5LCBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0eSwge3N1YnNjcmlwdGlvbnM6IFtuZXdQcm9wZXJ0eVN1YnNjcmlwdGlvbl19KSk7XG5cbiAgICAgICAgICByZXBsYWNlKHRoaXMuY2FjaGUsIGFjdGl2YXRlZFByb3BlcnR5KTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGUgYWN0aXZhdGVkIHByb3BlcnR5XG4gICAqL1xuICBkZWFjdGl2YXRlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3Byb3BlcnR5LXN1YnNjcmlwdGlvbnMvJHtwcm9wZXJ0eS5nZXRDdXJyZW50U3Vic2NyaXB0aW9uKCkuaWR9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlYWN0aXZhdGVkUHJvcGVydHk6IFByb3BlcnR5ID0gcGxhaW5Ub0NsYXNzKFByb3BlcnR5LCBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0eSwge3N1YnNjcmlwdGlvbnM6IFtdfSkpO1xuXG4gICAgICAgICAgcmVwbGFjZSh0aGlzLmNhY2hlLCBkZWFjdGl2YXRlZFByb3BlcnR5KTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBwcm9wZXJ0eSBwaG90b1xuICAgKiBAcGFyYW0gcHJvcGVydHkgUHJvcGVydHkgaW5zdGFuY2UgZm9yIHBob3RvIHVwZGF0ZVxuICAgKiBAcGFyYW0gcGhvdG9Gb3JtRGF0YSBGb3JtRGF0YSB3aXRoIHByb3BlcnR5IHBob3RvIGltYWdlXG4gICAqL1xuICB1cGRhdGVQaG90byhwcm9wZXJ0eTogUHJvcGVydHksIHBob3RvRm9ybURhdGE6IEZvcm1EYXRhKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3Byb3BlcnRpZXMvJHtwcm9wZXJ0eS5pZH0vcGhvdG8/X21ldGhvZD1QVVRgLCBwaG90b0Zvcm1EYXRhKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocGhvdG9MaW5rOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgICBwcm9wZXJ0eS5waG90byA9IHBob3RvTGluaztcbiAgICAgICAgICAvLyB1cGRhdGUgcHJvcGVydGllcyBjYWNoZVxuICAgICAgICAgIHJlcGxhY2UodGhpcy5jYWNoZSwgcHJvcGVydHkpO1xuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBnZXRCeVNoYXJlSWQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8UHJvcGVydHlbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldCgpLnBpcGUoXG4gICAgICBtYXAoKHByb3BlcnRpZXM6IFByb3BlcnR5W10pOiBQcm9wZXJ0eVtdID0+IHtcbiAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMuZmlsdGVyKChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuID0+IHByb3BlcnR5LnVzZXIuaWQgPT09IGlkKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGlzdCBvZiBhY3RpdmUgdXNlcidzIHByb3BlcnRpZXNcbiAgICovXG4gIGdldEFjdGl2ZSgpOiBPYnNlcnZhYmxlPFByb3BlcnR5W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXQoKS5waXBlKFxuICAgICAgbWFwKChwcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdKTogUHJvcGVydHlbXSA9PiBwcm9wZXJ0aWVzLmZpbHRlcigocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiA9PiBwcm9wZXJ0eS5pc0FjdGl2ZSkpXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3Byb3BlcnR5L3Byb3BlcnR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUV0RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDcEYsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRTFEOzs7O0dBSUc7QUFJSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxXQUF1RDtJQUg1Rjs7UUFJRSxlQUFVLEdBQW9CLFFBQVEsQ0FBQztRQUN2QyxvQkFBZSxHQUE4QixrQkFBa0IsQ0FBQztRQUNoRSxjQUFTLEdBQVcsWUFBWSxDQUFDO0tBc0hsQztJQXBIQyxJQUFJLENBQUMsUUFBa0I7UUFDckIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN6Qix3REFBd0Q7YUFDdkQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLGVB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ZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcm9wZXJ0eSBhcyBQcm9wZXJ0eUJhc2UgfSBmcm9tICcuLi8uLi8uLi9kYi9Nb2RlbHMvcHJvcGVydHkvcHJvcGVydHknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzIH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgUHJvcGVydHlTdWJzY3JpcHRpb24gYXMgUHJvcGVydHlTdWJzY3JpcHRpb25CYXNlIH0gZnJvbSAnLi4vLi4vLi4vZGIvTW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5LXN1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9wcm9wZXJ0eS9wcm9wZXJ0eSc7XG5pbXBvcnQgeyBBcHBFdmVudFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHsgUHJvcGVydHlTdWJzY3JpcHRpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcHJvcGVydHkvcHJvcGVydHktc3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IElFdmVudExpc3RlbmVyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9ldmVudC1saXN0ZW5lci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJvcGVydHlTYWxlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Byb3BlcnR5L3Byb3BlcnR5LXNhbGUvcHJvcGVydHktc2FsZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnbG9kYXNoL21lcmdlJztcbmltcG9ydCB7IEFwcEV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudCc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uL3Jlc3QvcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFByb3BlcnR5Q29sbGVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvbGxlY3Rpb25zJztcblxuLyoqXG4gKiBAVG9kbyBBbGV4IHJlbW92ZSBmdW5jdGlvbmFsaXR5IHJlbGF0ZWQgdG8gUHJvcGVydHlTaGFyZVxuICogQFRPRE8gQWxleCAoVFQtMTc3Nyk6IHJlcGxhY2UgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHRoZSBuZXcgdGhpcy5saXN0ZW4oKVxuICogU2VydmljZSBmb3Igd29yayB3aXRoIFByb3BlcnR5XG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb3BlcnR5U2VydmljZSBleHRlbmRzIFJlc3RTZXJ2aWNlPFByb3BlcnR5QmFzZSwgUHJvcGVydHksIFByb3BlcnR5Q29sbGVjdGlvbj4gaW1wbGVtZW50cyBJRXZlbnRMaXN0ZW5lciB7XG4gIG1vZGVsQ2xhc3M6IHR5cGVvZiBQcm9wZXJ0eSA9IFByb3BlcnR5O1xuICBjb2xsZWN0aW9uQ2xhc3M6IHR5cGVvZiBQcm9wZXJ0eUNvbGxlY3Rpb24gPSBQcm9wZXJ0eUNvbGxlY3Rpb247XG4gIGVudGl0eVVybDogc3RyaW5nID0gJ3Byb3BlcnRpZXMnO1xuXG4gIHBvc3QocHJvcGVydHk6IFByb3BlcnR5KTogT2JzZXJ2YWJsZTxQcm9wZXJ0eT4ge1xuICAgIHJldHVybiBzdXBlci5wb3N0KHByb3BlcnR5KVxuICAgICAgLy8gQFRPRE8gQWxleCAoVFQtMTc3Nyk6IGhhbmRsZSB0aGlzIGV2ZW50cyBhbmQgcmVmYWN0b3JcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHVwZGF0ZWRQcm9wZXJ0eTogUHJvcGVydHkpOiBQcm9wZXJ0eSA9PiB7XG4gICAgICAgICAgaWYgKHByb3BlcnR5LmRvY3VtZW50RmlsZSkge1xuICAgICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLlBST1BFUlRZX1VQREFURURfV0lUSF9ET0NVTUVOVCwgcHJvcGVydHkpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLmRpc3BhdGNoKG5ldyBBcHBFdmVudChBcHBFdmVudFR5cGVFbnVtLlBST1BFUlRZX1VQREFURUQsIHByb3BlcnR5KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVwZGF0ZWRQcm9wZXJ0eTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBsaXN0ZW5FdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZTtcbiAgICB0aGlzLmxpc3RlblNoYXJlSW52aXRlQWNjZXB0ZWQoKTtcbiAgICAvLyBAVE9ETyBBbGV4OiBjb25zaWRlciB0byByZWZhY3RvciBwcm9wZXJ0eSBtb3ZlbWVudHMgbG9naWMgc2ltaWxhciB0byBjbGllbnQtbW92ZW1lbnRzXG4gICAgdGhpcy5saXN0ZW5Nb3ZlbWVudHNDaGFuZ2VkKCk7XG4gICAgdGhpcy5saXN0ZW5TYWxlc0FkZGVkKCk7XG4gICAgdGhpcy5saXN0ZW5TYWxlc0RlbGV0ZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY2FjaGUgd2hlbiBzaGFyZSBpbnZpdGF0aW9uIGFjY2VwdGVkXG4gICAqL1xuICBwcml2YXRlIGxpc3RlblNoYXJlSW52aXRlQWNjZXB0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uUFJPUEVSVFlfU0hBUkVfVVBEQVRFRCkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzZXRDYWNoZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY2FjaGUgd2hlbiBwcm9wZXJ0eSBjYXRlZ29yeSBjaGFuZ2VkXG4gICAqL1xuICBwcml2YXRlIGxpc3Rlbk1vdmVtZW50c0NoYW5nZWQoKTogdm9pZCB7XG4gICAgLy8gQFRPRE8gY2hhbmdlIGRpc3BhdGNoZXIgbG9naWMgdG8gd29yayB3aXRoIG11bHRpcGxlIGV2ZW50c1xuICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5vbihBcHBFdmVudFR5cGVFbnVtLlBST1BFUlRZX01PVkVNRU5UX0NSRUFURUQpLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2V0Q2FjaGUoKSk7XG4gICAgdGhpcy5ldmVudERpc3BhdGNoZXJTZXJ2aWNlLm9uKEFwcEV2ZW50VHlwZUVudW0uUFJPUEVSVFlfTU9WRU1FTlRfVVBEQVRFRCkuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzZXRDYWNoZSgpKTtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9NT1ZFTUVOVF9ERUxFVEVEKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNldENhY2hlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBUb2RvIEFsZXggcmVmYWN0b3IgYWZ0ZXIgUHJvcGVydHlTaGFyZSB3aWxsIGJlIGNsZWFyZWQgdXBcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuU2FsZXNBZGRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9TQUxFX0FEREVEKS5zdWJzY3JpYmUoKHByb3BlcnR5U2FsZTogUHJvcGVydHlTYWxlKSA9PiB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVRvUmVwbGFjZTogUHJvcGVydHkgPSB0aGlzLmNhY2hlLmZpbmQoKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4gcHJvcGVydHkubXlTaGFyZS5pZCA9PT0gcHJvcGVydHlTYWxlLnNoYXJlLmlkKTtcbiAgICAgIHByb3BlcnR5VG9SZXBsYWNlLm15U2hhcmUuc2FsZSA9IHBsYWluVG9DbGFzcyhQcm9wZXJ0eVNhbGUsIHsgaWQ6IHByb3BlcnR5U2FsZS5pZCB9KTtcblxuICAgICAgdGhpcy51cGRhdGVDYWNoZShbcHJvcGVydHlUb1JlcGxhY2VdLCAncHV0Jyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlblNhbGVzRGVsZXRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2Uub24oQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9TQUxFX0RFTEVURUQpLnN1YnNjcmliZSgocHJvcGVydHlTYWxlOiBQcm9wZXJ0eVNhbGUpID0+IHtcbiAgICAgIGNvbnN0IHByb3BlcnR5VG9SZXBsYWNlOiBQcm9wZXJ0eSA9IHRoaXMuY2FjaGUuZmluZCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiBwcm9wZXJ0eS5teVNoYXJlLmlkID09PSBwcm9wZXJ0eVNhbGUuc2hhcmUuaWQpO1xuICAgICAgcHJvcGVydHlUb1JlcGxhY2UubXlTaGFyZS5zYWxlID0gbnVsbDtcblxuICAgICAgdGhpcy51cGRhdGVDYWNoZShbcHJvcGVydHlUb1JlcGxhY2VdLCAncHV0Jyk7XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVEZXByZWNpYXRpb25DYWxjdWxhdGlvbihwcm9wZXJ0eTogUHJvcGVydHkpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBwcm9wZXJ0eVRvVXBkYXRlOiBQcm9wZXJ0eSA9IHBsYWluVG9DbGFzcyhQcm9wZXJ0eSwgeyBpZDogcHJvcGVydHkuaWQsIGRlcHJlY2lhdGlvbkNhbGN1bGF0aW9uOiBwcm9wZXJ0eS5kZXByZWNpYXRpb25DYWxjdWxhdGlvbiB9KVxuXG4gICAgcmV0dXJuIHRoaXMucG9zdChwcm9wZXJ0eVRvVXBkYXRlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgodXBkYXRlZFByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyU2VydmljZS5kaXNwYXRjaChuZXcgQXBwRXZlbnQoQXBwRXZlbnRUeXBlRW51bS5QUk9QRVJUWV9ERVBSRUNJQVRJT05fQ0FMQ1VMQVRJT05fVVBEQVRFRCwgdXBkYXRlZFByb3BlcnR5KSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIGRlYWN0aXZhdGVkIHByb3BlcnR5XG4gICAqL1xuICBhY3RpdmF0ZShwcm9wZXJ0eTogUHJvcGVydHkpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vcHJvcGVydHktc3Vic2NyaXB0aW9uc2AsIHsgcHJvcGVydHkgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHByb3BlcnR5U3Vic2NyaXB0aW9uQmFzZTogUHJvcGVydHlTdWJzY3JpcHRpb25CYXNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3UHJvcGVydHlTdWJzY3JpcHRpb246IFByb3BlcnR5U3Vic2NyaXB0aW9uID0gcGxhaW5Ub0NsYXNzKFByb3BlcnR5U3Vic2NyaXB0aW9uLCBwcm9wZXJ0eVN1YnNjcmlwdGlvbkJhc2UpO1xuICAgICAgICAgIGNvbnN0IGFjdGl2YXRlZFByb3BlcnR5OiBQcm9wZXJ0eSA9IHBsYWluVG9DbGFzcyhQcm9wZXJ0eSwgT2JqZWN0LmFzc2lnbih7fSwgcHJvcGVydHksIHsgc3Vic2NyaXB0aW9uczogW25ld1Byb3BlcnR5U3Vic2NyaXB0aW9uXSB9KSk7XG5cbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKFthY3RpdmF0ZWRQcm9wZXJ0eV0sICdwdXQnKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZSBhY3RpdmF0ZWQgcHJvcGVydHlcbiAgICovXG4gIGRlYWN0aXZhdGUocHJvcGVydHk6IFByb3BlcnR5KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vcHJvcGVydHktc3Vic2NyaXB0aW9ucy8ke3Byb3BlcnR5LmdldEN1cnJlbnRTdWJzY3JpcHRpb24oKS5pZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGVhY3RpdmF0ZWRQcm9wZXJ0eTogUHJvcGVydHkgPSBwbGFpblRvQ2xhc3MoUHJvcGVydHksIE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnR5LCB7IHN1YnNjcmlwdGlvbnM6IFtdIH0pKTtcblxuICAgICAgICAgIHRoaXMudXBkYXRlQ2FjaGUoW2RlYWN0aXZhdGVkUHJvcGVydHldLCAncHV0Jyk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBwcm9wZXJ0eSBwaG90b1xuICAgKiBAcGFyYW0gcHJvcGVydHkgUHJvcGVydHkgaW5zdGFuY2UgZm9yIHBob3RvIHVwZGF0ZVxuICAgKiBAcGFyYW0gcGhvdG9Gb3JtRGF0YSBGb3JtRGF0YSB3aXRoIHByb3BlcnR5IHBob3RvIGltYWdlXG4gICAqL1xuICB1cGRhdGVQaG90byhwcm9wZXJ0eTogUHJvcGVydHksIHBob3RvRm9ybURhdGE6IEZvcm1EYXRhKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3Byb3BlcnRpZXMvJHtwcm9wZXJ0eS5pZH0vcGhvdG8/X21ldGhvZD1QVVRgLCBwaG90b0Zvcm1EYXRhKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocGhvdG9MaW5rOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhY2hlKFtwbGFpblRvQ2xhc3MoUHJvcGVydHksIG1lcmdlKHByb3BlcnR5LCB7IHBob3RvOiBwaG90b0xpbmsgfSkpXSwgJ3B1dCcpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1tZXRob2QudHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R0LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9odHRwL3Jlc3QvaHR0cC1tZXRob2QudHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlY2xhcmUgdHlwZSBIdHRwTWV0aG9kID0gJ2dldCcgfCAncG9zdCcgfCAncHV0JyB8ICdkZWxldGUnO1xuIl19
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export * from './rest.service';
|
|
2
|
-
|
|
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.15", 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.15", ngImport: i0, type: RestService, providedIn: 'root' });
|
|
216
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", 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
|