@infrab4a/connect-angular 4.2.8 → 4.2.9-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/angular-connect.module.mjs +97 -0
- package/esm2020/angular-elastic-search.module.mjs +34 -0
- package/esm2020/angular-firebase-auth.module.mjs +115 -0
- package/esm2020/angular-firestore.module.mjs +483 -0
- package/esm2020/angular-hasura-graphql.module.mjs +265 -0
- package/{esm2022 → esm2020}/services/auth.service.mjs +4 -4
- package/{esm2022 → esm2020}/services/cart.service.mjs +4 -4
- package/{esm2022 → esm2020}/services/catalog/adapters/new-category-structure.adapter.mjs +4 -4
- package/{esm2022 → esm2020}/services/catalog/adapters/old-category-structure.adapter.mjs +4 -4
- package/{esm2022 → esm2020}/services/catalog/catalog.service.mjs +4 -4
- package/{esm2022 → esm2020}/services/catalog/category.service.mjs +4 -4
- package/{esm2022 → esm2020}/services/catalog/wishlist.service.mjs +4 -4
- package/{esm2022 → esm2020}/services/checkout-subscription.service.mjs +4 -4
- package/{esm2022 → esm2020}/services/checkout.service.mjs +4 -4
- package/{esm2022 → esm2020}/services/coupon.service.mjs +4 -4
- package/esm2020/services/home-shop.service.mjs +118 -0
- package/{esm2022 → esm2020}/services/order.service.mjs +4 -4
- package/{esm2022 → esm2020}/services/shipping.service.mjs +4 -4
- package/fesm2015/infrab4a-connect-angular.mjs +2318 -0
- package/fesm2015/infrab4a-connect-angular.mjs.map +1 -0
- package/{fesm2022 → fesm2020}/infrab4a-connect-angular.mjs +494 -490
- package/fesm2020/infrab4a-connect-angular.mjs.map +1 -0
- package/package.json +11 -5
- package/esm2022/angular-connect.module.mjs +0 -97
- package/esm2022/angular-elastic-search.module.mjs +0 -34
- package/esm2022/angular-firebase-auth.module.mjs +0 -115
- package/esm2022/angular-firestore.module.mjs +0 -483
- package/esm2022/angular-hasura-graphql.module.mjs +0 -265
- package/esm2022/services/home-shop.service.mjs +0 -114
- package/fesm2022/infrab4a-connect-angular.mjs.map +0 -1
- /package/{esm2022 → esm2020}/consts/backend-url.const.mjs +0 -0
- /package/{esm2022 → esm2020}/consts/category-structure.mjs +0 -0
- /package/{esm2022 → esm2020}/consts/default-shop.const.mjs +0 -0
- /package/{esm2022 → esm2020}/consts/es-config.const.mjs +0 -0
- /package/{esm2022 → esm2020}/consts/firebase-const.mjs +0 -0
- /package/{esm2022 → esm2020}/consts/hasura-options.const.mjs +0 -0
- /package/{esm2022 → esm2020}/consts/index.mjs +0 -0
- /package/{esm2022 → esm2020}/helpers/index.mjs +0 -0
- /package/{esm2022 → esm2020}/helpers/mobile-operation-system-checker.helper.mjs +0 -0
- /package/{esm2022 → esm2020}/index.mjs +0 -0
- /package/{esm2022 → esm2020}/infrab4a-connect-angular.mjs +0 -0
- /package/{esm2022 → esm2020}/services/catalog/adapters/category-structure.adapter.mjs +0 -0
- /package/{esm2022 → esm2020}/services/catalog/adapters/index.mjs +0 -0
- /package/{esm2022 → esm2020}/services/catalog/enums/index.mjs +0 -0
- /package/{esm2022 → esm2020}/services/catalog/enums/product-sorts.enum.mjs +0 -0
- /package/{esm2022 → esm2020}/services/catalog/index.mjs +0 -0
- /package/{esm2022 → esm2020}/services/catalog/models/category-with-tree.model.mjs +0 -0
- /package/{esm2022 → esm2020}/services/catalog/models/index.mjs +0 -0
- /package/{esm2022 → esm2020}/services/catalog/types/index.mjs +0 -0
- /package/{esm2022 → esm2020}/services/catalog/types/product-sort.type.mjs +0 -0
- /package/{esm2022 → esm2020}/services/helpers/index.mjs +0 -0
- /package/{esm2022 → esm2020}/services/helpers/util.helper.mjs +0 -0
- /package/{esm2022 → esm2020}/services/index.mjs +0 -0
- /package/{esm2022 → esm2020}/services/types/index.mjs +0 -0
- /package/{esm2022 → esm2020}/services/types/required-checkout-data.type.mjs +0 -0
- /package/{esm2022 → esm2020}/services/types/required-checkout-subscription-data.type.mjs +0 -0
- /package/{esm2022 → esm2020}/services/types/shipping-methods.type.mjs +0 -0
- /package/{esm2022 → esm2020}/types/firebase-app-config.type.mjs +0 -0
- /package/{esm2022 → esm2020}/types/index.mjs +0 -0
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
import { isPlatformBrowser } from '@angular/common';
|
|
2
|
-
import { NgModule, PLATFORM_ID } from '@angular/core';
|
|
3
|
-
import { CategoryCollectionChildrenHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository, CategoryHasuraGraphQLRepository, FilterHasuraGraphQLRepository, FilterOptionHasuraGraphQLRepository, ProductHasuraGraphQLRepository, ProductReviewsHasuraGraphQLRepository, 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: 'ProductReviewsRepository',
|
|
63
|
-
useExisting: ProductReviewsHasuraGraphQLRepository,
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
provide: ProductReviewsHasuraGraphQLRepository,
|
|
67
|
-
useFactory: (hasuraConfig) => {
|
|
68
|
-
return new ProductReviewsHasuraGraphQLRepository(hasuraConfig);
|
|
69
|
-
},
|
|
70
|
-
deps: ['HasuraConfig'],
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
provide: 'VariantRepository',
|
|
74
|
-
useExisting: VariantHasuraGraphQLRepository,
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
provide: VariantHasuraGraphQLRepository,
|
|
78
|
-
useFactory: (hasuraConfig) => {
|
|
79
|
-
return new VariantHasuraGraphQLRepository(hasuraConfig);
|
|
80
|
-
},
|
|
81
|
-
deps: ['HasuraConfig'],
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
provide: 'CategoryFilterRepository',
|
|
85
|
-
useExisting: CategoryFilterHasuraGraphQLRepository,
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
provide: CategoryFilterHasuraGraphQLRepository,
|
|
89
|
-
useFactory: (options) => {
|
|
90
|
-
return new CategoryFilterHasuraGraphQLRepository(options);
|
|
91
|
-
},
|
|
92
|
-
deps: ['HasuraConfig'],
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
provide: 'FilterOptionRepository',
|
|
96
|
-
useExisting: FilterOptionHasuraGraphQLRepository,
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
provide: FilterOptionHasuraGraphQLRepository,
|
|
100
|
-
useFactory: (options) => {
|
|
101
|
-
return new FilterOptionHasuraGraphQLRepository(options);
|
|
102
|
-
},
|
|
103
|
-
deps: ['HasuraConfig'],
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
provide: 'FilterRepository',
|
|
107
|
-
useExisting: FilterHasuraGraphQLRepository,
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
provide: FilterHasuraGraphQLRepository,
|
|
111
|
-
useFactory: (options, filterOptionRepository, categoryFilterRepository) => {
|
|
112
|
-
return new FilterHasuraGraphQLRepository(options, filterOptionRepository, categoryFilterRepository);
|
|
113
|
-
},
|
|
114
|
-
deps: ['HasuraConfig', FilterOptionHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
provide: CategoryCollectionChildrenHasuraGraphQLRepository,
|
|
118
|
-
useFactory: (options) => new CategoryCollectionChildrenHasuraGraphQLRepository(options),
|
|
119
|
-
deps: ['HasuraConfig'],
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
provide: 'CategoryCollectionChildrenRepository',
|
|
123
|
-
useExisting: CategoryCollectionChildrenHasuraGraphQLRepository,
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
provide: WishlistHasuraGraphQLRepository,
|
|
127
|
-
useFactory: (options, categoryFilterRepository) => {
|
|
128
|
-
return new WishlistHasuraGraphQLRepository(options, categoryFilterRepository);
|
|
129
|
-
},
|
|
130
|
-
deps: ['HasuraConfig', CategoryFilterHasuraGraphQLRepository],
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
provide: 'WishlistRepository',
|
|
134
|
-
useExisting: WishlistHasuraGraphQLRepository,
|
|
135
|
-
},
|
|
136
|
-
] }); }
|
|
137
|
-
}
|
|
138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: AngularHasuraGraphQLModule, decorators: [{
|
|
139
|
-
type: NgModule,
|
|
140
|
-
args: [{
|
|
141
|
-
providers: [
|
|
142
|
-
{
|
|
143
|
-
provide: 'HasuraConfig',
|
|
144
|
-
useFactory: (options, platformId) => ({
|
|
145
|
-
endpoint: options.endpoint,
|
|
146
|
-
authOptions: options.credentials,
|
|
147
|
-
interceptors: {
|
|
148
|
-
request: (request) => {
|
|
149
|
-
if (isPlatformBrowser(platformId))
|
|
150
|
-
return request;
|
|
151
|
-
const interval = setInterval(() => { }, 100);
|
|
152
|
-
request.interval = interval;
|
|
153
|
-
return request;
|
|
154
|
-
},
|
|
155
|
-
response: (response, request) => {
|
|
156
|
-
if (isPlatformBrowser(platformId))
|
|
157
|
-
return response;
|
|
158
|
-
clearInterval(request.interval);
|
|
159
|
-
return response;
|
|
160
|
-
},
|
|
161
|
-
},
|
|
162
|
-
}),
|
|
163
|
-
deps: [HASURA_OPTIONS, PLATFORM_ID],
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
provide: 'CategoryRepository',
|
|
167
|
-
useExisting: CategoryHasuraGraphQLRepository,
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
provide: CategoryHasuraGraphQLRepository,
|
|
171
|
-
useFactory: (options, productRepository, categoryFilterRepository) => {
|
|
172
|
-
return new CategoryHasuraGraphQLRepository(options, productRepository, categoryFilterRepository);
|
|
173
|
-
},
|
|
174
|
-
deps: ['HasuraConfig', ProductHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
provide: 'ProductRepository',
|
|
178
|
-
useExisting: ProductHasuraGraphQLRepository,
|
|
179
|
-
},
|
|
180
|
-
{
|
|
181
|
-
provide: ProductHasuraGraphQLRepository,
|
|
182
|
-
useFactory: (hasuraConfig) => {
|
|
183
|
-
return new ProductHasuraGraphQLRepository(hasuraConfig);
|
|
184
|
-
},
|
|
185
|
-
deps: ['HasuraConfig'],
|
|
186
|
-
},
|
|
187
|
-
{
|
|
188
|
-
provide: 'ProductReviewsRepository',
|
|
189
|
-
useExisting: ProductReviewsHasuraGraphQLRepository,
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
provide: ProductReviewsHasuraGraphQLRepository,
|
|
193
|
-
useFactory: (hasuraConfig) => {
|
|
194
|
-
return new ProductReviewsHasuraGraphQLRepository(hasuraConfig);
|
|
195
|
-
},
|
|
196
|
-
deps: ['HasuraConfig'],
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
provide: 'VariantRepository',
|
|
200
|
-
useExisting: VariantHasuraGraphQLRepository,
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
provide: VariantHasuraGraphQLRepository,
|
|
204
|
-
useFactory: (hasuraConfig) => {
|
|
205
|
-
return new VariantHasuraGraphQLRepository(hasuraConfig);
|
|
206
|
-
},
|
|
207
|
-
deps: ['HasuraConfig'],
|
|
208
|
-
},
|
|
209
|
-
{
|
|
210
|
-
provide: 'CategoryFilterRepository',
|
|
211
|
-
useExisting: CategoryFilterHasuraGraphQLRepository,
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
provide: CategoryFilterHasuraGraphQLRepository,
|
|
215
|
-
useFactory: (options) => {
|
|
216
|
-
return new CategoryFilterHasuraGraphQLRepository(options);
|
|
217
|
-
},
|
|
218
|
-
deps: ['HasuraConfig'],
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
provide: 'FilterOptionRepository',
|
|
222
|
-
useExisting: FilterOptionHasuraGraphQLRepository,
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
provide: FilterOptionHasuraGraphQLRepository,
|
|
226
|
-
useFactory: (options) => {
|
|
227
|
-
return new FilterOptionHasuraGraphQLRepository(options);
|
|
228
|
-
},
|
|
229
|
-
deps: ['HasuraConfig'],
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
provide: 'FilterRepository',
|
|
233
|
-
useExisting: FilterHasuraGraphQLRepository,
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
provide: FilterHasuraGraphQLRepository,
|
|
237
|
-
useFactory: (options, filterOptionRepository, categoryFilterRepository) => {
|
|
238
|
-
return new FilterHasuraGraphQLRepository(options, filterOptionRepository, categoryFilterRepository);
|
|
239
|
-
},
|
|
240
|
-
deps: ['HasuraConfig', FilterOptionHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
provide: CategoryCollectionChildrenHasuraGraphQLRepository,
|
|
244
|
-
useFactory: (options) => new CategoryCollectionChildrenHasuraGraphQLRepository(options),
|
|
245
|
-
deps: ['HasuraConfig'],
|
|
246
|
-
},
|
|
247
|
-
{
|
|
248
|
-
provide: 'CategoryCollectionChildrenRepository',
|
|
249
|
-
useExisting: CategoryCollectionChildrenHasuraGraphQLRepository,
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
provide: WishlistHasuraGraphQLRepository,
|
|
253
|
-
useFactory: (options, categoryFilterRepository) => {
|
|
254
|
-
return new WishlistHasuraGraphQLRepository(options, categoryFilterRepository);
|
|
255
|
-
},
|
|
256
|
-
deps: ['HasuraConfig', CategoryFilterHasuraGraphQLRepository],
|
|
257
|
-
},
|
|
258
|
-
{
|
|
259
|
-
provide: 'WishlistRepository',
|
|
260
|
-
useExisting: WishlistHasuraGraphQLRepository,
|
|
261
|
-
},
|
|
262
|
-
],
|
|
263
|
-
}]
|
|
264
|
-
}] });
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1oYXN1cmEtZ3JhcGhxbC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2FuZ3VsYXItaGFzdXJhLWdyYXBocWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ25ELE9BQU8sRUFBdUIsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxRSxPQUFPLEVBQ0wsaURBQWlELEVBQ2pELHFDQUFxQyxFQUVyQywrQkFBK0IsRUFFL0IsNkJBQTZCLEVBQzdCLG1DQUFtQyxFQUtuQyw4QkFBOEIsRUFFOUIscUNBQXFDLEVBRXJDLDhCQUE4QixFQUU5QiwrQkFBK0IsR0FDaEMsTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFBOztBQWlKekMsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BR3BCO1FBQ0MsT0FBTztZQUNMLFFBQVEsRUFBRSwwQkFBMEI7WUFDcEMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztTQUM1RCxDQUFBO0lBQ0gsQ0FBQzs4R0FUVSwwQkFBMEI7K0dBQTFCLDBCQUEwQjsrR0FBMUIsMEJBQTBCLGFBNUkxQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixVQUFVLEVBQUUsQ0FBQyxPQUE2QixFQUFFLFVBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2xFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtvQkFDMUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO29CQUNoQyxZQUFZLEVBQUU7d0JBQ1osT0FBTyxFQUFFLENBQUMsT0FBMEQsRUFBRSxFQUFFOzRC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QUM3QztxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gIENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gIENhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSxcbiAgQ2F0ZWdvcnlIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgQ2F0ZWdvcnlSZXBvc2l0b3J5LFxuICBGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgRmlsdGVyT3B0aW9uSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gIEZpbHRlck9wdGlvblJlcG9zaXRvcnksXG4gIEZpbHRlclJlcG9zaXRvcnksXG4gIEdyYXBoUUxQYXJhbXMsXG4gIEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9ucyxcbiAgUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICBQcm9kdWN0UmVwb3NpdG9yeSxcbiAgUHJvZHVjdFJldmlld3NIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgUHJvZHVjdFJldmlld3NSZXBvc2l0b3J5LFxuICBWYXJpYW50SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gIFZhcmlhbnRSZXBvc2l0b3J5LFxuICBXaXNobGlzdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxufSBmcm9tICdAaW5mcmFiNGEvY29ubmVjdCdcbmltcG9ydCB7IEhBU1VSQV9PUFRJT05TIH0gZnJvbSAnLi9jb25zdHMnXG5cbmV4cG9ydCB0eXBlIEhhc3VyYUdyYXBoUUxPcHRpb25zID0geyBlbmRwb2ludDogc3RyaW5nOyBjcmVkZW50aWFsczogSGFzdXJhR3JhcGhRTEF1dGhPcHRpb25zIH1cblxuQE5nTW9kdWxlKHtcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0hhc3VyYUNvbmZpZycsXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogSGFzdXJhR3JhcGhRTE9wdGlvbnMsIHBsYXRmb3JtSWQ6IHN0cmluZykgPT4gKHtcbiAgICAgICAgZW5kcG9pbnQ6IG9wdGlvbnMuZW5kcG9pbnQsXG4gICAgICAgIGF1dGhPcHRpb25zOiBvcHRpb25zLmNyZWRlbnRpYWxzLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IHtcbiAgICAgICAgICByZXF1ZXN0OiAocmVxdWVzdDogR3JhcGhRTFBhcmFtczxhbnk+ICYgeyBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpKSByZXR1cm4gcmVxdWVzdFxuXG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHt9LCAxMDApXG5cbiAgICAgICAgICAgIHJlcXVlc3QuaW50ZXJ2YWwgPSBpbnRlcnZhbFxuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzcG9uc2U6IChyZXNwb25zZTogYW55LCByZXF1ZXN0OiBHcmFwaFFMUGFyYW1zPGFueT4gJiB7IGludGVydmFsOiBOb2RlSlMuVGltZW91dCB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIocGxhdGZvcm1JZCkpIHJldHVybiByZXNwb25zZVxuXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHJlcXVlc3QuaW50ZXJ2YWwpXG5cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGRlcHM6IFtIQVNVUkFfT1BUSU9OUywgUExBVEZPUk1fSURdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0NhdGVnb3J5UmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogQ2F0ZWdvcnlIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IENhdGVnb3J5SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAoXG4gICAgICAgIG9wdGlvbnM6IGFueSxcbiAgICAgICAgcHJvZHVjdFJlcG9zaXRvcnk6IFByb2R1Y3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICAgICAgY2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5OiBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgKTogQ2F0ZWdvcnlSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXRlZ29yeUhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KG9wdGlvbnMsIHByb2R1Y3RSZXBvc2l0b3J5LCBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnkpXG4gICAgICB9LFxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnLCBQcm9kdWN0SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksIENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnldLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1Byb2R1Y3RSZXBvc2l0b3J5JyxcbiAgICAgIHVzZUV4aXN0aW5nOiBQcm9kdWN0SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBQcm9kdWN0SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAoaGFzdXJhQ29uZmlnOiBhbnkpOiBQcm9kdWN0UmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KGhhc3VyYUNvbmZpZylcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1Byb2R1Y3RSZXZpZXdzUmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogUHJvZHVjdFJldmlld3NIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFByb2R1Y3RSZXZpZXdzSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAoaGFzdXJhQ29uZmlnOiBhbnkpOiBQcm9kdWN0UmV2aWV3c1JlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb2R1Y3RSZXZpZXdzSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnkoaGFzdXJhQ29uZmlnKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnSGFzdXJhQ29uZmlnJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnVmFyaWFudFJlcG9zaXRvcnknLFxuICAgICAgdXNlRXhpc3Rpbmc6IFZhcmlhbnRIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFZhcmlhbnRIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICAgIHVzZUZhY3Rvcnk6IChoYXN1cmFDb25maWc6IGFueSk6IFZhcmlhbnRSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBWYXJpYW50SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnkoaGFzdXJhQ29uZmlnKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnSGFzdXJhQ29uZmlnJ10sXG4gICAgfSxcblxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdDYXRlZ29yeUZpbHRlclJlcG9zaXRvcnknLFxuICAgICAgdXNlRXhpc3Rpbmc6IENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKG9wdGlvbnM6IGFueSk6IENhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShvcHRpb25zKVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnSGFzdXJhQ29uZmlnJ10sXG4gICAgfSxcblxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdGaWx0ZXJPcHRpb25SZXBvc2l0b3J5JyxcbiAgICAgIHVzZUV4aXN0aW5nOiBGaWx0ZXJPcHRpb25IYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEZpbHRlck9wdGlvbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKG9wdGlvbnM6IGFueSk6IEZpbHRlck9wdGlvblJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlck9wdGlvbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdGaWx0ZXJSZXBvc2l0b3J5JyxcbiAgICAgIHVzZUV4aXN0aW5nOiBGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKFxuICAgICAgICBvcHRpb25zOiBhbnksXG4gICAgICAgIGZpbHRlck9wdGlvblJlcG9zaXRvcnk6IEZpbHRlck9wdGlvbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgICBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnk6IENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICApOiBGaWx0ZXJSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShvcHRpb25zLCBmaWx0ZXJPcHRpb25SZXBvc2l0b3J5LCBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnkpXG4gICAgICB9LFxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnLCBGaWx0ZXJPcHRpb25IYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSwgQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeV0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBDYXRlZ29yeUNvbGxlY3Rpb25DaGlsZHJlbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKG9wdGlvbnM6IGFueSk6IENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnkgPT5cbiAgICAgICAgbmV3IENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnkob3B0aW9ucyksXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0NhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuUmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogQ2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5IYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFdpc2hsaXN0SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAoXG4gICAgICAgIG9wdGlvbnM6IGFueSxcbiAgICAgICAgY2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5OiBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgKTogV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShvcHRpb25zLCBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnkpXG4gICAgICB9LFxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnLCBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdXaXNobGlzdFJlcG9zaXRvcnknLFxuICAgICAgdXNlRXhpc3Rpbmc6IFdpc2hsaXN0SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckhhc3VyYUdyYXBoUUxNb2R1bGUge1xuICBzdGF0aWMgaW5pdGlhbGl6ZUFwcChvcHRpb25zOiB7XG4gICAgZW5kcG9pbnQ6IHN0cmluZ1xuICAgIGNyZWRlbnRpYWxzOiBIYXN1cmFHcmFwaFFMQXV0aE9wdGlvbnNcbiAgfSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QW5ndWxhckhhc3VyYUdyYXBoUUxNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFuZ3VsYXJIYXN1cmFHcmFwaFFMTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBIQVNVUkFfT1BUSU9OUywgdXNlVmFsdWU6IG9wdGlvbnMgfV0sXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { add, Category, pick, Product, RequiredArgumentError, Shops, Where, } from '@infrab4a/connect';
|
|
3
|
-
import { forkJoin, from, of, throwError } from 'rxjs';
|
|
4
|
-
import { concatMap, map, tap } from 'rxjs/operators';
|
|
5
|
-
import { DEFAULT_SHOP } from '../consts';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@infrab4a/connect";
|
|
8
|
-
export class HomeShopService {
|
|
9
|
-
get homeId() {
|
|
10
|
-
if (this.defaultShop === Shops.GLAMSHOP)
|
|
11
|
-
return 'glamshop';
|
|
12
|
-
if (this.defaultShop === Shops.MENSMARKET)
|
|
13
|
-
return 'mens_market';
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
constructor(categoryRepository, homeRepository, productRepository, defaultShop) {
|
|
17
|
-
this.categoryRepository = categoryRepository;
|
|
18
|
-
this.homeRepository = homeRepository;
|
|
19
|
-
this.productRepository = productRepository;
|
|
20
|
-
this.defaultShop = defaultShop;
|
|
21
|
-
this.buildCategoryGroupWithRequiredData = (group) => ({
|
|
22
|
-
category: Category.toInstance(pick(group?.category?.toPlain() || {}, ['id', 'name', 'slug', 'conditions'])),
|
|
23
|
-
products: group?.products?.map((product) => Product.toInstance(pick(product?.toPlain() || {}, [
|
|
24
|
-
'id',
|
|
25
|
-
'price',
|
|
26
|
-
'reviews',
|
|
27
|
-
'hasVariants',
|
|
28
|
-
'slug',
|
|
29
|
-
'sku',
|
|
30
|
-
'stock',
|
|
31
|
-
'costPrice',
|
|
32
|
-
'images',
|
|
33
|
-
'miniatures',
|
|
34
|
-
'name',
|
|
35
|
-
'weight',
|
|
36
|
-
'rate',
|
|
37
|
-
'type',
|
|
38
|
-
]))) || [],
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
getHomeData() {
|
|
42
|
-
return this.getHomeConfiguration().pipe(map((home) => (home?.data?.expiresAt > new Date() ? home : null)), concatMap((home) => home
|
|
43
|
-
? of(home)
|
|
44
|
-
: forkJoin([this.getDiscoverProducts(), this.getFeaturedProducts(), this.getVerticalProducts()]).pipe(map(([discoverProducts, featuredProducts, verticalProducts]) => ({
|
|
45
|
-
discoverProducts,
|
|
46
|
-
featuredProducts,
|
|
47
|
-
verticalProducts,
|
|
48
|
-
})), concatMap((data) => this.saveHomeData(data)))));
|
|
49
|
-
}
|
|
50
|
-
getBanners(type) {
|
|
51
|
-
return this.getHomeConfiguration().pipe(map((home) => {
|
|
52
|
-
if (type === 'brand')
|
|
53
|
-
return home.brandsCarousel;
|
|
54
|
-
if (type === 'buyToWin')
|
|
55
|
-
return [home.buyToWinBanner];
|
|
56
|
-
if (type === 'block')
|
|
57
|
-
return home.blockBanners;
|
|
58
|
-
if (type === 'blog')
|
|
59
|
-
return [home.blogBanner];
|
|
60
|
-
return [];
|
|
61
|
-
}));
|
|
62
|
-
}
|
|
63
|
-
getMinValueForFreeShipping() {
|
|
64
|
-
return this.getHomeConfiguration().pipe(map((home) => home.minValueForFreeShipping));
|
|
65
|
-
}
|
|
66
|
-
getDiscoverProducts() {
|
|
67
|
-
return this.getHomeConfiguration().pipe(concatMap((home) => from(this.categoryRepository.getCategoriesForHome(home.discoverCategories)).pipe(map((groups) => groups.map(this.buildCategoryGroupWithRequiredData)))));
|
|
68
|
-
}
|
|
69
|
-
getFeaturedProducts() {
|
|
70
|
-
return this.getHomeConfiguration().pipe(concatMap((home) => from(this.categoryRepository.getCategoriesForHome(home.featuredCategories)).pipe(map((groups) => groups.map(this.buildCategoryGroupWithRequiredData)))));
|
|
71
|
-
}
|
|
72
|
-
getVerticalProducts() {
|
|
73
|
-
return this.getHomeConfiguration().pipe(concatMap((home) => forkJoin(home.verticalCarousels.filter(Boolean).map((id) => from(this.categoryRepository.get({ id })).pipe(concatMap((category) => from(this.productRepository.find({
|
|
74
|
-
filters: { categories: { operator: Where.IN, value: [category.id] } },
|
|
75
|
-
limits: { limit: 12 },
|
|
76
|
-
})).pipe(map((products) => ({ category, products })))), map(({ category, products }) => ({ category, products: products.data })), map(this.buildCategoryGroupWithRequiredData))))));
|
|
77
|
-
}
|
|
78
|
-
getHomeConfiguration() {
|
|
79
|
-
return of(this.homeConfiguration).pipe(concatMap((home) => home
|
|
80
|
-
? of(home)
|
|
81
|
-
: !this.homeId
|
|
82
|
-
? throwError(new RequiredArgumentError(['homeId']))
|
|
83
|
-
: from(this.homeRepository.get({ id: this.homeId })).pipe(tap((homeLoaded) => (this.homeConfiguration = homeLoaded)))));
|
|
84
|
-
}
|
|
85
|
-
saveHomeData(homeData) {
|
|
86
|
-
const data = {
|
|
87
|
-
createdAt: new Date(),
|
|
88
|
-
expiresAt: add(new Date(), { hours: 1 }),
|
|
89
|
-
data: homeData,
|
|
90
|
-
};
|
|
91
|
-
return from(this.homeRepository.update({
|
|
92
|
-
id: this.homeId,
|
|
93
|
-
data,
|
|
94
|
-
})).pipe(tap(() => (this.homeConfiguration.data = data)), map(() => this.homeConfiguration));
|
|
95
|
-
}
|
|
96
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: HomeShopService, deps: [{ token: 'CategoryRepository' }, { token: 'HomeRepository' }, { token: 'ProductRepository' }, { token: DEFAULT_SHOP }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
97
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: HomeShopService }); }
|
|
98
|
-
}
|
|
99
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.6", ngImport: i0, type: HomeShopService, decorators: [{
|
|
100
|
-
type: Injectable
|
|
101
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
102
|
-
type: Inject,
|
|
103
|
-
args: ['CategoryRepository']
|
|
104
|
-
}] }, { type: undefined, decorators: [{
|
|
105
|
-
type: Inject,
|
|
106
|
-
args: ['HomeRepository']
|
|
107
|
-
}] }, { type: undefined, decorators: [{
|
|
108
|
-
type: Inject,
|
|
109
|
-
args: ['ProductRepository']
|
|
110
|
-
}] }, { type: i1.Shops, decorators: [{
|
|
111
|
-
type: Inject,
|
|
112
|
-
args: [DEFAULT_SHOP]
|
|
113
|
-
}] }]; } });
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS1zaG9wLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2hvbWUtc2hvcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFDTCxHQUFHLEVBRUgsUUFBUSxFQU1SLElBQUksRUFDSixPQUFPLEVBRVAscUJBQXFCLEVBQ3JCLEtBQUssRUFDTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUE7OztBQU14QyxNQUFNLE9BQU8sZUFBZTtJQUcxQixJQUFZLE1BQU07UUFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxRQUFRO1lBQUUsT0FBTyxVQUFVLENBQUE7UUFDMUQsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxVQUFVO1lBQUUsT0FBTyxhQUFhLENBQUE7UUFFL0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsWUFDaUQsa0JBQXNDLEVBQzFDLGNBQThCLEVBQzNCLGlCQUFvQyxFQUMzQyxXQUFrQjtRQUhWLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDMUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDM0MsZ0JBQVcsR0FBWCxXQUFXLENBQU87UUFpSG5ELHVDQUFrQyxHQUFHLENBQUMsS0FB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LFlBQVksQ0FBQyxRQUFrQjtRQUNyQyxNQUFNLElBQUksR0FBRztZQUNYLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNyQixTQUFTLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFBO1FBRUQsT0FBTyxJQUFJLENBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDekIsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ2YsSUFBSTtTQUNMLENBQUMsQ0FDSCxDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQy9DLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FDbEMsQ0FBQTtJQUNILENBQUM7OEdBN0hVLGVBQWUsa0JBV2hCLG9CQUFvQixhQUNwQixnQkFBZ0IsYUFDaEIsbUJBQW1CLGFBQ25CLFlBQVk7a0hBZFgsZUFBZTs7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBWU4sTUFBTTsyQkFBQyxvQkFBb0I7OzBCQUMzQixNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ3ZCLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIGFkZCxcbiAgQmFubmVyLFxuICBDYXRlZ29yeSxcbiAgQ2F0ZWdvcnlSZXBvc2l0b3J5LFxuICBIb21lLFxuICBIb21lQ2F0ZWdvcnlHcm91cCxcbiAgSG9tZURhdGEsXG4gIEhvbWVSZXBvc2l0b3J5LFxuICBwaWNrLFxuICBQcm9kdWN0LFxuICBQcm9kdWN0UmVwb3NpdG9yeSxcbiAgUmVxdWlyZWRBcmd1bWVudEVycm9yLFxuICBTaG9wcyxcbiAgV2hlcmUsXG59IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xuaW1wb3J0IHsgZm9ya0pvaW4sIGZyb20sIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNvbmNhdE1hcCwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vY29uc3RzJ1xuXG50eXBlIEhvbWVDb25maWd1cmF0aW9uSWQgPSAnZ2xhbXNob3AnIHwgJ21lbnNfbWFya2V0J1xudHlwZSBCYW5uZXJUeXBlID0gJ2JyYW5kJyB8ICdidXlUb1dpbicgfCAnYmxvY2snIHwgJ2Jsb2cnXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIb21lU2hvcFNlcnZpY2Uge1xuICBwcml2YXRlIGhvbWVDb25maWd1cmF0aW9uOiBIb21lXG5cbiAgcHJpdmF0ZSBnZXQgaG9tZUlkKCk6IEhvbWVDb25maWd1cmF0aW9uSWQge1xuICAgIGlmICh0aGlzLmRlZmF1bHRTaG9wID09PSBTaG9wcy5HTEFNU0hPUCkgcmV0dXJuICdnbGFtc2hvcCdcbiAgICBpZiAodGhpcy5kZWZhdWx0U2hvcCA9PT0gU2hvcHMuTUVOU01BUktFVCkgcmV0dXJuICdtZW5zX21hcmtldCdcblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdDYXRlZ29yeVJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5UmVwb3NpdG9yeTogQ2F0ZWdvcnlSZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoJ0hvbWVSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBob21lUmVwb3NpdG9yeTogSG9tZVJlcG9zaXRvcnksXG4gICAgQEluamVjdCgnUHJvZHVjdFJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y3RSZXBvc2l0b3J5OiBQcm9kdWN0UmVwb3NpdG9yeSxcbiAgICBASW5qZWN0KERFRkFVTFRfU0hPUCkgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U2hvcDogU2hvcHMsXG4gICkge31cblxuICBnZXRIb21lRGF0YSgpOiBPYnNlcnZhYmxlPEhvbWU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRIb21lQ29uZmlndXJhdGlvbigpLnBpcGUoXG4gICAgICBtYXAoKGhvbWUpID0+IChob21lPy5kYXRhPy5leHBpcmVzQXQgPiBuZXcgRGF0ZSgpID8gaG9tZSA6IG51bGwpKSxcbiAgICAgIGNvbmNhdE1hcCgoaG9tZSkgPT5cbiAgICAgICAgaG9tZVxuICAgICAgICAgID8gb2YoaG9tZSlcbiAgICAgICAgICA6IGZvcmtKb2luKFt0aGlzLmdldERpc2NvdmVyUHJvZHVjdHMoKSwgdGhpcy5nZXRGZWF0dXJlZFByb2R1Y3RzKCksIHRoaXMuZ2V0VmVydGljYWxQcm9kdWN0cygpXSkucGlwZShcbiAgICAgICAgICAgICAgbWFwKChbZGlzY292ZXJQcm9kdWN0cywgZmVhdHVyZWRQcm9kdWN0cywgdmVydGljYWxQcm9kdWN0c10pID0+ICh7XG4gICAgICAgICAgICAgICAgZGlzY292ZXJQcm9kdWN0cyxcbiAgICAgICAgICAgICAgICBmZWF0dXJlZFByb2R1Y3RzLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsUHJvZHVjdHMsXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgY29uY2F0TWFwKChkYXRhKSA9PiB0aGlzLnNhdmVIb21lRGF0YShkYXRhKSksXG4gICAgICAgICAgICApLFxuICAgICAgKSxcbiAgICApXG4gIH1cblxuICBnZXRCYW5uZXJzKHR5cGU6IEJhbm5lclR5cGUpOiBPYnNlcnZhYmxlPEJhbm5lcltdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SG9tZUNvbmZpZ3VyYXRpb24oKS5waXBlKFxuICAgICAgbWFwKChob21lKSA9PiB7XG4gICAgICAgIGlmICh0eXBlID09PSAnYnJhbmQnKSByZXR1cm4gaG9tZS5icmFuZHNDYXJvdXNlbFxuICAgICAgICBpZiAodHlwZSA9PT0gJ2J1eVRvV2luJykgcmV0dXJuIFtob21lLmJ1eVRvV2luQmFubmVyXVxuICAgICAgICBpZiAodHlwZSA9PT0gJ2Jsb2NrJykgcmV0dXJuIGhvbWUuYmxvY2tCYW5uZXJzXG4gICAgICAgIGlmICh0eXBlID09PSAnYmxvZycpIHJldHVybiBbaG9tZS5ibG9nQmFubmVyXVxuXG4gICAgICAgIHJldHVybiBbXVxuICAgICAgfSksXG4gICAgKVxuICB9XG5cbiAgZ2V0TWluVmFsdWVGb3JGcmVlU2hpcHBpbmcoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRIb21lQ29uZmlndXJhdGlvbigpLnBpcGUobWFwKChob21lKSA9PiBob21lLm1pblZhbHVlRm9yRnJlZVNoaXBwaW5nKSlcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGlzY292ZXJQcm9kdWN0cygpOiBPYnNlcnZhYmxlPHsgY2F0ZWdvcnk6IENhdGVnb3J5OyBwcm9kdWN0czogUHJvZHVjdFtdIH1bXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEhvbWVDb25maWd1cmF0aW9uKCkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoaG9tZSkgPT5cbiAgICAgICAgZnJvbSh0aGlzLmNhdGVnb3J5UmVwb3NpdG9yeS5nZXRDYXRlZ29yaWVzRm9ySG9tZShob21lLmRpc2NvdmVyQ2F0ZWdvcmllcykpLnBpcGUoXG4gICAgICAgICAgbWFwKChncm91cHMpID0+IGdyb3Vwcy5tYXAodGhpcy5idWlsZENhdGVnb3J5R3JvdXBXaXRoUmVxdWlyZWREYXRhKSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmVhdHVyZWRQcm9kdWN0cygpOiBPYnNlcnZhYmxlPHsgY2F0ZWdvcnk6IENhdGVnb3J5OyBwcm9kdWN0czogUHJvZHVjdFtdIH1bXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEhvbWVDb25maWd1cmF0aW9uKCkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoaG9tZSkgPT5cbiAgICAgICAgZnJvbSh0aGlzLmNhdGVnb3J5UmVwb3NpdG9yeS5nZXRDYXRlZ29yaWVzRm9ySG9tZShob21lLmZlYXR1cmVkQ2F0ZWdvcmllcykpLnBpcGUoXG4gICAgICAgICAgbWFwKChncm91cHMpID0+IGdyb3Vwcy5tYXAodGhpcy5idWlsZENhdGVnb3J5R3JvdXBXaXRoUmVxdWlyZWREYXRhKSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmVydGljYWxQcm9kdWN0cygpOiBPYnNlcnZhYmxlPHsgY2F0ZWdvcnk6IENhdGVnb3J5OyBwcm9kdWN0czogUHJvZHVjdFtdIH1bXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEhvbWVDb25maWd1cmF0aW9uKCkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoaG9tZSkgPT5cbiAgICAgICAgZm9ya0pvaW4oXG4gICAgICAgICAgaG9tZS52ZXJ0aWNhbENhcm91c2Vscy5maWx0ZXIoQm9vbGVhbikubWFwKChpZCkgPT5cbiAgICAgICAgICAgIGZyb20odGhpcy5jYXRlZ29yeVJlcG9zaXRvcnkuZ2V0KHsgaWQgfSkpLnBpcGUoXG4gICAgICAgICAgICAgIGNvbmNhdE1hcCgoY2F0ZWdvcnkpID0+XG4gICAgICAgICAgICAgICAgZnJvbShcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdFJlcG9zaXRvcnkuZmluZCh7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IHsgY2F0ZWdvcmllczogeyBvcGVyYXRvcjogV2hlcmUuSU4sIHZhbHVlOiBbY2F0ZWdvcnkuaWRdIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgbGltaXRzOiB7IGxpbWl0OiAxMiB9LFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKS5waXBlKG1hcCgocHJvZHVjdHMpID0+ICh7IGNhdGVnb3J5LCBwcm9kdWN0cyB9KSkpLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBtYXAoKHsgY2F0ZWdvcnksIHByb2R1Y3RzIH0pID0+ICh7IGNhdGVnb3J5LCBwcm9kdWN0czogcHJvZHVjdHMuZGF0YSB9KSksXG4gICAgICAgICAgICAgIG1hcCh0aGlzLmJ1aWxkQ2F0ZWdvcnlHcm91cFdpdGhSZXF1aXJlZERhdGEpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGdldEhvbWVDb25maWd1cmF0aW9uKCk6IE9ic2VydmFibGU8SG9tZT4ge1xuICAgIHJldHVybiBvZih0aGlzLmhvbWVDb25maWd1cmF0aW9uKS5waXBlKFxuICAgICAgY29uY2F0TWFwKChob21lKSA9PlxuICAgICAgICBob21lXG4gICAgICAgICAgPyBvZihob21lKVxuICAgICAgICAgIDogIXRoaXMuaG9tZUlkXG4gICAgICAgICAgPyB0aHJvd0Vycm9yKG5ldyBSZXF1aXJlZEFyZ3VtZW50RXJyb3IoWydob21lSWQnXSkpXG4gICAgICAgICAgOiBmcm9tKHRoaXMuaG9tZVJlcG9zaXRvcnkuZ2V0KHsgaWQ6IHRoaXMuaG9tZUlkIH0pKS5waXBlKFxuICAgICAgICAgICAgICB0YXAoKGhvbWVMb2FkZWQpID0+ICh0aGlzLmhvbWVDb25maWd1cmF0aW9uID0gaG9tZUxvYWRlZCkpLFxuICAgICAgICAgICAgKSxcbiAgICAgICksXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlSG9tZURhdGEoaG9tZURhdGE6IEhvbWVEYXRhKTogT2JzZXJ2YWJsZTxIb21lPiB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIGV4cGlyZXNBdDogYWRkKG5ldyBEYXRlKCksIHsgaG91cnM6IDEgfSksXG4gICAgICBkYXRhOiBob21lRGF0YSxcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbShcbiAgICAgIHRoaXMuaG9tZVJlcG9zaXRvcnkudXBkYXRlKHtcbiAgICAgICAgaWQ6IHRoaXMuaG9tZUlkLFxuICAgICAgICBkYXRhLFxuICAgICAgfSksXG4gICAgKS5waXBlKFxuICAgICAgdGFwKCgpID0+ICh0aGlzLmhvbWVDb25maWd1cmF0aW9uLmRhdGEgPSBkYXRhKSksXG4gICAgICBtYXAoKCkgPT4gdGhpcy5ob21lQ29uZmlndXJhdGlvbiksXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENhdGVnb3J5R3JvdXBXaXRoUmVxdWlyZWREYXRhID0gKGdyb3VwOiBIb21lQ2F0ZWdvcnlHcm91cCk6IEhvbWVDYXRlZ29yeUdyb3VwID0+ICh7XG4gICAgY2F0ZWdvcnk6IENhdGVnb3J5LnRvSW5zdGFuY2UocGljayhncm91cD8uY2F0ZWdvcnk/LnRvUGxhaW4oKSB8fCB7fSwgWydpZCcsICduYW1lJywgJ3NsdWcnLCAnY29uZGl0aW9ucyddKSksXG4gICAgcHJvZHVjdHM6XG4gICAgICBncm91cD8ucHJvZHVjdHM/Lm1hcCgocHJvZHVjdCkgPT5cbiAgICAgICAgUHJvZHVjdC50b0luc3RhbmNlKFxuICAgICAgICAgIHBpY2socHJvZHVjdD8udG9QbGFpbigpIHx8IHt9LCBbXG4gICAgICAgICAgICAnaWQnLFxuICAgICAgICAgICAgJ3ByaWNlJyxcbiAgICAgICAgICAgICdyZXZpZXdzJyxcbiAgICAgICAgICAgICdoYXNWYXJpYW50cycsXG4gICAgICAgICAgICAnc2x1ZycsXG4gICAgICAgICAgICAnc2t1JyxcbiAgICAgICAgICAgICdzdG9jaycsXG4gICAgICAgICAgICAnY29zdFByaWNlJyxcbiAgICAgICAgICAgICdpbWFnZXMnLFxuICAgICAgICAgICAgJ21pbmlhdHVyZXMnLFxuICAgICAgICAgICAgJ25hbWUnLFxuICAgICAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICAgICAncmF0ZScsXG4gICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgXSksXG4gICAgICAgICksXG4gICAgICApIHx8IFtdLFxuICB9KVxufVxuIl19
|