@infrab4a/connect-angular 4.1.0-beta.7 → 4.1.0-beta.9

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 (71) hide show
  1. package/angular-firestore.module.d.ts +1 -1
  2. package/angular-hasura-graphql.module.d.ts +1 -1
  3. package/{esm2022 → esm2020}/angular-connect.module.mjs +17 -17
  4. package/esm2020/angular-elastic-search.module.mjs +34 -0
  5. package/esm2020/angular-firebase-auth.module.mjs +130 -0
  6. package/esm2020/angular-firestore.module.mjs +459 -0
  7. package/esm2020/angular-hasura-graphql.module.mjs +243 -0
  8. package/{esm2022 → esm2020}/services/auth.service.mjs +4 -4
  9. package/{esm2022 → esm2020}/services/cart.service.mjs +4 -4
  10. package/esm2020/services/catalog/adapters/new-category-structure.adapter.mjs +41 -0
  11. package/{esm2022 → esm2020}/services/catalog/adapters/old-category-structure.adapter.mjs +4 -4
  12. package/{esm2022 → esm2020}/services/catalog/catalog.service.mjs +5 -5
  13. package/{esm2022 → esm2020}/services/catalog/category.service.mjs +5 -5
  14. package/esm2020/services/catalog/wishlist.service.mjs +106 -0
  15. package/{esm2022 → esm2020}/services/checkout-subscription.service.mjs +4 -4
  16. package/{esm2022 → esm2020}/services/checkout.service.mjs +4 -4
  17. package/{esm2022 → esm2020}/services/coupon.service.mjs +4 -4
  18. package/{esm2022 → esm2020}/services/home-shop.service.mjs +11 -11
  19. package/{esm2022 → esm2020}/services/order.service.mjs +4 -4
  20. package/{esm2022 → esm2020}/services/shipping.service.mjs +4 -4
  21. package/fesm2015/infrab4a-connect-angular.mjs +2192 -0
  22. package/fesm2015/infrab4a-connect-angular.mjs.map +1 -0
  23. package/{fesm2022 → fesm2020}/infrab4a-connect-angular.mjs +440 -440
  24. package/fesm2020/infrab4a-connect-angular.mjs.map +1 -0
  25. package/package.json +16 -10
  26. package/services/cart.service.d.ts +1 -1
  27. package/services/catalog/adapters/new-category-structure.adapter.d.ts +3 -5
  28. package/services/catalog/catalog.service.d.ts +5 -5
  29. package/services/catalog/category.service.d.ts +1 -1
  30. package/services/catalog/types/product-sort.type.d.ts +1 -1
  31. package/services/catalog/wishlist.service.d.ts +4 -4
  32. package/services/home-shop.service.d.ts +1 -1
  33. package/services/types/required-checkout-data.type.d.ts +1 -1
  34. package/services/types/required-checkout-subscription-data.type.d.ts +1 -1
  35. package/types/firebase-app-config.type.d.ts +1 -1
  36. package/esm2022/angular-elastic-search.module.mjs +0 -34
  37. package/esm2022/angular-firebase-auth.module.mjs +0 -130
  38. package/esm2022/angular-firestore.module.mjs +0 -459
  39. package/esm2022/angular-hasura-graphql.module.mjs +0 -243
  40. package/esm2022/services/catalog/adapters/new-category-structure.adapter.mjs +0 -42
  41. package/esm2022/services/catalog/wishlist.service.mjs +0 -105
  42. package/fesm2022/infrab4a-connect-angular.mjs.map +0 -1
  43. /package/{esm2022 → esm2020}/consts/backend-url.const.mjs +0 -0
  44. /package/{esm2022 → esm2020}/consts/category-structure.mjs +0 -0
  45. /package/{esm2022 → esm2020}/consts/default-shop.const.mjs +0 -0
  46. /package/{esm2022 → esm2020}/consts/es-config.const.mjs +0 -0
  47. /package/{esm2022 → esm2020}/consts/firebase-const.mjs +0 -0
  48. /package/{esm2022 → esm2020}/consts/hasura-options.const.mjs +0 -0
  49. /package/{esm2022 → esm2020}/consts/index.mjs +0 -0
  50. /package/{esm2022 → esm2020}/helpers/index.mjs +0 -0
  51. /package/{esm2022 → esm2020}/helpers/mobile-operation-system-checker.helper.mjs +0 -0
  52. /package/{esm2022 → esm2020}/index.mjs +0 -0
  53. /package/{esm2022 → esm2020}/infrab4a-connect-angular.mjs +0 -0
  54. /package/{esm2022 → esm2020}/services/catalog/adapters/category-structure.adapter.mjs +0 -0
  55. /package/{esm2022 → esm2020}/services/catalog/adapters/index.mjs +0 -0
  56. /package/{esm2022 → esm2020}/services/catalog/enums/index.mjs +0 -0
  57. /package/{esm2022 → esm2020}/services/catalog/enums/product-sorts.enum.mjs +0 -0
  58. /package/{esm2022 → esm2020}/services/catalog/index.mjs +0 -0
  59. /package/{esm2022 → esm2020}/services/catalog/models/category-with-tree.model.mjs +0 -0
  60. /package/{esm2022 → esm2020}/services/catalog/models/index.mjs +0 -0
  61. /package/{esm2022 → esm2020}/services/catalog/types/index.mjs +0 -0
  62. /package/{esm2022 → esm2020}/services/catalog/types/product-sort.type.mjs +0 -0
  63. /package/{esm2022 → esm2020}/services/helpers/index.mjs +0 -0
  64. /package/{esm2022 → esm2020}/services/helpers/util.helper.mjs +0 -0
  65. /package/{esm2022 → esm2020}/services/index.mjs +0 -0
  66. /package/{esm2022 → esm2020}/services/types/index.mjs +0 -0
  67. /package/{esm2022 → esm2020}/services/types/required-checkout-data.type.mjs +0 -0
  68. /package/{esm2022 → esm2020}/services/types/required-checkout-subscription-data.type.mjs +0 -0
  69. /package/{esm2022 → esm2020}/services/types/shipping-methods.type.mjs +0 -0
  70. /package/{esm2022 → esm2020}/types/firebase-app-config.type.mjs +0 -0
  71. /package/{esm2022 → esm2020}/types/index.mjs +0 -0
