@infrab4a/connect-angular 5.5.0-alpha.3 → 5.5.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/angular-connect.module.d.ts +36 -33
  2. package/angular-elastic-search.module.d.ts +9 -9
  3. package/angular-firebase-auth.module.d.ts +11 -10
  4. package/angular-firestore.module.d.ts +17 -16
  5. package/angular-hasura-graphql.module.d.ts +14 -14
  6. package/angular-vertex-search.module.d.ts +9 -9
  7. package/consts/backend-url.const.d.ts +1 -1
  8. package/consts/category-structure.d.ts +1 -1
  9. package/consts/default-shop.const.d.ts +1 -1
  10. package/consts/es-config.const.d.ts +1 -1
  11. package/consts/firebase-const.d.ts +4 -4
  12. package/consts/hasura-options.const.d.ts +1 -1
  13. package/consts/index.d.ts +8 -8
  14. package/consts/persistence.const.d.ts +1 -1
  15. package/consts/storage-base-url.const.d.ts +1 -1
  16. package/consts/vertex-config.const.d.ts +1 -1
  17. package/esm2020/angular-connect.module.mjs +291 -0
  18. package/esm2020/angular-elastic-search.module.mjs +34 -0
  19. package/esm2020/angular-firebase-auth.module.mjs +141 -0
  20. package/esm2020/angular-firestore.module.mjs +541 -0
  21. package/esm2020/angular-hasura-graphql.module.mjs +355 -0
  22. package/esm2020/angular-vertex-search.module.mjs +34 -0
  23. package/{esm2022 → esm2020}/consts/backend-url.const.mjs +2 -2
  24. package/{esm2022 → esm2020}/consts/category-structure.mjs +2 -2
  25. package/{esm2022 → esm2020}/consts/default-shop.const.mjs +2 -2
  26. package/{esm2022 → esm2020}/consts/es-config.const.mjs +2 -2
  27. package/{esm2022 → esm2020}/consts/firebase-const.mjs +5 -5
  28. package/{esm2022 → esm2020}/consts/hasura-options.const.mjs +2 -2
  29. package/{esm2022 → esm2020}/consts/index.mjs +9 -9
  30. package/{esm2022 → esm2020}/consts/persistence.const.mjs +2 -2
  31. package/{esm2022 → esm2020}/consts/storage-base-url.const.mjs +2 -2
  32. package/{esm2022 → esm2020}/consts/vertex-config.const.mjs +2 -2
  33. package/{esm2022 → esm2020}/helpers/index.mjs +2 -2
  34. package/{esm2022 → esm2020}/helpers/mobile-operation-system-checker.helper.mjs +7 -7
  35. package/{esm2022 → esm2020}/index.mjs +7 -7
  36. package/{esm2022 → esm2020}/infrab4a-connect-angular.mjs +4 -4
  37. package/esm2020/interfaces/catalog-strategies.interface.mjs +2 -0
  38. package/{esm2022 → esm2020}/interfaces/category-facades.interface.mjs +2 -2
  39. package/{esm2022 → esm2020}/interfaces/index.mjs +3 -3
  40. package/{esm2022 → esm2020}/persistence/cookie-data-persistence.mjs +22 -22
  41. package/{esm2022 → esm2020}/persistence/data-persistence.mjs +2 -2
  42. package/{esm2022 → esm2020}/persistence/index.mjs +3 -3
  43. package/{esm2022 → esm2020}/services/auth.service.mjs +37 -37
  44. package/{esm2022 → esm2020}/services/cart/cart-services.facade.mjs +21 -21
  45. package/{esm2022 → esm2020}/services/cart/index.mjs +2 -2
  46. package/{esm2022 → esm2020}/services/cart.service.mjs +73 -73
  47. package/{esm2022 → esm2020}/services/catalog/adapters/category-structure.adapter.mjs +2 -2
  48. package/{esm2022 → esm2020}/services/catalog/adapters/index.mjs +4 -4
  49. package/{esm2022 → esm2020}/services/catalog/adapters/new-category-structure.adapter.mjs +43 -43
  50. package/{esm2022 → esm2020}/services/catalog/adapters/old-category-structure.adapter.mjs +23 -23
  51. package/esm2020/services/catalog/catalog.service.mjs +111 -0
  52. package/{esm2022 → esm2020}/services/catalog/category.service.mjs +42 -42
  53. package/esm2020/services/catalog/context/catalog-search.context.mjs +40 -0
  54. package/{esm2022 → esm2020}/services/catalog/enums/index.mjs +2 -2
  55. package/{esm2022 → esm2020}/services/catalog/enums/product-sorts.enum.mjs +11 -11
  56. package/{esm2022 → esm2020}/services/catalog/facades/catalog-service.facade.mjs +32 -32
  57. package/esm2020/services/catalog/facades/catalog-strategies.facade.mjs +17 -0
  58. package/esm2020/services/catalog/facades/category-repository.facade.mjs +20 -0
  59. package/{esm2022 → esm2020}/services/catalog/facades/category-service.facade.mjs +30 -30
  60. package/{esm2022 → esm2020}/services/catalog/facades/index.mjs +6 -6
  61. package/esm2020/services/catalog/facades/product-catalog.facade.mjs +21 -0
  62. package/esm2020/services/catalog/helpers/brand-manager.helper.mjs +57 -0
  63. package/esm2020/services/catalog/helpers/catalog-filter.helper.mjs +44 -0
  64. package/esm2020/services/catalog/helpers/catalog-sort.helper.mjs +52 -0
  65. package/{esm2022 → esm2020}/services/catalog/helpers/index.mjs +5 -5
  66. package/{esm2022 → esm2020}/services/catalog/helpers/product-fields.helper.mjs +40 -40
  67. package/{esm2022 → esm2020}/services/catalog/index.mjs +8 -8
  68. package/{esm2022 → esm2020}/services/catalog/models/category-with-tree.model.mjs +10 -10
  69. package/{esm2022 → esm2020}/services/catalog/models/index.mjs +2 -2
  70. package/esm2020/services/catalog/services/catalog-helpers.service.mjs +33 -0
  71. package/{esm2022 → esm2020}/services/catalog/services/catalog-operations.facade.mjs +26 -26
  72. package/esm2020/services/catalog/services/catalog-repository.service.mjs +25 -0
  73. package/{esm2022 → esm2020}/services/catalog/services/index.mjs +5 -5
  74. package/esm2020/services/catalog/services/product-management.facade.mjs +25 -0
  75. package/esm2020/services/catalog/strategies/category-search.strategy.mjs +133 -0
  76. package/{esm2022 → esm2020}/services/catalog/strategies/index.mjs +4 -4
  77. package/esm2020/services/catalog/strategies/profile-search.strategy.mjs +42 -0
  78. package/esm2020/services/catalog/strategies/term-search.strategy.mjs +123 -0
  79. package/esm2020/services/catalog/strategies/types/strategy-params.type.mjs +2 -0
  80. package/{esm2022 → esm2020}/services/catalog/types/fetch-products-options.type.mjs +2 -2
  81. package/esm2020/services/catalog/types/fetch-products-params.type.mjs +2 -0
  82. package/{esm2022 → esm2020}/services/catalog/types/fetch-products-response.type.mjs +2 -2
  83. package/{esm2022 → esm2020}/services/catalog/types/index.mjs +6 -6
  84. package/esm2020/services/catalog/types/method-params.type.mjs +2 -0
  85. package/{esm2022 → esm2020}/services/catalog/types/product-sort.type.mjs +2 -2
  86. package/esm2020/services/catalog/wishlist.service.mjs +254 -0
  87. package/esm2020/services/checkout/checkout-dependencies.facade.mjs +20 -0
  88. package/esm2020/services/checkout/checkout-repositories.facade.mjs +20 -0
  89. package/{esm2022 → esm2020}/services/checkout/index.mjs +3 -3
  90. package/{esm2022 → esm2020}/services/checkout-subscription.service.mjs +55 -55
  91. package/{esm2022 → esm2020}/services/checkout.service.mjs +106 -106
  92. package/{esm2022 → esm2020}/services/coupon/coupon-repositories.facade.mjs +24 -24
  93. package/{esm2022 → esm2020}/services/coupon/index.mjs +2 -2
  94. package/esm2020/services/coupon/types/coupon-params.type.mjs +2 -0
  95. package/esm2020/services/coupon.service.mjs +248 -0
  96. package/{esm2022 → esm2020}/services/helpers/index.mjs +2 -2
  97. package/{esm2022 → esm2020}/services/helpers/util.helper.mjs +18 -18
  98. package/{esm2022 → esm2020}/services/home-shop/home-shop-repositories.facade.mjs +24 -24
  99. package/{esm2022 → esm2020}/services/home-shop/index.mjs +2 -2
  100. package/{esm2022 → esm2020}/services/home-shop.service.mjs +119 -119
  101. package/{esm2022 → esm2020}/services/index.mjs +11 -11
  102. package/esm2020/services/order-product-review.service.mjs +110 -0
  103. package/{esm2022 → esm2020}/services/order.service.mjs +30 -30
  104. package/{esm2022 → esm2020}/services/shared/configuration.facade.mjs +29 -29
  105. package/{esm2022 → esm2020}/services/shared/index.mjs +2 -2
  106. package/{esm2022 → esm2020}/services/types/index.mjs +5 -5
  107. package/{esm2022 → esm2020}/services/types/pending-product-review.type.mjs +2 -2
  108. package/{esm2022 → esm2020}/services/types/product-review-create.type.mjs +2 -2
  109. package/{esm2022 → esm2020}/services/types/required-checkout-data.type.mjs +2 -2
  110. package/{esm2022 → esm2020}/services/types/required-checkout-subscription-data.type.mjs +2 -2
  111. package/{esm2022 → esm2020}/types/firebase-app-config.type.mjs +2 -2
  112. package/{esm2022 → esm2020}/types/index.mjs +2 -2
  113. package/fesm2015/infrab4a-connect-angular.mjs +3513 -0
  114. package/fesm2015/infrab4a-connect-angular.mjs.map +1 -0
  115. package/{fesm2022 → fesm2020}/infrab4a-connect-angular.mjs +3311 -3284
  116. package/fesm2020/infrab4a-connect-angular.mjs.map +1 -0
  117. package/helpers/index.d.ts +1 -1
  118. package/helpers/mobile-operation-system-checker.helper.d.ts +3 -3
  119. package/index.d.ts +6 -6
  120. package/interfaces/catalog-strategies.interface.d.ts +31 -31
  121. package/interfaces/category-facades.interface.d.ts +6 -6
  122. package/interfaces/index.d.ts +2 -2
  123. package/package.json +15 -9
  124. package/persistence/cookie-data-persistence.d.ts +10 -10
  125. package/persistence/data-persistence.d.ts +6 -6
  126. package/persistence/index.d.ts +2 -2
  127. package/services/auth.service.d.ts +18 -18
  128. package/services/cart/cart-services.facade.d.ts +12 -12
  129. package/services/cart/index.d.ts +1 -1
  130. package/services/cart.service.d.ts +26 -26
  131. package/services/catalog/adapters/category-structure.adapter.d.ts +4 -4
  132. package/services/catalog/adapters/index.d.ts +3 -3
  133. package/services/catalog/adapters/new-category-structure.adapter.d.ts +12 -12
  134. package/services/catalog/adapters/old-category-structure.adapter.d.ts +10 -10
  135. package/services/catalog/catalog.service.d.ts +24 -24
  136. package/services/catalog/category.service.d.ts +23 -23
  137. package/services/catalog/context/catalog-search.context.d.ts +14 -14
  138. package/services/catalog/enums/index.d.ts +1 -1
  139. package/services/catalog/enums/product-sorts.enum.d.ts +9 -9
  140. package/services/catalog/facades/catalog-service.facade.d.ts +15 -15
  141. package/services/catalog/facades/catalog-strategies.facade.d.ts +10 -10
  142. package/services/catalog/facades/category-repository.facade.d.ts +9 -9
  143. package/services/catalog/facades/category-service.facade.d.ts +15 -15
  144. package/services/catalog/facades/index.d.ts +5 -5
  145. package/services/catalog/facades/product-catalog.facade.d.ts +10 -10
  146. package/services/catalog/helpers/brand-manager.helper.d.ts +14 -14
  147. package/services/catalog/helpers/catalog-filter.helper.d.ts +8 -8
  148. package/services/catalog/helpers/catalog-sort.helper.d.ts +7 -7
  149. package/services/catalog/helpers/index.d.ts +4 -4
  150. package/services/catalog/helpers/product-fields.helper.d.ts +7 -7
  151. package/services/catalog/index.d.ts +7 -7
  152. package/services/catalog/models/category-with-tree.model.d.ts +4 -4
  153. package/services/catalog/models/index.d.ts +1 -1
  154. package/services/catalog/services/catalog-helpers.service.d.ts +17 -17
  155. package/services/catalog/services/catalog-operations.facade.d.ts +13 -13
  156. package/services/catalog/services/catalog-repository.service.d.ts +12 -12
  157. package/services/catalog/services/index.d.ts +4 -4
  158. package/services/catalog/services/product-management.facade.d.ts +12 -12
  159. package/services/catalog/strategies/category-search.strategy.d.ts +19 -19
  160. package/services/catalog/strategies/index.d.ts +3 -3
  161. package/services/catalog/strategies/profile-search.strategy.d.ts +14 -14
  162. package/services/catalog/strategies/term-search.strategy.d.ts +20 -20
  163. package/services/catalog/strategies/types/strategy-params.type.d.ts +58 -58
  164. package/services/catalog/types/fetch-products-options.type.d.ts +8 -8
  165. package/services/catalog/types/fetch-products-params.type.d.ts +25 -25
  166. package/services/catalog/types/fetch-products-response.type.d.ts +19 -19
  167. package/services/catalog/types/index.d.ts +5 -5
  168. package/services/catalog/types/method-params.type.d.ts +17 -17
  169. package/services/catalog/types/product-sort.type.d.ts +2 -2
  170. package/services/catalog/wishlist.service.d.ts +59 -59
  171. package/services/checkout/checkout-dependencies.facade.d.ts +10 -10
  172. package/services/checkout/checkout-repositories.facade.d.ts +9 -9
  173. package/services/checkout/index.d.ts +2 -2
  174. package/services/checkout-subscription.service.d.ts +19 -19
  175. package/services/checkout.service.d.ts +30 -30
  176. package/services/coupon/coupon-repositories.facade.d.ts +10 -10
  177. package/services/coupon/index.d.ts +1 -1
  178. package/services/coupon/types/coupon-params.type.d.ts +13 -13
  179. package/services/coupon.service.d.ts +36 -36
  180. package/services/helpers/index.d.ts +1 -1
  181. package/services/helpers/util.helper.d.ts +3 -3
  182. package/services/home-shop/home-shop-repositories.facade.d.ts +10 -10
  183. package/services/home-shop/index.d.ts +1 -1
  184. package/services/home-shop.service.d.ts +26 -26
  185. package/services/index.d.ts +10 -10
  186. package/services/order-product-review.service.d.ts +16 -16
  187. package/services/order.service.d.ts +13 -13
  188. package/services/shared/configuration.facade.d.ts +12 -12
  189. package/services/shared/index.d.ts +1 -1
  190. package/services/types/index.d.ts +4 -4
  191. package/services/types/pending-product-review.type.d.ts +12 -12
  192. package/services/types/product-review-create.type.d.ts +14 -14
  193. package/services/types/required-checkout-data.type.d.ts +2 -2
  194. package/services/types/required-checkout-subscription-data.type.d.ts +2 -2
  195. package/types/firebase-app-config.type.d.ts +1 -1
  196. package/types/index.d.ts +1 -1
  197. package/esm2022/angular-connect.module.mjs +0 -288
  198. package/esm2022/angular-elastic-search.module.mjs +0 -34
  199. package/esm2022/angular-firebase-auth.module.mjs +0 -140
  200. package/esm2022/angular-firestore.module.mjs +0 -538
  201. package/esm2022/angular-hasura-graphql.module.mjs +0 -333
  202. package/esm2022/angular-vertex-search.module.mjs +0 -34
  203. package/esm2022/interfaces/catalog-strategies.interface.mjs +0 -2
  204. package/esm2022/services/catalog/catalog.service.mjs +0 -111
  205. package/esm2022/services/catalog/context/catalog-search.context.mjs +0 -40
  206. package/esm2022/services/catalog/facades/catalog-strategies.facade.mjs +0 -17
  207. package/esm2022/services/catalog/facades/category-repository.facade.mjs +0 -20
  208. package/esm2022/services/catalog/facades/product-catalog.facade.mjs +0 -21
  209. package/esm2022/services/catalog/helpers/brand-manager.helper.mjs +0 -57
  210. package/esm2022/services/catalog/helpers/catalog-filter.helper.mjs +0 -44
  211. package/esm2022/services/catalog/helpers/catalog-sort.helper.mjs +0 -52
  212. package/esm2022/services/catalog/services/catalog-helpers.service.mjs +0 -33
  213. package/esm2022/services/catalog/services/catalog-repository.service.mjs +0 -25
  214. package/esm2022/services/catalog/services/product-management.facade.mjs +0 -25
  215. package/esm2022/services/catalog/strategies/category-search.strategy.mjs +0 -133
  216. package/esm2022/services/catalog/strategies/profile-search.strategy.mjs +0 -42
  217. package/esm2022/services/catalog/strategies/term-search.strategy.mjs +0 -123
  218. package/esm2022/services/catalog/strategies/types/strategy-params.type.mjs +0 -2
  219. package/esm2022/services/catalog/types/fetch-products-params.type.mjs +0 -2
  220. package/esm2022/services/catalog/types/method-params.type.mjs +0 -2
  221. package/esm2022/services/catalog/wishlist.service.mjs +0 -254
  222. package/esm2022/services/checkout/checkout-dependencies.facade.mjs +0 -20
  223. package/esm2022/services/checkout/checkout-repositories.facade.mjs +0 -20
  224. package/esm2022/services/coupon/types/coupon-params.type.mjs +0 -2
  225. package/esm2022/services/coupon.service.mjs +0 -248
  226. package/esm2022/services/order-product-review.service.mjs +0 -110
  227. package/fesm2022/infrab4a-connect-angular.mjs.map +0 -1
