@infrab4a/connect-angular 4.10.0-beta.11 → 4.10.0-beta.2
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 +29 -27
- package/angular-elastic-search.module.d.ts +9 -9
- package/angular-firebase-auth.module.d.ts +11 -11
- package/angular-firestore.module.d.ts +17 -17
- package/angular-hasura-graphql.module.d.ts +16 -16
- package/angular-vertex-search.module.d.ts +9 -0
- package/consts/backend-url.const.d.ts +1 -1
- package/consts/category-structure.d.ts +1 -1
- package/consts/default-shop.const.d.ts +1 -1
- package/consts/es-config.const.d.ts +1 -1
- package/consts/firebase-const.d.ts +3 -3
- package/consts/hasura-options.const.d.ts +1 -1
- package/consts/index.d.ts +8 -7
- package/consts/persistence.const.d.ts +1 -1
- package/consts/storage-base-url.const.d.ts +1 -1
- package/consts/vertex-config.const.d.ts +1 -0
- package/esm2020/angular-connect.module.mjs +146 -0
- package/esm2020/angular-elastic-search.module.mjs +34 -0
- package/esm2020/angular-firebase-auth.module.mjs +115 -0
- package/esm2020/angular-firestore.module.mjs +499 -0
- package/esm2020/angular-hasura-graphql.module.mjs +287 -0
- package/esm2020/angular-vertex-search.module.mjs +34 -0
- package/{esm2022 → esm2020}/consts/backend-url.const.mjs +1 -1
- package/{esm2022 → esm2020}/consts/category-structure.mjs +2 -2
- package/{esm2022 → esm2020}/consts/default-shop.const.mjs +2 -2
- package/{esm2022 → esm2020}/consts/es-config.const.mjs +2 -2
- package/{esm2022 → esm2020}/consts/firebase-const.mjs +4 -4
- package/{esm2022 → esm2020}/consts/hasura-options.const.mjs +2 -2
- package/{esm2022 → esm2020}/consts/index.mjs +9 -8
- package/{esm2022 → esm2020}/consts/persistence.const.mjs +2 -2
- package/{esm2022 → esm2020}/consts/storage-base-url.const.mjs +2 -2
- package/esm2020/consts/vertex-config.const.mjs +2 -0
- package/{esm2022 → esm2020}/helpers/index.mjs +2 -2
- package/{esm2022 → esm2020}/helpers/mobile-operation-system-checker.helper.mjs +7 -7
- package/{esm2022 → esm2020}/index.mjs +7 -7
- package/{esm2022 → esm2020}/infrab4a-connect-angular.mjs +4 -4
- package/{esm2022 → esm2020}/persistence/cookie-data-persistence.mjs +22 -22
- package/{esm2022 → esm2020}/persistence/data-persistence.mjs +2 -2
- package/{esm2022 → esm2020}/persistence/index.mjs +3 -3
- package/{esm2022 → esm2020}/services/auth.service.mjs +37 -37
- package/esm2020/services/cart.service.mjs +282 -0
- package/{esm2022 → esm2020}/services/catalog/adapters/category-structure.adapter.mjs +2 -2
- package/{esm2022 → esm2020}/services/catalog/adapters/index.mjs +4 -4
- package/{esm2022 → esm2020}/services/catalog/adapters/new-category-structure.adapter.mjs +43 -43
- package/{esm2022 → esm2020}/services/catalog/adapters/old-category-structure.adapter.mjs +23 -23
- package/esm2020/services/catalog/catalog.service.mjs +252 -0
- package/{esm2022 → esm2020}/services/catalog/category.service.mjs +51 -51
- package/{esm2022 → esm2020}/services/catalog/enums/index.mjs +2 -2
- package/{esm2022 → esm2020}/services/catalog/enums/product-sorts.enum.mjs +11 -11
- package/{esm2022 → esm2020}/services/catalog/index.mjs +8 -8
- package/{esm2022 → esm2020}/services/catalog/models/category-with-tree.model.mjs +10 -10
- package/{esm2022 → esm2020}/services/catalog/models/index.mjs +2 -2
- package/{esm2022 → esm2020}/services/catalog/types/index.mjs +2 -2
- package/{esm2022 → esm2020}/services/catalog/types/product-sort.type.mjs +2 -2
- package/esm2020/services/catalog/wishlist.service.mjs +129 -0
- package/{esm2022 → esm2020}/services/checkout-subscription.service.mjs +50 -50
- package/{esm2022 → esm2020}/services/checkout.service.mjs +68 -68
- package/esm2020/services/coupon.service.mjs +260 -0
- package/{esm2022 → esm2020}/services/helpers/index.mjs +2 -2
- package/{esm2022 → esm2020}/services/helpers/util.helper.mjs +18 -18
- package/{esm2022 → esm2020}/services/home-shop.service.mjs +125 -125
- package/{esm2022 → esm2020}/services/index.mjs +11 -11
- package/{esm2022 → esm2020}/services/order.service.mjs +30 -30
- package/{esm2022 → esm2020}/services/shipping.service.mjs +96 -96
- package/{esm2022 → esm2020}/services/types/index.mjs +3 -3
- package/{esm2022 → esm2020}/services/types/required-checkout-data.type.mjs +2 -2
- package/{esm2022 → esm2020}/services/types/required-checkout-subscription-data.type.mjs +2 -2
- package/esm2020/services/types/shipping-methods.type.mjs +2 -0
- package/{esm2022 → esm2020}/types/firebase-app-config.type.mjs +2 -2
- package/{esm2022 → esm2020}/types/index.mjs +2 -2
- package/fesm2015/infrab4a-connect-angular.mjs +2588 -0
- package/fesm2015/infrab4a-connect-angular.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/infrab4a-connect-angular.mjs +2458 -2404
- package/fesm2020/infrab4a-connect-angular.mjs.map +1 -0
- package/helpers/index.d.ts +1 -1
- package/helpers/mobile-operation-system-checker.helper.d.ts +3 -3
- package/index.d.ts +6 -6
- package/package.json +12 -6
- package/persistence/cookie-data-persistence.d.ts +10 -10
- package/persistence/data-persistence.d.ts +6 -6
- package/persistence/index.d.ts +2 -2
- package/services/auth.service.d.ts +18 -18
- package/services/cart.service.d.ts +42 -42
- package/services/catalog/adapters/category-structure.adapter.d.ts +4 -4
- package/services/catalog/adapters/index.d.ts +3 -3
- package/services/catalog/adapters/new-category-structure.adapter.d.ts +12 -12
- package/services/catalog/adapters/old-category-structure.adapter.d.ts +10 -10
- package/services/catalog/catalog.service.d.ts +89 -89
- package/services/catalog/category.service.d.ts +20 -20
- package/services/catalog/enums/index.d.ts +1 -1
- package/services/catalog/enums/product-sorts.enum.d.ts +9 -9
- package/services/catalog/index.d.ts +7 -7
- package/services/catalog/models/category-with-tree.model.d.ts +4 -4
- package/services/catalog/models/index.d.ts +1 -1
- package/services/catalog/types/index.d.ts +1 -1
- package/services/catalog/types/product-sort.type.d.ts +2 -2
- package/services/catalog/wishlist.service.d.ts +44 -44
- package/services/checkout-subscription.service.d.ts +19 -19
- package/services/checkout.service.d.ts +27 -27
- package/services/coupon.service.d.ts +33 -33
- package/services/helpers/index.d.ts +1 -1
- package/services/helpers/util.helper.d.ts +3 -3
- package/services/home-shop.service.d.ts +26 -26
- package/services/index.d.ts +10 -10
- package/services/order.service.d.ts +13 -13
- package/services/shipping.service.d.ts +19 -19
- package/services/types/index.d.ts +2 -2
- package/services/types/required-checkout-data.type.d.ts +2 -2
- package/services/types/required-checkout-subscription-data.type.d.ts +2 -2
- package/services/types/shipping-methods.type.d.ts +12 -12
- package/types/firebase-app-config.type.d.ts +1 -1
- package/types/index.d.ts +1 -1
- package/esm2022/angular-connect.module.mjs +0 -133
- package/esm2022/angular-elastic-search.module.mjs +0 -34
- package/esm2022/angular-firebase-auth.module.mjs +0 -115
- package/esm2022/angular-firestore.module.mjs +0 -499
- package/esm2022/angular-hasura-graphql.module.mjs +0 -287
- package/esm2022/services/cart.service.mjs +0 -284
- package/esm2022/services/catalog/catalog.service.mjs +0 -235
- package/esm2022/services/catalog/wishlist.service.mjs +0 -129
- package/esm2022/services/coupon.service.mjs +0 -265
- package/esm2022/services/types/shipping-methods.type.mjs +0 -2
- package/fesm2022/infrab4a-connect-angular.mjs.map +0 -1
|
@@ -0,0 +1,260 @@
|
|
|
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 discountInfo = null;
|
|
84
|
+
if (checkout.user.isSubscriber && coupon.discount.subscriber.value) {
|
|
85
|
+
discountInfo = await this.calcDiscountByType(coupon.discount.subscriber.type, coupon.discount.subscriber.value, coupon.productsCategories, checkout);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
discountInfo = await this.calcDiscountByType(coupon.discount.non_subscriber.type, coupon.discount.non_subscriber.value, coupon.productsCategories, checkout);
|
|
89
|
+
}
|
|
90
|
+
return { discount: discountInfo.discount, lineItems: discountInfo.lineItems };
|
|
91
|
+
}
|
|
92
|
+
async calcDiscountByType(type, value, categories, checkout) {
|
|
93
|
+
let discount = 0;
|
|
94
|
+
let lineItensElegibleForDiscount = await this.getLineItensEligebleForDiscount(categories, checkout);
|
|
95
|
+
const subTotal = this.calcCheckoutSubtotal(lineItensElegibleForDiscount, checkout.user);
|
|
96
|
+
if (type == CouponTypes.ABSOLUTE) {
|
|
97
|
+
discount = value > subTotal ? subTotal : value;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
discount = subTotal * (value / 100);
|
|
101
|
+
}
|
|
102
|
+
const lineItems = this.calcLineItenDiscount(type, lineItensElegibleForDiscount, value, subTotal);
|
|
103
|
+
return { discount, lineItems };
|
|
104
|
+
}
|
|
105
|
+
async hasMinSubTotal(coupon, checkout) {
|
|
106
|
+
if (!coupon.minSubTotalValue)
|
|
107
|
+
return true;
|
|
108
|
+
let lineItensDiscount = await this.getLineItensEligebleForDiscount(coupon.productsCategories, checkout);
|
|
109
|
+
const subTotal = this.calcCheckoutSubtotal(lineItensDiscount, checkout.user);
|
|
110
|
+
if (coupon.minSubTotalValue <= subTotal)
|
|
111
|
+
return true;
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
async hasProductCategories(coupon, checkout) {
|
|
115
|
+
if (!coupon.productsCategories || !coupon.productsCategories.length) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
const couponCategories = await this.getCouponCategoriesId(coupon.productsCategories);
|
|
119
|
+
const hasCategories = checkout.lineItems?.filter((i) => {
|
|
120
|
+
if (!i.categories || !i.categories?.length)
|
|
121
|
+
return true;
|
|
122
|
+
return i.categories.some((c) => couponCategories.some((cat) => cat == c));
|
|
123
|
+
});
|
|
124
|
+
return hasCategories.length ? true : false;
|
|
125
|
+
}
|
|
126
|
+
coupomUserValidation(coupon, user) {
|
|
127
|
+
if (!user || coupon.exclusivityType.includes(Exclusivities.ALL_USERS))
|
|
128
|
+
return true;
|
|
129
|
+
let userTypes = [];
|
|
130
|
+
if (coupon.exclusivityType.includes(Exclusivities.COLLABORATORS) &&
|
|
131
|
+
this.emailIsFromCollaborator(user.email.toLocaleLowerCase()))
|
|
132
|
+
userTypes.push(Exclusivities.COLLABORATORS);
|
|
133
|
+
if (coupon.exclusivityType.includes(Exclusivities.SPECIFIC_USER) &&
|
|
134
|
+
coupon.userExclusiveEmail.includes(user.email.toLocaleLowerCase()))
|
|
135
|
+
userTypes.push(Exclusivities.SPECIFIC_USER);
|
|
136
|
+
if (coupon.exclusivityType.includes(Exclusivities.ACTIVE_SUBSCRIBER) &&
|
|
137
|
+
user.isSubscriber &&
|
|
138
|
+
user.subscriptionPlan != '')
|
|
139
|
+
userTypes.push(Exclusivities.ACTIVE_SUBSCRIBER);
|
|
140
|
+
if (user.isSubscriber &&
|
|
141
|
+
user.subscriptionPlan == '' &&
|
|
142
|
+
coupon.exclusivityType.includes(Exclusivities.INACTIVE_SUBSCRIBER))
|
|
143
|
+
userTypes.push(Exclusivities.INACTIVE_SUBSCRIBER);
|
|
144
|
+
if (coupon.exclusivityType.includes(Exclusivities.NON_SUBSCRIBER) && !user.isSubscriber)
|
|
145
|
+
userTypes.push(Exclusivities.NON_SUBSCRIBER);
|
|
146
|
+
return coupon.exclusivityType.some((r) => userTypes.includes(r));
|
|
147
|
+
}
|
|
148
|
+
async getCouponCategoriesId(productsCategories) {
|
|
149
|
+
const couponCategories = [];
|
|
150
|
+
for (let index = 0; index < productsCategories.length; index++) {
|
|
151
|
+
const category = await this.categoryRepository.get({
|
|
152
|
+
id: productsCategories[index],
|
|
153
|
+
});
|
|
154
|
+
if (category) {
|
|
155
|
+
const children = await this.categoryRepository.getChildren(parseInt(productsCategories[index]));
|
|
156
|
+
couponCategories.push(category.id, ...children.map((c) => c.id.toString()));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return [...new Set(couponCategories)];
|
|
160
|
+
}
|
|
161
|
+
async getLineItensEligebleForDiscount(productsCategories, checkout) {
|
|
162
|
+
let lineItensDiscount = [];
|
|
163
|
+
const couponCategories = await this.getCouponCategoriesId(productsCategories);
|
|
164
|
+
if (productsCategories && productsCategories.length) {
|
|
165
|
+
lineItensDiscount = checkout.lineItems?.filter((i) => {
|
|
166
|
+
if (i.categories?.length) {
|
|
167
|
+
return i.categories.some((c) => couponCategories.some((cat) => cat == c));
|
|
168
|
+
}
|
|
169
|
+
return true;
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
lineItensDiscount = checkout.lineItems;
|
|
174
|
+
}
|
|
175
|
+
return lineItensDiscount;
|
|
176
|
+
}
|
|
177
|
+
calcCheckoutSubtotal(lineItens, user) {
|
|
178
|
+
return (lineItens?.reduce((acc, curr) => user?.isSubscriber && curr.price.subscriberPrice
|
|
179
|
+
? acc + curr.price?.subscriberPrice * curr.quantity
|
|
180
|
+
: acc + curr.pricePaid * curr.quantity, 0) || 0);
|
|
181
|
+
}
|
|
182
|
+
async getOrdersWithCoupon(coupon) {
|
|
183
|
+
return await this.orderRepository
|
|
184
|
+
.find({
|
|
185
|
+
filters: {
|
|
186
|
+
coupon: { id: coupon.id },
|
|
187
|
+
payment: { status: 'paid' },
|
|
188
|
+
},
|
|
189
|
+
})
|
|
190
|
+
.then((result) => result.data);
|
|
191
|
+
}
|
|
192
|
+
async getOrdersFromUser(email) {
|
|
193
|
+
return await this.orderRepository
|
|
194
|
+
.find({
|
|
195
|
+
filters: {
|
|
196
|
+
user: { email: { operator: Where.EQUALS, value: email } },
|
|
197
|
+
payment: { status: 'paid' },
|
|
198
|
+
},
|
|
199
|
+
})
|
|
200
|
+
.then((result) => result.data);
|
|
201
|
+
}
|
|
202
|
+
countOrdersWithUser(orders, email) {
|
|
203
|
+
return orders.filter((o) => o.user.email == email).length;
|
|
204
|
+
}
|
|
205
|
+
getCouponUseLimits(coupon, checkoutType, user) {
|
|
206
|
+
let couponUseLimits;
|
|
207
|
+
if (checkoutType == CheckoutTypes.ECOMMERCE || checkoutType == CheckoutTypes.ALL) {
|
|
208
|
+
couponUseLimits = user && user.isSubscriber ? coupon.useLimits.subscriber : coupon.useLimits.non_subscriber;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
couponUseLimits = coupon.useLimits.subscription;
|
|
212
|
+
}
|
|
213
|
+
return couponUseLimits;
|
|
214
|
+
}
|
|
215
|
+
calcLineItenDiscount(type, lineItems, couponDiscount, subTotal) {
|
|
216
|
+
let lineItemsDiscount = [];
|
|
217
|
+
if (type === CouponTypes.ABSOLUTE) {
|
|
218
|
+
const couponDiscountMax = couponDiscount > subTotal ? subTotal : couponDiscount;
|
|
219
|
+
lineItemsDiscount = lineItems.map((item) => {
|
|
220
|
+
const totalItemPercentage = item.pricePaid / subTotal;
|
|
221
|
+
const discountItem = couponDiscountMax * totalItemPercentage;
|
|
222
|
+
return {
|
|
223
|
+
...item,
|
|
224
|
+
discount: Number(discountItem.toFixed(2)),
|
|
225
|
+
};
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
lineItemsDiscount = lineItems.map((item) => {
|
|
230
|
+
const discountItem = item.pricePaid * (couponDiscount / 100);
|
|
231
|
+
return {
|
|
232
|
+
...item,
|
|
233
|
+
discount: Number(discountItem.toFixed(2)),
|
|
234
|
+
};
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
return lineItemsDiscount;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
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 });
|
|
241
|
+
CouponService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CouponService, providedIn: 'root' });
|
|
242
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CouponService, decorators: [{
|
|
243
|
+
type: Injectable,
|
|
244
|
+
args: [{
|
|
245
|
+
providedIn: 'root',
|
|
246
|
+
}]
|
|
247
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
248
|
+
type: Inject,
|
|
249
|
+
args: ['CouponRepository']
|
|
250
|
+
}] }, { type: i1.Shops, decorators: [{
|
|
251
|
+
type: Inject,
|
|
252
|
+
args: [DEFAULT_SHOP]
|
|
253
|
+
}] }, { type: undefined, decorators: [{
|
|
254
|
+
type: Inject,
|
|
255
|
+
args: ['OrderRepository']
|
|
256
|
+
}] }, { type: undefined, decorators: [{
|
|
257
|
+
type: Inject,
|
|
258
|
+
args: ['CategoryRepository']
|
|
259
|
+
}] }]; } });
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFLTCxhQUFhLEVBR2IsV0FBVyxFQUNYLGFBQWEsRUFJYixLQUFLLEVBRUwsS0FBSyxHQUNOLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBOzs7QUFLeEMsTUFBTSxPQUFPLGFBQWE7SUFDeEIsWUFDK0MsZ0JBQWtDLEVBQ3hDLFdBQWtCLEVBQ2IsZUFBZ0MsRUFDN0Isa0JBQXNDO1FBSHhDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDeEMsZ0JBQVcsR0FBWCxXQUFXLENBQU87UUFDYixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDN0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXdPL0UsNEJBQXVCLEdBQUcsQ0FBQyxTQUFpQixFQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQXZPakcsQ0FBQztJQUVKLFdBQVcsQ0FDVCxRQUFnQixFQUNoQixZQUEyQixFQUMzQixRQUEyQixFQUMzQixJQUFZO1FBRVosT0FBTyxJQUFJLENBQ1QsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixJQUFJLENBQUM7WUFDSixPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FB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ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7XHJcbiAgQ2F0ZWdvcnksXHJcbiAgQ2F0ZWdvcnlSZXBvc2l0b3J5LFxyXG4gIENoZWNrb3V0LFxyXG4gIENoZWNrb3V0U3Vic2NyaXB0aW9uLFxyXG4gIENoZWNrb3V0VHlwZXMsXHJcbiAgQ291cG9uLFxyXG4gIENvdXBvblJlcG9zaXRvcnksXHJcbiAgQ291cG9uVHlwZXMsXHJcbiAgRXhjbHVzaXZpdGllcyxcclxuICBMaW5lSXRlbSxcclxuICBPcmRlcixcclxuICBPcmRlclJlcG9zaXRvcnksXHJcbiAgU2hvcHMsXHJcbiAgVXNlcixcclxuICBXaGVyZSxcclxufSBmcm9tICdAaW5mcmFiNGEvY29ubmVjdCdcclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBERUZBVUxUX1NIT1AgfSBmcm9tICcuLi9jb25zdHMnXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ291cG9uU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdDb3Vwb25SZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjb3Vwb25SZXBvc2l0b3J5OiBDb3Vwb25SZXBvc2l0b3J5LFxyXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFNob3A6IFNob3BzLFxyXG4gICAgQEluamVjdCgnT3JkZXJSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBvcmRlclJlcG9zaXRvcnk6IE9yZGVyUmVwb3NpdG9yeSxcclxuICAgIEBJbmplY3QoJ0NhdGVnb3J5UmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlSZXBvc2l0b3J5OiBDYXRlZ29yeVJlcG9zaXRvcnksXHJcbiAgKSB7fVxyXG5cclxuICBjaGVja0NvdXBvbihcclxuICAgIG5pY2tuYW1lOiBzdHJpbmcsXHJcbiAgICBjaGVja291dFR5cGU6IENoZWNrb3V0VHlwZXMsXHJcbiAgICBjaGVja291dDogUGFydGlhbDxDaGVja291dD4sXHJcbiAgICBwbGFuOiBzdHJpbmcsXHJcbiAgKTogT2JzZXJ2YWJsZTxDb3Vwb24+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICB0aGlzLmNvdXBvblJlcG9zaXRvcnlcclxuICAgICAgICAuZmluZCh7XHJcbiAgICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICAgIG5pY2tuYW1lOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiBuaWNrbmFtZSB9LFxyXG4gICAgICAgICAgICBhY3RpdmU6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IHRydWUgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgICAudGhlbigocmVzdWx0KSA9PiByZXN1bHQuZGF0YVswXSksXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIGNvbmNhdE1hcCgoY291cG9uKSA9PiB0aGlzLmNvdXBvblZhbGlkYXRpb24oY291cG9uLCBjaGVja291dFR5cGUpKSxcclxuICAgICAgY29uY2F0TWFwKChjb3Vwb25WYWxpZDogQ291cG9uKSA9PiB0aGlzLmNvdXBvblJ1bGVzVmFsaWRhdGlvbihjb3Vwb25WYWxpZCwgY2hlY2tvdXRUeXBlLCBjaGVja291dCwgcGxhbikpLFxyXG4gICAgICBtYXAoKGNvdXBvblZhbGlkYXRlZDogQ291cG9uKSA9PiBjb3Vwb25WYWxpZGF0ZWQgYXMgQ291cG9uKSxcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY291cG9uVmFsaWRhdGlvbihjb3Vwb246IENvdXBvbiwgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzKSB7XHJcbiAgICBpZiAoIWNvdXBvbikgdGhyb3cgJ0N1cG9tIGludsOhbGlkby4nXHJcblxyXG4gICAgaWYgKGNvdXBvbj8uYmVnaW5BdCAmJiBjb3Vwb24/LmJlZ2luQXQuZ2V0VGltZSgpID4gbmV3IERhdGUoKS5nZXRUaW1lKCkpIHRocm93ICdDdXBvbSBpbnbDoWxpZG8uJ1xyXG5cclxuICAgIGlmIChjb3Vwb24/LmV4cGlyZXNJbiAmJiBjb3Vwb24/LmV4cGlyZXNJbi5nZXRUaW1lKCkgPCBuZXcgRGF0ZSgpLmdldFRpbWUoKSkgdGhyb3cgJ0N1cG9tIGV4cGlyYWRvLidcclxuXHJcbiAgICBjb25zdCBpc0luU2hvcCA9IGNvdXBvbi5zaG9wQXZhaWxhYmlsaXR5ID09PSBTaG9wcy5BTEwgfHwgY291cG9uLnNob3BBdmFpbGFiaWxpdHkgPT09IHRoaXMuZGVmYXVsdFNob3BcclxuXHJcbiAgICBpZiAoIWlzSW5TaG9wKSB0aHJvdyAnQ3Vwb20gaW52w6FsaWRvIHBhcmEgbG9qYS4nXHJcblxyXG4gICAgY29uc3QgaXNDaGVja291dFR5cGUgPSBjb3Vwb24uY2hlY2tvdXRUeXBlID09PSBDaGVja291dFR5cGVzLkFMTCB8fCBjb3Vwb24uY2hlY2tvdXRUeXBlID09PSBjaGVja291dFR5cGVcclxuXHJcbiAgICBpZiAoIWlzQ2hlY2tvdXRUeXBlKSB0aHJvdyAnQ3Vwb20gaW52w6FsaWRvLiBFcnJvIGRlIGNoZWNrb3V0LidcclxuXHJcbiAgICByZXR1cm4gY291cG9uXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvdXBvblJ1bGVzVmFsaWRhdGlvbihcclxuICAgIGNvdXBvbjogQ291cG9uLFxyXG4gICAgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzLFxyXG4gICAgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+LFxyXG4gICAgcGxhbjogc3RyaW5nLFxyXG4gICkge1xyXG4gICAgaWYgKGNoZWNrb3V0VHlwZSA9PSBDaGVja291dFR5cGVzLlNVQlNDUklQVElPTikge1xyXG4gICAgICBpZiAoY291cG9uLnBsYW4gJiYgY291cG9uLnBsYW4udG9VcHBlckNhc2UoKSAhPT0gcGxhbi50b1VwcGVyQ2FzZSgpKSB0aHJvdyAnQ3Vwb20gaW52w6FsaWRvIHBhcmEgc3VhIGFzc2luYXR1cmEuJ1xyXG5cclxuICAgICAgcmV0dXJuIGNvdXBvblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHZhbGlkVXNlciA9IHRoaXMuY291cG9tVXNlclZhbGlkYXRpb24oY291cG9uLCBjaGVja291dD8udXNlcilcclxuXHJcbiAgICBpZiAoIXZhbGlkVXNlcikgdGhyb3cgJ1VzdcOhcmlvIG7Do28gZWxlZ8OtdmVsLidcclxuXHJcbiAgICBjb25zdCBjb3Vwb25Vc2VMaW1pdHMgPSB0aGlzLmdldENvdXBvblVzZUxpbWl0cyhjb3Vwb24sIGNoZWNrb3V0VHlwZSwgY2hlY2tvdXQudXNlcilcclxuXHJcbiAgICBpZiAoY291cG9uVXNlTGltaXRzLmZpcnN0T3JkZXIpIHtcclxuICAgICAgY29uc3Qgb3JkZXJzVXNlciA9IGF3YWl0IHRoaXMuZ2V0T3JkZXJzRnJvbVVzZXIoY2hlY2tvdXQudXNlci5lbWFpbC50b0xvY2FsZUxvd2VyQ2FzZSgpKVxyXG4gICAgICBpZiAoY291cG9uVXNlTGltaXRzLmZpcnN0T3JkZXIgJiYgb3JkZXJzVXNlci5sZW5ndGggPj0gMSkgdGhyb3cgJ0xpbWl0ZSBkZSB1c28gYXRpbmdpZG8nXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb3Vwb25Vc2VMaW1pdHMudW5saW1pdGVkIHx8IGNvdXBvblVzZUxpbWl0cy5saW1pdGVkUGVyVXNlcikge1xyXG4gICAgICBjb25zdCBvcmRlcnMgPSBhd2FpdCB0aGlzLmdldE9yZGVyc1dpdGhDb3Vwb24oY291cG9uKVxyXG5cclxuICAgICAgaWYgKCFjb3Vwb25Vc2VMaW1pdHMudW5saW1pdGVkICYmIGNvdXBvblVzZUxpbWl0cy50b3RhbCAmJiBvcmRlcnMubGVuZ3RoID49IGNvdXBvblVzZUxpbWl0cy50b3RhbClcclxuICAgICAgICB0aHJvdyAnTGltaXRlIGRlIHVzbyBhdGluZ2lkby4nXHJcblxyXG4gICAgICBpZiAoY291cG9uVXNlTGltaXRzLmxpbWl0ZWRQZXJVc2VyKSB7XHJcbiAgICAgICAgY29uc3Qgb3JkZXJzV2l0aFVzZXIgPSB0aGlzLmNvdW50T3JkZXJzV2l0aFVzZXIob3JkZXJzLCBjaGVja291dC51c2VyLmVtYWlsKVxyXG5cclxuICAgICAgICBpZiAob3JkZXJzV2l0aFVzZXIgPiAwKSB0aHJvdyAnTGltaXRlIGRlIHVzbyBwb3IgdXN1w6FyaW8gYXRpbmdpZG8uJ1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaGFzUHJvZHVjdENhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmhhc1Byb2R1Y3RDYXRlZ29yaWVzKGNvdXBvbiwgY2hlY2tvdXQpXHJcblxyXG4gICAgaWYgKCFoYXNQcm9kdWN0Q2F0ZWdvcmllcykgdGhyb3cgJ1NldSBjYXJyaW5obyBuw6NvIHBvc3N1aSBwcm9kdXRvcyBlbGVnw612ZWlzIHBhcmEgZGVzY29udG8uJ1xyXG5cclxuICAgIGNvbnN0IGhhc01pblN1YlRvdGFsID0gYXdhaXQgdGhpcy5oYXNNaW5TdWJUb3RhbChjb3Vwb24sIGNoZWNrb3V0KVxyXG5cclxuICAgIGlmICghaGFzTWluU3ViVG90YWwpXHJcbiAgICAgIHRocm93IGBWYWxvciBtw61uaW1vIGRlICR7SW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywgeyBzdHlsZTogJ2N1cnJlbmN5JywgY3VycmVuY3k6ICdCUkwnIH0pLmZvcm1hdChcclxuICAgICAgICBjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSxcclxuICAgICAgKX0gbsOjbyBhdGluZ2lkb2BcclxuXHJcbiAgICByZXR1cm4gY291cG9uXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FsY0Rpc2NvdW50U3Vic2NyaXB0aW9uKGNvdXBvbjogQ291cG9uLCBjaGVja291dDogUGFydGlhbDxDaGVja291dFN1YnNjcmlwdGlvbj4pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG4gICAgbGV0IGRpc2NvdW50ID0gMFxyXG5cclxuICAgIGlmIChjb3Vwb24uZGlzY291bnQuc3Vic2NyaXB0aW9uLnR5cGUgPT0gQ291cG9uVHlwZXMuQUJTT0xVVEUpIGRpc2NvdW50ID0gY291cG9uLmRpc2NvdW50LnN1YnNjcmlwdGlvbi52YWx1ZVxyXG4gICAgZWxzZSBkaXNjb3VudCA9IGNoZWNrb3V0LnN1YnNjcmlwdGlvblBsYW4ucmVjdXJyZW5jZVByaWNlICogKGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpcHRpb24udmFsdWUgLyAxMDApXHJcblxyXG4gICAgcmV0dXJuIG9mKGRpc2NvdW50KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNhbGNEaXNjb3VudFNob3BwaW5nKFxyXG4gICAgY291cG9uOiBDb3Vwb24sXHJcbiAgICBjaGVja291dDogUGFydGlhbDxDaGVja291dD4sXHJcbiAgKTogUHJvbWlzZTx7IGRpc2NvdW50OiBudW1iZXI7IGxpbmVJdGVtczogTGluZUl0ZW1bXSB9PiB7XHJcbiAgICBsZXQgZGlzY291bnRJbmZvOiB7IGRpc2NvdW50OiBudW1iZXI7IGxpbmVJdGVtczogTGluZUl0ZW1bXSB9ID0gbnVsbFxyXG5cclxuICAgIGlmIChjaGVja291dC51c2VyLmlzU3Vic2NyaWJlciAmJiBjb3Vwb24uZGlzY291bnQuc3Vic2NyaWJlci52YWx1ZSkge1xyXG4gICAgICBkaXNjb3VudEluZm8gPSBhd2FpdCB0aGlzLmNhbGNEaXNjb3VudEJ5VHlwZShcclxuICAgICAgICBjb3Vwb24uZGlzY291bnQuc3Vic2NyaWJlci50eXBlLFxyXG4gICAgICAgIGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpYmVyLnZhbHVlLFxyXG4gICAgICAgIGNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXMsXHJcbiAgICAgICAgY2hlY2tvdXQsXHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRpc2NvdW50SW5mbyA9IGF3YWl0IHRoaXMuY2FsY0Rpc2NvdW50QnlUeXBlKFxyXG4gICAgICAgIGNvdXBvbi5kaXNjb3VudC5ub25fc3Vic2NyaWJlci50eXBlLFxyXG4gICAgICAgIGNvdXBvbi5kaXNjb3VudC5ub25fc3Vic2NyaWJlci52YWx1ZSxcclxuICAgICAgICBjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzLFxyXG4gICAgICAgIGNoZWNrb3V0LFxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgZGlzY291bnQ6IGRpc2NvdW50SW5mby5kaXNjb3VudCwgbGluZUl0ZW1zOiBkaXNjb3VudEluZm8ubGluZUl0ZW1zIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY2FsY0Rpc2NvdW50QnlUeXBlKFxyXG4gICAgdHlwZTogQ291cG9uVHlwZXMsXHJcbiAgICB2YWx1ZTogbnVtYmVyLFxyXG4gICAgY2F0ZWdvcmllczogc3RyaW5nW10sXHJcbiAgICBjaGVja291dDogUGFydGlhbDxDaGVja291dD4sXHJcbiAgKTogUHJvbWlzZTx7IGRpc2NvdW50OiBudW1iZXI7IGxpbmVJdGVtczogTGluZUl0ZW1bXSB9PiB7XHJcbiAgICBsZXQgZGlzY291bnQgPSAwXHJcblxyXG4gICAgbGV0IGxpbmVJdGVuc0VsZWdpYmxlRm9yRGlzY291bnQgPSBhd2FpdCB0aGlzLmdldExpbmVJdGVuc0VsaWdlYmxlRm9yRGlzY291bnQoY2F0ZWdvcmllcywgY2hlY2tvdXQpXHJcblxyXG4gICAgY29uc3Qgc3ViVG90YWwgPSB0aGlzLmNhbGNDaGVja291dFN1YnRvdGFsKGxpbmVJdGVuc0VsZWdpYmxlRm9yRGlzY291bnQsIGNoZWNrb3V0LnVzZXIpXHJcblxyXG4gICAgaWYgKHR5cGUgPT0gQ291cG9uVHlwZXMuQUJTT0xVVEUpIHtcclxuICAgICAgZGlzY291bnQgPSB2YWx1ZSA+IHN1YlRvdGFsID8gc3ViVG90YWwgOiB2YWx1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGlzY291bnQgPSBzdWJUb3RhbCAqICh2YWx1ZSAvIDEwMClcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsaW5lSXRlbXMgPSB0aGlzLmNhbGNMaW5lSXRlbkRpc2NvdW50KHR5cGUsIGxpbmVJdGVuc0VsZWdpYmxlRm9yRGlzY291bnQsIHZhbHVlLCBzdWJUb3RhbClcclxuXHJcbiAgICByZXR1cm4geyBkaXNjb3VudCwgbGluZUl0ZW1zIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFzTWluU3ViVG90YWwoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSkgcmV0dXJuIHRydWVcclxuXHJcbiAgICBsZXQgbGluZUl0ZW5zRGlzY291bnQgPSBhd2FpdCB0aGlzLmdldExpbmVJdGVuc0VsaWdlYmxlRm9yRGlzY291bnQoY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcywgY2hlY2tvdXQpXHJcblxyXG4gICAgY29uc3Qgc3ViVG90YWwgPSB0aGlzLmNhbGNDaGVja291dFN1YnRvdGFsKGxpbmVJdGVuc0Rpc2NvdW50LCBjaGVja291dC51c2VyKVxyXG5cclxuICAgIGlmIChjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSA8PSBzdWJUb3RhbCkgcmV0dXJuIHRydWVcclxuXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaGFzUHJvZHVjdENhdGVnb3JpZXMoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0Pik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzIHx8ICFjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvdXBvbkNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmdldENvdXBvbkNhdGVnb3JpZXNJZChjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzKVxyXG5cclxuICAgIGNvbnN0IGhhc0NhdGVnb3JpZXMgPSBjaGVja291dC5saW5lSXRlbXM/LmZpbHRlcigoaSkgPT4ge1xyXG4gICAgICBpZiAoIWkuY2F0ZWdvcmllcyB8fCAhaS5jYXRlZ29yaWVzPy5sZW5ndGgpIHJldHVybiB0cnVlXHJcbiAgICAgIHJldHVybiBpLmNhdGVnb3JpZXMuc29tZSgoYykgPT4gY291cG9uQ2F0ZWdvcmllcy5zb21lKChjYXQpID0+IGNhdCA9PSBjKSlcclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIGhhc0NhdGVnb3JpZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdXBvbVVzZXJWYWxpZGF0aW9uKGNvdXBvbjogQ291cG9uLCB1c2VyOiBVc2VyKSB7XHJcbiAgICBpZiAoIXVzZXIgfHwgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLkFMTF9VU0VSUykpIHJldHVybiB0cnVlXHJcblxyXG4gICAgbGV0IHVzZXJUeXBlczogRXhjbHVzaXZpdGllc1tdID0gW11cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKSAmJlxyXG4gICAgICB0aGlzLmVtYWlsSXNGcm9tQ29sbGFib3JhdG9yKHVzZXIuZW1haWwudG9Mb2NhbGVMb3dlckNhc2UoKSlcclxuICAgIClcclxuICAgICAgdXNlclR5cGVzLnB1c2goRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKVxyXG5cclxuICAgIGlmIChcclxuICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLlNQRUNJRklDX1VTRVIpICYmXHJcbiAgICAgIGNvdXBvbi51c2VyRXhjbHVzaXZlRW1haWwuaW5jbHVkZXModXNlci5lbWFpbC50b0xvY2FsZUxvd2VyQ2FzZSgpKVxyXG4gICAgKVxyXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLlNQRUNJRklDX1VTRVIpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLmluY2x1ZGVzKEV4Y2x1c2l2aXRpZXMuQUNUSVZFX1NVQlNDUklCRVIpICYmXHJcbiAgICAgIHVzZXIuaXNTdWJzY3JpYmVyICYmXHJcbiAgICAgIHVzZXIuc3Vic2NyaXB0aW9uUGxhbiAhPSAnJ1xyXG4gICAgKVxyXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLkFDVElWRV9TVUJTQ1JJQkVSKVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdXNlci5pc1N1YnNjcmliZXIgJiZcclxuICAgICAgdXNlci5zdWJzY3JpcHRpb25QbGFuID09ICcnICYmXHJcbiAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5JTkFDVElWRV9TVUJTQ1JJQkVSKVxyXG4gICAgKVxyXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLklOQUNUSVZFX1NVQlNDUklCRVIpXHJcblxyXG4gICAgaWYgKGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5OT05fU1VCU0NSSUJFUikgJiYgIXVzZXIuaXNTdWJzY3JpYmVyKVxyXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLk5PTl9TVUJTQ1JJQkVSKVxyXG5cclxuICAgIHJldHVybiBjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLnNvbWUoKHIpID0+IHVzZXJUeXBlcy5pbmNsdWRlcyhyKSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKHByb2R1Y3RzQ2F0ZWdvcmllczogc3RyaW5nW10pOiBQcm9taXNlPEFycmF5PFN0cmluZz4+IHtcclxuICAgIGNvbnN0IGNvdXBvbkNhdGVnb3JpZXM6IEFycmF5PFN0cmluZz4gPSBbXVxyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwcm9kdWN0c0NhdGVnb3JpZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3J5OiBDYXRlZ29yeSAmIHsgZmlyZXN0b3JlSWQ/OiBzdHJpbmcgfSA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlSZXBvc2l0b3J5LmdldCh7XHJcbiAgICAgICAgaWQ6IHByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0sXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAoY2F0ZWdvcnkpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlSZXBvc2l0b3J5LmdldENoaWxkcmVuKHBhcnNlSW50KHByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0pKVxyXG5cclxuICAgICAgICBjb3Vwb25DYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkuaWQsIC4uLmNoaWxkcmVuLm1hcCgoYykgPT4gYy5pZC50b1N0cmluZygpKSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbLi4ubmV3IFNldChjb3Vwb25DYXRlZ29yaWVzKV1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IgPSAodXNlckVtYWlsOiBzdHJpbmcpOiBib29sZWFuID0+ICEhdXNlckVtYWlsPy5tYXRjaCgvQGI0YS5jb20uYnIvZylcclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRMaW5lSXRlbnNFbGlnZWJsZUZvckRpc2NvdW50KFxyXG4gICAgcHJvZHVjdHNDYXRlZ29yaWVzOiBzdHJpbmdbXSxcclxuICAgIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0PixcclxuICApOiBQcm9taXNlPExpbmVJdGVtW10+IHtcclxuICAgIGxldCBsaW5lSXRlbnNEaXNjb3VudCA9IFtdXHJcbiAgICBjb25zdCBjb3Vwb25DYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5nZXRDb3Vwb25DYXRlZ29yaWVzSWQocHJvZHVjdHNDYXRlZ29yaWVzKVxyXG5cclxuICAgIGlmIChwcm9kdWN0c0NhdGVnb3JpZXMgJiYgcHJvZHVjdHNDYXRlZ29yaWVzLmxlbmd0aCkge1xyXG4gICAgICBsaW5lSXRlbnNEaXNjb3VudCA9IGNoZWNrb3V0LmxpbmVJdGVtcz8uZmlsdGVyKChpKSA9PiB7XHJcbiAgICAgICAgaWYgKGkuY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gaS5jYXRlZ29yaWVzLnNvbWUoKGMpID0+IGNvdXBvbkNhdGVnb3JpZXMuc29tZSgoY2F0KSA9PiBjYXQgPT0gYykpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsaW5lSXRlbnNEaXNjb3VudCA9IGNoZWNrb3V0LmxpbmVJdGVtc1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsaW5lSXRlbnNEaXNjb3VudFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjQ2hlY2tvdXRTdWJ0b3RhbChsaW5lSXRlbnM6IExpbmVJdGVtW10sIHVzZXI6IFVzZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgbGluZUl0ZW5zPy5yZWR1Y2UoXHJcbiAgICAgICAgKGFjYywgY3VycikgPT5cclxuICAgICAgICAgIHVzZXI/LmlzU3Vic2NyaWJlciAmJiBjdXJyLnByaWNlLnN1YnNjcmliZXJQcmljZVxyXG4gICAgICAgICAgICA/IGFjYyArIGN1cnIucHJpY2U/LnN1YnNjcmliZXJQcmljZSAqIGN1cnIucXVhbnRpdHlcclxuICAgICAgICAgICAgOiBhY2MgKyBjdXJyLnByaWNlUGFpZCAqIGN1cnIucXVhbnRpdHksXHJcbiAgICAgICAgMCxcclxuICAgICAgKSB8fCAwXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldE9yZGVyc1dpdGhDb3Vwb24oY291cG9uOiBDb3Vwb24pOiBQcm9taXNlPE9yZGVyW10+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLm9yZGVyUmVwb3NpdG9yeVxyXG4gICAgICAuZmluZCh7XHJcbiAgICAgICAgZmlsdGVyczoge1xyXG4gICAgICAgICAgY291cG9uOiB7IGlkOiBjb3Vwb24uaWQgfSxcclxuICAgICAgICAgIHBheW1lbnQ6IHsgc3RhdHVzOiAncGFpZCcgfSxcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICAudGhlbigocmVzdWx0KSA9PiByZXN1bHQuZGF0YSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0T3JkZXJzRnJvbVVzZXIoZW1haWw6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3JkZXJSZXBvc2l0b3J5XHJcbiAgICAgIC5maW5kKHtcclxuICAgICAgICBmaWx0ZXJzOiB7XHJcbiAgICAgICAgICB1c2VyOiB7IGVtYWlsOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiBlbWFpbCB9IH0sXHJcbiAgICAgICAgICBwYXltZW50OiB7IHN0YXR1czogJ3BhaWQnIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGEpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdW50T3JkZXJzV2l0aFVzZXIob3JkZXJzOiBPcmRlcltdLCBlbWFpbDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBvcmRlcnMuZmlsdGVyKChvKSA9PiBvLnVzZXIuZW1haWwgPT0gZW1haWwpLmxlbmd0aFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb3Vwb25Vc2VMaW1pdHMoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0VHlwZTogQ2hlY2tvdXRUeXBlcywgdXNlcjogVXNlcikge1xyXG4gICAgbGV0IGNvdXBvblVzZUxpbWl0czogeyB1bmxpbWl0ZWQ/OiBib29sZWFuOyB0b3RhbD86IG51bWJlcjsgbGltaXRlZFBlclVzZXI/OiBib29sZWFuOyBmaXJzdE9yZGVyPzogYm9vbGVhbiB9XHJcbiAgICBpZiAoY2hlY2tvdXRUeXBlID09IENoZWNrb3V0VHlwZXMuRUNPTU1FUkNFIHx8IGNoZWNrb3V0VHlwZSA9PSBDaGVja291dFR5cGVzLkFMTCkge1xyXG4gICAgICBjb3Vwb25Vc2VMaW1pdHMgPSB1c2VyICYmIHVzZXIuaXNTdWJzY3JpYmVyID8gY291cG9uLnVzZUxpbWl0cy5zdWJzY3JpYmVyIDogY291cG9uLnVzZUxpbWl0cy5ub25fc3Vic2NyaWJlclxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY291cG9uVXNlTGltaXRzID0gY291cG9uLnVzZUxpbWl0cy5zdWJzY3JpcHRpb25cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY291cG9uVXNlTGltaXRzXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGNMaW5lSXRlbkRpc2NvdW50KFxyXG4gICAgdHlwZTogQ291cG9uVHlwZXMsXHJcbiAgICBsaW5lSXRlbXM6IExpbmVJdGVtW10sXHJcbiAgICBjb3Vwb25EaXNjb3VudDogbnVtYmVyLFxyXG4gICAgc3ViVG90YWw6IG51bWJlcixcclxuICApOiBMaW5lSXRlbVtdIHtcclxuICAgIGxldCBsaW5lSXRlbXNEaXNjb3VudDogTGluZUl0ZW1bXSA9IFtdXHJcbiAgICBpZiAodHlwZSA9PT0gQ291cG9uVHlwZXMuQUJTT0xVVEUpIHtcclxuICAgICAgY29uc3QgY291cG9uRGlzY291bnRNYXggPSBjb3Vwb25EaXNjb3VudCA+IHN1YlRvdGFsID8gc3ViVG90YWwgOiBjb3Vwb25EaXNjb3VudFxyXG4gICAgICBsaW5lSXRlbXNEaXNjb3VudCA9IGxpbmVJdGVtcy5tYXAoKGl0ZW0pID0+IHtcclxuICAgICAgICBjb25zdCB0b3RhbEl0ZW1QZXJjZW50YWdlID0gaXRlbS5wcmljZVBhaWQgLyBzdWJUb3RhbFxyXG4gICAgICAgIGNvbnN0IGRpc2NvdW50SXRlbSA9IGNvdXBvbkRpc2NvdW50TWF4ICogdG90YWxJdGVtUGVyY2VudGFnZVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgIGRpc2NvdW50OiBOdW1iZXIoZGlzY291bnRJdGVtLnRvRml4ZWQoMikpLFxyXG4gICAgICAgIH0gYXMgTGluZUl0ZW1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxpbmVJdGVtc0Rpc2NvdW50ID0gbGluZUl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRpc2NvdW50SXRlbSA9IGl0ZW0ucHJpY2VQYWlkICogKGNvdXBvbkRpc2NvdW50IC8gMTAwKVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgIGRpc2NvdW50OiBOdW1iZXIoZGlzY291bnRJdGVtLnRvRml4ZWQoMikpLFxyXG4gICAgICAgIH0gYXMgTGluZUl0ZW1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGluZUl0ZW1zRGlzY291bnRcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './util.helper';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export * from './util.helper';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2hlbHBlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3V0aWwuaGVscGVyJ1xyXG4iXX0=
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
export class UtilHelper {
|
|
2
|
-
static createSlug(name) {
|
|
3
|
-
return name
|
|
4
|
-
.toLowerCase()
|
|
5
|
-
.replace(/\s+/g, '-') // Replace spaces with -
|
|
6
|
-
.replace(/[ãàáäâ]/g, 'a') // Replace spaces with -
|
|
7
|
-
.replace(/[ẽèéëê]/g, 'e') // Replace spaces with -
|
|
8
|
-
.replace(/[ìíïî]/g, 'i') // Replace spaces with -
|
|
9
|
-
.replace(/[õòóöô]/g, 'o') // Replace spaces with -
|
|
10
|
-
.replace(/[ùúüû]/g, 'u') // Replace spaces with -
|
|
11
|
-
.replace(/[ñ]/g, 'n') // Replace spaces with -
|
|
12
|
-
.replace(/[ç]/g, 'c') // Replace spaces with -
|
|
13
|
-
.replace(/[&]/g, 'and') // Replace spaces with -
|
|
14
|
-
.replace(/[^\w\-]+/g, '') // Remove all non-word chars
|
|
15
|
-
.replace(/\-\-+/g, '-'); // Replace multiple - with single -
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export class UtilHelper {
|
|
2
|
+
static createSlug(name) {
|
|
3
|
+
return name
|
|
4
|
+
.toLowerCase()
|
|
5
|
+
.replace(/\s+/g, '-') // Replace spaces with -
|
|
6
|
+
.replace(/[ãàáäâ]/g, 'a') // Replace spaces with -
|
|
7
|
+
.replace(/[ẽèéëê]/g, 'e') // Replace spaces with -
|
|
8
|
+
.replace(/[ìíïî]/g, 'i') // Replace spaces with -
|
|
9
|
+
.replace(/[õòóöô]/g, 'o') // Replace spaces with -
|
|
10
|
+
.replace(/[ùúüû]/g, 'u') // Replace spaces with -
|
|
11
|
+
.replace(/[ñ]/g, 'n') // Replace spaces with -
|
|
12
|
+
.replace(/[ç]/g, 'c') // Replace spaces with -
|
|
13
|
+
.replace(/[&]/g, 'and') // Replace spaces with -
|
|
14
|
+
.replace(/[^\w\-]+/g, '') // Remove all non-word chars
|
|
15
|
+
.replace(/\-\-+/g, '-'); // Replace multiple - with single -
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2hlbHBlcnMvdXRpbC5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFVBQVU7SUFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFZO1FBQzVCLE9BQU8sSUFBSTthQUNSLFdBQVcsRUFBRTthQUNiLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsd0JBQXdCO2FBQzdDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsd0JBQXdCO2FBQ2pELE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsd0JBQXdCO2FBQ2pELE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsd0JBQXdCO2FBQ2hELE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsd0JBQXdCO2FBQ2pELE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsd0JBQXdCO2FBQ2hELE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsd0JBQXdCO2FBQzdDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsd0JBQXdCO2FBQzdDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsd0JBQXdCO2FBQy9DLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsNEJBQTRCO2FBQ3JELE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUEsQ0FBQyxtQ0FBbUM7SUFDL0QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFV0aWxIZWxwZXIge1xyXG4gIHN0YXRpYyBjcmVhdGVTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbmFtZVxyXG4gICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpIC8vIFJlcGxhY2Ugc3BhY2VzIHdpdGggLVxyXG4gICAgICAucmVwbGFjZSgvW8Ojw6DDocOkw6JdL2csICdhJykgLy8gUmVwbGFjZSBzcGFjZXMgd2l0aCAtXHJcbiAgICAgIC5yZXBsYWNlKC9b4bq9w6jDqcOrw6pdL2csICdlJykgLy8gUmVwbGFjZSBzcGFjZXMgd2l0aCAtXHJcbiAgICAgIC5yZXBsYWNlKC9bw6zDrcOvw65dL2csICdpJykgLy8gUmVwbGFjZSBzcGFjZXMgd2l0aCAtXHJcbiAgICAgIC5yZXBsYWNlKC9bw7XDssOzw7bDtF0vZywgJ28nKSAvLyBSZXBsYWNlIHNwYWNlcyB3aXRoIC1cclxuICAgICAgLnJlcGxhY2UoL1vDucO6w7zDu10vZywgJ3UnKSAvLyBSZXBsYWNlIHNwYWNlcyB3aXRoIC1cclxuICAgICAgLnJlcGxhY2UoL1vDsV0vZywgJ24nKSAvLyBSZXBsYWNlIHNwYWNlcyB3aXRoIC1cclxuICAgICAgLnJlcGxhY2UoL1vDp10vZywgJ2MnKSAvLyBSZXBsYWNlIHNwYWNlcyB3aXRoIC1cclxuICAgICAgLnJlcGxhY2UoL1smXS9nLCAnYW5kJykgLy8gUmVwbGFjZSBzcGFjZXMgd2l0aCAtXHJcbiAgICAgIC5yZXBsYWNlKC9bXlxcd1xcLV0rL2csICcnKSAvLyBSZW1vdmUgYWxsIG5vbi13b3JkIGNoYXJzXHJcbiAgICAgIC5yZXBsYWNlKC9cXC1cXC0rL2csICctJykgLy8gUmVwbGFjZSBtdWx0aXBsZSAtIHdpdGggc2luZ2xlIC1cclxuICB9XHJcbn1cclxuIl19
|