@@ -1,243 +0,0 @@
1
- import { isPlatformBrowser } from '@angular/common';
2
- import { NgModule, PLATFORM_ID } from '@angular/core';
3
- import { CategoryCollectionChildrenHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository, CategoryHasuraGraphQLRepository, FilterHasuraGraphQLRepository, FilterOptionHasuraGraphQLRepository, ProductHasuraGraphQLRepository, VariantHasuraGraphQLRepository, WishlistHasuraGraphQLRepository, } from '@infrab4a/connect';
4
- import { HASURA_OPTIONS } from './consts';
5
- import * as i0 from "@angular/core";
6
- export class AngularHasuraGraphQLModule {
7
- static initializeApp(options) {
8
- return {
9
- ngModule: AngularHasuraGraphQLModule,
10
- providers: [{ provide: HASURA_OPTIONS, useValue: options }],
11
- };
12
- }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: AngularHasuraGraphQLModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
14
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.6", ngImport: i0, type: AngularHasuraGraphQLModule }); }
15
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: AngularHasuraGraphQLModule, providers: [
16
- {
17
- provide: 'HasuraConfig',
18
- useFactory: (options, platformId) => ({
19
- endpoint: options.endpoint,
20
- authOptions: options.credentials,
21
- interceptors: {
22
- request: (request) => {
23
- if (isPlatformBrowser(platformId))
24
- return request;
25
- const interval = setInterval(() => { }, 100);
26
- request.interval = interval;
27
- return request;
28
- },
29
- response: (response, request) => {
30
- if (isPlatformBrowser(platformId))
31
- return response;
32
- clearInterval(request.interval);
33
- return response;
34
- },
35
- },
36
- }),
37
- deps: [HASURA_OPTIONS, PLATFORM_ID],
38
- },
39
- {
40
- provide: 'CategoryRepository',
41
- useExisting: CategoryHasuraGraphQLRepository,
42
- },
43
- {
44
- provide: CategoryHasuraGraphQLRepository,
45
- useFactory: (options, productRepository, categoryFilterRepository) => {
46
- return new CategoryHasuraGraphQLRepository(options, productRepository, categoryFilterRepository);
47
- },
48
- deps: ['HasuraConfig', ProductHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
49
- },
50
- {
51
- provide: 'ProductRepository',
52
- useExisting: ProductHasuraGraphQLRepository,
53
- },
54
- {
55
- provide: ProductHasuraGraphQLRepository,
56
- useFactory: (hasuraConfig) => {
57
- return new ProductHasuraGraphQLRepository(hasuraConfig);
58
- },
59
- deps: ['HasuraConfig'],
60
- },
61
- {
62
- provide: 'VariantRepository',
63
- useExisting: VariantHasuraGraphQLRepository,
64
- },
65
- {
66
- provide: VariantHasuraGraphQLRepository,
67
- useFactory: (hasuraConfig) => {
68
- return new VariantHasuraGraphQLRepository(hasuraConfig);
69
- },
70
- deps: ['HasuraConfig'],
71
- },
72
- {
73
- provide: 'CategoryFilterRepository',
74
- useExisting: CategoryFilterHasuraGraphQLRepository,
75
- },
76
- {
77
- provide: CategoryFilterHasuraGraphQLRepository,
78
- useFactory: (options) => {
79
- return new CategoryFilterHasuraGraphQLRepository(options);
80
- },
81
- deps: ['HasuraConfig'],
82
- },
83
- {
84
- provide: 'FilterOptionRepository',
85
- useExisting: FilterOptionHasuraGraphQLRepository,
86
- },
87
- {
88
- provide: FilterOptionHasuraGraphQLRepository,
89
- useFactory: (options) => {
90
- return new FilterOptionHasuraGraphQLRepository(options);
91
- },
92
- deps: ['HasuraConfig'],
93
- },
94
- {
95
- provide: 'FilterRepository',
96
- useExisting: FilterHasuraGraphQLRepository,
97
- },
98
- {
99
- provide: FilterHasuraGraphQLRepository,
100
- useFactory: (options, filterOptionRepository, categoryFilterRepository) => {
101
- return new FilterHasuraGraphQLRepository(options, filterOptionRepository, categoryFilterRepository);
102
- },
103
- deps: ['HasuraConfig', FilterOptionHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
104
- },
105
- {
106
- provide: CategoryCollectionChildrenHasuraGraphQLRepository,
107
- useFactory: (options) => new CategoryCollectionChildrenHasuraGraphQLRepository(options),
108
- deps: ['HasuraConfig'],
109
- },
110
- {
111
- provide: 'CategoryCollectionChildrenRepository',
112
- useExisting: CategoryCollectionChildrenHasuraGraphQLRepository,
113
- },
114
- {
115
- provide: WishlistHasuraGraphQLRepository,
116
- useFactory: (options, categoryFilterRepository) => {
117
- return new WishlistHasuraGraphQLRepository(options, categoryFilterRepository);
118
- },
119
- deps: ['HasuraConfig', CategoryFilterHasuraGraphQLRepository],
120
- },
121
- {
122
- provide: 'WishlistRepository',
123
- useExisting: WishlistHasuraGraphQLRepository,
124
- },
125
- ] }); }
126
- }
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: AngularHasuraGraphQLModule, decorators: [{
128
- type: NgModule,
129
- args: [{
130
- providers: [
131
- {
132
- provide: 'HasuraConfig',
133
- useFactory: (options, platformId) => ({
134
- endpoint: options.endpoint,
135
- authOptions: options.credentials,
136
- interceptors: {
137
- request: (request) => {
138
- if (isPlatformBrowser(platformId))
139
- return request;
140
- const interval = setInterval(() => { }, 100);
141
- request.interval = interval;
142
- return request;
143
- },
144
- response: (response, request) => {
145
- if (isPlatformBrowser(platformId))
146
- return response;
147
- clearInterval(request.interval);
148
- return response;
149
- },
150
- },
151
- }),
152
- deps: [HASURA_OPTIONS, PLATFORM_ID],
153
- },
154
- {
155
- provide: 'CategoryRepository',
156
- useExisting: CategoryHasuraGraphQLRepository,
157
- },
158
- {
159
- provide: CategoryHasuraGraphQLRepository,
160
- useFactory: (options, productRepository, categoryFilterRepository) => {
161
- return new CategoryHasuraGraphQLRepository(options, productRepository, categoryFilterRepository);
162
- },
163
- deps: ['HasuraConfig', ProductHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
164
- },
165
- {
166
- provide: 'ProductRepository',
167
- useExisting: ProductHasuraGraphQLRepository,
168
- },
169
- {
170
- provide: ProductHasuraGraphQLRepository,
171
- useFactory: (hasuraConfig) => {
172
- return new ProductHasuraGraphQLRepository(hasuraConfig);
173
- },
174
- deps: ['HasuraConfig'],
175
- },
176
- {
177
- provide: 'VariantRepository',
178
- useExisting: VariantHasuraGraphQLRepository,
179
- },
180
- {
181
- provide: VariantHasuraGraphQLRepository,
182
- useFactory: (hasuraConfig) => {
183
- return new VariantHasuraGraphQLRepository(hasuraConfig);
184
- },
185
- deps: ['HasuraConfig'],
186
- },
187
- {
188
- provide: 'CategoryFilterRepository',
189
- useExisting: CategoryFilterHasuraGraphQLRepository,
190
- },
191
- {
192
- provide: CategoryFilterHasuraGraphQLRepository,
193
- useFactory: (options) => {
194
- return new CategoryFilterHasuraGraphQLRepository(options);
195
- },
196
- deps: ['HasuraConfig'],
197
- },
198
- {
199
- provide: 'FilterOptionRepository',
200
- useExisting: FilterOptionHasuraGraphQLRepository,
201
- },
202
- {
203
- provide: FilterOptionHasuraGraphQLRepository,
204
- useFactory: (options) => {
205
- return new FilterOptionHasuraGraphQLRepository(options);
206
- },
207
- deps: ['HasuraConfig'],
208
- },
209
- {
210
- provide: 'FilterRepository',
211
- useExisting: FilterHasuraGraphQLRepository,
212
- },
213
- {
214
- provide: FilterHasuraGraphQLRepository,
215
- useFactory: (options, filterOptionRepository, categoryFilterRepository) => {
216
- return new FilterHasuraGraphQLRepository(options, filterOptionRepository, categoryFilterRepository);
217
- },
218
- deps: ['HasuraConfig', FilterOptionHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
219
- },
220
- {
221
- provide: CategoryCollectionChildrenHasuraGraphQLRepository,
222
- useFactory: (options) => new CategoryCollectionChildrenHasuraGraphQLRepository(options),
223
- deps: ['HasuraConfig'],
224
- },
225
- {
226
- provide: 'CategoryCollectionChildrenRepository',
227
- useExisting: CategoryCollectionChildrenHasuraGraphQLRepository,
228
- },
229
- {
230
- provide: WishlistHasuraGraphQLRepository,
231
- useFactory: (options, categoryFilterRepository) => {
232
- return new WishlistHasuraGraphQLRepository(options, categoryFilterRepository);
233
- },
234
- deps: ['HasuraConfig', CategoryFilterHasuraGraphQLRepository],
235
- },
236
- {
237
- provide: 'WishlistRepository',
238
- useExisting: WishlistHasuraGraphQLRepository,
239
- },
240
- ],
241
- }]
242
- }] });
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1oYXN1cmEtZ3JhcGhxbC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2FuZ3VsYXItaGFzdXJhLWdyYXBocWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ25ELE9BQU8sRUFBdUIsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxRSxPQUFPLEVBQ0wsaURBQWlELEVBQ2pELHFDQUFxQyxFQUVyQywrQkFBK0IsRUFFL0IsNkJBQTZCLEVBQzdCLG1DQUFtQyxFQUtuQyw4QkFBOEIsRUFFOUIsOEJBQThCLEVBRTlCLCtCQUErQixHQUNoQyxNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7O0FBc0l6QyxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FHcEI7UUFDQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLDBCQUEwQjtZQUNwQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1NBQzVELENBQUE7SUFDSCxDQUFDOzhHQVRVLDBCQUEwQjsrR0FBMUIsMEJBQTBCOytHQUExQiwwQkFBMEIsYUFqSTFCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLFVBQVUsRUFBRSxDQUFDLE9BQTZCLEVBQUUsVUFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbEUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO29CQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7b0JBQ2hDLFlBQVksRUFBRTt3QkFDWixPQUFPLEVBQUUsQ0FBQyxPQUEwRCxFQUFFLEVBQUU7NEJBQ3RFLElBQUksaUJB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RDs0QkFDRSxPQUFPLEVBQUUsaURBQWlEOzRCQUMxRCxVQUFVLEVBQUUsQ0FBQyxPQUFZLEVBQXFELEVBQUUsQ0FDOUUsSUFBSSxpREFBaUQsQ0FBQyxPQUFPLENBQUM7NEJBQ2hFLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQzt5QkFDdkI7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLHNDQUFzQzs0QkFDL0MsV0FBVyxFQUFFLGlEQUFpRDt5QkFDL0Q7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLCtCQUErQjs0QkFDeEMsVUFBVSxFQUFFLENBQ1YsT0FBWSxFQUNaLHdCQUErRCxFQUM5QixFQUFFO2dDQUNuQyxPQUFPLElBQUksK0JBQStCLENBQUMsT0FBTyxFQUFFLHdCQUF3QixDQUFDLENBQUE7NEJBQy9FLENBQUM7NEJBQ0QsSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFLHFDQUFxQyxDQUFDO3lCQUM5RDt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLEVBQUUsK0JBQStCO3lCQUM3QztxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxuICBDYXRlZ29yeUZpbHRlclJlcG9zaXRvcnksXHJcbiAgQ2F0ZWdvcnlIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxuICBDYXRlZ29yeVJlcG9zaXRvcnksXHJcbiAgRmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgRmlsdGVyT3B0aW9uSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgRmlsdGVyT3B0aW9uUmVwb3NpdG9yeSxcclxuICBGaWx0ZXJSZXBvc2l0b3J5LFxyXG4gIEdyYXBoUUxQYXJhbXMsXHJcbiAgSGFzdXJhR3JhcGhRTEF1dGhPcHRpb25zLFxyXG4gIFByb2R1Y3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxuICBQcm9kdWN0UmVwb3NpdG9yeSxcclxuICBWYXJpYW50SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgVmFyaWFudFJlcG9zaXRvcnksXHJcbiAgV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxufSBmcm9tICdAaW5mcmFiNGEvY29ubmVjdCdcclxuaW1wb3J0IHsgSEFTVVJBX09QVElPTlMgfSBmcm9tICcuL2NvbnN0cydcclxuXHJcbmV4cG9ydCB0eXBlIEhhc3VyYUdyYXBoUUxPcHRpb25zID0geyBlbmRwb2ludDogc3RyaW5nOyBjcmVkZW50aWFsczogSGFzdXJhR3JhcGhRTEF1dGhPcHRpb25zIH1cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6ICdIYXN1cmFDb25maWcnLFxyXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogSGFzdXJhR3JhcGhRTE9wdGlvbnMsIHBsYXRmb3JtSWQ6IHN0cmluZykgPT4gKHtcclxuICAgICAgICBlbmRwb2ludDogb3B0aW9ucy5lbmRwb2ludCxcclxuICAgICAgICBhdXRoT3B0aW9uczogb3B0aW9ucy5jcmVkZW50aWFscyxcclxuICAgICAgICBpbnRlcmNlcHRvcnM6IHtcclxuICAgICAgICAgIHJlcXVlc3Q6IChyZXF1ZXN0OiBHcmFwaFFMUGFyYW1zPGFueT4gJiB7IGludGVydmFsOiBOb2RlSlMuVGltZW91dCB9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSkgcmV0dXJuIHJlcXVlc3RcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge30sIDEwMClcclxuXHJcbiAgICAgICAgICAgIHJlcXVlc3QuaW50ZXJ2YWwgPSBpbnRlcnZhbFxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICByZXNwb25zZTogKHJlc3BvbnNlOiBhbnksIHJlcXVlc3Q6IEdyYXBoUUxQYXJhbXM8YW55PiAmIHsgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IH0pID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpKSByZXR1cm4gcmVzcG9uc2VcclxuXHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwocmVxdWVzdC5pbnRlcnZhbClcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICB9KSxcclxuICAgICAgZGVwczogW0hBU1VSQV9PUFRJT05TLCBQTEFURk9STV9JRF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiAnQ2F0ZWdvcnlSZXBvc2l0b3J5JyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IENhdGVnb3J5SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBDYXRlZ29yeUhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxyXG4gICAgICB1c2VGYWN0b3J5OiAoXHJcbiAgICAgICAgb3B0aW9uczogYW55LFxyXG4gICAgICAgIHByb2R1Y3RSZXBvc2l0b3J5OiBQcm9kdWN0SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgICAgICAgY2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5OiBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxyXG4gICAgICApOiBDYXRlZ29yeVJlcG9zaXRvcnkgPT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2F0ZWdvcnlIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShvcHRpb25zLCBwcm9kdWN0UmVwb3NpdG9yeSwgY2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5KVxyXG4gICAgICB9LFxyXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZycsIFByb2R1Y3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSwgQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeV0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiAnUHJvZHVjdFJlcG9zaXRvcnknLFxyXG4gICAgICB1c2VFeGlzdGluZzogUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxyXG4gICAgICB1c2VGYWN0b3J5OiAoaGFzdXJhQ29uZmlnOiBhbnkpOiBQcm9kdWN0UmVwb3NpdG9yeSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9kdWN0SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnkoaGFzdXJhQ29uZmlnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZyddLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogJ1ZhcmlhbnRSZXBvc2l0b3J5JyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFZhcmlhbnRIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IFZhcmlhbnRIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxuICAgICAgdXNlRmFjdG9yeTogKGhhc3VyYUNvbmZpZzogYW55KTogVmFyaWFudFJlcG9zaXRvcnkgPT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgVmFyaWFudEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KGhhc3VyYUNvbmZpZylcclxuICAgICAgfSxcclxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnXSxcclxuICAgIH0sXHJcblxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiAnQ2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5JyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxyXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogYW55KTogQ2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5ID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnkob3B0aW9ucylcclxuICAgICAgfSxcclxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnXSxcclxuICAgIH0sXHJcblxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiAnRmlsdGVyT3B0aW9uUmVwb3NpdG9yeScsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBGaWx0ZXJPcHRpb25IYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IEZpbHRlck9wdGlvbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxyXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogYW55KTogRmlsdGVyT3B0aW9uUmVwb3NpdG9yeSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXJPcHRpb25IYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShvcHRpb25zKVxyXG4gICAgICB9LFxyXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZyddLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogJ0ZpbHRlclJlcG9zaXRvcnknLFxyXG4gICAgICB1c2VFeGlzdGluZzogRmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxuICAgICAgdXNlRmFjdG9yeTogKFxyXG4gICAgICAgIG9wdGlvbnM6IGFueSxcclxuICAgICAgICBmaWx0ZXJPcHRpb25SZXBvc2l0b3J5OiBGaWx0ZXJPcHRpb25IYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxuICAgICAgICBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnk6IENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgICAgICk6IEZpbHRlclJlcG9zaXRvcnkgPT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnkob3B0aW9ucywgZmlsdGVyT3B0aW9uUmVwb3NpdG9yeSwgY2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5KVxyXG4gICAgICB9LFxyXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZycsIEZpbHRlck9wdGlvbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LCBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5XSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgICAgIHVzZUZhY3Rvcnk6IChvcHRpb25zOiBhbnkpOiBDYXRlZ29yeUNvbGxlY3Rpb25DaGlsZHJlbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5ID0+XHJcbiAgICAgICAgbmV3IENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnkob3B0aW9ucyksXHJcbiAgICAgIGRlcHM6IFsnSGFzdXJhQ29uZmlnJ10sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiAnQ2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5SZXBvc2l0b3J5JyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBXaXNobGlzdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxyXG4gICAgICB1c2VGYWN0b3J5OiAoXHJcbiAgICAgICAgb3B0aW9uczogYW55LFxyXG4gICAgICAgIGNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeTogQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxuICAgICAgKTogV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBXaXNobGlzdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KG9wdGlvbnMsIGNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSlcclxuICAgICAgfSxcclxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnLCBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5XSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6ICdXaXNobGlzdFJlcG9zaXRvcnknLFxyXG4gICAgICB1c2VFeGlzdGluZzogV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJIYXN1cmFHcmFwaFFMTW9kdWxlIHtcclxuICBzdGF0aWMgaW5pdGlhbGl6ZUFwcChvcHRpb25zOiB7XHJcbiAgICBlbmRwb2ludDogc3RyaW5nXHJcbiAgICBjcmVkZW50aWFsczogSGFzdXJhR3JhcGhRTEF1dGhPcHRpb25zXHJcbiAgfSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QW5ndWxhckhhc3VyYUdyYXBoUUxNb2R1bGU+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBBbmd1bGFySGFzdXJhR3JhcGhRTE1vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBIQVNVUkFfT1BUSU9OUywgdXNlVmFsdWU6IG9wdGlvbnMgfV0sXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,42 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { isNil, Where, } from '@infrab4a/connect';
3
- import * as i0 from "@angular/core";
4
- export class NewCategoryStructureAdapter {
5
- constructor(categoryRepository, categoryCollectionChildrenRepository) {
6
- this.categoryRepository = categoryRepository;
7
- this.categoryCollectionChildrenRepository = categoryCollectionChildrenRepository;
8
- }
9
- async buildProductFilterByCategory(category) {
10
- const categoriesIds = (await this.isCollection(category))
11
- ? await this.getAllCategoriesIdFromCollection(category)
12
- : [...(await this.getAllCategoriesIdFromCategory(category)), category.id.toString()];
13
- return { category: { id: { operator: Where.IN, value: categoriesIds } } };
14
- }
15
- async getAllCategoriesIdFromCategory(category) {
16
- return this.categoryRepository
17
- .getChildren(+category.id)
18
- .then((categories) => categories.map((category) => category.id.toString()));
19
- }
20
- async getAllCategoriesIdFromCollection(category) {
21
- return this.categoryCollectionChildrenRepository
22
- .find({ filters: { collectionId: +category.id } })
23
- .then(({ data }) => data.map((categoryCollection) => categoryCollection.categoryId.toString()));
24
- }
25
- async isCollection(category) {
26
- return !isNil(category.isCollection)
27
- ? category.isCollection
28
- : this.categoryRepository.get({ id: category.id }).then((category) => category.isCollection);
29
- }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: NewCategoryStructureAdapter, deps: [{ token: 'CategoryRepository' }, { token: 'CategoryCollectionChildrenRepository' }], target: i0.ɵɵFactoryTarget.Injectable }); }
31
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: NewCategoryStructureAdapter }); }
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: NewCategoryStructureAdapter, decorators: [{
34
- type: Injectable
35
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
36
- type: Inject,
37
- args: ['CategoryRepository']
38
- }] }, { type: undefined, decorators: [{
39
- type: Inject,
40
- args: ['CategoryCollectionChildrenRepository']
41
- }] }]; } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWNhdGVnb3J5LXN0cnVjdHVyZS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXRhbG9nL2FkYXB0ZXJzL25ldy1jYXRlZ29yeS1zdHJ1Y3R1cmUuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBSUwsS0FBSyxFQUdMLEtBQUssR0FDTixNQUFNLG1CQUFtQixDQUFBOztBQUkxQixNQUFNLE9BQU8sMkJBQTJCO0lBQ3RDLFlBQ2lELGtCQUFzQyxFQUVwRSxvQ0FBMEU7UUFGNUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUVwRSx5Q0FBb0MsR0FBcEMsb0NBQW9DLENBQXNDO0lBQzFGLENBQUM7SUFFSixLQUFLLENBQUMsNEJBQTRCLENBQUMsUUFBa0I7UUFDbkQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFFBQVEsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFFdEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLENBQUE7SUFDM0UsQ0FBQztJQUVPLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxRQUFrQjtRQUM3RCxPQUFPLElBQUksQ0FBQyxrQkFBa0I7YUFDM0IsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzthQUN6QixJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQy9FLENBQUM7SUFFTyxLQUFLLENBQUMsZ0NBQWdDLENBQUMsUUFBa0I7UUFDL0QsT0FBTyxJQUFJLENBQUMsb0NBQW9DO2FBQzdDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ2pELElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNuRyxDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFrQjtRQUMzQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7WUFDbEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZO1lBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ2hHLENBQUM7OEdBL0JVLDJCQUEyQixrQkFFNUIsb0JBQW9CLGFBQ3BCLHNDQUFzQztrSEFIckMsMkJBQTJCOzsyRkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVOzswQkFHTixNQUFNOzJCQUFDLG9CQUFvQjs7MEJBQzNCLE1BQU07MkJBQUMsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtcclxuICBDYXRlZ29yeSxcclxuICBDYXRlZ29yeUNvbGxlY3Rpb25DaGlsZHJlblJlcG9zaXRvcnksXHJcbiAgQ2F0ZWdvcnlSZXBvc2l0b3J5LFxyXG4gIGlzTmlsLFxyXG4gIFByb2R1Y3QsXHJcbiAgUmVwb3NpdG9yeUZpbmRGaWVsdGVycyxcclxuICBXaGVyZSxcclxufSBmcm9tICdAaW5mcmFiNGEvY29ubmVjdCdcclxuaW1wb3J0IHsgQ2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyIH0gZnJvbSAnLi9jYXRlZ29yeS1zdHJ1Y3R1cmUuYWRhcHRlcidcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5ld0NhdGVnb3J5U3RydWN0dXJlQWRhcHRlciBpbXBsZW1lbnRzIENhdGVnb3J5U3RydWN0dXJlQWRhcHRlciB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdDYXRlZ29yeVJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5UmVwb3NpdG9yeTogQ2F0ZWdvcnlSZXBvc2l0b3J5LFxyXG4gICAgQEluamVjdCgnQ2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5SZXBvc2l0b3J5JylcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5SZXBvc2l0b3J5OiBDYXRlZ29yeUNvbGxlY3Rpb25DaGlsZHJlblJlcG9zaXRvcnksXHJcbiAgKSB7fVxyXG5cclxuICBhc3luYyBidWlsZFByb2R1Y3RGaWx0ZXJCeUNhdGVnb3J5KGNhdGVnb3J5OiBDYXRlZ29yeSk6IFByb21pc2U8UmVwb3NpdG9yeUZpbmRGaWVsdGVyczxQcm9kdWN0Pj4ge1xyXG4gICAgY29uc3QgY2F0ZWdvcmllc0lkcyA9IChhd2FpdCB0aGlzLmlzQ29sbGVjdGlvbihjYXRlZ29yeSkpXHJcbiAgICAgID8gYXdhaXQgdGhpcy5nZXRBbGxDYXRlZ29yaWVzSWRGcm9tQ29sbGVjdGlvbihjYXRlZ29yeSlcclxuICAgICAgOiBbLi4uKGF3YWl0IHRoaXMuZ2V0QWxsQ2F0ZWdvcmllc0lkRnJvbUNhdGVnb3J5KGNhdGVnb3J5KSksIGNhdGVnb3J5LmlkLnRvU3RyaW5nKCldXHJcblxyXG4gICAgcmV0dXJuIHsgY2F0ZWdvcnk6IHsgaWQ6IHsgb3BlcmF0b3I6IFdoZXJlLklOLCB2YWx1ZTogY2F0ZWdvcmllc0lkcyB9IH0gfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGxDYXRlZ29yaWVzSWRGcm9tQ2F0ZWdvcnkoY2F0ZWdvcnk6IENhdGVnb3J5KTogUHJvbWlzZTxzdHJpbmdbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnlSZXBvc2l0b3J5XHJcbiAgICAgIC5nZXRDaGlsZHJlbigrY2F0ZWdvcnkuaWQpXHJcbiAgICAgIC50aGVuKChjYXRlZ29yaWVzKSA9PiBjYXRlZ29yaWVzLm1hcCgoY2F0ZWdvcnkpID0+IGNhdGVnb3J5LmlkLnRvU3RyaW5nKCkpKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBnZXRBbGxDYXRlZ29yaWVzSWRGcm9tQ29sbGVjdGlvbihjYXRlZ29yeTogQ2F0ZWdvcnkpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5jYXRlZ29yeUNvbGxlY3Rpb25DaGlsZHJlblJlcG9zaXRvcnlcclxuICAgICAgLmZpbmQoeyBmaWx0ZXJzOiB7IGNvbGxlY3Rpb25JZDogK2NhdGVnb3J5LmlkIH0gfSlcclxuICAgICAgLnRoZW4oKHsgZGF0YSB9KSA9PiBkYXRhLm1hcCgoY2F0ZWdvcnlDb2xsZWN0aW9uKSA9PiBjYXRlZ29yeUNvbGxlY3Rpb24uY2F0ZWdvcnlJZC50b1N0cmluZygpKSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaXNDb2xsZWN0aW9uKGNhdGVnb3J5OiBDYXRlZ29yeSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuICFpc05pbChjYXRlZ29yeS5pc0NvbGxlY3Rpb24pXHJcbiAgICAgID8gY2F0ZWdvcnkuaXNDb2xsZWN0aW9uXHJcbiAgICAgIDogdGhpcy5jYXRlZ29yeVJlcG9zaXRvcnkuZ2V0KHsgaWQ6IGNhdGVnb3J5LmlkIH0pLnRoZW4oKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS5pc0NvbGxlY3Rpb24pXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,105 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { ProductsIndex, Shops, } from '@infrab4a/connect';
3
- import { DEFAULT_SHOP } from '../../consts';
4
- import { UtilHelper } from '../helpers';
5
- import { NewCategoryStructureAdapter } from './adapters';
6
- import { CatalogService } from './catalog.service';
7
- import { CategoryService } from './category.service';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@infrab4a/connect";
10
- export class WishlistService {
11
- constructor(wishlistRepository, shop, productRepository, categoryFilterRepository, categoryCollectionChildrenRepository, productIndex) {
12
- this.wishlistRepository = wishlistRepository;
13
- this.shop = shop;
14
- const categoryStructureAdapter = new NewCategoryStructureAdapter(wishlistRepository, categoryCollectionChildrenRepository);
15
- this.catalogService = new CatalogService(productRepository, categoryStructureAdapter, shop, productIndex);
16
- this.categoryService = new CategoryService(productRepository, wishlistRepository, categoryFilterRepository, categoryStructureAdapter, shop);
17
- }
18
- getCatalogService() {
19
- return this.catalogService;
20
- }
21
- getCategoryService() {
22
- return this.categoryService;
23
- }
24
- async create(personId, title, description, userFullName) {
25
- const data = {
26
- slug: UtilHelper.createSlug(`favoritos ${userFullName} ${title}`),
27
- name: title,
28
- description,
29
- metadata: {
30
- title: `${userFullName} - ${title}`,
31
- description: `${userFullName} - ${description}`,
32
- },
33
- shop: this.shop,
34
- shops: [this.shop],
35
- personId,
36
- brandCategory: false,
37
- published: true,
38
- };
39
- const newWishlist = await this.wishlistRepository.create(data);
40
- return this.wishlistRepository.update({ id: newWishlist.id, slug: `${newWishlist.id}-${newWishlist.slug}` });
41
- }
42
- update(id, title, description, userFullName) {
43
- const data = {
44
- id,
45
- slug: UtilHelper.createSlug(`${id}-favoritos ${userFullName} ${title}`),
46
- name: title,
47
- description,
48
- metadata: {
49
- title: `${userFullName} - ${title}`,
50
- description: `${userFullName} - ${description}`,
51
- },
52
- };
53
- return this.wishlistRepository.update(data);
54
- }
55
- delete(wishlistId) {
56
- return this.wishlistRepository.delete({ id: wishlistId });
57
- }
58
- getWishlistBySlug(slug) {
59
- return this.wishlistRepository.getWishlistBySlug(slug);
60
- }
61
- getWishlistsByPerson(personId) {
62
- return this.wishlistRepository.getWishlistByPerson(personId);
63
- }
64
- async addProduct(wishlistId, productId) {
65
- const wishlist = await this.wishlistRepository.get({ id: wishlistId });
66
- const hasProduct = wishlist.products.some((p) => p == productId);
67
- if (!hasProduct) {
68
- wishlist.products = [...wishlist.products, productId];
69
- return this.wishlistRepository.update({ id: wishlistId, products: wishlist.products });
70
- }
71
- return wishlist;
72
- }
73
- async removeProduct(wishlistId, productId) {
74
- const wishlist = await this.wishlistRepository.get({ id: wishlistId });
75
- const productIndex = wishlist.products.findIndex((p) => p == productId);
76
- if (productIndex != -1) {
77
- wishlist.products.splice(productIndex, 1);
78
- if (!wishlist.products.length)
79
- return this.wishlistRepository.update({ id: wishlistId, products: { action: 'remove' } });
80
- return this.wishlistRepository.update({ id: wishlistId, products: wishlist.products });
81
- }
82
- return wishlist;
83
- }
84
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: WishlistService, deps: [{ token: 'WishlistRepository' }, { token: DEFAULT_SHOP }, { token: 'ProductRepository' }, { token: 'CategoryFilterRepository' }, { token: 'CategoryCollectionChildrenRepository' }, { token: i1.ProductsIndex }], target: i0.ɵɵFactoryTarget.Injectable }); }
85
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: WishlistService }); }
86
- }
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: WishlistService, decorators: [{
88
- type: Injectable
89
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
90
- type: Inject,
91
- args: ['WishlistRepository']
92
- }] }, { type: i1.Shops, decorators: [{
93
- type: Inject,
94
- args: [DEFAULT_SHOP]
95
- }] }, { type: undefined, decorators: [{
96
- type: Inject,
97
- args: ['ProductRepository']
98
- }] }, { type: undefined, decorators: [{
99
- type: Inject,
100
- args: ['CategoryFilterRepository']
101
- }] }, { type: undefined, decorators: [{
102
- type: Inject,
103
- args: ['CategoryCollectionChildrenRepository']
104
- }] }, { type: i1.ProductsIndex }]; } });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lzaGxpc3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvc2VydmljZXMvY2F0YWxvZy93aXNobGlzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFJTCxhQUFhLEVBQ2IsS0FBSyxHQUdOLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFBOzs7QUFHcEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDaUQsa0JBQXNDLEVBQzlDLElBQVcsRUFDckIsaUJBQW9DLEVBQzdCLHdCQUFrRCxFQUV0RixvQ0FBMEUsRUFDMUUsWUFBMkI7UUFOb0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUM5QyxTQUFJLEdBQUosSUFBSSxDQUFPO1FBT2xELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSwyQkFBMkIsQ0FDOUQsa0JBQWtCLEVBQ2xCLG9DQUFvQyxDQUNyQyxDQUFBO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBVyxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDbkgsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FDeEMsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsd0JBQXdC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QkFBb0I7OzBCQUMzQixNQUFNOzJCQUFDLFlBQVk7OzBCQUNuQixNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsMEJBQTBCOzswQkFDakMsTUFBTTsyQkFBQyxzQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge1xyXG4gIENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuUmVwb3NpdG9yeSxcclxuICBDYXRlZ29yeUZpbHRlclJlcG9zaXRvcnksXHJcbiAgUHJvZHVjdFJlcG9zaXRvcnksXHJcbiAgUHJvZHVjdHNJbmRleCxcclxuICBTaG9wcyxcclxuICBXaXNobGlzdCxcclxuICBXaXNobGlzdFJlcG9zaXRvcnksXHJcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXHJcbmltcG9ydCB7IERFRkFVTFRfU0hPUCB9IGZyb20gJy4uLy4uL2NvbnN0cydcclxuaW1wb3J0IHsgVXRpbEhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMnXHJcbmltcG9ydCB7IE5ld0NhdGVnb3J5U3RydWN0dXJlQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcnMnXHJcbmltcG9ydCB7IENhdGFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9jYXRhbG9nLnNlcnZpY2UnXHJcbmltcG9ydCB7IENhdGVnb3J5U2VydmljZSB9IGZyb20gJy4vY2F0ZWdvcnkuc2VydmljZSdcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFdpc2hsaXN0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBjYXRhbG9nU2VydmljZTogQ2F0YWxvZ1NlcnZpY2VcclxuICBwcml2YXRlIGNhdGVnb3J5U2VydmljZTogQ2F0ZWdvcnlTZXJ2aWNlXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnV2lzaGxpc3RSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSB3aXNobGlzdFJlcG9zaXRvcnk6IFdpc2hsaXN0UmVwb3NpdG9yeSxcclxuICAgIEBJbmplY3QoREVGQVVMVF9TSE9QKSBwcml2YXRlIHJlYWRvbmx5IHNob3A6IFNob3BzLFxyXG4gICAgQEluamVjdCgnUHJvZHVjdFJlcG9zaXRvcnknKSBwcm9kdWN0UmVwb3NpdG9yeTogUHJvZHVjdFJlcG9zaXRvcnksXHJcbiAgICBASW5qZWN0KCdDYXRlZ29yeUZpbHRlclJlcG9zaXRvcnknKSBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnk6IENhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSxcclxuICAgIEBJbmplY3QoJ0NhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuUmVwb3NpdG9yeScpXHJcbiAgICBjYXRlZ29yeUNvbGxlY3Rpb25DaGlsZHJlblJlcG9zaXRvcnk6IENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuUmVwb3NpdG9yeSxcclxuICAgIHByb2R1Y3RJbmRleDogUHJvZHVjdHNJbmRleCxcclxuICApIHtcclxuICAgIGNvbnN0IGNhdGVnb3J5U3RydWN0dXJlQWRhcHRlciA9IG5ldyBOZXdDYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIoXHJcbiAgICAgIHdpc2hsaXN0UmVwb3NpdG9yeSxcclxuICAgICAgY2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5SZXBvc2l0b3J5LFxyXG4gICAgKVxyXG5cclxuICAgIHRoaXMuY2F0YWxvZ1NlcnZpY2UgPSBuZXcgQ2F0YWxvZ1NlcnZpY2U8V2lzaGxpc3Q+KHByb2R1Y3RSZXBvc2l0b3J5LCBjYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIsIHNob3AsIHByb2R1Y3RJbmRleClcclxuICAgIHRoaXMuY2F0ZWdvcnlTZXJ2aWNlID0gbmV3IENhdGVnb3J5U2VydmljZShcclxuICAgICAgcHJvZHVjdFJlcG9zaXRvcnksXHJcbiAgICAgIHdpc2hsaXN0UmVwb3NpdG9yeSxcclxuICAgICAgY2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5LFxyXG4gICAgICBjYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIsXHJcbiAgICAgIHNob3AsXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBnZXRDYXRhbG9nU2VydmljZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmNhdGFsb2dTZXJ2aWNlXHJcbiAgfVxyXG5cclxuICBnZXRDYXRlZ29yeVNlcnZpY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jYXRlZ29yeVNlcnZpY2VcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZShwZXJzb25JZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCB1c2VyRnVsbE5hbWU6IHN0cmluZyk6IFByb21pc2U8V2lzaGxpc3Q+IHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIHNsdWc6IFV0aWxIZWxwZXIuY3JlYXRlU2x1ZyhgZmF2b3JpdG9zICR7dXNlckZ1bGxOYW1lfSAke3RpdGxlfWApLFxyXG4gICAgICBuYW1lOiB0aXRsZSxcclxuICAgICAgZGVzY3JpcHRpb24sXHJcbiAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgdGl0bGU6IGAke3VzZXJGdWxsTmFtZX0gLSAke3RpdGxlfWAsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGAke3VzZXJGdWxsTmFtZX0gLSAke2Rlc2NyaXB0aW9ufWAsXHJcbiAgICAgIH0sXHJcbiAgICAgIHNob3A6IHRoaXMuc2hvcCxcclxuICAgICAgc2hvcHM6IFt0aGlzLnNob3BdLFxyXG4gICAgICBwZXJzb25JZCxcclxuICAgICAgYnJhbmRDYXRlZ29yeTogZmFsc2UsXHJcbiAgICAgIHB1Ymxpc2hlZDogdHJ1ZSxcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdXaXNobGlzdCA9IGF3YWl0IHRoaXMud2lzaGxpc3RSZXBvc2l0b3J5LmNyZWF0ZShkYXRhKVxyXG5cclxuICAgIHJldHVybiB0aGlzLndpc2hsaXN0UmVwb3NpdG9yeS51cGRhdGUoeyBpZDogbmV3V2lzaGxpc3QuaWQsIHNsdWc6IGAke25ld1dpc2hsaXN0LmlkfS0ke25ld1dpc2hsaXN0LnNsdWd9YCB9KVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGlkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHVzZXJGdWxsTmFtZTogc3RyaW5nKTogUHJvbWlzZTxXaXNobGlzdD4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgaWQsXHJcbiAgICAgIHNsdWc6IFV0aWxIZWxwZXIuY3JlYXRlU2x1ZyhgJHtpZH0tZmF2b3JpdG9zICR7dXNlckZ1bGxOYW1lfSAke3RpdGxlfWApLFxyXG4gICAgICBuYW1lOiB0aXRsZSxcclxuICAgICAgZGVzY3JpcHRpb24sXHJcbiAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgdGl0bGU6IGAke3VzZXJGdWxsTmFtZX0gLSAke3RpdGxlfWAsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGAke3VzZXJGdWxsTmFtZX0gLSAke2Rlc2NyaXB0aW9ufWAsXHJcbiAgICAgIH0sXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMud2lzaGxpc3RSZXBvc2l0b3J5LnVwZGF0ZShkYXRhKVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlKHdpc2hsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2lzaGxpc3RSZXBvc2l0b3J5LmRlbGV0ZSh7IGlkOiB3aXNobGlzdElkIH0pXHJcbiAgfVxyXG5cclxuICBnZXRXaXNobGlzdEJ5U2x1ZyhzbHVnOiBzdHJpbmcpOiBQcm9taXNlPFdpc2hsaXN0PiB7XHJcbiAgICByZXR1cm4gdGhpcy53aXNobGlzdFJlcG9zaXRvcnkuZ2V0V2lzaGxpc3RCeVNsdWcoc2x1ZylcclxuICB9XHJcblxyXG4gIGdldFdpc2hsaXN0c0J5UGVyc29uKHBlcnNvbklkOiBzdHJpbmcpOiBQcm9taXNlPFdpc2hsaXN0W10+IHtcclxuICAgIHJldHVybiB0aGlzLndpc2hsaXN0UmVwb3NpdG9yeS5nZXRXaXNobGlzdEJ5UGVyc29uKHBlcnNvbklkKVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkUHJvZHVjdCh3aXNobGlzdElkOiBzdHJpbmcsIHByb2R1Y3RJZDogc3RyaW5nKTogUHJvbWlzZTxXaXNobGlzdD4ge1xyXG4gICAgY29uc3Qgd2lzaGxpc3QgPSBhd2FpdCB0aGlzLndpc2hsaXN0UmVwb3NpdG9yeS5nZXQoeyBpZDogd2lzaGxpc3RJZCB9KVxyXG4gICAgY29uc3QgaGFzUHJvZHVjdCA9IHdpc2hsaXN0LnByb2R1Y3RzLnNvbWUoKHApID0+IHAgPT0gcHJvZHVjdElkKVxyXG5cclxuICAgIGlmICghaGFzUHJvZHVjdCkge1xyXG4gICAgICB3aXNobGlzdC5wcm9kdWN0cyA9IFsuLi53aXNobGlzdC5wcm9kdWN0cywgcHJvZHVjdElkXVxyXG4gICAgICByZXR1cm4gdGhpcy53aXNobGlzdFJlcG9zaXRvcnkudXBkYXRlKHsgaWQ6IHdpc2hsaXN0SWQsIHByb2R1Y3RzOiB3aXNobGlzdC5wcm9kdWN0cyB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB3aXNobGlzdFxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlUHJvZHVjdCh3aXNobGlzdElkOiBzdHJpbmcsIHByb2R1Y3RJZDogc3RyaW5nKTogUHJvbWlzZTxXaXNobGlzdD4ge1xyXG4gICAgY29uc3Qgd2lzaGxpc3QgPSBhd2FpdCB0aGlzLndpc2hsaXN0UmVwb3NpdG9yeS5nZXQoeyBpZDogd2lzaGxpc3RJZCB9KVxyXG4gICAgY29uc3QgcHJvZHVjdEluZGV4ID0gd2lzaGxpc3QucHJvZHVjdHMuZmluZEluZGV4KChwKSA9PiBwID09IHByb2R1Y3RJZClcclxuXHJcbiAgICBpZiAocHJvZHVjdEluZGV4ICE9IC0xKSB7XHJcbiAgICAgIHdpc2hsaXN0LnByb2R1Y3RzLnNwbGljZShwcm9kdWN0SW5kZXgsIDEpXHJcblxyXG4gICAgICBpZiAoIXdpc2hsaXN0LnByb2R1Y3RzLmxlbmd0aClcclxuICAgICAgICByZXR1cm4gdGhpcy53aXNobGlzdFJlcG9zaXRvcnkudXBkYXRlKHsgaWQ6IHdpc2hsaXN0SWQsIHByb2R1Y3RzOiB7IGFjdGlvbjogJ3JlbW92ZScgfSB9KVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMud2lzaGxpc3RSZXBvc2l0b3J5LnVwZGF0ZSh7IGlkOiB3aXNobGlzdElkLCBwcm9kdWN0czogd2lzaGxpc3QucHJvZHVjdHMgfSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gd2lzaGxpc3RcclxuICB9XHJcbn1cclxuIl19