@infrab4a/connect-angular 5.0.0-alpha.15 → 5.0.0-alpha.3

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 (108) hide show
  1. package/esm2020/angular-connect.module.mjs +289 -0
  2. package/esm2020/angular-elastic-search.module.mjs +34 -0
  3. package/esm2020/angular-firebase-auth.module.mjs +141 -0
  4. package/esm2020/angular-firestore.module.mjs +541 -0
  5. package/esm2020/angular-hasura-graphql.module.mjs +333 -0
  6. package/esm2020/angular-vertex-search.module.mjs +34 -0
  7. package/{esm2022 → esm2020}/persistence/cookie-data-persistence.mjs +4 -4
  8. package/{esm2022 → esm2020}/services/auth.service.mjs +6 -6
  9. package/{esm2022 → esm2020}/services/cart/cart-services.facade.mjs +5 -5
  10. package/{esm2022 → esm2020}/services/cart.service.mjs +5 -5
  11. package/{esm2022 → esm2020}/services/catalog/adapters/new-category-structure.adapter.mjs +6 -6
  12. package/{esm2022 → esm2020}/services/catalog/adapters/old-category-structure.adapter.mjs +6 -6
  13. package/{esm2022 → esm2020}/services/catalog/catalog.service.mjs +12 -6
  14. package/esm2020/services/catalog/category.service.mjs +45 -0
  15. package/{esm2022 → esm2020}/services/catalog/facades/catalog-service.facade.mjs +6 -6
  16. package/{esm2022 → esm2020}/services/catalog/facades/catalog-strategies.facade.mjs +5 -5
  17. package/{esm2022 → esm2020}/services/catalog/facades/category-repository.facade.mjs +6 -6
  18. package/{esm2022 → esm2020}/services/catalog/facades/category-service.facade.mjs +6 -6
  19. package/{esm2022 → esm2020}/services/catalog/facades/product-catalog.facade.mjs +6 -6
  20. package/{esm2022 → esm2020}/services/catalog/helpers/brand-manager.helper.mjs +5 -5
  21. package/{esm2022 → esm2020}/services/catalog/helpers/catalog-filter.helper.mjs +4 -4
  22. package/{esm2022 → esm2020}/services/catalog/helpers/catalog-sort.helper.mjs +4 -4
  23. package/{esm2022 → esm2020}/services/catalog/helpers/product-fields.helper.mjs +4 -4
  24. package/{esm2022 → esm2020}/services/catalog/models/category-with-tree.model.mjs +1 -1
  25. package/{esm2022 → esm2020}/services/catalog/services/catalog-helpers.service.mjs +5 -5
  26. package/{esm2022 → esm2020}/services/catalog/services/catalog-operations.facade.mjs +5 -5
  27. package/{esm2022 → esm2020}/services/catalog/services/catalog-repository.service.mjs +6 -6
  28. package/{esm2022 → esm2020}/services/catalog/services/product-management.facade.mjs +6 -6
  29. package/{esm2022 → esm2020}/services/catalog/strategies/category-search.strategy.mjs +5 -5
  30. package/{esm2022 → esm2020}/services/catalog/strategies/profile-search.strategy.mjs +5 -5
  31. package/{esm2022 → esm2020}/services/catalog/strategies/term-search.strategy.mjs +5 -5
  32. package/esm2020/services/catalog/wishlist.service.mjs +256 -0
  33. package/{esm2022 → esm2020}/services/checkout/checkout-dependencies.facade.mjs +6 -6
  34. package/{esm2022 → esm2020}/services/checkout/checkout-repositories.facade.mjs +6 -6
  35. package/{esm2022 → esm2020}/services/checkout-subscription.service.mjs +6 -6
  36. package/{esm2022 → esm2020}/services/checkout.service.mjs +5 -5
  37. package/{esm2022 → esm2020}/services/coupon/coupon-repositories.facade.mjs +6 -6
  38. package/{esm2022 → esm2020}/services/coupon.service.mjs +5 -5
  39. package/esm2020/services/helpers/util.helper.mjs +18 -0
  40. package/{esm2022 → esm2020}/services/home-shop/home-shop-repositories.facade.mjs +6 -6
  41. package/{esm2022 → esm2020}/services/home-shop.service.mjs +5 -5
  42. package/{esm2022 → esm2020}/services/order.service.mjs +6 -6
  43. package/{esm2022 → esm2020}/services/shared/configuration.facade.mjs +6 -6
  44. package/fesm2015/infrab4a-connect-angular.mjs +3385 -0
  45. package/fesm2015/infrab4a-connect-angular.mjs.map +1 -0
  46. package/{fesm2022 → fesm2020}/infrab4a-connect-angular.mjs +775 -762
  47. package/fesm2020/infrab4a-connect-angular.mjs.map +1 -0
  48. package/package.json +17 -10
  49. package/esm2022/angular-connect.module.mjs +0 -289
  50. package/esm2022/angular-elastic-search.module.mjs +0 -34
  51. package/esm2022/angular-firebase-auth.module.mjs +0 -141
  52. package/esm2022/angular-firestore.module.mjs +0 -541
  53. package/esm2022/angular-hasura-graphql.module.mjs +0 -333
  54. package/esm2022/angular-vertex-search.module.mjs +0 -34
  55. package/esm2022/services/catalog/category.service.mjs +0 -39
  56. package/esm2022/services/catalog/wishlist.service.mjs +0 -255
  57. package/esm2022/services/helpers/util.helper.mjs +0 -18
  58. package/fesm2022/infrab4a-connect-angular.mjs.map +0 -1
  59. /package/{esm2022 → esm2020}/consts/backend-url.const.mjs +0 -0
  60. /package/{esm2022 → esm2020}/consts/category-structure.mjs +0 -0
  61. /package/{esm2022 → esm2020}/consts/default-shop.const.mjs +0 -0
  62. /package/{esm2022 → esm2020}/consts/es-config.const.mjs +0 -0
  63. /package/{esm2022 → esm2020}/consts/firebase-const.mjs +0 -0
  64. /package/{esm2022 → esm2020}/consts/hasura-options.const.mjs +0 -0
  65. /package/{esm2022 → esm2020}/consts/index.mjs +0 -0
  66. /package/{esm2022 → esm2020}/consts/persistence.const.mjs +0 -0
  67. /package/{esm2022 → esm2020}/consts/storage-base-url.const.mjs +0 -0
  68. /package/{esm2022 → esm2020}/consts/vertex-config.const.mjs +0 -0
  69. /package/{esm2022 → esm2020}/helpers/index.mjs +0 -0
  70. /package/{esm2022 → esm2020}/helpers/mobile-operation-system-checker.helper.mjs +0 -0
  71. /package/{esm2022 → esm2020}/index.mjs +0 -0
  72. /package/{esm2022 → esm2020}/infrab4a-connect-angular.mjs +0 -0
  73. /package/{esm2022 → esm2020}/interfaces/catalog-strategies.interface.mjs +0 -0
  74. /package/{esm2022 → esm2020}/interfaces/category-facades.interface.mjs +0 -0
  75. /package/{esm2022 → esm2020}/interfaces/index.mjs +0 -0
  76. /package/{esm2022 → esm2020}/persistence/data-persistence.mjs +0 -0
  77. /package/{esm2022 → esm2020}/persistence/index.mjs +0 -0
  78. /package/{esm2022 → esm2020}/services/cart/index.mjs +0 -0
  79. /package/{esm2022 → esm2020}/services/catalog/adapters/category-structure.adapter.mjs +0 -0
  80. /package/{esm2022 → esm2020}/services/catalog/adapters/index.mjs +0 -0
  81. /package/{esm2022 → esm2020}/services/catalog/context/catalog-search.context.mjs +0 -0
  82. /package/{esm2022 → esm2020}/services/catalog/enums/index.mjs +0 -0
  83. /package/{esm2022 → esm2020}/services/catalog/enums/product-sorts.enum.mjs +0 -0
  84. /package/{esm2022 → esm2020}/services/catalog/facades/index.mjs +0 -0
  85. /package/{esm2022 → esm2020}/services/catalog/helpers/index.mjs +0 -0
  86. /package/{esm2022 → esm2020}/services/catalog/index.mjs +0 -0
  87. /package/{esm2022 → esm2020}/services/catalog/models/index.mjs +0 -0
  88. /package/{esm2022 → esm2020}/services/catalog/services/index.mjs +0 -0
  89. /package/{esm2022 → esm2020}/services/catalog/strategies/index.mjs +0 -0
  90. /package/{esm2022 → esm2020}/services/catalog/strategies/types/strategy-params.type.mjs +0 -0
  91. /package/{esm2022 → esm2020}/services/catalog/types/fetch-products-options.type.mjs +0 -0
  92. /package/{esm2022 → esm2020}/services/catalog/types/fetch-products-params.type.mjs +0 -0
  93. /package/{esm2022 → esm2020}/services/catalog/types/fetch-products-response.type.mjs +0 -0
  94. /package/{esm2022 → esm2020}/services/catalog/types/index.mjs +0 -0
  95. /package/{esm2022 → esm2020}/services/catalog/types/method-params.type.mjs +0 -0
  96. /package/{esm2022 → esm2020}/services/catalog/types/product-sort.type.mjs +0 -0
  97. /package/{esm2022 → esm2020}/services/checkout/index.mjs +0 -0
  98. /package/{esm2022 → esm2020}/services/coupon/index.mjs +0 -0
  99. /package/{esm2022 → esm2020}/services/coupon/types/coupon-params.type.mjs +0 -0
  100. /package/{esm2022 → esm2020}/services/helpers/index.mjs +0 -0
  101. /package/{esm2022 → esm2020}/services/home-shop/index.mjs +0 -0
  102. /package/{esm2022 → esm2020}/services/index.mjs +0 -0
  103. /package/{esm2022 → esm2020}/services/shared/index.mjs +0 -0
  104. /package/{esm2022 → esm2020}/services/types/index.mjs +0 -0
  105. /package/{esm2022 → esm2020}/services/types/required-checkout-data.type.mjs +0 -0
  106. /package/{esm2022 → esm2020}/services/types/required-checkout-subscription-data.type.mjs +0 -0
  107. /package/{esm2022 → esm2020}/types/firebase-app-config.type.mjs +0 -0
  108. /package/{esm2022 → esm2020}/types/index.mjs +0 -0
