@infrab4a/connect-angular 5.0.0-beta.9 → 5.0.0-beta.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/angular-connect.module.d.ts +14 -8
  2. package/angular-firestore.module.d.ts +1 -2
  3. package/angular-hasura-graphql.module.d.ts +1 -1
  4. package/angular-vertex-search.module.d.ts +9 -0
  5. package/consts/firebase-const.d.ts +1 -0
  6. package/consts/index.d.ts +1 -0
  7. package/consts/vertex-config.const.d.ts +1 -0
  8. package/esm2022/angular-connect.module.mjs +187 -0
  9. package/esm2022/angular-elastic-search.module.mjs +34 -0
  10. package/esm2022/angular-firebase-auth.module.mjs +141 -0
  11. package/esm2022/angular-firestore.module.mjs +527 -0
  12. package/esm2022/angular-hasura-graphql.module.mjs +331 -0
  13. package/esm2022/angular-vertex-search.module.mjs +34 -0
  14. package/{esm2020 → esm2022}/consts/firebase-const.mjs +2 -1
  15. package/{esm2020 → esm2022}/consts/index.mjs +2 -1
  16. package/esm2022/consts/vertex-config.const.mjs +2 -0
  17. package/esm2022/persistence/cookie-data-persistence.mjs +22 -0
  18. package/{esm2020 → esm2022}/services/auth.service.mjs +6 -6
  19. package/esm2022/services/cart.service.mjs +86 -0
  20. package/esm2022/services/catalog/adapters/new-category-structure.adapter.mjs +43 -0
  21. package/{esm2020 → esm2022}/services/catalog/adapters/old-category-structure.adapter.mjs +6 -6
  22. package/esm2022/services/catalog/catalog.service.mjs +295 -0
  23. package/{esm2020 → esm2022}/services/catalog/category.service.mjs +6 -6
  24. package/{esm2020 → esm2022}/services/catalog/models/category-with-tree.model.mjs +1 -1
  25. package/esm2022/services/catalog/wishlist.service.mjs +235 -0
  26. package/{esm2020 → esm2022}/services/checkout-subscription.service.mjs +6 -6
  27. package/esm2022/services/checkout.service.mjs +122 -0
  28. package/esm2022/services/coupon.service.mjs +228 -0
  29. package/{esm2020 → esm2022}/services/home-shop.service.mjs +9 -9
  30. package/{esm2020 → esm2022}/services/index.mjs +1 -2
  31. package/{esm2020 → esm2022}/services/order.service.mjs +6 -6
  32. package/{fesm2020 → fesm2022}/infrab4a-connect-angular.mjs +1497 -1280
  33. package/fesm2022/infrab4a-connect-angular.mjs.map +1 -0
  34. package/package.json +9 -15
  35. package/services/cart.service.d.ts +8 -19
  36. package/services/catalog/catalog.service.d.ts +11 -4
  37. package/services/catalog/wishlist.service.d.ts +16 -4
  38. package/services/checkout.service.d.ts +16 -6
  39. package/services/coupon.service.d.ts +0 -2
  40. package/services/index.d.ts +0 -1
  41. package/esm2020/angular-connect.module.mjs +0 -115
  42. package/esm2020/angular-elastic-search.module.mjs +0 -34
  43. package/esm2020/angular-firebase-auth.module.mjs +0 -115
  44. package/esm2020/angular-firestore.module.mjs +0 -502
  45. package/esm2020/angular-hasura-graphql.module.mjs +0 -265
  46. package/esm2020/persistence/cookie-data-persistence.mjs +0 -23
  47. package/esm2020/services/cart.service.mjs +0 -281
  48. package/esm2020/services/catalog/adapters/new-category-structure.adapter.mjs +0 -41
  49. package/esm2020/services/catalog/catalog.service.mjs +0 -185
  50. package/esm2020/services/catalog/wishlist.service.mjs +0 -115
  51. package/esm2020/services/checkout.service.mjs +0 -68
  52. package/esm2020/services/coupon.service.mjs +0 -235
  53. package/esm2020/services/shipping.service.mjs +0 -96
  54. package/esm2020/services/types/shipping-methods.type.mjs +0 -2
  55. package/fesm2015/infrab4a-connect-angular.mjs +0 -2408
  56. package/fesm2015/infrab4a-connect-angular.mjs.map +0 -1
  57. package/fesm2020/infrab4a-connect-angular.mjs.map +0 -1
  58. package/services/shipping.service.d.ts +0 -19
  59. package/services/types/shipping-methods.type.d.ts +0 -12
  60. /package/{esm2020 → esm2022}/consts/backend-url.const.mjs +0 -0
  61. /package/{esm2020 → esm2022}/consts/category-structure.mjs +0 -0
  62. /package/{esm2020 → esm2022}/consts/default-shop.const.mjs +0 -0
  63. /package/{esm2020 → esm2022}/consts/es-config.const.mjs +0 -0
  64. /package/{esm2020 → esm2022}/consts/hasura-options.const.mjs +0 -0
  65. /package/{esm2020 → esm2022}/consts/persistence.const.mjs +0 -0
  66. /package/{esm2020 → esm2022}/consts/storage-base-url.const.mjs +0 -0
  67. /package/{esm2020 → esm2022}/helpers/index.mjs +0 -0
  68. /package/{esm2020 → esm2022}/helpers/mobile-operation-system-checker.helper.mjs +0 -0
  69. /package/{esm2020 → esm2022}/index.mjs +0 -0
  70. /package/{esm2020 → esm2022}/infrab4a-connect-angular.mjs +0 -0
  71. /package/{esm2020 → esm2022}/persistence/data-persistence.mjs +0 -0
  72. /package/{esm2020 → esm2022}/persistence/index.mjs +0 -0
  73. /package/{esm2020 → esm2022}/services/catalog/adapters/category-structure.adapter.mjs +0 -0
  74. /package/{esm2020 → esm2022}/services/catalog/adapters/index.mjs +0 -0
  75. /package/{esm2020 → esm2022}/services/catalog/enums/index.mjs +0 -0
  76. /package/{esm2020 → esm2022}/services/catalog/enums/product-sorts.enum.mjs +0 -0
  77. /package/{esm2020 → esm2022}/services/catalog/index.mjs +0 -0
  78. /package/{esm2020 → esm2022}/services/catalog/models/index.mjs +0 -0
  79. /package/{esm2020 → esm2022}/services/catalog/types/index.mjs +0 -0
  80. /package/{esm2020 → esm2022}/services/catalog/types/product-sort.type.mjs +0 -0
  81. /package/{esm2020 → esm2022}/services/helpers/index.mjs +0 -0
  82. /package/{esm2020 → esm2022}/services/helpers/util.helper.mjs +0 -0
  83. /package/{esm2020 → esm2022}/services/types/index.mjs +0 -0
  84. /package/{esm2020 → esm2022}/services/types/required-checkout-data.type.mjs +0 -0
  85. /package/{esm2020 → esm2022}/services/types/required-checkout-subscription-data.type.mjs +0 -0
  86. /package/{esm2020 → esm2022}/types/firebase-app-config.type.mjs +0 -0
  87. /package/{esm2020 → esm2022}/types/index.mjs +0 -0
