@infrab4a/connect-angular 5.4.0-beta.10 → 5.5.0-alpha.0

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 (196) hide show
  1. package/angular-connect.module.d.ts +36 -36
  2. package/angular-elastic-search.module.d.ts +9 -9
  3. package/angular-firebase-auth.module.d.ts +11 -11
  4. package/angular-firestore.module.d.ts +17 -17
  5. package/angular-hasura-graphql.module.d.ts +14 -14
  6. package/angular-vertex-search.module.d.ts +9 -9
  7. package/consts/backend-url.const.d.ts +1 -1
  8. package/consts/category-structure.d.ts +1 -1
  9. package/consts/default-shop.const.d.ts +1 -1
  10. package/consts/es-config.const.d.ts +1 -1
  11. package/consts/firebase-const.d.ts +4 -4
  12. package/consts/hasura-options.const.d.ts +1 -1
  13. package/consts/index.d.ts +8 -8
  14. package/consts/persistence.const.d.ts +1 -1
  15. package/consts/storage-base-url.const.d.ts +1 -1
  16. package/consts/vertex-config.const.d.ts +1 -1
  17. package/esm2020/angular-connect.module.mjs +291 -291
  18. package/esm2020/angular-elastic-search.module.mjs +34 -34
  19. package/esm2020/angular-firebase-auth.module.mjs +141 -141
  20. package/esm2020/angular-firestore.module.mjs +541 -541
  21. package/esm2020/angular-hasura-graphql.module.mjs +333 -333
  22. package/esm2020/angular-vertex-search.module.mjs +34 -34
  23. package/esm2020/consts/backend-url.const.mjs +2 -2
  24. package/esm2020/consts/category-structure.mjs +2 -2
  25. package/esm2020/consts/default-shop.const.mjs +2 -2
  26. package/esm2020/consts/es-config.const.mjs +2 -2
  27. package/esm2020/consts/firebase-const.mjs +5 -5
  28. package/esm2020/consts/hasura-options.const.mjs +2 -2
  29. package/esm2020/consts/index.mjs +9 -9
  30. package/esm2020/consts/persistence.const.mjs +2 -2
  31. package/esm2020/consts/storage-base-url.const.mjs +2 -2
  32. package/esm2020/consts/vertex-config.const.mjs +2 -2
  33. package/esm2020/helpers/index.mjs +2 -2
  34. package/esm2020/helpers/mobile-operation-system-checker.helper.mjs +7 -7
  35. package/esm2020/index.mjs +7 -7
  36. package/esm2020/infrab4a-connect-angular.mjs +4 -4
  37. package/esm2020/interfaces/catalog-strategies.interface.mjs +2 -2
  38. package/esm2020/interfaces/category-facades.interface.mjs +2 -2
  39. package/esm2020/interfaces/index.mjs +3 -3
  40. package/esm2020/persistence/cookie-data-persistence.mjs +22 -22
  41. package/esm2020/persistence/data-persistence.mjs +2 -2
  42. package/esm2020/persistence/index.mjs +3 -3
  43. package/esm2020/services/auth.service.mjs +37 -37
  44. package/esm2020/services/cart/cart-services.facade.mjs +21 -21
  45. package/esm2020/services/cart/index.mjs +2 -2
  46. package/esm2020/services/cart.service.mjs +73 -73
  47. package/esm2020/services/catalog/adapters/category-structure.adapter.mjs +2 -2
  48. package/esm2020/services/catalog/adapters/index.mjs +4 -4
  49. package/esm2020/services/catalog/adapters/new-category-structure.adapter.mjs +43 -43
  50. package/esm2020/services/catalog/adapters/old-category-structure.adapter.mjs +23 -23
  51. package/esm2020/services/catalog/catalog.service.mjs +111 -111
  52. package/esm2020/services/catalog/category.service.mjs +39 -39
  53. package/esm2020/services/catalog/context/catalog-search.context.mjs +40 -40
  54. package/esm2020/services/catalog/enums/index.mjs +2 -2
  55. package/esm2020/services/catalog/enums/product-sorts.enum.mjs +11 -11
  56. package/esm2020/services/catalog/facades/catalog-service.facade.mjs +32 -32
  57. package/esm2020/services/catalog/facades/catalog-strategies.facade.mjs +17 -17
  58. package/esm2020/services/catalog/facades/category-repository.facade.mjs +20 -20
  59. package/esm2020/services/catalog/facades/category-service.facade.mjs +30 -30
  60. package/esm2020/services/catalog/facades/index.mjs +6 -6
  61. package/esm2020/services/catalog/facades/product-catalog.facade.mjs +21 -21
  62. package/esm2020/services/catalog/helpers/brand-manager.helper.mjs +57 -57
  63. package/esm2020/services/catalog/helpers/catalog-filter.helper.mjs +44 -44
  64. package/esm2020/services/catalog/helpers/catalog-sort.helper.mjs +52 -52
  65. package/esm2020/services/catalog/helpers/index.mjs +5 -5
  66. package/esm2020/services/catalog/helpers/product-fields.helper.mjs +40 -40
  67. package/esm2020/services/catalog/index.mjs +8 -8
  68. package/esm2020/services/catalog/models/category-with-tree.model.mjs +10 -10
  69. package/esm2020/services/catalog/models/index.mjs +2 -2
  70. package/esm2020/services/catalog/services/catalog-helpers.service.mjs +33 -33
  71. package/esm2020/services/catalog/services/catalog-operations.facade.mjs +26 -26
  72. package/esm2020/services/catalog/services/catalog-repository.service.mjs +25 -25
  73. package/esm2020/services/catalog/services/index.mjs +5 -5
  74. package/esm2020/services/catalog/services/product-management.facade.mjs +25 -25
  75. package/esm2020/services/catalog/strategies/category-search.strategy.mjs +133 -133
  76. package/esm2020/services/catalog/strategies/index.mjs +4 -4
  77. package/esm2020/services/catalog/strategies/profile-search.strategy.mjs +42 -42
  78. package/esm2020/services/catalog/strategies/term-search.strategy.mjs +123 -123
  79. package/esm2020/services/catalog/strategies/types/strategy-params.type.mjs +2 -2
  80. package/esm2020/services/catalog/types/fetch-products-options.type.mjs +2 -2
  81. package/esm2020/services/catalog/types/fetch-products-params.type.mjs +2 -2
  82. package/esm2020/services/catalog/types/fetch-products-response.type.mjs +2 -2
  83. package/esm2020/services/catalog/types/index.mjs +6 -6
  84. package/esm2020/services/catalog/types/method-params.type.mjs +2 -2
  85. package/esm2020/services/catalog/types/product-sort.type.mjs +2 -2
  86. package/esm2020/services/catalog/wishlist.service.mjs +254 -254
  87. package/esm2020/services/checkout/checkout-dependencies.facade.mjs +20 -20
  88. package/esm2020/services/checkout/checkout-repositories.facade.mjs +20 -20
  89. package/esm2020/services/checkout/index.mjs +3 -3
  90. package/esm2020/services/checkout-subscription.service.mjs +55 -55
  91. package/esm2020/services/checkout.service.mjs +106 -106
  92. package/esm2020/services/coupon/coupon-repositories.facade.mjs +24 -24
  93. package/esm2020/services/coupon/index.mjs +2 -2
  94. package/esm2020/services/coupon/types/coupon-params.type.mjs +2 -2
  95. package/esm2020/services/coupon.service.mjs +248 -248
  96. package/esm2020/services/helpers/index.mjs +2 -2
  97. package/esm2020/services/helpers/util.helper.mjs +18 -18
  98. package/esm2020/services/home-shop/home-shop-repositories.facade.mjs +24 -24
  99. package/esm2020/services/home-shop/index.mjs +2 -2
  100. package/esm2020/services/home-shop.service.mjs +119 -119
  101. package/esm2020/services/index.mjs +11 -11
  102. package/esm2020/services/order-product-review.service.mjs +110 -110
  103. package/esm2020/services/order.service.mjs +30 -30
  104. package/esm2020/services/shared/configuration.facade.mjs +29 -29
  105. package/esm2020/services/shared/index.mjs +2 -2
  106. package/esm2020/services/types/index.mjs +5 -5
  107. package/esm2020/services/types/pending-product-review.type.mjs +2 -2
  108. package/esm2020/services/types/product-review-create.type.mjs +2 -2
  109. package/esm2020/services/types/required-checkout-data.type.mjs +2 -2
  110. package/esm2020/services/types/required-checkout-subscription-data.type.mjs +2 -2
  111. package/esm2020/types/firebase-app-config.type.mjs +2 -2
  112. package/esm2020/types/index.mjs +2 -2
  113. package/fesm2015/infrab4a-connect-angular.mjs +3348 -3348
  114. package/fesm2015/infrab4a-connect-angular.mjs.map +1 -1
  115. package/fesm2020/infrab4a-connect-angular.mjs +3244 -3244
  116. package/fesm2020/infrab4a-connect-angular.mjs.map +1 -1
  117. package/helpers/index.d.ts +1 -1
  118. package/helpers/mobile-operation-system-checker.helper.d.ts +3 -3
  119. package/index.d.ts +6 -6
  120. package/interfaces/catalog-strategies.interface.d.ts +31 -31
  121. package/interfaces/category-facades.interface.d.ts +6 -6
  122. package/interfaces/index.d.ts +2 -2
  123. package/package.json +2 -2
  124. package/persistence/cookie-data-persistence.d.ts +10 -10
  125. package/persistence/data-persistence.d.ts +6 -6
  126. package/persistence/index.d.ts +2 -2
  127. package/services/auth.service.d.ts +18 -18
  128. package/services/cart/cart-services.facade.d.ts +12 -12
  129. package/services/cart/index.d.ts +1 -1
  130. package/services/cart.service.d.ts +26 -26
  131. package/services/catalog/adapters/category-structure.adapter.d.ts +4 -4
  132. package/services/catalog/adapters/index.d.ts +3 -3
  133. package/services/catalog/adapters/new-category-structure.adapter.d.ts +12 -12
  134. package/services/catalog/adapters/old-category-structure.adapter.d.ts +10 -10
  135. package/services/catalog/catalog.service.d.ts +24 -24
  136. package/services/catalog/category.service.d.ts +22 -22
  137. package/services/catalog/context/catalog-search.context.d.ts +14 -14
  138. package/services/catalog/enums/index.d.ts +1 -1
  139. package/services/catalog/enums/product-sorts.enum.d.ts +9 -9
  140. package/services/catalog/facades/catalog-service.facade.d.ts +15 -15
  141. package/services/catalog/facades/catalog-strategies.facade.d.ts +10 -10
  142. package/services/catalog/facades/category-repository.facade.d.ts +9 -9
  143. package/services/catalog/facades/category-service.facade.d.ts +15 -15
  144. package/services/catalog/facades/index.d.ts +5 -5
  145. package/services/catalog/facades/product-catalog.facade.d.ts +10 -10
  146. package/services/catalog/helpers/brand-manager.helper.d.ts +14 -14
  147. package/services/catalog/helpers/catalog-filter.helper.d.ts +8 -8
  148. package/services/catalog/helpers/catalog-sort.helper.d.ts +7 -7
  149. package/services/catalog/helpers/index.d.ts +4 -4
  150. package/services/catalog/helpers/product-fields.helper.d.ts +7 -7
  151. package/services/catalog/index.d.ts +7 -7
  152. package/services/catalog/models/category-with-tree.model.d.ts +4 -4
  153. package/services/catalog/models/index.d.ts +1 -1
  154. package/services/catalog/services/catalog-helpers.service.d.ts +17 -17
  155. package/services/catalog/services/catalog-operations.facade.d.ts +13 -13
  156. package/services/catalog/services/catalog-repository.service.d.ts +12 -12
  157. package/services/catalog/services/index.d.ts +4 -4
  158. package/services/catalog/services/product-management.facade.d.ts +12 -12
  159. package/services/catalog/strategies/category-search.strategy.d.ts +19 -19
  160. package/services/catalog/strategies/index.d.ts +3 -3
  161. package/services/catalog/strategies/profile-search.strategy.d.ts +14 -14
  162. package/services/catalog/strategies/term-search.strategy.d.ts +20 -20
  163. package/services/catalog/strategies/types/strategy-params.type.d.ts +58 -58
  164. package/services/catalog/types/fetch-products-options.type.d.ts +8 -8
  165. package/services/catalog/types/fetch-products-params.type.d.ts +25 -25
  166. package/services/catalog/types/fetch-products-response.type.d.ts +19 -19
  167. package/services/catalog/types/index.d.ts +5 -5
  168. package/services/catalog/types/method-params.type.d.ts +17 -17
  169. package/services/catalog/types/product-sort.type.d.ts +2 -2
  170. package/services/catalog/wishlist.service.d.ts +59 -59
  171. package/services/checkout/checkout-dependencies.facade.d.ts +10 -10
  172. package/services/checkout/checkout-repositories.facade.d.ts +9 -9
  173. package/services/checkout/index.d.ts +2 -2
  174. package/services/checkout-subscription.service.d.ts +19 -19
  175. package/services/checkout.service.d.ts +30 -30
  176. package/services/coupon/coupon-repositories.facade.d.ts +10 -10
  177. package/services/coupon/index.d.ts +1 -1
  178. package/services/coupon/types/coupon-params.type.d.ts +13 -13
  179. package/services/coupon.service.d.ts +36 -36
  180. package/services/helpers/index.d.ts +1 -1
  181. package/services/helpers/util.helper.d.ts +3 -3
  182. package/services/home-shop/home-shop-repositories.facade.d.ts +10 -10
  183. package/services/home-shop/index.d.ts +1 -1
  184. package/services/home-shop.service.d.ts +26 -26
  185. package/services/index.d.ts +10 -10
  186. package/services/order-product-review.service.d.ts +16 -16
  187. package/services/order.service.d.ts +13 -13
  188. package/services/shared/configuration.facade.d.ts +12 -12
  189. package/services/shared/index.d.ts +1 -1
  190. package/services/types/index.d.ts +4 -4
  191. package/services/types/pending-product-review.type.d.ts +12 -12
  192. package/services/types/product-review-create.type.d.ts +14 -14
  193. package/services/types/required-checkout-data.type.d.ts +2 -2
  194. package/services/types/required-checkout-subscription-data.type.d.ts +2 -2
  195. package/types/firebase-app-config.type.d.ts +1 -1
  196. package/types/index.d.ts +1 -1
