@infrab4a/connect-angular 3.9.0-beta.7 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/angular-connect.module.d.ts +19 -19
- package/angular-elastic-search.module.d.ts +9 -9
- package/angular-firebase-auth.module.d.ts +10 -10
- package/angular-firestore.module.d.ts +15 -15
- package/angular-hasura-graphql.module.d.ts +16 -16
- package/bundles/infrab4a-connect-angular.umd.js +2142 -2140
- package/bundles/infrab4a-connect-angular.umd.js.map +1 -1
- package/consts/backend-url.const.d.ts +1 -1
- package/consts/default-shop.const.d.ts +1 -1
- package/consts/es-config.const.d.ts +1 -1
- package/consts/hasura-options.const.d.ts +1 -1
- package/consts/index.d.ts +4 -4
- package/esm2015/angular-connect.module.js +52 -52
- package/esm2015/angular-elastic-search.module.js +34 -34
- package/esm2015/angular-firebase-auth.module.js +113 -113
- package/esm2015/angular-firestore.module.js +394 -394
- package/esm2015/angular-hasura-graphql.module.js +156 -156
- package/esm2015/consts/backend-url.const.js +1 -1
- package/esm2015/consts/default-shop.const.js +2 -2
- package/esm2015/consts/es-config.const.js +2 -2
- package/esm2015/consts/hasura-options.const.js +2 -2
- package/esm2015/consts/index.js +5 -5
- package/esm2015/index.js +6 -6
- package/esm2015/infrab4a-connect-angular.js +4 -4
- package/esm2015/services/auth.service.js +42 -42
- package/esm2015/services/cart.service.js +261 -259
- package/esm2015/services/checkout-subscription.service.js +53 -53
- package/esm2015/services/checkout.service.js +75 -75
- package/esm2015/services/coupon.service.js +249 -249
- package/esm2015/services/errors/group-invalid-coupon.error.js +8 -8
- package/esm2015/services/errors/index.js +3 -3
- package/esm2015/services/errors/invalid-coupon.error.js +8 -8
- package/esm2015/services/home-shop.service.js +116 -116
- package/esm2015/services/index.js +9 -9
- package/esm2015/services/order.service.js +32 -32
- package/esm2015/services/shipping.service.js +98 -98
- package/esm2015/services/types/index.js +3 -3
- package/esm2015/services/types/required-checkout-data.type.js +2 -2
- package/esm2015/services/types/required-checkout-subscription-data.type.js +2 -2
- package/esm2015/services/types/shipping-methods.type.js +2 -2
- package/fesm2015/infrab4a-connect-angular.js +1561 -1559
- package/fesm2015/infrab4a-connect-angular.js.map +1 -1
- package/index.d.ts +5 -5
- package/infrab4a-connect-angular.d.ts +5 -5
- package/package.json +2 -2
- package/services/auth.service.d.ts +19 -19
- package/services/cart.service.d.ts +40 -40
- package/services/checkout-subscription.service.d.ts +18 -18
- package/services/checkout.service.d.ts +23 -23
- package/services/coupon.service.d.ts +25 -25
- package/services/errors/group-invalid-coupon.error.d.ts +6 -6
- package/services/errors/index.d.ts +2 -2
- package/services/errors/invalid-coupon.error.d.ts +5 -5
- package/services/home-shop.service.d.ts +25 -25
- package/services/index.d.ts +8 -8
- package/services/order.service.d.ts +13 -13
- package/services/shipping.service.d.ts +19 -19
- package/services/types/index.d.ts +2 -2
- package/services/types/required-checkout-data.type.d.ts +2 -2
- package/services/types/required-checkout-subscription-data.type.d.ts +2 -2
- package/services/types/shipping-methods.type.d.ts +12 -12
|
@@ -1,259 +1,261 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Inject, Injectable } from '@angular/core';
|
|
3
|
-
import { Buy2WinFirestoreRepository, Checkout, LineItem, NotFoundError, Shops, Where, isNil, } from '@infrab4a/connect';
|
|
4
|
-
import { Subject, from, iif, of } from 'rxjs';
|
|
5
|
-
import { catchError, concatMap, map, mergeMap, tap } from 'rxjs/operators';
|
|
6
|
-
import { DEFAULT_SHOP } from '../consts';
|
|
7
|
-
import { AuthService } from './auth.service';
|
|
8
|
-
import { CheckoutService } from './checkout.service';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "./auth.service";
|
|
11
|
-
import * as i2 from "./checkout.service";
|
|
12
|
-
import * as i3 from "@infrab4a/connect";
|
|
13
|
-
export class CartService {
|
|
14
|
-
constructor(authService, checkoutService, defaultShop, productRepository, variantRepository, buy2WinRepository) {
|
|
15
|
-
this.authService = authService;
|
|
16
|
-
this.checkoutService = checkoutService;
|
|
17
|
-
this.defaultShop = defaultShop;
|
|
18
|
-
this.productRepository = productRepository;
|
|
19
|
-
this.variantRepository = variantRepository;
|
|
20
|
-
this.buy2WinRepository = buy2WinRepository;
|
|
21
|
-
this.cartSubject = new Subject();
|
|
22
|
-
this.updateLineItemInCart = (lineItem, quantity, checkout) => (isNil(checkout) ? this.checkoutService.getCheckout() : of(checkout)).pipe(concatMap((checkoutLoaded) => {
|
|
23
|
-
var _a;
|
|
24
|
-
const items = [];
|
|
25
|
-
const index = (_a = checkoutLoaded.lineItems) === null || _a === void 0 ? void 0 : _a.map((checkoutItem) => checkoutItem.id).indexOf(lineItem.id);
|
|
26
|
-
if (index > -1) {
|
|
27
|
-
checkoutLoaded.lineItems[index].quantity += quantity;
|
|
28
|
-
checkoutLoaded.lineItems[index].pricePaid = lineItem.pricePaid;
|
|
29
|
-
}
|
|
30
|
-
else
|
|
31
|
-
checkoutLoaded.lineItems = items.concat(checkoutLoaded.lineItems ? checkoutLoaded.lineItems.concat([lineItem]) : [lineItem]);
|
|
32
|
-
return this.checkoutService
|
|
33
|
-
.updateCheckoutLineItems(checkoutLoaded)
|
|
34
|
-
.pipe(map((updatedCheckout) => this.generateCartObject(updatedCheckout.lineItems)));
|
|
35
|
-
}));
|
|
36
|
-
this.generateCartObject = (items) => items
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
if (campaign.
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
i0.ɵɵ
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFFTCwwQkFBMEIsRUFDMUIsUUFBUSxFQUNSLFFBQVEsRUFDUixhQUFhLEVBR2IsS0FBSyxFQUlMLEtBQUssRUFDTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQWMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFBOzs7OztBQVFwRCxNQUFNLE9BQU8sV0FBVztJQUd0QixZQUNtQixXQUF3QixFQUN4QixlQUFnQyxFQUNWLFdBQWtCLEVBQ1gsaUJBQW9DLEVBQ3BDLGlCQUFvQyxFQUNwQyxpQkFBNkM7UUFMMUUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ1YsZ0JBQVcsR0FBWCxXQUFXLENBQU87UUFDWCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE0QjtRQVJyRixnQkFBVyxHQUFrQixJQUFJLE9B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QUFDO2dCQUNaLFFBQVEsRUFBRSxDQUFDO2dCQUNYLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOzt5R0FuVlUsV0FBVyw0RUFNWixZQUFZLGFBQ1osbUJBQW1CLGFBQ25CLG1CQUFtQixhQUNuQixtQkFBbUI7NkdBVGxCLFdBQVc7NEZBQVgsV0FBVztrQkFEdkIsVUFBVTs7MEJBT04sTUFBTTsyQkFBQyxZQUFZOzswQkFDbkIsTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtcclxuICBCdXkyV2luLFxyXG4gIEJ1eTJXaW5GaXJlc3RvcmVSZXBvc2l0b3J5LFxyXG4gIENoZWNrb3V0LFxyXG4gIExpbmVJdGVtLFxyXG4gIE5vdEZvdW5kRXJyb3IsXHJcbiAgUHJvZHVjdCxcclxuICBQcm9kdWN0UmVwb3NpdG9yeSxcclxuICBTaG9wcyxcclxuICBVc2VyLFxyXG4gIFZhcmlhbnQsXHJcbiAgVmFyaWFudFJlcG9zaXRvcnksXHJcbiAgV2hlcmUsXHJcbiAgaXNOaWwsXHJcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZyb20sIGlpZiwgb2YgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5cclxuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vY29uc3RzJ1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSdcclxuaW1wb3J0IHsgQ2hlY2tvdXRTZXJ2aWNlIH0gZnJvbSAnLi9jaGVja291dC5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBSZXF1aXJlZENoZWNrb3V0RGF0YSB9IGZyb20gJy4vdHlwZXMnXHJcblxyXG5leHBvcnQgdHlwZSBDYXJ0ID0ge1xyXG4gIFtpZDogc3RyaW5nXTogTGluZUl0ZW1cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ2FydFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgY2FydFN1YmplY3Q6IFN1YmplY3Q8Q2FydD4gPSBuZXcgU3ViamVjdCgpXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoZWNrb3V0U2VydmljZTogQ2hlY2tvdXRTZXJ2aWNlLFxyXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNob3A6IFNob3BzLFxyXG4gICAgQEluamVjdCgnUHJvZHVjdFJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y3RSZXBvc2l0b3J5OiBQcm9kdWN0UmVwb3NpdG9yeSxcclxuICAgIEBJbmplY3QoJ1ZhcmlhbnRSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSB2YXJpYW50UmVwb3NpdG9yeTogVmFyaWFudFJlcG9zaXRvcnksXHJcbiAgICBASW5qZWN0KCdCdXkyV2luUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgYnV5MldpblJlcG9zaXRvcnk6IEJ1eTJXaW5GaXJlc3RvcmVSZXBvc2l0b3J5LFxyXG4gICkge31cclxuXHJcbiAgYWRkSXRlbShpdGVtOiBMaW5lSXRlbSwgcXVhbnRpdHk6IG51bWJlciA9IDEpOiBPYnNlcnZhYmxlPENhcnQ+IHtcclxuICAgIHJldHVybiBmcm9tKHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkpLnBpcGUoXHJcbiAgICAgIGNvbmNhdE1hcChhc3luYyAoY2hlY2tvdXQpID0+IGF3YWl0IHRoaXMuYnVpbGRMaW5lSXRlbSh7IGNoZWNrb3V0LCBpdGVtLCBxdWFudGl0eTogcXVhbnRpdHkgfHwgMSB9KSksXHJcbiAgICAgIG1lcmdlTWFwKCh7IGNoZWNrb3V0LCBsaW5lSXRlbSB9KSA9PiB0aGlzLnVwZGF0ZUxpbmVJdGVtSW5DYXJ0KGxpbmVJdGVtLCBxdWFudGl0eSB8fCAxLCBjaGVja291dCBhcyBDaGVja291dCkpLFxyXG4gICAgICB0YXAoKGNhcnQpID0+IHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KSksXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBkZWNyZWFzZUl0ZW0oaXRlbTogTGluZUl0ZW0pOiBPYnNlcnZhYmxlPENhcnQ+IHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dCgpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHtcclxuICAgICAgICBjb25zdCBjaGVja291dEl0ZW0gPSBjaGVja291dC5saW5lSXRlbXM/LmZpbmQoKGxpbmVJdGVtKSA9PiBsaW5lSXRlbS5pZCA9PT0gaXRlbS5pZClcclxuXHJcbiAgICAgICAgaWYgKCFpc05pbChjaGVja291dEl0ZW0pKSBjaGVja291dEl0ZW0ucXVhbnRpdHkgLT0gY2hlY2tvdXRJdGVtLnF1YW50aXR5ID4gMSA/IDEgOiAwXHJcblxyXG4gICAgICAgIHJldHVybiBjaGVja291dFxyXG4gICAgICB9KSxcclxuICAgICAgY29uY2F0TWFwKChjaGVja291dCkgPT4gdGhpcy5jaGVja291dFNlcnZpY2UudXBkYXRlQ2hlY2tvdXRMaW5lSXRlbXMoY2hlY2tvdXQpKSxcclxuICAgICAgbWFwKChjaGVja291dCkgPT4gdGhpcy5nZW5lcmF0ZUNhcnRPYmplY3QoY2hlY2tvdXQubGluZUl0ZW1zKSksXHJcbiAgICAgIHRhcCgoY2FydCkgPT4gdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpKSxcclxuICAgIClcclxuICB9XHJcblxyXG4gIGdldENhcnQoY2hlY2tvdXQ/OiBSZXF1aXJlZENoZWNrb3V0RGF0YSk6IE9ic2VydmFibGU8Q2FydD4ge1xyXG4gICAgdGhpcy5idWlsZENhcnRGcm9tQ2hlY2tvdXQoY2hlY2tvdXQpLnN1YnNjcmliZSgoY2FydCkgPT4gdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpKVxyXG5cclxuICAgIHJldHVybiB0aGlzLmNhcnRTdWJqZWN0XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBUaGUgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZFxyXG4gICAqL1xyXG4gIGdldFZhcmlhbnRQcmljZURpc2NvdW50KGl0ZW06IExpbmVJdGVtKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXIoKS5waXBlKFxyXG4gICAgICBjb25jYXRNYXAoKHVzZXIpID0+XHJcbiAgICAgICAgaWlmKFxyXG4gICAgICAgICAgKCkgPT4gdXNlci5pc1N1YnNjcmliZXIgJiYgISFpdGVtLnByaWNlLnN1YnNjcmliZXJQcmljZSxcclxuICAgICAgICAgIG9mKGl0ZW0ucHJpY2Uuc3Vic2NyaWJlclByaWNlKSxcclxuICAgICAgICAgIG9mKGl0ZW0ucHJpY2UucHJpY2UpLFxyXG4gICAgICAgICksXHJcbiAgICAgICksXHJcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoaXRlbS5wcmljZS5wcmljZSkpLFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSXRlbShpdGVtOiBMaW5lSXRlbSk6IE9ic2VydmFibGU8Q2FydD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkucGlwZShcclxuICAgICAgbWFwKChjaGVja291dCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2hlY2tvdXQubGluZUl0ZW1zLmZpbmRJbmRleCgobGluZUl0ZW0pID0+IGxpbmVJdGVtLmlkID09PSBpdGVtLmlkKVxyXG5cclxuICAgICAgICBpZiAoaW5kZXggPj0gMCkgY2hlY2tvdXQubGluZUl0ZW1zLnNwbGljZShpbmRleCwgMSlcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoZWNrb3V0XHJcbiAgICAgIH0pLFxyXG4gICAgICBjb25jYXRNYXAoKGNoZWNrb3V0KSA9PiB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVDaGVja291dExpbmVJdGVtcyhjaGVja291dCkpLFxyXG4gICAgICBtYXAoKGNoZWNrb3V0KSA9PiB0aGlzLmdlbmVyYXRlQ2FydE9iamVjdChjaGVja291dC5saW5lSXRlbXMpKSxcclxuICAgICAgdGFwKChjYXJ0KSA9PiB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCkpLFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlVXNlckNhcnQodXNlcjogVXNlcik6IE9ic2VydmFibGU8Q2FydD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkucGlwZShcclxuICAgICAgY29uY2F0TWFwKChjaGVja291dCkgPT5cclxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVDaGVja291dFVzZXIoQ2hlY2tvdXQudG9JbnN0YW5jZSh7IC4uLmNoZWNrb3V0LnRvUGxhaW4oKSwgdXNlciB9KSksXHJcbiAgICAgICksXHJcbiAgICAgIGNvbmNhdE1hcChhc3luYyAoY2hlY2tvdXQpID0+XHJcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2VcclxuICAgICAgICAgIC51cGRhdGVDaGVja291dExpbmVJdGVtcyhcclxuICAgICAgICAgICAgQ2hlY2tvdXQudG9JbnN0YW5jZSh7XHJcbiAgICAgICAgICAgICAgLi4uY2hlY2tvdXQudG9QbGFpbigpLFxyXG4gICAgICAgICAgICAgIGxpbmVJdGVtczogY2hlY2tvdXQubGluZUl0ZW1zPy5sZW5ndGhcclxuICAgICAgICAgICAgICAgID8gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tvdXQubGluZUl0ZW1zPy5tYXAoYXN5bmMgKGl0ZW0pID0+IChhd2FpdCB0aGlzLmJ1aWxkTGluZUl0ZW0oeyBjaGVja291dCwgaXRlbSB9KSkubGluZUl0ZW0pLFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IFtdLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC50b1Byb21pc2UoKSxcclxuICAgICAgKSxcclxuICAgICAgbWFwKChjaGVja291dCkgPT4gdGhpcy5nZW5lcmF0ZUNhcnRPYmplY3QoY2hlY2tvdXQubGluZUl0ZW1zKSksXHJcbiAgICAgIHRhcCgoY2FydCkgPT4gdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpKSxcclxuICAgIClcclxuICB9XHJcblxyXG4gIGNsZWFyQ2FydCgpOiBPYnNlcnZhYmxlPENhcnQ+IHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dCgpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrb3V0U2VydmljZS5jbGVhckNoZWNrb3V0RnJvbVNlc3Npb24oKVxyXG4gICAgICAgIHJldHVybiBjaGVja291dFxyXG4gICAgICB9KSxcclxuICAgICAgY29uY2F0TWFwKChvbGRDaGVja291dCkgPT4gdGhpcy5idWlsZENhcnRGcm9tQ2hlY2tvdXQob2xkQ2hlY2tvdXQpKSxcclxuICAgICAgdGFwKChjYXJ0KSA9PiB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCkpLFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZENhcnRGcm9tQ2hlY2tvdXQoY2hlY2tvdXREYXRhPzogUmVxdWlyZWRDaGVja291dERhdGEpOiBPYnNlcnZhYmxlPENhcnQ+IHtcclxuICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dChjaGVja291dERhdGEpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IGNoZWNrb3V0LmxpbmVJdGVtcyksXHJcbiAgICAgIGNvbmNhdE1hcCgobGluZUl0ZW1zKSA9PiBvZih0aGlzLmdlbmVyYXRlQ2FydE9iamVjdChsaW5lSXRlbXMpKSksXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUxpbmVJdGVtSW5DYXJ0ID0gKGxpbmVJdGVtOiBMaW5lSXRlbSwgcXVhbnRpdHk6IG51bWJlciwgY2hlY2tvdXQ/OiBDaGVja291dCk6IE9ic2VydmFibGU8Q2FydD4gPT5cclxuICAgIChpc05pbChjaGVja291dCkgPyB0aGlzLmNoZWNrb3V0U2VydmljZS5nZXRDaGVja291dCgpIDogb2YoY2hlY2tvdXQpKS5waXBlKFxyXG4gICAgICBjb25jYXRNYXAoKGNoZWNrb3V0TG9hZGVkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbXM6IExpbmVJdGVtW10gPSBbXVxyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zPy5tYXAoKGNoZWNrb3V0SXRlbSkgPT4gY2hlY2tvdXRJdGVtLmlkKS5pbmRleE9mKGxpbmVJdGVtLmlkKVxyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zW2luZGV4XS5xdWFudGl0eSArPSBxdWFudGl0eVxyXG4gICAgICAgICAgY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zW2luZGV4XS5wcmljZVBhaWQgPSBsaW5lSXRlbS5wcmljZVBhaWRcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIGNoZWNrb3V0TG9hZGVkLmxpbmVJdGVtcyA9IGl0ZW1zLmNvbmNhdChcclxuICAgICAgICAgICAgY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zID8gY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zLmNvbmNhdChbbGluZUl0ZW1dKSA6IFtsaW5lSXRlbV0sXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZVxyXG4gICAgICAgICAgLnVwZGF0ZUNoZWNrb3V0TGluZUl0ZW1zKGNoZWNrb3V0TG9hZGVkKVxyXG4gICAgICAgICAgLnBpcGUobWFwKCh1cGRhdGVkQ2hlY2tvdXQpID0+IHRoaXMuZ2VuZXJhdGVDYXJ0T2JqZWN0KHVwZGF0ZWRDaGVja291dC5saW5lSXRlbXMpKSlcclxuICAgICAgfSksXHJcbiAgICApXHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVDYXJ0T2JqZWN0ID0gKGl0ZW1zOiBMaW5lSXRlbVtdKTogQ2FydCA9PlxyXG4gICAgaXRlbXMucmVkdWNlKFxyXG4gICAgICAoY2FydCwgaXRlbSkgPT4gKHtcclxuICAgICAgICAuLi5jYXJ0LFxyXG4gICAgICAgIFtpdGVtLmlkXTogTGluZUl0ZW0udG9JbnN0YW5jZSh7XHJcbiAgICAgICAgICAuLi4oY2FydFtpdGVtLmlkXSB8fCBpdGVtKSxcclxuICAgICAgICAgIHF1YW50aXR5OiAoY2FydFtpdGVtLmlkXT8ucXVhbnRpdHkgfHwgMCkgKyAoaXRlbS5xdWFudGl0eSA/IGl0ZW0ucXVhbnRpdHkgOiAxKSxcclxuICAgICAgICB9KSxcclxuICAgICAgfSksXHJcbiAgICAgIHt9LFxyXG4gICAgKVxyXG5cclxuICBwcml2YXRlIGJ1aWxkTGluZUl0ZW0gPSBhc3luYyAoe1xyXG4gICAgY2hlY2tvdXQsXHJcbiAgICBpdGVtLFxyXG4gICAgcXVhbnRpdHksXHJcbiAgfToge1xyXG4gICAgY2hlY2tvdXQ6IFJlcXVpcmVkQ2hlY2tvdXREYXRhXHJcbiAgICBpdGVtOiBMaW5lSXRlbVxyXG4gICAgcXVhbnRpdHk/OiBudW1iZXJcclxuICB9KTogUHJvbWlzZTx7IGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0PjsgbGluZUl0ZW06IExpbmVJdGVtIH0+ID0+IHtcclxuICAgIGNvbnN0IHByb2R1Y3QgPSBhd2FpdCB0aGlzLmdldFByb2R1Y3REYXRhKGl0ZW0uaWQpXHJcblxyXG4gICAgaXRlbS5xdWFudGl0eSA9IGl0ZW0/LnF1YW50aXR5IHx8IGNoZWNrb3V0Py5saW5lSXRlbXM/LmZpbmQoKGxpbmVJdGVtKSA9PiBsaW5lSXRlbS5pZCA9PT0gaXRlbS5pZCk/LnF1YW50aXR5IHx8IDBcclxuXHJcbiAgICBpZiAodGhpcy5jaGVja01heFN0b2NrKGl0ZW0sIHF1YW50aXR5IHx8IDApKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rlc2N1bHBlISBUZW1vcyBhcGVuYXMgJyArIGl0ZW0uc3RvY2s/LnF1YW50aXR5ICsgJyBlbSBlc3RvcXVlLicpXHJcblxyXG4gICAgY29uc3QgaW1hZ2UgPSBpdGVtLmltYWdlIHx8IGl0ZW0uaW1hZ2VzPy5zaGlmdCgpXHJcbiAgICBjb25zdCB7IGlkLCBuYW1lLCBFQU4sIHNsdWcsIHN0b2NrLCBwcmljZSwgd2VpZ2h0LCBza3UsIHR5cGUgfSA9IGl0ZW1cclxuICAgIGNvbnN0IGlzR2lmdCA9IGl0ZW0uaXNHaWZ0IHx8IG51bGxcclxuICAgIGNvbnN0IHByaWNlUGFpZCA9IHRoaXMuZ2V0UHJvZHVjdFByaWNlKHtcclxuICAgICAgcHJvZHVjdDogaXRlbSxcclxuICAgICAgc2hvcDogY2hlY2tvdXQuc2hvcCB8fCB0aGlzLmRlZmF1bHRTaG9wLFxyXG4gICAgICBpc1N1YnNjcmliZXI6IGNoZWNrb3V0LnVzZXI/LmlzU3Vic2NyaWJlcixcclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY2hlY2tvdXQsXHJcbiAgICAgIGxpbmVJdGVtOiBMaW5lSXRlbS50b0luc3RhbmNlKHtcclxuICAgICAgICBpZCxcclxuICAgICAgICBuYW1lOiBuYW1lID8/IHByb2R1Y3QubmFtZSxcclxuICAgICAgICBFQU46IEVBTiA/PyBwcm9kdWN0LkVBTixcclxuICAgICAgICBicmFuZDogcHJvZHVjdC5icmFuZCxcclxuICAgICAgICBzbHVnOiBzbHVnID8/IHByb2R1Y3Quc2x1ZyxcclxuICAgICAgICBza3U6IHNrdSA/PyBwcm9kdWN0LnNrdSxcclxuICAgICAgICBzdG9jayxcclxuICAgICAgICBwcmljZSxcclxuICAgICAgICBpbWFnZSxcclxuICAgICAgICB3ZWlnaHQ6IHdlaWdodCA/PyBwcm9kdWN0LndlaWdodCxcclxuICAgICAgICBxdWFudGl0eTogKGl0ZW0ucXVhbnRpdHkgfHwgMCkgKyAocXVhbnRpdHkgfHwgMCksXHJcbiAgICAgICAgcHJpY2VQYWlkLFxyXG4gICAgICAgIGNhdGVnb3JpZXM6IHByb2R1Y3QuY2F0ZWdvcmllcyA/PyBbXSxcclxuICAgICAgICBpc0dpZnQ6IGlzR2lmdCA/PyBudWxsLFxyXG4gICAgICAgIGNvc3RQcmljZTogcHJvZHVjdC5jb3N0UHJpY2UgPz8gMCxcclxuICAgICAgICB0eXBlLFxyXG4gICAgICB9KSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0UHJvZHVjdERhdGEocHJvZHVjdElkOiBzdHJpbmcpOiBQcm9taXNlPFBhcnRpYWw8UHJvZHVjdD4+IHtcclxuICAgIGxldCBwcm9kdWN0OiBQcm9kdWN0XHJcbiAgICBsZXQgdmFyaWFudDogVmFyaWFudFxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHByb2R1Y3QgPSBhd2FpdCB0aGlzLnByb2R1Y3RSZXBvc2l0b3J5LmdldCh7IGlkOiBwcm9kdWN0SWQgfSlcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGlmICghKGVycm9yIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikpIHRocm93IGVycm9yXHJcblxyXG4gICAgICB2YXJpYW50ID0gYXdhaXQgdGhpcy52YXJpYW50UmVwb3NpdG9yeS5nZXQoeyBpZDogcHJvZHVjdElkIH0pXHJcbiAgICAgIHByb2R1Y3QgPSBhd2FpdCB0aGlzLnByb2R1Y3RSZXBvc2l0b3J5LmdldCh7IGlkOiB2YXJpYW50LnByb2R1Y3RJZCB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnByb2R1Y3QudG9QbGFpbigpLFxyXG4gICAgICAuLi4odmFyaWFudCAmJiB7IC4uLnZhcmlhbnQudG9QbGFpbigpIH0pLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQcm9kdWN0UHJpY2UgPSAoe1xyXG4gICAgcHJvZHVjdCxcclxuICAgIGlzU3Vic2NyaWJlcixcclxuICB9OiB7XHJcbiAgICBwcm9kdWN0OiBMaW5lSXRlbVxyXG4gICAgc2hvcDogU2hvcHNcclxuICAgIGlzU3Vic2NyaWJlcjogYm9vbGVhblxyXG4gIH0pOiBudW1iZXIgPT4ge1xyXG4gICAgY29uc3QgaW5mbyA9IHByb2R1Y3QucHJpY2VcclxuXHJcbiAgICBpZiAocHJvZHVjdC5pc0dpZnQpIHJldHVybiAwXHJcblxyXG4gICAgcmV0dXJuIGlzU3Vic2NyaWJlciAmJiBpbmZvLnN1YnNjcmliZXJQcmljZSA+IDAgPyBpbmZvLnN1YnNjcmliZXJQcmljZSA6IGluZm8ucHJpY2VcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tNYXhTdG9jayA9IChpdGVtOiBMaW5lSXRlbSwgcXVhbnRpdHk6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgbWF4U3RvY2sgPSBpdGVtLnN0b2NrPy5xdWFudGl0eSB8fCAwXHJcbiAgICBjb25zdCBjdXJyZW50SXRlbUFtb3VudCA9IGl0ZW0ucXVhbnRpdHkgfHwgMFxyXG5cclxuICAgIHJldHVybiBjdXJyZW50SXRlbUFtb3VudCArIHF1YW50aXR5ID4gbWF4U3RvY2tcclxuICB9XHJcblxyXG4gIGdldEdpZnRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoYXN5bmMgKGNoZWNrb3V0KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgbm90R2lmdEl0ZW1zOiBMaW5lSXRlbVtdID0gY2hlY2tvdXQubGluZUl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaXNHaWZ0KVxyXG5cclxuICAgICAgICBpZiAoIW5vdEdpZnRJdGVtcy5sZW5ndGgpIHJldHVybiB7IC4uLmNoZWNrb3V0LCBsaW5lSXRlbXM6IFtdIH0gYXMgQ2hlY2tvdXRcclxuXHJcbiAgICAgICAgY29uc3QgY2FydFRvdGFsID0gbm90R2lmdEl0ZW1zLnJlZHVjZSgoYSwgYikgPT4gYSArIGIucHJpY2VQYWlkICogYi5xdWFudGl0eSwgMClcclxuXHJcbiAgICAgICAgY29uc3QgY2FtcGFpZ25zID0gYXdhaXQgdGhpcy5idXkyV2luUmVwb3NpdG9yeVxyXG4gICAgICAgICAgLmZpbmQoe1xyXG4gICAgICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICAgICAgYWN0aXZlOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgc2hvcDogeyBvcGVyYXRvcjogV2hlcmUuRVFVQUxTLCB2YWx1ZTogdGhpcy5kZWZhdWx0U2hvcCB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKChkYXRhKSA9PiBkYXRhLmRhdGEpXHJcblxyXG4gICAgICAgIGlmICghY2FtcGFpZ25zLmxlbmd0aCkgcmV0dXJuIHsgLi4uY2hlY2tvdXQsIGxpbmVJdGVtczogbm90R2lmdEl0ZW1zIH0gYXMgQ2hlY2tvdXRcclxuXHJcbiAgICAgICAgY29uc3QgZWxlZ2libGVDYW1wYWlnbnM6IEJ1eTJXaW5bXSA9IFtdXHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY2FtcGFpZ24gb2YgY2FtcGFpZ25zKSB7XHJcbiAgICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKClcclxuXHJcbiAgICAgICAgICBpZiAoIShjYW1wYWlnbi5zdGFydERhdGUgPD0gdG9kYXkpICYmICEoY2FtcGFpZ24uZW5kRGF0ZSA+PSB0b2RheSkpIGNvbnRpbnVlXHJcblxyXG4gICAgICAgICAgaWYgKGNhbXBhaWduLmFjdGl2ZUNhdGVnb3J5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXNDYW1wYWluZyA9IGNhbXBhaWduLmNhdGVnb3JpZXMubWFwKChjKSA9PiBjLmlkKVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyUHJvZHVjdHNDYXRlZ29yaWVzID0gY2hlY2tvdXQubGluZUl0ZW1zLmZpbHRlcigobCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghbC5jYXRlZ29yaWVzIHx8ICFsLmNhdGVnb3JpZXM/Lmxlbmd0aCkgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgICByZXR1cm4gbC5jYXRlZ29yaWVzLnNvbWUoKGMpID0+IGNhdGVnb3JpZXNDYW1wYWluZy5zb21lKChjYXQpID0+IGNhdCA9PSBjKSlcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXJQcm9kdWN0c0NhdGVnb3JpZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2FydFRvdGFsQ2F0ZWdvcmllcyA9IGZpbHRlclByb2R1Y3RzQ2F0ZWdvcmllcy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLnByaWNlUGFpZCAqIGIucXVhbnRpdHksIDApXHJcblxyXG4gICAgICAgICAgICAgIGlmIChjYXJ0VG90YWxDYXRlZ29yaWVzID49IGNhbXBhaWduLmNhcnRWYWx1ZU1pbikgZWxlZ2libGVDYW1wYWlnbnMucHVzaChjYW1wYWlnbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGNhbXBhaWduLmNhcnRWYWx1ZSAmJiBjYW1wYWlnbi5jYXJ0VmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGNhbXBhaWduLmNhcnRWYWx1ZSA8PSBjYXJ0VG90YWwpIGVsZWdpYmxlQ2FtcGFpZ25zLnB1c2goY2FtcGFpZ24pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZWxlZ2libGVDYW1wYWlnbnMubGVuZ3RoKSByZXR1cm4geyAuLi5jaGVja291dCwgbGluZUl0ZW1zOiBub3RHaWZ0SXRlbXMgfSBhcyBDaGVja291dFxyXG5cclxuICAgICAgICBjb25zdCBjYW1wYWluZ25Qcm9kdWN0czogUHJvZHVjdFtdW10gPSBbXVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNhbXBhaWduIG9mIGVsZWdpYmxlQ2FtcGFpZ25zKSB7XHJcbiAgICAgICAgICBsZXQgZWxlZ2libGVQcm9kdWN0cyA9IFtdXHJcblxyXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9kdWN0IG9mIGNhbXBhaWduLnByb2R1Y3RzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogcHJvZHVjdERhdGEgfSA9IGF3YWl0IHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZmluZCh7IGZpbHRlcnM6IHsgc2t1OiBwcm9kdWN0IH0gfSlcclxuXHJcbiAgICAgICAgICAgIGlmICghcHJvZHVjdERhdGEubGVuZ3RoKSBjb250aW51ZVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZ2lmdCA9IHByb2R1Y3REYXRhLnNoaWZ0KClcclxuXHJcbiAgICAgICAgICAgIGlmIChnaWZ0LnN0b2NrLnF1YW50aXR5IDwgMSkgY29udGludWVcclxuXHJcbiAgICAgICAgICAgIGVsZWdpYmxlUHJvZHVjdHMucHVzaChnaWZ0KVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNhbXBhaW5nblByb2R1Y3RzLnB1c2goZWxlZ2libGVQcm9kdWN0cylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY2FtcGFpbmduUHJvZHVjdHMubGVuZ3RoKSByZXR1cm4geyAuLi5jaGVja291dCwgbGluZUl0ZW1zOiBub3RHaWZ0SXRlbXMgfSBhcyBDaGVja291dFxyXG5cclxuICAgICAgICBjb25zdCBnaWZ0cyA9IHRoaXMuZ2lmdFRvTGluZUl0ZW1zKFtdLmNvbmNhdCguLi5jYW1wYWluZ25Qcm9kdWN0cykpXHJcblxyXG4gICAgICAgIHJldHVybiB7IC4uLmNoZWNrb3V0LCBsaW5lSXRlbXM6IG5vdEdpZnRJdGVtcy5jb25jYXQoZ2lmdHMpIH1cclxuICAgICAgfSksXHJcbiAgICAgIGNvbmNhdE1hcCgoY2hlY2tvdXQpID0+IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLnVwZGF0ZUNoZWNrb3V0TGluZUl0ZW1zKGNoZWNrb3V0KSksXHJcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHRoaXMuZ2VuZXJhdGVDYXJ0T2JqZWN0KGNoZWNrb3V0LmxpbmVJdGVtcykpLFxyXG4gICAgICB0YXAoKGNhcnQpID0+IHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KSksXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdpZnRUb0xpbmVJdGVtcyhpdGVtczogUHJvZHVjdFtdKTogTGluZUl0ZW1bXSB7XHJcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgYnJhbmQsIGNhdGVnb3JpZXMsIGlkLCBuYW1lLCBwcmljZSwgc2t1LCBzbHVnLCBzdG9jaywgd2VpZ2h0LCBFQU4gfSA9IGl0ZW1cclxuXHJcbiAgICAgIGNvbnN0IGltYWdlID0gaXRlbT8ubWluaWF0dXJlcz8ubGVuZ3RoID8gaXRlbS5taW5pYXR1cmVzWzBdIDogaXRlbS5pbWFnZXNbMF1cclxuXHJcbiAgICAgIHJldHVybiBMaW5lSXRlbS50b0luc3RhbmNlKHtcclxuICAgICAgICBicmFuZCxcclxuICAgICAgICBjYXRlZ29yaWVzLFxyXG4gICAgICAgIGlkOiBpZC50b1N0cmluZygpLFxyXG4gICAgICAgIG5hbWUsXHJcbiAgICAgICAgcHJpY2UsXHJcbiAgICAgICAgc2t1LFxyXG4gICAgICAgIHNsdWcsXHJcbiAgICAgICAgc3RvY2ssXHJcbiAgICAgICAgd2VpZ2h0LFxyXG4gICAgICAgIEVBTixcclxuICAgICAgICBpbWFnZSxcclxuICAgICAgICBwcmljZVBhaWQ6IDAsXHJcbiAgICAgICAgcXVhbnRpdHk6IDEsXHJcbiAgICAgICAgaXNHaWZ0OiB0cnVlLFxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
|
|
1
|
+
import { __awaiter } from "tslib";
|
|
2
|
+
import { Inject, Injectable } from '@angular/core';
|
|
3
|
+
import { Buy2WinFirestoreRepository, Checkout, LineItem, NotFoundError, Shops, Where, isNil, } from '@infrab4a/connect';
|
|
4
|
+
import { Subject, from, iif, of } from 'rxjs';
|
|
5
|
+
import { catchError, concatMap, map, mergeMap, tap } from 'rxjs/operators';
|
|
6
|
+
import { DEFAULT_SHOP } from '../consts';
|
|
7
|
+
import { AuthService } from './auth.service';
|
|
8
|
+
import { CheckoutService } from './checkout.service';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "./auth.service";
|
|
11
|
+
import * as i2 from "./checkout.service";
|
|
12
|
+
import * as i3 from "@infrab4a/connect";
|
|
13
|
+
export class CartService {
|
|
14
|
+
constructor(authService, checkoutService, defaultShop, productRepository, variantRepository, buy2WinRepository) {
|
|
15
|
+
this.authService = authService;
|
|
16
|
+
this.checkoutService = checkoutService;
|
|
17
|
+
this.defaultShop = defaultShop;
|
|
18
|
+
this.productRepository = productRepository;
|
|
19
|
+
this.variantRepository = variantRepository;
|
|
20
|
+
this.buy2WinRepository = buy2WinRepository;
|
|
21
|
+
this.cartSubject = new Subject();
|
|
22
|
+
this.updateLineItemInCart = (lineItem, quantity, checkout) => (isNil(checkout) ? this.checkoutService.getCheckout() : of(checkout)).pipe(concatMap((checkoutLoaded) => {
|
|
23
|
+
var _a;
|
|
24
|
+
const items = [];
|
|
25
|
+
const index = (_a = checkoutLoaded.lineItems) === null || _a === void 0 ? void 0 : _a.map((checkoutItem) => checkoutItem.id).indexOf(lineItem.id);
|
|
26
|
+
if (index > -1) {
|
|
27
|
+
checkoutLoaded.lineItems[index].quantity += quantity;
|
|
28
|
+
checkoutLoaded.lineItems[index].pricePaid = lineItem.pricePaid;
|
|
29
|
+
}
|
|
30
|
+
else
|
|
31
|
+
checkoutLoaded.lineItems = items.concat(checkoutLoaded.lineItems ? checkoutLoaded.lineItems.concat([lineItem]) : [lineItem]);
|
|
32
|
+
return this.checkoutService
|
|
33
|
+
.updateCheckoutLineItems(checkoutLoaded)
|
|
34
|
+
.pipe(map((updatedCheckout) => this.generateCartObject(updatedCheckout.lineItems)));
|
|
35
|
+
}));
|
|
36
|
+
this.generateCartObject = (items) => items
|
|
37
|
+
? items.reduce((cart, item) => {
|
|
38
|
+
var _a;
|
|
39
|
+
return (Object.assign(Object.assign({}, cart), { [item.id]: LineItem.toInstance(Object.assign(Object.assign({}, (cart[item.id] || item)), { quantity: (((_a = cart[item.id]) === null || _a === void 0 ? void 0 : _a.quantity) || 0) + (item.quantity ? item.quantity : 1) })) }));
|
|
40
|
+
}, {})
|
|
41
|
+
: [];
|
|
42
|
+
this.buildLineItem = ({ checkout, item, quantity, }) => __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
44
|
+
const product = yield this.getProductData(item.id);
|
|
45
|
+
item.quantity = (item === null || item === void 0 ? void 0 : item.quantity) || ((_b = (_a = checkout === null || checkout === void 0 ? void 0 : checkout.lineItems) === null || _a === void 0 ? void 0 : _a.find((lineItem) => lineItem.id === item.id)) === null || _b === void 0 ? void 0 : _b.quantity) || 0;
|
|
46
|
+
if (this.checkMaxStock(item, quantity || 0))
|
|
47
|
+
throw new Error('Desculpe! Temos apenas ' + ((_c = item.stock) === null || _c === void 0 ? void 0 : _c.quantity) + ' em estoque.');
|
|
48
|
+
const image = item.image || ((_d = item.images) === null || _d === void 0 ? void 0 : _d.shift());
|
|
49
|
+
const { id, name, EAN, slug, stock, price, weight, sku, type } = item;
|
|
50
|
+
const isGift = item.isGift || null;
|
|
51
|
+
const pricePaid = this.getProductPrice({
|
|
52
|
+
product: item,
|
|
53
|
+
shop: checkout.shop || this.defaultShop,
|
|
54
|
+
isSubscriber: (_e = checkout.user) === null || _e === void 0 ? void 0 : _e.isSubscriber,
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
checkout,
|
|
58
|
+
lineItem: LineItem.toInstance({
|
|
59
|
+
id,
|
|
60
|
+
name: name !== null && name !== void 0 ? name : product.name,
|
|
61
|
+
EAN: EAN !== null && EAN !== void 0 ? EAN : product.EAN,
|
|
62
|
+
brand: product.brand,
|
|
63
|
+
slug: slug !== null && slug !== void 0 ? slug : product.slug,
|
|
64
|
+
sku: sku !== null && sku !== void 0 ? sku : product.sku,
|
|
65
|
+
stock,
|
|
66
|
+
price,
|
|
67
|
+
image,
|
|
68
|
+
weight: weight !== null && weight !== void 0 ? weight : product.weight,
|
|
69
|
+
quantity: (item.quantity || 0) + (quantity || 0),
|
|
70
|
+
pricePaid,
|
|
71
|
+
categories: (_f = product.categories) !== null && _f !== void 0 ? _f : [],
|
|
72
|
+
isGift: isGift !== null && isGift !== void 0 ? isGift : null,
|
|
73
|
+
costPrice: (_g = product.costPrice) !== null && _g !== void 0 ? _g : 0,
|
|
74
|
+
type,
|
|
75
|
+
}),
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
this.getProductPrice = ({ product, isSubscriber, }) => {
|
|
79
|
+
const info = product.price;
|
|
80
|
+
if (product.isGift)
|
|
81
|
+
return 0;
|
|
82
|
+
return isSubscriber && info.subscriberPrice > 0 ? info.subscriberPrice : info.price;
|
|
83
|
+
};
|
|
84
|
+
this.checkMaxStock = (item, quantity) => {
|
|
85
|
+
var _a;
|
|
86
|
+
const maxStock = ((_a = item.stock) === null || _a === void 0 ? void 0 : _a.quantity) || 0;
|
|
87
|
+
const currentItemAmount = item.quantity || 0;
|
|
88
|
+
return currentItemAmount + quantity > maxStock;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
addItem(item, quantity = 1) {
|
|
92
|
+
return from(this.checkoutService.getCheckout()).pipe(concatMap((checkout) => __awaiter(this, void 0, void 0, function* () { return yield this.buildLineItem({ checkout, item, quantity: quantity || 1 }); })), mergeMap(({ checkout, lineItem }) => this.updateLineItemInCart(lineItem, quantity || 1, checkout)), tap((cart) => this.cartSubject.next(cart)));
|
|
93
|
+
}
|
|
94
|
+
decreaseItem(item) {
|
|
95
|
+
return this.checkoutService.getCheckout().pipe(map((checkout) => {
|
|
96
|
+
var _a;
|
|
97
|
+
const checkoutItem = (_a = checkout.lineItems) === null || _a === void 0 ? void 0 : _a.find((lineItem) => lineItem.id === item.id);
|
|
98
|
+
if (!isNil(checkoutItem))
|
|
99
|
+
checkoutItem.quantity -= checkoutItem.quantity > 1 ? 1 : 0;
|
|
100
|
+
return checkout;
|
|
101
|
+
}), concatMap((checkout) => this.checkoutService.updateCheckoutLineItems(checkout)), map((checkout) => this.generateCartObject(checkout.lineItems)), tap((cart) => this.cartSubject.next(cart)));
|
|
102
|
+
}
|
|
103
|
+
getCart(checkout) {
|
|
104
|
+
this.buildCartFromCheckout(checkout).subscribe((cart) => this.cartSubject.next(cart));
|
|
105
|
+
return this.cartSubject;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* @deprecated The method should not be used
|
|
109
|
+
*/
|
|
110
|
+
getVariantPriceDiscount(item) {
|
|
111
|
+
return this.authService.getUser().pipe(concatMap((user) => iif(() => user.isSubscriber && !!item.price.subscriberPrice, of(item.price.subscriberPrice), of(item.price.price))), catchError(() => of(item.price.price)));
|
|
112
|
+
}
|
|
113
|
+
removeItem(item) {
|
|
114
|
+
return this.checkoutService.getCheckout().pipe(map((checkout) => {
|
|
115
|
+
const index = checkout.lineItems.findIndex((lineItem) => lineItem.id === item.id);
|
|
116
|
+
if (index >= 0)
|
|
117
|
+
checkout.lineItems.splice(index, 1);
|
|
118
|
+
return checkout;
|
|
119
|
+
}), concatMap((checkout) => this.checkoutService.updateCheckoutLineItems(checkout)), map((checkout) => this.generateCartObject(checkout.lineItems)), tap((cart) => this.cartSubject.next(cart)));
|
|
120
|
+
}
|
|
121
|
+
updateUserCart(user) {
|
|
122
|
+
return this.checkoutService.getCheckout().pipe(concatMap((checkout) => this.checkoutService.updateCheckoutUser(Checkout.toInstance(Object.assign(Object.assign({}, checkout.toPlain()), { user })))), concatMap((checkout) => __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
var _a, _b;
|
|
124
|
+
return this.checkoutService
|
|
125
|
+
.updateCheckoutLineItems(Checkout.toInstance(Object.assign(Object.assign({}, checkout.toPlain()), { lineItems: ((_a = checkout.lineItems) === null || _a === void 0 ? void 0 : _a.length)
|
|
126
|
+
? yield Promise.all((_b = checkout.lineItems) === null || _b === void 0 ? void 0 : _b.map((item) => __awaiter(this, void 0, void 0, function* () { return (yield this.buildLineItem({ checkout, item })).lineItem; })))
|
|
127
|
+
: [] })))
|
|
128
|
+
.toPromise();
|
|
129
|
+
})), map((checkout) => this.generateCartObject(checkout.lineItems)), tap((cart) => this.cartSubject.next(cart)));
|
|
130
|
+
}
|
|
131
|
+
clearCart() {
|
|
132
|
+
return this.checkoutService.getCheckout().pipe(map((checkout) => {
|
|
133
|
+
this.checkoutService.clearCheckoutFromSession();
|
|
134
|
+
return checkout;
|
|
135
|
+
}), concatMap((oldCheckout) => this.buildCartFromCheckout(oldCheckout)), tap((cart) => this.cartSubject.next(cart)));
|
|
136
|
+
}
|
|
137
|
+
buildCartFromCheckout(checkoutData) {
|
|
138
|
+
return this.checkoutService.getCheckout(checkoutData).pipe(map((checkout) => checkout.lineItems), concatMap((lineItems) => of(this.generateCartObject(lineItems))));
|
|
139
|
+
}
|
|
140
|
+
getProductData(productId) {
|
|
141
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
142
|
+
let product;
|
|
143
|
+
let variant;
|
|
144
|
+
try {
|
|
145
|
+
product = yield this.productRepository.get({ id: productId });
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (!(error instanceof NotFoundError))
|
|
149
|
+
throw error;
|
|
150
|
+
variant = yield this.variantRepository.get({ id: productId });
|
|
151
|
+
product = yield this.productRepository.get({ id: variant.productId });
|
|
152
|
+
}
|
|
153
|
+
return Object.assign(Object.assign({}, product.toPlain()), (variant && Object.assign({}, variant.toPlain())));
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
getGifts() {
|
|
157
|
+
return this.checkoutService.getCheckout().pipe(mergeMap((checkout) => __awaiter(this, void 0, void 0, function* () {
|
|
158
|
+
const notGiftItems = checkout.lineItems ? checkout.lineItems.filter((item) => !item.isGift) : [];
|
|
159
|
+
if (!notGiftItems.length)
|
|
160
|
+
return Object.assign(Object.assign({}, checkout), { lineItems: [] });
|
|
161
|
+
const cartTotal = notGiftItems.reduce((a, b) => a + b.pricePaid * b.quantity, 0);
|
|
162
|
+
const campaigns = yield this.buy2WinRepository
|
|
163
|
+
.find({
|
|
164
|
+
filters: {
|
|
165
|
+
active: { operator: Where.EQUALS, value: true },
|
|
166
|
+
shop: { operator: Where.EQUALS, value: this.defaultShop },
|
|
167
|
+
},
|
|
168
|
+
})
|
|
169
|
+
.then((data) => data.data);
|
|
170
|
+
if (!campaigns.length)
|
|
171
|
+
return Object.assign(Object.assign({}, checkout), { lineItems: notGiftItems });
|
|
172
|
+
const elegibleCampaigns = [];
|
|
173
|
+
for (const campaign of campaigns) {
|
|
174
|
+
const today = new Date();
|
|
175
|
+
if (!(campaign.startDate <= today) && !(campaign.endDate >= today))
|
|
176
|
+
continue;
|
|
177
|
+
if (campaign.activeCategory) {
|
|
178
|
+
const categoriesCampaing = campaign.categories.map((c) => c.id);
|
|
179
|
+
const filterProductsCategories = checkout.lineItems.filter((l) => {
|
|
180
|
+
var _a;
|
|
181
|
+
if (!l.categories || !((_a = l.categories) === null || _a === void 0 ? void 0 : _a.length))
|
|
182
|
+
return true;
|
|
183
|
+
return l.categories.some((c) => categoriesCampaing.some((cat) => cat == c));
|
|
184
|
+
});
|
|
185
|
+
if (filterProductsCategories.length) {
|
|
186
|
+
const cartTotalCategories = filterProductsCategories.reduce((a, b) => a + b.pricePaid * b.quantity, 0);
|
|
187
|
+
if (cartTotalCategories >= campaign.cartValueMin)
|
|
188
|
+
elegibleCampaigns.push(campaign);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
if (campaign.cartValue && campaign.cartValue > 0) {
|
|
193
|
+
if (campaign.cartValue <= cartTotal)
|
|
194
|
+
elegibleCampaigns.push(campaign);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (!elegibleCampaigns.length)
|
|
199
|
+
return Object.assign(Object.assign({}, checkout), { lineItems: notGiftItems });
|
|
200
|
+
const campaingnProducts = [];
|
|
201
|
+
for (const campaign of elegibleCampaigns) {
|
|
202
|
+
let elegibleProducts = [];
|
|
203
|
+
for (const product of campaign.products) {
|
|
204
|
+
const { data: productData } = yield this.productRepository.find({ filters: { sku: product } });
|
|
205
|
+
if (!productData.length)
|
|
206
|
+
continue;
|
|
207
|
+
const gift = productData.shift();
|
|
208
|
+
if (gift.stock.quantity < 1)
|
|
209
|
+
continue;
|
|
210
|
+
elegibleProducts.push(gift);
|
|
211
|
+
}
|
|
212
|
+
campaingnProducts.push(elegibleProducts);
|
|
213
|
+
}
|
|
214
|
+
if (!campaingnProducts.length)
|
|
215
|
+
return Object.assign(Object.assign({}, checkout), { lineItems: notGiftItems });
|
|
216
|
+
const gifts = this.giftToLineItems([].concat(...campaingnProducts));
|
|
217
|
+
return Object.assign(Object.assign({}, checkout), { lineItems: notGiftItems.concat(gifts) });
|
|
218
|
+
})), concatMap((checkout) => this.checkoutService.updateCheckoutLineItems(checkout)), map((checkout) => this.generateCartObject(checkout.lineItems)), tap((cart) => this.cartSubject.next(cart)));
|
|
219
|
+
}
|
|
220
|
+
giftToLineItems(items) {
|
|
221
|
+
return items.map((item) => {
|
|
222
|
+
var _a;
|
|
223
|
+
const { brand, categories, id, name, price, sku, slug, stock, weight, EAN } = item;
|
|
224
|
+
const image = ((_a = item === null || item === void 0 ? void 0 : item.miniatures) === null || _a === void 0 ? void 0 : _a.length) ? item.miniatures[0] : item.images[0];
|
|
225
|
+
return LineItem.toInstance({
|
|
226
|
+
brand,
|
|
227
|
+
categories,
|
|
228
|
+
id: id.toString(),
|
|
229
|
+
name,
|
|
230
|
+
price,
|
|
231
|
+
sku,
|
|
232
|
+
slug,
|
|
233
|
+
stock,
|
|
234
|
+
weight,
|
|
235
|
+
EAN,
|
|
236
|
+
image,
|
|
237
|
+
pricePaid: 0,
|
|
238
|
+
quantity: 1,
|
|
239
|
+
isGift: true,
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
CartService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService, deps: [{ token: i1.AuthService }, { token: i2.CheckoutService }, { token: DEFAULT_SHOP }, { token: 'ProductRepository' }, { token: 'VariantRepository' }, { token: 'Buy2WinRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
245
|
+
CartService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService });
|
|
246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CartService, decorators: [{
|
|
247
|
+
type: Injectable
|
|
248
|
+
}], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.CheckoutService }, { type: i3.Shops, decorators: [{
|
|
249
|
+
type: Inject,
|
|
250
|
+
args: [DEFAULT_SHOP]
|
|
251
|
+
}] }, { type: undefined, decorators: [{
|
|
252
|
+
type: Inject,
|
|
253
|
+
args: ['ProductRepository']
|
|
254
|
+
}] }, { type: undefined, decorators: [{
|
|
255
|
+
type: Inject,
|
|
256
|
+
args: ['VariantRepository']
|
|
257
|
+
}] }, { type: i3.Buy2WinFirestoreRepository, decorators: [{
|
|
258
|
+
type: Inject,
|
|
259
|
+
args: ['Buy2WinRepository']
|
|
260
|
+
}] }]; } });
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFFTCwwQkFBMEIsRUFDMUIsUUFBUSxFQUNSLFFBQVEsRUFDUixhQUFhLEVBR2IsS0FBSyxFQUlMLEtBQUssRUFDTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQWMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFBOzs7OztBQVFwRCxNQUFNLE9BQU8sV0FBVztJQUd0QixZQUNtQixXQUF3QixFQUN4QixlQUFnQyxFQUNWLFdBQWtCLEVBQ1gsaUJBQW9DLEVBQ3BDLGlCQUFvQyxFQUNwQyxpQkFBNkM7UUFMMUUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ1YsZ0JBQVcsR0FBWCxXQUFXLENBQU87UUFDWCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE0QjtRQVJyRixnQkFBVyxHQUFrQixJQUFJLE9B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Q0osS0FBSztnQkFDTCxHQUFHO2dCQUNILElBQUk7Z0JBQ0osS0FBSztnQkFDTCxNQUFNO2dCQUNOLEdBQUc7Z0JBQ0gsS0FBSztnQkFDTCxTQUFTLEVBQUUsQ0FBQztnQkFDWixRQUFRLEVBQUUsQ0FBQztnQkFDWCxNQUFNLEVBQUUsSUFBSTthQUNiLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs7eUdBclZVLFdBQVcsNEVBTVosWUFBWSxhQUNaLG1CQUFtQixhQUNuQixtQkFBbUIsYUFDbkIsbUJBQW1COzZHQVRsQixXQUFXOzRGQUFYLFdBQVc7a0JBRHZCLFVBQVU7OzBCQU9OLE1BQU07MkJBQUMsWUFBWTs7MEJBQ25CLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBCdXkyV2luLFxuICBCdXkyV2luRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgQ2hlY2tvdXQsXG4gIExpbmVJdGVtLFxuICBOb3RGb3VuZEVycm9yLFxuICBQcm9kdWN0LFxuICBQcm9kdWN0UmVwb3NpdG9yeSxcbiAgU2hvcHMsXG4gIFVzZXIsXG4gIFZhcmlhbnQsXG4gIFZhcmlhbnRSZXBvc2l0b3J5LFxuICBXaGVyZSxcbiAgaXNOaWwsXG59IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZnJvbSwgaWlmLCBvZiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAsIG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBERUZBVUxUX1NIT1AgfSBmcm9tICcuLi9jb25zdHMnXG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnXG5pbXBvcnQgeyBDaGVja291dFNlcnZpY2UgfSBmcm9tICcuL2NoZWNrb3V0LnNlcnZpY2UnXG5pbXBvcnQgeyBSZXF1aXJlZENoZWNrb3V0RGF0YSB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCB0eXBlIENhcnQgPSB7XG4gIFtpZDogc3RyaW5nXTogTGluZUl0ZW1cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhcnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjYXJ0U3ViamVjdDogU3ViamVjdDxDYXJ0PiA9IG5ldyBTdWJqZWN0KClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoZWNrb3V0U2VydmljZTogQ2hlY2tvdXRTZXJ2aWNlLFxuICAgIEBJbmplY3QoREVGQVVMVF9TSE9QKSBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTaG9wOiBTaG9wcyxcbiAgICBASW5qZWN0KCdQcm9kdWN0UmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdFJlcG9zaXRvcnk6IFByb2R1Y3RSZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoJ1ZhcmlhbnRSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSB2YXJpYW50UmVwb3NpdG9yeTogVmFyaWFudFJlcG9zaXRvcnksXG4gICAgQEluamVjdCgnQnV5MldpblJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IGJ1eTJXaW5SZXBvc2l0b3J5OiBCdXkyV2luRmlyZXN0b3JlUmVwb3NpdG9yeSxcbiAgKSB7fVxuXG4gIGFkZEl0ZW0oaXRlbTogTGluZUl0ZW0sIHF1YW50aXR5OiBudW1iZXIgPSAxKTogT2JzZXJ2YWJsZTxDYXJ0PiB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5jaGVja291dFNlcnZpY2UuZ2V0Q2hlY2tvdXQoKSkucGlwZShcbiAgICAgIGNvbmNhdE1hcChhc3luYyAoY2hlY2tvdXQpID0+IGF3YWl0IHRoaXMuYnVpbGRMaW5lSXRlbSh7IGNoZWNrb3V0LCBpdGVtLCBxdWFudGl0eTogcXVhbnRpdHkgfHwgMSB9KSksXG4gICAgICBtZXJnZU1hcCgoeyBjaGVja291dCwgbGluZUl0ZW0gfSkgPT4gdGhpcy51cGRhdGVMaW5lSXRlbUluQ2FydChsaW5lSXRlbSwgcXVhbnRpdHkgfHwgMSwgY2hlY2tvdXQgYXMgQ2hlY2tvdXQpKSxcbiAgICAgIHRhcCgoY2FydCkgPT4gdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpKSxcbiAgICApXG4gIH1cblxuICBkZWNyZWFzZUl0ZW0oaXRlbTogTGluZUl0ZW0pOiBPYnNlcnZhYmxlPENhcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0Q2hlY2tvdXQoKS5waXBlKFxuICAgICAgbWFwKChjaGVja291dCkgPT4ge1xuICAgICAgICBjb25zdCBjaGVja291dEl0ZW0gPSBjaGVja291dC5saW5lSXRlbXM/LmZpbmQoKGxpbmVJdGVtKSA9PiBsaW5lSXRlbS5pZCA9PT0gaXRlbS5pZClcblxuICAgICAgICBpZiAoIWlzTmlsKGNoZWNrb3V0SXRlbSkpIGNoZWNrb3V0SXRlbS5xdWFudGl0eSAtPSBjaGVja291dEl0ZW0ucXVhbnRpdHkgPiAxID8gMSA6IDBcblxuICAgICAgICByZXR1cm4gY2hlY2tvdXRcbiAgICAgIH0pLFxuICAgICAgY29uY2F0TWFwKChjaGVja291dCkgPT4gdGhpcy5jaGVja291dFNlcnZpY2UudXBkYXRlQ2hlY2tvdXRMaW5lSXRlbXMoY2hlY2tvdXQpKSxcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHRoaXMuZ2VuZXJhdGVDYXJ0T2JqZWN0KGNoZWNrb3V0LmxpbmVJdGVtcykpLFxuICAgICAgdGFwKChjYXJ0KSA9PiB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCkpLFxuICAgIClcbiAgfVxuXG4gIGdldENhcnQoY2hlY2tvdXQ/OiBSZXF1aXJlZENoZWNrb3V0RGF0YSk6IE9ic2VydmFibGU8Q2FydD4ge1xuICAgIHRoaXMuYnVpbGRDYXJ0RnJvbUNoZWNrb3V0KGNoZWNrb3V0KS5zdWJzY3JpYmUoKGNhcnQpID0+IHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KSlcblxuICAgIHJldHVybiB0aGlzLmNhcnRTdWJqZWN0XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIG1ldGhvZCBzaG91bGQgbm90IGJlIHVzZWRcbiAgICovXG4gIGdldFZhcmlhbnRQcmljZURpc2NvdW50KGl0ZW06IExpbmVJdGVtKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyKCkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgodXNlcikgPT5cbiAgICAgICAgaWlmKFxuICAgICAgICAgICgpID0+IHVzZXIuaXNTdWJzY3JpYmVyICYmICEhaXRlbS5wcmljZS5zdWJzY3JpYmVyUHJpY2UsXG4gICAgICAgICAgb2YoaXRlbS5wcmljZS5zdWJzY3JpYmVyUHJpY2UpLFxuICAgICAgICAgIG9mKGl0ZW0ucHJpY2UucHJpY2UpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoaXRlbS5wcmljZS5wcmljZSkpLFxuICAgIClcbiAgfVxuXG4gIHJlbW92ZUl0ZW0oaXRlbTogTGluZUl0ZW0pOiBPYnNlcnZhYmxlPENhcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0Q2hlY2tvdXQoKS5waXBlKFxuICAgICAgbWFwKChjaGVja291dCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IGNoZWNrb3V0LmxpbmVJdGVtcy5maW5kSW5kZXgoKGxpbmVJdGVtKSA9PiBsaW5lSXRlbS5pZCA9PT0gaXRlbS5pZClcblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkgY2hlY2tvdXQubGluZUl0ZW1zLnNwbGljZShpbmRleCwgMSlcblxuICAgICAgICByZXR1cm4gY2hlY2tvdXRcbiAgICAgIH0pLFxuICAgICAgY29uY2F0TWFwKChjaGVja291dCkgPT4gdGhpcy5jaGVja291dFNlcnZpY2UudXBkYXRlQ2hlY2tvdXRMaW5lSXRlbXMoY2hlY2tvdXQpKSxcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHRoaXMuZ2VuZXJhdGVDYXJ0T2JqZWN0KGNoZWNrb3V0LmxpbmVJdGVtcykpLFxuICAgICAgdGFwKChjYXJ0KSA9PiB0aGlzLmNhcnRTdWJqZWN0Lm5leHQoY2FydCkpLFxuICAgIClcbiAgfVxuXG4gIHVwZGF0ZVVzZXJDYXJ0KHVzZXI6IFVzZXIpOiBPYnNlcnZhYmxlPENhcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0Q2hlY2tvdXQoKS5waXBlKFxuICAgICAgY29uY2F0TWFwKChjaGVja291dCkgPT5cbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UudXBkYXRlQ2hlY2tvdXRVc2VyKENoZWNrb3V0LnRvSW5zdGFuY2UoeyAuLi5jaGVja291dC50b1BsYWluKCksIHVzZXIgfSkpLFxuICAgICAgKSxcbiAgICAgIGNvbmNhdE1hcChhc3luYyAoY2hlY2tvdXQpID0+XG4gICAgICAgIHRoaXMuY2hlY2tvdXRTZXJ2aWNlXG4gICAgICAgICAgLnVwZGF0ZUNoZWNrb3V0TGluZUl0ZW1zKFxuICAgICAgICAgICAgQ2hlY2tvdXQudG9JbnN0YW5jZSh7XG4gICAgICAgICAgICAgIC4uLmNoZWNrb3V0LnRvUGxhaW4oKSxcbiAgICAgICAgICAgICAgbGluZUl0ZW1zOiBjaGVja291dC5saW5lSXRlbXM/Lmxlbmd0aFxuICAgICAgICAgICAgICAgID8gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrb3V0LmxpbmVJdGVtcz8ubWFwKGFzeW5jIChpdGVtKSA9PiAoYXdhaXQgdGhpcy5idWlsZExpbmVJdGVtKHsgY2hlY2tvdXQsIGl0ZW0gfSkpLmxpbmVJdGVtKSxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC50b1Byb21pc2UoKSxcbiAgICAgICksXG4gICAgICBtYXAoKGNoZWNrb3V0KSA9PiB0aGlzLmdlbmVyYXRlQ2FydE9iamVjdChjaGVja291dC5saW5lSXRlbXMpKSxcbiAgICAgIHRhcCgoY2FydCkgPT4gdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpKSxcbiAgICApXG4gIH1cblxuICBjbGVhckNhcnQoKTogT2JzZXJ2YWJsZTxDYXJ0PiB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkucGlwZShcbiAgICAgIG1hcCgoY2hlY2tvdXQpID0+IHtcbiAgICAgICAgdGhpcy5jaGVja291dFNlcnZpY2UuY2xlYXJDaGVja291dEZyb21TZXNzaW9uKClcbiAgICAgICAgcmV0dXJuIGNoZWNrb3V0XG4gICAgICB9KSxcbiAgICAgIGNvbmNhdE1hcCgob2xkQ2hlY2tvdXQpID0+IHRoaXMuYnVpbGRDYXJ0RnJvbUNoZWNrb3V0KG9sZENoZWNrb3V0KSksXG4gICAgICB0YXAoKGNhcnQpID0+IHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KSksXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENhcnRGcm9tQ2hlY2tvdXQoY2hlY2tvdXREYXRhPzogUmVxdWlyZWRDaGVja291dERhdGEpOiBPYnNlcnZhYmxlPENhcnQ+IHtcbiAgICByZXR1cm4gdGhpcy5jaGVja291dFNlcnZpY2UuZ2V0Q2hlY2tvdXQoY2hlY2tvdXREYXRhKS5waXBlKFxuICAgICAgbWFwKChjaGVja291dCkgPT4gY2hlY2tvdXQubGluZUl0ZW1zKSxcbiAgICAgIGNvbmNhdE1hcCgobGluZUl0ZW1zKSA9PiBvZih0aGlzLmdlbmVyYXRlQ2FydE9iamVjdChsaW5lSXRlbXMpKSksXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lSXRlbUluQ2FydCA9IChsaW5lSXRlbTogTGluZUl0ZW0sIHF1YW50aXR5OiBudW1iZXIsIGNoZWNrb3V0PzogQ2hlY2tvdXQpOiBPYnNlcnZhYmxlPENhcnQ+ID0+XG4gICAgKGlzTmlsKGNoZWNrb3V0KSA/IHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkgOiBvZihjaGVja291dCkpLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKGNoZWNrb3V0TG9hZGVkKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBMaW5lSXRlbVtdID0gW11cbiAgICAgICAgY29uc3QgaW5kZXggPSBjaGVja291dExvYWRlZC5saW5lSXRlbXM/Lm1hcCgoY2hlY2tvdXRJdGVtKSA9PiBjaGVja291dEl0ZW0uaWQpLmluZGV4T2YobGluZUl0ZW0uaWQpXG5cbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBjaGVja291dExvYWRlZC5saW5lSXRlbXNbaW5kZXhdLnF1YW50aXR5ICs9IHF1YW50aXR5XG4gICAgICAgICAgY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zW2luZGV4XS5wcmljZVBhaWQgPSBsaW5lSXRlbS5wcmljZVBhaWRcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zID0gaXRlbXMuY29uY2F0KFxuICAgICAgICAgICAgY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zID8gY2hlY2tvdXRMb2FkZWQubGluZUl0ZW1zLmNvbmNhdChbbGluZUl0ZW1dKSA6IFtsaW5lSXRlbV0sXG4gICAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNoZWNrb3V0U2VydmljZVxuICAgICAgICAgIC51cGRhdGVDaGVja291dExpbmVJdGVtcyhjaGVja291dExvYWRlZClcbiAgICAgICAgICAucGlwZShtYXAoKHVwZGF0ZWRDaGVja291dCkgPT4gdGhpcy5nZW5lcmF0ZUNhcnRPYmplY3QodXBkYXRlZENoZWNrb3V0LmxpbmVJdGVtcykpKVxuICAgICAgfSksXG4gICAgKVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVDYXJ0T2JqZWN0ID0gKGl0ZW1zOiBMaW5lSXRlbVtdKTogQ2FydCA9PlxuICAgIGl0ZW1zXG4gICAgICA/IGl0ZW1zLnJlZHVjZShcbiAgICAgICAgICAoY2FydCwgaXRlbSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmNhcnQsXG4gICAgICAgICAgICBbaXRlbS5pZF06IExpbmVJdGVtLnRvSW5zdGFuY2Uoe1xuICAgICAgICAgICAgICAuLi4oY2FydFtpdGVtLmlkXSB8fCBpdGVtKSxcbiAgICAgICAgICAgICAgcXVhbnRpdHk6IChjYXJ0W2l0ZW0uaWRdPy5xdWFudGl0eSB8fCAwKSArIChpdGVtLnF1YW50aXR5ID8gaXRlbS5xdWFudGl0eSA6IDEpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSksXG4gICAgICAgICAge30sXG4gICAgICAgIClcbiAgICAgIDogW11cblxuICBwcml2YXRlIGJ1aWxkTGluZUl0ZW0gPSBhc3luYyAoe1xuICAgIGNoZWNrb3V0LFxuICAgIGl0ZW0sXG4gICAgcXVhbnRpdHksXG4gIH06IHtcbiAgICBjaGVja291dDogUmVxdWlyZWRDaGVja291dERhdGFcbiAgICBpdGVtOiBMaW5lSXRlbVxuICAgIHF1YW50aXR5PzogbnVtYmVyXG4gIH0pOiBQcm9taXNlPHsgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+OyBsaW5lSXRlbTogTGluZUl0ZW0gfT4gPT4ge1xuICAgIGNvbnN0IHByb2R1Y3QgPSBhd2FpdCB0aGlzLmdldFByb2R1Y3REYXRhKGl0ZW0uaWQpXG5cbiAgICBpdGVtLnF1YW50aXR5ID0gaXRlbT8ucXVhbnRpdHkgfHwgY2hlY2tvdXQ/LmxpbmVJdGVtcz8uZmluZCgobGluZUl0ZW0pID0+IGxpbmVJdGVtLmlkID09PSBpdGVtLmlkKT8ucXVhbnRpdHkgfHwgMFxuXG4gICAgaWYgKHRoaXMuY2hlY2tNYXhTdG9jayhpdGVtLCBxdWFudGl0eSB8fCAwKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVzY3VscGUhIFRlbW9zIGFwZW5hcyAnICsgaXRlbS5zdG9jaz8ucXVhbnRpdHkgKyAnIGVtIGVzdG9xdWUuJylcblxuICAgIGNvbnN0IGltYWdlID0gaXRlbS5pbWFnZSB8fCBpdGVtLmltYWdlcz8uc2hpZnQoKVxuICAgIGNvbnN0IHsgaWQsIG5hbWUsIEVBTiwgc2x1Zywgc3RvY2ssIHByaWNlLCB3ZWlnaHQsIHNrdSwgdHlwZSB9ID0gaXRlbVxuICAgIGNvbnN0IGlzR2lmdCA9IGl0ZW0uaXNHaWZ0IHx8IG51bGxcbiAgICBjb25zdCBwcmljZVBhaWQgPSB0aGlzLmdldFByb2R1Y3RQcmljZSh7XG4gICAgICBwcm9kdWN0OiBpdGVtLFxuICAgICAgc2hvcDogY2hlY2tvdXQuc2hvcCB8fCB0aGlzLmRlZmF1bHRTaG9wLFxuICAgICAgaXNTdWJzY3JpYmVyOiBjaGVja291dC51c2VyPy5pc1N1YnNjcmliZXIsXG4gICAgfSlcblxuICAgIHJldHVybiB7XG4gICAgICBjaGVja291dCxcbiAgICAgIGxpbmVJdGVtOiBMaW5lSXRlbS50b0luc3RhbmNlKHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWU6IG5hbWUgPz8gcHJvZHVjdC5uYW1lLFxuICAgICAgICBFQU46IEVBTiA/PyBwcm9kdWN0LkVBTixcbiAgICAgICAgYnJhbmQ6IHByb2R1Y3QuYnJhbmQsXG4gICAgICAgIHNsdWc6IHNsdWcgPz8gcHJvZHVjdC5zbHVnLFxuICAgICAgICBza3U6IHNrdSA/PyBwcm9kdWN0LnNrdSxcbiAgICAgICAgc3RvY2ssXG4gICAgICAgIHByaWNlLFxuICAgICAgICBpbWFnZSxcbiAgICAgICAgd2VpZ2h0OiB3ZWlnaHQgPz8gcHJvZHVjdC53ZWlnaHQsXG4gICAgICAgIHF1YW50aXR5OiAoaXRlbS5xdWFudGl0eSB8fCAwKSArIChxdWFudGl0eSB8fCAwKSxcbiAgICAgICAgcHJpY2VQYWlkLFxuICAgICAgICBjYXRlZ29yaWVzOiBwcm9kdWN0LmNhdGVnb3JpZXMgPz8gW10sXG4gICAgICAgIGlzR2lmdDogaXNHaWZ0ID8/IG51bGwsXG4gICAgICAgIGNvc3RQcmljZTogcHJvZHVjdC5jb3N0UHJpY2UgPz8gMCxcbiAgICAgICAgdHlwZSxcbiAgICAgIH0pLFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UHJvZHVjdERhdGEocHJvZHVjdElkOiBzdHJpbmcpOiBQcm9taXNlPFBhcnRpYWw8UHJvZHVjdD4+IHtcbiAgICBsZXQgcHJvZHVjdDogUHJvZHVjdFxuICAgIGxldCB2YXJpYW50OiBWYXJpYW50XG5cbiAgICB0cnkge1xuICAgICAgcHJvZHVjdCA9IGF3YWl0IHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZ2V0KHsgaWQ6IHByb2R1Y3RJZCB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpKSB0aHJvdyBlcnJvclxuXG4gICAgICB2YXJpYW50ID0gYXdhaXQgdGhpcy52YXJpYW50UmVwb3NpdG9yeS5nZXQoeyBpZDogcHJvZHVjdElkIH0pXG4gICAgICBwcm9kdWN0ID0gYXdhaXQgdGhpcy5wcm9kdWN0UmVwb3NpdG9yeS5nZXQoeyBpZDogdmFyaWFudC5wcm9kdWN0SWQgfSlcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucHJvZHVjdC50b1BsYWluKCksXG4gICAgICAuLi4odmFyaWFudCAmJiB7IC4uLnZhcmlhbnQudG9QbGFpbigpIH0pLFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvZHVjdFByaWNlID0gKHtcbiAgICBwcm9kdWN0LFxuICAgIGlzU3Vic2NyaWJlcixcbiAgfToge1xuICAgIHByb2R1Y3Q6IExpbmVJdGVtXG4gICAgc2hvcDogU2hvcHNcbiAgICBpc1N1YnNjcmliZXI6IGJvb2xlYW5cbiAgfSk6IG51bWJlciA9PiB7XG4gICAgY29uc3QgaW5mbyA9IHByb2R1Y3QucHJpY2VcblxuICAgIGlmIChwcm9kdWN0LmlzR2lmdCkgcmV0dXJuIDBcblxuICAgIHJldHVybiBpc1N1YnNjcmliZXIgJiYgaW5mby5zdWJzY3JpYmVyUHJpY2UgPiAwID8gaW5mby5zdWJzY3JpYmVyUHJpY2UgOiBpbmZvLnByaWNlXG4gIH1cblxuICBwcml2YXRlIGNoZWNrTWF4U3RvY2sgPSAoaXRlbTogTGluZUl0ZW0sIHF1YW50aXR5OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBtYXhTdG9jayA9IGl0ZW0uc3RvY2s/LnF1YW50aXR5IHx8IDBcbiAgICBjb25zdCBjdXJyZW50SXRlbUFtb3VudCA9IGl0ZW0ucXVhbnRpdHkgfHwgMFxuXG4gICAgcmV0dXJuIGN1cnJlbnRJdGVtQW1vdW50ICsgcXVhbnRpdHkgPiBtYXhTdG9ja1xuICB9XG5cbiAgZ2V0R2lmdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tvdXRTZXJ2aWNlLmdldENoZWNrb3V0KCkucGlwZShcbiAgICAgIG1lcmdlTWFwKGFzeW5jIChjaGVja291dCkgPT4ge1xuICAgICAgICBjb25zdCBub3RHaWZ0SXRlbXM6IExpbmVJdGVtW10gPSBjaGVja291dC5saW5lSXRlbXMgPyBjaGVja291dC5saW5lSXRlbXMuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5pc0dpZnQpIDogW11cblxuICAgICAgICBpZiAoIW5vdEdpZnRJdGVtcy5sZW5ndGgpIHJldHVybiB7IC4uLmNoZWNrb3V0LCBsaW5lSXRlbXM6IFtdIH0gYXMgQ2hlY2tvdXRcblxuICAgICAgICBjb25zdCBjYXJ0VG90YWwgPSBub3RHaWZ0SXRlbXMucmVkdWNlKChhLCBiKSA9PiBhICsgYi5wcmljZVBhaWQgKiBiLnF1YW50aXR5LCAwKVxuXG4gICAgICAgIGNvbnN0IGNhbXBhaWducyA9IGF3YWl0IHRoaXMuYnV5MldpblJlcG9zaXRvcnlcbiAgICAgICAgICAuZmluZCh7XG4gICAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICAgIGFjdGl2ZTogeyBvcGVyYXRvcjogV2hlcmUuRVFVQUxTLCB2YWx1ZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICBzaG9wOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiB0aGlzLmRlZmF1bHRTaG9wIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oKGRhdGEpID0+IGRhdGEuZGF0YSlcblxuICAgICAgICBpZiAoIWNhbXBhaWducy5sZW5ndGgpIHJldHVybiB7IC4uLmNoZWNrb3V0LCBsaW5lSXRlbXM6IG5vdEdpZnRJdGVtcyB9IGFzIENoZWNrb3V0XG5cbiAgICAgICAgY29uc3QgZWxlZ2libGVDYW1wYWlnbnM6IEJ1eTJXaW5bXSA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCBjYW1wYWlnbiBvZiBjYW1wYWlnbnMpIHtcbiAgICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKClcblxuICAgICAgICAgIGlmICghKGNhbXBhaWduLnN0YXJ0RGF0ZSA8PSB0b2RheSkgJiYgIShjYW1wYWlnbi5lbmREYXRlID49IHRvZGF5KSkgY29udGludWVcblxuICAgICAgICAgIGlmIChjYW1wYWlnbi5hY3RpdmVDYXRlZ29yeSkge1xuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllc0NhbXBhaW5nID0gY2FtcGFpZ24uY2F0ZWdvcmllcy5tYXAoKGMpID0+IGMuaWQpXG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclByb2R1Y3RzQ2F0ZWdvcmllcyA9IGNoZWNrb3V0LmxpbmVJdGVtcy5maWx0ZXIoKGwpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFsLmNhdGVnb3JpZXMgfHwgIWwuY2F0ZWdvcmllcz8ubGVuZ3RoKSByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICByZXR1cm4gbC5jYXRlZ29yaWVzLnNvbWUoKGMpID0+IGNhdGVnb3JpZXNDYW1wYWluZy5zb21lKChjYXQpID0+IGNhdCA9PSBjKSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJQcm9kdWN0c0NhdGVnb3JpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhcnRUb3RhbENhdGVnb3JpZXMgPSBmaWx0ZXJQcm9kdWN0c0NhdGVnb3JpZXMucmVkdWNlKChhLCBiKSA9PiBhICsgYi5wcmljZVBhaWQgKiBiLnF1YW50aXR5LCAwKVxuXG4gICAgICAgICAgICAgIGlmIChjYXJ0VG90YWxDYXRlZ29yaWVzID49IGNhbXBhaWduLmNhcnRWYWx1ZU1pbikgZWxlZ2libGVDYW1wYWlnbnMucHVzaChjYW1wYWlnbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNhbXBhaWduLmNhcnRWYWx1ZSAmJiBjYW1wYWlnbi5jYXJ0VmFsdWUgPiAwKSB7XG4gICAgICAgICAgICAgIGlmIChjYW1wYWlnbi5jYXJ0VmFsdWUgPD0gY2FydFRvdGFsKSBlbGVnaWJsZUNhbXBhaWducy5wdXNoKGNhbXBhaWduKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZWxlZ2libGVDYW1wYWlnbnMubGVuZ3RoKSByZXR1cm4geyAuLi5jaGVja291dCwgbGluZUl0ZW1zOiBub3RHaWZ0SXRlbXMgfSBhcyBDaGVja291dFxuXG4gICAgICAgIGNvbnN0IGNhbXBhaW5nblByb2R1Y3RzOiBQcm9kdWN0W11bXSA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCBjYW1wYWlnbiBvZiBlbGVnaWJsZUNhbXBhaWducykge1xuICAgICAgICAgIGxldCBlbGVnaWJsZVByb2R1Y3RzID0gW11cblxuICAgICAgICAgIGZvciAoY29uc3QgcHJvZHVjdCBvZiBjYW1wYWlnbi5wcm9kdWN0cykge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBwcm9kdWN0RGF0YSB9ID0gYXdhaXQgdGhpcy5wcm9kdWN0UmVwb3NpdG9yeS5maW5kKHsgZmlsdGVyczogeyBza3U6IHByb2R1Y3QgfSB9KVxuXG4gICAgICAgICAgICBpZiAoIXByb2R1Y3REYXRhLmxlbmd0aCkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgZ2lmdCA9IHByb2R1Y3REYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGdpZnQuc3RvY2sucXVhbnRpdHkgPCAxKSBjb250aW51ZVxuXG4gICAgICAgICAgICBlbGVnaWJsZVByb2R1Y3RzLnB1c2goZ2lmdClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYW1wYWluZ25Qcm9kdWN0cy5wdXNoKGVsZWdpYmxlUHJvZHVjdHMpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNhbXBhaW5nblByb2R1Y3RzLmxlbmd0aCkgcmV0dXJuIHsgLi4uY2hlY2tvdXQsIGxpbmVJdGVtczogbm90R2lmdEl0ZW1zIH0gYXMgQ2hlY2tvdXRcblxuICAgICAgICBjb25zdCBnaWZ0cyA9IHRoaXMuZ2lmdFRvTGluZUl0ZW1zKFtdLmNvbmNhdCguLi5jYW1wYWluZ25Qcm9kdWN0cykpXG5cbiAgICAgICAgcmV0dXJuIHsgLi4uY2hlY2tvdXQsIGxpbmVJdGVtczogbm90R2lmdEl0ZW1zLmNvbmNhdChnaWZ0cykgfVxuICAgICAgfSksXG4gICAgICBjb25jYXRNYXAoKGNoZWNrb3V0KSA9PiB0aGlzLmNoZWNrb3V0U2VydmljZS51cGRhdGVDaGVja291dExpbmVJdGVtcyhjaGVja291dCkpLFxuICAgICAgbWFwKChjaGVja291dCkgPT4gdGhpcy5nZW5lcmF0ZUNhcnRPYmplY3QoY2hlY2tvdXQubGluZUl0ZW1zKSksXG4gICAgICB0YXAoKGNhcnQpID0+IHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KSksXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnaWZ0VG9MaW5lSXRlbXMoaXRlbXM6IFByb2R1Y3RbXSk6IExpbmVJdGVtW10ge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHsgYnJhbmQsIGNhdGVnb3JpZXMsIGlkLCBuYW1lLCBwcmljZSwgc2t1LCBzbHVnLCBzdG9jaywgd2VpZ2h0LCBFQU4gfSA9IGl0ZW1cblxuICAgICAgY29uc3QgaW1hZ2UgPSBpdGVtPy5taW5pYXR1cmVzPy5sZW5ndGggPyBpdGVtLm1pbmlhdHVyZXNbMF0gOiBpdGVtLmltYWdlc1swXVxuXG4gICAgICByZXR1cm4gTGluZUl0ZW0udG9JbnN0YW5jZSh7XG4gICAgICAgIGJyYW5kLFxuICAgICAgICBjYXRlZ29yaWVzLFxuICAgICAgICBpZDogaWQudG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcHJpY2UsXG4gICAgICAgIHNrdSxcbiAgICAgICAgc2x1ZyxcbiAgICAgICAgc3RvY2ssXG4gICAgICAgIHdlaWdodCxcbiAgICAgICAgRUFOLFxuICAgICAgICBpbWFnZSxcbiAgICAgICAgcHJpY2VQYWlkOiAwLFxuICAgICAgICBxdWFudGl0eTogMSxcbiAgICAgICAgaXNHaWZ0OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG4iXX0=
|