ng-easycommerce-v18 0.0.1 → 0.0.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/README.md +24 -27
- package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/ct.json +273 -273
- package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/en.json +0 -0
- package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/es.json +387 -387
- package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/fr.json +0 -0
- package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/gl.json +273 -273
- package/{projects/ng-easycommerce/src/lib/assets → assets}/ec-i18n/pr.json +273 -273
- package/{projects/ng-easycommerce/src/lib/assets → assets}/recaptcha/recaptcha-site-keys.json +3 -3
- package/{projects/ng-easycommerce/src/lib/assets → assets}/recaptcha/recaptcha-sites-prod.json +38 -38
- package/{projects/ng-easycommerce/src/lib/assets → assets}/recaptcha/recaptcha-sites.json +52 -52
- package/esm2022/lib/api/connection.service.mjs +75 -0
- package/esm2022/lib/api/index.mjs +2 -0
- package/esm2022/lib/classes/checkout/index.mjs +2 -0
- package/esm2022/lib/classes/checkout/steps.mjs +29 -0
- package/esm2022/lib/classes/filters/attributes-filter.mjs +73 -0
- package/esm2022/lib/classes/filters/category-filter.mjs +59 -0
- package/esm2022/lib/classes/filters/dynamics-filter.mjs +58 -0
- package/esm2022/lib/classes/filters/filter-factory.mjs +21 -0
- package/esm2022/lib/classes/filters/filter.mjs +83 -0
- package/esm2022/lib/classes/filters/index.mjs +7 -0
- package/esm2022/lib/classes/filters/sort-filter.mjs +88 -0
- package/esm2022/lib/classes/index.mjs +4 -0
- package/esm2022/lib/classes/user.mjs +59 -0
- package/esm2022/lib/constants/api.constants.service.mjs +71 -0
- package/esm2022/lib/constants/core.constants.service.mjs +196 -0
- package/esm2022/lib/constants/index.mjs +3 -0
- package/esm2022/lib/ec-components/abstractions-components/block-ec.component.mjs +110 -0
- package/esm2022/lib/ec-components/abstractions-components/index.mjs +3 -0
- package/esm2022/lib/ec-components/abstractions-components/menu-ec.component.mjs +97 -0
- package/esm2022/lib/ec-components/account-ec/account-ec.component.mjs +22 -0
- package/esm2022/lib/ec-components/account-ec/index.mjs +4 -0
- package/esm2022/lib/ec-components/account-ec/order-ec/order-ec.component.mjs +16 -0
- package/esm2022/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.mjs +150 -0
- package/esm2022/lib/ec-components/auth-ec/auth-ec.component.mjs +12 -0
- package/esm2022/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.mjs +30 -0
- package/esm2022/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.mjs +54 -0
- package/esm2022/lib/ec-components/auth-ec/index.mjs +7 -0
- package/esm2022/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.mjs +91 -0
- package/esm2022/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.mjs +105 -0
- package/esm2022/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.mjs +153 -0
- package/esm2022/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.mjs +104 -0
- package/esm2022/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.mjs +87 -0
- package/esm2022/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.mjs +87 -0
- package/esm2022/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.mjs +37 -0
- package/esm2022/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.mjs +78 -0
- package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +109 -0
- package/esm2022/lib/ec-components/blocks-ec/blocks-ec.component.mjs +99 -0
- package/esm2022/lib/ec-components/blocks-ec/index.mjs +5 -0
- package/esm2022/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.mjs +27 -0
- package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +21 -0
- package/esm2022/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.mjs +47 -0
- package/esm2022/lib/ec-components/cart-ec/index.mjs +3 -0
- package/esm2022/lib/ec-components/checkout-ec/checkout-ec.component.mjs +60 -0
- package/esm2022/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.mjs +271 -0
- package/esm2022/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.mjs +51 -0
- package/esm2022/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.mjs +45 -0
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.mjs +92 -0
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.mjs +30 -0
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.mjs +4 -0
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.mjs +119 -0
- package/esm2022/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.mjs +32 -0
- package/esm2022/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.mjs +96 -0
- package/esm2022/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.mjs +35 -0
- package/esm2022/lib/ec-components/checkout-ec/success-ec/success-ec.component.mjs +55 -0
- package/esm2022/lib/ec-components/collection-ec/collection-ec.component.mjs +72 -0
- package/esm2022/lib/ec-components/coupon-ec/coupon-ec.component.mjs +29 -0
- package/esm2022/lib/ec-components/filters-ec/filters-ec.component.mjs +38 -0
- package/esm2022/lib/ec-components/filters-sort-ec/filters-sort-ec.component.mjs +36 -0
- package/esm2022/lib/ec-components/footer-ec/footer-ec.component.mjs +17 -0
- package/esm2022/lib/ec-components/header-ec/header-ec.component.mjs +18 -0
- package/esm2022/lib/ec-components/home-ec/home-ec.component.mjs +14 -0
- package/esm2022/lib/ec-components/index.mjs +19 -0
- package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +74 -0
- package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +51 -0
- package/esm2022/lib/ec-components/variants-ec/variants-ec.component.mjs +18 -0
- package/esm2022/lib/ec-components/widgets-ec/index.mjs +5 -0
- package/esm2022/lib/ec-components/widgets-ec/loading/index.mjs +4 -0
- package/esm2022/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.mjs +11 -0
- package/esm2022/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.mjs +16 -0
- package/esm2022/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.mjs +12 -0
- package/esm2022/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.mjs +178 -0
- package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +27 -0
- package/esm2022/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.mjs +71 -0
- package/esm2022/lib/ec-guards/auth.guard.mjs +18 -0
- package/esm2022/lib/ec-guards/index.mjs +2 -0
- package/esm2022/lib/ec-pipe/ec-currency-symbol.pipe.mjs +98 -0
- package/esm2022/lib/ec-pipe/index.mjs +2 -0
- package/esm2022/lib/ec-services/addressing.service.mjs +185 -0
- package/esm2022/lib/ec-services/analytics/analytics.service.mjs +80 -0
- package/esm2022/lib/ec-services/analytics/doppler.service.mjs +47 -0
- package/esm2022/lib/ec-services/analytics/facebook-pixel.service.mjs +212 -0
- package/esm2022/lib/ec-services/analytics/google-analytics.service.mjs +283 -0
- package/esm2022/lib/ec-services/analytics/gtm.service.mjs +414 -0
- package/esm2022/lib/ec-services/analytics/index.mjs +7 -0
- package/esm2022/lib/ec-services/analytics/metricool-pixel.service.mjs +55 -0
- package/esm2022/lib/ec-services/auth.service.mjs +440 -0
- package/esm2022/lib/ec-services/auth.storage.service.mjs +54 -0
- package/esm2022/lib/ec-services/blocks-repository.service.mjs +64 -0
- package/esm2022/lib/ec-services/blocks.service.mjs +52 -0
- package/esm2022/lib/ec-services/cart.service.mjs +465 -0
- package/esm2022/lib/ec-services/channel.service.mjs +83 -0
- package/esm2022/lib/ec-services/checkout.service.mjs +180 -0
- package/esm2022/lib/ec-services/currency.service.mjs +177 -0
- package/esm2022/lib/ec-services/filters.service.mjs +134 -0
- package/esm2022/lib/ec-services/form.service.mjs +81 -0
- package/esm2022/lib/ec-services/index.mjs +27 -0
- package/esm2022/lib/ec-services/local-storage.service.mjs +58 -0
- package/esm2022/lib/ec-services/ngx-local-storage.service.mjs +66 -0
- package/esm2022/lib/ec-services/options.service.mjs +273 -0
- package/esm2022/lib/ec-services/order-utility.service.mjs +61 -0
- package/esm2022/lib/ec-services/orders.service.mjs +48 -0
- package/esm2022/lib/ec-services/pagination.service.mjs +163 -0
- package/esm2022/lib/ec-services/parameters.service.mjs +65 -0
- package/esm2022/lib/ec-services/payment.service.mjs +54 -0
- package/esm2022/lib/ec-services/product-detail.service.mjs +285 -0
- package/esm2022/lib/ec-services/products.service.mjs +148 -0
- package/esm2022/lib/ec-services/re-captcha.service.mjs +114 -0
- package/esm2022/lib/ec-services/shipment.service.mjs +158 -0
- package/esm2022/lib/ec-services/stores.service.mjs +27 -0
- package/esm2022/lib/ec-services/test.service.mjs +16 -0
- package/esm2022/lib/ec-services/toast.service.mjs +81 -0
- package/esm2022/lib/interceptors/auth.interceptor.mjs +35 -0
- package/esm2022/lib/interceptors/index.mjs +2 -0
- package/esm2022/lib/interfaces/analytics/event-key.mjs +2 -0
- package/esm2022/lib/interfaces/analytics/facebook-pixel-data.mjs +2 -0
- package/esm2022/lib/interfaces/analytics/gtm-config.mjs +2 -0
- package/esm2022/lib/interfaces/analytics/index.mjs +4 -0
- package/esm2022/lib/interfaces/blocks.mjs +2 -0
- package/esm2022/lib/interfaces/checkout.mjs +2 -0
- package/esm2022/lib/interfaces/connection.mjs +2 -0
- package/esm2022/lib/interfaces/coupon.mjs +2 -0
- package/esm2022/lib/interfaces/currency.mjs +2 -0
- package/esm2022/lib/interfaces/deserializable.mjs +2 -0
- package/esm2022/lib/interfaces/environment.mjs +2 -0
- package/esm2022/lib/interfaces/filter.mjs +2 -0
- package/esm2022/lib/interfaces/index.mjs +19 -0
- package/esm2022/lib/interfaces/options.mjs +2 -0
- package/esm2022/lib/interfaces/pagination.mjs +2 -0
- package/esm2022/lib/interfaces/parameter.mjs +2 -0
- package/esm2022/lib/interfaces/product.mjs +2 -0
- package/esm2022/lib/interfaces/step.mjs +2 -0
- package/esm2022/lib/interfaces/storage.mjs +2 -0
- package/esm2022/lib/interfaces/store.mjs +2 -0
- package/esm2022/lib/interfaces/types/index.mjs +2 -0
- package/esm2022/lib/interfaces/types/user.type.mjs +2 -0
- package/esm2022/lib/providers/index.mjs +2 -0
- package/esm2022/lib/providers/provideEnvironment.mjs +20 -0
- package/esm2022/lib/stores/currency.store.mjs +10 -0
- package/esm2022/lib/stores/index.mjs +2 -0
- package/esm2022/ng-easycommerce-v18.mjs +5 -0
- package/esm2022/public-api.mjs +20 -0
- package/fesm2022/ng-easycommerce-v18.mjs +8190 -0
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/api/connection.service.d.ts +52 -0
- package/lib/api/index.d.ts +1 -0
- package/lib/classes/checkout/index.d.ts +1 -0
- package/lib/classes/checkout/steps.d.ts +15 -0
- package/lib/classes/filters/attributes-filter.d.ts +14 -0
- package/lib/classes/filters/category-filter.d.ts +14 -0
- package/lib/classes/filters/dynamics-filter.d.ts +13 -0
- package/lib/classes/filters/filter-factory.d.ts +5 -0
- package/lib/classes/filters/filter.d.ts +19 -0
- package/lib/classes/filters/index.d.ts +6 -0
- package/lib/classes/filters/sort-filter.d.ts +14 -0
- package/{projects/ng-easycommerce/src/lib/classes/index.ts → lib/classes/index.d.ts} +3 -3
- package/lib/classes/user.d.ts +50 -0
- package/lib/constants/api.constants.service.d.ts +54 -0
- package/lib/constants/core.constants.service.d.ts +109 -0
- package/lib/constants/index.d.ts +2 -0
- package/lib/ec-components/abstractions-components/block-ec.component.d.ts +62 -0
- package/lib/ec-components/abstractions-components/index.d.ts +2 -0
- package/lib/ec-components/abstractions-components/menu-ec.component.d.ts +67 -0
- package/lib/ec-components/account-ec/account-ec.component.d.ts +10 -0
- package/lib/ec-components/account-ec/index.d.ts +3 -0
- package/lib/ec-components/account-ec/order-ec/order-ec.component.d.ts +8 -0
- package/lib/ec-components/account-ec/orders-list-ec/orders-list-ec.component.d.ts +55 -0
- package/lib/ec-components/auth-ec/auth-ec.component.d.ts +5 -0
- package/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.d.ts +11 -0
- package/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.d.ts +27 -0
- package/{projects/ng-easycommerce/src/lib/ec-components/auth-ec/index.ts → lib/ec-components/auth-ec/index.d.ts} +6 -6
- package/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.d.ts +42 -0
- package/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.d.ts +39 -0
- package/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.d.ts +62 -0
- package/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.d.ts +46 -0
- package/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.d.ts +54 -0
- package/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.d.ts +21 -0
- package/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.d.ts +25 -0
- package/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.d.ts +17 -0
- package/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.d.ts +51 -0
- package/lib/ec-components/blocks-ec/blocks-ec.component.d.ts +59 -0
- package/{projects/ng-easycommerce/src/lib/ec-components/blocks-ec/index.ts → lib/ec-components/blocks-ec/index.d.ts} +4 -4
- package/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.d.ts +11 -0
- package/lib/ec-components/cart-ec/cart-ec.component.d.ts +12 -0
- package/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.d.ts +17 -0
- package/lib/ec-components/cart-ec/index.d.ts +2 -0
- package/lib/ec-components/checkout-ec/checkout-ec.component.d.ts +20 -0
- package/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.d.ts +83 -0
- package/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.d.ts +14 -0
- package/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.d.ts +11 -0
- package/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.d.ts +37 -0
- package/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.d.ts +11 -0
- package/{projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/index.ts → lib/ec-components/checkout-ec/payment-ec/payment-methods/index.d.ts} +3 -3
- package/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.d.ts +30 -0
- package/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.d.ts +11 -0
- package/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.d.ts +30 -0
- package/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.d.ts +11 -0
- package/lib/ec-components/checkout-ec/success-ec/success-ec.component.d.ts +30 -0
- package/lib/ec-components/collection-ec/collection-ec.component.d.ts +37 -0
- package/lib/ec-components/coupon-ec/coupon-ec.component.d.ts +12 -0
- package/lib/ec-components/filters-ec/filters-ec.component.d.ts +14 -0
- package/lib/ec-components/filters-sort-ec/filters-sort-ec.component.d.ts +14 -0
- package/lib/ec-components/footer-ec/footer-ec.component.d.ts +10 -0
- package/lib/ec-components/header-ec/header-ec.component.d.ts +12 -0
- package/lib/ec-components/home-ec/home-ec.component.d.ts +8 -0
- package/{projects/ng-easycommerce/src/lib/ec-components/index.ts → lib/ec-components/index.d.ts} +18 -17
- package/lib/ec-components/product-detail-ec/product-detail-ec.component.d.ts +35 -0
- package/lib/ec-components/product-ec/product-ec.component.d.ts +31 -0
- package/lib/ec-components/variants-ec/variants-ec.component.d.ts +8 -0
- package/{projects/ng-easycommerce/src/lib/ec-components/widgets-ec/index.ts → lib/ec-components/widgets-ec/index.d.ts} +4 -4
- package/{projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/index.ts → lib/ec-components/widgets-ec/loading/index.d.ts} +3 -3
- package/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.d.ts +5 -0
- package/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.d.ts +6 -0
- package/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.d.ts +5 -0
- package/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.d.ts +70 -0
- package/lib/ec-components/widgets-ec/price-ec/price-ec.component.d.ts +16 -0
- package/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.d.ts +26 -0
- package/lib/ec-guards/auth.guard.d.ts +8 -0
- package/lib/ec-guards/index.d.ts +1 -0
- package/lib/ec-pipe/ec-currency-symbol.pipe.d.ts +54 -0
- package/lib/ec-pipe/index.d.ts +1 -0
- package/lib/ec-services/addressing.service.d.ts +233 -0
- package/lib/ec-services/analytics/analytics.service.d.ts +50 -0
- package/lib/ec-services/analytics/doppler.service.d.ts +26 -0
- package/lib/ec-services/analytics/facebook-pixel.service.d.ts +102 -0
- package/lib/ec-services/analytics/google-analytics.service.d.ts +118 -0
- package/lib/ec-services/analytics/gtm.service.d.ts +153 -0
- package/{projects/ng-easycommerce/src/lib/ec-services/analytics/index.ts → lib/ec-services/analytics/index.d.ts} +6 -6
- package/lib/ec-services/analytics/metricool-pixel.service.d.ts +26 -0
- package/lib/ec-services/auth.service.d.ts +229 -0
- package/lib/ec-services/auth.storage.service.d.ts +24 -0
- package/lib/ec-services/blocks-repository.service.d.ts +40 -0
- package/lib/ec-services/blocks.service.d.ts +38 -0
- package/lib/ec-services/cart.service.d.ts +211 -0
- package/lib/ec-services/channel.service.d.ts +59 -0
- package/lib/ec-services/checkout.service.d.ts +49 -0
- package/lib/ec-services/currency.service.d.ts +108 -0
- package/lib/ec-services/filters.service.d.ts +56 -0
- package/lib/ec-services/form.service.d.ts +50 -0
- package/{projects/ng-easycommerce/src/lib/ec-services/index.ts → lib/ec-services/index.d.ts} +26 -24
- package/lib/ec-services/local-storage.service.d.ts +40 -0
- package/lib/ec-services/ngx-local-storage.service.d.ts +42 -0
- package/lib/ec-services/options.service.d.ts +121 -0
- package/lib/ec-services/order-utility.service.d.ts +15 -0
- package/lib/ec-services/orders.service.d.ts +14 -0
- package/lib/ec-services/pagination.service.d.ts +89 -0
- package/lib/ec-services/parameters.service.d.ts +41 -0
- package/lib/ec-services/payment.service.d.ts +22 -0
- package/lib/ec-services/product-detail.service.d.ts +97 -0
- package/lib/ec-services/products.service.d.ts +48 -0
- package/lib/ec-services/re-captcha.service.d.ts +65 -0
- package/lib/ec-services/shipment.service.d.ts +49 -0
- package/lib/ec-services/stores.service.d.ts +12 -0
- package/lib/ec-services/test.service.d.ts +6 -0
- package/lib/ec-services/toast.service.d.ts +59 -0
- package/lib/interceptors/auth.interceptor.d.ts +2 -0
- package/lib/interceptors/index.d.ts +1 -0
- package/lib/interfaces/analytics/event-key.d.ts +1 -0
- package/lib/interfaces/analytics/facebook-pixel-data.d.ts +5 -0
- package/{projects/ng-easycommerce/src/lib/interfaces/analytics/gtm-config.ts → lib/interfaces/analytics/gtm-config.d.ts} +6 -6
- package/{projects/ng-easycommerce/src/lib/interfaces/analytics/index.ts → lib/interfaces/analytics/index.d.ts} +3 -3
- package/lib/interfaces/blocks.d.ts +41 -0
- package/{projects/ng-easycommerce/src/lib/interfaces/checkout.ts → lib/interfaces/checkout.d.ts} +12 -14
- package/{projects/ng-easycommerce/src/lib/interfaces/connection.ts → lib/interfaces/connection.d.ts} +7 -8
- package/lib/interfaces/coupon.d.ts +5 -0
- package/lib/interfaces/currency.d.ts +9 -0
- package/{projects/ng-easycommerce/src/lib/interfaces/deserializable.ts → lib/interfaces/deserializable.d.ts} +3 -3
- package/{projects/ng-easycommerce/src/lib/interfaces/environment.ts → lib/interfaces/environment.d.ts} +6 -6
- package/{projects/ng-easycommerce/src/lib/interfaces/filter.ts → lib/interfaces/filter.d.ts} +38 -59
- package/{projects/ng-easycommerce/src/lib/interfaces/index.ts → lib/interfaces/index.d.ts} +16 -18
- package/lib/interfaces/options.d.ts +26 -0
- package/lib/interfaces/pagination.d.ts +24 -0
- package/lib/interfaces/parameter.d.ts +14 -0
- package/{projects/ng-easycommerce/src/lib/interfaces/product.ts → lib/interfaces/product.d.ts} +73 -81
- package/lib/interfaces/step.d.ts +15 -0
- package/lib/interfaces/storage.d.ts +7 -0
- package/{projects/ng-easycommerce/src/lib/interfaces/store.ts → lib/interfaces/store.d.ts} +17 -17
- package/lib/interfaces/types/index.d.ts +1 -0
- package/lib/interfaces/types/user.type.d.ts +5 -0
- package/lib/providers/index.d.ts +1 -0
- package/lib/providers/provideEnvironment.d.ts +13 -0
- package/lib/stores/currency.store.d.ts +7 -0
- package/lib/stores/index.d.ts +1 -0
- package/package.json +29 -58
- package/{projects/ng-easycommerce/src/public-api.ts → public-api.d.ts} +8 -24
- package/.editorconfig +0 -16
- package/angular.json +0 -48
- package/projects/ng-easycommerce/README.md +0 -24
- package/projects/ng-easycommerce/ng-package.json +0 -7
- package/projects/ng-easycommerce/package.json +0 -12
- package/projects/ng-easycommerce/src/lib/api/connection.service.ts +0 -79
- package/projects/ng-easycommerce/src/lib/api/index.ts +0 -1
- package/projects/ng-easycommerce/src/lib/classes/checkout/index.ts +0 -1
- package/projects/ng-easycommerce/src/lib/classes/checkout/steps.ts +0 -37
- package/projects/ng-easycommerce/src/lib/classes/filters/attributes-filter.ts +0 -74
- package/projects/ng-easycommerce/src/lib/classes/filters/category-filter.ts +0 -57
- package/projects/ng-easycommerce/src/lib/classes/filters/dynamics-filter.ts +0 -57
- package/projects/ng-easycommerce/src/lib/classes/filters/filter-factory.ts +0 -23
- package/projects/ng-easycommerce/src/lib/classes/filters/filter.ts +0 -89
- package/projects/ng-easycommerce/src/lib/classes/filters/index.ts +0 -6
- package/projects/ng-easycommerce/src/lib/classes/filters/sort-filter.ts +0 -93
- package/projects/ng-easycommerce/src/lib/classes/user.ts +0 -68
- package/projects/ng-easycommerce/src/lib/constants/api.constants.service.ts +0 -69
- package/projects/ng-easycommerce/src/lib/constants/core.constants.service.ts +0 -210
- package/projects/ng-easycommerce/src/lib/constants/index.ts +0 -2
- package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/block-ec.component.ts +0 -107
- package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/index.ts +0 -2
- package/projects/ng-easycommerce/src/lib/ec-components/abstractions-components/menu-ec.component.ts +0 -102
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.html +0 -10
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/auth-ec.component.ts +0 -13
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.html +0 -19
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/confirm-account-ec/confirm-account-ec.component.ts +0 -34
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.html +0 -31
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/forgot-password-ec/forgot-password-ec.component.ts +0 -55
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.html +0 -30
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.ts +0 -92
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.html +0 -55
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-form-ec/register-form-ec.component.ts +0 -102
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.html +0 -233
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/auth-ec/register-wholesaler-form-ec/register-wholesaler-form-ec.component.ts +0 -149
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.html +0 -113
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.scss +0 -12
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-box-ec/block-banner-box-ec.component.ts +0 -100
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.html +0 -111
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-banner-full-ec/block-banner-full-ec.component.ts +0 -77
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.html +0 -62
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-form-contact-ec/block-form-contact-ec.component.ts +0 -89
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.html +0 -1
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-html-ec/block-html-ec.component.ts +0 -33
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.html +0 -1
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-newsletter-ec/block-newsletter-ec.component.ts +0 -81
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.html +0 -40
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.ts +0 -97
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.html +0 -41
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/blocks-ec/blocks-ec.component.ts +0 -86
- package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.html +0 -20
- package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/breadcrumb-ec/breadcrumb-ec.component.ts +0 -30
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.html +0 -1
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-ec.component.ts +0 -24
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.html +0 -1
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/cart-item-ec/cart-item-ec.component.ts +0 -51
- package/projects/ng-easycommerce/src/lib/ec-components/cart-ec/index.ts +0 -2
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.html +0 -56
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.scss +0 -38
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/checkout-ec.component.ts +0 -67
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.html +0 -836
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.ts +0 -302
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.html +0 -32
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/dataform-ec/input-ec/input-ec.component.ts +0 -52
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.html +0 -12
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/detail-checkout-block-ec/detail-checkout-block-ec.component.ts +0 -48
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.html +0 -195
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-ec.component.ts +0 -103
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.html +0 -28
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/bank-transfer-ec/bank-transfer-ec.component.ts +0 -26
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.html +0 -33
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/mp-redirect-ec/mp-redirect-ec.component.ts +0 -116
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.html +0 -13
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/payment-ec/payment-methods/offline-ec/offline-ec.component.ts +0 -26
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.html +0 -111
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/shipment-ec/shipment-ec.component.ts +0 -111
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.html +0 -33
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/step-container-ec/step-container-ec.component.ts +0 -39
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.html +0 -59
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/checkout-ec/success-ec/success-ec.component.ts +0 -65
- package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.html +0 -16
- package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/collection-ec/collection-ec.component.ts +0 -83
- package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.html +0 -1
- package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/coupon-ec/coupon-ec.component.ts +0 -32
- package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.html +0 -1
- package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-ec/filters-ec.component.ts +0 -45
- package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.html +0 -1
- package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/filters-sort-ec/filters-sort-ec.component.ts +0 -49
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.html +0 -1
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.spec.ts +0 -23
- package/projects/ng-easycommerce/src/lib/ec-components/footer-ec/footer-ec.component.ts +0 -18
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.html +0 -1
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.spec.ts +0 -23
- package/projects/ng-easycommerce/src/lib/ec-components/header-ec/header-ec.component.ts +0 -22
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.html +0 -1
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.spec.ts +0 -23
- package/projects/ng-easycommerce/src/lib/ec-components/home-ec/home-ec.component.ts +0 -16
- package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.html +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-detail-ec/product-detail-ec.component.ts +0 -82
- package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.html +0 -31
- package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/product-ec/product-ec.component.ts +0 -46
- package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.html +0 -65
- package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.scss +0 -8
- package/projects/ng-easycommerce/src/lib/ec-components/variants-ec/variants-ec.component.ts +0 -20
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.html +0 -7
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-full-ec/loading-full-ec.component.ts +0 -13
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.html +0 -5
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-inline-ec/loading-inline-ec.component.ts +0 -13
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.html +0 -3
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/loading/loading-section-ec/loading-section-ec.component.ts +0 -13
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.html +0 -11
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/magnizoom-ec/magnizoom-ec.component.ts +0 -177
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.html +0 -47
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/price-ec/price-ec.component.ts +0 -22
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.html +0 -6
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.scss +0 -0
- package/projects/ng-easycommerce/src/lib/ec-components/widgets-ec/re-captcha-ec/re-captcha-ec.component.ts +0 -70
- package/projects/ng-easycommerce/src/lib/ec-guards/auth.guard.ts +0 -19
- package/projects/ng-easycommerce/src/lib/ec-guards/index.ts +0 -1
- package/projects/ng-easycommerce/src/lib/ec-pipe/ec-currency-symbol.pipe.ts +0 -99
- package/projects/ng-easycommerce/src/lib/ec-pipe/index.ts +0 -1
- package/projects/ng-easycommerce/src/lib/ec-services/addressing.service.ts +0 -199
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/analytics.service.ts +0 -76
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/doppler.service.ts +0 -38
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/facebook-pixel.service.ts +0 -214
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/google-analytics.service.ts +0 -284
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/gtm.service.ts +0 -413
- package/projects/ng-easycommerce/src/lib/ec-services/analytics/metricool-pixel.service.ts +0 -46
- package/projects/ng-easycommerce/src/lib/ec-services/auth.service.ts +0 -438
- package/projects/ng-easycommerce/src/lib/ec-services/auth.storage.service.ts +0 -54
- package/projects/ng-easycommerce/src/lib/ec-services/blocks-repository.service.ts +0 -67
- package/projects/ng-easycommerce/src/lib/ec-services/blocks.service.ts +0 -48
- package/projects/ng-easycommerce/src/lib/ec-services/cart.service.ts +0 -492
- package/projects/ng-easycommerce/src/lib/ec-services/channel.service.ts +0 -81
- package/projects/ng-easycommerce/src/lib/ec-services/checkout.service.ts +0 -196
- package/projects/ng-easycommerce/src/lib/ec-services/currency.service.ts +0 -179
- package/projects/ng-easycommerce/src/lib/ec-services/filters.service.ts +0 -133
- package/projects/ng-easycommerce/src/lib/ec-services/form.service.ts +0 -82
- package/projects/ng-easycommerce/src/lib/ec-services/local-storage.service.ts +0 -54
- package/projects/ng-easycommerce/src/lib/ec-services/ngx-local-storage.service.ts +0 -66
- package/projects/ng-easycommerce/src/lib/ec-services/options.service.ts +0 -274
- package/projects/ng-easycommerce/src/lib/ec-services/order-utility.service.ts +0 -52
- package/projects/ng-easycommerce/src/lib/ec-services/pagination.service.ts +0 -172
- package/projects/ng-easycommerce/src/lib/ec-services/parameters.service.ts +0 -67
- package/projects/ng-easycommerce/src/lib/ec-services/payment.service.ts +0 -63
- package/projects/ng-easycommerce/src/lib/ec-services/product-detail.service.ts +0 -288
- package/projects/ng-easycommerce/src/lib/ec-services/products.service.ts +0 -162
- package/projects/ng-easycommerce/src/lib/ec-services/re-captcha.service.ts +0 -126
- package/projects/ng-easycommerce/src/lib/ec-services/shipment.service.ts +0 -174
- package/projects/ng-easycommerce/src/lib/ec-services/stores.service.ts +0 -27
- package/projects/ng-easycommerce/src/lib/ec-services/toast.service.ts +0 -84
- package/projects/ng-easycommerce/src/lib/interceptors/auth.interceptor.ts +0 -43
- package/projects/ng-easycommerce/src/lib/interceptors/index.ts +0 -1
- package/projects/ng-easycommerce/src/lib/interfaces/analytics/event-key.ts +0 -14
- package/projects/ng-easycommerce/src/lib/interfaces/analytics/facebook-pixel-data.ts +0 -5
- package/projects/ng-easycommerce/src/lib/interfaces/blocks.ts +0 -56
- package/projects/ng-easycommerce/src/lib/interfaces/coupon.ts +0 -5
- package/projects/ng-easycommerce/src/lib/interfaces/currency.ts +0 -10
- package/projects/ng-easycommerce/src/lib/interfaces/options.ts +0 -28
- package/projects/ng-easycommerce/src/lib/interfaces/pagination.ts +0 -27
- package/projects/ng-easycommerce/src/lib/interfaces/parameter.ts +0 -15
- package/projects/ng-easycommerce/src/lib/interfaces/step.ts +0 -19
- package/projects/ng-easycommerce/src/lib/interfaces/storage.ts +0 -7
- package/projects/ng-easycommerce/src/lib/interfaces/types/index.ts +0 -1
- package/projects/ng-easycommerce/src/lib/interfaces/types/user.type.ts +0 -5
- package/projects/ng-easycommerce/src/lib/providers/index.ts +0 -1
- package/projects/ng-easycommerce/src/lib/providers/provideEnvironment.ts +0 -24
- package/projects/ng-easycommerce/src/lib/stores/currency.store.ts +0 -20
- package/projects/ng-easycommerce/src/lib/stores/index.ts +0 -1
- package/projects/ng-easycommerce/tsconfig.lib.json +0 -15
- package/projects/ng-easycommerce/tsconfig.lib.prod.json +0 -11
- package/projects/ng-easycommerce/tsconfig.spec.json +0 -15
- package/tsconfig.doc.json +0 -4
- package/tsconfig.json +0 -37
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import { inject, Injectable, PLATFORM_ID, RendererFactory2 } from '@angular/core';
|
|
2
|
+
import { NavigationEnd, Router } from '@angular/router';
|
|
3
|
+
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Servicio que se encarga de manejar el analytics de GTM.
|
|
7
|
+
*/
|
|
8
|
+
export class GTMService {
|
|
9
|
+
/**
|
|
10
|
+
* Indica si se esta cargando el servicio.
|
|
11
|
+
*/
|
|
12
|
+
isLoaded = false;
|
|
13
|
+
/**
|
|
14
|
+
* Indica cuando el servicio esta habilitado.
|
|
15
|
+
*/
|
|
16
|
+
enabled = false;
|
|
17
|
+
/**
|
|
18
|
+
* Se encarga de crear el elemento HTML con las configuraciones para
|
|
19
|
+
* que se pueda ejecutar el servicio.
|
|
20
|
+
*/
|
|
21
|
+
renderer;
|
|
22
|
+
/**
|
|
23
|
+
* Almacena el objecto window del navegador.
|
|
24
|
+
*/
|
|
25
|
+
window;
|
|
26
|
+
rendererFactory = inject(RendererFactory2);
|
|
27
|
+
document = null;
|
|
28
|
+
/**
|
|
29
|
+
* Servicio de ruteo de angular.
|
|
30
|
+
*/
|
|
31
|
+
router = inject(Router);
|
|
32
|
+
/**
|
|
33
|
+
* Configuración de Google Tag Manager.
|
|
34
|
+
*/
|
|
35
|
+
config = { id: null };
|
|
36
|
+
platformId = inject(PLATFORM_ID);
|
|
37
|
+
constructor() {
|
|
38
|
+
this.renderer = this.rendererFactory.createRenderer(null, null);
|
|
39
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
40
|
+
this.window = window;
|
|
41
|
+
this.document = inject(DOCUMENT);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Obtiene el dataLayer del objecto window
|
|
46
|
+
* @returns
|
|
47
|
+
*/
|
|
48
|
+
getDataLayer() {
|
|
49
|
+
const window = this.window;
|
|
50
|
+
/* if(window)
|
|
51
|
+
window.dataLayer = window.dataLayer || [];
|
|
52
|
+
return window.dataLayer; */
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Agrega datos al dataLayer.
|
|
57
|
+
* @param obj
|
|
58
|
+
*/
|
|
59
|
+
pushOnDataLayer(obj) {
|
|
60
|
+
const dataLayer = this.getDataLayer();
|
|
61
|
+
dataLayer.push(obj);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Agrega el script de GTM para que empiece a capturar eventos.
|
|
65
|
+
* @returns
|
|
66
|
+
*/
|
|
67
|
+
addGtmToDom() {
|
|
68
|
+
return new Promise((resolve, reject) => {
|
|
69
|
+
if (this.isLoaded) {
|
|
70
|
+
return resolve(this.isLoaded);
|
|
71
|
+
}
|
|
72
|
+
//const doc = this.browserGlobals.documentRef();
|
|
73
|
+
this.pushOnDataLayer({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
|
|
74
|
+
const gtmScript = this.document?.createElement('script'); //doc.createElement('script');
|
|
75
|
+
if (gtmScript) {
|
|
76
|
+
gtmScript.id = 'GTMscript';
|
|
77
|
+
gtmScript.async = true;
|
|
78
|
+
gtmScript.src = this.applyGtmQueryParams(this.config["gtm_resource_path"] ? this.config["gtm_resource_path"] : 'https://www.googletagmanager.com/gtm.js');
|
|
79
|
+
gtmScript.addEventListener('load', () => {
|
|
80
|
+
return resolve(this.isLoaded = true);
|
|
81
|
+
});
|
|
82
|
+
gtmScript.addEventListener('error', () => {
|
|
83
|
+
return reject(false);
|
|
84
|
+
});
|
|
85
|
+
this.document?.head.insertBefore(gtmScript, this.document.head.firstChild);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
applyGtmQueryParams(url) {
|
|
90
|
+
if (url.indexOf('?') === -1) {
|
|
91
|
+
url += '?';
|
|
92
|
+
}
|
|
93
|
+
return (url + Object.keys(this.config).filter((k) => this.config[k]).map((k) => `${k}=${this.config[k]}`).join('&'));
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Inicializa el Servicio de analytics con sus configuraciones.
|
|
97
|
+
* @param config Configuraciones de Google Tag Manager
|
|
98
|
+
*/
|
|
99
|
+
initialize(config) {
|
|
100
|
+
this.config = config || this.config;
|
|
101
|
+
this.addGtmToDom().then(() => {
|
|
102
|
+
this.router.events.forEach(item => {
|
|
103
|
+
if (item instanceof NavigationEnd) {
|
|
104
|
+
const gtmTag = {
|
|
105
|
+
event: 'page',
|
|
106
|
+
pageName: item.url
|
|
107
|
+
};
|
|
108
|
+
this.pushTag(gtmTag);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
pushTag(item) {
|
|
114
|
+
return new Promise((resolve, reject) => {
|
|
115
|
+
if (!this.isLoaded) {
|
|
116
|
+
this.addGtmToDom().then(() => {
|
|
117
|
+
this.pushOnDataLayer(item);
|
|
118
|
+
return resolve();
|
|
119
|
+
}).catch(() => reject());
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.pushOnDataLayer(item);
|
|
123
|
+
return resolve();
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Ejecuta el evento pasado por parametro.
|
|
129
|
+
* @param event_name Nombre del evento.
|
|
130
|
+
* @param data Data extra para agregar al evento.
|
|
131
|
+
* @returns
|
|
132
|
+
*/
|
|
133
|
+
callEvent(event_name, data = {}) {
|
|
134
|
+
if (!this.isLoaded)
|
|
135
|
+
return;
|
|
136
|
+
let event = this.translateEventName(event_name);
|
|
137
|
+
event && this.pushTag({ ecommerce: null });
|
|
138
|
+
event && this.pushTag({ 'event': this.translateEventName(event_name), ecommerce: this.evalEvent(event_name, data) });
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Traduce el evento recibido y devuelve el nombre de la función que lo va a tratar.
|
|
142
|
+
* @param event_name
|
|
143
|
+
* @returns
|
|
144
|
+
*/
|
|
145
|
+
translateEventName(event_name) {
|
|
146
|
+
switch (event_name) {
|
|
147
|
+
case 'view_item': return 'view_item';
|
|
148
|
+
case 'view_item_list': return 'view_item_list';
|
|
149
|
+
case 'checkout_init': return 'begin_checkout';
|
|
150
|
+
case 'shipping_info': return 'add_shipping_info';
|
|
151
|
+
case 'add_payment_info': return 'add_payment_info';
|
|
152
|
+
case 'purchase': return 'purchase';
|
|
153
|
+
case 'add_to_cart': return 'add_to_cart';
|
|
154
|
+
case 'remove_from_cart': return 'remove_from_cart';
|
|
155
|
+
case 'sign_up': return 'sign_up';
|
|
156
|
+
case 'select_promotion': return 'select_promotion';
|
|
157
|
+
case 'select_item': return 'select_item';
|
|
158
|
+
default: return null;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Evalua el evento y devuelve los datos de las funciones relacionadas.
|
|
163
|
+
* @param event_name Nombre del evento
|
|
164
|
+
* @param data Data extra para agregar al evento
|
|
165
|
+
* @returns
|
|
166
|
+
*/
|
|
167
|
+
evalEvent(event_name, data) {
|
|
168
|
+
switch (event_name) {
|
|
169
|
+
case 'view_item': return this.toViewItem(data);
|
|
170
|
+
case 'view_item_list': return this.toViewItemList(data);
|
|
171
|
+
case 'checkout_init': return this.toCheckoutInit(data);
|
|
172
|
+
case 'shipping_info': return this.toShippingInfo(data);
|
|
173
|
+
case 'add_payment_info': return this.toPaymentInfo(data);
|
|
174
|
+
case 'purchase': return this.toPurchase(data);
|
|
175
|
+
case 'add_to_cart': return this.toAddToCart(data);
|
|
176
|
+
case 'remove_from_cart': return this.toRemoveToCart(data);
|
|
177
|
+
case 'sign_up': return this.toSignUp(data);
|
|
178
|
+
case 'select_promotion': return this.toSelectPromotion(data);
|
|
179
|
+
case 'select_item': return this.toSelectItem(data);
|
|
180
|
+
default: return data;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Evento que se dispara cuando se quiere comprar un producto.
|
|
185
|
+
* @param data
|
|
186
|
+
* @returns
|
|
187
|
+
*/
|
|
188
|
+
toPurchase(data) {
|
|
189
|
+
return {
|
|
190
|
+
coupon: this.toCartDiscount(data),
|
|
191
|
+
currency: data.currency,
|
|
192
|
+
shipping: data.totals.shipping,
|
|
193
|
+
tax: data.totals.taxes,
|
|
194
|
+
value: data.totals.total,
|
|
195
|
+
transaction_id: data.number,
|
|
196
|
+
countItems: data.items?.length || 0,
|
|
197
|
+
items: data.items.map((item) => ({
|
|
198
|
+
item_id: item.product.id,
|
|
199
|
+
item_name: item.product.name,
|
|
200
|
+
//coupon:'',
|
|
201
|
+
discount: item.product.discount || 0,
|
|
202
|
+
//index:'',
|
|
203
|
+
item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',
|
|
204
|
+
item_category: item.product.category,
|
|
205
|
+
item_variant: item.product.variants[0]?.code || '',
|
|
206
|
+
//location_id: '',
|
|
207
|
+
price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,
|
|
208
|
+
quantity: item.quantity || 1,
|
|
209
|
+
}))
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Evento que se dispara cuando se inicializa en checkout.
|
|
214
|
+
* @param data
|
|
215
|
+
* @returns
|
|
216
|
+
*/
|
|
217
|
+
toCheckoutInit(data) {
|
|
218
|
+
return {
|
|
219
|
+
coupon: this.toCartDiscount(data),
|
|
220
|
+
currency: data.currency || "USD",
|
|
221
|
+
items: data.items.map((item) => ({
|
|
222
|
+
item_id: item.product.id,
|
|
223
|
+
item_name: item.product.name,
|
|
224
|
+
//coupon:'',
|
|
225
|
+
discount: item.product.discount || 0,
|
|
226
|
+
//index:'',
|
|
227
|
+
item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',
|
|
228
|
+
item_category: item.product.category,
|
|
229
|
+
//item_list_id: '',
|
|
230
|
+
//item_list_name: '',
|
|
231
|
+
item_variant: item.product.variants[0]?.code || '',
|
|
232
|
+
//location_id: '',
|
|
233
|
+
price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,
|
|
234
|
+
quantity: item.quantity || 1,
|
|
235
|
+
})),
|
|
236
|
+
value: data.totals?.total || 0,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Evento que se dispara con los descuentos en el carrito.
|
|
241
|
+
* @param data
|
|
242
|
+
* @returns
|
|
243
|
+
*/
|
|
244
|
+
toCartDiscount(data) {
|
|
245
|
+
let strDiscount = '';
|
|
246
|
+
strDiscount = data.cartDiscounts.map((itemDiscount) => itemDiscount?.type).join();
|
|
247
|
+
return strDiscount == '' ? 'not-discount' : strDiscount;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Evento que se dispara cuando se agrega un producto al carrito.
|
|
251
|
+
* @param data
|
|
252
|
+
* @returns
|
|
253
|
+
*/
|
|
254
|
+
toAddToCart(data) {
|
|
255
|
+
let lastProduct = data.items?.length && data.items[data.items.length - 1];
|
|
256
|
+
return {
|
|
257
|
+
currency: data.currency || "USD",
|
|
258
|
+
items: [this.toItem({ quantity: lastProduct.quantity, ...lastProduct.product })],
|
|
259
|
+
value: lastProduct.total || 0,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Cambia la variable **enabled** a `false`
|
|
264
|
+
* @returns
|
|
265
|
+
*/
|
|
266
|
+
disable() { this.enabled = false; }
|
|
267
|
+
/**
|
|
268
|
+
* Evento que se dispara cuando se interactua a las vista del producto.
|
|
269
|
+
* @param product
|
|
270
|
+
* @returns
|
|
271
|
+
*/
|
|
272
|
+
toViewItem(product) {
|
|
273
|
+
return {
|
|
274
|
+
currency: product.currency,
|
|
275
|
+
value: product.price,
|
|
276
|
+
items: [this.toItem(product)]
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Evento que se dispara cuando se interactua con el listado de productos.
|
|
281
|
+
* @param data
|
|
282
|
+
* @returns
|
|
283
|
+
*/
|
|
284
|
+
toViewItemList(data) {
|
|
285
|
+
return {
|
|
286
|
+
items: data.products.map((product) => this.toItem(product)),
|
|
287
|
+
item_list_name: data.item_list_name || 'Collection',
|
|
288
|
+
item_list_id: data.item_list_id || 0
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Evento que se dispara cuando se quita un item del carrito.
|
|
293
|
+
* @param product
|
|
294
|
+
* @returns
|
|
295
|
+
*/
|
|
296
|
+
toRemoveToCart(product) {
|
|
297
|
+
let productParam = product.product;
|
|
298
|
+
return {
|
|
299
|
+
currency: product.currency || "USD",
|
|
300
|
+
items: [this.toItem({ quantity: product.quantity, ...productParam })],
|
|
301
|
+
value: (productParam.variants[0]?.saleprice || productParam.variants[0]?.price) * product.quantity || 1,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
toItem = (product) => ({
|
|
305
|
+
item_id: product.id,
|
|
306
|
+
item_name: product.name,
|
|
307
|
+
//coupon:'',
|
|
308
|
+
discount: product.discount || 0,
|
|
309
|
+
//index:'',
|
|
310
|
+
item_brand: product.attributes?.length ? product.attributes[0].name : '',
|
|
311
|
+
item_category: product.category,
|
|
312
|
+
//item_list_id: '',
|
|
313
|
+
//item_list_name: '',
|
|
314
|
+
item_variant: product.variants[0]?.code || '',
|
|
315
|
+
//location_id: '',
|
|
316
|
+
price: product.variants[0]?.saleprice || product.variants[0]?.price,
|
|
317
|
+
quantity: product.quantity || 1,
|
|
318
|
+
});
|
|
319
|
+
/**
|
|
320
|
+
* Evento que se dispara cuando se consulta la información de pago.
|
|
321
|
+
* @param data
|
|
322
|
+
* @returns
|
|
323
|
+
*/
|
|
324
|
+
toPaymentInfo(data) {
|
|
325
|
+
return {
|
|
326
|
+
coupon: this.toCartDiscount(data),
|
|
327
|
+
currency: data.currency || "USD",
|
|
328
|
+
payment_type: data.payments[0]?.method?.code || 'not-payments',
|
|
329
|
+
value: data.totals?.total || 0,
|
|
330
|
+
items: data.items.map((item) => ({
|
|
331
|
+
item_id: item.product.id,
|
|
332
|
+
item_name: item.product.name,
|
|
333
|
+
//coupon:'',
|
|
334
|
+
discount: item.product.discount || 0,
|
|
335
|
+
//index:'',
|
|
336
|
+
item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',
|
|
337
|
+
item_category: item.product.category,
|
|
338
|
+
//item_list_id: '',
|
|
339
|
+
//item_list_name: '',
|
|
340
|
+
item_variant: item.product.variants[0]?.code || '',
|
|
341
|
+
//location_id: '',
|
|
342
|
+
price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,
|
|
343
|
+
quantity: item.quantity || 1,
|
|
344
|
+
})),
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Evento que se dispara cuando se interactua con los métodos de envío.
|
|
349
|
+
* @param data
|
|
350
|
+
* @returns
|
|
351
|
+
*/
|
|
352
|
+
toShippingInfo(data) {
|
|
353
|
+
return {
|
|
354
|
+
coupon: this.toCartDiscount(data),
|
|
355
|
+
currency: data.currency || "USD",
|
|
356
|
+
shipping_tier: data.shipments[0]?.method?.code || 'not-shipping',
|
|
357
|
+
value: data.totals?.total || 0,
|
|
358
|
+
items: data.items.map((item) => ({
|
|
359
|
+
item_id: item.product.id,
|
|
360
|
+
item_name: item.product.name,
|
|
361
|
+
//coupon:'',
|
|
362
|
+
discount: item.product.discount || 0,
|
|
363
|
+
//index:'',
|
|
364
|
+
item_brand: item.product.attributes?.length ? item.product.attributes[0].name : '',
|
|
365
|
+
item_category: item.product.category,
|
|
366
|
+
//item_list_id: '',
|
|
367
|
+
//item_list_name: '',
|
|
368
|
+
item_variant: item.product.variants[0]?.code || '',
|
|
369
|
+
//location_id: '',
|
|
370
|
+
price: item.product.variants[0]?.saleprice || item.product.variants[0]?.price,
|
|
371
|
+
quantity: item.quantity || 1,
|
|
372
|
+
})),
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
toSignUp(data) {
|
|
376
|
+
return {
|
|
377
|
+
...data
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Evento que se dispara cuando se interactua con una promoción.
|
|
382
|
+
* @param data
|
|
383
|
+
* @returns
|
|
384
|
+
*/
|
|
385
|
+
toSelectPromotion(data) {
|
|
386
|
+
console.log(data);
|
|
387
|
+
return {
|
|
388
|
+
promotion_id: data.id || '',
|
|
389
|
+
promotion_name: data.code || data.name,
|
|
390
|
+
promotion_title: data.subtitle,
|
|
391
|
+
location_id: data.priority || 0
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Evento que se disapra cuando se interactua al seleccionar un item.
|
|
396
|
+
* @param data
|
|
397
|
+
* @returns
|
|
398
|
+
*/
|
|
399
|
+
toSelectItem(data) {
|
|
400
|
+
console.log(data);
|
|
401
|
+
return {
|
|
402
|
+
items: this.toItem(data)
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GTMService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
406
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GTMService, providedIn: 'root' });
|
|
407
|
+
}
|
|
408
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: GTMService, decorators: [{
|
|
409
|
+
type: Injectable,
|
|
410
|
+
args: [{
|
|
411
|
+
providedIn: 'root'
|
|
412
|
+
}]
|
|
413
|
+
}], ctorParameters: () => [] });
|
|
414
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3RtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtc2VydmljZXMvYW5hbHl0aWNzL2d0bS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFDOUQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8sVUFBVTtJQUNuQjs7T0FFRztJQUNLLFFBQVEsR0FBWSxLQUFLLENBQUM7SUFDbEM7O09BRUc7SUFDSyxPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ2pDOzs7T0FHRztJQUNLLFFBQVEsQ0FBWTtJQUM1Qjs7T0FFRztJQUNLLE1BQU0sQ0FBVTtJQUVoQixlQUFlLEdBQXFCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdELFFBQVEsR0FBb0IsSUFBSSxDQUFDO0lBQ3pDOztPQUVHO0lBQ0ssTUFBTSxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4Qzs7T0FFRztJQUNLLE1BQU0sR0FBMkIsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDN0MsVUFBVSxHQUFRLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUM3QztRQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFD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O0lBQ0Q7Ozs7T0FJRztJQUNLLFlBQVksQ0FBQyxJQUFTO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsT0FBTztZQUNILEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztTQUMzQixDQUFBO0lBQ0wsQ0FBQzt1R0F0WlEsVUFBVTsyR0FBVixVQUFVLGNBRlAsTUFBTTs7MkZBRVQsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhZnRlclJlbmRlciwgaW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRCwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmFseXRpY0V2ZW50S2V5LCBHb29nbGVUYWdNYW5hZ2VyQ29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbi8qKlxuICogU2VydmljaW8gcXVlIHNlIGVuY2FyZ2EgZGUgbWFuZWphciBlbCBhbmFseXRpY3MgZGUgR1RNLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEdUTVNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIEluZGljYSBzaSBzZSBlc3RhIGNhcmdhbmRvIGVsIHNlcnZpY2lvLlxuICAgICAqL1xuICAgIHByaXZhdGUgaXNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBJbmRpY2EgY3VhbmRvIGVsIHNlcnZpY2lvIGVzdGEgaGFiaWxpdGFkby5cbiAgICAgKi9cbiAgICBwcml2YXRlIGVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBTZSBlbmNhcmdhIGRlIGNyZWFyIGVsIGVsZW1lbnRvIEhUTUwgY29uIGxhcyBjb25maWd1cmFjaW9uZXMgcGFyYSBcbiAgICAgKiBxdWUgc2UgcHVlZGEgZWplY3V0YXIgZWwgc2VydmljaW8uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuICAgIC8qKlxuICAgICAqIEFsbWFjZW5hIGVsIG9iamVjdG8gd2luZG93IGRlbCBuYXZlZ2Fkb3IuXG4gICAgICovXG4gICAgcHJpdmF0ZSB3aW5kb3c/OiBXaW5kb3c7XG5cbiAgICBwcml2YXRlIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5MiA9IGluamVjdChSZW5kZXJlckZhY3RvcnkyKTtcbiAgICBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCB8IG51bGwgPSBudWxsO1xuICAgIC8qKlxuICAgICAqIFNlcnZpY2lvIGRlIHJ1dGVvIGRlIGFuZ3VsYXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyYWNpw7NuIGRlIEdvb2dsZSBUYWcgTWFuYWdlci5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbmZpZzogR29vZ2xlVGFnTWFuYWdlckNvbmZpZyA9IHsgaWQ6IG51bGwgfVxuICAgIHByaXZhdGUgcGxhdGZvcm1JZDogYW55ID0gaW5qZWN0KFBMQVRGT1JNX0lEKVxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gdGhpcy5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICB0aGlzLndpbmRvdyA9IHdpbmRvd1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogT2J0aWVuZSBlbCBkYXRhTGF5ZXIgZGVsIG9iamVjdG8gd2luZG93XG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHVibGljIGdldERhdGFMYXllcigpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IHRoaXMud2luZG93O1xuICAgICAgICAvKiBpZih3aW5kb3cpXG4gICAgICAgIHdpbmRvdy5kYXRhTGF5ZXIgPSB3aW5kb3cuZGF0YUxheWVyIHx8IFtdO1xuICAgICAgICByZXR1cm4gd2luZG93LmRhdGFMYXllcjsgKi9cbiAgICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFncmVnYSBkYXRvcyBhbCBkYXRhTGF5ZXIuXG4gICAgICogQHBhcmFtIG9iaiBcbiAgICAgKi9cbiAgICBwcml2YXRlIHB1c2hPbkRhdGFMYXllcihvYmo6IG9iamVjdCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhTGF5ZXIgPSB0aGlzLmdldERhdGFMYXllcigpO1xuICAgICAgICBkYXRhTGF5ZXIucHVzaChvYmopO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZ3JlZ2EgZWwgc2NyaXB0IGRlIEdUTSBwYXJhIHF1ZSBlbXBpZWNlIGEgY2FwdHVyYXIgZXZlbnRvcy5cbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkR3RtVG9Eb20oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShcbiAgICAgICAgICAgIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmlzTG9hZGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy9jb25zdCBkb2MgPSB0aGlzLmJyb3dzZXJHbG9iYWxzLmRvY3VtZW50UmVmKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoT25EYXRhTGF5ZXIoeyAnZ3RtLnN0YXJ0JzogbmV3IERhdGUoKS5nZXRUaW1lKCksIGV2ZW50OiAnZ3RtLmpzJyB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGd0bVNjcmlwdCA9IHRoaXMuZG9jdW1lbnQ/LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpIC8vZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgICAgIGlmKGd0bVNjcmlwdCl7XG4gICAgICAgICAgICAgICAgICAgIGd0bVNjcmlwdC5pZCA9ICdHVE1zY3JpcHQnO1xuICAgICAgICAgICAgICAgICAgICBndG1TY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBndG1TY3JpcHQuc3JjID0gdGhpcy5hcHBseUd0bVF1ZXJ5UGFyYW1zKHRoaXMuY29uZmlnW1wiZ3RtX3Jlc291cmNlX3BhdGhcIl0gPyB0aGlzLmNvbmZpZ1tcImd0bV9yZXNvdXJjZV9wYXRoXCJdIDogJ2h0dHBzOi8vd3d3Lmdvb2dsZXRhZ21hbmFnZXIuY29tL2d0bS5qcycpO1xuICAgICAgICAgICAgICAgICAgICBndG1TY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuaXNMb2FkZWQgPSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGd0bVNjcmlwdC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudD8uaGVhZC5pbnNlcnRCZWZvcmUoZ3RtU2NyaXB0LCB0aGlzLmRvY3VtZW50LmhlYWQuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlHdG1RdWVyeVBhcmFtcyh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpID09PSAtMSkge1xuICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHVybCArIE9iamVjdC5rZXlzKHRoaXMuY29uZmlnKS5maWx0ZXIoKGspID0+IHRoaXMuY29uZmlnW2tdKS5tYXAoKGspID0+IGAke2t9PSR7dGhpcy5jb25maWdba11cbiAgICAgICAgICAgIH1gKS5qb2luKCcmJykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmljaWFsaXphIGVsIFNlcnZpY2lvIGRlIGFuYWx5dGljcyBjb24gc3VzIGNvbmZpZ3VyYWNpb25lcy5cbiAgICAgKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYWNpb25lcyBkZSBHb29nbGUgVGFnIE1hbmFnZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdGlhbGl6ZShjb25maWc6IEdvb2dsZVRhZ01hbmFnZXJDb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWcgfHwgdGhpcy5jb25maWc7XG4gICAgICAgIHRoaXMuYWRkR3RtVG9Eb20oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBndG1UYWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ3BhZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU5hbWU6IGl0ZW0udXJsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaFRhZyhndG1UYWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHB1YmxpYyBwdXNoVGFnKGl0ZW06IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRHdG1Ub0RvbSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hPbkRhdGFMYXllcihpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiByZWplY3QoKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaE9uRGF0YUxheWVyKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFamVjdXRhIGVsIGV2ZW50byBwYXNhZG8gcG9yIHBhcmFtZXRyby4gXG4gICAgICogQHBhcmFtIGV2ZW50X25hbWUgTm9tYnJlIGRlbCBldmVudG8uXG4gICAgICogQHBhcmFtIGRhdGEgRGF0YSBleHRyYSBwYXJhIGFncmVnYXIgYWwgZXZlbnRvLlxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGNhbGxFdmVudChldmVudF9uYW1lOiBBbmFseXRpY0V2ZW50S2V5LCBkYXRhID0ge30pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGVkKSByZXR1cm47XG4gICAgICAgIGxldCBldmVudCA9IHRoaXMudHJhbnNsYXRlRXZlbnROYW1lKGV2ZW50X25hbWUpO1xuICAgICAgICBldmVudCAmJiB0aGlzLnB1c2hUYWcoeyBlY29tbWVyY2U6IG51bGwgfSlcbiAgICAgICAgZXZlbnQgJiYgdGhpcy5wdXNoVGFnKHsgJ2V2ZW50JzogdGhpcy50cmFuc2xhdGVFdmVudE5hbWUoZXZlbnRfbmFtZSksIGVjb21tZXJjZTogdGhpcy5ldmFsRXZlbnQoZXZlbnRfbmFtZSwgZGF0YSkgfSlcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJhZHVjZSBlbCBldmVudG8gcmVjaWJpZG8geSBkZXZ1ZWx2ZSBlbCBub21icmUgZGUgbGEgZnVuY2nDs24gcXVlIGxvIHZhIGEgdHJhdGFyLlxuICAgICAqIEBwYXJhbSBldmVudF9uYW1lIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHRyYW5zbGF0ZUV2ZW50TmFtZShldmVudF9uYW1lOiBBbmFseXRpY0V2ZW50S2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnRfbmFtZSkge1xuICAgICAgICAgICAgY2FzZSAndmlld19pdGVtJzogcmV0dXJuICd2aWV3X2l0ZW0nO1xuICAgICAgICAgICAgY2FzZSAndmlld19pdGVtX2xpc3QnOiByZXR1cm4gJ3ZpZXdfaXRlbV9saXN0JztcbiAgICAgICAgICAgIGNhc2UgJ2NoZWNrb3V0X2luaXQnOiByZXR1cm4gJ2JlZ2luX2NoZWNrb3V0JztcbiAgICAgICAgICAgIGNhc2UgJ3NoaXBwaW5nX2luZm8nOiByZXR1cm4gJ2FkZF9zaGlwcGluZ19pbmZvJztcbiAgICAgICAgICAgIGNhc2UgJ2FkZF9wYXltZW50X2luZm8nOiByZXR1cm4gJ2FkZF9wYXltZW50X2luZm8nO1xuICAgICAgICAgICAgY2FzZSAncHVyY2hhc2UnOiByZXR1cm4gJ3B1cmNoYXNlJztcbiAgICAgICAgICAgIGNhc2UgJ2FkZF90b19jYXJ0JzogcmV0dXJuICdhZGRfdG9fY2FydCc7XG4gICAgICAgICAgICBjYXNlICdyZW1vdmVfZnJvbV9jYXJ0JzogcmV0dXJuICdyZW1vdmVfZnJvbV9jYXJ0JztcbiAgICAgICAgICAgIGNhc2UgJ3NpZ25fdXAnOiByZXR1cm4gJ3NpZ25fdXAnO1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0X3Byb21vdGlvbic6IHJldHVybiAnc2VsZWN0X3Byb21vdGlvbic7XG4gICAgICAgICAgICBjYXNlICdzZWxlY3RfaXRlbSc6IHJldHVybiAnc2VsZWN0X2l0ZW0nO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZhbHVhIGVsIGV2ZW50byB5IGRldnVlbHZlIGxvcyBkYXRvcyBkZSBsYXMgZnVuY2lvbmVzIHJlbGFjaW9uYWRhcy5cbiAgICAgKiBAcGFyYW0gZXZlbnRfbmFtZSBOb21icmUgZGVsIGV2ZW50b1xuICAgICAqIEBwYXJhbSBkYXRhIERhdGEgZXh0cmEgcGFyYSBhZ3JlZ2FyIGFsIGV2ZW50b1xuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGV2YWxFdmVudChldmVudF9uYW1lOiBBbmFseXRpY0V2ZW50S2V5LCBkYXRhOiBhbnkpIHtcbiAgICAgICAgc3dpdGNoIChldmVudF9uYW1lKSB7XG4gICAgICAgICAgICBjYXNlICd2aWV3X2l0ZW0nOiByZXR1cm4gdGhpcy50b1ZpZXdJdGVtKGRhdGEpO1xuICAgICAgICAgICAgY2FzZSAndmlld19pdGVtX2xpc3QnOiByZXR1cm4gdGhpcy50b1ZpZXdJdGVtTGlzdChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ2NoZWNrb3V0X2luaXQnOiByZXR1cm4gdGhpcy50b0NoZWNrb3V0SW5pdChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3NoaXBwaW5nX2luZm8nOiByZXR1cm4gdGhpcy50b1NoaXBwaW5nSW5mbyhkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ2FkZF9wYXltZW50X2luZm8nOiByZXR1cm4gdGhpcy50b1BheW1lbnRJbmZvKGRhdGEpO1xuICAgICAgICAgICAgY2FzZSAncHVyY2hhc2UnOiByZXR1cm4gdGhpcy50b1B1cmNoYXNlKGRhdGEpO1xuICAgICAgICAgICAgY2FzZSAnYWRkX3RvX2NhcnQnOiByZXR1cm4gdGhpcy50b0FkZFRvQ2FydChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3JlbW92ZV9mcm9tX2NhcnQnOiByZXR1cm4gdGhpcy50b1JlbW92ZVRvQ2FydChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3NpZ25fdXAnOiByZXR1cm4gdGhpcy50b1NpZ25VcChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdF9wcm9tb3Rpb24nOiByZXR1cm4gdGhpcy50b1NlbGVjdFByb21vdGlvbihkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgJ3NlbGVjdF9pdGVtJzogcmV0dXJuIHRoaXMudG9TZWxlY3RJdGVtKGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBxdWllcmUgY29tcHJhciB1biBwcm9kdWN0by5cbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvUHVyY2hhc2UoZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3Vwb246IHRoaXMudG9DYXJ0RGlzY291bnQoZGF0YSksXG4gICAgICAgICAgICBjdXJyZW5jeTogZGF0YS5jdXJyZW5jeSxcbiAgICAgICAgICAgIHNoaXBwaW5nOiBkYXRhLnRvdGFscy5zaGlwcGluZyxcbiAgICAgICAgICAgIHRheDogZGF0YS50b3RhbHMudGF4ZXMsXG4gICAgICAgICAgICB2YWx1ZTogZGF0YS50b3RhbHMudG90YWwsXG4gICAgICAgICAgICB0cmFuc2FjdGlvbl9pZDogZGF0YS5udW1iZXIsXG4gICAgICAgICAgICBjb3VudEl0ZW1zOiBkYXRhLml0ZW1zPy5sZW5ndGggfHwgMCxcbiAgICAgICAgICAgIGl0ZW1zOiBkYXRhLml0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGl0ZW0ucHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICBpdGVtX25hbWU6IGl0ZW0ucHJvZHVjdC5uYW1lLFxuICAgICAgICAgICAgICAgIC8vY291cG9uOicnLFxuICAgICAgICAgICAgICAgIGRpc2NvdW50OiBpdGVtLnByb2R1Y3QuZGlzY291bnQgfHwgMCxcbiAgICAgICAgICAgICAgICAvL2luZGV4OicnLFxuICAgICAgICAgICAgICAgIGl0ZW1fYnJhbmQ6IGl0ZW0ucHJvZHVjdC5hdHRyaWJ1dGVzPy5sZW5ndGggPyBpdGVtLnByb2R1Y3QuYXR0cmlidXRlc1swXS5uYW1lIDogJycsXG4gICAgICAgICAgICAgICAgaXRlbV9jYXRlZ29yeTogaXRlbS5wcm9kdWN0LmNhdGVnb3J5LFxuICAgICAgICAgICAgICAgIGl0ZW1fdmFyaWFudDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5jb2RlIHx8ICcnLFxuICAgICAgICAgICAgICAgIC8vbG9jYXRpb25faWQ6ICcnLFxuICAgICAgICAgICAgICAgIHByaWNlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnNhbGVwcmljZSB8fCBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LnByaWNlLFxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5IHx8IDEsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGluaWNpYWxpemEgZW4gY2hlY2tvdXQuXG4gICAgICogQHBhcmFtIGRhdGEgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b0NoZWNrb3V0SW5pdChkYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdXBvbjogdGhpcy50b0NhcnREaXNjb3VudChkYXRhKSxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBkYXRhLmN1cnJlbmN5IHx8IFwiVVNEXCIsXG4gICAgICAgICAgICBpdGVtczogZGF0YS5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpdGVtX2lkOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgaXRlbV9uYW1lOiBpdGVtLnByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgICAgICAvL2NvdXBvbjonJyxcbiAgICAgICAgICAgICAgICBkaXNjb3VudDogaXRlbS5wcm9kdWN0LmRpc2NvdW50IHx8IDAsXG4gICAgICAgICAgICAgICAgLy9pbmRleDonJyxcbiAgICAgICAgICAgICAgICBpdGVtX2JyYW5kOiBpdGVtLnByb2R1Y3QuYXR0cmlidXRlcz8ubGVuZ3RoID8gaXRlbS5wcm9kdWN0LmF0dHJpYnV0ZXNbMF0ubmFtZSA6ICcnLFxuICAgICAgICAgICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0ucHJvZHVjdC5jYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAvL2l0ZW1fbGlzdF9pZDogJycsXG4gICAgICAgICAgICAgICAgLy9pdGVtX2xpc3RfbmFtZTogJycsXG4gICAgICAgICAgICAgICAgaXRlbV92YXJpYW50OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LmNvZGUgfHwgJycsXG4gICAgICAgICAgICAgICAgLy9sb2NhdGlvbl9pZDogJycsXG4gICAgICAgICAgICAgICAgcHJpY2U6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uc2FsZXByaWNlIHx8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ucHJpY2UsXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHkgfHwgMSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhLnRvdGFscz8udG90YWwgfHwgMCxcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY29uIGxvcyBkZXNjdWVudG9zIGVuIGVsIGNhcnJpdG8uXG4gICAgICogQHBhcmFtIGRhdGEgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b0NhcnREaXNjb3VudChkYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IHN0ckRpc2NvdW50ID0gJydcbiAgICAgICAgc3RyRGlzY291bnQgPSBkYXRhLmNhcnREaXNjb3VudHMubWFwKChpdGVtRGlzY291bnQ6IGFueSkgPT4gaXRlbURpc2NvdW50Py50eXBlKS5qb2luKClcbiAgICAgICAgcmV0dXJuIHN0ckRpc2NvdW50ID09ICcnID8gJ25vdC1kaXNjb3VudCcgOiBzdHJEaXNjb3VudFxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGFncmVnYSB1biBwcm9kdWN0byBhbCBjYXJyaXRvLiBcbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvQWRkVG9DYXJ0KGRhdGE6IGFueSkge1xuICAgICAgICBsZXQgbGFzdFByb2R1Y3QgPSBkYXRhLml0ZW1zPy5sZW5ndGggJiYgZGF0YS5pdGVtc1tkYXRhLml0ZW1zLmxlbmd0aCAtIDFdXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJyZW5jeTogZGF0YS5jdXJyZW5jeSB8fCBcIlVTRFwiLFxuICAgICAgICAgICAgaXRlbXM6IFt0aGlzLnRvSXRlbSh7IHF1YW50aXR5OiBsYXN0UHJvZHVjdC5xdWFudGl0eSwgLi4ubGFzdFByb2R1Y3QucHJvZHVjdCB9KV0sXG4gICAgICAgICAgICB2YWx1ZTogbGFzdFByb2R1Y3QudG90YWwgfHwgMCxcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYW1iaWEgbGEgdmFyaWFibGUgKiplbmFibGVkKiogYSBgZmFsc2VgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgZGlzYWJsZSgpIHsgdGhpcy5lbmFibGVkID0gZmFsc2UgfVxuICAgIC8qKlxuICAgICAqIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgaW50ZXJhY3R1YSBhIGxhcyB2aXN0YSBkZWwgcHJvZHVjdG8uXG4gICAgICogQHBhcmFtIHByb2R1Y3QgXG4gICAgICogQHJldHVybnMgXG4gICAgICovXG4gICAgcHJpdmF0ZSB0b1ZpZXdJdGVtKHByb2R1Y3Q6IGFueSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VycmVuY3k6IHByb2R1Y3QuY3VycmVuY3ksXG4gICAgICAgICAgICB2YWx1ZTogcHJvZHVjdC5wcmljZSxcbiAgICAgICAgICAgIGl0ZW1zOiBbdGhpcy50b0l0ZW0ocHJvZHVjdCldXG5cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGludGVyYWN0dWEgY29uIGVsIGxpc3RhZG8gZGUgcHJvZHVjdG9zLlxuICAgICAqIEBwYXJhbSBkYXRhIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9WaWV3SXRlbUxpc3QoZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtczogZGF0YS5wcm9kdWN0cy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gdGhpcy50b0l0ZW0ocHJvZHVjdCkpLFxuICAgICAgICAgICAgaXRlbV9saXN0X25hbWU6IGRhdGEuaXRlbV9saXN0X25hbWUgfHwgJ0NvbGxlY3Rpb24nLFxuICAgICAgICAgICAgaXRlbV9saXN0X2lkOiBkYXRhLml0ZW1fbGlzdF9pZCB8fCAwXG4gICAgICAgIH1cblxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgcXVpdGEgdW4gaXRlbSBkZWwgY2Fycml0by5cbiAgICAgKiBAcGFyYW0gcHJvZHVjdCBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvUmVtb3ZlVG9DYXJ0KHByb2R1Y3Q6IGFueSkge1xuICAgICAgICBsZXQgcHJvZHVjdFBhcmFtID0gcHJvZHVjdC5wcm9kdWN0XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJyZW5jeTogcHJvZHVjdC5jdXJyZW5jeSB8fCBcIlVTRFwiLFxuICAgICAgICAgICAgaXRlbXM6IFt0aGlzLnRvSXRlbSh7IHF1YW50aXR5OiBwcm9kdWN0LnF1YW50aXR5LCAuLi5wcm9kdWN0UGFyYW0gfSldLFxuICAgICAgICAgICAgdmFsdWU6IChwcm9kdWN0UGFyYW0udmFyaWFudHNbMF0/LnNhbGVwcmljZSB8fCBwcm9kdWN0UGFyYW0udmFyaWFudHNbMF0/LnByaWNlKSAqIHByb2R1Y3QucXVhbnRpdHkgfHwgMSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9JdGVtID0gKHByb2R1Y3Q6IGFueSkgPT4gKHtcbiAgICAgICAgaXRlbV9pZDogcHJvZHVjdC5pZCxcbiAgICAgICAgaXRlbV9uYW1lOiBwcm9kdWN0Lm5hbWUsXG4gICAgICAgIC8vY291cG9uOicnLFxuICAgICAgICBkaXNjb3VudDogcHJvZHVjdC5kaXNjb3VudCB8fCAwLFxuICAgICAgICAvL2luZGV4OicnLFxuICAgICAgICBpdGVtX2JyYW5kOiBwcm9kdWN0LmF0dHJpYnV0ZXM/Lmxlbmd0aCA/IHByb2R1Y3QuYXR0cmlidXRlc1swXS5uYW1lIDogJycsXG4gICAgICAgIGl0ZW1fY2F0ZWdvcnk6IHByb2R1Y3QuY2F0ZWdvcnksXG4gICAgICAgIC8vaXRlbV9saXN0X2lkOiAnJyxcbiAgICAgICAgLy9pdGVtX2xpc3RfbmFtZTogJycsXG4gICAgICAgIGl0ZW1fdmFyaWFudDogcHJvZHVjdC52YXJpYW50c1swXT8uY29kZSB8fCAnJyxcbiAgICAgICAgLy9sb2NhdGlvbl9pZDogJycsXG4gICAgICAgIHByaWNlOiBwcm9kdWN0LnZhcmlhbnRzWzBdPy5zYWxlcHJpY2UgfHwgcHJvZHVjdC52YXJpYW50c1swXT8ucHJpY2UsXG4gICAgICAgIHF1YW50aXR5OiBwcm9kdWN0LnF1YW50aXR5IHx8IDEsXG4gICAgfSlcbiAgICAvKipcbiAgICAgKiBFdmVudG8gcXVlIHNlIGRpc3BhcmEgY3VhbmRvIHNlIGNvbnN1bHRhIGxhIGluZm9ybWFjacOzbiBkZSBwYWdvLlxuICAgICAqIEBwYXJhbSBkYXRhIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9QYXltZW50SW5mbyhkYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdXBvbjogdGhpcy50b0NhcnREaXNjb3VudChkYXRhKSxcbiAgICAgICAgICAgIGN1cnJlbmN5OiBkYXRhLmN1cnJlbmN5IHx8IFwiVVNEXCIsXG4gICAgICAgICAgICBwYXltZW50X3R5cGU6IGRhdGEucGF5bWVudHNbMF0/Lm1ldGhvZD8uY29kZSB8fCAnbm90LXBheW1lbnRzJyxcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhLnRvdGFscz8udG90YWwgfHwgMCxcbiAgICAgICAgICAgIGl0ZW1zOiBkYXRhLml0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGl0ZW0ucHJvZHVjdC5pZCxcbiAgICAgICAgICAgICAgICBpdGVtX25hbWU6IGl0ZW0ucHJvZHVjdC5uYW1lLFxuICAgICAgICAgICAgICAgIC8vY291cG9uOicnLFxuICAgICAgICAgICAgICAgIGRpc2NvdW50OiBpdGVtLnByb2R1Y3QuZGlzY291bnQgfHwgMCxcbiAgICAgICAgICAgICAgICAvL2luZGV4OicnLFxuICAgICAgICAgICAgICAgIGl0ZW1fYnJhbmQ6IGl0ZW0ucHJvZHVjdC5hdHRyaWJ1dGVzPy5sZW5ndGggPyBpdGVtLnByb2R1Y3QuYXR0cmlidXRlc1swXS5uYW1lIDogJycsXG4gICAgICAgICAgICAgICAgaXRlbV9jYXRlZ29yeTogaXRlbS5wcm9kdWN0LmNhdGVnb3J5LFxuICAgICAgICAgICAgICAgIC8vaXRlbV9saXN0X2lkOiAnJyxcbiAgICAgICAgICAgICAgICAvL2l0ZW1fbGlzdF9uYW1lOiAnJyxcbiAgICAgICAgICAgICAgICBpdGVtX3ZhcmlhbnQ6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uY29kZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAvL2xvY2F0aW9uX2lkOiAnJyxcbiAgICAgICAgICAgICAgICBwcmljZTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5zYWxlcHJpY2UgfHwgaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdPy5wcmljZSxcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSB8fCAxLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2ZW50byBxdWUgc2UgZGlzcGFyYSBjdWFuZG8gc2UgaW50ZXJhY3R1YSBjb24gbG9zIG3DqXRvZG9zIGRlIGVudsOtby5cbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvU2hpcHBpbmdJbmZvKGRhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY291cG9uOiB0aGlzLnRvQ2FydERpc2NvdW50KGRhdGEpLFxuICAgICAgICAgICAgY3VycmVuY3k6IGRhdGEuY3VycmVuY3kgfHwgXCJVU0RcIixcbiAgICAgICAgICAgIHNoaXBwaW5nX3RpZXI6IGRhdGEuc2hpcG1lbnRzWzBdPy5tZXRob2Q/LmNvZGUgfHwgJ25vdC1zaGlwcGluZycsXG4gICAgICAgICAgICB2YWx1ZTogZGF0YS50b3RhbHM/LnRvdGFsIHx8IDAsXG4gICAgICAgICAgICBpdGVtczogZGF0YS5pdGVtcy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICBpdGVtX2lkOiBpdGVtLnByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgaXRlbV9uYW1lOiBpdGVtLnByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgICAgICAvL2NvdXBvbjonJyxcbiAgICAgICAgICAgICAgICBkaXNjb3VudDogaXRlbS5wcm9kdWN0LmRpc2NvdW50IHx8IDAsXG4gICAgICAgICAgICAgICAgLy9pbmRleDonJyxcbiAgICAgICAgICAgICAgICBpdGVtX2JyYW5kOiBpdGVtLnByb2R1Y3QuYXR0cmlidXRlcz8ubGVuZ3RoID8gaXRlbS5wcm9kdWN0LmF0dHJpYnV0ZXNbMF0ubmFtZSA6ICcnLFxuICAgICAgICAgICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0ucHJvZHVjdC5jYXRlZ29yeSxcbiAgICAgICAgICAgICAgICAvL2l0ZW1fbGlzdF9pZDogJycsXG4gICAgICAgICAgICAgICAgLy9pdGVtX2xpc3RfbmFtZTogJycsXG4gICAgICAgICAgICAgICAgaXRlbV92YXJpYW50OiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0/LmNvZGUgfHwgJycsXG4gICAgICAgICAgICAgICAgLy9sb2NhdGlvbl9pZDogJycsXG4gICAgICAgICAgICAgICAgcHJpY2U6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8uc2FsZXByaWNlIHx8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXT8ucHJpY2UsXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHkgfHwgMSxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9TaWduVXAoZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5kYXRhXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXZlbnRvIHF1ZSBzZSBkaXNwYXJhIGN1YW5kbyBzZSBpbnRlcmFjdHVhIGNvbiB1bmEgcHJvbW9jacOzbi5cbiAgICAgKiBAcGFyYW0gZGF0YSBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvU2VsZWN0UHJvbW90aW9uKGRhdGE6IGFueSkge1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByb21vdGlvbl9pZDogZGF0YS5pZCB8fCAnJyxcbiAgICAgICAgICAgIHByb21vdGlvbl9uYW1lOiBkYXRhLmNvZGUgfHwgZGF0YS5uYW1lLFxuICAgICAgICAgICAgcHJvbW90aW9uX3RpdGxlOiBkYXRhLnN1YnRpdGxlLFxuICAgICAgICAgICAgbG9jYXRpb25faWQ6IGRhdGEucHJpb3JpdHkgfHwgMFxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2ZW50byBxdWUgc2UgZGlzYXByYSBjdWFuZG8gc2UgaW50ZXJhY3R1YSBhbCBzZWxlY2Npb25hciB1biBpdGVtLlxuICAgICAqIEBwYXJhbSBkYXRhIFxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIHByaXZhdGUgdG9TZWxlY3RJdGVtKGRhdGE6IGFueSkge1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZW1zOiB0aGlzLnRvSXRlbShkYXRhKVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './facebook-pixel.service';
|
|
2
|
+
export * from './analytics.service';
|
|
3
|
+
export * from './doppler.service';
|
|
4
|
+
export * from './metricool-pixel.service';
|
|
5
|
+
export * from './google-analytics.service';
|
|
6
|
+
export * from './gtm.service';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtc2VydmljZXMvYW5hbHl0aWNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZmFjZWJvb2stcGl4ZWwuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2FuYWx5dGljcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZG9wcGxlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbWV0cmljb29sLXBpeGVsLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9nb29nbGUtYW5hbHl0aWNzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ndG0uc2VydmljZSc7Il19
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import { inject, Injectable, PLATFORM_ID, RendererFactory2 } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Servicio encargado de manejar el analytics de Metricool Pixel
|
|
6
|
+
*/
|
|
7
|
+
export class MetricoolPixelService {
|
|
8
|
+
/**
|
|
9
|
+
* Indica si se esta cargando el Servicio.
|
|
10
|
+
*/
|
|
11
|
+
isLoaded = false;
|
|
12
|
+
rendererFactory = inject(RendererFactory2);
|
|
13
|
+
document = inject(DOCUMENT);
|
|
14
|
+
platformId = inject(PLATFORM_ID);
|
|
15
|
+
/**
|
|
16
|
+
* Se encarga de crear el elemento HTML con las configuraciones para
|
|
17
|
+
* que se pueda ejecutar el servicio.
|
|
18
|
+
*/
|
|
19
|
+
renderer;
|
|
20
|
+
constructor() {
|
|
21
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
22
|
+
this.document = document;
|
|
23
|
+
}
|
|
24
|
+
this.renderer = this.rendererFactory.createRenderer(null, null);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Inicializa el Servicio de analytics con sus configuraciones.
|
|
28
|
+
* @param pixel_hash hash provisto por Metricool Pixel.
|
|
29
|
+
*/
|
|
30
|
+
initialize = (pixel_hash) => {
|
|
31
|
+
let new_analityc_script = this.renderer.createElement('script');
|
|
32
|
+
new_analityc_script.type = 'text/javascript';
|
|
33
|
+
new_analityc_script.text = `
|
|
34
|
+
function loadScript(a) {
|
|
35
|
+
var b = document.getElementsByTagName("head")[0], c = document.createElement("script");
|
|
36
|
+
c.type = "text/javascript",
|
|
37
|
+
c.src = "https://tracker.metricool.com/resources/be.js",
|
|
38
|
+
c.onreadystatechange = a,
|
|
39
|
+
c.onload = a, b.appendChild(c)
|
|
40
|
+
} loadScript(function () {
|
|
41
|
+
beTracker.t({ hash: "${pixel_hash}" })
|
|
42
|
+
});
|
|
43
|
+
`;
|
|
44
|
+
this.renderer.appendChild(this.document?.body, new_analityc_script);
|
|
45
|
+
};
|
|
46
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: MetricoolPixelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
47
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: MetricoolPixelService, providedIn: 'root' });
|
|
48
|
+
}
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: MetricoolPixelService, decorators: [{
|
|
50
|
+
type: Injectable,
|
|
51
|
+
args: [{
|
|
52
|
+
providedIn: 'root'
|
|
53
|
+
}]
|
|
54
|
+
}], ctorParameters: () => [] });
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljb29sLXBpeGVsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtc2VydmljZXMvYW5hbHl0aWNzL21ldHJpY29vbC1waXhlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBQzdGOztHQUVHO0FBSUgsTUFBTSxPQUFPLHFCQUFxQjtJQUM5Qjs7T0FFRztJQUNLLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFakIsZUFBZSxHQUFxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUM1RCxRQUFRLEdBQW9CLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUM1QyxVQUFVLEdBQVEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzdDOzs7T0FHRztJQUNLLFFBQVEsQ0FBWTtJQUU1QjtRQUNJLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxVQUFVLEdBQUcsQ0FBQyxVQUFlLEVBQUUsRUFBRTtRQUM3QixJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLG1CQUFtQixDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztRQUM3QyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUc7Ozs7Ozs7O21DQVFBLFVBQVU7O1NBRXBDLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQTt1R0F4Q1EscUJBQXFCOzJHQUFyQixxQkFBcUIsY0FGbEIsTUFBTTs7MkZBRVQscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5ULCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lELCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8qKlxuICogU2VydmljaW8gZW5jYXJnYWRvIGRlIG1hbmVqYXIgZWwgYW5hbHl0aWNzIGRlIE1ldHJpY29vbCBQaXhlbFxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1ldHJpY29vbFBpeGVsU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogSW5kaWNhIHNpIHNlIGVzdGEgY2FyZ2FuZG8gZWwgU2VydmljaW8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSByZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIgPSBpbmplY3QoUmVuZGVyZXJGYWN0b3J5MilcbiAgICBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCB8IG51bGwgPSBpbmplY3QoRE9DVU1FTlQpXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnkgPSBpbmplY3QoUExBVEZPUk1fSUQpXG4gICAgLyoqXG4gICAgICogU2UgZW5jYXJnYSBkZSBjcmVhciBlbCBlbGVtZW50byBIVE1MIGNvbiBsYXMgY29uZmlndXJhY2lvbmVzIHBhcmEgXG4gICAgICogcXVlIHNlIHB1ZWRhIGVqZWN1dGFyIGVsIHNlcnZpY2lvLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudCA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHRoaXMucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmljaWFsaXphIGVsIFNlcnZpY2lvIGRlIGFuYWx5dGljcyBjb24gc3VzIGNvbmZpZ3VyYWNpb25lcy5cbiAgICAgKiBAcGFyYW0gcGl4ZWxfaGFzaCBoYXNoIHByb3Zpc3RvIHBvciBNZXRyaWNvb2wgUGl4ZWwuXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZSA9IChwaXhlbF9oYXNoOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IG5ld19hbmFsaXR5Y19zY3JpcHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICBuZXdfYW5hbGl0eWNfc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgbmV3X2FuYWxpdHljX3NjcmlwdC50ZXh0ID0gYFxuICAgICAgICBmdW5jdGlvbiBsb2FkU2NyaXB0KGEpIHtcbiAgICAgICAgICAgIHZhciBiID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICAgICAgICAgIGMudHlwZSA9IFwidGV4dC9qYXZhc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgYy5zcmMgPSBcImh0dHBzOi8vdHJhY2tlci5tZXRyaWNvb2wuY29tL3Jlc291cmNlcy9iZS5qc1wiLFxuICAgICAgICAgICAgICAgIGMub25yZWFkeXN0YXRlY2hhbmdlID0gYSxcbiAgICAgICAgICAgICAgICBjLm9ubG9hZCA9IGEsIGIuYXBwZW5kQ2hpbGQoYylcbiAgICAgICAgfSBsb2FkU2NyaXB0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlVHJhY2tlci50KHsgaGFzaDogXCIke3BpeGVsX2hhc2h9XCIgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIGA7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudD8uYm9keSwgbmV3X2FuYWxpdHljX3NjcmlwdCk7XG4gICAgfVxufVxuIl19
|