@@ -1,291 +1,291 @@
1
- import { NgModule } from '@angular/core';
2
- import { FirebaseApp, getApp, initializeApp, provideFirebaseApp } from '@angular/fire/app';
3
- import { initializeAppCheck, provideAppCheck } from '@angular/fire/app-check';
4
- import { getStorage, provideStorage, Storage } from '@angular/fire/storage';
5
- import { FirebaseFileUploaderService, isNil, ProductsVertexSearch, UpdateUserImage, } from '@infrab4a/connect';
6
- import { AngularElasticSeachModule } from './angular-elastic-search.module';
7
- import { AngularFirebaseAuthModule } from './angular-firebase-auth.module';
8
- import { AngularFirestoreModule } from './angular-firestore.module';
9
- import { AngularHasuraGraphQLModule } from './angular-hasura-graphql.module';
10
- import { AngularVertexSeachModule } from './angular-vertex-search.module';
11
- import { APP_CHECK_PROVIDER, BACKEND_URL, CATEGORY_STRUCTURE, DEFAULT_SHOP, ES_CONFIG, FIREBASE_APP_NAME, FIREBASE_OPTIONS, HASURA_OPTIONS, PERSISTENCE_PROVIDER, VERTEX_CONFIG, } from './consts';
12
- import { STORAGE_BASE_URL } from './consts/storage-base-url.const';
13
- import { CookieDataPersistence } from './persistence';
14
- import { AuthService, CartService, CatalogService, CategoryService, CheckoutService, CheckoutSubscriptionService, CouponService, HomeShopService, OrderProductReviewService, OrderService, WishlistService, } from './services';
15
- import { CartServicesFacade } from './services/cart';
16
- import { NewCategoryStructureAdapter, OldCategoryStructureAdapter } from './services/catalog/adapters';
17
- import { CatalogSearchContext } from './services/catalog/context/catalog-search.context';
18
- import { CatalogServiceFacade, CatalogStrategiesFacade, CategoryRepositoryFacade, CategoryServiceFacade, ProductCatalogFacade, } from './services/catalog/facades';
19
- import { BrandManagerHelper, CatalogFilterHelper, CatalogSortHelper, ProductFieldsHelper, } from './services/catalog/helpers';
20
- import { CatalogHelpersService, CatalogOperationsFacade, CatalogRepositoryService, ProductManagementFacade, } from './services/catalog/services';
21
- import { CategorySearchStrategy, ProfileSearchStrategy, TermSearchStrategy } from './services/catalog/strategies';
22
- import { CheckoutDependenciesFacade, CheckoutRepositoriesFacade } from './services/checkout';
23
- import { CouponRepositoriesFacade } from './services/coupon';
24
- import { HomeShopRepositoriesFacade } from './services/home-shop';
25
- import { ConfigurationFacade } from './services/shared';
26
- import * as i0 from "@angular/core";
27
- import * as i1 from "@angular/fire/app";
28
- import * as i2 from "@angular/fire/app-check";
29
- import * as i3 from "@angular/fire/storage";
30
- export class AngularConnectModule {
31
- static initializeApp(defaultShop, options, nameOrConfig) {
32
- return {
33
- ngModule: AngularConnectModule,
34
- providers: [
35
- ...this.buildCoreProviders(nameOrConfig, options),
36
- ...this.buildConditionalProviders(defaultShop, options),
37
- ],
38
- };
39
- }
40
- static buildCoreProviders(nameOrConfig, options) {
41
- return [
42
- { provide: FIREBASE_APP_NAME, useValue: nameOrConfig },
43
- { provide: APP_CHECK_PROVIDER, useValue: options.appCheckProvider },
44
- {
45
- provide: CATEGORY_STRUCTURE,
46
- useClass: this.selectCategoryStructureAdapter(options.oldCategoryStructure),
47
- },
48
- { provide: PERSISTENCE_PROVIDER, useClass: options?.persistenceProvider || CookieDataPersistence },
49
- ];
50
- }
51
- static buildConditionalProviders(defaultShop, options) {
52
- return [
53
- ...this.createProviderIfExists(DEFAULT_SHOP, defaultShop),
54
- ...this.createProviderIfExists(FIREBASE_OPTIONS, options.firebase),
55
- ...this.createProviderIfExists(ES_CONFIG, options.elasticSearch),
56
- ...this.createProviderIfExists(VERTEX_CONFIG, options.vertexConfig),
57
- ...this.createProviderIfExists(HASURA_OPTIONS, options.hasura),
58
- ...this.createProviderIfExists(BACKEND_URL, options.backendUrl),
59
- ...this.createProviderIfExists(STORAGE_BASE_URL, options.storageBaseUrl),
60
- ];
61
- }
62
- static selectCategoryStructureAdapter(oldCategoryStructure) {
63
- return isNil(oldCategoryStructure) || oldCategoryStructure
64
- ? OldCategoryStructureAdapter
65
- : NewCategoryStructureAdapter;
66
- }
67
- static createProviderIfExists(token, value) {
68
- return isNil(value) ? [] : [{ provide: token, useValue: value }];
69
- }
70
- }
71
- AngularConnectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularConnectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
72
- AngularConnectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.0", ngImport: i0, type: AngularConnectModule, imports: [i1.FirebaseAppModule, i2.AppCheckModule, i3.StorageModule, AngularElasticSeachModule,
73
- AngularVertexSeachModule,
74
- AngularFirebaseAuthModule,
75
- AngularFirestoreModule,
76
- AngularHasuraGraphQLModule] });
77
- AngularConnectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularConnectModule, providers: [
78
- AuthService,
79
- CartService,
80
- CatalogService,
81
- CategoryService,
82
- CheckoutService,
83
- CheckoutSubscriptionService,
84
- CouponService,
85
- HomeShopService,
86
- OrderService,
87
- WishlistService,
88
- ConfigurationFacade,
89
- CartServicesFacade,
90
- CheckoutRepositoriesFacade,
91
- CheckoutDependenciesFacade,
92
- CategoryRepositoryFacade,
93
- ProductCatalogFacade,
94
- CatalogServiceFacade,
95
- CategoryServiceFacade,
96
- CatalogStrategiesFacade,
97
- CatalogOperationsFacade,
98
- ProductManagementFacade,
99
- {
100
- provide: 'ProductServicesFacade',
101
- useFactory: (productStockNotificationRepository, categoryRepository, productSearch) => ({
102
- productStockNotificationRepository,
103
- categoryRepository,
104
- productSearch,
105
- }),
106
- deps: ['ProductStockNotificationRepository', 'CategoryRepository', 'ProductSearch'],
107
- },
108
- CatalogFilterHelper,
109
- CatalogSortHelper,
110
- ProductFieldsHelper,
111
- BrandManagerHelper,
112
- CatalogRepositoryService,
113
- CatalogHelpersService,
114
- CategorySearchStrategy,
115
- TermSearchStrategy,
116
- ProfileSearchStrategy,
117
- {
118
- provide: CatalogSearchContext,
119
- useFactory: (categoryStrategy, termStrategy, profileStrategy) => {
120
- return new CatalogSearchContext(categoryStrategy, termStrategy, profileStrategy);
121
- },
122
- deps: [CategorySearchStrategy, TermSearchStrategy, ProfileSearchStrategy],
123
- },
124
- {
125
- provide: UpdateUserImage,
126
- useFactory: (userRepository, fileUploader) => {
127
- return new UpdateUserImage(userRepository, fileUploader);
128
- },
129
- deps: ['UserRepository', 'FileUploaderService'],
130
- },
131
- {
132
- provide: 'FileUploaderService',
133
- useFactory: (storage, baseUrl) => {
134
- return new FirebaseFileUploaderService(storage, baseUrl);
135
- },
136
- deps: [Storage, STORAGE_BASE_URL],
137
- },
138
- {
139
- provide: 'ProductSearch',
140
- useExisting: ProductsVertexSearch,
141
- },
142
- CouponRepositoriesFacade,
143
- HomeShopRepositoriesFacade,
144
- OrderProductReviewService,
145
- ], imports: [provideFirebaseApp((injector) => {
146
- const appName = injector.get(FIREBASE_APP_NAME);
147
- try {
148
- const app = appName ? getApp(appName) : getApp();
149
- return app;
150
- }
151
- catch (error) {
152
- console.warn('Firebase app not found, initializing new app');
153
- if (error instanceof Error)
154
- console.error(error.message);
155
- return initializeApp(injector.get(FIREBASE_OPTIONS), appName);
156
- }
157
- }),
158
- provideAppCheck((injector) => {
159
- const app = injector.get(FirebaseApp);
160
- try {
161
- const provider = injector.get(APP_CHECK_PROVIDER);
162
- if (provider)
163
- return initializeAppCheck(app, {
164
- provider,
165
- isTokenAutoRefreshEnabled: true,
166
- });
167
- }
168
- catch (error) {
169
- if (error instanceof Error)
170
- console.error(error.message);
171
- return;
172
- }
173
- }),
174
- provideStorage((injector) => getStorage(injector.get(FirebaseApp))),
175
- AngularElasticSeachModule,
176
- AngularVertexSeachModule,
177
- AngularFirebaseAuthModule,
178
- AngularFirestoreModule,
179
- AngularHasuraGraphQLModule] });
180
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularConnectModule, decorators: [{
181
- type: NgModule,
182
- args: [{
183
- imports: [
184
- provideFirebaseApp((injector) => {
185
- const appName = injector.get(FIREBASE_APP_NAME);
186
- try {
187
- const app = appName ? getApp(appName) : getApp();
188
- return app;
189
- }
190
- catch (error) {
191
- console.warn('Firebase app not found, initializing new app');
192
- if (error instanceof Error)
193
- console.error(error.message);
194
- return initializeApp(injector.get(FIREBASE_OPTIONS), appName);
195
- }
196
- }),
197
- provideAppCheck((injector) => {
198
- const app = injector.get(FirebaseApp);
199
- try {
200
- const provider = injector.get(APP_CHECK_PROVIDER);
201
- if (provider)
202
- return initializeAppCheck(app, {
203
- provider,
204
- isTokenAutoRefreshEnabled: true,
205
- });
206
- }
207
- catch (error) {
208
- if (error instanceof Error)
209
- console.error(error.message);
210
- return;
211
- }
212
- }),
213
- provideStorage((injector) => getStorage(injector.get(FirebaseApp))),
214
- AngularElasticSeachModule,
215
- AngularVertexSeachModule,
216
- AngularFirebaseAuthModule,
217
- AngularFirestoreModule,
218
- AngularHasuraGraphQLModule,
219
- ],
220
- providers: [
221
- AuthService,
222
- CartService,
223
- CatalogService,
224
- CategoryService,
225
- CheckoutService,
226
- CheckoutSubscriptionService,
227
- CouponService,
228
- HomeShopService,
229
- OrderService,
230
- WishlistService,
231
- ConfigurationFacade,
232
- CartServicesFacade,
233
- CheckoutRepositoriesFacade,
234
- CheckoutDependenciesFacade,
235
- CategoryRepositoryFacade,
236
- ProductCatalogFacade,
237
- CatalogServiceFacade,
238
- CategoryServiceFacade,
239
- CatalogStrategiesFacade,
240
- CatalogOperationsFacade,
241
- ProductManagementFacade,
242
- {
243
- provide: 'ProductServicesFacade',
244
- useFactory: (productStockNotificationRepository, categoryRepository, productSearch) => ({
245
- productStockNotificationRepository,
246
- categoryRepository,
247
- productSearch,
248
- }),
249
- deps: ['ProductStockNotificationRepository', 'CategoryRepository', 'ProductSearch'],
250
- },
251
- CatalogFilterHelper,
252
- CatalogSortHelper,
253
- ProductFieldsHelper,
254
- BrandManagerHelper,
255
- CatalogRepositoryService,
256
- CatalogHelpersService,
257
- CategorySearchStrategy,
258
- TermSearchStrategy,
259
- ProfileSearchStrategy,
260
- {
261
- provide: CatalogSearchContext,
262
- useFactory: (categoryStrategy, termStrategy, profileStrategy) => {
263
- return new CatalogSearchContext(categoryStrategy, termStrategy, profileStrategy);
264
- },
265
- deps: [CategorySearchStrategy, TermSearchStrategy, ProfileSearchStrategy],
266
- },
267
- {
268
- provide: UpdateUserImage,
269
- useFactory: (userRepository, fileUploader) => {
270
- return new UpdateUserImage(userRepository, fileUploader);
271
- },
272
- deps: ['UserRepository', 'FileUploaderService'],
273
- },
274
- {
275
- provide: 'FileUploaderService',
276
- useFactory: (storage, baseUrl) => {
277
- return new FirebaseFileUploaderService(storage, baseUrl);
278
- },
279
- deps: [Storage, STORAGE_BASE_URL],
280
- },
281
- {
282
- provide: 'ProductSearch',
283
- useExisting: ProductsVertexSearch,
284
- },
285
- CouponRepositoriesFacade,
286
- HomeShopRepositoriesFacade,
287
- OrderProductReviewService,
288
- ],
289
- }]
290
- }] });
291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1jb25uZWN0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvYW5ndWxhci1jb25uZWN0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFFBQVEsRUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDM0csT0FBTyxFQUFtQixrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RixPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUMzRSxPQUFPLEVBR0wsMkJBQTJCLEVBQzNCLEtBQUssRUFDTCxvQkFBb0IsRUFFcEIsZUFBZSxHQUdoQixNQUFNLG1CQUFtQixDQUFBO0FBRTFCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzNFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBd0IsTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsYUFBYSxHQUNkLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FB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cnQgeyBJbmplY3RvciwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBGaXJlYmFzZUFwcCwgRmlyZWJhc2VPcHRpb25zLCBnZXRBcHAsIGluaXRpYWxpemVBcHAsIHByb3ZpZGVGaXJlYmFzZUFwcCB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXBwJ1xyXG5pbXBvcnQgeyBBcHBDaGVja09wdGlvbnMsIGluaXRpYWxpemVBcHBDaGVjaywgcHJvdmlkZUFwcENoZWNrIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9hcHAtY2hlY2snXHJcbmltcG9ydCB7IGdldFN0b3JhZ2UsIHByb3ZpZGVTdG9yYWdlLCBTdG9yYWdlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9zdG9yYWdlJ1xyXG5pbXBvcnQge1xyXG4gIEF4aW9zRWxhc3RpY1NlYXJjaENvbmZpZyxcclxuICBGaWxlVXBsb2FkZXJTZXJ2aWNlLFxyXG4gIEZpcmViYXNlRmlsZVVwbG9hZGVyU2VydmljZSxcclxuICBpc05pbCxcclxuICBQcm9kdWN0c1ZlcnRleFNlYXJjaCxcclxuICBTaG9wcyxcclxuICBVcGRhdGVVc2VySW1hZ2UsXHJcbiAgVXNlclJlcG9zaXRvcnksXHJcbiAgVmVydGV4U2VhcmNoQ29uZmlnLFxyXG59IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xyXG5cclxuaW1wb3J0IHsgQW5ndWxhckVsYXN0aWNTZWFjaE1vZHVsZSB9IGZyb20gJy4vYW5ndWxhci1lbGFzdGljLXNlYXJjaC5tb2R1bGUnXHJcbmltcG9ydCB7IEFuZ3VsYXJGaXJlYmFzZUF1dGhNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItZmlyZWJhc2UtYXV0aC5tb2R1bGUnXHJcbmltcG9ydCB7IEFuZ3VsYXJGaXJlc3RvcmVNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItZmlyZXN0b3JlLm1vZHVsZSdcclxuaW1wb3J0IHsgQW5ndWxhckhhc3VyYUdyYXBoUUxNb2R1bGUsIEhhc3VyYUdyYXBoUUxPcHRpb25zIH0gZnJvbSAnLi9hbmd1bGFyLWhhc3VyYS1ncmFwaHFsLm1vZHVsZSdcclxuaW1wb3J0IHsgQW5ndWxhclZlcnRleFNlYWNoTW9kdWxlIH0gZnJvbSAnLi9hbmd1bGFyLXZlcnRleC1zZWFyY2gubW9kdWxlJ1xyXG5pbXBvcnQge1xyXG4gIEFQUF9DSEVDS19QUk9WSURFUixcclxuICBCQUNLRU5EX1VSTCxcclxuICBDQVRFR09SWV9TVFJVQ1RVUkUsXHJcbiAgREVGQVVMVF9TSE9QLFxyXG4gIEVTX0NPTkZJRyxcclxuICBGSVJFQkFTRV9BUFBfTkFNRSxcclxuICBGSVJFQkFTRV9PUFRJT05TLFxyXG4gIEhBU1VSQV9PUFRJT05TLFxyXG4gIFBFUlNJU1RFTkNFX1BST1ZJREVSLFxyXG4gIFZFUlRFWF9DT05GSUcsXHJcbn0gZnJvbSAnLi9jb25zdHMnXHJcbmltcG9ydCB7IFNUT1JBR0VfQkFTRV9VUkwgfSBmcm9tICcuL2NvbnN0cy9zdG9yYWdlLWJhc2UtdXJsLmNvbnN0J1xyXG5pbXBvcnQgeyBDb29raWVEYXRhUGVyc2lzdGVuY2UsIERhdGFQZXJzaXN0ZW5jZSB9IGZyb20gJy4vcGVyc2lzdGVuY2UnXHJcbmltcG9ydCB7XHJcbiAgQXV0aFNlcnZpY2UsXHJcbiAgQ2FydFNlcnZpY2UsXHJcbiAgQ2F0YWxvZ1NlcnZpY2UsXHJcbiAgQ2F0ZWdvcnlTZXJ2aWNlLFxyXG4gIENoZWNrb3V0U2VydmljZSxcclxuICBDaGVja291dFN1YnNjcmlwdGlvblNlcnZpY2UsXHJcbiAgQ291cG9uU2VydmljZSxcclxuICBIb21lU2hvcFNlcnZpY2UsXHJcbiAgT3JkZXJQcm9kdWN0UmV2aWV3U2VydmljZSxcclxuICBPcmRlclNlcnZpY2UsXHJcbiAgV2lzaGxpc3RTZXJ2aWNlLFxyXG59IGZyb20gJy4vc2VydmljZXMnXHJcbmltcG9ydCB7IENhcnRTZXJ2aWNlc0ZhY2FkZSB9IGZyb20gJy4vc2VydmljZXMvY2FydCdcclxuaW1wb3J0IHsgTmV3Q2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyLCBPbGRDYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIgfSBmcm9tICcuL3NlcnZpY2VzL2NhdGFsb2cvYWRhcHRlcnMnXHJcbmltcG9ydCB7IENhdGFsb2dTZWFyY2hDb250ZXh0IH0gZnJvbSAnLi9zZXJ2aWNlcy9jYXRhbG9nL2NvbnRleHQvY2F0YWxvZy1zZWFyY2guY29udGV4dCdcclxuaW1wb3J0IHtcclxuICBDYXRhbG9nU2VydmljZUZhY2FkZSxcclxuICBDYXRhbG9nU3RyYXRlZ2llc0ZhY2FkZSxcclxuICBDYXRlZ29yeVJlcG9zaXRvcnlGYWNhZGUsXHJcbiAgQ2F0ZWdvcnlTZXJ2aWNlRmFjYWRlLFxyXG4gIFByb2R1Y3RDYXRhbG9nRmFjYWRlLFxyXG59IGZyb20gJy4vc2VydmljZXMvY2F0YWxvZy9mYWNhZGVzJ1xyXG5pbXBvcnQge1xyXG4gIEJyYW5kTWFuYWdlckhlbHBlcixcclxuICBDYXRhbG9nRmlsdGVySGVscGVyLFxyXG4gIENhdGFsb2dTb3J0SGVscGVyLFxyXG4gIFByb2R1Y3RGaWVsZHNIZWxwZXIsXHJcbn0gZnJvbSAnLi9zZXJ2aWNlcy9jYXRhbG9nL2hlbHBlcnMnXHJcbmltcG9ydCB7XHJcbiAgQ2F0YWxvZ0hlbHBlcnNTZXJ2aWNlLFxyXG4gIENhdGFsb2dPcGVyYXRpb25zRmFjYWRlLFxyXG4gIENhdGFsb2dSZXBvc2l0b3J5U2VydmljZSxcclxuICBQcm9kdWN0TWFuYWdlbWVudEZhY2FkZSxcclxufSBmcm9tICcuL3NlcnZpY2VzL2NhdGFsb2cvc2VydmljZXMnXHJcbmltcG9ydCB7IENhdGVnb3J5U2VhcmNoU3RyYXRlZ3ksIFByb2ZpbGVTZWFyY2hTdHJhdGVneSwgVGVybVNlYXJjaFN0cmF0ZWd5IH0gZnJvbSAnLi9zZXJ2aWNlcy9jYXRhbG9nL3N0cmF0ZWdpZXMnXHJcbmltcG9ydCB7IENoZWNrb3V0RGVwZW5kZW5jaWVzRmFjYWRlLCBDaGVja291dFJlcG9zaXRvcmllc0ZhY2FkZSB9IGZyb20gJy4vc2VydmljZXMvY2hlY2tvdXQnXHJcbmltcG9ydCB7IENvdXBvblJlcG9zaXRvcmllc0ZhY2FkZSB9IGZyb20gJy4vc2VydmljZXMvY291cG9uJ1xyXG5pbXBvcnQgeyBIb21lU2hvcFJlcG9zaXRvcmllc0ZhY2FkZSB9IGZyb20gJy4vc2VydmljZXMvaG9tZS1zaG9wJ1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRmFjYWRlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zaGFyZWQnXHJcbmltcG9ydCB7IEZpcmViYXNlQXBwQ29uZmlnIH0gZnJvbSAnLi90eXBlcydcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgcHJvdmlkZUZpcmViYXNlQXBwKChpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcclxuICAgICAgY29uc3QgYXBwTmFtZSA9IGluamVjdG9yLmdldDxzdHJpbmc+KEZJUkVCQVNFX0FQUF9OQU1FKVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBhcHAgPSBhcHBOYW1lID8gZ2V0QXBwKGFwcE5hbWUpIDogZ2V0QXBwKClcclxuXHJcbiAgICAgICAgcmV0dXJuIGFwcFxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignRmlyZWJhc2UgYXBwIG5vdCBmb3VuZCwgaW5pdGlhbGl6aW5nIG5ldyBhcHAnKVxyXG5cclxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlKVxyXG5cclxuICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZUFwcChpbmplY3Rvci5nZXQoRklSRUJBU0VfT1BUSU9OUyksIGFwcE5hbWUpXHJcbiAgICAgIH1cclxuICAgIH0pLFxyXG4gICAgcHJvdmlkZUFwcENoZWNrKChpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcclxuICAgICAgY29uc3QgYXBwID0gaW5qZWN0b3IuZ2V0KEZpcmViYXNlQXBwKVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBwcm92aWRlciA9IGluamVjdG9yLmdldDxBcHBDaGVja09wdGlvbnNbJ3Byb3ZpZGVyJ10+KEFQUF9DSEVDS19QUk9WSURFUilcclxuXHJcbiAgICAgICAgaWYgKHByb3ZpZGVyKVxyXG4gICAgICAgICAgcmV0dXJuIGluaXRpYWxpemVBcHBDaGVjayhhcHAsIHtcclxuICAgICAgICAgICAgcHJvdmlkZXIsXHJcbiAgICAgICAgICAgIGlzVG9rZW5BdXRvUmVmcmVzaEVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UpXHJcblxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICB9KSxcclxuICAgIHByb3ZpZGVTdG9yYWdlKChpbmplY3RvcjogSW5qZWN0b3IpID0+IGdldFN0b3JhZ2UoaW5qZWN0b3IuZ2V0KEZpcmViYXNlQXBwKSkpLFxyXG4gICAgQW5ndWxhckVsYXN0aWNTZWFjaE1vZHVsZSxcclxuICAgIEFuZ3VsYXJWZXJ0ZXhTZWFjaE1vZHVsZSxcclxuICAgIEFuZ3VsYXJGaXJlYmFzZUF1dGhNb2R1bGUsXHJcbiAgICBBbmd1bGFyRmlyZXN0b3JlTW9kdWxlLFxyXG4gICAgQW5ndWxhckhhc3VyYUdyYXBoUUxNb2R1bGUsXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIEF1dGhTZXJ2aWNlLFxyXG4gICAgQ2FydFNlcnZpY2UsXHJcbiAgICBDYXRhbG9nU2VydmljZSxcclxuICAgIENhdGVnb3J5U2VydmljZSxcclxuICAgIENoZWNrb3V0U2VydmljZSxcclxuICAgIENoZWNrb3V0U3Vic2NyaXB0aW9uU2VydmljZSxcclxuICAgIENvdXBvblNlcnZpY2UsXHJcbiAgICBIb21lU2hvcFNlcnZpY2UsXHJcbiAgICBPcmRlclNlcnZpY2UsXHJcbiAgICBXaXNobGlzdFNlcnZpY2UsXHJcbiAgICBDb25maWd1cmF0aW9uRmFjYWRlLFxyXG4gICAgQ2FydFNlcnZpY2VzRmFjYWRlLFxyXG4gICAgQ2hlY2tvdXRSZXBvc2l0b3JpZXNGYWNhZGUsXHJcbiAgICBDaGVja291dERlcGVuZGVuY2llc0ZhY2FkZSxcclxuICAgIENhdGVnb3J5UmVwb3NpdG9yeUZhY2FkZSxcclxuICAgIFByb2R1Y3RDYXRhbG9nRmFjYWRlLFxyXG4gICAgQ2F0YWxvZ1NlcnZpY2VGYWNhZGUsXHJcbiAgICBDYXRlZ29yeVNlcnZpY2VGYWNhZGUsXHJcbiAgICBDYXRhbG9nU3RyYXRlZ2llc0ZhY2FkZSxcclxuICAgIENhdGFsb2dPcGVyYXRpb25zRmFjYWRlLFxyXG4gICAgUHJvZHVjdE1hbmFnZW1lbnRGYWNhZGUsXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6ICdQcm9kdWN0U2VydmljZXNGYWNhZGUnLFxyXG4gICAgICB1c2VGYWN0b3J5OiAocHJvZHVjdFN0b2NrTm90aWZpY2F0aW9uUmVwb3NpdG9yeTogYW55LCBjYXRlZ29yeVJlcG9zaXRvcnk6IGFueSwgcHJvZHVjdFNlYXJjaDogYW55KSA9PiAoe1xyXG4gICAgICAgIHByb2R1Y3RTdG9ja05vdGlmaWNhdGlvblJlcG9zaXRvcnksXHJcbiAgICAgICAgY2F0ZWdvcnlSZXBvc2l0b3J5LFxyXG4gICAgICAgIHByb2R1Y3RTZWFyY2gsXHJcbiAgICAgIH0pLFxyXG4gICAgICBkZXBzOiBbJ1Byb2R1Y3RTdG9ja05vdGlmaWNhdGlvblJlcG9zaXRvcnknLCAnQ2F0ZWdvcnlSZXBvc2l0b3J5JywgJ1Byb2R1Y3RTZWFyY2gnXSxcclxuICAgIH0sXHJcbiAgICBDYXRhbG9nRmlsdGVySGVscGVyLFxyXG4gICAgQ2F0YWxvZ1NvcnRIZWxwZXIsXHJcbiAgICBQcm9kdWN0RmllbGRzSGVscGVyLFxyXG4gICAgQnJhbmRNYW5hZ2VySGVscGVyLFxyXG4gICAgQ2F0YWxvZ1JlcG9zaXRvcnlTZXJ2aWNlLFxyXG4gICAgQ2F0YWxvZ0hlbHBlcnNTZXJ2aWNlLFxyXG4gICAgQ2F0ZWdvcnlTZWFyY2hTdHJhdGVneSxcclxuICAgIFRlcm1TZWFyY2hTdHJhdGVneSxcclxuICAgIFByb2ZpbGVTZWFyY2hTdHJhdGVneSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogQ2F0YWxvZ1NlYXJjaENvbnRleHQsXHJcbiAgICAgIHVzZUZhY3Rvcnk6IChcclxuICAgICAgICBjYXRlZ29yeVN0cmF0ZWd5OiBDYXRlZ29yeVNlYXJjaFN0cmF0ZWd5LFxyXG4gICAgICAgIHRlcm1TdHJhdGVneTogVGVybVNlYXJjaFN0cmF0ZWd5LFxyXG4gICAgICAgIHByb2ZpbGVTdHJhdGVneTogUHJvZmlsZVNlYXJjaFN0cmF0ZWd5LFxyXG4gICAgICApID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IENhdGFsb2dTZWFyY2hDb250ZXh0KGNhdGVnb3J5U3RyYXRlZ3ksIHRlcm1TdHJhdGVneSwgcHJvZmlsZVN0cmF0ZWd5KVxyXG4gICAgICB9LFxyXG4gICAgICBkZXBzOiBbQ2F0ZWdvcnlTZWFyY2hTdHJhdGVneSwgVGVybVNlYXJjaFN0cmF0ZWd5LCBQcm9maWxlU2VhcmNoU3RyYXRlZ3ldLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogVXBkYXRlVXNlckltYWdlLFxyXG4gICAgICB1c2VGYWN0b3J5OiAodXNlclJlcG9zaXRvcnk6IFVzZXJSZXBvc2l0b3J5LCBmaWxlVXBsb2FkZXI6IEZpbGVVcGxvYWRlclNlcnZpY2UpID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVVzZXJJbWFnZSh1c2VyUmVwb3NpdG9yeSwgZmlsZVVwbG9hZGVyKVxyXG4gICAgICB9LFxyXG4gICAgICBkZXBzOiBbJ1VzZXJSZXBvc2l0b3J5JywgJ0ZpbGVVcGxvYWRlclNlcnZpY2UnXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6ICdGaWxlVXBsb2FkZXJTZXJ2aWNlJyxcclxuICAgICAgdXNlRmFjdG9yeTogKHN0b3JhZ2U6IFN0b3JhZ2UsIGJhc2VVcmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlyZWJhc2VGaWxlVXBsb2FkZXJTZXJ2aWNlKHN0b3JhZ2UsIGJhc2VVcmwpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlcHM6IFtTdG9yYWdlLCBTVE9SQUdFX0JBU0VfVVJMXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6ICdQcm9kdWN0U2VhcmNoJyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFByb2R1Y3RzVmVydGV4U2VhcmNoLFxyXG4gICAgfSxcclxuICAgIENvdXBvblJlcG9zaXRvcmllc0ZhY2FkZSxcclxuICAgIEhvbWVTaG9wUmVwb3NpdG9yaWVzRmFjYWRlLFxyXG4gICAgT3JkZXJQcm9kdWN0UmV2aWV3U2VydmljZSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5ndWxhckNvbm5lY3RNb2R1bGUge1xyXG4gIHN0YXRpYyBpbml0aWFsaXplQXBwKFxyXG4gICAgZGVmYXVsdFNob3A6IFNob3BzLFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBmaXJlYmFzZT86IEZpcmViYXNlT3B0aW9uc1xyXG4gICAgICBlbGFzdGljU2VhcmNoPzogQXhpb3NFbGFzdGljU2VhcmNoQ29uZmlnXHJcbiAgICAgIHZlcnRleENvbmZpZz86IFZlcnRleFNlYXJjaENvbmZpZ1xyXG4gICAgICBoYXN1cmE6IEhhc3VyYUdyYXBoUUxPcHRpb25zXHJcbiAgICAgIGJhY2tlbmRVcmw6IHN0cmluZ1xyXG4gICAgICBvbGRDYXRlZ29yeVN0cnVjdHVyZT86IGJvb2xlYW5cclxuICAgICAgc3RvcmFnZUJhc2VVcmw/OiBzdHJpbmdcclxuICAgICAgcGVyc2lzdGVuY2VQcm92aWRlcj86IFR5cGU8RGF0YVBlcnNpc3RlbmNlPlxyXG4gICAgICBhcHBDaGVja1Byb3ZpZGVyPzogQXBwQ2hlY2tPcHRpb25zWydwcm92aWRlciddXHJcbiAgICB9LFxyXG4gICAgbmFtZU9yQ29uZmlnPzogc3RyaW5nIHwgRmlyZWJhc2VBcHBDb25maWcsXHJcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxBbmd1bGFyQ29ubmVjdE1vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IEFuZ3VsYXJDb25uZWN0TW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAuLi50aGlzLmJ1aWxkQ29yZVByb3ZpZGVycyhuYW1lT3JDb25maWcsIG9wdGlvbnMpLFxyXG4gICAgICAgIC4uLnRoaXMuYnVpbGRDb25kaXRpb25hbFByb3ZpZGVycyhkZWZhdWx0U2hvcCwgb3B0aW9ucyksXHJcbiAgICAgIF0sXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBidWlsZENvcmVQcm92aWRlcnMoXHJcbiAgICBuYW1lT3JDb25maWc6IHN0cmluZyB8IEZpcmViYXNlQXBwQ29uZmlnLFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBhcHBDaGVja1Byb3ZpZGVyPzogQXBwQ2hlY2tPcHRpb25zWydwcm92aWRlciddXHJcbiAgICAgIG9sZENhdGVnb3J5U3RydWN0dXJlPzogYm9vbGVhblxyXG4gICAgICBwZXJzaXN0ZW5jZVByb3ZpZGVyPzogVHlwZTxEYXRhUGVyc2lzdGVuY2U+XHJcbiAgICB9LFxyXG4gICkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgeyBwcm92aWRlOiBGSVJFQkFTRV9BUFBfTkFNRSwgdXNlVmFsdWU6IG5hbWVPckNvbmZpZyB9LFxyXG4gICAgICB7IHByb3ZpZGU6IEFQUF9DSEVDS19QUk9WSURFUiwgdXNlVmFsdWU6IG9wdGlvbnMuYXBwQ2hlY2tQcm92aWRlciB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcHJvdmlkZTogQ0FURUdPUllfU1RSVUNUVVJFLFxyXG4gICAgICAgIHVzZUNsYXNzOiB0aGlzLnNlbGVjdENhdGVnb3J5U3RydWN0dXJlQWRhcHRlcihvcHRpb25zLm9sZENhdGVnb3J5U3RydWN0dXJlKSxcclxuICAgICAgfSxcclxuICAgICAgeyBwcm92aWRlOiBQRVJTSVNURU5DRV9QUk9WSURFUiwgdXNlQ2xhc3M6IG9wdGlvbnM/LnBlcnNpc3RlbmNlUHJvdmlkZXIgfHwgQ29va2llRGF0YVBlcnNpc3RlbmNlIH0sXHJcbiAgICBdXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBidWlsZENvbmRpdGlvbmFsUHJvdmlkZXJzKFxyXG4gICAgZGVmYXVsdFNob3A6IFNob3BzLFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBmaXJlYmFzZT86IEZpcmViYXNlT3B0aW9uc1xyXG4gICAgICBlbGFzdGljU2VhcmNoPzogQXhpb3NFbGFzdGljU2VhcmNoQ29uZmlnXHJcbiAgICAgIHZlcnRleENvbmZpZz86IFZlcnRleFNlYXJjaENvbmZpZ1xyXG4gICAgICBoYXN1cmE6IEhhc3VyYUdyYXBoUUxPcHRpb25zXHJcbiAgICAgIGJhY2tlbmRVcmw6IHN0cmluZ1xyXG4gICAgICBzdG9yYWdlQmFzZVVybD86IHN0cmluZ1xyXG4gICAgfSxcclxuICApIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIC4uLnRoaXMuY3JlYXRlUHJvdmlkZXJJZkV4aXN0cyhERUZBVUxUX1NIT1AsIGRlZmF1bHRTaG9wKSxcclxuICAgICAgLi4udGhpcy5jcmVhdGVQcm92aWRlcklmRXhpc3RzKEZJUkVCQVNFX09QVElPTlMsIG9wdGlvbnMuZmlyZWJhc2UpLFxyXG4gICAgICAuLi50aGlzLmNyZWF0ZVByb3ZpZGVySWZFeGlzdHMoRVNfQ09ORklHLCBvcHRpb25zLmVsYXN0aWNTZWFyY2gpLFxyXG4gICAgICAuLi50aGlzLmNyZWF0ZVByb3ZpZGVySWZFeGlzdHMoVkVSVEVYX0NPTkZJRywgb3B0aW9ucy52ZXJ0ZXhDb25maWcpLFxyXG4gICAgICAuLi50aGlzLmNyZWF0ZVByb3ZpZGVySWZFeGlzdHMoSEFTVVJBX09QVElPTlMsIG9wdGlvbnMuaGFzdXJhKSxcclxuICAgICAgLi4udGhpcy5jcmVhdGVQcm92aWRlcklmRXhpc3RzKEJBQ0tFTkRfVVJMLCBvcHRpb25zLmJhY2tlbmRVcmwpLFxyXG4gICAgICAuLi50aGlzLmNyZWF0ZVByb3ZpZGVySWZFeGlzdHMoU1RPUkFHRV9CQVNFX1VSTCwgb3B0aW9ucy5zdG9yYWdlQmFzZVVybCksXHJcbiAgICBdXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBzZWxlY3RDYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIob2xkQ2F0ZWdvcnlTdHJ1Y3R1cmU/OiBib29sZWFuKSB7XHJcbiAgICByZXR1cm4gaXNOaWwob2xkQ2F0ZWdvcnlTdHJ1Y3R1cmUpIHx8IG9sZENhdGVnb3J5U3RydWN0dXJlXHJcbiAgICAgID8gT2xkQ2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyXHJcbiAgICAgIDogTmV3Q2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVQcm92aWRlcklmRXhpc3RzKHRva2VuOiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiBpc05pbCh2YWx1ZSkgPyBbXSA6IFt7IHByb3ZpZGU6IHRva2VuLCB1c2VWYWx1ZTogdmFsdWUgfV1cclxuICB9XHJcbn1cclxuIl19
1
+ import { NgModule } from '@angular/core';
2
+ import { FirebaseApp, getApp, initializeApp, provideFirebaseApp } from '@angular/fire/app';
3
+ import { initializeAppCheck, provideAppCheck } from '@angular/fire/app-check';
4
+ import { getStorage, provideStorage, Storage } from '@angular/fire/storage';
5
+ import { FirebaseFileUploaderService, isNil, ProductsVertexSearch, UpdateUserImage, } from '@infrab4a/connect';
6
+ import { AngularElasticSeachModule } from './angular-elastic-search.module';
7
+ import { AngularFirebaseAuthModule } from './angular-firebase-auth.module';
8
+ import { AngularFirestoreModule } from './angular-firestore.module';
9
+ import { AngularHasuraGraphQLModule } from './angular-hasura-graphql.module';
10
+ import { AngularVertexSeachModule } from './angular-vertex-search.module';
11
+ import { APP_CHECK_PROVIDER, BACKEND_URL, CATEGORY_STRUCTURE, DEFAULT_SHOP, ES_CONFIG, FIREBASE_APP_NAME, FIREBASE_OPTIONS, HASURA_OPTIONS, PERSISTENCE_PROVIDER, VERTEX_CONFIG, } from './consts';
12
+ import { STORAGE_BASE_URL } from './consts/storage-base-url.const';
13
+ import { CookieDataPersistence } from './persistence';
14
+ import { AuthService, CartService, CatalogService, CategoryService, CheckoutService, CheckoutSubscriptionService, CouponService, HomeShopService, OrderProductReviewService, OrderService, WishlistService, } from './services';
15
+ import { CartServicesFacade } from './services/cart';
16
+ import { NewCategoryStructureAdapter, OldCategoryStructureAdapter } from './services/catalog/adapters';
17
+ import { CatalogSearchContext } from './services/catalog/context/catalog-search.context';
18
+ import { CatalogServiceFacade, CatalogStrategiesFacade, CategoryRepositoryFacade, CategoryServiceFacade, ProductCatalogFacade, } from './services/catalog/facades';
19
+ import { BrandManagerHelper, CatalogFilterHelper, CatalogSortHelper, ProductFieldsHelper, } from './services/catalog/helpers';
20
+ import { CatalogHelpersService, CatalogOperationsFacade, CatalogRepositoryService, ProductManagementFacade, } from './services/catalog/services';
21
+ import { CategorySearchStrategy, ProfileSearchStrategy, TermSearchStrategy } from './services/catalog/strategies';
22
+ import { CheckoutDependenciesFacade, CheckoutRepositoriesFacade } from './services/checkout';
23
+ import { CouponRepositoriesFacade } from './services/coupon';
24
+ import { HomeShopRepositoriesFacade } from './services/home-shop';
25
+ import { ConfigurationFacade } from './services/shared';
26
+ import * as i0 from "@angular/core";
27
+ import * as i1 from "@angular/fire/app";
28
+ import * as i2 from "@angular/fire/app-check";
29
+ import * as i3 from "@angular/fire/storage";
30
+ export class AngularConnectModule {
31
+ static initializeApp(defaultShop, options, nameOrConfig) {
32
+ return {
33
+ ngModule: AngularConnectModule,
34
+ providers: [
35
+ ...this.buildCoreProviders(nameOrConfig, options),
36
+ ...this.buildConditionalProviders(defaultShop, options),
37
+ ],
38
+ };
39
+ }
40
+ static buildCoreProviders(nameOrConfig, options) {
41
+ return [
42
+ { provide: FIREBASE_APP_NAME, useValue: nameOrConfig },
43
+ { provide: APP_CHECK_PROVIDER, useValue: options.appCheckProvider },
44
+ {
45
+ provide: CATEGORY_STRUCTURE,
46
+ useClass: this.selectCategoryStructureAdapter(options.oldCategoryStructure),
47
+ },
48
+ { provide: PERSISTENCE_PROVIDER, useClass: options?.persistenceProvider || CookieDataPersistence },
49
+ ];
50
+ }
51
+ static buildConditionalProviders(defaultShop, options) {
52
+ return [
53
+ ...this.createProviderIfExists(DEFAULT_SHOP, defaultShop),
54
+ ...this.createProviderIfExists(FIREBASE_OPTIONS, options.firebase),
55
+ ...this.createProviderIfExists(ES_CONFIG, options.elasticSearch),
56
+ ...this.createProviderIfExists(VERTEX_CONFIG, options.vertexConfig),
57
+ ...this.createProviderIfExists(HASURA_OPTIONS, options.hasura),
58
+ ...this.createProviderIfExists(BACKEND_URL, options.backendUrl),
59
+ ...this.createProviderIfExists(STORAGE_BASE_URL, options.storageBaseUrl),
60
+ ];
61
+ }
62
+ static selectCategoryStructureAdapter(oldCategoryStructure) {
63
+ return isNil(oldCategoryStructure) || oldCategoryStructure
64
+ ? OldCategoryStructureAdapter
65
+ : NewCategoryStructureAdapter;
66
+ }
67
+ static createProviderIfExists(token, value) {
68
+ return isNil(value) ? [] : [{ provide: token, useValue: value }];
69
+ }
70
+ }
71
+ AngularConnectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularConnectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
72
+ AngularConnectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.0", ngImport: i0, type: AngularConnectModule, imports: [i1.FirebaseAppModule, i2.AppCheckModule, i3.StorageModule, AngularElasticSeachModule,
73
+ AngularVertexSeachModule,
74
+ AngularFirebaseAuthModule,
75
+ AngularFirestoreModule,
76
+ AngularHasuraGraphQLModule] });
77
+ AngularConnectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularConnectModule, providers: [
78
+ AuthService,
79
+ CartService,
80
+ CatalogService,
81
+ CategoryService,
82
+ CheckoutService,
83
+ CheckoutSubscriptionService,
84
+ CouponService,
85
+ HomeShopService,
86
+ OrderService,
87
+ WishlistService,
88
+ ConfigurationFacade,
89
+ CartServicesFacade,
90
+ CheckoutRepositoriesFacade,
91
+ CheckoutDependenciesFacade,
92
+ CategoryRepositoryFacade,
93
+ ProductCatalogFacade,
94
+ CatalogServiceFacade,
95
+ CategoryServiceFacade,
96
+ CatalogStrategiesFacade,
97
+ CatalogOperationsFacade,
98
+ ProductManagementFacade,
99
+ {
100
+ provide: 'ProductServicesFacade',
101
+ useFactory: (productStockNotificationRepository, categoryRepository, productSearch) => ({
102
+ productStockNotificationRepository,
103
+ categoryRepository,
104
+ productSearch,
105
+ }),
106
+ deps: ['ProductStockNotificationRepository', 'CategoryRepository', 'ProductSearch'],
107
+ },
108
+ CatalogFilterHelper,
109
+ CatalogSortHelper,
110
+ ProductFieldsHelper,
111
+ BrandManagerHelper,
112
+ CatalogRepositoryService,
113
+ CatalogHelpersService,
114
+ CategorySearchStrategy,
115
+ TermSearchStrategy,
116
+ ProfileSearchStrategy,
117
+ {
118
+ provide: CatalogSearchContext,
119
+ useFactory: (categoryStrategy, termStrategy, profileStrategy) => {
120
+ return new CatalogSearchContext(categoryStrategy, termStrategy, profileStrategy);
121
+ },
122
+ deps: [CategorySearchStrategy, TermSearchStrategy, ProfileSearchStrategy],
123
+ },
124
+ {
125
+ provide: UpdateUserImage,
126
+ useFactory: (userRepository, fileUploader) => {
127
+ return new UpdateUserImage(userRepository, fileUploader);
128
+ },
129
+ deps: ['UserRepository', 'FileUploaderService'],
130
+ },
131
+ {
132
+ provide: 'FileUploaderService',
133
+ useFactory: (storage, baseUrl) => {
134
+ return new FirebaseFileUploaderService(storage, baseUrl);
135
+ },
136
+ deps: [Storage, STORAGE_BASE_URL],
137
+ },
138
+ {
139
+ provide: 'ProductSearch',
140
+ useExisting: ProductsVertexSearch,
141
+ },
142
+ CouponRepositoriesFacade,
143
+ HomeShopRepositoriesFacade,
144
+ OrderProductReviewService,
145
+ ], imports: [provideFirebaseApp((injector) => {
146
+ const appName = injector.get(FIREBASE_APP_NAME);
147
+ try {
148
+ const app = appName ? getApp(appName) : getApp();
149
+ return app;
150
+ }
151
+ catch (error) {
152
+ console.warn('Firebase app not found, initializing new app');
153
+ if (error instanceof Error)
154
+ console.error(error.message);
155
+ return initializeApp(injector.get(FIREBASE_OPTIONS), appName);
156
+ }
157
+ }),
158
+ provideAppCheck((injector) => {
159
+ const app = injector.get(FirebaseApp);
160
+ try {
161
+ const provider = injector.get(APP_CHECK_PROVIDER);
162
+ if (provider)
163
+ return initializeAppCheck(app, {
164
+ provider,
165
+ isTokenAutoRefreshEnabled: true,
166
+ });
167
+ }
168
+ catch (error) {
169
+ if (error instanceof Error)
170
+ console.error(error.message);
171
+ return;
172
+ }
173
+ }),
174
+ provideStorage((injector) => getStorage(injector.get(FirebaseApp))),
175
+ AngularElasticSeachModule,
176
+ AngularVertexSeachModule,
177
+ AngularFirebaseAuthModule,
178
+ AngularFirestoreModule,
179
+ AngularHasuraGraphQLModule] });
180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularConnectModule, decorators: [{
181
+ type: NgModule,
182
+ args: [{
183
+ imports: [
184
+ provideFirebaseApp((injector) => {
185
+ const appName = injector.get(FIREBASE_APP_NAME);
186
+ try {
187
+ const app = appName ? getApp(appName) : getApp();
188
+ return app;
189
+ }
190
+ catch (error) {
191
+ console.warn('Firebase app not found, initializing new app');
192
+ if (error instanceof Error)
193
+ console.error(error.message);
194
+ return initializeApp(injector.get(FIREBASE_OPTIONS), appName);
195
+ }
196
+ }),
197
+ provideAppCheck((injector) => {
198
+ const app = injector.get(FirebaseApp);
199
+ try {
200
+ const provider = injector.get(APP_CHECK_PROVIDER);
201
+ if (provider)
202
+ return initializeAppCheck(app, {
203
+ provider,
204
+ isTokenAutoRefreshEnabled: true,
205
+ });
206
+ }
207
+ catch (error) {
208
+ if (error instanceof Error)
209
+ console.error(error.message);
210
+ return;
211
+ }
212
+ }),
213
+ provideStorage((injector) => getStorage(injector.get(FirebaseApp))),
214
+ AngularElasticSeachModule,
215
+ AngularVertexSeachModule,
216
+ AngularFirebaseAuthModule,
217
+ AngularFirestoreModule,
218
+ AngularHasuraGraphQLModule,
219
+ ],
220
+ providers: [
221
+ AuthService,
222
+ CartService,
223
+ CatalogService,
224
+ CategoryService,
225
+ CheckoutService,
226
+ CheckoutSubscriptionService,
227
+ CouponService,
228
+ HomeShopService,
229
+ OrderService,
230
+ WishlistService,
231
+ ConfigurationFacade,
232
+ CartServicesFacade,
233
+ CheckoutRepositoriesFacade,
234
+ CheckoutDependenciesFacade,
235
+ CategoryRepositoryFacade,
236
+ ProductCatalogFacade,
237
+ CatalogServiceFacade,
238
+ CategoryServiceFacade,
239
+ CatalogStrategiesFacade,
240
+ CatalogOperationsFacade,
241
+ ProductManagementFacade,
242
+ {
243
+ provide: 'ProductServicesFacade',
244
+ useFactory: (productStockNotificationRepository, categoryRepository, productSearch) => ({
245
+ productStockNotificationRepository,
246
+ categoryRepository,
247
+ productSearch,
248
+ }),
249
+ deps: ['ProductStockNotificationRepository', 'CategoryRepository', 'ProductSearch'],
250
+ },
251
+ CatalogFilterHelper,
252
+ CatalogSortHelper,
253
+ ProductFieldsHelper,
254
+ BrandManagerHelper,
255
+ CatalogRepositoryService,
256
+ CatalogHelpersService,
257
+ CategorySearchStrategy,
258
+ TermSearchStrategy,
259
+ ProfileSearchStrategy,
260
+ {
261
+ provide: CatalogSearchContext,
262
+ useFactory: (categoryStrategy, termStrategy, profileStrategy) => {
263
+ return new CatalogSearchContext(categoryStrategy, termStrategy, profileStrategy);
264
+ },
265
+ deps: [CategorySearchStrategy, TermSearchStrategy, ProfileSearchStrategy],
266
+ },
267
+ {
268
+ provide: UpdateUserImage,
269
+ useFactory: (userRepository, fileUploader) => {
270
+ return new UpdateUserImage(userRepository, fileUploader);
271
+ },
272
+ deps: ['UserRepository', 'FileUploaderService'],
273
+ },
274
+ {
275
+ provide: 'FileUploaderService',
276
+ useFactory: (storage, baseUrl) => {
277
+ return new FirebaseFileUploaderService(storage, baseUrl);
278
+ },
279
+ deps: [Storage, STORAGE_BASE_URL],
280
+ },
281
+ {
282
+ provide: 'ProductSearch',
283
+ useExisting: ProductsVertexSearch,
284
+ },
285
+ CouponRepositoriesFacade,
286
+ HomeShopRepositoriesFacade,
287
+ OrderProductReviewService,
288
+ ],
289
+ }]
290
+ }] });
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1jb25uZWN0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvYW5ndWxhci1jb25uZWN0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFFBQVEsRUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDM0csT0FBTyxFQUFtQixrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RixPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUMzRSxPQUFPLEVBR0wsMkJBQTJCLEVBQzNCLEtBQUssRUFDTCxvQkFBb0IsRUFFcEIsZUFBZSxHQUdoQixNQUFNLG1CQUFtQixDQUFBO0FBRTFCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzNFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBd0IsTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsYUFBYSxHQUNkLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FB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cnQgeyBJbmplY3RvciwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRmlyZWJhc2VBcHAsIEZpcmViYXNlT3B0aW9ucywgZ2V0QXBwLCBpbml0aWFsaXplQXBwLCBwcm92aWRlRmlyZWJhc2VBcHAgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcCdcbmltcG9ydCB7IEFwcENoZWNrT3B0aW9ucywgaW5pdGlhbGl6ZUFwcENoZWNrLCBwcm92aWRlQXBwQ2hlY2sgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcC1jaGVjaydcbmltcG9ydCB7IGdldFN0b3JhZ2UsIHByb3ZpZGVTdG9yYWdlLCBTdG9yYWdlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9zdG9yYWdlJ1xuaW1wb3J0IHtcbiAgQXhpb3NFbGFzdGljU2VhcmNoQ29uZmlnLFxuICBGaWxlVXBsb2FkZXJTZXJ2aWNlLFxuICBGaXJlYmFzZUZpbGVVcGxvYWRlclNlcnZpY2UsXG4gIGlzTmlsLFxuICBQcm9kdWN0c1ZlcnRleFNlYXJjaCxcbiAgU2hvcHMsXG4gIFVwZGF0ZVVzZXJJbWFnZSxcbiAgVXNlclJlcG9zaXRvcnksXG4gIFZlcnRleFNlYXJjaENvbmZpZyxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5cbmltcG9ydCB7IEFuZ3VsYXJFbGFzdGljU2VhY2hNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItZWxhc3RpYy1zZWFyY2gubW9kdWxlJ1xuaW1wb3J0IHsgQW5ndWxhckZpcmViYXNlQXV0aE1vZHVsZSB9IGZyb20gJy4vYW5ndWxhci1maXJlYmFzZS1hdXRoLm1vZHVsZSdcbmltcG9ydCB7IEFuZ3VsYXJGaXJlc3RvcmVNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItZmlyZXN0b3JlLm1vZHVsZSdcbmltcG9ydCB7IEFuZ3VsYXJIYXN1cmFHcmFwaFFMTW9kdWxlLCBIYXN1cmFHcmFwaFFMT3B0aW9ucyB9IGZyb20gJy4vYW5ndWxhci1oYXN1cmEtZ3JhcGhxbC5tb2R1bGUnXG5pbXBvcnQgeyBBbmd1bGFyVmVydGV4U2VhY2hNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItdmVydGV4LXNlYXJjaC5tb2R1bGUnXG5pbXBvcnQge1xuICBBUFBfQ0hFQ0tfUFJPVklERVIsXG4gIEJBQ0tFTkRfVVJMLFxuICBDQVRFR09SWV9TVFJVQ1RVUkUsXG4gIERFRkFVTFRfU0hPUCxcbiAgRVNfQ09ORklHLFxuICBGSVJFQkFTRV9BUFBfTkFNRSxcbiAgRklSRUJBU0VfT1BUSU9OUyxcbiAgSEFTVVJBX09QVElPTlMsXG4gIFBFUlNJU1RFTkNFX1BST1ZJREVSLFxuICBWRVJURVhfQ09ORklHLFxufSBmcm9tICcuL2NvbnN0cydcbmltcG9ydCB7IFNUT1JBR0VfQkFTRV9VUkwgfSBmcm9tICcuL2NvbnN0cy9zdG9yYWdlLWJhc2UtdXJsLmNvbnN0J1xuaW1wb3J0IHsgQ29va2llRGF0YVBlcnNpc3RlbmNlLCBEYXRhUGVyc2lzdGVuY2UgfSBmcm9tICcuL3BlcnNpc3RlbmNlJ1xuaW1wb3J0IHtcbiAgQXV0aFNlcnZpY2UsXG4gIENhcnRTZXJ2aWNlLFxuICBDYXRhbG9nU2VydmljZSxcbiAgQ2F0ZWdvcnlTZXJ2aWNlLFxuICBDaGVja291dFNlcnZpY2UsXG4gIENoZWNrb3V0U3Vic2NyaXB0aW9uU2VydmljZSxcbiAgQ291cG9uU2VydmljZSxcbiAgSG9tZVNob3BTZXJ2aWNlLFxuICBPcmRlclByb2R1Y3RSZXZpZXdTZXJ2aWNlLFxuICBPcmRlclNlcnZpY2UsXG4gIFdpc2hsaXN0U2VydmljZSxcbn0gZnJvbSAnLi9zZXJ2aWNlcydcbmltcG9ydCB7IENhcnRTZXJ2aWNlc0ZhY2FkZSB9IGZyb20gJy4vc2VydmljZXMvY2FydCdcbmltcG9ydCB7IE5ld0NhdGVnb3J5U3RydWN0dXJlQWRhcHRlciwgT2xkQ2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyIH0gZnJvbSAnLi9zZXJ2aWNlcy9jYXRhbG9nL2FkYXB0ZXJzJ1xuaW1wb3J0IHsgQ2F0YWxvZ1NlYXJjaENvbnRleHQgfSBmcm9tICcuL3NlcnZpY2VzL2NhdGFsb2cvY29udGV4dC9jYXRhbG9nLXNlYXJjaC5jb250ZXh0J1xuaW1wb3J0IHtcbiAgQ2F0YWxvZ1NlcnZpY2VGYWNhZGUsXG4gIENhdGFsb2dTdHJhdGVnaWVzRmFjYWRlLFxuICBDYXRlZ29yeVJlcG9zaXRvcnlGYWNhZGUsXG4gIENhdGVnb3J5U2VydmljZUZhY2FkZSxcbiAgUHJvZHVjdENhdGFsb2dGYWNhZGUsXG59IGZyb20gJy4vc2VydmljZXMvY2F0YWxvZy9mYWNhZGVzJ1xuaW1wb3J0IHtcbiAgQnJhbmRNYW5hZ2VySGVscGVyLFxuICBDYXRhbG9nRmlsdGVySGVscGVyLFxuICBDYXRhbG9nU29ydEhlbHBlcixcbiAgUHJvZHVjdEZpZWxkc0hlbHBlcixcbn0gZnJvbSAnLi9zZXJ2aWNlcy9jYXRhbG9nL2hlbHBlcnMnXG5pbXBvcnQge1xuICBDYXRhbG9nSGVscGVyc1NlcnZpY2UsXG4gIENhdGFsb2dPcGVyYXRpb25zRmFjYWRlLFxuICBDYXRhbG9nUmVwb3NpdG9yeVNlcnZpY2UsXG4gIFByb2R1Y3RNYW5hZ2VtZW50RmFjYWRlLFxufSBmcm9tICcuL3NlcnZpY2VzL2NhdGFsb2cvc2VydmljZXMnXG5pbXBvcnQgeyBDYXRlZ29yeVNlYXJjaFN0cmF0ZWd5LCBQcm9maWxlU2VhcmNoU3RyYXRlZ3ksIFRlcm1TZWFyY2hTdHJhdGVneSB9IGZyb20gJy4vc2VydmljZXMvY2F0YWxvZy9zdHJhdGVnaWVzJ1xuaW1wb3J0IHsgQ2hlY2tvdXREZXBlbmRlbmNpZXNGYWNhZGUsIENoZWNrb3V0UmVwb3NpdG9yaWVzRmFjYWRlIH0gZnJvbSAnLi9zZXJ2aWNlcy9jaGVja291dCdcbmltcG9ydCB7IENvdXBvblJlcG9zaXRvcmllc0ZhY2FkZSB9IGZyb20gJy4vc2VydmljZXMvY291cG9uJ1xuaW1wb3J0IHsgSG9tZVNob3BSZXBvc2l0b3JpZXNGYWNhZGUgfSBmcm9tICcuL3NlcnZpY2VzL2hvbWUtc2hvcCdcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25GYWNhZGUgfSBmcm9tICcuL3NlcnZpY2VzL3NoYXJlZCdcbmltcG9ydCB7IEZpcmViYXNlQXBwQ29uZmlnIH0gZnJvbSAnLi90eXBlcydcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIHByb3ZpZGVGaXJlYmFzZUFwcCgoaW5qZWN0b3I6IEluamVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBhcHBOYW1lID0gaW5qZWN0b3IuZ2V0PHN0cmluZz4oRklSRUJBU0VfQVBQX05BTUUpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IGFwcE5hbWUgPyBnZXRBcHAoYXBwTmFtZSkgOiBnZXRBcHAoKVxuXG4gICAgICAgIHJldHVybiBhcHBcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRmlyZWJhc2UgYXBwIG5vdCBmb3VuZCwgaW5pdGlhbGl6aW5nIG5ldyBhcHAnKVxuXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UpXG5cbiAgICAgICAgcmV0dXJuIGluaXRpYWxpemVBcHAoaW5qZWN0b3IuZ2V0KEZJUkVCQVNFX09QVElPTlMpLCBhcHBOYW1lKVxuICAgICAgfVxuICAgIH0pLFxuICAgIHByb3ZpZGVBcHBDaGVjaygoaW5qZWN0b3I6IEluamVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBpbmplY3Rvci5nZXQoRmlyZWJhc2VBcHApXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gaW5qZWN0b3IuZ2V0PEFwcENoZWNrT3B0aW9uc1sncHJvdmlkZXInXT4oQVBQX0NIRUNLX1BST1ZJREVSKVxuXG4gICAgICAgIGlmIChwcm92aWRlcilcbiAgICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZUFwcENoZWNrKGFwcCwge1xuICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICBpc1Rva2VuQXV0b1JlZnJlc2hFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0pLFxuICAgIHByb3ZpZGVTdG9yYWdlKChpbmplY3RvcjogSW5qZWN0b3IpID0+IGdldFN0b3JhZ2UoaW5qZWN0b3IuZ2V0KEZpcmViYXNlQXBwKSkpLFxuICAgIEFuZ3VsYXJFbGFzdGljU2VhY2hNb2R1bGUsXG4gICAgQW5ndWxhclZlcnRleFNlYWNoTW9kdWxlLFxuICAgIEFuZ3VsYXJGaXJlYmFzZUF1dGhNb2R1bGUsXG4gICAgQW5ndWxhckZpcmVzdG9yZU1vZHVsZSxcbiAgICBBbmd1bGFySGFzdXJhR3JhcGhRTE1vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQXV0aFNlcnZpY2UsXG4gICAgQ2FydFNlcnZpY2UsXG4gICAgQ2F0YWxvZ1NlcnZpY2UsXG4gICAgQ2F0ZWdvcnlTZXJ2aWNlLFxuICAgIENoZWNrb3V0U2VydmljZSxcbiAgICBDaGVja291dFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgQ291cG9uU2VydmljZSxcbiAgICBIb21lU2hvcFNlcnZpY2UsXG4gICAgT3JkZXJTZXJ2aWNlLFxuICAgIFdpc2hsaXN0U2VydmljZSxcbiAgICBDb25maWd1cmF0aW9uRmFjYWRlLFxuICAgIENhcnRTZXJ2aWNlc0ZhY2FkZSxcbiAgICBDaGVja291dFJlcG9zaXRvcmllc0ZhY2FkZSxcbiAgICBDaGVja291dERlcGVuZGVuY2llc0ZhY2FkZSxcbiAgICBDYXRlZ29yeVJlcG9zaXRvcnlGYWNhZGUsXG4gICAgUHJvZHVjdENhdGFsb2dGYWNhZGUsXG4gICAgQ2F0YWxvZ1NlcnZpY2VGYWNhZGUsXG4gICAgQ2F0ZWdvcnlTZXJ2aWNlRmFjYWRlLFxuICAgIENhdGFsb2dTdHJhdGVnaWVzRmFjYWRlLFxuICAgIENhdGFsb2dPcGVyYXRpb25zRmFjYWRlLFxuICAgIFByb2R1Y3RNYW5hZ2VtZW50RmFjYWRlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdQcm9kdWN0U2VydmljZXNGYWNhZGUnLFxuICAgICAgdXNlRmFjdG9yeTogKHByb2R1Y3RTdG9ja05vdGlmaWNhdGlvblJlcG9zaXRvcnk6IGFueSwgY2F0ZWdvcnlSZXBvc2l0b3J5OiBhbnksIHByb2R1Y3RTZWFyY2g6IGFueSkgPT4gKHtcbiAgICAgICAgcHJvZHVjdFN0b2NrTm90aWZpY2F0aW9uUmVwb3NpdG9yeSxcbiAgICAgICAgY2F0ZWdvcnlSZXBvc2l0b3J5LFxuICAgICAgICBwcm9kdWN0U2VhcmNoLFxuICAgICAgfSksXG4gICAgICBkZXBzOiBbJ1Byb2R1Y3RTdG9ja05vdGlmaWNhdGlvblJlcG9zaXRvcnknLCAnQ2F0ZWdvcnlSZXBvc2l0b3J5JywgJ1Byb2R1Y3RTZWFyY2gnXSxcbiAgICB9LFxuICAgIENhdGFsb2dGaWx0ZXJIZWxwZXIsXG4gICAgQ2F0YWxvZ1NvcnRIZWxwZXIsXG4gICAgUHJvZHVjdEZpZWxkc0hlbHBlcixcbiAgICBCcmFuZE1hbmFnZXJIZWxwZXIsXG4gICAgQ2F0YWxvZ1JlcG9zaXRvcnlTZXJ2aWNlLFxuICAgIENhdGFsb2dIZWxwZXJzU2VydmljZSxcbiAgICBDYXRlZ29yeVNlYXJjaFN0cmF0ZWd5LFxuICAgIFRlcm1TZWFyY2hTdHJhdGVneSxcbiAgICBQcm9maWxlU2VhcmNoU3RyYXRlZ3ksXG4gICAge1xuICAgICAgcHJvdmlkZTogQ2F0YWxvZ1NlYXJjaENvbnRleHQsXG4gICAgICB1c2VGYWN0b3J5OiAoXG4gICAgICAgIGNhdGVnb3J5U3RyYXRlZ3k6IENhdGVnb3J5U2VhcmNoU3RyYXRlZ3ksXG4gICAgICAgIHRlcm1TdHJhdGVneTogVGVybVNlYXJjaFN0cmF0ZWd5LFxuICAgICAgICBwcm9maWxlU3RyYXRlZ3k6IFByb2ZpbGVTZWFyY2hTdHJhdGVneSxcbiAgICAgICkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IENhdGFsb2dTZWFyY2hDb250ZXh0KGNhdGVnb3J5U3RyYXRlZ3ksIHRlcm1TdHJhdGVneSwgcHJvZmlsZVN0cmF0ZWd5KVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFtDYXRlZ29yeVNlYXJjaFN0cmF0ZWd5LCBUZXJtU2VhcmNoU3RyYXRlZ3ksIFByb2ZpbGVTZWFyY2hTdHJhdGVneV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBVcGRhdGVVc2VySW1hZ2UsXG4gICAgICB1c2VGYWN0b3J5OiAodXNlclJlcG9zaXRvcnk6IFVzZXJSZXBvc2l0b3J5LCBmaWxlVXBsb2FkZXI6IEZpbGVVcGxvYWRlclNlcnZpY2UpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVVc2VySW1hZ2UodXNlclJlcG9zaXRvcnksIGZpbGVVcGxvYWRlcilcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ1VzZXJSZXBvc2l0b3J5JywgJ0ZpbGVVcGxvYWRlclNlcnZpY2UnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdGaWxlVXBsb2FkZXJTZXJ2aWNlJyxcbiAgICAgIHVzZUZhY3Rvcnk6IChzdG9yYWdlOiBTdG9yYWdlLCBiYXNlVXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaXJlYmFzZUZpbGVVcGxvYWRlclNlcnZpY2Uoc3RvcmFnZSwgYmFzZVVybClcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbU3RvcmFnZSwgU1RPUkFHRV9CQVNFX1VSTF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnUHJvZHVjdFNlYXJjaCcsXG4gICAgICB1c2VFeGlzdGluZzogUHJvZHVjdHNWZXJ0ZXhTZWFyY2gsXG4gICAgfSxcbiAgICBDb3Vwb25SZXBvc2l0b3JpZXNGYWNhZGUsXG4gICAgSG9tZVNob3BSZXBvc2l0b3JpZXNGYWNhZGUsXG4gICAgT3JkZXJQcm9kdWN0UmV2aWV3U2VydmljZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckNvbm5lY3RNb2R1bGUge1xuICBzdGF0aWMgaW5pdGlhbGl6ZUFwcChcbiAgICBkZWZhdWx0U2hvcDogU2hvcHMsXG4gICAgb3B0aW9uczoge1xuICAgICAgZmlyZWJhc2U/OiBGaXJlYmFzZU9wdGlvbnNcbiAgICAgIGVsYXN0aWNTZWFyY2g/OiBBeGlvc0VsYXN0aWNTZWFyY2hDb25maWdcbiAgICAgIHZlcnRleENvbmZpZz86IFZlcnRleFNlYXJjaENvbmZpZ1xuICAgICAgaGFzdXJhOiBIYXN1cmFHcmFwaFFMT3B0aW9uc1xuICAgICAgYmFja2VuZFVybDogc3RyaW5nXG4gICAgICBvbGRDYXRlZ29yeVN0cnVjdHVyZT86IGJvb2xlYW5cbiAgICAgIHN0b3JhZ2VCYXNlVXJsPzogc3RyaW5nXG4gICAgICBwZXJzaXN0ZW5jZVByb3ZpZGVyPzogVHlwZTxEYXRhUGVyc2lzdGVuY2U+XG4gICAgICBhcHBDaGVja1Byb3ZpZGVyPzogQXBwQ2hlY2tPcHRpb25zWydwcm92aWRlciddXG4gICAgfSxcbiAgICBuYW1lT3JDb25maWc/OiBzdHJpbmcgfCBGaXJlYmFzZUFwcENvbmZpZyxcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxBbmd1bGFyQ29ubmVjdE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQW5ndWxhckNvbm5lY3RNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgLi4udGhpcy5idWlsZENvcmVQcm92aWRlcnMobmFtZU9yQ29uZmlnLCBvcHRpb25zKSxcbiAgICAgICAgLi4udGhpcy5idWlsZENvbmRpdGlvbmFsUHJvdmlkZXJzKGRlZmF1bHRTaG9wLCBvcHRpb25zKSxcbiAgICAgIF0sXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRDb3JlUHJvdmlkZXJzKFxuICAgIG5hbWVPckNvbmZpZzogc3RyaW5nIHwgRmlyZWJhc2VBcHBDb25maWcsXG4gICAgb3B0aW9uczoge1xuICAgICAgYXBwQ2hlY2tQcm92aWRlcj86IEFwcENoZWNrT3B0aW9uc1sncHJvdmlkZXInXVxuICAgICAgb2xkQ2F0ZWdvcnlTdHJ1Y3R1cmU/OiBib29sZWFuXG4gICAgICBwZXJzaXN0ZW5jZVByb3ZpZGVyPzogVHlwZTxEYXRhUGVyc2lzdGVuY2U+XG4gICAgfSxcbiAgKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgcHJvdmlkZTogRklSRUJBU0VfQVBQX05BTUUsIHVzZVZhbHVlOiBuYW1lT3JDb25maWcgfSxcbiAgICAgIHsgcHJvdmlkZTogQVBQX0NIRUNLX1BST1ZJREVSLCB1c2VWYWx1ZTogb3B0aW9ucy5hcHBDaGVja1Byb3ZpZGVyIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IENBVEVHT1JZX1NUUlVDVFVSRSxcbiAgICAgICAgdXNlQ2xhc3M6IHRoaXMuc2VsZWN0Q2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyKG9wdGlvbnMub2xkQ2F0ZWdvcnlTdHJ1Y3R1cmUpLFxuICAgICAgfSxcbiAgICAgIHsgcHJvdmlkZTogUEVSU0lTVEVOQ0VfUFJPVklERVIsIHVzZUNsYXNzOiBvcHRpb25zPy5wZXJzaXN0ZW5jZVByb3ZpZGVyIHx8IENvb2tpZURhdGFQZXJzaXN0ZW5jZSB9LFxuICAgIF1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkQ29uZGl0aW9uYWxQcm92aWRlcnMoXG4gICAgZGVmYXVsdFNob3A6IFNob3BzLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIGZpcmViYXNlPzogRmlyZWJhc2VPcHRpb25zXG4gICAgICBlbGFzdGljU2VhcmNoPzogQXhpb3NFbGFzdGljU2VhcmNoQ29uZmlnXG4gICAgICB2ZXJ0ZXhDb25maWc/OiBWZXJ0ZXhTZWFyY2hDb25maWdcbiAgICAgIGhhc3VyYTogSGFzdXJhR3JhcGhRTE9wdGlvbnNcbiAgICAgIGJhY2tlbmRVcmw6IHN0cmluZ1xuICAgICAgc3RvcmFnZUJhc2VVcmw/OiBzdHJpbmdcbiAgICB9LFxuICApIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5jcmVhdGVQcm92aWRlcklmRXhpc3RzKERFRkFVTFRfU0hPUCwgZGVmYXVsdFNob3ApLFxuICAgICAgLi4udGhpcy5jcmVhdGVQcm92aWRlcklmRXhpc3RzKEZJUkVCQVNFX09QVElPTlMsIG9wdGlvbnMuZmlyZWJhc2UpLFxuICAgICAgLi4udGhpcy5jcmVhdGVQcm92aWRlcklmRXhpc3RzKEVTX0NPTkZJRywgb3B0aW9ucy5lbGFzdGljU2VhcmNoKSxcbiAgICAgIC4uLnRoaXMuY3JlYXRlUHJvdmlkZXJJZkV4aXN0cyhWRVJURVhfQ09ORklHLCBvcHRpb25zLnZlcnRleENvbmZpZyksXG4gICAgICAuLi50aGlzLmNyZWF0ZVByb3ZpZGVySWZFeGlzdHMoSEFTVVJBX09QVElPTlMsIG9wdGlvbnMuaGFzdXJhKSxcbiAgICAgIC4uLnRoaXMuY3JlYXRlUHJvdmlkZXJJZkV4aXN0cyhCQUNLRU5EX1VSTCwgb3B0aW9ucy5iYWNrZW5kVXJsKSxcbiAgICAgIC4uLnRoaXMuY3JlYXRlUHJvdmlkZXJJZkV4aXN0cyhTVE9SQUdFX0JBU0VfVVJMLCBvcHRpb25zLnN0b3JhZ2VCYXNlVXJsKSxcbiAgICBdXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzZWxlY3RDYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIob2xkQ2F0ZWdvcnlTdHJ1Y3R1cmU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGlzTmlsKG9sZENhdGVnb3J5U3RydWN0dXJlKSB8fCBvbGRDYXRlZ29yeVN0cnVjdHVyZVxuICAgICAgPyBPbGRDYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXJcbiAgICAgIDogTmV3Q2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVQcm92aWRlcklmRXhpc3RzKHRva2VuOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gaXNOaWwodmFsdWUpID8gW10gOiBbeyBwcm92aWRlOiB0b2tlbiwgdXNlVmFsdWU6IHZhbHVlIH1dXG4gIH1cbn1cbiJdfQ==