@@ -1,235 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { CheckoutTypes, CouponTypes, Exclusivities, Shops, Where, } from '@infrab4a/connect';
3
- import { from, of } from 'rxjs';
4
- import { concatMap, map } from 'rxjs/operators';
5
- import { DEFAULT_SHOP } from '../consts';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@infrab4a/connect";
8
- export class CouponService {
9
- constructor(couponRepository, defaultShop, orderRepository, categoryRepository) {
10
- this.couponRepository = couponRepository;
11
- this.defaultShop = defaultShop;
12
- this.orderRepository = orderRepository;
13
- this.categoryRepository = categoryRepository;
14
- this.emailIsFromCollaborator = (userEmail) => !!userEmail?.match(/@b4a.com.br/g);
15
- }
16
- checkCoupon(nickname, checkoutType, checkout, plan) {
17
- return from(this.couponRepository
18
- .find({
19
- filters: {
20
- nickname: { operator: Where.EQUALS, value: nickname },
21
- active: { operator: Where.EQUALS, value: true },
22
- },
23
- })
24
- .then((result) => result.data[0])).pipe(concatMap((coupon) => this.couponValidation(coupon, checkoutType)), concatMap((couponValid) => this.couponRulesValidation(couponValid, checkoutType, checkout, plan)), map((couponValidated) => couponValidated));
25
- }
26
- async couponValidation(coupon, checkoutType) {
27
- if (!coupon)
28
- throw 'Cupom inválido.';
29
- if (coupon?.beginAt && coupon?.beginAt.getTime() > new Date().getTime())
30
- throw 'Cupom inválido.';
31
- if (coupon?.expiresIn && coupon?.expiresIn.getTime() < new Date().getTime())
32
- throw 'Cupom expirado.';
33
- const isInShop = coupon.shopAvailability === Shops.ALL || coupon.shopAvailability === this.defaultShop;
34
- if (!isInShop)
35
- throw 'Cupom inválido para loja.';
36
- const isCheckoutType = coupon.checkoutType === CheckoutTypes.ALL || coupon.checkoutType === checkoutType;
37
- if (!isCheckoutType)
38
- throw 'Cupom inválido. Erro de checkout.';
39
- return coupon;
40
- }
41
- async couponRulesValidation(coupon, checkoutType, checkout, plan) {
42
- if (checkoutType == CheckoutTypes.SUBSCRIPTION) {
43
- if (coupon.plan && coupon.plan.toUpperCase() !== plan.toUpperCase())
44
- throw 'Cupom inválido para sua assinatura.';
45
- return coupon;
46
- }
47
- const validUser = this.coupomUserValidation(coupon, checkout?.user);
48
- if (!validUser)
49
- throw 'Usuário não elegível.';
50
- const couponUseLimits = this.getCouponUseLimits(coupon, checkoutType, checkout.user);
51
- if (couponUseLimits.firstOrder) {
52
- const ordersUser = await this.getOrdersFromUser(checkout.user.email.toLocaleLowerCase());
53
- if (couponUseLimits.firstOrder && ordersUser.length >= 1)
54
- throw 'Limite de uso atingido';
55
- }
56
- if (!couponUseLimits.unlimited || couponUseLimits.limitedPerUser) {
57
- const orders = await this.getOrdersWithCoupon(coupon);
58
- if (!couponUseLimits.unlimited && couponUseLimits.total && orders.length >= couponUseLimits.total)
59
- throw 'Limite de uso atingido.';
60
- if (couponUseLimits.limitedPerUser) {
61
- const ordersWithUser = this.countOrdersWithUser(orders, checkout.user.email);
62
- if (ordersWithUser > 0)
63
- throw 'Limite de uso por usuário atingido.';
64
- }
65
- }
66
- const hasProductCategories = await this.hasProductCategories(coupon, checkout);
67
- if (!hasProductCategories)
68
- throw 'Seu carrinho não possui produtos elegíveis para desconto.';
69
- const hasMinSubTotal = await this.hasMinSubTotal(coupon, checkout);
70
- if (!hasMinSubTotal)
71
- throw `Valor mínimo de ${Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(coupon.minSubTotalValue)} não atingido`;
72
- return coupon;
73
- }
74
- calcDiscountSubscription(coupon, checkout) {
75
- let discount = 0;
76
- if (coupon.discount.subscription.type == CouponTypes.ABSOLUTE)
77
- discount = coupon.discount.subscription.value;
78
- else
79
- discount = checkout.subscriptionPlan.recurrencePrice * (coupon.discount.subscription.value / 100);
80
- return of(discount);
81
- }
82
- async calcDiscountShopping(coupon, checkout) {
83
- let discount = 0;
84
- if (checkout.user.isSubscriber && coupon.discount.subscriber.value) {
85
- discount = await this.calcDiscountByType(coupon.discount.subscriber.type, coupon.discount.subscriber.value, coupon.productsCategories, checkout);
86
- }
87
- else {
88
- discount = await this.calcDiscountByType(coupon.discount.non_subscriber.type, coupon.discount.non_subscriber.value, coupon.productsCategories, checkout);
89
- }
90
- return discount;
91
- }
92
- async calcDiscountByType(type, value, categories, checkout) {
93
- let discount = 0;
94
- let lineItensDiscount = await this.getLineItensEligebleForDiscount(categories, checkout);
95
- const subTotal = this.calcCheckoutSubtotal(lineItensDiscount, checkout.user, checkout.shop);
96
- if (type == CouponTypes.ABSOLUTE) {
97
- discount = value > subTotal ? subTotal : value;
98
- }
99
- else {
100
- discount = subTotal * (value / 100);
101
- }
102
- return discount;
103
- }
104
- async hasMinSubTotal(coupon, checkout) {
105
- if (!coupon.minSubTotalValue)
106
- return true;
107
- let lineItensDiscount = await this.getLineItensEligebleForDiscount(coupon.productsCategories, checkout);
108
- const subTotal = this.calcCheckoutSubtotal(lineItensDiscount, checkout.user, checkout.shop);
109
- if (coupon.minSubTotalValue <= subTotal)
110
- return true;
111
- return false;
112
- }
113
- async hasProductCategories(coupon, checkout) {
114
- if (!coupon.productsCategories || !coupon.productsCategories.length) {
115
- return true;
116
- }
117
- const couponCategories = await this.getCouponCategoriesId(coupon.productsCategories);
118
- const hasCategories = checkout.lineItems?.filter((i) => {
119
- if (!i.categories || !i.categories?.length)
120
- return true;
121
- return i.categories.some((c) => couponCategories.some((cat) => cat == c));
122
- });
123
- return hasCategories.length ? true : false;
124
- }
125
- coupomUserValidation(coupon, user) {
126
- if (!user || coupon.exclusivityType.includes(Exclusivities.ALL_USERS))
127
- return true;
128
- let userTypes = [];
129
- if (coupon.exclusivityType.includes(Exclusivities.COLLABORATORS) &&
130
- this.emailIsFromCollaborator(user.email.toLocaleLowerCase()))
131
- userTypes.push(Exclusivities.COLLABORATORS);
132
- if (coupon.exclusivityType.includes(Exclusivities.SPECIFIC_USER) &&
133
- coupon.userExclusiveEmail.includes(user.email.toLocaleLowerCase()))
134
- userTypes.push(Exclusivities.SPECIFIC_USER);
135
- if (coupon.exclusivityType.includes(Exclusivities.ACTIVE_SUBSCRIBER) &&
136
- user.isSubscriber &&
137
- user.subscriptionPlan != '')
138
- userTypes.push(Exclusivities.ACTIVE_SUBSCRIBER);
139
- if (user.isSubscriber &&
140
- user.subscriptionPlan == '' &&
141
- coupon.exclusivityType.includes(Exclusivities.INACTIVE_SUBSCRIBER))
142
- userTypes.push(Exclusivities.INACTIVE_SUBSCRIBER);
143
- if (coupon.exclusivityType.includes(Exclusivities.NON_SUBSCRIBER) && !user.isSubscriber)
144
- userTypes.push(Exclusivities.NON_SUBSCRIBER);
145
- return coupon.exclusivityType.some((r) => userTypes.includes(r));
146
- }
147
- async getCouponCategoriesId(productsCategories) {
148
- const couponCategories = [];
149
- for (let index = 0; index < productsCategories.length; index++) {
150
- const category = await this.categoryRepository.get({
151
- id: productsCategories[index],
152
- });
153
- if (category) {
154
- const children = await this.categoryRepository.getChildren(parseInt(productsCategories[index]));
155
- couponCategories.push(category.id, ...children.map((c) => c.id.toString()));
156
- }
157
- }
158
- return [...new Set(couponCategories)];
159
- }
160
- async getLineItensEligebleForDiscount(productsCategories, checkout) {
161
- let lineItensDiscount = [];
162
- const couponCategories = await this.getCouponCategoriesId(productsCategories);
163
- if (productsCategories && productsCategories.length) {
164
- lineItensDiscount = checkout.lineItems?.filter((i) => {
165
- if (i.categories?.length) {
166
- return i.categories.some((c) => couponCategories.some((cat) => cat == c));
167
- }
168
- return true;
169
- });
170
- }
171
- else {
172
- lineItensDiscount = checkout.lineItems;
173
- }
174
- return lineItensDiscount;
175
- }
176
- calcCheckoutSubtotal(lineItens, user, shop) {
177
- return (lineItens?.reduce((acc, curr) => user?.isSubscriber && curr.price.subscriberPrice
178
- ? acc + curr.price?.subscriberPrice * curr.quantity
179
- : acc + curr.pricePaid * curr.quantity, 0) || 0);
180
- }
181
- async getOrdersWithCoupon(coupon) {
182
- return await this.orderRepository
183
- .find({
184
- filters: {
185
- coupon: { id: coupon.id },
186
- payment: { status: 'paid' },
187
- },
188
- })
189
- .then((result) => result.data);
190
- }
191
- async getOrdersFromUser(email) {
192
- return await this.orderRepository
193
- .find({
194
- filters: {
195
- user: { email: { operator: Where.EQUALS, value: email } },
196
- payment: { status: 'paid' },
197
- },
198
- })
199
- .then((result) => result.data);
200
- }
201
- countOrdersWithUser(orders, email) {
202
- return orders.filter((o) => o.user.email == email).length;
203
- }
204
- getCouponUseLimits(coupon, checkoutType, user) {
205
- let couponUseLimits;
206
- if (checkoutType == CheckoutTypes.ECOMMERCE || checkoutType == CheckoutTypes.ALL) {
207
- couponUseLimits = user && user.isSubscriber ? coupon.useLimits.subscriber : coupon.useLimits.non_subscriber;
208
- }
209
- else {
210
- couponUseLimits = coupon.useLimits.subscription;
211
- }
212
- return couponUseLimits;
213
- }
214
- }
215
- CouponService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CouponService, deps: [{ token: 'CouponRepository' }, { token: DEFAULT_SHOP }, { token: 'OrderRepository' }, { token: 'CategoryRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
216
- CouponService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CouponService, providedIn: 'root' });
217
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CouponService, decorators: [{
218
- type: Injectable,
219
- args: [{
220
- providedIn: 'root',
221
- }]
222
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
223
- type: Inject,
224
- args: ['CouponRepository']
225
- }] }, { type: i1.Shops, decorators: [{
226
- type: Inject,
227
- args: [DEFAULT_SHOP]
228
- }] }, { type: undefined, decorators: [{
229
- type: Inject,
230
- args: ['OrderRepository']
231
- }] }, { type: undefined, decorators: [{
232
- type: Inject,
233
- args: ['CategoryRepository']
234
- }] }]; } });
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFLTCxhQUFhLEVBR2IsV0FBVyxFQUNYLGFBQWEsRUFJYixLQUFLLEVBRUwsS0FBSyxHQUNOLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFjLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBOzs7QUFLeEMsTUFBTSxPQUFPLGFBQWE7SUFDeEIsWUFDK0MsZ0JBQWtDLEVBQ3hDLFdBQWtCLEVBQ2IsZUFBZ0MsRUFDN0Isa0JBQXNDO1FBSHhDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDeEMsZ0JBQVcsR0FBWCxXQUFXLENBQU87UUFDYixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDN0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQW1PL0UsNEJBQXVCLEdBQUcsQ0FBQyxTQUFpQixFQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQWxPakcsQ0FBQztJQUVKLFdBQVcsQ0FDVCxRQUFnQixFQUNoQixZQUEyQixFQUMzQixRQUEyQixFQUMzQixJQUFZO1FBRVosT0FBTyxJQUFJLENBQ1QsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixJQUFJLENBQUM7WUFDSixPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FB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YXIvY29yZSdcbmltcG9ydCB7XG4gIENhdGVnb3J5LFxuICBDYXRlZ29yeVJlcG9zaXRvcnksXG4gIENoZWNrb3V0LFxuICBDaGVja291dFN1YnNjcmlwdGlvbixcbiAgQ2hlY2tvdXRUeXBlcyxcbiAgQ291cG9uLFxuICBDb3Vwb25SZXBvc2l0b3J5LFxuICBDb3Vwb25UeXBlcyxcbiAgRXhjbHVzaXZpdGllcyxcbiAgTGluZUl0ZW0sXG4gIE9yZGVyLFxuICBPcmRlclJlcG9zaXRvcnksXG4gIFNob3BzLFxuICBVc2VyLFxuICBXaGVyZSxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vY29uc3RzJ1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ291cG9uU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ0NvdXBvblJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IGNvdXBvblJlcG9zaXRvcnk6IENvdXBvblJlcG9zaXRvcnksXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNob3A6IFNob3BzLFxuICAgIEBJbmplY3QoJ09yZGVyUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgb3JkZXJSZXBvc2l0b3J5OiBPcmRlclJlcG9zaXRvcnksXG4gICAgQEluamVjdCgnQ2F0ZWdvcnlSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVJlcG9zaXRvcnk6IENhdGVnb3J5UmVwb3NpdG9yeSxcbiAgKSB7fVxuXG4gIGNoZWNrQ291cG9uKFxuICAgIG5pY2tuYW1lOiBzdHJpbmcsXG4gICAgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzLFxuICAgIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0PixcbiAgICBwbGFuOiBzdHJpbmcsXG4gICk6IE9ic2VydmFibGU8Q291cG9uPiB7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmNvdXBvblJlcG9zaXRvcnlcbiAgICAgICAgLmZpbmQoe1xuICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgIG5pY2tuYW1lOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiBuaWNrbmFtZSB9LFxuICAgICAgICAgICAgYWN0aXZlOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiB0cnVlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGFbMF0pLFxuICAgICkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoY291cG9uKSA9PiB0aGlzLmNvdXBvblZhbGlkYXRpb24oY291cG9uLCBjaGVja291dFR5cGUpKSxcbiAgICAgIGNvbmNhdE1hcCgoY291cG9uVmFsaWQ6IENvdXBvbikgPT4gdGhpcy5jb3Vwb25SdWxlc1ZhbGlkYXRpb24oY291cG9uVmFsaWQsIGNoZWNrb3V0VHlwZSwgY2hlY2tvdXQsIHBsYW4pKSxcbiAgICAgIG1hcCgoY291cG9uVmFsaWRhdGVkOiBDb3Vwb24pID0+IGNvdXBvblZhbGlkYXRlZCBhcyBDb3Vwb24pLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY291cG9uVmFsaWRhdGlvbihjb3Vwb246IENvdXBvbiwgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzKSB7XG4gICAgaWYgKCFjb3Vwb24pIHRocm93ICdDdXBvbSBpbnbDoWxpZG8uJ1xuXG4gICAgaWYgKGNvdXBvbj8uYmVnaW5BdCAmJiBjb3Vwb24/LmJlZ2luQXQuZ2V0VGltZSgpID4gbmV3IERhdGUoKS5nZXRUaW1lKCkpIHRocm93ICdDdXBvbSBpbnbDoWxpZG8uJ1xuXG4gICAgaWYgKGNvdXBvbj8uZXhwaXJlc0luICYmIGNvdXBvbj8uZXhwaXJlc0luLmdldFRpbWUoKSA8IG5ldyBEYXRlKCkuZ2V0VGltZSgpKSB0aHJvdyAnQ3Vwb20gZXhwaXJhZG8uJ1xuXG4gICAgY29uc3QgaXNJblNob3AgPSBjb3Vwb24uc2hvcEF2YWlsYWJpbGl0eSA9PT0gU2hvcHMuQUxMIHx8IGNvdXBvbi5zaG9wQXZhaWxhYmlsaXR5ID09PSB0aGlzLmRlZmF1bHRTaG9wXG5cbiAgICBpZiAoIWlzSW5TaG9wKSB0aHJvdyAnQ3Vwb20gaW52w6FsaWRvIHBhcmEgbG9qYS4nXG5cbiAgICBjb25zdCBpc0NoZWNrb3V0VHlwZSA9IGNvdXBvbi5jaGVja291dFR5cGUgPT09IENoZWNrb3V0VHlwZXMuQUxMIHx8IGNvdXBvbi5jaGVja291dFR5cGUgPT09IGNoZWNrb3V0VHlwZVxuXG4gICAgaWYgKCFpc0NoZWNrb3V0VHlwZSkgdGhyb3cgJ0N1cG9tIGludsOhbGlkby4gRXJybyBkZSBjaGVja291dC4nXG5cbiAgICByZXR1cm4gY291cG9uXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvdXBvblJ1bGVzVmFsaWRhdGlvbihcbiAgICBjb3Vwb246IENvdXBvbixcbiAgICBjaGVja291dFR5cGU6IENoZWNrb3V0VHlwZXMsXG4gICAgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+LFxuICAgIHBsYW46IHN0cmluZyxcbiAgKSB7XG4gICAgaWYgKGNoZWNrb3V0VHlwZSA9PSBDaGVja291dFR5cGVzLlNVQlNDUklQVElPTikge1xuICAgICAgaWYgKGNvdXBvbi5wbGFuICYmIGNvdXBvbi5wbGFuLnRvVXBwZXJDYXNlKCkgIT09IHBsYW4udG9VcHBlckNhc2UoKSkgdGhyb3cgJ0N1cG9tIGludsOhbGlkbyBwYXJhIHN1YSBhc3NpbmF0dXJhLidcblxuICAgICAgcmV0dXJuIGNvdXBvblxuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkVXNlciA9IHRoaXMuY291cG9tVXNlclZhbGlkYXRpb24oY291cG9uLCBjaGVja291dD8udXNlcilcblxuICAgIGlmICghdmFsaWRVc2VyKSB0aHJvdyAnVXN1w6FyaW8gbsOjbyBlbGVnw612ZWwuJ1xuXG4gICAgY29uc3QgY291cG9uVXNlTGltaXRzID0gdGhpcy5nZXRDb3Vwb25Vc2VMaW1pdHMoY291cG9uLCBjaGVja291dFR5cGUsIGNoZWNrb3V0LnVzZXIpXG5cbiAgICBpZiAoY291cG9uVXNlTGltaXRzLmZpcnN0T3JkZXIpIHtcbiAgICAgIGNvbnN0IG9yZGVyc1VzZXIgPSBhd2FpdCB0aGlzLmdldE9yZGVyc0Zyb21Vc2VyKGNoZWNrb3V0LnVzZXIuZW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKSlcbiAgICAgIGlmIChjb3Vwb25Vc2VMaW1pdHMuZmlyc3RPcmRlciAmJiBvcmRlcnNVc2VyLmxlbmd0aCA+PSAxKSB0aHJvdyAnTGltaXRlIGRlIHVzbyBhdGluZ2lkbydcbiAgICB9XG5cbiAgICBpZiAoIWNvdXBvblVzZUxpbWl0cy51bmxpbWl0ZWQgfHwgY291cG9uVXNlTGltaXRzLmxpbWl0ZWRQZXJVc2VyKSB7XG4gICAgICBjb25zdCBvcmRlcnMgPSBhd2FpdCB0aGlzLmdldE9yZGVyc1dpdGhDb3Vwb24oY291cG9uKVxuXG4gICAgICBpZiAoIWNvdXBvblVzZUxpbWl0cy51bmxpbWl0ZWQgJiYgY291cG9uVXNlTGltaXRzLnRvdGFsICYmIG9yZGVycy5sZW5ndGggPj0gY291cG9uVXNlTGltaXRzLnRvdGFsKVxuICAgICAgICB0aHJvdyAnTGltaXRlIGRlIHVzbyBhdGluZ2lkby4nXG5cbiAgICAgIGlmIChjb3Vwb25Vc2VMaW1pdHMubGltaXRlZFBlclVzZXIpIHtcbiAgICAgICAgY29uc3Qgb3JkZXJzV2l0aFVzZXIgPSB0aGlzLmNvdW50T3JkZXJzV2l0aFVzZXIob3JkZXJzLCBjaGVja291dC51c2VyLmVtYWlsKVxuXG4gICAgICAgIGlmIChvcmRlcnNXaXRoVXNlciA+IDApIHRocm93ICdMaW1pdGUgZGUgdXNvIHBvciB1c3XDoXJpbyBhdGluZ2lkby4nXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFzUHJvZHVjdENhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmhhc1Byb2R1Y3RDYXRlZ29yaWVzKGNvdXBvbiwgY2hlY2tvdXQpXG5cbiAgICBpZiAoIWhhc1Byb2R1Y3RDYXRlZ29yaWVzKSB0aHJvdyAnU2V1IGNhcnJpbmhvIG7Do28gcG9zc3VpIHByb2R1dG9zIGVsZWfDrXZlaXMgcGFyYSBkZXNjb250by4nXG5cbiAgICBjb25zdCBoYXNNaW5TdWJUb3RhbCA9IGF3YWl0IHRoaXMuaGFzTWluU3ViVG90YWwoY291cG9uLCBjaGVja291dClcblxuICAgIGlmICghaGFzTWluU3ViVG90YWwpXG4gICAgICB0aHJvdyBgVmFsb3IgbcOtbmltbyBkZSAke0ludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHsgc3R5bGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5OiAnQlJMJyB9KS5mb3JtYXQoXG4gICAgICAgIGNvdXBvbi5taW5TdWJUb3RhbFZhbHVlLFxuICAgICAgKX0gbsOjbyBhdGluZ2lkb2BcblxuICAgIHJldHVybiBjb3Vwb25cbiAgfVxuXG4gIHB1YmxpYyBjYWxjRGlzY291bnRTdWJzY3JpcHRpb24oY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0U3Vic2NyaXB0aW9uPik6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgbGV0IGRpc2NvdW50ID0gMFxuXG4gICAgaWYgKGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpcHRpb24udHlwZSA9PSBDb3Vwb25UeXBlcy5BQlNPTFVURSkgZGlzY291bnQgPSBjb3Vwb24uZGlzY291bnQuc3Vic2NyaXB0aW9uLnZhbHVlXG4gICAgZWxzZSBkaXNjb3VudCA9IGNoZWNrb3V0LnN1YnNjcmlwdGlvblBsYW4ucmVjdXJyZW5jZVByaWNlICogKGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpcHRpb24udmFsdWUgLyAxMDApXG5cbiAgICByZXR1cm4gb2YoZGlzY291bnQpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2FsY0Rpc2NvdW50U2hvcHBpbmcoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IGRpc2NvdW50ID0gMFxuXG4gICAgaWYgKGNoZWNrb3V0LnVzZXIuaXNTdWJzY3JpYmVyICYmIGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpYmVyLnZhbHVlKSB7XG4gICAgICBkaXNjb3VudCA9IGF3YWl0IHRoaXMuY2FsY0Rpc2NvdW50QnlUeXBlKFxuICAgICAgICBjb3Vwb24uZGlzY291bnQuc3Vic2NyaWJlci50eXBlLFxuICAgICAgICBjb3Vwb24uZGlzY291bnQuc3Vic2NyaWJlci52YWx1ZSxcbiAgICAgICAgY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcyxcbiAgICAgICAgY2hlY2tvdXQsXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc2NvdW50ID0gYXdhaXQgdGhpcy5jYWxjRGlzY291bnRCeVR5cGUoXG4gICAgICAgIGNvdXBvbi5kaXNjb3VudC5ub25fc3Vic2NyaWJlci50eXBlLFxuICAgICAgICBjb3Vwb24uZGlzY291bnQubm9uX3N1YnNjcmliZXIudmFsdWUsXG4gICAgICAgIGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMsXG4gICAgICAgIGNoZWNrb3V0LFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNjb3VudFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxjRGlzY291bnRCeVR5cGUoXG4gICAgdHlwZTogQ291cG9uVHlwZXMsXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBjYXRlZ29yaWVzOiBzdHJpbmdbXSxcbiAgICBjaGVja291dDogUGFydGlhbDxDaGVja291dD4sXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IGRpc2NvdW50ID0gMFxuXG4gICAgbGV0IGxpbmVJdGVuc0Rpc2NvdW50ID0gYXdhaXQgdGhpcy5nZXRMaW5lSXRlbnNFbGlnZWJsZUZvckRpc2NvdW50KGNhdGVnb3JpZXMsIGNoZWNrb3V0KVxuXG4gICAgY29uc3Qgc3ViVG90YWwgPSB0aGlzLmNhbGNDaGVja291dFN1YnRvdGFsKGxpbmVJdGVuc0Rpc2NvdW50LCBjaGVja291dC51c2VyLCBjaGVja291dC5zaG9wKVxuXG4gICAgaWYgKHR5cGUgPT0gQ291cG9uVHlwZXMuQUJTT0xVVEUpIHtcbiAgICAgIGRpc2NvdW50ID0gdmFsdWUgPiBzdWJUb3RhbCA/IHN1YlRvdGFsIDogdmFsdWVcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzY291bnQgPSBzdWJUb3RhbCAqICh2YWx1ZSAvIDEwMClcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzY291bnRcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFzTWluU3ViVG90YWwoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghY291cG9uLm1pblN1YlRvdGFsVmFsdWUpIHJldHVybiB0cnVlXG5cbiAgICBsZXQgbGluZUl0ZW5zRGlzY291bnQgPSBhd2FpdCB0aGlzLmdldExpbmVJdGVuc0VsaWdlYmxlRm9yRGlzY291bnQoY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcywgY2hlY2tvdXQpXG5cbiAgICBjb25zdCBzdWJUb3RhbCA9IHRoaXMuY2FsY0NoZWNrb3V0U3VidG90YWwobGluZUl0ZW5zRGlzY291bnQsIGNoZWNrb3V0LnVzZXIsIGNoZWNrb3V0LnNob3ApXG5cbiAgICBpZiAoY291cG9uLm1pblN1YlRvdGFsVmFsdWUgPD0gc3ViVG90YWwpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFzUHJvZHVjdENhdGVnb3JpZXMoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcyB8fCAhY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgY291cG9uQ2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMpXG5cbiAgICBjb25zdCBoYXNDYXRlZ29yaWVzID0gY2hlY2tvdXQubGluZUl0ZW1zPy5maWx0ZXIoKGkpID0+IHtcbiAgICAgIGlmICghaS5jYXRlZ29yaWVzIHx8ICFpLmNhdGVnb3JpZXM/Lmxlbmd0aCkgcmV0dXJuIHRydWVcbiAgICAgIHJldHVybiBpLmNhdGVnb3JpZXMuc29tZSgoYykgPT4gY291cG9uQ2F0ZWdvcmllcy5zb21lKChjYXQpID0+IGNhdCA9PSBjKSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIGhhc0NhdGVnb3JpZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlXG4gIH1cblxuICBwcml2YXRlIGNvdXBvbVVzZXJWYWxpZGF0aW9uKGNvdXBvbjogQ291cG9uLCB1c2VyOiBVc2VyKSB7XG4gICAgaWYgKCF1c2VyIHx8IGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5BTExfVVNFUlMpKSByZXR1cm4gdHJ1ZVxuXG4gICAgbGV0IHVzZXJUeXBlczogRXhjbHVzaXZpdGllc1tdID0gW11cblxuICAgIGlmIChcbiAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKSAmJlxuICAgICAgdGhpcy5lbWFpbElzRnJvbUNvbGxhYm9yYXRvcih1c2VyLmVtYWlsLnRvTG9jYWxlTG93ZXJDYXNlKCkpXG4gICAgKVxuICAgICAgdXNlclR5cGVzLnB1c2goRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKVxuXG4gICAgaWYgKFxuICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLlNQRUNJRklDX1VTRVIpICYmXG4gICAgICBjb3Vwb24udXNlckV4Y2x1c2l2ZUVtYWlsLmluY2x1ZGVzKHVzZXIuZW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKSlcbiAgICApXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLlNQRUNJRklDX1VTRVIpXG5cbiAgICBpZiAoXG4gICAgICBjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLmluY2x1ZGVzKEV4Y2x1c2l2aXRpZXMuQUNUSVZFX1NVQlNDUklCRVIpICYmXG4gICAgICB1c2VyLmlzU3Vic2NyaWJlciAmJlxuICAgICAgdXNlci5zdWJzY3JpcHRpb25QbGFuICE9ICcnXG4gICAgKVxuICAgICAgdXNlclR5cGVzLnB1c2goRXhjbHVzaXZpdGllcy5BQ1RJVkVfU1VCU0NSSUJFUilcblxuICAgIGlmIChcbiAgICAgIHVzZXIuaXNTdWJzY3JpYmVyICYmXG4gICAgICB1c2VyLnN1YnNjcmlwdGlvblBsYW4gPT0gJycgJiZcbiAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5JTkFDVElWRV9TVUJTQ1JJQkVSKVxuICAgIClcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuSU5BQ1RJVkVfU1VCU0NSSUJFUilcblxuICAgIGlmIChjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLmluY2x1ZGVzKEV4Y2x1c2l2aXRpZXMuTk9OX1NVQlNDUklCRVIpICYmICF1c2VyLmlzU3Vic2NyaWJlcilcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuTk9OX1NVQlNDUklCRVIpXG5cbiAgICByZXR1cm4gY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5zb21lKChyKSA9PiB1c2VyVHlwZXMuaW5jbHVkZXMocikpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldENvdXBvbkNhdGVnb3JpZXNJZChwcm9kdWN0c0NhdGVnb3JpZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxBcnJheTxTdHJpbmc+PiB7XG4gICAgY29uc3QgY291cG9uQ2F0ZWdvcmllczogQXJyYXk8U3RyaW5nPiA9IFtdXG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcHJvZHVjdHNDYXRlZ29yaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgY2F0ZWdvcnk6IENhdGVnb3J5ICYgeyBmaXJlc3RvcmVJZD86IHN0cmluZyB9ID0gYXdhaXQgdGhpcy5jYXRlZ29yeVJlcG9zaXRvcnkuZ2V0KHtcbiAgICAgICAgaWQ6IHByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0sXG4gICAgICB9KVxuXG4gICAgICBpZiAoY2F0ZWdvcnkpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLmNhdGVnb3J5UmVwb3NpdG9yeS5nZXRDaGlsZHJlbihwYXJzZUludChwcm9kdWN0c0NhdGVnb3JpZXNbaW5kZXhdKSlcblxuICAgICAgICBjb3Vwb25DYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkuaWQsIC4uLmNoaWxkcmVuLm1hcCgoYykgPT4gYy5pZC50b1N0cmluZygpKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoY291cG9uQ2F0ZWdvcmllcyldXG4gIH1cblxuICBwcml2YXRlIGVtYWlsSXNGcm9tQ29sbGFib3JhdG9yID0gKHVzZXJFbWFpbDogc3RyaW5nKTogYm9vbGVhbiA9PiAhIXVzZXJFbWFpbD8ubWF0Y2goL0BiNGEuY29tLmJyL2cpXG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRMaW5lSXRlbnNFbGlnZWJsZUZvckRpc2NvdW50KFxuICAgIHByb2R1Y3RzQ2F0ZWdvcmllczogc3RyaW5nW10sXG4gICAgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+LFxuICApOiBQcm9taXNlPExpbmVJdGVtW10+IHtcbiAgICBsZXQgbGluZUl0ZW5zRGlzY291bnQgPSBbXVxuICAgIGNvbnN0IGNvdXBvbkNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmdldENvdXBvbkNhdGVnb3JpZXNJZChwcm9kdWN0c0NhdGVnb3JpZXMpXG5cbiAgICBpZiAocHJvZHVjdHNDYXRlZ29yaWVzICYmIHByb2R1Y3RzQ2F0ZWdvcmllcy5sZW5ndGgpIHtcbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50ID0gY2hlY2tvdXQubGluZUl0ZW1zPy5maWx0ZXIoKGkpID0+IHtcbiAgICAgICAgaWYgKGkuY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGkuY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0ID09IGMpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lSXRlbnNEaXNjb3VudCA9IGNoZWNrb3V0LmxpbmVJdGVtc1xuICAgIH1cblxuICAgIHJldHVybiBsaW5lSXRlbnNEaXNjb3VudFxuICB9XG5cbiAgcHJpdmF0ZSBjYWxjQ2hlY2tvdXRTdWJ0b3RhbChsaW5lSXRlbnM6IExpbmVJdGVtW10sIHVzZXI6IFVzZXIsIHNob3A6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIChcbiAgICAgIGxpbmVJdGVucz8ucmVkdWNlKFxuICAgICAgICAoYWNjLCBjdXJyKSA9PlxuICAgICAgICAgIHVzZXI/LmlzU3Vic2NyaWJlciAmJiBjdXJyLnByaWNlLnN1YnNjcmliZXJQcmljZVxuICAgICAgICAgICAgPyBhY2MgKyBjdXJyLnByaWNlPy5zdWJzY3JpYmVyUHJpY2UgKiBjdXJyLnF1YW50aXR5XG4gICAgICAgICAgICA6IGFjYyArIGN1cnIucHJpY2VQYWlkICogY3Vyci5xdWFudGl0eSxcbiAgICAgICAgMCxcbiAgICAgICkgfHwgMFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0T3JkZXJzV2l0aENvdXBvbihjb3Vwb246IENvdXBvbik6IFByb21pc2U8T3JkZXJbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm9yZGVyUmVwb3NpdG9yeVxuICAgICAgLmZpbmQoe1xuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgY291cG9uOiB7IGlkOiBjb3Vwb24uaWQgfSxcbiAgICAgICAgICBwYXltZW50OiB7IHN0YXR1czogJ3BhaWQnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGEpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldE9yZGVyc0Zyb21Vc2VyKGVtYWlsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vcmRlclJlcG9zaXRvcnlcbiAgICAgIC5maW5kKHtcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIHVzZXI6IHsgZW1haWw6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IGVtYWlsIH0gfSxcbiAgICAgICAgICBwYXltZW50OiB7IHN0YXR1czogJ3BhaWQnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGEpXG4gIH1cblxuICBwcml2YXRlIGNvdW50T3JkZXJzV2l0aFVzZXIob3JkZXJzOiBPcmRlcltdLCBlbWFpbDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gb3JkZXJzLmZpbHRlcigobykgPT4gby51c2VyLmVtYWlsID09IGVtYWlsKS5sZW5ndGhcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q291cG9uVXNlTGltaXRzKGNvdXBvbjogQ291cG9uLCBjaGVja291dFR5cGU6IENoZWNrb3V0VHlwZXMsIHVzZXI6IFVzZXIpIHtcbiAgICBsZXQgY291cG9uVXNlTGltaXRzOiB7IHVubGltaXRlZD86IGJvb2xlYW47IHRvdGFsPzogbnVtYmVyOyBsaW1pdGVkUGVyVXNlcj86IGJvb2xlYW47IGZpcnN0T3JkZXI/OiBib29sZWFuIH1cbiAgICBpZiAoY2hlY2tvdXRUeXBlID09IENoZWNrb3V0VHlwZXMuRUNPTU1FUkNFIHx8IGNoZWNrb3V0VHlwZSA9PSBDaGVja291dFR5cGVzLkFMTCkge1xuICAgICAgY291cG9uVXNlTGltaXRzID0gdXNlciAmJiB1c2VyLmlzU3Vic2NyaWJlciA/IGNvdXBvbi51c2VMaW1pdHMuc3Vic2NyaWJlciA6IGNvdXBvbi51c2VMaW1pdHMubm9uX3N1YnNjcmliZXJcbiAgICB9IGVsc2Uge1xuICAgICAgY291cG9uVXNlTGltaXRzID0gY291cG9uLnVzZUxpbWl0cy5zdWJzY3JpcHRpb25cbiAgICB9XG5cbiAgICByZXR1cm4gY291cG9uVXNlTGltaXRzXG4gIH1cbn1cbiJdfQ==
@@ -1,96 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { Inject, Injectable } from '@angular/core';
3
- import { Shops } from '@infrab4a/connect';
4
- import { combineLatest } from 'rxjs';
5
- import { map } from 'rxjs/operators';
6
- import { BACKEND_URL } from '../consts';
7
- import { HomeShopService } from './home-shop.service';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common/http";
10
- import * as i2 from "./home-shop.service";
11
- export class ShippingService {
12
- constructor(http, apiUrl, homeService) {
13
- this.http = http;
14
- this.apiUrl = apiUrl;
15
- this.homeService = homeService;
16
- }
17
- getShippingMethods(shop, zip, weightGrams, totalPrice, personId, subscriptionPlan) {
18
- return combineLatest([
19
- this.homeService.getHomeData(),
20
- this.http.get(`${this.apiUrl}open/checkshippingcompany?personId=${personId}&postalCode=${zip}&weightGrams=${weightGrams}`),
21
- ]).pipe(map(([datas, shippingMethodsResponse]) => {
22
- let shippingMethods = shippingMethodsResponse.result;
23
- if (!shippingMethods.length)
24
- return [];
25
- shippingMethods = shippingMethods.map((shippingMethod) => {
26
- if (shippingMethod.ShippingCompanyName == 'Same Day EG')
27
- shippingMethod.ShippingCompanyName = 'Same Day';
28
- return shippingMethod;
29
- });
30
- const datasSameDayNotAvaliable = datas.sameDayNotAvaliable;
31
- if (this.isHolidays(datasSameDayNotAvaliable)) {
32
- shippingMethods = shippingMethods.filter((method) => method.serviceName !== 'Same Day');
33
- }
34
- if (totalPrice >= 200) {
35
- shippingMethods = shippingMethods.map((s) => {
36
- if (s.serviceName !== 'Same Day')
37
- return { ...s, totalPrice: 0 };
38
- else
39
- return s;
40
- });
41
- }
42
- if (shop == Shops.GLAMSHOP)
43
- return shippingMethods;
44
- if (this.isFreeShippingBySubscription(shop, subscriptionPlan)) {
45
- shippingMethods = shippingMethods.map((s) => {
46
- if (s.serviceName == 'Same Day')
47
- return { ...s, totalPrice: s.totalPrice / 2 };
48
- else
49
- return { ...s, totalPrice: 0 };
50
- });
51
- }
52
- if (this.isHalfShippingBySubscription(shop, subscriptionPlan)) {
53
- shippingMethods = shippingMethods.map((s) => {
54
- return { ...s, totalPrice: s.totalPrice / 2 };
55
- });
56
- }
57
- return shippingMethods;
58
- }));
59
- }
60
- isFreeShippingBySubscription(shop, subscriptionPlan) {
61
- if (!subscriptionPlan)
62
- return false;
63
- if (shop == Shops.MENSMARKET && subscriptionPlan == 'SELECT')
64
- return true;
65
- return false;
66
- }
67
- isHalfShippingBySubscription(shop, subscriptionPlan) {
68
- if (!subscriptionPlan)
69
- return false;
70
- if (shop == Shops.MENSMARKET && subscriptionPlan == 'PRIME') {
71
- return true;
72
- }
73
- return false;
74
- }
75
- isHolidays(datas) {
76
- const today = new Date();
77
- for (const key in datas) {
78
- let start = new Date(`${today.getFullYear()}-${datas[key].beginDate}`);
79
- let end = new Date(`${today.getFullYear()}-${datas[key].endDate}`);
80
- if (start > end)
81
- end = new Date(`${today.getFullYear() + 1}-${datas[key].endDate}`);
82
- if (today >= start && today <= end)
83
- return true;
84
- }
85
- return false;
86
- }
87
- }
88
- ShippingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: ShippingService, deps: [{ token: i1.HttpClient }, { token: BACKEND_URL }, { token: i2.HomeShopService }], target: i0.ɵɵFactoryTarget.Injectable });
89
- ShippingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: ShippingService });
90
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: ShippingService, decorators: [{
91
- type: Injectable
92
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
93
- type: Inject,
94
- args: [BACKEND_URL]
95
- }] }, { type: i2.HomeShopService }]; } });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvc2VydmljZXMvc2hpcHBpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbEQsT0FBTyxFQUFRLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQy9DLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXBDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBOzs7O0FBSXJELE1BQU0sT0FBTyxlQUFlO0lBQzFCLFlBQ1UsSUFBZ0IsRUFDSyxNQUFjLEVBQ25DLFdBQTRCO1FBRjVCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDSyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ25DLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtJQUNuQyxDQUFDO0lBRUcsa0JBQWtCLENBQ3ZCLElBQVksRUFDWixHQUFXLEVBQ1gsV0FBbUIsRUFDbkIsVUFBa0IsRUFDbEIsUUFBZ0IsRUFDaEIsZ0JBQXlCO1FBRXpCLE9BQU8sYUFBYSxDQUFDO1lBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNYLEdBQUcsSUFBSSxDQUFDLE1BQU0sc0NBQXNDLFFBQVEsZUFBZSxHQUFHLGdCQUFnQixXQUFXLEVBQUUsQ0FDNUc7U0FDRixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFD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QUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFFeEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUU7WUFDdkIsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7WUFDdEUsSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFFbEUsSUFBSSxLQUFLLEdBQUcsR0FBRztnQkFBRSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO1lBRW5GLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLElBQUksR0FBRztnQkFBRSxPQUFPLElBQUksQ0FBQTtTQUNoRDtRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQzs7NEdBbEdVLGVBQWUsNENBR2hCLFdBQVc7Z0hBSFYsZUFBZTsyRkFBZixlQUFlO2tCQUQzQixVQUFVOzswQkFJTixNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgSG9tZSwgU2hvcHMgfSBmcm9tICdAaW5mcmFiNGEvY29ubmVjdCdcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IEJBQ0tFTkRfVVJMIH0gZnJvbSAnLi4vY29uc3RzJ1xuaW1wb3J0IHsgSG9tZVNob3BTZXJ2aWNlIH0gZnJvbSAnLi9ob21lLXNob3Auc2VydmljZSdcbmltcG9ydCB7IFNoaXBwaW5nTWV0aG9kUmVzcG9uc2UgfSBmcm9tICcuL3R5cGVzL3NoaXBwaW5nLW1ldGhvZHMudHlwZSdcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNoaXBwaW5nU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KEJBQ0tFTkRfVVJMKSBwcml2YXRlIGFwaVVybDogc3RyaW5nLFxuICAgIHByaXZhdGUgaG9tZVNlcnZpY2U6IEhvbWVTaG9wU2VydmljZSxcbiAgKSB7fVxuXG4gIHB1YmxpYyBnZXRTaGlwcGluZ01ldGhvZHMoXG4gICAgc2hvcDogc3RyaW5nLFxuICAgIHppcDogc3RyaW5nLFxuICAgIHdlaWdodEdyYW1zOiBudW1iZXIsXG4gICAgdG90YWxQcmljZTogbnVtYmVyLFxuICAgIHBlcnNvbklkOiBzdHJpbmcsXG4gICAgc3Vic2NyaXB0aW9uUGxhbj86IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxBcnJheTxTaGlwcGluZ01ldGhvZFJlc3BvbnNlICYgeyBTaGlwcGluZ0NvbXBhbnlOYW1lPzogc3RyaW5nIH0+PiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5ob21lU2VydmljZS5nZXRIb21lRGF0YSgpLFxuICAgICAgdGhpcy5odHRwLmdldChcbiAgICAgICAgYCR7dGhpcy5hcGlVcmx9b3Blbi9jaGVja3NoaXBwaW5nY29tcGFueT9wZXJzb25JZD0ke3BlcnNvbklkfSZwb3N0YWxDb2RlPSR7emlwfSZ3ZWlnaHRHcmFtcz0ke3dlaWdodEdyYW1zfWAsXG4gICAgICApLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtkYXRhcywgc2hpcHBpbmdNZXRob2RzUmVzcG9uc2VdOiBbSG9tZSAmIFBhcnRpYWw8eyBzYW1lRGF5Tm90QXZhbGlhYmxlOiBhbnkgfT4sIGFueV0pID0+IHtcbiAgICAgICAgbGV0IHNoaXBwaW5nTWV0aG9kcyA9IHNoaXBwaW5nTWV0aG9kc1Jlc3BvbnNlLnJlc3VsdCBhcyAoU2hpcHBpbmdNZXRob2RSZXNwb25zZSAmIHtcbiAgICAgICAgICBTaGlwcGluZ0NvbXBhbnlOYW1lPzogc3RyaW5nXG4gICAgICAgIH0pW11cblxuICAgICAgICBpZiAoIXNoaXBwaW5nTWV0aG9kcy5sZW5ndGgpIHJldHVybiBbXVxuXG4gICAgICAgIHNoaXBwaW5nTWV0aG9kcyA9IHNoaXBwaW5nTWV0aG9kcy5tYXAoKHNoaXBwaW5nTWV0aG9kKSA9PiB7XG4gICAgICAgICAgaWYgKHNoaXBwaW5nTWV0aG9kLlNoaXBwaW5nQ29tcGFueU5hbWUgPT0gJ1NhbWUgRGF5IEVHJykgc2hpcHBpbmdNZXRob2QuU2hpcHBpbmdDb21wYW55TmFtZSA9ICdTYW1lIERheSdcblxuICAgICAgICAgIHJldHVybiBzaGlwcGluZ01ldGhvZFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGRhdGFzU2FtZURheU5vdEF2YWxpYWJsZSA9IGRhdGFzLnNhbWVEYXlOb3RBdmFsaWFibGVcblxuICAgICAgICBpZiAodGhpcy5pc0hvbGlkYXlzKGRhdGFzU2FtZURheU5vdEF2YWxpYWJsZSkpIHtcbiAgICAgICAgICBzaGlwcGluZ01ldGhvZHMgPSBzaGlwcGluZ01ldGhvZHMuZmlsdGVyKChtZXRob2QpID0+IG1ldGhvZC5zZXJ2aWNlTmFtZSAhPT0gJ1NhbWUgRGF5JylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b3RhbFByaWNlID49IDIwMCkge1xuICAgICAgICAgIHNoaXBwaW5nTWV0aG9kcyA9IHNoaXBwaW5nTWV0aG9kcy5tYXAoKHMpID0+IHtcbiAgICAgICAgICAgIGlmIChzLnNlcnZpY2VOYW1lICE9PSAnU2FtZSBEYXknKSByZXR1cm4geyAuLi5zLCB0b3RhbFByaWNlOiAwIH1cbiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHNcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3AgPT0gU2hvcHMuR0xBTVNIT1ApIHJldHVybiBzaGlwcGluZ01ldGhvZHNcblxuICAgICAgICBpZiAodGhpcy5pc0ZyZWVTaGlwcGluZ0J5U3Vic2NyaXB0aW9uKHNob3AsIHN1YnNjcmlwdGlvblBsYW4pKSB7XG4gICAgICAgICAgc2hpcHBpbmdNZXRob2RzID0gc2hpcHBpbmdNZXRob2RzLm1hcCgocykgPT4ge1xuICAgICAgICAgICAgaWYgKHMuc2VydmljZU5hbWUgPT0gJ1NhbWUgRGF5JykgcmV0dXJuIHsgLi4ucywgdG90YWxQcmljZTogcy50b3RhbFByaWNlIC8gMiB9XG4gICAgICAgICAgICBlbHNlIHJldHVybiB7IC4uLnMsIHRvdGFsUHJpY2U6IDAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0hhbGZTaGlwcGluZ0J5U3Vic2NyaXB0aW9uKHNob3AsIHN1YnNjcmlwdGlvblBsYW4pKSB7XG4gICAgICAgICAgc2hpcHBpbmdNZXRob2RzID0gc2hpcHBpbmdNZXRob2RzLm1hcCgocykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4ucywgdG90YWxQcmljZTogcy50b3RhbFByaWNlIC8gMiB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzaGlwcGluZ01ldGhvZHNcbiAgICAgIH0pLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgaXNGcmVlU2hpcHBpbmdCeVN1YnNjcmlwdGlvbihzaG9wOiBzdHJpbmcsIHN1YnNjcmlwdGlvblBsYW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghc3Vic2NyaXB0aW9uUGxhbikgcmV0dXJuIGZhbHNlXG5cbiAgICBpZiAoc2hvcCA9PSBTaG9wcy5NRU5TTUFSS0VUICYmIHN1YnNjcmlwdGlvblBsYW4gPT0gJ1NFTEVDVCcpIHJldHVybiB0cnVlXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgaXNIYWxmU2hpcHBpbmdCeVN1YnNjcmlwdGlvbihzaG9wOiBzdHJpbmcsIHN1YnNjcmlwdGlvblBsYW46IHN0cmluZykge1xuICAgIGlmICghc3Vic2NyaXB0aW9uUGxhbikgcmV0dXJuIGZhbHNlXG5cbiAgICBpZiAoc2hvcCA9PSBTaG9wcy5NRU5TTUFSS0VUICYmIHN1YnNjcmlwdGlvblBsYW4gPT0gJ1BSSU1FJykge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgaXNIb2xpZGF5cyhkYXRhczogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhcykge1xuICAgICAgbGV0IHN0YXJ0ID0gbmV3IERhdGUoYCR7dG9kYXkuZ2V0RnVsbFllYXIoKX0tJHtkYXRhc1trZXldLmJlZ2luRGF0ZX1gKVxuICAgICAgbGV0IGVuZCA9IG5ldyBEYXRlKGAke3RvZGF5LmdldEZ1bGxZZWFyKCl9LSR7ZGF0YXNba2V5XS5lbmREYXRlfWApXG5cbiAgICAgIGlmIChzdGFydCA+IGVuZCkgZW5kID0gbmV3IERhdGUoYCR7dG9kYXkuZ2V0RnVsbFllYXIoKSArIDF9LSR7ZGF0YXNba2V5XS5lbmREYXRlfWApXG5cbiAgICAgIGlmICh0b2RheSA+PSBzdGFydCAmJiB0b2RheSA8PSBlbmQpIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmctbWV0aG9kcy50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy90eXBlcy9zaGlwcGluZy1tZXRob2RzLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2hpcHBpbmdNZXRob2RSZXNwb25zZSB7XG4gIGRheXNUb0RlbGl2ZXJ5OiBudW1iZXI7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG1heERlbGl2ZXJ5RGF0ZTogc3RyaW5nO1xuICBtaW5EZWxpdmVyeURhdGU6IHN0cmluZztcbiAgc2VydmljZUNvZGU6IHN0cmluZztcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgdG90YWxQcmljZTogbnVtYmVyO1xuICBhZGRpdGlvbmFsRGVzY3JpcHRpb246IHN0cmluZztcbiAgY25wajogc3RyaW5nO1xufSJdfQ==