@infrab4a/connect-angular 3.9.1-beta3 → 3.9.2-beta1
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 +0 -1
- package/bundles/infrab4a-connect-angular.umd.js +1161 -1587
- package/bundles/infrab4a-connect-angular.umd.js.map +1 -1
- package/consts/index.d.ts +0 -1
- package/esm2015/angular-connect.module.js +3 -14
- package/esm2015/angular-firestore.module.js +3 -17
- package/esm2015/angular-hasura-graphql.module.js +2 -18
- package/esm2015/consts/index.js +1 -2
- package/esm2015/index.js +3 -3
- package/esm2015/services/cart.service.js +14 -27
- package/esm2015/services/checkout-subscription.service.js +2 -2
- package/esm2015/services/checkout.service.js +7 -2
- package/esm2015/services/coupon.service.js +159 -154
- package/esm2015/services/errors/group-invalid-coupon.error.js +8 -0
- package/esm2015/services/errors/index.js +3 -0
- package/esm2015/services/errors/invalid-coupon.error.js +8 -0
- package/esm2015/services/index.js +1 -2
- package/fesm2015/infrab4a-connect-angular.js +1026 -1286
- package/fesm2015/infrab4a-connect-angular.js.map +1 -1
- package/index.d.ts +2 -2
- package/package.json +2 -2
- package/services/cart.service.d.ts +2 -3
- package/services/coupon.service.d.ts +8 -11
- package/services/errors/group-invalid-coupon.error.d.ts +6 -0
- package/services/errors/index.d.ts +2 -0
- package/services/errors/invalid-coupon.error.d.ts +5 -0
- package/services/index.d.ts +0 -1
- package/consts/category-structure.d.ts +0 -1
- package/esm2015/consts/category-structure.js +0 -2
- package/esm2015/services/catalog/adapters/category-structure.adapter.js +0 -2
- package/esm2015/services/catalog/adapters/index.js +0 -4
- package/esm2015/services/catalog/adapters/new-category-structure.adapter.js +0 -51
- package/esm2015/services/catalog/adapters/old-category-structure.adapter.js +0 -27
- package/esm2015/services/catalog/catalog.service.js +0 -96
- package/esm2015/services/catalog/category.service.js +0 -56
- package/esm2015/services/catalog/enums/index.js +0 -2
- package/esm2015/services/catalog/enums/product-sorts.enum.js +0 -11
- package/esm2015/services/catalog/index.js +0 -6
- package/esm2015/services/catalog/models/category-with-tree.model.js +0 -10
- package/esm2015/services/catalog/models/index.js +0 -2
- package/esm2015/services/catalog/types/index.js +0 -2
- package/esm2015/services/catalog/types/product-sort.type.js +0 -2
- package/services/catalog/adapters/category-structure.adapter.d.ts +0 -4
- package/services/catalog/adapters/index.d.ts +0 -3
- package/services/catalog/adapters/new-category-structure.adapter.d.ts +0 -14
- package/services/catalog/adapters/old-category-structure.adapter.d.ts +0 -10
- package/services/catalog/catalog.service.d.ts +0 -54
- package/services/catalog/category.service.d.ts +0 -15
- package/services/catalog/enums/index.d.ts +0 -1
- package/services/catalog/enums/product-sorts.enum.d.ts +0 -9
- package/services/catalog/index.d.ts +0 -5
- package/services/catalog/models/category-with-tree.model.d.ts +0 -4
- package/services/catalog/models/index.d.ts +0 -1
- package/services/catalog/types/index.d.ts +0 -1
- package/services/catalog/types/product-sort.type.d.ts +0 -2
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { Inject, Injectable } from '@angular/core';
|
|
3
|
-
import { CheckoutTypes, CouponTypes, Exclusivities, Shops, Where, } from '@infrab4a/connect';
|
|
4
|
-
import { from, of } from 'rxjs';
|
|
3
|
+
import { CheckoutTypes, Coupon, CouponTypes, Exclusivities, Shops, Where, } from '@infrab4a/connect';
|
|
4
|
+
import { from, of, throwError } from 'rxjs';
|
|
5
5
|
import { concatMap, map } from 'rxjs/operators';
|
|
6
6
|
import { DEFAULT_SHOP } from '../consts';
|
|
7
|
+
import { InvalidCouponError } from './errors';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "@infrab4a/connect";
|
|
9
10
|
export class CouponService {
|
|
@@ -13,108 +14,167 @@ export class CouponService {
|
|
|
13
14
|
this.orderRepository = orderRepository;
|
|
14
15
|
this.categoryRepository = categoryRepository;
|
|
15
16
|
this.emailIsFromCollaborator = (userEmail) => !!(userEmail === null || userEmail === void 0 ? void 0 : userEmail.match(/@b4a.com.br/g));
|
|
17
|
+
this.separateValidCoupons = (coupons, userEmail) => coupons
|
|
18
|
+
.map((coupon) => {
|
|
19
|
+
try {
|
|
20
|
+
if (!(coupon instanceof Coupon))
|
|
21
|
+
throw new InvalidCouponError('Cupom inválido.');
|
|
22
|
+
if (this.isValidCoupon(coupon, userEmail))
|
|
23
|
+
return coupon;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
return error;
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
.reduce((current, coupon) => (Object.assign(Object.assign({}, current), (coupon instanceof Coupon
|
|
30
|
+
? { valids: [...current.valids, coupon] }
|
|
31
|
+
: { invalids: [...current.invalids, coupon] }))), {
|
|
32
|
+
valids: [],
|
|
33
|
+
invalids: [],
|
|
34
|
+
});
|
|
16
35
|
}
|
|
17
|
-
checkCoupon(nickname, checkoutType, checkout,
|
|
18
|
-
return from(this.couponRepository
|
|
19
|
-
.find({
|
|
36
|
+
checkCoupon(nickname, userEmail, checkoutType, plan, checkout, isSubscription) {
|
|
37
|
+
return from(this.couponRepository.find({
|
|
20
38
|
filters: {
|
|
21
39
|
nickname: { operator: Where.EQUALS, value: nickname },
|
|
22
40
|
active: { operator: Where.EQUALS, value: true },
|
|
23
41
|
},
|
|
24
|
-
})
|
|
25
|
-
.then((result) => result.data[0])).pipe(concatMap((coupon) => this.couponValidation(coupon, checkoutType)), concatMap((couponValid) => this.couponRulesValidation(couponValid, checkoutType, checkout, plan)), map((couponValidated) => couponValidated));
|
|
26
|
-
}
|
|
27
|
-
couponValidation(coupon, checkoutType) {
|
|
28
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
-
if (!coupon)
|
|
30
|
-
throw 'Cupom inválido.';
|
|
31
|
-
if ((coupon === null || coupon === void 0 ? void 0 : coupon.beginAt) && (coupon === null || coupon === void 0 ? void 0 : coupon.beginAt.getTime()) > new Date().getTime())
|
|
32
|
-
throw 'Cupom inválido.';
|
|
33
|
-
if ((coupon === null || coupon === void 0 ? void 0 : coupon.expiresIn) && (coupon === null || coupon === void 0 ? void 0 : coupon.expiresIn.getTime()) < new Date().getTime())
|
|
34
|
-
throw 'Cupom expirado.';
|
|
35
|
-
const isInShop = coupon.shopAvailability === Shops.ALL || coupon.shopAvailability === this.defaultShop;
|
|
36
|
-
if (!isInShop)
|
|
37
|
-
throw 'Cupom inválido para loja.';
|
|
38
|
-
const isCheckoutType = coupon.checkoutType === CheckoutTypes.ALL || coupon.checkoutType === checkoutType;
|
|
39
|
-
if (!isCheckoutType)
|
|
40
|
-
throw 'Cupom inválido. Erro de checkout.';
|
|
41
|
-
return coupon;
|
|
42
|
-
});
|
|
42
|
+
})).pipe(concatMap((coupons) => this.checkCouponRules(coupons, checkoutType, plan, checkout, isSubscription)), concatMap((coupon) => this.checkCouponUseAndLimit(coupon, userEmail, checkout)), map((coupon) => this.isValidCoupon(coupon, userEmail)), map((coupon) => coupon));
|
|
43
43
|
}
|
|
44
|
-
|
|
44
|
+
checkCouponRules(coupons, checkoutType, plan, checkout, isSubscription) {
|
|
45
|
+
// Caso não ache nenhum cupom, retorna erro
|
|
46
|
+
if (coupons.count < 1) {
|
|
47
|
+
return throwError('Cupom inválido.');
|
|
48
|
+
}
|
|
49
|
+
// Get Primeiro Cupom (o find do repository retorna um array)
|
|
50
|
+
const coupon = coupons.data.shift();
|
|
51
|
+
// Verifica se o cupom é aplicavel na loja
|
|
52
|
+
const isInShop = coupon.shopAvailability === Shops.ALL || coupon.shopAvailability === this.defaultShop;
|
|
53
|
+
// Cupon não aplicavel a loja retorna erro
|
|
54
|
+
if (!isInShop)
|
|
55
|
+
return throwError('Cupom inválido para loja.');
|
|
56
|
+
// Verifica se o coupon é aplicado no checkout que está sendo realizado
|
|
57
|
+
const isCheckoutType = coupon.checkoutType === CheckoutTypes.ALL || coupon.checkoutType === checkoutType;
|
|
58
|
+
// Cupon não aplicavel ao checkout retorna erro
|
|
59
|
+
if (!isCheckoutType)
|
|
60
|
+
return throwError('Cupom inválido. Erro de checkout.');
|
|
61
|
+
// Verifica se o cupom é ou pode ser aplicado para subscription
|
|
62
|
+
if (checkoutType === CheckoutTypes.ALL || checkoutType === CheckoutTypes.SUBSCRIPTION) {
|
|
63
|
+
// Se o cupom tiver um plano associado, verifica se é o mesmo plano do checkout da assinatura
|
|
64
|
+
if (coupon.plan && coupon.plan.toUpperCase() !== plan.toUpperCase())
|
|
65
|
+
return throwError('Cupom inválido para sua assinatura.');
|
|
66
|
+
}
|
|
67
|
+
if (isSubscription)
|
|
68
|
+
return of(coupon);
|
|
69
|
+
// Verifica se possui o valor minimo de compra para utilização do cupom
|
|
70
|
+
const hasMinSubTotal = this.hasMinSubTotal(coupon, checkout);
|
|
71
|
+
// Se não tem valor mínimo atingido, retorna erro
|
|
72
|
+
if (!hasMinSubTotal)
|
|
73
|
+
return throwError(`Valor mínimo de ${Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(coupon.minSubTotalValue)} não atingido`);
|
|
74
|
+
return of(coupon);
|
|
75
|
+
}
|
|
76
|
+
isValidCoupon(coupon, userEmail) {
|
|
77
|
+
// Verifica a data de inicio de validade do cupom
|
|
78
|
+
if ((coupon === null || coupon === void 0 ? void 0 : coupon.beginAt) > new Date())
|
|
79
|
+
throw new InvalidCouponError('Cupom ainda não liberado.');
|
|
80
|
+
// Verifica a data de validade do cupom
|
|
81
|
+
if ((coupon === null || coupon === void 0 ? void 0 : coupon.expiresIn) < new Date())
|
|
82
|
+
throw new InvalidCouponError('Cupom expirado.');
|
|
83
|
+
return coupon;
|
|
84
|
+
}
|
|
85
|
+
checkCouponUseAndLimit(coupon, userEmail, checkout) {
|
|
45
86
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
87
|
+
const orders = yield this.orderRepository.find({
|
|
88
|
+
filters: {
|
|
89
|
+
coupon: { id: coupon.id },
|
|
90
|
+
payment: { status: 'paid' },
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
// orders que usuario ja fez com o cupom
|
|
94
|
+
const ordersUserCoupon = orders.data.filter((o) => o.user.email == userEmail);
|
|
95
|
+
// Verifica o limite de uso de cupom por usuario
|
|
96
|
+
if (coupon.useLimitPerUser && ordersUserCoupon.length)
|
|
97
|
+
throw new InvalidCouponError('Limite de uso por usuário atingido.');
|
|
98
|
+
// Verifica o limite de uso geral por usuario
|
|
99
|
+
if (coupon.useLimit && orders.data.length >= coupon.useLimit)
|
|
100
|
+
throw new InvalidCouponError('Limite de uso atingido.');
|
|
101
|
+
const validUser = this.userValidationAndSubscriptionStatus(coupon, checkout === null || checkout === void 0 ? void 0 : checkout.user);
|
|
52
102
|
if (!validUser)
|
|
53
|
-
throw 'Usuário não elegível.';
|
|
54
|
-
const couponUseLimits = this.getCouponUseLimits(coupon, checkoutType, checkout.user);
|
|
55
|
-
if (!couponUseLimits.unlimited || couponUseLimits.limitedPerUser) {
|
|
56
|
-
const orders = yield this.getOrdersWithCoupon(coupon);
|
|
57
|
-
if (!couponUseLimits.unlimited && couponUseLimits.total && orders.length >= couponUseLimits.total)
|
|
58
|
-
throw 'Limite de uso atingido.';
|
|
59
|
-
if (couponUseLimits.limitedPerUser) {
|
|
60
|
-
const ordersWithUser = this.countOrdersWithUser(orders, checkout.user.email);
|
|
61
|
-
if (ordersWithUser > 0)
|
|
62
|
-
throw 'Limite de uso por usuário atingido.';
|
|
63
|
-
}
|
|
64
|
-
}
|
|
103
|
+
throw new InvalidCouponError('Usuário não elegível.');
|
|
65
104
|
const hasProductCategories = yield this.hasProductCategories(coupon, checkout);
|
|
66
105
|
if (!hasProductCategories)
|
|
67
106
|
throw 'Seu carrinho não possui produtos elegíveis para desconto.';
|
|
68
|
-
const hasMinSubTotal = yield this.hasMinSubTotal(coupon, checkout);
|
|
69
|
-
if (!hasMinSubTotal)
|
|
70
|
-
throw `Valor mínimo de ${Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(coupon.minSubTotalValue)} não atingido`;
|
|
71
107
|
return coupon;
|
|
72
108
|
});
|
|
73
109
|
}
|
|
74
110
|
calcDiscountSubscription(coupon, checkout) {
|
|
111
|
+
//
|
|
75
112
|
let discount = 0;
|
|
76
|
-
if (coupon.
|
|
77
|
-
discount = coupon.discount
|
|
78
|
-
else
|
|
79
|
-
discount = checkout.subscriptionPlan.recurrencePrice * (coupon.discount
|
|
113
|
+
if (coupon.type === CouponTypes.ABSOLUTE)
|
|
114
|
+
discount = coupon.discount;
|
|
115
|
+
else if (coupon.type === CouponTypes.PERCENTAGE)
|
|
116
|
+
discount = checkout.subscriptionPlan.recurrencePrice * (coupon.discount / 100);
|
|
80
117
|
return of(discount);
|
|
81
118
|
}
|
|
82
119
|
calcDiscountShopping(coupon, checkout) {
|
|
83
120
|
return __awaiter(this, void 0, void 0, function* () {
|
|
84
121
|
let discount = 0;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
122
|
+
switch (coupon.type) {
|
|
123
|
+
case CouponTypes.ABSOLUTE: {
|
|
124
|
+
discount = coupon.discount;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case CouponTypes.PERCENTAGE: {
|
|
128
|
+
discount = yield this.calcShoppingPercentageDiscount(coupon, checkout);
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
90
131
|
}
|
|
91
132
|
return discount;
|
|
92
133
|
});
|
|
93
134
|
}
|
|
94
|
-
|
|
135
|
+
calcShoppingPercentageDiscount(coupon, checkout) {
|
|
136
|
+
var _a;
|
|
95
137
|
return __awaiter(this, void 0, void 0, function* () {
|
|
96
138
|
let discount = 0;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
139
|
+
const shop = checkout.shop;
|
|
140
|
+
let lineItensDiscount = [];
|
|
141
|
+
const couponCategories = yield this.getCouponCategoriesId(coupon);
|
|
142
|
+
if (coupon.productsCategories && coupon.productsCategories.length) {
|
|
143
|
+
lineItensDiscount = (_a = checkout.lineItems) === null || _a === void 0 ? void 0 : _a.filter((i) => {
|
|
144
|
+
var _a;
|
|
145
|
+
if ((_a = i.categories) === null || _a === void 0 ? void 0 : _a.length) {
|
|
146
|
+
return i.categories.some((c) => couponCategories.some((cat) => cat.id == c || cat.firestoreId == c));
|
|
147
|
+
}
|
|
148
|
+
return true;
|
|
149
|
+
});
|
|
101
150
|
}
|
|
102
151
|
else {
|
|
103
|
-
|
|
152
|
+
lineItensDiscount = checkout.lineItems;
|
|
104
153
|
}
|
|
154
|
+
const subTotal = lineItensDiscount.reduce((acc, curr) => {
|
|
155
|
+
var _a, _b, _c;
|
|
156
|
+
return ((_a = checkout.user) === null || _a === void 0 ? void 0 : _a.isSubscriber) && ((_b = curr.price[shop]) === null || _b === void 0 ? void 0 : _b.subscriberPrice)
|
|
157
|
+
? acc + ((_c = curr.price[shop]) === null || _c === void 0 ? void 0 : _c.subscriberPrice) * curr.quantity
|
|
158
|
+
: acc + curr.pricePaid * curr.quantity;
|
|
159
|
+
}, 0) || 0;
|
|
160
|
+
discount = subTotal * (coupon.discount / 100);
|
|
105
161
|
return discount;
|
|
106
162
|
});
|
|
107
163
|
}
|
|
108
164
|
hasMinSubTotal(coupon, checkout) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
165
|
+
var _a;
|
|
166
|
+
if (!coupon.minSubTotalValue)
|
|
167
|
+
return true;
|
|
168
|
+
const shop = checkout.shop;
|
|
169
|
+
let subTotal = ((_a = checkout.lineItems) === null || _a === void 0 ? void 0 : _a.reduce((acc, curr) => {
|
|
170
|
+
var _a, _b, _c;
|
|
171
|
+
return ((_a = checkout.user) === null || _a === void 0 ? void 0 : _a.isSubscriber) && ((_b = curr.price[shop]) === null || _b === void 0 ? void 0 : _b.subscriberPrice)
|
|
172
|
+
? acc + ((_c = curr.price[shop]) === null || _c === void 0 ? void 0 : _c.subscriberPrice) * curr.quantity
|
|
173
|
+
: acc + curr.pricePaid * curr.quantity;
|
|
174
|
+
}, 0)) || 0;
|
|
175
|
+
if (coupon.minSubTotalValue <= subTotal)
|
|
176
|
+
return true;
|
|
177
|
+
return false;
|
|
118
178
|
}
|
|
119
179
|
hasProductCategories(coupon, checkout) {
|
|
120
180
|
var _a;
|
|
@@ -122,104 +182,49 @@ export class CouponService {
|
|
|
122
182
|
if (!coupon.productsCategories || !coupon.productsCategories.length) {
|
|
123
183
|
return true;
|
|
124
184
|
}
|
|
125
|
-
const couponCategories = yield this.getCouponCategoriesId(coupon
|
|
185
|
+
const couponCategories = yield this.getCouponCategoriesId(coupon);
|
|
126
186
|
const hasCategories = (_a = checkout.lineItems) === null || _a === void 0 ? void 0 : _a.filter((i) => {
|
|
127
187
|
var _a;
|
|
128
188
|
if (!i.categories || !((_a = i.categories) === null || _a === void 0 ? void 0 : _a.length))
|
|
129
189
|
return true;
|
|
130
|
-
return i.categories.some((c) => couponCategories.some((cat) => cat == c));
|
|
190
|
+
return i.categories.some((c) => couponCategories.some((cat) => cat.id == c || cat.firestoreId == c));
|
|
131
191
|
});
|
|
132
192
|
return hasCategories.length ? true : false;
|
|
133
193
|
});
|
|
134
194
|
}
|
|
135
|
-
|
|
136
|
-
if (
|
|
195
|
+
userValidationAndSubscriptionStatus(coupon, user) {
|
|
196
|
+
if (coupon.exclusivityType === Exclusivities.ALL_USERS)
|
|
197
|
+
return true;
|
|
198
|
+
if (!user)
|
|
137
199
|
return true;
|
|
138
|
-
|
|
139
|
-
if (
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return coupon.exclusivityType.some((r) => userTypes.includes(r));
|
|
200
|
+
// Verifica se o email do usuário é coorporativo
|
|
201
|
+
if (!this.emailIsFromCollaborator(user.email) && coupon.exclusivityType === Exclusivities.COLLABORATORS)
|
|
202
|
+
throw new InvalidCouponError('Você não é colaborador.');
|
|
203
|
+
// Verifica se o email do usuário é associado ao cupom de uso por usuario
|
|
204
|
+
if (coupon.exclusivityType === Exclusivities.SPECIFIC_USER && coupon.userExclusiveEmail !== user.email)
|
|
205
|
+
throw new InvalidCouponError('Cupom não é válido para este usuário.');
|
|
206
|
+
switch (coupon.exclusivityType) {
|
|
207
|
+
case Exclusivities.ACTIVE_SUBSCRIBER:
|
|
208
|
+
return user.isSubscriber ? true : false;
|
|
209
|
+
case Exclusivities.INACTIVE_SUBSCRIBER:
|
|
210
|
+
return user.isSubscriber ? false : true;
|
|
211
|
+
case Exclusivities.NON_SUBSCRIBER:
|
|
212
|
+
return user.isSubscriber ? false : true;
|
|
213
|
+
}
|
|
214
|
+
return true;
|
|
154
215
|
}
|
|
155
|
-
getCouponCategoriesId(
|
|
216
|
+
getCouponCategoriesId(coupon) {
|
|
156
217
|
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
-
|
|
158
|
-
for (let index = 0; index < productsCategories.length; index++) {
|
|
159
|
-
|
|
160
|
-
id: productsCategories[index],
|
|
218
|
+
let couponCategories = [];
|
|
219
|
+
for (let index = 0; index < coupon.productsCategories.length; index++) {
|
|
220
|
+
let c = yield this.categoryRepository.get({
|
|
221
|
+
id: coupon.productsCategories[index],
|
|
161
222
|
});
|
|
162
|
-
|
|
163
|
-
const children = yield this.categoryRepository.getChildren(parseInt(productsCategories[index]));
|
|
164
|
-
couponCategories.push(category.id, ...children.map((c) => c.id.toString()));
|
|
165
|
-
}
|
|
223
|
+
couponCategories.push({ id: c.id, firestoreId: c.firestoreId });
|
|
166
224
|
}
|
|
167
|
-
return
|
|
225
|
+
return couponCategories;
|
|
168
226
|
});
|
|
169
227
|
}
|
|
170
|
-
getLineItensEligebleForDiscount(productsCategories, checkout) {
|
|
171
|
-
var _a;
|
|
172
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
173
|
-
let lineItensDiscount = [];
|
|
174
|
-
const couponCategories = yield this.getCouponCategoriesId(productsCategories);
|
|
175
|
-
if (productsCategories && productsCategories.length) {
|
|
176
|
-
lineItensDiscount = (_a = checkout.lineItems) === null || _a === void 0 ? void 0 : _a.filter((i) => {
|
|
177
|
-
var _a;
|
|
178
|
-
if ((_a = i.categories) === null || _a === void 0 ? void 0 : _a.length) {
|
|
179
|
-
return i.categories.some((c) => couponCategories.some((cat) => cat == c));
|
|
180
|
-
}
|
|
181
|
-
return true;
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
lineItensDiscount = checkout.lineItems;
|
|
186
|
-
}
|
|
187
|
-
return lineItensDiscount;
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
calcCheckoutSubtotal(lineItens, user, shop) {
|
|
191
|
-
return ((lineItens === null || lineItens === void 0 ? void 0 : lineItens.reduce((acc, curr) => {
|
|
192
|
-
var _a, _b;
|
|
193
|
-
return (user === null || user === void 0 ? void 0 : user.isSubscriber) && ((_a = curr.price[shop]) === null || _a === void 0 ? void 0 : _a.subscriberPrice)
|
|
194
|
-
? acc + ((_b = curr.price[shop]) === null || _b === void 0 ? void 0 : _b.subscriberPrice) * curr.quantity
|
|
195
|
-
: acc + curr.pricePaid * curr.quantity;
|
|
196
|
-
}, 0)) || 0);
|
|
197
|
-
}
|
|
198
|
-
getOrdersWithCoupon(coupon) {
|
|
199
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
200
|
-
return yield this.orderRepository
|
|
201
|
-
.find({
|
|
202
|
-
filters: {
|
|
203
|
-
coupon: { id: coupon.id },
|
|
204
|
-
payment: { status: 'paid' },
|
|
205
|
-
},
|
|
206
|
-
})
|
|
207
|
-
.then((result) => result.data);
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
countOrdersWithUser(orders, email) {
|
|
211
|
-
return orders.filter((o) => o.user.email == email).length;
|
|
212
|
-
}
|
|
213
|
-
getCouponUseLimits(coupon, checkoutType, user) {
|
|
214
|
-
let couponUseLimits;
|
|
215
|
-
if (checkoutType == CheckoutTypes.ECOMMERCE || checkoutType == CheckoutTypes.ALL) {
|
|
216
|
-
couponUseLimits = user && user.isSubscriber ? coupon.useLimits.subscriber : coupon.useLimits.non_subscriber;
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
couponUseLimits = coupon.useLimits.subscription;
|
|
220
|
-
}
|
|
221
|
-
return couponUseLimits;
|
|
222
|
-
}
|
|
223
228
|
}
|
|
224
229
|
CouponService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CouponService, deps: [{ token: 'CouponRepository' }, { token: DEFAULT_SHOP }, { token: 'OrderRepository' }, { token: 'CategoryRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
225
230
|
CouponService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CouponService, providedIn: 'root' });
|
|
@@ -241,4 +246,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImpo
|
|
|
241
246
|
type: Inject,
|
|
242
247
|
args: ['CategoryRepository']
|
|
243
248
|
}] }]; } });
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBS0wsYUFBYSxFQUdiLFdBQVcsRUFDWCxhQUFhLEVBSWIsS0FBSyxFQUVMLEtBQUssR0FDTixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTs7O0FBS3hDLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQytDLGdCQUFrQyxFQUN4QyxXQUFrQixFQUNiLGVBQWdDLEVBQzdCLGtCQUFzQztRQUh4QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFPO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUF3Ti9FLDRCQUF1QixHQUFHLENBQUMsU0FBaUIsRUFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQSxDQUFBO0lBdk5qRyxDQUFDO0lBRUosV0FBVyxDQUNULFFBQWdCLEVBQ2hCLFlBQTJCLEVBQzNCLFFBQTJCLEVBQzNCLElBQVk7UUFFWixPQUFPLElBQUksQ0FDVCxJQUFJLENBQUMsZ0JBQWdCO2FBQ2xCLElBQUksQ0FBQztZQUNKLE9BQU8sRUFBRTtnQkFDUCxR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LEVBQUUsSUFBVTtRQUNoRixJQUFJLGVBQWtGLENBQUE7UUFDdEYsSUFBSSxZQUFZLElBQUksYUFBYSxDQUFDLFNBQVMsSUFBSSxZQUFZLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUNoRixlQUFlLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQTtTQUM1RzthQUFNO1lBQ0wsZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFBO1NBQ2hEO1FBRUQsT0FBTyxlQUFlLENBQUE7SUFDeEIsQ0FBQzs7MkdBeFJVLGFBQWEsa0JBRWQsa0JBQWtCLGFBQ2xCLFlBQVksYUFDWixpQkFBaUIsYUFDakIsb0JBQW9COytHQUxuQixhQUFhLGNBRlosTUFBTTs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBR0ksTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUN6QixNQUFNOzJCQUFDLFlBQVk7OzBCQUNuQixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIENhdGVnb3J5LFxuICBDYXRlZ29yeVJlcG9zaXRvcnksXG4gIENoZWNrb3V0LFxuICBDaGVja291dFN1YnNjcmlwdGlvbixcbiAgQ2hlY2tvdXRUeXBlcyxcbiAgQ291cG9uLFxuICBDb3Vwb25SZXBvc2l0b3J5LFxuICBDb3Vwb25UeXBlcyxcbiAgRXhjbHVzaXZpdGllcyxcbiAgTGluZUl0ZW0sXG4gIE9yZGVyLFxuICBPcmRlclJlcG9zaXRvcnksXG4gIFNob3BzLFxuICBVc2VyLFxuICBXaGVyZSxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vY29uc3RzJ1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQ291cG9uU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ0NvdXBvblJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IGNvdXBvblJlcG9zaXRvcnk6IENvdXBvblJlcG9zaXRvcnksXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNob3A6IFNob3BzLFxuICAgIEBJbmplY3QoJ09yZGVyUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgb3JkZXJSZXBvc2l0b3J5OiBPcmRlclJlcG9zaXRvcnksXG4gICAgQEluamVjdCgnQ2F0ZWdvcnlSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVJlcG9zaXRvcnk6IENhdGVnb3J5UmVwb3NpdG9yeSxcbiAgKSB7fVxuXG4gIGNoZWNrQ291cG9uKFxuICAgIG5pY2tuYW1lOiBzdHJpbmcsXG4gICAgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzLFxuICAgIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0PixcbiAgICBwbGFuOiBzdHJpbmcsXG4gICk6IE9ic2VydmFibGU8Q291cG9uPiB7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmNvdXBvblJlcG9zaXRvcnlcbiAgICAgICAgLmZpbmQoe1xuICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgIG5pY2tuYW1lOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiBuaWNrbmFtZSB9LFxuICAgICAgICAgICAgYWN0aXZlOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiB0cnVlIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGFbMF0pLFxuICAgICkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoY291cG9uKSA9PiB0aGlzLmNvdXBvblZhbGlkYXRpb24oY291cG9uLCBjaGVja291dFR5cGUpKSxcbiAgICAgIGNvbmNhdE1hcCgoY291cG9uVmFsaWQ6IENvdXBvbikgPT4gdGhpcy5jb3Vwb25SdWxlc1ZhbGlkYXRpb24oY291cG9uVmFsaWQsIGNoZWNrb3V0VHlwZSwgY2hlY2tvdXQsIHBsYW4pKSxcbiAgICAgIG1hcCgoY291cG9uVmFsaWRhdGVkOiBDb3Vwb24pID0+IGNvdXBvblZhbGlkYXRlZCBhcyBDb3Vwb24pLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY291cG9uVmFsaWRhdGlvbihjb3Vwb246IENvdXBvbiwgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzKSB7XG4gICAgaWYgKCFjb3Vwb24pIHRocm93ICdDdXBvbSBpbnbDoWxpZG8uJ1xuXG4gICAgaWYgKGNvdXBvbj8uYmVnaW5BdCAmJiBjb3Vwb24/LmJlZ2luQXQuZ2V0VGltZSgpID4gbmV3IERhdGUoKS5nZXRUaW1lKCkpIHRocm93ICdDdXBvbSBpbnbDoWxpZG8uJ1xuXG4gICAgaWYgKGNvdXBvbj8uZXhwaXJlc0luICYmIGNvdXBvbj8uZXhwaXJlc0luLmdldFRpbWUoKSA8IG5ldyBEYXRlKCkuZ2V0VGltZSgpKSB0aHJvdyAnQ3Vwb20gZXhwaXJhZG8uJ1xuXG4gICAgY29uc3QgaXNJblNob3AgPSBjb3Vwb24uc2hvcEF2YWlsYWJpbGl0eSA9PT0gU2hvcHMuQUxMIHx8IGNvdXBvbi5zaG9wQXZhaWxhYmlsaXR5ID09PSB0aGlzLmRlZmF1bHRTaG9wXG5cbiAgICBpZiAoIWlzSW5TaG9wKSB0aHJvdyAnQ3Vwb20gaW52w6FsaWRvIHBhcmEgbG9qYS4nXG5cbiAgICBjb25zdCBpc0NoZWNrb3V0VHlwZSA9IGNvdXBvbi5jaGVja291dFR5cGUgPT09IENoZWNrb3V0VHlwZXMuQUxMIHx8IGNvdXBvbi5jaGVja291dFR5cGUgPT09IGNoZWNrb3V0VHlwZVxuXG4gICAgaWYgKCFpc0NoZWNrb3V0VHlwZSkgdGhyb3cgJ0N1cG9tIGludsOhbGlkby4gRXJybyBkZSBjaGVja291dC4nXG5cbiAgICByZXR1cm4gY291cG9uXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvdXBvblJ1bGVzVmFsaWRhdGlvbihcbiAgICBjb3Vwb246IENvdXBvbixcbiAgICBjaGVja291dFR5cGU6IENoZWNrb3V0VHlwZXMsXG4gICAgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+LFxuICAgIHBsYW46IHN0cmluZyxcbiAgKSB7XG4gICAgaWYgKGNoZWNrb3V0VHlwZSA9PSBDaGVja291dFR5cGVzLlNVQlNDUklQVElPTikge1xuICAgICAgaWYgKGNvdXBvbi5wbGFuICYmIGNvdXBvbi5wbGFuLnRvVXBwZXJDYXNlKCkgIT09IHBsYW4udG9VcHBlckNhc2UoKSkgdGhyb3cgJ0N1cG9tIGludsOhbGlkbyBwYXJhIHN1YSBhc3NpbmF0dXJhLidcblxuICAgICAgcmV0dXJuIGNvdXBvblxuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkVXNlciA9IHRoaXMuY291cG9tVXNlclZhbGlkYXRpb24oY291cG9uLCBjaGVja291dD8udXNlcilcblxuICAgIGlmICghdmFsaWRVc2VyKSB0aHJvdyAnVXN1w6FyaW8gbsOjbyBlbGVnw612ZWwuJ1xuXG4gICAgY29uc3QgY291cG9uVXNlTGltaXRzID0gdGhpcy5nZXRDb3Vwb25Vc2VMaW1pdHMoY291cG9uLCBjaGVja291dFR5cGUsIGNoZWNrb3V0LnVzZXIpXG5cbiAgICBpZiAoIWNvdXBvblVzZUxpbWl0cy51bmxpbWl0ZWQgfHwgY291cG9uVXNlTGltaXRzLmxpbWl0ZWRQZXJVc2VyKSB7XG4gICAgICBjb25zdCBvcmRlcnMgPSBhd2FpdCB0aGlzLmdldE9yZGVyc1dpdGhDb3Vwb24oY291cG9uKVxuXG4gICAgICBpZiAoIWNvdXBvblVzZUxpbWl0cy51bmxpbWl0ZWQgJiYgY291cG9uVXNlTGltaXRzLnRvdGFsICYmIG9yZGVycy5sZW5ndGggPj0gY291cG9uVXNlTGltaXRzLnRvdGFsKVxuICAgICAgICB0aHJvdyAnTGltaXRlIGRlIHVzbyBhdGluZ2lkby4nXG5cbiAgICAgIGlmIChjb3Vwb25Vc2VMaW1pdHMubGltaXRlZFBlclVzZXIpIHtcbiAgICAgICAgY29uc3Qgb3JkZXJzV2l0aFVzZXIgPSB0aGlzLmNvdW50T3JkZXJzV2l0aFVzZXIob3JkZXJzLCBjaGVja291dC51c2VyLmVtYWlsKVxuXG4gICAgICAgIGlmIChvcmRlcnNXaXRoVXNlciA+IDApIHRocm93ICdMaW1pdGUgZGUgdXNvIHBvciB1c3XDoXJpbyBhdGluZ2lkby4nXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFzUHJvZHVjdENhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmhhc1Byb2R1Y3RDYXRlZ29yaWVzKGNvdXBvbiwgY2hlY2tvdXQpXG5cbiAgICBpZiAoIWhhc1Byb2R1Y3RDYXRlZ29yaWVzKSB0aHJvdyAnU2V1IGNhcnJpbmhvIG7Do28gcG9zc3VpIHByb2R1dG9zIGVsZWfDrXZlaXMgcGFyYSBkZXNjb250by4nXG5cbiAgICBjb25zdCBoYXNNaW5TdWJUb3RhbCA9IGF3YWl0IHRoaXMuaGFzTWluU3ViVG90YWwoY291cG9uLCBjaGVja291dClcblxuICAgIGlmICghaGFzTWluU3ViVG90YWwpXG4gICAgICB0aHJvdyBgVmFsb3IgbcOtbmltbyBkZSAke0ludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHsgc3R5bGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5OiAnQlJMJyB9KS5mb3JtYXQoXG4gICAgICAgIGNvdXBvbi5taW5TdWJUb3RhbFZhbHVlLFxuICAgICAgKX0gbsOjbyBhdGluZ2lkb2BcblxuICAgIHJldHVybiBjb3Vwb25cbiAgfVxuXG4gIHB1YmxpYyBjYWxjRGlzY291bnRTdWJzY3JpcHRpb24oY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0U3Vic2NyaXB0aW9uPik6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgbGV0IGRpc2NvdW50ID0gMFxuXG4gICAgaWYgKGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpcHRpb24udHlwZSA9PSBDb3Vwb25UeXBlcy5BQlNPTFVURSkgZGlzY291bnQgPSBjb3Vwb24uZGlzY291bnQuc3Vic2NyaXB0aW9uLnZhbHVlXG4gICAgZWxzZSBkaXNjb3VudCA9IGNoZWNrb3V0LnN1YnNjcmlwdGlvblBsYW4ucmVjdXJyZW5jZVByaWNlICogKGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpcHRpb24udmFsdWUgLyAxMDApXG5cbiAgICByZXR1cm4gb2YoZGlzY291bnQpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2FsY0Rpc2NvdW50U2hvcHBpbmcoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IGRpc2NvdW50ID0gMFxuXG4gICAgaWYgKGNoZWNrb3V0LnVzZXIuaXNTdWJzY3JpYmVyICYmIGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpYmVyLnZhbHVlKSB7XG4gICAgICBkaXNjb3VudCA9IGF3YWl0IHRoaXMuY2FsY0Rpc2NvdW50QnlUeXBlKFxuICAgICAgICBjb3Vwb24uZGlzY291bnQuc3Vic2NyaWJlci50eXBlLFxuICAgICAgICBjb3Vwb24uZGlzY291bnQuc3Vic2NyaWJlci52YWx1ZSxcbiAgICAgICAgY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcyxcbiAgICAgICAgY2hlY2tvdXQsXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc2NvdW50ID0gYXdhaXQgdGhpcy5jYWxjRGlzY291bnRCeVR5cGUoXG4gICAgICAgIGNvdXBvbi5kaXNjb3VudC5ub25fc3Vic2NyaWJlci50eXBlLFxuICAgICAgICBjb3Vwb24uZGlzY291bnQubm9uX3N1YnNjcmliZXIudmFsdWUsXG4gICAgICAgIGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMsXG4gICAgICAgIGNoZWNrb3V0LFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNjb3VudFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxjRGlzY291bnRCeVR5cGUoXG4gICAgdHlwZTogQ291cG9uVHlwZXMsXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBjYXRlZ29yaWVzLFxuICAgIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0PixcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgZGlzY291bnQgPSAwXG5cbiAgICBsZXQgbGluZUl0ZW5zRGlzY291bnQgPSBhd2FpdCB0aGlzLmdldExpbmVJdGVuc0VsaWdlYmxlRm9yRGlzY291bnQoY2F0ZWdvcmllcywgY2hlY2tvdXQpXG5cbiAgICBjb25zdCBzdWJUb3RhbCA9IHRoaXMuY2FsY0NoZWNrb3V0U3VidG90YWwobGluZUl0ZW5zRGlzY291bnQsIGNoZWNrb3V0LnVzZXIsIGNoZWNrb3V0LnNob3ApXG5cbiAgICBpZiAodHlwZSA9PSBDb3Vwb25UeXBlcy5BQlNPTFVURSkge1xuICAgICAgZGlzY291bnQgPSB2YWx1ZSA+IHN1YlRvdGFsID8gc3ViVG90YWwgOiB2YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBkaXNjb3VudCA9IHN1YlRvdGFsICogKHZhbHVlIC8gMTAwKVxuICAgIH1cblxuICAgIHJldHVybiBkaXNjb3VudFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYXNNaW5TdWJUb3RhbChjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSkgcmV0dXJuIHRydWVcblxuICAgIGxldCBsaW5lSXRlbnNEaXNjb3VudCA9IGF3YWl0IHRoaXMuZ2V0TGluZUl0ZW5zRWxpZ2VibGVGb3JEaXNjb3VudChjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzLCBjaGVja291dClcblxuICAgIGNvbnN0IHN1YlRvdGFsID0gdGhpcy5jYWxjQ2hlY2tvdXRTdWJ0b3RhbChsaW5lSXRlbnNEaXNjb3VudCwgY2hlY2tvdXQudXNlciwgY2hlY2tvdXQuc2hvcClcblxuICAgIGlmIChjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSA8PSBzdWJUb3RhbCkgcmV0dXJuIHRydWVcblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYXNQcm9kdWN0Q2F0ZWdvcmllcyhjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzIHx8ICFjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBjb3Vwb25DYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDb3Vwb25DYXRlZ29yaWVzSWQoY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcylcblxuICAgIGNvbnN0IGhhc0NhdGVnb3JpZXMgPSBjaGVja291dC5saW5lSXRlbXM/LmZpbHRlcigoaSkgPT4ge1xuICAgICAgaWYgKCFpLmNhdGVnb3JpZXMgfHwgIWkuY2F0ZWdvcmllcz8ubGVuZ3RoKSByZXR1cm4gdHJ1ZVxuICAgICAgcmV0dXJuIGkuY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0ID09IGMpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gaGFzQ2F0ZWdvcmllcy5sZW5ndGggPyB0cnVlIDogZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgY291cG9tVXNlclZhbGlkYXRpb24oY291cG9uOiBDb3Vwb24sIHVzZXI6IFVzZXIpIHtcbiAgICBpZiAoIXVzZXIgfHwgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLkFMTF9VU0VSUykpIHJldHVybiB0cnVlXG5cbiAgICBsZXQgdXNlclR5cGVzID0gW11cblxuICAgIGlmIChjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLmluY2x1ZGVzKEV4Y2x1c2l2aXRpZXMuQ09MTEFCT1JBVE9SUykgJiYgdGhpcy5lbWFpbElzRnJvbUNvbGxhYm9yYXRvcih1c2VyLmVtYWlsKSlcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuQ09MTEFCT1JBVE9SUylcblxuICAgIGlmIChjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLmluY2x1ZGVzKEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUikgJiYgY291cG9uLnVzZXJFeGNsdXNpdmVFbWFpbC5pbmNsdWRlcyh1c2VyLmVtYWlsKSlcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUilcblxuICAgIGlmIChcbiAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5BQ1RJVkVfU1VCU0NSSUJFUikgJiZcbiAgICAgIHVzZXIuaXNTdWJzY3JpYmVyICYmXG4gICAgICB1c2VyLnN1YnNjcmlwdGlvblBsYW4gIT0gJydcbiAgICApXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLkFDVElWRV9TVUJTQ1JJQkVSKVxuXG4gICAgaWYgKFxuICAgICAgdXNlci5pc1N1YnNjcmliZXIgJiZcbiAgICAgIHVzZXIuc3Vic2NyaXB0aW9uUGxhbiA9PSAnJyAmJlxuICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLklOQUNUSVZFX1NVQlNDUklCRVIpXG4gICAgKVxuICAgICAgdXNlclR5cGVzLnB1c2goRXhjbHVzaXZpdGllcy5JTkFDVElWRV9TVUJTQ1JJQkVSKVxuXG4gICAgaWYgKGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5OT05fU1VCU0NSSUJFUikgJiYgIXVzZXIuaXNTdWJzY3JpYmVyKVxuICAgICAgdXNlclR5cGVzLnB1c2goRXhjbHVzaXZpdGllcy5OT05fU1VCU0NSSUJFUilcblxuICAgIHJldHVybiBjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLnNvbWUoKHIpID0+IHVzZXJUeXBlcy5pbmNsdWRlcyhyKSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKHByb2R1Y3RzQ2F0ZWdvcmllczogc3RyaW5nW10pOiBQcm9taXNlPEFycmF5PFN0cmluZz4+IHtcbiAgICBjb25zdCBjb3Vwb25DYXRlZ29yaWVzOiBBcnJheTxTdHJpbmc+ID0gW11cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwcm9kdWN0c0NhdGVnb3JpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBjYXRlZ29yeTogQ2F0ZWdvcnkgJiB7IGZpcmVzdG9yZUlkPzogc3RyaW5nIH0gPSBhd2FpdCB0aGlzLmNhdGVnb3J5UmVwb3NpdG9yeS5nZXQoe1xuICAgICAgICBpZDogcHJvZHVjdHNDYXRlZ29yaWVzW2luZGV4XSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChjYXRlZ29yeSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlSZXBvc2l0b3J5LmdldENoaWxkcmVuKHBhcnNlSW50KHByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0pKVxuXG4gICAgICAgIGNvdXBvbkNhdGVnb3JpZXMucHVzaChjYXRlZ29yeS5pZCwgLi4uY2hpbGRyZW4ubWFwKChjKSA9PiBjLmlkLnRvU3RyaW5nKCkpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbLi4ubmV3IFNldChjb3Vwb25DYXRlZ29yaWVzKV1cbiAgfVxuXG4gIHByaXZhdGUgZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IgPSAodXNlckVtYWlsOiBzdHJpbmcpOiBib29sZWFuID0+ICEhdXNlckVtYWlsPy5tYXRjaCgvQGI0YS5jb20uYnIvZylcblxuICBwcml2YXRlIGFzeW5jIGdldExpbmVJdGVuc0VsaWdlYmxlRm9yRGlzY291bnQoXG4gICAgcHJvZHVjdHNDYXRlZ29yaWVzOiBzdHJpbmdbXSxcbiAgICBjaGVja291dDogUGFydGlhbDxDaGVja291dD4sXG4gICk6IFByb21pc2U8TGluZUl0ZW1bXT4ge1xuICAgIGxldCBsaW5lSXRlbnNEaXNjb3VudCA9IFtdXG4gICAgY29uc3QgY291cG9uQ2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKHByb2R1Y3RzQ2F0ZWdvcmllcylcblxuICAgIGlmIChwcm9kdWN0c0NhdGVnb3JpZXMgJiYgcHJvZHVjdHNDYXRlZ29yaWVzLmxlbmd0aCkge1xuICAgICAgbGluZUl0ZW5zRGlzY291bnQgPSBjaGVja291dC5saW5lSXRlbXM/LmZpbHRlcigoaSkgPT4ge1xuICAgICAgICBpZiAoaS5jYXRlZ29yaWVzPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gaS5jYXRlZ29yaWVzLnNvbWUoKGMpID0+IGNvdXBvbkNhdGVnb3JpZXMuc29tZSgoY2F0KSA9PiBjYXQgPT0gYykpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50ID0gY2hlY2tvdXQubGluZUl0ZW1zXG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmVJdGVuc0Rpc2NvdW50XG4gIH1cblxuICBwcml2YXRlIGNhbGNDaGVja291dFN1YnRvdGFsKGxpbmVJdGVuczogTGluZUl0ZW1bXSwgdXNlcjogVXNlciwgc2hvcDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgbGluZUl0ZW5zPy5yZWR1Y2UoXG4gICAgICAgIChhY2MsIGN1cnIpID0+XG4gICAgICAgICAgdXNlcj8uaXNTdWJzY3JpYmVyICYmIGN1cnIucHJpY2Vbc2hvcF0/LnN1YnNjcmliZXJQcmljZVxuICAgICAgICAgICAgPyBhY2MgKyBjdXJyLnByaWNlW3Nob3BdPy5zdWJzY3JpYmVyUHJpY2UgKiBjdXJyLnF1YW50aXR5XG4gICAgICAgICAgICA6IGFjYyArIGN1cnIucHJpY2VQYWlkICogY3Vyci5xdWFudGl0eSxcbiAgICAgICAgMCxcbiAgICAgICkgfHwgMFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0T3JkZXJzV2l0aENvdXBvbihjb3Vwb246IENvdXBvbik6IFByb21pc2U8T3JkZXJbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm9yZGVyUmVwb3NpdG9yeVxuICAgICAgLmZpbmQoe1xuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgY291cG9uOiB7IGlkOiBjb3Vwb24uaWQgfSxcbiAgICAgICAgICBwYXltZW50OiB7IHN0YXR1czogJ3BhaWQnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGEpXG4gIH1cblxuICBwcml2YXRlIGNvdW50T3JkZXJzV2l0aFVzZXIob3JkZXJzOiBPcmRlcltdLCBlbWFpbDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gb3JkZXJzLmZpbHRlcigobykgPT4gby51c2VyLmVtYWlsID09IGVtYWlsKS5sZW5ndGhcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q291cG9uVXNlTGltaXRzKGNvdXBvbjogQ291cG9uLCBjaGVja291dFR5cGU6IENoZWNrb3V0VHlwZXMsIHVzZXI6IFVzZXIpIHtcbiAgICBsZXQgY291cG9uVXNlTGltaXRzOiB7IHVubGltaXRlZD86IGJvb2xlYW47IHRvdGFsPzogbnVtYmVyOyBsaW1pdGVkUGVyVXNlcj86IGJvb2xlYW4gfVxuICAgIGlmIChjaGVja291dFR5cGUgPT0gQ2hlY2tvdXRUeXBlcy5FQ09NTUVSQ0UgfHwgY2hlY2tvdXRUeXBlID09IENoZWNrb3V0VHlwZXMuQUxMKSB7XG4gICAgICBjb3Vwb25Vc2VMaW1pdHMgPSB1c2VyICYmIHVzZXIuaXNTdWJzY3JpYmVyID8gY291cG9uLnVzZUxpbWl0cy5zdWJzY3JpYmVyIDogY291cG9uLnVzZUxpbWl0cy5ub25fc3Vic2NyaWJlclxuICAgIH0gZWxzZSB7XG4gICAgICBjb3Vwb25Vc2VMaW1pdHMgPSBjb3Vwb24udXNlTGltaXRzLnN1YnNjcmlwdGlvblxuICAgIH1cblxuICAgIHJldHVybiBjb3Vwb25Vc2VMaW1pdHNcbiAgfVxufVxuIl19
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBS0wsYUFBYSxFQUNiLE1BQU0sRUFFTixXQUFXLEVBQ1gsYUFBYSxFQUdiLEtBQUssRUFFTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQWMsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXhDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7O0FBSzdDLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQytDLGdCQUFrQyxFQUN4QyxXQUFrQixFQUNiLGVBQWdDLEVBQzdCLGtCQUFzQztRQUh4QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFPO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUEwQi9FLDRCQUF1QixHQUFHLENBQUMsU0FBaUIsRUFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUEsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQSxDQUFBO1FBNk41Rix5QkFBb0IsR0FBRyxDQUM3QixPQUFpQixFQUNqQixTQUFpQixFQUNxQyxFQUFFLENBQ3hELE9BQU87YUFDSixHQUFHLENBQUMs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YUFDbEIsWUFBWSxhQUNaLGlCQUFpQixhQUNqQixvQkFBb0I7K0dBTG5CLGFBQWEsY0FGWixNQUFNOzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLE1BQU07MkJBQUMsWUFBWTs7MEJBQ25CLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQ2F0ZWdvcnksXG4gIENhdGVnb3J5UmVwb3NpdG9yeSxcbiAgQ2hlY2tvdXQsXG4gIENoZWNrb3V0U3Vic2NyaXB0aW9uLFxuICBDaGVja291dFR5cGVzLFxuICBDb3Vwb24sXG4gIENvdXBvblJlcG9zaXRvcnksXG4gIENvdXBvblR5cGVzLFxuICBFeGNsdXNpdml0aWVzLFxuICBMaW5lSXRlbSxcbiAgT3JkZXJSZXBvc2l0b3J5LFxuICBTaG9wcyxcbiAgVXNlcixcbiAgV2hlcmUsXG59IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY29uY2F0TWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vY29uc3RzJ1xuXG5pbXBvcnQgeyBJbnZhbGlkQ291cG9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycydcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvdXBvblNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdDb3Vwb25SZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjb3Vwb25SZXBvc2l0b3J5OiBDb3Vwb25SZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoREVGQVVMVF9TSE9QKSBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTaG9wOiBTaG9wcyxcbiAgICBASW5qZWN0KCdPcmRlclJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IG9yZGVyUmVwb3NpdG9yeTogT3JkZXJSZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoJ0NhdGVnb3J5UmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlSZXBvc2l0b3J5OiBDYXRlZ29yeVJlcG9zaXRvcnksXG4gICkge31cblxuICBjaGVja0NvdXBvbihcbiAgICBuaWNrbmFtZTogc3RyaW5nLFxuICAgIHVzZXJFbWFpbDogc3RyaW5nLFxuICAgIGNoZWNrb3V0VHlwZTogQ2hlY2tvdXRUeXBlcyxcbiAgICBwbGFuPzogc3RyaW5nLFxuICAgIGNoZWNrb3V0PzogUGFydGlhbDxDaGVja291dD4sXG4gICAgaXNTdWJzY3JpcHRpb24/OiBib29sZWFuLFxuICApOiBPYnNlcnZhYmxlPENvdXBvbj4ge1xuICAgIHJldHVybiBmcm9tKFxuICAgICAgdGhpcy5jb3Vwb25SZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgbmlja25hbWU6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IG5pY2tuYW1lIH0sXG4gICAgICAgICAgYWN0aXZlOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiB0cnVlIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKGNvdXBvbnMpID0+IHRoaXMuY2hlY2tDb3Vwb25SdWxlcyhjb3Vwb25zLCBjaGVja291dFR5cGUsIHBsYW4sIGNoZWNrb3V0LCBpc1N1YnNjcmlwdGlvbikpLFxuICAgICAgY29uY2F0TWFwKChjb3Vwb246IENvdXBvbikgPT4gdGhpcy5jaGVja0NvdXBvblVzZUFuZExpbWl0KGNvdXBvbiwgdXNlckVtYWlsLCBjaGVja291dCkpLFxuICAgICAgbWFwKChjb3Vwb246IENvdXBvbikgPT4gdGhpcy5pc1ZhbGlkQ291cG9uKGNvdXBvbiwgdXNlckVtYWlsKSksXG4gICAgICBtYXAoKGNvdXBvbjogQ291cG9uKSA9PiBjb3Vwb24pLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IgPSAodXNlckVtYWlsOiBzdHJpbmcpOiBib29sZWFuID0+ICEhdXNlckVtYWlsPy5tYXRjaCgvQGI0YS5jb20uYnIvZylcblxuICBwcml2YXRlIGNoZWNrQ291cG9uUnVsZXMoXG4gICAgY291cG9ucyxcbiAgICBjaGVja291dFR5cGU6IENoZWNrb3V0VHlwZXMsXG4gICAgcGxhbj86IHN0cmluZyxcbiAgICBjaGVja291dD86IFBhcnRpYWw8Q2hlY2tvdXQ+LFxuICAgIGlzU3Vic2NyaXB0aW9uPzogYm9vbGVhbixcbiAgKSB7XG4gICAgLy8gQ2FzbyBuw6NvIGFjaGUgbmVuaHVtIGN1cG9tLCByZXRvcm5hIGVycm9cbiAgICBpZiAoY291cG9ucy5jb3VudCA8IDEpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdDdXBvbSBpbnbDoWxpZG8uJylcbiAgICB9XG5cbiAgICAvLyBHZXQgUHJpbWVpcm8gQ3Vwb20gKG8gZmluZCBkbyByZXBvc2l0b3J5IHJldG9ybmEgdW0gYXJyYXkpXG4gICAgY29uc3QgY291cG9uOiBDb3Vwb24gPSBjb3Vwb25zLmRhdGEuc2hpZnQoKVxuICAgIC8vIFZlcmlmaWNhIHNlIG8gY3Vwb20gw6kgYXBsaWNhdmVsIG5hIGxvamFcbiAgICBjb25zdCBpc0luU2hvcCA9IGNvdXBvbi5zaG9wQXZhaWxhYmlsaXR5ID09PSBTaG9wcy5BTEwgfHwgY291cG9uLnNob3BBdmFpbGFiaWxpdHkgPT09IHRoaXMuZGVmYXVsdFNob3BcblxuICAgIC8vIEN1cG9uIG7Do28gYXBsaWNhdmVsIGEgbG9qYSByZXRvcm5hIGVycm9cbiAgICBpZiAoIWlzSW5TaG9wKSByZXR1cm4gdGhyb3dFcnJvcignQ3Vwb20gaW52w6FsaWRvIHBhcmEgbG9qYS4nKVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgbyBjb3Vwb24gw6kgYXBsaWNhZG8gbm8gY2hlY2tvdXQgcXVlIGVzdMOhIHNlbmRvIHJlYWxpemFkb1xuICAgIGNvbnN0IGlzQ2hlY2tvdXRUeXBlID0gY291cG9uLmNoZWNrb3V0VHlwZSA9PT0gQ2hlY2tvdXRUeXBlcy5BTEwgfHwgY291cG9uLmNoZWNrb3V0VHlwZSA9PT0gY2hlY2tvdXRUeXBlXG5cbiAgICAvLyBDdXBvbiBuw6NvIGFwbGljYXZlbCBhbyBjaGVja291dCByZXRvcm5hIGVycm9cbiAgICBpZiAoIWlzQ2hlY2tvdXRUeXBlKSByZXR1cm4gdGhyb3dFcnJvcignQ3Vwb20gaW52w6FsaWRvLiBFcnJvIGRlIGNoZWNrb3V0LicpXG5cbiAgICAvLyBWZXJpZmljYSBzZSBvIGN1cG9tIMOpIG91IHBvZGUgc2VyIGFwbGljYWRvIHBhcmEgc3Vic2NyaXB0aW9uXG4gICAgaWYgKGNoZWNrb3V0VHlwZSA9PT0gQ2hlY2tvdXRUeXBlcy5BTEwgfHwgY2hlY2tvdXRUeXBlID09PSBDaGVja291dFR5cGVzLlNVQlNDUklQVElPTikge1xuICAgICAgLy8gU2UgbyBjdXBvbSB0aXZlciB1bSBwbGFubyBhc3NvY2lhZG8sIHZlcmlmaWNhIHNlIMOpIG8gbWVzbW8gcGxhbm8gZG8gY2hlY2tvdXQgZGEgYXNzaW5hdHVyYVxuICAgICAgaWYgKGNvdXBvbi5wbGFuICYmIGNvdXBvbi5wbGFuLnRvVXBwZXJDYXNlKCkgIT09IHBsYW4udG9VcHBlckNhc2UoKSlcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ0N1cG9tIGludsOhbGlkbyBwYXJhIHN1YSBhc3NpbmF0dXJhLicpXG4gICAgfVxuXG4gICAgaWYgKGlzU3Vic2NyaXB0aW9uKSByZXR1cm4gb2YoY291cG9uKVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgcG9zc3VpIG8gdmFsb3IgbWluaW1vIGRlIGNvbXByYSBwYXJhIHV0aWxpemHDp8OjbyBkbyBjdXBvbVxuICAgIGNvbnN0IGhhc01pblN1YlRvdGFsID0gdGhpcy5oYXNNaW5TdWJUb3RhbChjb3Vwb24sIGNoZWNrb3V0KVxuXG4gICAgLy8gU2UgbsOjbyB0ZW0gdmFsb3IgbcOtbmltbyBhdGluZ2lkbywgcmV0b3JuYSBlcnJvXG4gICAgaWYgKCFoYXNNaW5TdWJUb3RhbClcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICBgVmFsb3IgbcOtbmltbyBkZSAke0ludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHsgc3R5bGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5OiAnQlJMJyB9KS5mb3JtYXQoXG4gICAgICAgICAgY291cG9uLm1pblN1YlRvdGFsVmFsdWUsXG4gICAgICAgICl9IG7Do28gYXRpbmdpZG9gLFxuICAgICAgKVxuXG4gICAgcmV0dXJuIG9mKGNvdXBvbilcbiAgfVxuXG4gIHByaXZhdGUgaXNWYWxpZENvdXBvbihjb3Vwb246IENvdXBvbiwgdXNlckVtYWlsOiBzdHJpbmcpOiBDb3Vwb24ge1xuICAgIC8vIFZlcmlmaWNhIGEgZGF0YSBkZSBpbmljaW8gZGUgdmFsaWRhZGUgZG8gY3Vwb21cbiAgICBpZiAoY291cG9uPy5iZWdpbkF0ID4gbmV3IERhdGUoKSkgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ3Vwb20gYWluZGEgbsOjbyBsaWJlcmFkby4nKVxuXG4gICAgLy8gVmVyaWZpY2EgYSBkYXRhIGRlIHZhbGlkYWRlIGRvIGN1cG9tXG4gICAgaWYgKGNvdXBvbj8uZXhwaXJlc0luIDwgbmV3IERhdGUoKSkgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ3Vwb20gZXhwaXJhZG8uJylcblxuICAgIHJldHVybiBjb3Vwb25cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tDb3Vwb25Vc2VBbmRMaW1pdChjb3Vwb246IENvdXBvbiwgdXNlckVtYWlsOiBzdHJpbmcsIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pikge1xuICAgIGNvbnN0IG9yZGVycyA9IGF3YWl0IHRoaXMub3JkZXJSZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgZmlsdGVyczoge1xuICAgICAgICBjb3Vwb246IHsgaWQ6IGNvdXBvbi5pZCB9LFxuICAgICAgICBwYXltZW50OiB7IHN0YXR1czogJ3BhaWQnIH0sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICAvLyBvcmRlcnMgcXVlIHVzdWFyaW8gamEgZmV6IGNvbSBvIGN1cG9tXG4gICAgY29uc3Qgb3JkZXJzVXNlckNvdXBvbiA9IG9yZGVycy5kYXRhLmZpbHRlcigobykgPT4gby51c2VyLmVtYWlsID09IHVzZXJFbWFpbClcblxuICAgIC8vIFZlcmlmaWNhIG8gbGltaXRlIGRlIHVzbyBkZSBjdXBvbSBwb3IgdXN1YXJpb1xuICAgIGlmIChjb3Vwb24udXNlTGltaXRQZXJVc2VyICYmIG9yZGVyc1VzZXJDb3Vwb24ubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignTGltaXRlIGRlIHVzbyBwb3IgdXN1w6FyaW8gYXRpbmdpZG8uJylcblxuICAgIC8vIFZlcmlmaWNhIG8gbGltaXRlIGRlIHVzbyBnZXJhbCBwb3IgdXN1YXJpb1xuICAgIGlmIChjb3Vwb24udXNlTGltaXQgJiYgb3JkZXJzLmRhdGEubGVuZ3RoID49IGNvdXBvbi51c2VMaW1pdClcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ291cG9uRXJyb3IoJ0xpbWl0ZSBkZSB1c28gYXRpbmdpZG8uJylcblxuICAgIGNvbnN0IHZhbGlkVXNlciA9IHRoaXMudXNlclZhbGlkYXRpb25BbmRTdWJzY3JpcHRpb25TdGF0dXMoY291cG9uLCBjaGVja291dD8udXNlcilcbiAgICBpZiAoIXZhbGlkVXNlcikgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignVXN1w6FyaW8gbsOjbyBlbGVnw612ZWwuJylcblxuICAgIGNvbnN0IGhhc1Byb2R1Y3RDYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5oYXNQcm9kdWN0Q2F0ZWdvcmllcyhjb3Vwb24sIGNoZWNrb3V0KVxuXG4gICAgaWYgKCFoYXNQcm9kdWN0Q2F0ZWdvcmllcykgdGhyb3cgJ1NldSBjYXJyaW5obyBuw6NvIHBvc3N1aSBwcm9kdXRvcyBlbGVnw612ZWlzIHBhcmEgZGVzY29udG8uJ1xuXG4gICAgcmV0dXJuIGNvdXBvblxuICB9XG5cbiAgcHVibGljIGNhbGNEaXNjb3VudFN1YnNjcmlwdGlvbihjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXRTdWJzY3JpcHRpb24+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAvL1xuICAgIGxldCBkaXNjb3VudCA9IDBcblxuICAgIGlmIChjb3Vwb24udHlwZSA9PT0gQ291cG9uVHlwZXMuQUJTT0xVVEUpIGRpc2NvdW50ID0gY291cG9uLmRpc2NvdW50XG4gICAgZWxzZSBpZiAoY291cG9uLnR5cGUgPT09IENvdXBvblR5cGVzLlBFUkNFTlRBR0UpXG4gICAgICBkaXNjb3VudCA9IGNoZWNrb3V0LnN1YnNjcmlwdGlvblBsYW4ucmVjdXJyZW5jZVByaWNlICogKGNvdXBvbi5kaXNjb3VudCAvIDEwMClcblxuICAgIHJldHVybiBvZihkaXNjb3VudClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjYWxjRGlzY291bnRTaG9wcGluZyhjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBsZXQgZGlzY291bnQgPSAwXG5cbiAgICBzd2l0Y2ggKGNvdXBvbi50eXBlKSB7XG4gICAgICBjYXNlIENvdXBvblR5cGVzLkFCU09MVVRFOiB7XG4gICAgICAgIGRpc2NvdW50ID0gY291cG9uLmRpc2NvdW50XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlIENvdXBvblR5cGVzLlBFUkNFTlRBR0U6IHtcbiAgICAgICAgZGlzY291bnQgPSBhd2FpdCB0aGlzLmNhbGNTaG9wcGluZ1BlcmNlbnRhZ2VEaXNjb3VudChjb3Vwb24sIGNoZWNrb3V0KVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaXNjb3VudFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWxjU2hvcHBpbmdQZXJjZW50YWdlRGlzY291bnQoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgbGV0IGRpc2NvdW50ID0gMFxuICAgIGNvbnN0IHNob3AgPSBjaGVja291dC5zaG9wXG4gICAgbGV0IGxpbmVJdGVuc0Rpc2NvdW50ID0gW11cbiAgICBjb25zdCBjb3Vwb25DYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDb3Vwb25DYXRlZ29yaWVzSWQoY291cG9uKVxuXG4gICAgaWYgKGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMgJiYgY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcy5sZW5ndGgpIHtcbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50ID0gY2hlY2tvdXQubGluZUl0ZW1zPy5maWx0ZXIoKGkpID0+IHtcbiAgICAgICAgaWYgKGkuY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGkuY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0LmlkID09IGMgfHwgY2F0LmZpcmVzdG9yZUlkID09IGMpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lSXRlbnNEaXNjb3VudCA9IGNoZWNrb3V0LmxpbmVJdGVtc1xuICAgIH1cblxuICAgIGNvbnN0IHN1YlRvdGFsID1cbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50LnJlZHVjZShcbiAgICAgICAgKGFjYywgY3VycjogTGluZUl0ZW0pID0+XG4gICAgICAgICAgY2hlY2tvdXQudXNlcj8uaXNTdWJzY3JpYmVyICYmIGN1cnIucHJpY2Vbc2hvcF0/LnN1YnNjcmliZXJQcmljZVxuICAgICAgICAgICAgPyBhY2MgKyBjdXJyLnByaWNlW3Nob3BdPy5zdWJzY3JpYmVyUHJpY2UgKiBjdXJyLnF1YW50aXR5XG4gICAgICAgICAgICA6IGFjYyArIGN1cnIucHJpY2VQYWlkICogY3Vyci5xdWFudGl0eSxcbiAgICAgICAgMCxcbiAgICAgICkgfHwgMFxuXG4gICAgZGlzY291bnQgPSBzdWJUb3RhbCAqIChjb3Vwb24uZGlzY291bnQgLyAxMDApXG5cbiAgICByZXR1cm4gZGlzY291bnRcbiAgfVxuXG4gIHByaXZhdGUgaGFzTWluU3ViVG90YWwoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IGJvb2xlYW4ge1xuICAgIGlmICghY291cG9uLm1pblN1YlRvdGFsVmFsdWUpIHJldHVybiB0cnVlXG5cbiAgICBjb25zdCBzaG9wID0gY2hlY2tvdXQuc2hvcFxuXG4gICAgbGV0IHN1YlRvdGFsID1cbiAgICAgIGNoZWNrb3V0LmxpbmVJdGVtcz8ucmVkdWNlKFxuICAgICAgICAoYWNjLCBjdXJyKSA9PlxuICAgICAgICAgIGNoZWNrb3V0LnVzZXI/LmlzU3Vic2NyaWJlciAmJiBjdXJyLnByaWNlW3Nob3BdPy5zdWJzY3JpYmVyUHJpY2VcbiAgICAgICAgICAgID8gYWNjICsgY3Vyci5wcmljZVtzaG9wXT8uc3Vic2NyaWJlclByaWNlICogY3Vyci5xdWFudGl0eVxuICAgICAgICAgICAgOiBhY2MgKyBjdXJyLnByaWNlUGFpZCAqIGN1cnIucXVhbnRpdHksXG4gICAgICAgIDAsXG4gICAgICApIHx8IDBcblxuICAgIGlmIChjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSA8PSBzdWJUb3RhbCkgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFzUHJvZHVjdENhdGVnb3JpZXMoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcyB8fCAhY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgY291cG9uQ2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKGNvdXBvbilcblxuICAgIGNvbnN0IGhhc0NhdGVnb3JpZXMgPSBjaGVja291dC5saW5lSXRlbXM/LmZpbHRlcigoaSkgPT4ge1xuICAgICAgaWYgKCFpLmNhdGVnb3JpZXMgfHwgIWkuY2F0ZWdvcmllcz8ubGVuZ3RoKSByZXR1cm4gdHJ1ZVxuICAgICAgcmV0dXJuIGkuY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0LmlkID09IGMgfHwgY2F0LmZpcmVzdG9yZUlkID09IGMpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gaGFzQ2F0ZWdvcmllcy5sZW5ndGggPyB0cnVlIDogZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgdXNlclZhbGlkYXRpb25BbmRTdWJzY3JpcHRpb25TdGF0dXMoY291cG9uOiBDb3Vwb24sIHVzZXI6IFVzZXIpOiBib29sZWFuIHtcbiAgICBpZiAoY291cG9uLmV4Y2x1c2l2aXR5VHlwZSA9PT0gRXhjbHVzaXZpdGllcy5BTExfVVNFUlMpIHJldHVybiB0cnVlXG4gICAgaWYgKCF1c2VyKSByZXR1cm4gdHJ1ZVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgbyBlbWFpbCBkbyB1c3XDoXJpbyDDqSBjb29ycG9yYXRpdm9cbiAgICBpZiAoIXRoaXMuZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IodXNlci5lbWFpbCkgJiYgY291cG9uLmV4Y2x1c2l2aXR5VHlwZSA9PT0gRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignVm9jw6ogbsOjbyDDqSBjb2xhYm9yYWRvci4nKVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgbyBlbWFpbCBkbyB1c3XDoXJpbyDDqSBhc3NvY2lhZG8gYW8gY3Vwb20gZGUgdXNvIHBvciB1c3VhcmlvXG4gICAgaWYgKGNvdXBvbi5leGNsdXNpdml0eVR5cGUgPT09IEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUiAmJiBjb3Vwb24udXNlckV4Y2x1c2l2ZUVtYWlsICE9PSB1c2VyLmVtYWlsKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ3Vwb20gbsOjbyDDqSB2w6FsaWRvIHBhcmEgZXN0ZSB1c3XDoXJpby4nKVxuXG4gICAgc3dpdGNoIChjb3Vwb24uZXhjbHVzaXZpdHlUeXBlKSB7XG4gICAgICBjYXNlIEV4Y2x1c2l2aXRpZXMuQUNUSVZFX1NVQlNDUklCRVI6XG4gICAgICAgIHJldHVybiB1c2VyLmlzU3Vic2NyaWJlciA/IHRydWUgOiBmYWxzZVxuXG4gICAgICBjYXNlIEV4Y2x1c2l2aXRpZXMuSU5BQ1RJVkVfU1VCU0NSSUJFUjpcbiAgICAgICAgcmV0dXJuIHVzZXIuaXNTdWJzY3JpYmVyID8gZmFsc2UgOiB0cnVlXG5cbiAgICAgIGNhc2UgRXhjbHVzaXZpdGllcy5OT05fU1VCU0NSSUJFUjpcbiAgICAgICAgcmV0dXJuIHVzZXIuaXNTdWJzY3JpYmVyID8gZmFsc2UgOiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKGNvdXBvbjogQ291cG9uKSB7XG4gICAgbGV0IGNvdXBvbkNhdGVnb3JpZXM6IHsgaWQ6IHN0cmluZzsgZmlyZXN0b3JlSWQ6IHN0cmluZyB9W10gPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBsZXQgYzogQ2F0ZWdvcnkgJiB7IGZpcmVzdG9yZUlkPzogc3RyaW5nIH0gPSBhd2FpdCB0aGlzLmNhdGVnb3J5UmVwb3NpdG9yeS5nZXQoe1xuICAgICAgICBpZDogY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0sXG4gICAgICB9KVxuICAgICAgY291cG9uQ2F0ZWdvcmllcy5wdXNoKHsgaWQ6IGMuaWQsIGZpcmVzdG9yZUlkOiBjLmZpcmVzdG9yZUlkIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdXBvbkNhdGVnb3JpZXNcbiAgfVxuXG4gIHByaXZhdGUgc2VwYXJhdGVWYWxpZENvdXBvbnMgPSAoXG4gICAgY291cG9uczogQ291cG9uW10sXG4gICAgdXNlckVtYWlsOiBzdHJpbmcsXG4gICk6IHsgdmFsaWRzOiBDb3Vwb25bXTsgaW52YWxpZHM6IEludmFsaWRDb3Vwb25FcnJvcltdIH0gPT5cbiAgICBjb3Vwb25zXG4gICAgICAubWFwKChjb3Vwb24pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIShjb3Vwb24gaW5zdGFuY2VvZiBDb3Vwb24pKSB0aHJvdyBuZXcgSW52YWxpZENvdXBvbkVycm9yKCdDdXBvbSBpbnbDoWxpZG8uJylcbiAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkQ291cG9uKGNvdXBvbiwgdXNlckVtYWlsKSkgcmV0dXJuIGNvdXBvblxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvciBhcyBJbnZhbGlkQ291cG9uRXJyb3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChjdXJyZW50LCBjb3Vwb24pID0+ICh7XG4gICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAuLi4oY291cG9uIGluc3RhbmNlb2YgQ291cG9uXG4gICAgICAgICAgICA/IHsgdmFsaWRzOiBbLi4uY3VycmVudC52YWxpZHMsIGNvdXBvbl0gfVxuICAgICAgICAgICAgOiB7IGludmFsaWRzOiBbLi4uY3VycmVudC5pbnZhbGlkcywgY291cG9uXSB9KSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZHM6IFtdIGFzIENvdXBvbltdLFxuICAgICAgICAgIGludmFsaWRzOiBbXSBhcyBJbnZhbGlkQ291cG9uRXJyb3JbXSxcbiAgICAgICAgfSxcbiAgICAgIClcbn1cbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CustomError } from 'ts-custom-error';
|
|
2
|
+
export class GroupInvalidCouponError extends CustomError {
|
|
3
|
+
constructor(errors) {
|
|
4
|
+
super('Many coupon errors throw');
|
|
5
|
+
this.errors = errors;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtaW52YWxpZC1jb3Vwb24uZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2Vycm9ycy9ncm91cC1pbnZhbGlkLWNvdXBvbi5lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFJN0MsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFdBQVc7SUFDdEQsWUFBcUIsTUFBNEI7UUFDL0MsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUE7UUFEZCxXQUFNLEdBQU4sTUFBTSxDQUFzQjtJQUVqRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXN0b21FcnJvciB9IGZyb20gJ3RzLWN1c3RvbS1lcnJvcidcblxuaW1wb3J0IHsgSW52YWxpZENvdXBvbkVycm9yIH0gZnJvbSAnLi9pbnZhbGlkLWNvdXBvbi5lcnJvcidcblxuZXhwb3J0IGNsYXNzIEdyb3VwSW52YWxpZENvdXBvbkVycm9yIGV4dGVuZHMgQ3VzdG9tRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBlcnJvcnM6IEludmFsaWRDb3Vwb25FcnJvcltdKSB7XG4gICAgc3VwZXIoJ01hbnkgY291cG9uIGVycm9ycyB0aHJvdycpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './invalid-coupon.error';
|
|
2
|
+
export * from './group-invalid-coupon.error';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2Vycm9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFBO0FBQ3RDLGNBQWMsOEJBQThCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ludmFsaWQtY291cG9uLmVycm9yJ1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cC1pbnZhbGlkLWNvdXBvbi5lcnJvcidcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CustomError } from 'ts-custom-error';
|
|
2
|
+
export class InvalidCouponError extends CustomError {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.message = message;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52YWxpZC1jb3Vwb24uZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2Vycm9ycy9pbnZhbGlkLWNvdXBvbi5lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFN0MsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFdBQVc7SUFDakQsWUFBcUIsT0FBTztRQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFESyxZQUFPLEdBQVAsT0FBTyxDQUFBO0lBRTVCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1c3RvbUVycm9yIH0gZnJvbSAndHMtY3VzdG9tLWVycm9yJ1xuXG5leHBvcnQgY2xhc3MgSW52YWxpZENvdXBvbkVycm9yIGV4dGVuZHMgQ3VzdG9tRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgfVxufVxuIl19
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
export * from './auth.service';
|
|
2
2
|
export * from './cart.service';
|
|
3
|
-
export * from './catalog';
|
|
4
3
|
export * from './checkout-subscription.service';
|
|
5
4
|
export * from './checkout.service';
|
|
6
5
|
export * from './coupon.service';
|
|
7
6
|
export * from './home-shop.service';
|
|
8
7
|
export * from './order.service';
|
|
9
8
|
export * from './shipping.service';
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLGlDQUFpQyxDQUFBO0FBQy9DLGNBQWMsb0JBQW9CLENBQUE7QUFDbEMsY0FBYyxrQkFBa0IsQ0FBQTtBQUNoQyxjQUFjLHFCQUFxQixDQUFBO0FBQ25DLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxvQkFBb0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXV0aC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9jYXJ0LnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL2NoZWNrb3V0LXN1YnNjcmlwdGlvbi5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9jaGVja291dC5zZXJ2aWNlJ1xuZXhwb3J0ICogZnJvbSAnLi9jb3Vwb24uc2VydmljZSdcbmV4cG9ydCAqIGZyb20gJy4vaG9tZS1zaG9wLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL29yZGVyLnNlcnZpY2UnXG5leHBvcnQgKiBmcm9tICcuL3NoaXBwaW5nLnNlcnZpY2UnXG5cbiJdfQ==
|