@@ -0,0 +1,248 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { CheckoutTypes, CouponTypes, Exclusivities, OrderStatus, Shops, Where, } from '@infrab4a/connect';
3
+ import { from, of } from 'rxjs';
4
+ import { concatMap, map } from 'rxjs/operators';
5
+ import { CouponRepositoriesFacade } from './coupon';
6
+ import { ConfigurationFacade } from './shared';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "./coupon";
9
+ import * as i2 from "./shared";
10
+ export class CouponService {
11
+ constructor(repositoriesFacade, configurationFacade) {
12
+ this.repositoriesFacade = repositoriesFacade;
13
+ this.configurationFacade = configurationFacade;
14
+ this.emailIsFromCollaborator = (userEmail) => !!userEmail?.match(/@b4a.com.br/g);
15
+ }
16
+ checkCoupon(params) {
17
+ const { nickname, checkoutType, checkout, plan } = params;
18
+ return from(this.repositoriesFacade.couponRepository
19
+ .find({
20
+ filters: {
21
+ nickname: { operator: Where.EQUALS, value: nickname },
22
+ active: { operator: Where.EQUALS, value: true },
23
+ },
24
+ })
25
+ .then((result) => result.data[0])).pipe(concatMap((coupon) => this.couponValidation(coupon, checkoutType)), concatMap((couponValid) => this.couponRulesValidation({ coupon: couponValid, checkoutType, checkout, plan })), map((couponValidated) => couponValidated));
26
+ }
27
+ async couponValidation(coupon, checkoutType) {
28
+ if (!coupon)
29
+ throw 'Cupom inválido.';
30
+ if (coupon?.beginAt && coupon?.beginAt.getTime() > new Date().getTime())
31
+ throw 'Cupom inválido.';
32
+ if (coupon?.expiresIn && (coupon?.expiresIn).getTime() < new Date().getTime())
33
+ throw 'Cupom expirado.';
34
+ const isInShop = coupon.shopAvailability === Shops.ALL || coupon.shopAvailability === this.configurationFacade.defaultShop;
35
+ if (!isInShop)
36
+ throw 'Cupom inválido para loja.';
37
+ const isCheckoutType = coupon.checkoutType === CheckoutTypes.ALL || coupon.checkoutType === checkoutType;
38
+ if (!isCheckoutType)
39
+ throw 'Cupom inválido. Erro de checkout.';
40
+ return coupon;
41
+ }
42
+ async couponRulesValidation(params) {
43
+ const { coupon, checkoutType, checkout, plan } = params;
44
+ if (checkoutType == CheckoutTypes.SUBSCRIPTION) {
45
+ return this.validateSubscriptionCoupon(coupon, plan);
46
+ }
47
+ return this.validateEcommerceCoupon(coupon, checkoutType, checkout);
48
+ }
49
+ validateSubscriptionCoupon(coupon, plan) {
50
+ if (coupon.plan && coupon.plan.toUpperCase() !== plan.toUpperCase()) {
51
+ throw 'Cupom inválido para sua assinatura.';
52
+ }
53
+ return coupon;
54
+ }
55
+ async validateEcommerceCoupon(coupon, checkoutType, checkout) {
56
+ this.validateUserEligibility(coupon, checkout?.user);
57
+ await this.validateUsageLimits(coupon, checkoutType, checkout);
58
+ await this.validateProductEligibility(coupon, checkout);
59
+ return coupon;
60
+ }
61
+ validateUserEligibility(coupon, user) {
62
+ const validUser = this.coupomUserValidation(coupon, user);
63
+ if (!validUser)
64
+ throw 'Usuário não elegível.';
65
+ }
66
+ async validateUsageLimits(coupon, checkoutType, checkout) {
67
+ const couponUseLimits = this.getCouponUseLimits(coupon, checkoutType, checkout.user);
68
+ if (couponUseLimits.firstOrder) {
69
+ await this.validateFirstOrderLimit(checkout.user.email);
70
+ }
71
+ if (!couponUseLimits.unlimited || couponUseLimits.limitedPerUser) {
72
+ await this.validateCouponUsageLimits(coupon, couponUseLimits, checkout.user.email);
73
+ }
74
+ }
75
+ async validateFirstOrderLimit(userEmail) {
76
+ const ordersUser = await this.getOrdersFromUser(userEmail.toLocaleLowerCase());
77
+ if (ordersUser.length >= 1)
78
+ throw 'Limite de uso atingido';
79
+ }
80
+ async validateCouponUsageLimits(coupon, couponUseLimits, userEmail) {
81
+ const ordersCoupon = await this.getOrdersWithCoupon(coupon);
82
+ if (!couponUseLimits.unlimited && couponUseLimits.total && ordersCoupon.length >= couponUseLimits.total) {
83
+ throw 'Limite de uso atingido.';
84
+ }
85
+ if (couponUseLimits.limitedPerUser) {
86
+ const ordersWithUser = this.countOrdersWithUser(ordersCoupon, userEmail);
87
+ if (ordersWithUser > 0)
88
+ throw 'Limite de uso por usuário atingido.';
89
+ }
90
+ }
91
+ async validateProductEligibility(coupon, checkout) {
92
+ const hasProductCategories = await this.hasProductCategories(coupon, checkout);
93
+ if (!hasProductCategories)
94
+ throw 'Seu carrinho não possui produtos elegíveis para desconto.';
95
+ const hasMinSubTotal = await this.hasMinSubTotal(coupon, checkout);
96
+ if (!hasMinSubTotal) {
97
+ this.throwMinSubTotalError(coupon);
98
+ }
99
+ }
100
+ throwMinSubTotalError(coupon) {
101
+ const formattedValue = Intl.NumberFormat('pt-BR', {
102
+ style: 'currency',
103
+ currency: 'BRL',
104
+ }).format(coupon.minSubTotalValue);
105
+ if (coupon.productsCategories?.length) {
106
+ throw `Valor mínimo de ${formattedValue} não atingido na(s) categoria(s) elegíveis para o desconto.`;
107
+ }
108
+ throw `Valor mínimo de ${formattedValue} não atingido.`;
109
+ }
110
+ calcDiscountSubscription(coupon, checkout) {
111
+ let discount = 0;
112
+ if (coupon.discount.subscription.type == CouponTypes.ABSOLUTE)
113
+ discount = coupon.discount.subscription.value;
114
+ else
115
+ discount = checkout.subscriptionPlan.recurrencePrice * (coupon.discount.subscription.value / 100);
116
+ return of(discount);
117
+ }
118
+ async hasMinSubTotal(coupon, checkout) {
119
+ if (!coupon.minSubTotalValue)
120
+ return true;
121
+ const lineItensDiscount = await this.getLineItensEligebleForDiscount(coupon.productsCategories, checkout);
122
+ const subTotal = this.calcCheckoutSubtotal(lineItensDiscount, checkout.user);
123
+ if (coupon.minSubTotalValue <= subTotal)
124
+ return true;
125
+ return false;
126
+ }
127
+ async hasProductCategories(coupon, checkout) {
128
+ if (!coupon.productsCategories?.length) {
129
+ return true;
130
+ }
131
+ const couponCategories = await this.getCouponCategoriesId(coupon.productsCategories);
132
+ const hasCategories = checkout.lineItems?.filter((item) => {
133
+ if (item.isGift)
134
+ return false;
135
+ if (!item.categories?.length)
136
+ return true;
137
+ return item.categories.some((c) => couponCategories.some((cat) => cat == c));
138
+ });
139
+ return hasCategories?.length ? true : false;
140
+ }
141
+ coupomUserValidation(coupon, user) {
142
+ if (!user || coupon.exclusivityType.includes(Exclusivities.ALL_USERS))
143
+ return true;
144
+ const userTypes = [];
145
+ if (coupon.exclusivityType.includes(Exclusivities.COLLABORATORS) &&
146
+ this.emailIsFromCollaborator(user.email.toLocaleLowerCase()))
147
+ userTypes.push(Exclusivities.COLLABORATORS);
148
+ if (coupon.exclusivityType.includes(Exclusivities.SPECIFIC_USER) &&
149
+ coupon.userExclusiveEmail.includes(user.email.toLocaleLowerCase()))
150
+ userTypes.push(Exclusivities.SPECIFIC_USER);
151
+ if (coupon.exclusivityType.includes(Exclusivities.ACTIVE_SUBSCRIBER) &&
152
+ user.isSubscriber &&
153
+ user.subscriptionPlan != '')
154
+ userTypes.push(Exclusivities.ACTIVE_SUBSCRIBER);
155
+ if (user.isSubscriber &&
156
+ user.subscriptionPlan == '' &&
157
+ coupon.exclusivityType.includes(Exclusivities.INACTIVE_SUBSCRIBER))
158
+ userTypes.push(Exclusivities.INACTIVE_SUBSCRIBER);
159
+ if (coupon.exclusivityType.includes(Exclusivities.NON_SUBSCRIBER) && !user.isSubscriber)
160
+ userTypes.push(Exclusivities.NON_SUBSCRIBER);
161
+ return coupon.exclusivityType.some((r) => userTypes.includes(r));
162
+ }
163
+ async getCouponCategoriesId(productsCategories) {
164
+ const couponCategories = [];
165
+ for (let index = 0; index < productsCategories.length; index++) {
166
+ const category = await this.repositoriesFacade.categoryRepository.get({
167
+ id: productsCategories[index],
168
+ });
169
+ if (category) {
170
+ const children = await this.repositoriesFacade.categoryRepository.getChildren(parseInt(productsCategories[index]));
171
+ couponCategories.push(category.id, ...children.map((c) => c.id.toString()));
172
+ }
173
+ }
174
+ return [...new Set(couponCategories)];
175
+ }
176
+ async getLineItensEligebleForDiscount(productsCategories, checkout) {
177
+ let lineItensDiscount = [];
178
+ const couponCategories = await this.getCouponCategoriesId(productsCategories);
179
+ if (productsCategories?.length) {
180
+ lineItensDiscount = checkout.lineItems?.filter((item) => {
181
+ if (item.isGift)
182
+ return false;
183
+ if (item.categories?.length) {
184
+ return item.categories.some((c) => couponCategories.some((cat) => cat == c));
185
+ }
186
+ return true;
187
+ });
188
+ }
189
+ else {
190
+ lineItensDiscount = checkout.lineItems.filter((item) => !item.isGift);
191
+ }
192
+ return lineItensDiscount;
193
+ }
194
+ calcCheckoutSubtotal(lineItens, user) {
195
+ return (lineItens
196
+ ?.filter((item) => !item.isGift)
197
+ .reduce((acc, curr) => user?.isSubscriber && curr.price?.subscriberPrice
198
+ ? acc + curr.price?.subscriberPrice * curr.quantity
199
+ : acc + curr.pricePaid * curr.quantity, 0) || 0);
200
+ }
201
+ async getOrdersWithCoupon(coupon) {
202
+ return await this.repositoriesFacade.orderRepository
203
+ .find({
204
+ filters: {
205
+ coupon: { id: coupon.id },
206
+ status: { operator: Where.NOTEQUALS, value: OrderStatus.CANCELADO },
207
+ },
208
+ })
209
+ .then((result) => result.data);
210
+ }
211
+ async getOrdersFromUser(email) {
212
+ return await this.repositoriesFacade.orderRepository
213
+ .find({
214
+ filters: {
215
+ user: { email: { operator: Where.EQUALS, value: email } },
216
+ status: { operator: Where.NOTEQUALS, value: OrderStatus.CANCELADO },
217
+ },
218
+ })
219
+ .then((result) => result.data);
220
+ }
221
+ countOrdersWithUser(orders, email) {
222
+ return orders.filter((o) => o.user.email == email).length;
223
+ }
224
+ getCouponUseLimits(coupon, checkoutType, user) {
225
+ let couponUseLimits;
226
+ if (checkoutType == CheckoutTypes.ECOMMERCE || checkoutType == CheckoutTypes.ALL) {
227
+ if (coupon.exclusivityType.length === 1 &&
228
+ (coupon.exclusivityType.at(0) === Exclusivities.SPECIFIC_USER ||
229
+ coupon.exclusivityType.at(0) === Exclusivities.COLLABORATORS))
230
+ couponUseLimits = coupon.useLimits.non_subscriber;
231
+ else
232
+ couponUseLimits = user?.isSubscriber ? coupon.useLimits.subscriber : coupon.useLimits.non_subscriber;
233
+ }
234
+ else {
235
+ couponUseLimits = coupon.useLimits.subscription;
236
+ }
237
+ return couponUseLimits;
238
+ }
239
+ }
240
+ CouponService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CouponService, deps: [{ token: i1.CouponRepositoriesFacade }, { token: i2.ConfigurationFacade }], 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: i1.CouponRepositoriesFacade }, { type: i2.ConfigurationFacade }]; } });
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxFQUlMLGFBQWEsRUFFYixXQUFXLEVBQ1gsYUFBYSxFQUdiLFdBQVcsRUFDWCxLQUFLLEVBRUwsS0FBSyxHQUNOLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUUvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFBOzs7O0FBSzlDLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ21CLGtCQUE0QyxFQUM1QyxtQkFBd0M7UUFEeEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEwQjtRQUM1Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBME9uRCw0QkFBdUIsR0FBRyxDQUFDLFNBQWlCLEVBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBek9qRyxDQUFDO0lBRUosV0FBVyxDQUFDLE1BQXlCO1FBQ25DLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUE7UUFFekQsT0FBTyxJQUFJLENBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQjthQUNyQyxJQUFJLENBQUM7WUFDSixPQUFPLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLEVBQUUs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QUFDLGFBQWEsQ0FBQztnQkFFL0QsZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFBOztnQkFDOUMsZUFBZSxHQUFHLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQTtTQUMxRzthQUFNO1lBQ0wsZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFBO1NBQ2hEO1FBRUQsT0FBTyxlQUFlLENBQUE7SUFDeEIsQ0FBQzs7MEdBL1RVLGFBQWE7OEdBQWIsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtcclxuICBDYXRlZ29yeSxcclxuICBDaGVja291dCxcclxuICBDaGVja291dFN1YnNjcmlwdGlvbixcclxuICBDaGVja291dFR5cGVzLFxyXG4gIENvdXBvbixcclxuICBDb3Vwb25UeXBlcyxcclxuICBFeGNsdXNpdml0aWVzLFxyXG4gIExpbmVJdGVtLFxyXG4gIE9yZGVyLFxyXG4gIE9yZGVyU3RhdHVzLFxyXG4gIFNob3BzLFxyXG4gIFVzZXIsXHJcbiAgV2hlcmUsXHJcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgY29uY2F0TWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuXHJcbmltcG9ydCB7IENvdXBvblJlcG9zaXRvcmllc0ZhY2FkZSB9IGZyb20gJy4vY291cG9uJ1xyXG5pbXBvcnQgeyBDaGVja0NvdXBvblBhcmFtcywgQ291cG9uUnVsZXNWYWxpZGF0aW9uUGFyYW1zIH0gZnJvbSAnLi9jb3Vwb24vdHlwZXMvY291cG9uLXBhcmFtcy50eXBlJ1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRmFjYWRlIH0gZnJvbSAnLi9zaGFyZWQnXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ291cG9uU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlcG9zaXRvcmllc0ZhY2FkZTogQ291cG9uUmVwb3NpdG9yaWVzRmFjYWRlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25maWd1cmF0aW9uRmFjYWRlOiBDb25maWd1cmF0aW9uRmFjYWRlLFxyXG4gICkge31cclxuXHJcbiAgY2hlY2tDb3Vwb24ocGFyYW1zOiBDaGVja0NvdXBvblBhcmFtcyk6IE9ic2VydmFibGU8Q291cG9uPiB7XHJcbiAgICBjb25zdCB7IG5pY2tuYW1lLCBjaGVja291dFR5cGUsIGNoZWNrb3V0LCBwbGFuIH0gPSBwYXJhbXNcclxuXHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgdGhpcy5yZXBvc2l0b3JpZXNGYWNhZGUuY291cG9uUmVwb3NpdG9yeVxyXG4gICAgICAgIC5maW5kKHtcclxuICAgICAgICAgIGZpbHRlcnM6IHtcclxuICAgICAgICAgICAgbmlja25hbWU6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IG5pY2tuYW1lIH0sXHJcbiAgICAgICAgICAgIGFjdGl2ZTogeyBvcGVyYXRvcjogV2hlcmUuRVFVQUxTLCB2YWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KVxyXG4gICAgICAgIC50aGVuKChyZXN1bHQpID0+IHJlc3VsdC5kYXRhWzBdKSxcclxuICAgICkucGlwZShcclxuICAgICAgY29uY2F0TWFwKChjb3Vwb24pID0+IHRoaXMuY291cG9uVmFsaWRhdGlvbihjb3Vwb24sIGNoZWNrb3V0VHlwZSkpLFxyXG4gICAgICBjb25jYXRNYXAoKGNvdXBvblZhbGlkOiBDb3Vwb24pID0+XHJcbiAgICAgICAgdGhpcy5jb3Vwb25SdWxlc1ZhbGlkYXRpb24oeyBjb3Vwb246IGNvdXBvblZhbGlkLCBjaGVja291dFR5cGUsIGNoZWNrb3V0LCBwbGFuIH0pLFxyXG4gICAgICApLFxyXG4gICAgICBtYXAoKGNvdXBvblZhbGlkYXRlZDogQ291cG9uKSA9PiBjb3Vwb25WYWxpZGF0ZWQgYXMgQ291cG9uKSxcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgY291cG9uVmFsaWRhdGlvbihjb3Vwb246IENvdXBvbiwgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzKSB7XHJcbiAgICBpZiAoIWNvdXBvbikgdGhyb3cgJ0N1cG9tIGludsOhbGlkby4nXHJcblxyXG4gICAgaWYgKGNvdXBvbj8uYmVnaW5BdCAmJiBjb3Vwb24/LmJlZ2luQXQuZ2V0VGltZSgpID4gbmV3IERhdGUoKS5nZXRUaW1lKCkpIHRocm93ICdDdXBvbSBpbnbDoWxpZG8uJ1xyXG5cclxuICAgIGlmIChjb3Vwb24/LmV4cGlyZXNJbiAmJiAoY291cG9uPy5leHBpcmVzSW4gYXMgRGF0ZSkuZ2V0VGltZSgpIDwgbmV3IERhdGUoKS5nZXRUaW1lKCkpIHRocm93ICdDdXBvbSBleHBpcmFkby4nXHJcblxyXG4gICAgY29uc3QgaXNJblNob3AgPVxyXG4gICAgICBjb3Vwb24uc2hvcEF2YWlsYWJpbGl0eSA9PT0gU2hvcHMuQUxMIHx8IGNvdXBvbi5zaG9wQXZhaWxhYmlsaXR5ID09PSB0aGlzLmNvbmZpZ3VyYXRpb25GYWNhZGUuZGVmYXVsdFNob3BcclxuXHJcbiAgICBpZiAoIWlzSW5TaG9wKSB0aHJvdyAnQ3Vwb20gaW52w6FsaWRvIHBhcmEgbG9qYS4nXHJcblxyXG4gICAgY29uc3QgaXNDaGVja291dFR5cGUgPSBjb3Vwb24uY2hlY2tvdXRUeXBlID09PSBDaGVja291dFR5cGVzLkFMTCB8fCBjb3Vwb24uY2hlY2tvdXRUeXBlID09PSBjaGVja291dFR5cGVcclxuXHJcbiAgICBpZiAoIWlzQ2hlY2tvdXRUeXBlKSB0aHJvdyAnQ3Vwb20gaW52w6FsaWRvLiBFcnJvIGRlIGNoZWNrb3V0LidcclxuXHJcbiAgICByZXR1cm4gY291cG9uXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvdXBvblJ1bGVzVmFsaWRhdGlvbihwYXJhbXM6IENvdXBvblJ1bGVzVmFsaWRhdGlvblBhcmFtcykge1xyXG4gICAgY29uc3QgeyBjb3Vwb24sIGNoZWNrb3V0VHlwZSwgY2hlY2tvdXQsIHBsYW4gfSA9IHBhcmFtc1xyXG5cclxuICAgIGlmIChjaGVja291dFR5cGUgPT0gQ2hlY2tvdXRUeXBlcy5TVUJTQ1JJUFRJT04pIHtcclxuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVTdWJzY3JpcHRpb25Db3Vwb24oY291cG9uLCBwbGFuKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlRWNvbW1lcmNlQ291cG9uKGNvdXBvbiwgY2hlY2tvdXRUeXBlLCBjaGVja291dClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVTdWJzY3JpcHRpb25Db3Vwb24oY291cG9uOiBDb3Vwb24sIHBsYW46IHN0cmluZyk6IENvdXBvbiB7XHJcbiAgICBpZiAoY291cG9uLnBsYW4gJiYgY291cG9uLnBsYW4udG9VcHBlckNhc2UoKSAhPT0gcGxhbi50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgIHRocm93ICdDdXBvbSBpbnbDoWxpZG8gcGFyYSBzdWEgYXNzaW5hdHVyYS4nXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvdXBvblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUVjb21tZXJjZUNvdXBvbihcclxuICAgIGNvdXBvbjogQ291cG9uLFxyXG4gICAgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzLFxyXG4gICAgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+LFxyXG4gICk6IFByb21pc2U8Q291cG9uPiB7XHJcbiAgICB0aGlzLnZhbGlkYXRlVXNlckVsaWdpYmlsaXR5KGNvdXBvbiwgY2hlY2tvdXQ/LnVzZXIpXHJcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlVXNhZ2VMaW1pdHMoY291cG9uLCBjaGVja291dFR5cGUsIGNoZWNrb3V0KVxyXG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZVByb2R1Y3RFbGlnaWJpbGl0eShjb3Vwb24sIGNoZWNrb3V0KVxyXG5cclxuICAgIHJldHVybiBjb3Vwb25cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdmFsaWRhdGVVc2VyRWxpZ2liaWxpdHkoY291cG9uOiBDb3Vwb24sIHVzZXI6IFVzZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZhbGlkVXNlciA9IHRoaXMuY291cG9tVXNlclZhbGlkYXRpb24oY291cG9uLCB1c2VyKVxyXG5cclxuICAgIGlmICghdmFsaWRVc2VyKSB0aHJvdyAnVXN1w6FyaW8gbsOjbyBlbGVnw612ZWwuJ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVVzYWdlTGltaXRzKFxyXG4gICAgY291cG9uOiBDb3Vwb24sXHJcbiAgICBjaGVja291dFR5cGU6IENoZWNrb3V0VHlwZXMsXHJcbiAgICBjaGVja291dDogUGFydGlhbDxDaGVja291dD4sXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBjb3Vwb25Vc2VMaW1pdHMgPSB0aGlzLmdldENvdXBvblVzZUxpbWl0cyhjb3Vwb24sIGNoZWNrb3V0VHlwZSwgY2hlY2tvdXQudXNlcilcclxuXHJcbiAgICBpZiAoY291cG9uVXNlTGltaXRzLmZpcnN0T3JkZXIpIHtcclxuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZUZpcnN0T3JkZXJMaW1pdChjaGVja291dC51c2VyLmVtYWlsKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghY291cG9uVXNlTGltaXRzLnVubGltaXRlZCB8fCBjb3Vwb25Vc2VMaW1pdHMubGltaXRlZFBlclVzZXIpIHtcclxuICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZUNvdXBvblVzYWdlTGltaXRzKGNvdXBvbiwgY291cG9uVXNlTGltaXRzLCBjaGVja291dC51c2VyLmVtYWlsKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUZpcnN0T3JkZXJMaW1pdCh1c2VyRW1haWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3Qgb3JkZXJzVXNlciA9IGF3YWl0IHRoaXMuZ2V0T3JkZXJzRnJvbVVzZXIodXNlckVtYWlsLnRvTG9jYWxlTG93ZXJDYXNlKCkpXHJcblxyXG4gICAgaWYgKG9yZGVyc1VzZXIubGVuZ3RoID49IDEpIHRocm93ICdMaW1pdGUgZGUgdXNvIGF0aW5naWRvJ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUNvdXBvblVzYWdlTGltaXRzKGNvdXBvbjogQ291cG9uLCBjb3Vwb25Vc2VMaW1pdHM6IGFueSwgdXNlckVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IG9yZGVyc0NvdXBvbiA9IGF3YWl0IHRoaXMuZ2V0T3JkZXJzV2l0aENvdXBvbihjb3Vwb24pXHJcblxyXG4gICAgaWYgKCFjb3Vwb25Vc2VMaW1pdHMudW5saW1pdGVkICYmIGNvdXBvblVzZUxpbWl0cy50b3RhbCAmJiBvcmRlcnNDb3Vwb24ubGVuZ3RoID49IGNvdXBvblVzZUxpbWl0cy50b3RhbCkge1xyXG4gICAgICB0aHJvdyAnTGltaXRlIGRlIHVzbyBhdGluZ2lkby4nXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvdXBvblVzZUxpbWl0cy5saW1pdGVkUGVyVXNlcikge1xyXG4gICAgICBjb25zdCBvcmRlcnNXaXRoVXNlciA9IHRoaXMuY291bnRPcmRlcnNXaXRoVXNlcihvcmRlcnNDb3Vwb24sIHVzZXJFbWFpbClcclxuXHJcbiAgICAgIGlmIChvcmRlcnNXaXRoVXNlciA+IDApIHRocm93ICdMaW1pdGUgZGUgdXNvIHBvciB1c3XDoXJpbyBhdGluZ2lkby4nXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlUHJvZHVjdEVsaWdpYmlsaXR5KGNvdXBvbjogQ291cG9uLCBjaGVja291dDogUGFydGlhbDxDaGVja291dD4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGhhc1Byb2R1Y3RDYXRlZ29yaWVzID0gYXdhaXQgdGhpcy5oYXNQcm9kdWN0Q2F0ZWdvcmllcyhjb3Vwb24sIGNoZWNrb3V0KVxyXG5cclxuICAgIGlmICghaGFzUHJvZHVjdENhdGVnb3JpZXMpIHRocm93ICdTZXUgY2FycmluaG8gbsOjbyBwb3NzdWkgcHJvZHV0b3MgZWxlZ8OtdmVpcyBwYXJhIGRlc2NvbnRvLidcclxuXHJcbiAgICBjb25zdCBoYXNNaW5TdWJUb3RhbCA9IGF3YWl0IHRoaXMuaGFzTWluU3ViVG90YWwoY291cG9uLCBjaGVja291dClcclxuXHJcbiAgICBpZiAoIWhhc01pblN1YlRvdGFsKSB7XHJcbiAgICAgIHRoaXMudGhyb3dNaW5TdWJUb3RhbEVycm9yKGNvdXBvbilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdGhyb3dNaW5TdWJUb3RhbEVycm9yKGNvdXBvbjogQ291cG9uKTogdm9pZCB7XHJcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IEludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHtcclxuICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXHJcbiAgICAgIGN1cnJlbmN5OiAnQlJMJyxcclxuICAgIH0pLmZvcm1hdChjb3Vwb24ubWluU3ViVG90YWxWYWx1ZSlcclxuXHJcbiAgICBpZiAoY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IGBWYWxvciBtw61uaW1vIGRlICR7Zm9ybWF0dGVkVmFsdWV9IG7Do28gYXRpbmdpZG8gbmEocykgY2F0ZWdvcmlhKHMpIGVsZWfDrXZlaXMgcGFyYSBvIGRlc2NvbnRvLmBcclxuICAgIH1cclxuXHJcbiAgICB0aHJvdyBgVmFsb3IgbcOtbmltbyBkZSAke2Zvcm1hdHRlZFZhbHVlfSBuw6NvIGF0aW5naWRvLmBcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYWxjRGlzY291bnRTdWJzY3JpcHRpb24oY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0OiBQYXJ0aWFsPENoZWNrb3V0U3Vic2NyaXB0aW9uPik6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICBsZXQgZGlzY291bnQgPSAwXHJcblxyXG4gICAgaWYgKGNvdXBvbi5kaXNjb3VudC5zdWJzY3JpcHRpb24udHlwZSA9PSBDb3Vwb25UeXBlcy5BQlNPTFVURSkgZGlzY291bnQgPSBjb3Vwb24uZGlzY291bnQuc3Vic2NyaXB0aW9uLnZhbHVlXHJcbiAgICBlbHNlIGRpc2NvdW50ID0gY2hlY2tvdXQuc3Vic2NyaXB0aW9uUGxhbi5yZWN1cnJlbmNlUHJpY2UgKiAoY291cG9uLmRpc2NvdW50LnN1YnNjcmlwdGlvbi52YWx1ZSAvIDEwMClcclxuXHJcbiAgICByZXR1cm4gb2YoZGlzY291bnQpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGhhc01pblN1YlRvdGFsKGNvdXBvbjogQ291cG9uLCBjaGVja291dDogUGFydGlhbDxDaGVja291dD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmICghY291cG9uLm1pblN1YlRvdGFsVmFsdWUpIHJldHVybiB0cnVlXHJcblxyXG4gICAgY29uc3QgbGluZUl0ZW5zRGlzY291bnQgPSBhd2FpdCB0aGlzLmdldExpbmVJdGVuc0VsaWdlYmxlRm9yRGlzY291bnQoY291cG9uLnByb2R1Y3RzQ2F0ZWdvcmllcywgY2hlY2tvdXQpXHJcbiAgICBjb25zdCBzdWJUb3RhbCA9IHRoaXMuY2FsY0NoZWNrb3V0U3VidG90YWwobGluZUl0ZW5zRGlzY291bnQsIGNoZWNrb3V0LnVzZXIpXHJcblxyXG4gICAgaWYgKGNvdXBvbi5taW5TdWJUb3RhbFZhbHVlIDw9IHN1YlRvdGFsKSByZXR1cm4gdHJ1ZVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYXNQcm9kdWN0Q2F0ZWdvcmllcyhjb3Vwb246IENvdXBvbiwgY2hlY2tvdXQ6IFBhcnRpYWw8Q2hlY2tvdXQ+KTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIWNvdXBvbi5wcm9kdWN0c0NhdGVnb3JpZXM/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvdXBvbkNhdGVnb3JpZXMgPSBhd2FpdCB0aGlzLmdldENvdXBvbkNhdGVnb3JpZXNJZChjb3Vwb24ucHJvZHVjdHNDYXRlZ29yaWVzKVxyXG4gICAgY29uc3QgaGFzQ2F0ZWdvcmllcyA9IGNoZWNrb3V0LmxpbmVJdGVtcz8uZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLmlzR2lmdCkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICBpZiAoIWl0ZW0uY2F0ZWdvcmllcz8ubGVuZ3RoKSByZXR1cm4gdHJ1ZVxyXG5cclxuICAgICAgcmV0dXJuIGl0ZW0uY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0ID09IGMpKVxyXG4gICAgfSlcclxuXHJcbiAgICByZXR1cm4gaGFzQ2F0ZWdvcmllcz8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdXBvbVVzZXJWYWxpZGF0aW9uKGNvdXBvbjogQ291cG9uLCB1c2VyOiBVc2VyKSB7XHJcbiAgICBpZiAoIXVzZXIgfHwgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLkFMTF9VU0VSUykpIHJldHVybiB0cnVlXHJcblxyXG4gICAgY29uc3QgdXNlclR5cGVzOiBFeGNsdXNpdml0aWVzW10gPSBbXVxyXG5cclxuICAgIGlmIChcclxuICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLkNPTExBQk9SQVRPUlMpICYmXHJcbiAgICAgIHRoaXMuZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IodXNlci5lbWFpbC50b0xvY2FsZUxvd2VyQ2FzZSgpKVxyXG4gICAgKVxyXG4gICAgICB1c2VyVHlwZXMucHVzaChFeGNsdXNpdml0aWVzLkNPTExBQk9SQVRPUlMpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBjb3Vwb24uZXhjbHVzaXZpdHlUeXBlLmluY2x1ZGVzKEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUikgJiZcclxuICAgICAgY291cG9uLnVzZXJFeGNsdXNpdmVFbWFpbC5pbmNsdWRlcyh1c2VyLmVtYWlsLnRvTG9jYWxlTG93ZXJDYXNlKCkpXHJcbiAgICApXHJcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUilcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuaW5jbHVkZXMoRXhjbHVzaXZpdGllcy5BQ1RJVkVfU1VCU0NSSUJFUikgJiZcclxuICAgICAgdXNlci5pc1N1YnNjcmliZXIgJiZcclxuICAgICAgdXNlci5zdWJzY3JpcHRpb25QbGFuICE9ICcnXHJcbiAgICApXHJcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuQUNUSVZFX1NVQlNDUklCRVIpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB1c2VyLmlzU3Vic2NyaWJlciAmJlxyXG4gICAgICB1c2VyLnN1YnNjcmlwdGlvblBsYW4gPT0gJycgJiZcclxuICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLklOQUNUSVZFX1NVQlNDUklCRVIpXHJcbiAgICApXHJcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuSU5BQ1RJVkVfU1VCU0NSSUJFUilcclxuXHJcbiAgICBpZiAoY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5pbmNsdWRlcyhFeGNsdXNpdml0aWVzLk5PTl9TVUJTQ1JJQkVSKSAmJiAhdXNlci5pc1N1YnNjcmliZXIpXHJcbiAgICAgIHVzZXJUeXBlcy5wdXNoKEV4Y2x1c2l2aXRpZXMuTk9OX1NVQlNDUklCRVIpXHJcblxyXG4gICAgcmV0dXJuIGNvdXBvbi5leGNsdXNpdml0eVR5cGUuc29tZSgocikgPT4gdXNlclR5cGVzLmluY2x1ZGVzKHIpKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRDb3Vwb25DYXRlZ29yaWVzSWQocHJvZHVjdHNDYXRlZ29yaWVzOiBzdHJpbmdbXSk6IFByb21pc2U8QXJyYXk8U3RyaW5nPj4ge1xyXG4gICAgY29uc3QgY291cG9uQ2F0ZWdvcmllczogQXJyYXk8U3RyaW5nPiA9IFtdXHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHByb2R1Y3RzQ2F0ZWdvcmllcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgY2F0ZWdvcnk6IENhdGVnb3J5ICYgeyBmaXJlc3RvcmVJZD86IHN0cmluZyB9ID0gYXdhaXQgdGhpcy5yZXBvc2l0b3JpZXNGYWNhZGUuY2F0ZWdvcnlSZXBvc2l0b3J5LmdldCh7XHJcbiAgICAgICAgaWQ6IHByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0sXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAoY2F0ZWdvcnkpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IHRoaXMucmVwb3NpdG9yaWVzRmFjYWRlLmNhdGVnb3J5UmVwb3NpdG9yeS5nZXRDaGlsZHJlbihcclxuICAgICAgICAgIHBhcnNlSW50KHByb2R1Y3RzQ2F0ZWdvcmllc1tpbmRleF0pLFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgY291cG9uQ2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5LmlkLCAuLi5jaGlsZHJlbi5tYXAoKGMpID0+IGMuaWQudG9TdHJpbmcoKSkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQoY291cG9uQ2F0ZWdvcmllcyldXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtYWlsSXNGcm9tQ29sbGFib3JhdG9yID0gKHVzZXJFbWFpbDogc3RyaW5nKTogYm9vbGVhbiA9PiAhIXVzZXJFbWFpbD8ubWF0Y2goL0BiNGEuY29tLmJyL2cpXHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0TGluZUl0ZW5zRWxpZ2VibGVGb3JEaXNjb3VudChcclxuICAgIHByb2R1Y3RzQ2F0ZWdvcmllczogc3RyaW5nW10sXHJcbiAgICBjaGVja291dDogUGFydGlhbDxDaGVja291dD4sXHJcbiAgKTogUHJvbWlzZTxMaW5lSXRlbVtdPiB7XHJcbiAgICBsZXQgbGluZUl0ZW5zRGlzY291bnQgPSBbXVxyXG4gICAgY29uc3QgY291cG9uQ2F0ZWdvcmllcyA9IGF3YWl0IHRoaXMuZ2V0Q291cG9uQ2F0ZWdvcmllc0lkKHByb2R1Y3RzQ2F0ZWdvcmllcylcclxuXHJcbiAgICBpZiAocHJvZHVjdHNDYXRlZ29yaWVzPy5sZW5ndGgpIHtcclxuICAgICAgbGluZUl0ZW5zRGlzY291bnQgPSBjaGVja291dC5saW5lSXRlbXM/LmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLmlzR2lmdCkgcmV0dXJuIGZhbHNlXHJcblxyXG4gICAgICAgIGlmIChpdGVtLmNhdGVnb3JpZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0uY2F0ZWdvcmllcy5zb21lKChjKSA9PiBjb3Vwb25DYXRlZ29yaWVzLnNvbWUoKGNhdCkgPT4gY2F0ID09IGMpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxpbmVJdGVuc0Rpc2NvdW50ID0gY2hlY2tvdXQubGluZUl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaXNHaWZ0KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsaW5lSXRlbnNEaXNjb3VudFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjQ2hlY2tvdXRTdWJ0b3RhbChsaW5lSXRlbnM6IExpbmVJdGVtW10sIHVzZXI6IFVzZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgbGluZUl0ZW5zXHJcbiAgICAgICAgPy5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmlzR2lmdClcclxuICAgICAgICAucmVkdWNlKFxyXG4gICAgICAgICAgKGFjYywgY3VycikgPT5cclxuICAgICAgICAgICAgdXNlcj8uaXNTdWJzY3JpYmVyICYmIGN1cnIucHJpY2U/LnN1YnNjcmliZXJQcmljZVxyXG4gICAgICAgICAgICAgID8gYWNjICsgY3Vyci5wcmljZT8uc3Vic2NyaWJlclByaWNlICogY3Vyci5xdWFudGl0eVxyXG4gICAgICAgICAgICAgIDogYWNjICsgY3Vyci5wcmljZVBhaWQgKiBjdXJyLnF1YW50aXR5LFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICApIHx8IDBcclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZ2V0T3JkZXJzV2l0aENvdXBvbihjb3Vwb246IENvdXBvbik6IFByb21pc2U8T3JkZXJbXT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3NpdG9yaWVzRmFjYWRlLm9yZGVyUmVwb3NpdG9yeVxyXG4gICAgICAuZmluZCh7XHJcbiAgICAgICAgZmlsdGVyczoge1xyXG4gICAgICAgICAgY291cG9uOiB7IGlkOiBjb3Vwb24uaWQgfSxcclxuICAgICAgICAgIHN0YXR1czogeyBvcGVyYXRvcjogV2hlcmUuTk9URVFVQUxTLCB2YWx1ZTogT3JkZXJTdGF0dXMuQ0FOQ0VMQURPIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGEpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldE9yZGVyc0Zyb21Vc2VyKGVtYWlsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG9zaXRvcmllc0ZhY2FkZS5vcmRlclJlcG9zaXRvcnlcclxuICAgICAgLmZpbmQoe1xyXG4gICAgICAgIGZpbHRlcnM6IHtcclxuICAgICAgICAgIHVzZXI6IHsgZW1haWw6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IGVtYWlsIH0gfSxcclxuICAgICAgICAgIHN0YXR1czogeyBvcGVyYXRvcjogV2hlcmUuTk9URVFVQUxTLCB2YWx1ZTogT3JkZXJTdGF0dXMuQ0FOQ0VMQURPIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgLnRoZW4oKHJlc3VsdCkgPT4gcmVzdWx0LmRhdGEpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvdW50T3JkZXJzV2l0aFVzZXIob3JkZXJzOiBPcmRlcltdLCBlbWFpbDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBvcmRlcnMuZmlsdGVyKChvKSA9PiBvLnVzZXIuZW1haWwgPT0gZW1haWwpLmxlbmd0aFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb3Vwb25Vc2VMaW1pdHMoY291cG9uOiBDb3Vwb24sIGNoZWNrb3V0VHlwZTogQ2hlY2tvdXRUeXBlcywgdXNlcjogVXNlcikge1xyXG4gICAgbGV0IGNvdXBvblVzZUxpbWl0czogeyB1bmxpbWl0ZWQ/OiBib29sZWFuOyB0b3RhbD86IG51bWJlcjsgbGltaXRlZFBlclVzZXI/OiBib29sZWFuOyBmaXJzdE9yZGVyPzogYm9vbGVhbiB9XHJcblxyXG4gICAgaWYgKGNoZWNrb3V0VHlwZSA9PSBDaGVja291dFR5cGVzLkVDT01NRVJDRSB8fCBjaGVja291dFR5cGUgPT0gQ2hlY2tvdXRUeXBlcy5BTEwpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvdXBvbi5leGNsdXNpdml0eVR5cGUubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICAgKGNvdXBvbi5leGNsdXNpdml0eVR5cGUuYXQoMCkgPT09IEV4Y2x1c2l2aXRpZXMuU1BFQ0lGSUNfVVNFUiB8fFxyXG4gICAgICAgICAgY291cG9uLmV4Y2x1c2l2aXR5VHlwZS5hdCgwKSA9PT0gRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKVxyXG4gICAgICApXHJcbiAgICAgICAgY291cG9uVXNlTGltaXRzID0gY291cG9uLnVzZUxpbWl0cy5ub25fc3Vic2NyaWJlclxyXG4gICAgICBlbHNlIGNvdXBvblVzZUxpbWl0cyA9IHVzZXI/LmlzU3Vic2NyaWJlciA/IGNvdXBvbi51c2VMaW1pdHMuc3Vic2NyaWJlciA6IGNvdXBvbi51c2VMaW1pdHMubm9uX3N1YnNjcmliZXJcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvdXBvblVzZUxpbWl0cyA9IGNvdXBvbi51c2VMaW1pdHMuc3Vic2NyaXB0aW9uXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvdXBvblVzZUxpbWl0c1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,2 +1,2 @@
1
- export * from './util.helper';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2hlbHBlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3V0aWwuaGVscGVyJ1xuIl19
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, '-')
6
- .replace(/[ãàáäâ]/g, 'a')
7
- .replace(/[ẽèéëê]/g, 'e')
8
- .replace(/[ìíïî]/g, 'i')
9
- .replace(/[õòóöô]/g, 'o')
10
- .replace(/[ùúüû]/g, 'u')
11
- .replace(/[ñ]/g, 'n')
12
- .replace(/[ç]/g, 'c')
13
- .replace(/[&]/g, 'and')
14
- .replace(/[^\w-]+/g, '')
15
- .replace(/--+/g, '-');
16
- }
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2hlbHBlcnMvdXRpbC5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFVBQVU7SUFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFZO1FBQzVCLE9BQU8sSUFBSTthQUNSLFdBQVcsRUFBRTthQUNiLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ3BCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO2FBQ3hCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO2FBQ3hCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO2FBQ3hCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ3BCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ3BCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDekIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFV0aWxIZWxwZXIge1xuICBzdGF0aWMgY3JlYXRlU2x1ZyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL1vDo8Ogw6HDpMOiXS9nLCAnYScpXG4gICAgICAucmVwbGFjZSgvW+G6vcOow6nDq8OqXS9nLCAnZScpXG4gICAgICAucmVwbGFjZSgvW8Osw63Dr8OuXS9nLCAnaScpXG4gICAgICAucmVwbGFjZSgvW8O1w7LDs8O2w7RdL2csICdvJylcbiAgICAgIC5yZXBsYWNlKC9bw7nDusO8w7tdL2csICd1JylcbiAgICAgIC5yZXBsYWNlKC9bw7FdL2csICduJylcbiAgICAgIC5yZXBsYWNlKC9bw6ddL2csICdjJylcbiAgICAgIC5yZXBsYWNlKC9bJl0vZywgJ2FuZCcpXG4gICAgICAucmVwbGFjZSgvW15cXHctXSsvZywgJycpXG4gICAgICAucmVwbGFjZSgvLS0rL2csICctJylcbiAgfVxufVxuIl19
1
+ export class UtilHelper {
2
+ static createSlug(name) {
3
+ return name
4
+ .toLowerCase()
5
+ .replace(/\s+/g, '-')
6
+ .replace(/[ãàáäâ]/g, 'a')
7
+ .replace(/[ẽèéëê]/g, 'e')
8
+ .replace(/[ìíïî]/g, 'i')
9
+ .replace(/[õòóöô]/g, 'o')
10
+ .replace(/[ùúüû]/g, 'u')
11
+ .replace(/[ñ]/g, 'n')
12
+ .replace(/[ç]/g, 'c')
13
+ .replace(/[&]/g, 'and')
14
+ .replace(/[^\w-]+/g, '')
15
+ .replace(/--+/g, '-');
16
+ }
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2hlbHBlcnMvdXRpbC5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFVBQVU7SUFDckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFZO1FBQzVCLE9BQU8sSUFBSTthQUNSLFdBQVcsRUFBRTthQUNiLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ3BCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO2FBQ3hCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO2FBQ3hCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDO2FBQ3hCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ3BCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ3BCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDekIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFV0aWxIZWxwZXIge1xyXG4gIHN0YXRpYyBjcmVhdGVTbHVnKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbmFtZVxyXG4gICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpXHJcbiAgICAgIC5yZXBsYWNlKC9bw6PDoMOhw6TDol0vZywgJ2EnKVxyXG4gICAgICAucmVwbGFjZSgvW+G6vcOow6nDq8OqXS9nLCAnZScpXHJcbiAgICAgIC5yZXBsYWNlKC9bw6zDrcOvw65dL2csICdpJylcclxuICAgICAgLnJlcGxhY2UoL1vDtcOyw7PDtsO0XS9nLCAnbycpXHJcbiAgICAgIC5yZXBsYWNlKC9bw7nDusO8w7tdL2csICd1JylcclxuICAgICAgLnJlcGxhY2UoL1vDsV0vZywgJ24nKVxyXG4gICAgICAucmVwbGFjZSgvW8OnXS9nLCAnYycpXHJcbiAgICAgIC5yZXBsYWNlKC9bJl0vZywgJ2FuZCcpXHJcbiAgICAgIC5yZXBsYWNlKC9bXlxcdy1dKy9nLCAnJylcclxuICAgICAgLnJlcGxhY2UoLy0tKy9nLCAnLScpXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,24 +1,24 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class HomeShopRepositoriesFacade {
4
- constructor(categoryRepository, homeRepository, productRepository) {
5
- this.categoryRepository = categoryRepository;
6
- this.homeRepository = homeRepository;
7
- this.productRepository = productRepository;
8
- }
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HomeShopRepositoriesFacade, deps: [{ token: 'CategoryRepository' }, { token: 'HomeRepository' }, { token: 'ProductRepository' }], target: i0.ɵɵFactoryTarget.Injectable }); }
10
- static { thisprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HomeShopRepositoriesFacade }); }
11
- }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HomeShopRepositoriesFacade, decorators: [{
13
- type: Injectable
14
- }], ctorParameters: () => [{ type: undefined, decorators: [{
15
- type: Inject,
16
- args: ['CategoryRepository']
17
- }] }, { type: undefined, decorators: [{
18
- type: Inject,
19
- args: ['HomeRepository']
20
- }] }, { type: undefined, decorators: [{
21
- type: Inject,
22
- args: ['ProductRepository']
23
- }] }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS1zaG9wLXJlcG9zaXRvcmllcy5mYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2hvbWUtc2hvcC9ob21lLXNob3AtcmVwb3NpdG9yaWVzLmZhY2FkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTs7QUFJbEQsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUNnRCxrQkFBc0MsRUFDMUMsY0FBOEIsRUFDM0IsaUJBQW9DO1FBRm5DLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDMUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFDaEYsQ0FBQzsrR0FMTywwQkFBMEIsa0JBRTNCLG9CQUFvQixhQUNwQixnQkFBZ0IsYUFDaEIsbUJBQW1CO21IQUpsQiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVU7OzBCQUdOLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUN2QixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDYXRlZ29yeVJlcG9zaXRvcnksIEhvbWVSZXBvc2l0b3J5LCBQcm9kdWN0UmVwb3NpdG9yeSB9IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSG9tZVNob3BSZXBvc2l0b3JpZXNGYWNhZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdDYXRlZ29yeVJlcG9zaXRvcnknKSBwdWJsaWMgcmVhZG9ubHkgY2F0ZWdvcnlSZXBvc2l0b3J5OiBDYXRlZ29yeVJlcG9zaXRvcnksXG4gICAgQEluamVjdCgnSG9tZVJlcG9zaXRvcnknKSBwdWJsaWMgcmVhZG9ubHkgaG9tZVJlcG9zaXRvcnk6IEhvbWVSZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoJ1Byb2R1Y3RSZXBvc2l0b3J5JykgcHVibGljIHJlYWRvbmx5IHByb2R1Y3RSZXBvc2l0b3J5OiBQcm9kdWN0UmVwb3NpdG9yeSxcbiAgKSB7fVxufVxuIl19
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class HomeShopRepositoriesFacade {
4
+ constructor(categoryRepository, homeRepository, productRepository) {
5
+ this.categoryRepository = categoryRepository;
6
+ this.homeRepository = homeRepository;
7
+ this.productRepository = productRepository;
8
+ }
9
+ }
10
+ HomeShopRepositoriesFacadefac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: HomeShopRepositoriesFacade, deps: [{ token: 'CategoryRepository' }, { token: 'HomeRepository' }, { token: 'ProductRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
11
+ HomeShopRepositoriesFacade.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: HomeShopRepositoriesFacade });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: HomeShopRepositoriesFacade, decorators: [{
13
+ type: Injectable
14
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
15
+ type: Inject,
16
+ args: ['CategoryRepository']
17
+ }] }, { type: undefined, decorators: [{
18
+ type: Inject,
19
+ args: ['HomeRepository']
20
+ }] }, { type: undefined, decorators: [{
21
+ type: Inject,
22
+ args: ['ProductRepository']
23
+ }] }]; } });
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS1zaG9wLXJlcG9zaXRvcmllcy5mYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2hvbWUtc2hvcC9ob21lLXNob3AtcmVwb3NpdG9yaWVzLmZhY2FkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTs7QUFJbEQsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUNnRCxrQkFBc0MsRUFDMUMsY0FBOEIsRUFDM0IsaUJBQW9DO1FBRm5DLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDMUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7SUFDaEYsQ0FBQzs7dUhBTE8sMEJBQTBCLGtCQUUzQixvQkFBb0IsYUFDcEIsZ0JBQWdCLGFBQ2hCLG1CQUFtQjsySEFKbEIsMEJBQTBCOzJGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVU7OzBCQUdOLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUN2QixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IENhdGVnb3J5UmVwb3NpdG9yeSwgSG9tZVJlcG9zaXRvcnksIFByb2R1Y3RSZXBvc2l0b3J5IH0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBIb21lU2hvcFJlcG9zaXRvcmllc0ZhY2FkZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdDYXRlZ29yeVJlcG9zaXRvcnknKSBwdWJsaWMgcmVhZG9ubHkgY2F0ZWdvcnlSZXBvc2l0b3J5OiBDYXRlZ29yeVJlcG9zaXRvcnksXHJcbiAgICBASW5qZWN0KCdIb21lUmVwb3NpdG9yeScpIHB1YmxpYyByZWFkb25seSBob21lUmVwb3NpdG9yeTogSG9tZVJlcG9zaXRvcnksXHJcbiAgICBASW5qZWN0KCdQcm9kdWN0UmVwb3NpdG9yeScpIHB1YmxpYyByZWFkb25seSBwcm9kdWN0UmVwb3NpdG9yeTogUHJvZHVjdFJlcG9zaXRvcnksXHJcbiAgKSB7fVxyXG59XHJcbiJdfQ==
@@ -1,2 +1,2 @@
1
- export { HomeShopRepositoriesFacade } from './home-shop-repositories.facade';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2hvbWUtc2hvcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEhvbWVTaG9wUmVwb3NpdG9yaWVzRmFjYWRlIH0gZnJvbSAnLi9ob21lLXNob3AtcmVwb3NpdG9yaWVzLmZhY2FkZSdcbiJdfQ==
1
+ export { HomeShopRepositoriesFacade } from './home-shop-repositories.facade';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2hvbWUtc2hvcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEhvbWVTaG9wUmVwb3NpdG9yaWVzRmFjYWRlIH0gZnJvbSAnLi9ob21lLXNob3AtcmVwb3NpdG9yaWVzLmZhY2FkZSdcclxuIl19