@@ -1,255 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { PersonTypes, Shops, Wishlist, WishlistLogType, } from '@infrab4a/connect';
3
- import { DEFAULT_SHOP } from '../../consts';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@infrab4a/connect";
6
- export class WishlistService {
7
- constructor(wishlistRepository, shop, logRepository) {
8
- this.wishlistRepository = wishlistRepository;
9
- this.shop = shop;
10
- this.logRepository = logRepository;
11
- }
12
- initializeServices(catalogServiceFacade, categoryServiceFacade) {
13
- this.catalogService = catalogServiceFacade.getCatalogService();
14
- this.categoryService = categoryServiceFacade.getCategoryService();
15
- }
16
- getCatalogService() {
17
- return this.catalogService;
18
- }
19
- getCategoryService() {
20
- return this.categoryService;
21
- }
22
- async create({ personId, title, description, published, userFullName, userPhoto, theme, bannerUrl, personType, personIsSubscriber, }) {
23
- const wishlistData = this.buildWishlistData({
24
- title,
25
- description,
26
- published,
27
- userFullName,
28
- userPhoto,
29
- theme,
30
- bannerUrl,
31
- personType,
32
- personIsSubscriber,
33
- personId,
34
- });
35
- const existingWishlist = await this.findExistingWishlistByPersonId(personId);
36
- await this.createWishlistLog(WishlistLogType.CREATE, wishlistData);
37
- if (existingWishlist)
38
- return existingWishlist;
39
- return this.createNewWishlist(wishlistData);
40
- }
41
- buildWishlistData({ title, description, published, userFullName, userPhoto, theme, bannerUrl, personType, personIsSubscriber, personId, }) {
42
- return {
43
- slug: '',
44
- name: title,
45
- description,
46
- metadatas: [
47
- {
48
- shop: this.shop,
49
- title: `${userFullName} - ${title}`,
50
- description: `${userFullName} - ${description}`,
51
- },
52
- ],
53
- shop: this.shop,
54
- shops: [this.shop],
55
- personId,
56
- personName: userFullName,
57
- personPhoto: userPhoto,
58
- brandCategory: false,
59
- published,
60
- theme,
61
- bannerUrl,
62
- personType: personType ?? PersonTypes.NONE,
63
- personIsSubscriber: personIsSubscriber ?? false,
64
- };
65
- }
66
- async findExistingWishlistByPersonId(personId) {
67
- const hasWishlist = await this.wishlistRepository
68
- .find({
69
- filters: {
70
- personId,
71
- },
72
- options: {
73
- enableCount: false,
74
- },
75
- orderBy: {
76
- id: 'asc',
77
- },
78
- })
79
- .then((res) => res.data);
80
- return hasWishlist.length ? hasWishlist.at(0) : null;
81
- }
82
- async createNewWishlist(data) {
83
- const newWishlist = await this.wishlistRepository.create(data);
84
- await this.wishlistRepository.update({ id: newWishlist.id, slug: newWishlist.id });
85
- return Wishlist.toInstance({ ...newWishlist.toPlain(), slug: newWishlist.id });
86
- }
87
- async update({ id, title, description, published, userFullName, userPhoto, theme, bannerUrl, personType, personIsSubscriber, }) {
88
- const data = {
89
- id,
90
- name: title,
91
- description,
92
- published,
93
- metadatas: [
94
- {
95
- shop: this.shop,
96
- title: `${userFullName} - ${title}`,
97
- description: `${userFullName} - ${description}`,
98
- },
99
- ],
100
- personName: userFullName,
101
- personPhoto: userPhoto,
102
- theme,
103
- bannerUrl,
104
- personType: personType ?? PersonTypes.NONE,
105
- personIsSubscriber: personIsSubscriber ?? false,
106
- };
107
- await this.createWishlistLog(WishlistLogType.UPDATE, data);
108
- return this.wishlistRepository.update(data);
109
- }
110
- async delete(wishlistId) {
111
- const wishlist = await this.findById(wishlistId);
112
- await this.createWishlistLog(WishlistLogType.DELETE, wishlist);
113
- return this.wishlistRepository.delete({ id: wishlistId });
114
- }
115
- getWishlistBySlug(slug) {
116
- const [id] = slug.split('-');
117
- if (+id)
118
- return this.wishlistRepository.get({ id });
119
- return this.wishlistRepository.getWishlistBySlug(slug);
120
- }
121
- getWishlistsByPerson(personId) {
122
- return this.wishlistRepository.getWishlistByPerson(personId);
123
- }
124
- async addProduct(wishlistId, productId) {
125
- const wishlist = await this.wishlistRepository.get({ id: wishlistId });
126
- const hasProduct = wishlist.products.some((p) => p == productId);
127
- const wishlistData = await this.findById(wishlistId);
128
- const productData = await this.findProductById(productId);
129
- await this.createWishlistLog(WishlistLogType.ADD_PRODUCT, wishlistData, productData);
130
- if (!hasProduct) {
131
- wishlist.products = [...wishlist.products, productId];
132
- await this.wishlistRepository.addProduct(wishlistId, productId);
133
- }
134
- return wishlist;
135
- }
136
- async removeProduct(wishlistId, productId) {
137
- const wishlist = await this.wishlistRepository.get({ id: wishlistId });
138
- const productIndex = wishlist.products.findIndex((p) => p == productId);
139
- if (productIndex != -1) {
140
- wishlist.products.splice(productIndex, 1);
141
- const wishlistData = await this.findById(wishlistId);
142
- const productData = await this.findProductById(productId);
143
- await this.createWishlistLog(WishlistLogType.REMOVE_PRODUCT, wishlistData, productData);
144
- await this.wishlistRepository.removeProduct(wishlistId, productId);
145
- }
146
- return wishlist;
147
- }
148
- async findById(id) {
149
- return this.wishlistRepository
150
- .find({
151
- fields: ['id', 'name', 'description', 'personId', 'personIsSubscriber', 'personType', 'personName'],
152
- filters: {
153
- id,
154
- },
155
- })
156
- .then((res) => res.data.at(0));
157
- }
158
- async findProductById(id) {
159
- if (!this.catalogService) {
160
- throw new Error('CatalogService not initialized. Call initializeServices first.');
161
- }
162
- const helpersService = this.catalogService['helpersService'];
163
- const productServices = helpersService.getProductServices();
164
- return productServices.productRepository
165
- .find({
166
- fields: ['id', 'sku', 'EAN', 'name', 'brand'],
167
- filters: {
168
- id,
169
- },
170
- })
171
- .then((res) => res.data.at(0));
172
- }
173
- async createWishlistLog(type, wishlist, product) {
174
- switch (type) {
175
- case WishlistLogType.CREATE:
176
- case WishlistLogType.UPDATE:
177
- case WishlistLogType.DELETE:
178
- await this.createWishlistOperationLog(type, wishlist);
179
- break;
180
- case WishlistLogType.ADD_PRODUCT:
181
- case WishlistLogType.REMOVE_PRODUCT:
182
- await this.createWishlistProductLog(type, wishlist, product);
183
- break;
184
- default:
185
- break;
186
- }
187
- }
188
- async createWishlistOperationLog(type, wishlist) {
189
- const operation = this.getOperationTypeFromWishlistLogType(type);
190
- await this.logRepository.create({
191
- collection: 'wishlist',
192
- date: new Date(),
193
- operation,
194
- documentId: wishlist.id,
195
- document: this.buildWishlistLogDocument(wishlist, type),
196
- });
197
- }
198
- async createWishlistProductLog(type, wishlist, product) {
199
- await this.logRepository.create({
200
- collection: 'wishlist',
201
- date: new Date(),
202
- operation: 'UPDATE',
203
- documentId: wishlist.id,
204
- document: {
205
- ...this.buildWishlistLogDocument(wishlist, type),
206
- ...this.buildProductLogData(product),
207
- },
208
- });
209
- }
210
- getOperationTypeFromWishlistLogType(type) {
211
- if (type === WishlistLogType.CREATE)
212
- return 'CREATE';
213
- if (type === WishlistLogType.UPDATE)
214
- return 'UPDATE';
215
- return 'DELETE';
216
- }
217
- buildWishlistLogDocument(wishlist, type) {
218
- return {
219
- id: wishlist.id,
220
- shop: this.shop,
221
- name: wishlist.name,
222
- description: wishlist.description,
223
- published: wishlist.published,
224
- type: type,
225
- personType: wishlist.personType,
226
- personId: wishlist.personId,
227
- personName: wishlist.personName,
228
- personIsSubscriber: wishlist.personIsSubscriber,
229
- };
230
- }
231
- buildProductLogData(product) {
232
- return {
233
- productId: product.id,
234
- productEAN: product.EAN,
235
- productSKU: product.sku,
236
- productName: product.name,
237
- productBrand: product.brand,
238
- };
239
- }
240
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: WishlistService, deps: [{ token: 'WishlistRepository' }, { token: DEFAULT_SHOP }, { token: 'LogRepository' }], target: i0.ɵɵFactoryTarget.Injectable }); }
241
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: WishlistService }); }
242
- }
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: WishlistService, decorators: [{
244
- type: Injectable
245
- }], ctorParameters: () => [{ type: undefined, decorators: [{
246
- type: Inject,
247
- args: ['WishlistRepository']
248
- }] }, { type: i1.Shops, decorators: [{
249
- type: Inject,
250
- args: [DEFAULT_SHOP]
251
- }] }, { type: undefined, decorators: [{
252
- type: Inject,
253
- args: ['LogRepository']
254
- }] }] });
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lzaGxpc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvc2VydmljZXMvY2F0YWxvZy93aXNobGlzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFHTCxXQUFXLEVBRVgsS0FBSyxFQUNMLFFBQVEsRUFDUixlQUFlLEdBRWhCLE1BQU0sbUJBQW1CLENBQUE7QUFFMUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTs7O0FBTzNDLE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQ2lELGtCQUFzQyxFQUM5QyxJQUFXLEVBQ1IsYUFBNEI7UUFGdkIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUM5QyxTQUFJLEdBQUosSUFBSSxDQUFPO1FBQ1Isa0JBQWEsR0FBYixhQUFhLENBQWU7SUFDckUsQ0FBQztJQUVKLGtCQUFrQixDQUFDLG9CQUEwQyxFQUFFLHFCQUE0QztRQUN6RyxJQUFJLENBQUMsY0FBYyxHQUFHLG9CQUFvQixDQUFDLGlCQUFpQixFQUFFLENBQUE7UUFDOUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO0lBQ25FLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUE7SUFDNUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUE7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsRUFDWCxRQUFRLEVBQ1IsS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixrQkFBa0IsR0FZbkI7UUFD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UUFBUSxDQUFDLEVBQUU7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7WUFDbkIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1lBQ2pDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztZQUM3QixJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtZQUMvQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7WUFDM0IsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0I7U0FDaEQsQ0FBQTtJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxPQUFnQjtRQUMxQyxPQUFPO1lBQ0wsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ3JCLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRztZQUN2QixVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDdkIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ3pCLFlBQVksRUFBRSxPQUFPLENBQUMsS0FBSztTQUM1QixDQUFBO0lBQ0gsQ0FBQzs4R0ExVlUsZUFBZSxrQkFLaEIsb0JBQW9CLGFBQ3BCLFlBQVksYUFDWixlQUFlO2tIQVBkLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLFVBQVU7OzBCQU1OLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsTUFBTTsyQkFBQyxZQUFZOzswQkFDbkIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIExvZ1JlcG9zaXRvcnksXG4gIFBlcnNvblR5cGUsXG4gIFBlcnNvblR5cGVzLFxuICBQcm9kdWN0LFxuICBTaG9wcyxcbiAgV2lzaGxpc3QsXG4gIFdpc2hsaXN0TG9nVHlwZSxcbiAgV2lzaGxpc3RSZXBvc2l0b3J5LFxufSBmcm9tICdAaW5mcmFiNGEvY29ubmVjdCdcblxuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vLi4vY29uc3RzJ1xuXG5pbXBvcnQgeyBDYXRhbG9nU2VydmljZSB9IGZyb20gJy4vY2F0YWxvZy5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ2F0ZWdvcnlTZXJ2aWNlIH0gZnJvbSAnLi9jYXRlZ29yeS5zZXJ2aWNlJ1xuaW1wb3J0IHsgQ2F0YWxvZ1NlcnZpY2VGYWNhZGUsIENhdGVnb3J5U2VydmljZUZhY2FkZSB9IGZyb20gJy4vZmFjYWRlcydcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFdpc2hsaXN0U2VydmljZSB7XG4gIHByaXZhdGUgY2F0YWxvZ1NlcnZpY2U6IENhdGFsb2dTZXJ2aWNlXG4gIHByaXZhdGUgY2F0ZWdvcnlTZXJ2aWNlOiBDYXRlZ29yeVNlcnZpY2VcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdXaXNobGlzdFJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IHdpc2hsaXN0UmVwb3NpdG9yeTogV2lzaGxpc3RSZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoREVGQVVMVF9TSE9QKSBwcml2YXRlIHJlYWRvbmx5IHNob3A6IFNob3BzLFxuICAgIEBJbmplY3QoJ0xvZ1JlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IGxvZ1JlcG9zaXRvcnk6IExvZ1JlcG9zaXRvcnksXG4gICkge31cblxuICBpbml0aWFsaXplU2VydmljZXMoY2F0YWxvZ1NlcnZpY2VGYWNhZGU6IENhdGFsb2dTZXJ2aWNlRmFjYWRlLCBjYXRlZ29yeVNlcnZpY2VGYWNhZGU6IENhdGVnb3J5U2VydmljZUZhY2FkZSk6IHZvaWQge1xuICAgIHRoaXMuY2F0YWxvZ1NlcnZpY2UgPSBjYXRhbG9nU2VydmljZUZhY2FkZS5nZXRDYXRhbG9nU2VydmljZSgpXG4gICAgdGhpcy5jYXRlZ29yeVNlcnZpY2UgPSBjYXRlZ29yeVNlcnZpY2VGYWNhZGUuZ2V0Q2F0ZWdvcnlTZXJ2aWNlKClcbiAgfVxuXG4gIGdldENhdGFsb2dTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLmNhdGFsb2dTZXJ2aWNlXG4gIH1cblxuICBnZXRDYXRlZ29yeVNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnlTZXJ2aWNlXG4gIH1cblxuICBhc3luYyBjcmVhdGUoe1xuICAgIHBlcnNvbklkLFxuICAgIHRpdGxlLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIHB1Ymxpc2hlZCxcbiAgICB1c2VyRnVsbE5hbWUsXG4gICAgdXNlclBob3RvLFxuICAgIHRoZW1lLFxuICAgIGJhbm5lclVybCxcbiAgICBwZXJzb25UeXBlLFxuICAgIHBlcnNvbklzU3Vic2NyaWJlcixcbiAgfToge1xuICAgIHBlcnNvbklkOiBzdHJpbmdcbiAgICB0aXRsZTogc3RyaW5nXG4gICAgZGVzY3JpcHRpb246IHN0cmluZ1xuICAgIHB1Ymxpc2hlZDogYm9vbGVhblxuICAgIHVzZXJGdWxsTmFtZTogc3RyaW5nXG4gICAgdXNlclBob3RvPzogc3RyaW5nXG4gICAgdGhlbWU/OiBzdHJpbmdcbiAgICBiYW5uZXJVcmw/OiBzdHJpbmdcbiAgICBwZXJzb25UeXBlPzogUGVyc29uVHlwZVxuICAgIHBlcnNvbklzU3Vic2NyaWJlcj86IGJvb2xlYW5cbiAgfSk6IFByb21pc2U8V2lzaGxpc3Q+IHtcbiAgICBjb25zdCB3aXNobGlzdERhdGEgPSB0aGlzLmJ1aWxkV2lzaGxpc3REYXRhKHtcbiAgICAgIHRpdGxlLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBwdWJsaXNoZWQsXG4gICAgICB1c2VyRnVsbE5hbWUsXG4gICAgICB1c2VyUGhvdG8sXG4gICAgICB0aGVtZSxcbiAgICAgIGJhbm5lclVybCxcbiAgICAgIHBlcnNvblR5cGUsXG4gICAgICBwZXJzb25Jc1N1YnNjcmliZXIsXG4gICAgICBwZXJzb25JZCxcbiAgICB9KVxuXG4gICAgY29uc3QgZXhpc3RpbmdXaXNobGlzdCA9IGF3YWl0IHRoaXMuZmluZEV4aXN0aW5nV2lzaGxpc3RCeVBlcnNvbklkKHBlcnNvbklkKVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVXaXNobGlzdExvZyhXaXNobGlzdExvZ1R5cGUuQ1JFQVRFLCB3aXNobGlzdERhdGEgYXMgV2lzaGxpc3QpXG5cbiAgICBpZiAoZXhpc3RpbmdXaXNobGlzdCkgcmV0dXJuIGV4aXN0aW5nV2lzaGxpc3RcblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU5ld1dpc2hsaXN0KHdpc2hsaXN0RGF0YSlcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRXaXNobGlzdERhdGEoe1xuICAgIHRpdGxlLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIHB1Ymxpc2hlZCxcbiAgICB1c2VyRnVsbE5hbWUsXG4gICAgdXNlclBob3RvLFxuICAgIHRoZW1lLFxuICAgIGJhbm5lclVybCxcbiAgICBwZXJzb25UeXBlLFxuICAgIHBlcnNvbklzU3Vic2NyaWJlcixcbiAgICBwZXJzb25JZCxcbiAgfToge1xuICAgIHRpdGxlOiBzdHJpbmdcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gICAgcHVibGlzaGVkOiBib29sZWFuXG4gICAgdXNlckZ1bGxOYW1lOiBzdHJpbmdcbiAgICB1c2VyUGhvdG8/OiBzdHJpbmdcbiAgICB0aGVtZT86IHN0cmluZ1xuICAgIGJhbm5lclVybD86IHN0cmluZ1xuICAgIHBlcnNvblR5cGU/OiBQZXJzb25UeXBlXG4gICAgcGVyc29uSXNTdWJzY3JpYmVyPzogYm9vbGVhblxuICAgIHBlcnNvbklkOiBzdHJpbmdcbiAgfSkge1xuICAgIHJldHVybiB7XG4gICAgICBzbHVnOiAnJyxcbiAgICAgIG5hbWU6IHRpdGxlLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBtZXRhZGF0YXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNob3A6IHRoaXMuc2hvcCxcbiAgICAgICAgICB0aXRsZTogYCR7dXNlckZ1bGxOYW1lfSAtICR7dGl0bGV9YCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7dXNlckZ1bGxOYW1lfSAtICR7ZGVzY3JpcHRpb259YCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBzaG9wOiB0aGlzLnNob3AsXG4gICAgICBzaG9wczogW3RoaXMuc2hvcF0sXG4gICAgICBwZXJzb25JZCxcbiAgICAgIHBlcnNvbk5hbWU6IHVzZXJGdWxsTmFtZSxcbiAgICAgIHBlcnNvblBob3RvOiB1c2VyUGhvdG8sXG4gICAgICBicmFuZENhdGVnb3J5OiBmYWxzZSxcbiAgICAgIHB1Ymxpc2hlZCxcbiAgICAgIHRoZW1lLFxuICAgICAgYmFubmVyVXJsLFxuICAgICAgcGVyc29uVHlwZTogcGVyc29uVHlwZSA/PyBQZXJzb25UeXBlcy5OT05FLFxuICAgICAgcGVyc29uSXNTdWJzY3JpYmVyOiBwZXJzb25Jc1N1YnNjcmliZXIgPz8gZmFsc2UsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kRXhpc3RpbmdXaXNobGlzdEJ5UGVyc29uSWQocGVyc29uSWQ6IHN0cmluZyk6IFByb21pc2U8V2lzaGxpc3QgfCBudWxsPiB7XG4gICAgY29uc3QgaGFzV2lzaGxpc3QgPSBhd2FpdCB0aGlzLndpc2hsaXN0UmVwb3NpdG9yeVxuICAgICAgLmZpbmQoe1xuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgcGVyc29uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBlbmFibGVDb3VudDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIG9yZGVyQnk6IHtcbiAgICAgICAgICBpZDogJ2FzYycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmRhdGEpXG5cbiAgICByZXR1cm4gaGFzV2lzaGxpc3QubGVuZ3RoID8gaGFzV2lzaGxpc3QuYXQoMCkgOiBudWxsXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZU5ld1dpc2hsaXN0KGRhdGE6IGFueSk6IFByb21pc2U8V2lzaGxpc3Q+IHtcbiAgICBjb25zdCBuZXdXaXNobGlzdCA9IGF3YWl0IHRoaXMud2lzaGxpc3RSZXBvc2l0b3J5LmNyZWF0ZShkYXRhKVxuXG4gICAgYXdhaXQgdGhpcy53aXNobGlzdFJlcG9zaXRvcnkudXBkYXRlKHsgaWQ6IG5ld1dpc2hsaXN0LmlkLCBzbHVnOiBuZXdXaXNobGlzdC5pZCB9KVxuXG4gICAgcmV0dXJuIFdpc2hsaXN0LnRvSW5zdGFuY2UoeyAuLi5uZXdXaXNobGlzdC50b1BsYWluKCksIHNsdWc6IG5ld1dpc2hsaXN0LmlkIH0pXG4gIH1cblxuICBhc3luYyB1cGRhdGUoe1xuICAgIGlkLFxuICAgIHRpdGxlLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIHB1Ymxpc2hlZCxcbiAgICB1c2VyRnVsbE5hbWUsXG4gICAgdXNlclBob3RvLFxuICAgIHRoZW1lLFxuICAgIGJhbm5lclVybCxcbiAgICBwZXJzb25UeXBlLFxuICAgIHBlcnNvbklzU3Vic2NyaWJlcixcbiAgfToge1xuICAgIGlkOiBzdHJpbmdcbiAgICB0aXRsZTogc3RyaW5nXG4gICAgZGVzY3JpcHRpb246IHN0cmluZ1xuICAgIHB1Ymxpc2hlZDogYm9vbGVhblxuICAgIHVzZXJGdWxsTmFtZTogc3RyaW5nXG4gICAgdXNlclBob3RvPzogc3RyaW5nXG4gICAgdGhlbWU/OiBzdHJpbmdcbiAgICBiYW5uZXJVcmw/OiBzdHJpbmdcbiAgICBwZXJzb25UeXBlPzogUGVyc29uVHlwZVxuICAgIHBlcnNvbklzU3Vic2NyaWJlcj86IGJvb2xlYW5cbiAgfSk6IFByb21pc2U8V2lzaGxpc3Q+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgaWQsXG4gICAgICBuYW1lOiB0aXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgcHVibGlzaGVkLFxuICAgICAgbWV0YWRhdGFzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzaG9wOiB0aGlzLnNob3AsXG4gICAgICAgICAgdGl0bGU6IGAke3VzZXJGdWxsTmFtZX0gLSAke3RpdGxlfWAsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGAke3VzZXJGdWxsTmFtZX0gLSAke2Rlc2NyaXB0aW9ufWAsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcGVyc29uTmFtZTogdXNlckZ1bGxOYW1lLFxuICAgICAgcGVyc29uUGhvdG86IHVzZXJQaG90byxcbiAgICAgIHRoZW1lLFxuICAgICAgYmFubmVyVXJsLFxuICAgICAgcGVyc29uVHlwZTogcGVyc29uVHlwZSA/PyBQZXJzb25UeXBlcy5OT05FLFxuICAgICAgcGVyc29uSXNTdWJzY3JpYmVyOiBwZXJzb25Jc1N1YnNjcmliZXIgPz8gZmFsc2UsXG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVXaXNobGlzdExvZyhXaXNobGlzdExvZ1R5cGUuVVBEQVRFLCBkYXRhIGFzIFdpc2hsaXN0KVxuXG4gICAgcmV0dXJuIHRoaXMud2lzaGxpc3RSZXBvc2l0b3J5LnVwZGF0ZShkYXRhKVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlKHdpc2hsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHdpc2hsaXN0ID0gYXdhaXQgdGhpcy5maW5kQnlJZCh3aXNobGlzdElkKVxuXG4gICAgYXdhaXQgdGhpcy5jcmVhdGVXaXNobGlzdExvZyhXaXNobGlzdExvZ1R5cGUuREVMRVRFLCB3aXNobGlzdClcblxuICAgIHJldHVybiB0aGlzLndpc2hsaXN0UmVwb3NpdG9yeS5kZWxldGUoeyBpZDogd2lzaGxpc3RJZCB9KVxuICB9XG5cbiAgZ2V0V2lzaGxpc3RCeVNsdWcoc2x1Zzogc3RyaW5nKTogUHJvbWlzZTxXaXNobGlzdD4ge1xuICAgIGNvbnN0IFtpZF0gPSBzbHVnLnNwbGl0KCctJylcblxuICAgIGlmICgraWQpIHJldHVybiB0aGlzLndpc2hsaXN0UmVwb3NpdG9yeS5nZXQoeyBpZCB9KVxuXG4gICAgcmV0dXJuIHRoaXMud2lzaGxpc3RSZXBvc2l0b3J5LmdldFdpc2hsaXN0QnlTbHVnKHNsdWcpXG4gIH1cblxuICBnZXRXaXNobGlzdHNCeVBlcnNvbihwZXJzb25JZDogc3RyaW5nKTogUHJvbWlzZTxXaXNobGlzdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMud2lzaGxpc3RSZXBvc2l0b3J5LmdldFdpc2hsaXN0QnlQZXJzb24ocGVyc29uSWQpXG4gIH1cblxuICBhc3luYyBhZGRQcm9kdWN0KHdpc2hsaXN0SWQ6IHN0cmluZywgcHJvZHVjdElkOiBzdHJpbmcpOiBQcm9taXNlPFdpc2hsaXN0PiB7XG4gICAgY29uc3Qgd2lzaGxpc3QgPSBhd2FpdCB0aGlzLndpc2hsaXN0UmVwb3NpdG9yeS5nZXQoeyBpZDogd2lzaGxpc3RJZCB9KVxuICAgIGNvbnN0IGhhc1Byb2R1Y3QgPSB3aXNobGlzdC5wcm9kdWN0cy5zb21lKChwKSA9PiBwID09IHByb2R1Y3RJZClcblxuICAgIGNvbnN0IHdpc2hsaXN0RGF0YSA9IGF3YWl0IHRoaXMuZmluZEJ5SWQod2lzaGxpc3RJZClcbiAgICBjb25zdCBwcm9kdWN0RGF0YSA9IGF3YWl0IHRoaXMuZmluZFByb2R1Y3RCeUlkKHByb2R1Y3RJZClcblxuICAgIGF3YWl0IHRoaXMuY3JlYXRlV2lzaGxpc3RMb2coV2lzaGxpc3RMb2dUeXBlLkFERF9QUk9EVUNULCB3aXNobGlzdERhdGEsIHByb2R1Y3REYXRhKVxuXG4gICAgaWYgKCFoYXNQcm9kdWN0KSB7XG4gICAgICB3aXNobGlzdC5wcm9kdWN0cyA9IFsuLi53aXNobGlzdC5wcm9kdWN0cywgcHJvZHVjdElkXVxuICAgICAgYXdhaXQgdGhpcy53aXNobGlzdFJlcG9zaXRvcnkuYWRkUHJvZHVjdCh3aXNobGlzdElkLCBwcm9kdWN0SWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpc2hsaXN0XG4gIH1cblxuICBhc3luYyByZW1vdmVQcm9kdWN0KHdpc2hsaXN0SWQ6IHN0cmluZywgcHJvZHVjdElkOiBzdHJpbmcpOiBQcm9taXNlPFdpc2hsaXN0PiB7XG4gICAgY29uc3Qgd2lzaGxpc3QgPSBhd2FpdCB0aGlzLndpc2hsaXN0UmVwb3NpdG9yeS5nZXQoeyBpZDogd2lzaGxpc3RJZCB9KVxuICAgIGNvbnN0IHByb2R1Y3RJbmRleCA9IHdpc2hsaXN0LnByb2R1Y3RzLmZpbmRJbmRleCgocCkgPT4gcCA9PSBwcm9kdWN0SWQpXG5cbiAgICBpZiAocHJvZHVjdEluZGV4ICE9IC0xKSB7XG4gICAgICB3aXNobGlzdC5wcm9kdWN0cy5zcGxpY2UocHJvZHVjdEluZGV4LCAxKVxuICAgICAgY29uc3Qgd2lzaGxpc3REYXRhID0gYXdhaXQgdGhpcy5maW5kQnlJZCh3aXNobGlzdElkKVxuICAgICAgY29uc3QgcHJvZHVjdERhdGEgPSBhd2FpdCB0aGlzLmZpbmRQcm9kdWN0QnlJZChwcm9kdWN0SWQpXG5cbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlV2lzaGxpc3RMb2coV2lzaGxpc3RMb2dUeXBlLlJFTU9WRV9QUk9EVUNULCB3aXNobGlzdERhdGEsIHByb2R1Y3REYXRhKVxuICAgICAgYXdhaXQgdGhpcy53aXNobGlzdFJlcG9zaXRvcnkucmVtb3ZlUHJvZHVjdCh3aXNobGlzdElkLCBwcm9kdWN0SWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdpc2hsaXN0XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPFdpc2hsaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMud2lzaGxpc3RSZXBvc2l0b3J5XG4gICAgICAuZmluZCh7XG4gICAgICAgIGZpZWxkczogWydpZCcsICduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ3BlcnNvbklkJywgJ3BlcnNvbklzU3Vic2NyaWJlcicsICdwZXJzb25UeXBlJywgJ3BlcnNvbk5hbWUnXSxcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5kYXRhLmF0KDApKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kUHJvZHVjdEJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8UHJvZHVjdD4ge1xuICAgIGlmICghdGhpcy5jYXRhbG9nU2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYXRhbG9nU2VydmljZSBub3QgaW5pdGlhbGl6ZWQuIENhbGwgaW5pdGlhbGl6ZVNlcnZpY2VzIGZpcnN0LicpXG4gICAgfVxuXG4gICAgY29uc3QgaGVscGVyc1NlcnZpY2UgPSB0aGlzLmNhdGFsb2dTZXJ2aWNlWydoZWxwZXJzU2VydmljZSddIGFzIGFueVxuICAgIGNvbnN0IHByb2R1Y3RTZXJ2aWNlcyA9IGhlbHBlcnNTZXJ2aWNlLmdldFByb2R1Y3RTZXJ2aWNlcygpXG5cbiAgICByZXR1cm4gcHJvZHVjdFNlcnZpY2VzLnByb2R1Y3RSZXBvc2l0b3J5XG4gICAgICAuZmluZCh7XG4gICAgICAgIGZpZWxkczogWydpZCcsICdza3UnLCAnRUFOJywgJ25hbWUnLCAnYnJhbmQnXSxcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIGlkLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5kYXRhLmF0KDApKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVXaXNobGlzdExvZyh0eXBlOiBXaXNobGlzdExvZ1R5cGUsIHdpc2hsaXN0OiBXaXNobGlzdCwgcHJvZHVjdD86IFByb2R1Y3QpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgV2lzaGxpc3RMb2dUeXBlLkNSRUFURTpcbiAgICAgIGNhc2UgV2lzaGxpc3RMb2dUeXBlLlVQREFURTpcbiAgICAgIGNhc2UgV2lzaGxpc3RMb2dUeXBlLkRFTEVURTpcbiAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVXaXNobGlzdE9wZXJhdGlvbkxvZyh0eXBlLCB3aXNobGlzdClcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBXaXNobGlzdExvZ1R5cGUuQUREX1BST0RVQ1Q6XG4gICAgICBjYXNlIFdpc2hsaXN0TG9nVHlwZS5SRU1PVkVfUFJPRFVDVDpcbiAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVXaXNobGlzdFByb2R1Y3RMb2codHlwZSwgd2lzaGxpc3QsIHByb2R1Y3QpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVXaXNobGlzdE9wZXJhdGlvbkxvZyh0eXBlOiBXaXNobGlzdExvZ1R5cGUsIHdpc2hsaXN0OiBXaXNobGlzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHRoaXMuZ2V0T3BlcmF0aW9uVHlwZUZyb21XaXNobGlzdExvZ1R5cGUodHlwZSlcblxuICAgIGF3YWl0IHRoaXMubG9nUmVwb3NpdG9yeS5jcmVhdGUoe1xuICAgICAgY29sbGVjdGlvbjogJ3dpc2hsaXN0JyxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICBvcGVyYXRpb24sXG4gICAgICBkb2N1bWVudElkOiB3aXNobGlzdC5pZCxcbiAgICAgIGRvY3VtZW50OiB0aGlzLmJ1aWxkV2lzaGxpc3RMb2dEb2N1bWVudCh3aXNobGlzdCwgdHlwZSksXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY3JlYXRlV2lzaGxpc3RQcm9kdWN0TG9nKHR5cGU6IFdpc2hsaXN0TG9nVHlwZSwgd2lzaGxpc3Q6IFdpc2hsaXN0LCBwcm9kdWN0OiBQcm9kdWN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2dSZXBvc2l0b3J5LmNyZWF0ZSh7XG4gICAgICBjb2xsZWN0aW9uOiAnd2lzaGxpc3QnLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIG9wZXJhdGlvbjogJ1VQREFURScsXG4gICAgICBkb2N1bWVudElkOiB3aXNobGlzdC5pZCxcbiAgICAgIGRvY3VtZW50OiB7XG4gICAgICAgIC4uLnRoaXMuYnVpbGRXaXNobGlzdExvZ0RvY3VtZW50KHdpc2hsaXN0LCB0eXBlKSxcbiAgICAgICAgLi4udGhpcy5idWlsZFByb2R1Y3RMb2dEYXRhKHByb2R1Y3QpLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcGVyYXRpb25UeXBlRnJvbVdpc2hsaXN0TG9nVHlwZSh0eXBlOiBXaXNobGlzdExvZ1R5cGUpOiAnQ1JFQVRFJyB8ICdVUERBVEUnIHwgJ0RFTEVURScge1xuICAgIGlmICh0eXBlID09PSBXaXNobGlzdExvZ1R5cGUuQ1JFQVRFKSByZXR1cm4gJ0NSRUFURSdcblxuICAgIGlmICh0eXBlID09PSBXaXNobGlzdExvZ1R5cGUuVVBEQVRFKSByZXR1cm4gJ1VQREFURSdcblxuICAgIHJldHVybiAnREVMRVRFJ1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFdpc2hsaXN0TG9nRG9jdW1lbnQod2lzaGxpc3Q6IFdpc2hsaXN0LCB0eXBlOiBXaXNobGlzdExvZ1R5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHdpc2hsaXN0LmlkLFxuICAgICAgc2hvcDogdGhpcy5zaG9wLFxuICAgICAgbmFtZTogd2lzaGxpc3QubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB3aXNobGlzdC5kZXNjcmlwdGlvbixcbiAgICAgIHB1Ymxpc2hlZDogd2lzaGxpc3QucHVibGlzaGVkLFxuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIHBlcnNvblR5cGU6IHdpc2hsaXN0LnBlcnNvblR5cGUsXG4gICAgICBwZXJzb25JZDogd2lzaGxpc3QucGVyc29uSWQsXG4gICAgICBwZXJzb25OYW1lOiB3aXNobGlzdC5wZXJzb25OYW1lLFxuICAgICAgcGVyc29uSXNTdWJzY3JpYmVyOiB3aXNobGlzdC5wZXJzb25Jc1N1YnNjcmliZXIsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFByb2R1Y3RMb2dEYXRhKHByb2R1Y3Q6IFByb2R1Y3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvZHVjdElkOiBwcm9kdWN0LmlkLFxuICAgICAgcHJvZHVjdEVBTjogcHJvZHVjdC5FQU4sXG4gICAgICBwcm9kdWN0U0tVOiBwcm9kdWN0LnNrdSxcbiAgICAgIHByb2R1Y3ROYW1lOiBwcm9kdWN0Lm5hbWUsXG4gICAgICBwcm9kdWN0QnJhbmQ6IHByb2R1Y3QuYnJhbmQsXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,18 +0,0 @@
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