@infrab4a/connect-angular 4.0.0 → 4.0.1-beta.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 (126) hide show
  1. package/angular-connect.module.d.ts +19 -22
  2. package/angular-elastic-search.module.d.ts +9 -9
  3. package/angular-firebase-auth.module.d.ts +10 -12
  4. package/angular-firestore.module.d.ts +15 -18
  5. package/angular-hasura-graphql.module.d.ts +16 -16
  6. package/bundles/infrab4a-connect-angular.umd.js +1978 -0
  7. package/bundles/infrab4a-connect-angular.umd.js.map +1 -0
  8. package/consts/backend-url.const.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/hasura-options.const.d.ts +1 -1
  12. package/consts/index.d.ts +4 -6
  13. package/esm2015/angular-connect.module.js +52 -0
  14. package/esm2015/angular-elastic-search.module.js +38 -0
  15. package/esm2015/angular-firebase-auth.module.js +113 -0
  16. package/esm2015/angular-firestore.module.js +366 -0
  17. package/esm2015/angular-hasura-graphql.module.js +90 -0
  18. package/{esm2020/consts/backend-url.const.mjs → esm2015/consts/backend-url.const.js} +1 -1
  19. package/{esm2020/consts/default-shop.const.mjs → esm2015/consts/default-shop.const.js} +2 -2
  20. package/{esm2020/consts/es-config.const.mjs → esm2015/consts/es-config.const.js} +2 -2
  21. package/{esm2020/consts/hasura-options.const.mjs → esm2015/consts/hasura-options.const.js} +2 -2
  22. package/esm2015/consts/index.js +5 -0
  23. package/esm2015/index.js +6 -0
  24. package/{esm2020/infrab4a-connect-angular.mjs → esm2015/infrab4a-connect-angular.js} +4 -4
  25. package/esm2015/services/auth.service.js +42 -0
  26. package/esm2015/services/cart.service.js +148 -0
  27. package/esm2015/services/checkout-subscription.service.js +51 -0
  28. package/esm2015/services/checkout.service.js +75 -0
  29. package/esm2015/services/coupon.service.js +266 -0
  30. package/esm2015/services/errors/group-invalid-coupon.error.js +8 -0
  31. package/esm2015/services/errors/index.js +3 -0
  32. package/esm2015/services/errors/invalid-coupon.error.js +8 -0
  33. package/esm2015/services/home-shop.service.js +116 -0
  34. package/esm2015/services/index.js +9 -0
  35. package/esm2015/services/order.service.js +32 -0
  36. package/esm2015/services/shipping.service.js +99 -0
  37. package/{esm2020/services/types/index.mjs → esm2015/services/types/index.js} +3 -3
  38. package/{esm2020/services/types/required-checkout-data.type.mjs → esm2015/services/types/required-checkout-data.type.js} +2 -2
  39. package/{esm2020/services/types/required-checkout-subscription-data.type.mjs → esm2015/services/types/required-checkout-subscription-data.type.js} +2 -2
  40. package/esm2015/services/types/shipping-methods.type.js +2 -0
  41. package/fesm2015/infrab4a-connect-angular.js +1432 -0
  42. package/fesm2015/infrab4a-connect-angular.js.map +1 -0
  43. package/index.d.ts +5 -5
  44. package/infrab4a-connect-angular.d.ts +5 -0
  45. package/package.json +13 -25
  46. package/services/auth.service.d.ts +19 -18
  47. package/services/cart.service.d.ts +35 -42
  48. package/services/checkout-subscription.service.d.ts +18 -18
  49. package/services/checkout.service.d.ts +23 -23
  50. package/services/coupon.service.d.ts +26 -28
  51. package/services/errors/group-invalid-coupon.error.d.ts +6 -0
  52. package/services/errors/index.d.ts +2 -0
  53. package/services/errors/invalid-coupon.error.d.ts +5 -0
  54. package/services/home-shop.service.d.ts +25 -25
  55. package/services/index.d.ts +8 -10
  56. package/services/order.service.d.ts +13 -13
  57. package/services/shipping.service.d.ts +19 -19
  58. package/services/types/index.d.ts +2 -2
  59. package/services/types/required-checkout-data.type.d.ts +2 -2
  60. package/services/types/required-checkout-subscription-data.type.d.ts +2 -2
  61. package/services/types/shipping-methods.type.d.ts +12 -12
  62. package/consts/category-structure.d.ts +0 -1
  63. package/consts/firebase-const.d.ts +0 -3
  64. package/esm2020/angular-connect.module.mjs +0 -66
  65. package/esm2020/angular-elastic-search.module.mjs +0 -34
  66. package/esm2020/angular-firebase-auth.module.mjs +0 -130
  67. package/esm2020/angular-firestore.module.mjs +0 -459
  68. package/esm2020/angular-hasura-graphql.module.mjs +0 -243
  69. package/esm2020/consts/category-structure.mjs +0 -2
  70. package/esm2020/consts/firebase-const.mjs +0 -4
  71. package/esm2020/consts/index.mjs +0 -7
  72. package/esm2020/helpers/index.mjs +0 -2
  73. package/esm2020/helpers/mobile-operation-system-checker.helper.mjs +0 -7
  74. package/esm2020/index.mjs +0 -6
  75. package/esm2020/services/auth.service.mjs +0 -37
  76. package/esm2020/services/cart.service.mjs +0 -281
  77. package/esm2020/services/catalog/adapters/category-structure.adapter.mjs +0 -2
  78. package/esm2020/services/catalog/adapters/index.mjs +0 -4
  79. package/esm2020/services/catalog/adapters/new-category-structure.adapter.mjs +0 -42
  80. package/esm2020/services/catalog/adapters/old-category-structure.adapter.mjs +0 -23
  81. package/esm2020/services/catalog/catalog.service.mjs +0 -122
  82. package/esm2020/services/catalog/category.service.mjs +0 -51
  83. package/esm2020/services/catalog/enums/index.mjs +0 -2
  84. package/esm2020/services/catalog/enums/product-sorts.enum.mjs +0 -11
  85. package/esm2020/services/catalog/index.mjs +0 -7
  86. package/esm2020/services/catalog/models/category-with-tree.model.mjs +0 -10
  87. package/esm2020/services/catalog/models/index.mjs +0 -2
  88. package/esm2020/services/catalog/types/index.mjs +0 -2
  89. package/esm2020/services/catalog/types/product-sort.type.mjs +0 -2
  90. package/esm2020/services/catalog/wishlist.service.mjs +0 -105
  91. package/esm2020/services/checkout-subscription.service.mjs +0 -53
  92. package/esm2020/services/checkout.service.mjs +0 -71
  93. package/esm2020/services/coupon.service.mjs +0 -218
  94. package/esm2020/services/helpers/index.mjs +0 -2
  95. package/esm2020/services/helpers/util.helper.mjs +0 -18
  96. package/esm2020/services/home-shop.service.mjs +0 -114
  97. package/esm2020/services/index.mjs +0 -11
  98. package/esm2020/services/order.service.mjs +0 -30
  99. package/esm2020/services/shipping.service.mjs +0 -96
  100. package/esm2020/services/types/shipping-methods.type.mjs +0 -2
  101. package/esm2020/types/firebase-app-config.type.mjs +0 -2
  102. package/esm2020/types/index.mjs +0 -2
  103. package/fesm2015/infrab4a-connect-angular.mjs +0 -2193
  104. package/fesm2015/infrab4a-connect-angular.mjs.map +0 -1
  105. package/fesm2020/infrab4a-connect-angular.mjs +0 -2125
  106. package/fesm2020/infrab4a-connect-angular.mjs.map +0 -1
  107. package/helpers/index.d.ts +0 -1
  108. package/helpers/mobile-operation-system-checker.helper.d.ts +0 -3
  109. package/services/catalog/adapters/category-structure.adapter.d.ts +0 -4
  110. package/services/catalog/adapters/index.d.ts +0 -3
  111. package/services/catalog/adapters/new-category-structure.adapter.d.ts +0 -14
  112. package/services/catalog/adapters/old-category-structure.adapter.d.ts +0 -10
  113. package/services/catalog/catalog.service.d.ts +0 -80
  114. package/services/catalog/category.service.d.ts +0 -15
  115. package/services/catalog/enums/index.d.ts +0 -1
  116. package/services/catalog/enums/product-sorts.enum.d.ts +0 -9
  117. package/services/catalog/index.d.ts +0 -6
  118. package/services/catalog/models/category-with-tree.model.d.ts +0 -4
  119. package/services/catalog/models/index.d.ts +0 -1
  120. package/services/catalog/types/index.d.ts +0 -1
  121. package/services/catalog/types/product-sort.type.d.ts +0 -2
  122. package/services/catalog/wishlist.service.d.ts +0 -22
  123. package/services/helpers/index.d.ts +0 -1
  124. package/services/helpers/util.helper.d.ts +0 -3
  125. package/types/firebase-app-config.type.d.ts +0 -1
  126. package/types/index.d.ts +0 -1
@@ -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
- }
14
- AngularHasuraGraphQLModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularHasuraGraphQLModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
- AngularHasuraGraphQLModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.0", ngImport: i0, type: AngularHasuraGraphQLModule });
16
- AngularHasuraGraphQLModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularHasuraGraphQLModule, providers: [
17
- {
18
- provide: 'HasuraConfig',
19
- useFactory: (options, platformId) => ({
20
- endpoint: options.endpoint,
21
- authOptions: options.credentials,
22
- interceptors: {
23
- request: (request) => {
24
- if (isPlatformBrowser(platformId))
25
- return request;
26
- const interval = setInterval(() => { }, 100);
27
- request.interval = interval;
28
- return request;
29
- },
30
- response: (response, request) => {
31
- if (isPlatformBrowser(platformId))
32
- return response;
33
- clearInterval(request.interval);
34
- return response;
35
- },
36
- },
37
- }),
38
- deps: [HASURA_OPTIONS, PLATFORM_ID],
39
- },
40
- {
41
- provide: 'CategoryRepository',
42
- useExisting: CategoryHasuraGraphQLRepository,
43
- },
44
- {
45
- provide: CategoryHasuraGraphQLRepository,
46
- useFactory: (options, productRepository, categoryFilterRepository) => {
47
- return new CategoryHasuraGraphQLRepository(options, productRepository, categoryFilterRepository);
48
- },
49
- deps: ['HasuraConfig', ProductHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
50
- },
51
- {
52
- provide: 'ProductRepository',
53
- useExisting: ProductHasuraGraphQLRepository,
54
- },
55
- {
56
- provide: ProductHasuraGraphQLRepository,
57
- useFactory: (hasuraConfig) => {
58
- return new ProductHasuraGraphQLRepository(hasuraConfig);
59
- },
60
- deps: ['HasuraConfig'],
61
- },
62
- {
63
- provide: 'VariantRepository',
64
- useExisting: VariantHasuraGraphQLRepository,
65
- },
66
- {
67
- provide: VariantHasuraGraphQLRepository,
68
- useFactory: (hasuraConfig) => {
69
- return new VariantHasuraGraphQLRepository(hasuraConfig);
70
- },
71
- deps: ['HasuraConfig'],
72
- },
73
- {
74
- provide: 'CategoryFilterRepository',
75
- useExisting: CategoryFilterHasuraGraphQLRepository,
76
- },
77
- {
78
- provide: CategoryFilterHasuraGraphQLRepository,
79
- useFactory: (options) => {
80
- return new CategoryFilterHasuraGraphQLRepository(options);
81
- },
82
- deps: ['HasuraConfig'],
83
- },
84
- {
85
- provide: 'FilterOptionRepository',
86
- useExisting: FilterOptionHasuraGraphQLRepository,
87
- },
88
- {
89
- provide: FilterOptionHasuraGraphQLRepository,
90
- useFactory: (options) => {
91
- return new FilterOptionHasuraGraphQLRepository(options);
92
- },
93
- deps: ['HasuraConfig'],
94
- },
95
- {
96
- provide: 'FilterRepository',
97
- useExisting: FilterHasuraGraphQLRepository,
98
- },
99
- {
100
- provide: FilterHasuraGraphQLRepository,
101
- useFactory: (options, filterOptionRepository, categoryFilterRepository) => {
102
- return new FilterHasuraGraphQLRepository(options, filterOptionRepository, categoryFilterRepository);
103
- },
104
- deps: ['HasuraConfig', FilterOptionHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
105
- },
106
- {
107
- provide: CategoryCollectionChildrenHasuraGraphQLRepository,
108
- useFactory: (options) => new CategoryCollectionChildrenHasuraGraphQLRepository(options),
109
- deps: ['HasuraConfig'],
110
- },
111
- {
112
- provide: 'CategoryCollectionChildrenRepository',
113
- useExisting: CategoryCollectionChildrenHasuraGraphQLRepository,
114
- },
115
- {
116
- provide: WishlistHasuraGraphQLRepository,
117
- useFactory: (options, categoryFilterRepository) => {
118
- return new WishlistHasuraGraphQLRepository(options, categoryFilterRepository);
119
- },
120
- deps: ['HasuraConfig', CategoryFilterHasuraGraphQLRepository],
121
- },
122
- {
123
- provide: 'WishlistRepository',
124
- useExisting: WishlistHasuraGraphQLRepository,
125
- },
126
- ] });
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1oYXN1cmEtZ3JhcGhxbC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2FuZ3VsYXItaGFzdXJhLWdyYXBocWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ25ELE9BQU8sRUFBdUIsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxRSxPQUFPLEVBQ0wsaURBQWlELEVBQ2pELHFDQUFxQyxFQUVyQywrQkFBK0IsRUFFL0IsNkJBQTZCLEVBQzdCLG1DQUFtQyxFQUtuQyw4QkFBOEIsRUFFOUIsOEJBQThCLEVBRTlCLCtCQUErQixHQUNoQyxNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7O0FBc0l6QyxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FHcEI7UUFDQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLDBCQUEwQjtZQUNwQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1NBQzVELENBQUE7SUFDSCxDQUFDOzt1SEFUVSwwQkFBMEI7d0hBQTFCLDBCQUEwQjt3SEFBMUIsMEJBQTBCLGFBakkxQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGNBQWM7WUFDdkIsVUFBVSxFQUFFLENBQUMsT0FBNkIsRUFBRSxVQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7Z0JBQzFCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztnQkFDaEMsWUFBWSxFQUFFO29CQUNaLE9BQU8sRUFBRSxDQUFDLE9BQTBELEVBQUUsRUFBRTt3QkFDdEUsSUFBSSxpQkFB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LEVBQXFELEVBQUUsQ0FDOUUsSUFBSSxpREFBaUQsQ0FBQyxPQUFPLENBQUM7NEJBQ2hFLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQzt5QkFDdkI7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLHNDQUFzQzs0QkFDL0MsV0FBVyxFQUFFLGlEQUFpRDt5QkFDL0Q7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLCtCQUErQjs0QkFDeEMsVUFBVSxFQUFFLENBQ1YsT0FBWSxFQUNaLHdCQUErRCxFQUM5QixFQUFFO2dDQUNuQyxPQUFPLElBQUksK0JBQStCLENBQUMsT0FBTyxFQUFFLHdCQUF3QixDQUFDLENBQUE7NEJBQy9FLENBQUM7NEJBQ0QsSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFLHFDQUFxQyxDQUFDO3lCQUM5RDt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLEVBQUUsK0JBQStCO3lCQUM3QztxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gIENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gIENhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSxcbiAgQ2F0ZWdvcnlIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgQ2F0ZWdvcnlSZXBvc2l0b3J5LFxuICBGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgRmlsdGVyT3B0aW9uSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gIEZpbHRlck9wdGlvblJlcG9zaXRvcnksXG4gIEZpbHRlclJlcG9zaXRvcnksXG4gIEdyYXBoUUxQYXJhbXMsXG4gIEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9ucyxcbiAgUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICBQcm9kdWN0UmVwb3NpdG9yeSxcbiAgVmFyaWFudEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICBWYXJpYW50UmVwb3NpdG9yeSxcbiAgV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5pbXBvcnQgeyBIQVNVUkFfT1BUSU9OUyB9IGZyb20gJy4vY29uc3RzJ1xuXG5leHBvcnQgdHlwZSBIYXN1cmFHcmFwaFFMT3B0aW9ucyA9IHsgZW5kcG9pbnQ6IHN0cmluZzsgY3JlZGVudGlhbHM6IEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9ucyB9XG5cbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdIYXN1cmFDb25maWcnLFxuICAgICAgdXNlRmFjdG9yeTogKG9wdGlvbnM6IEhhc3VyYUdyYXBoUUxPcHRpb25zLCBwbGF0Zm9ybUlkOiBzdHJpbmcpID0+ICh7XG4gICAgICAgIGVuZHBvaW50OiBvcHRpb25zLmVuZHBvaW50LFxuICAgICAgICBhdXRoT3B0aW9uczogb3B0aW9ucy5jcmVkZW50aWFscyxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiB7XG4gICAgICAgICAgcmVxdWVzdDogKHJlcXVlc3Q6IEdyYXBoUUxQYXJhbXM8YW55PiAmIHsgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSkgcmV0dXJuIHJlcXVlc3RcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7fSwgMTAwKVxuXG4gICAgICAgICAgICByZXF1ZXN0LmludGVydmFsID0gaW50ZXJ2YWxcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlOiAocmVzcG9uc2U6IGFueSwgcmVxdWVzdDogR3JhcGhRTFBhcmFtczxhbnk+ICYgeyBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpKSByZXR1cm4gcmVzcG9uc2VcblxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChyZXF1ZXN0LmludGVydmFsKVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBkZXBzOiBbSEFTVVJBX09QVElPTlMsIFBMQVRGT1JNX0lEXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdDYXRlZ29yeVJlcG9zaXRvcnknLFxuICAgICAgdXNlRXhpc3Rpbmc6IENhdGVnb3J5SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBDYXRlZ29yeUhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKFxuICAgICAgICBvcHRpb25zOiBhbnksXG4gICAgICAgIHByb2R1Y3RSZXBvc2l0b3J5OiBQcm9kdWN0SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICAgIGNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeTogQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICAgICk6IENhdGVnb3J5UmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQ2F0ZWdvcnlIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShvcHRpb25zLCBwcm9kdWN0UmVwb3NpdG9yeSwgY2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5KVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnSGFzdXJhQ29uZmlnJywgUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LCBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdQcm9kdWN0UmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKGhhc3VyYUNvbmZpZzogYW55KTogUHJvZHVjdFJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb2R1Y3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShoYXN1cmFDb25maWcpXG4gICAgICB9LFxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdWYXJpYW50UmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogVmFyaWFudEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogVmFyaWFudEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKGhhc3VyYUNvbmZpZzogYW55KTogVmFyaWFudFJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFZhcmlhbnRIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShoYXN1cmFDb25maWcpXG4gICAgICB9LFxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnXSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0NhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogYW55KTogQ2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnXSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0ZpbHRlck9wdGlvblJlcG9zaXRvcnknLFxuICAgICAgdXNlRXhpc3Rpbmc6IEZpbHRlck9wdGlvbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogRmlsdGVyT3B0aW9uSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogYW55KTogRmlsdGVyT3B0aW9uUmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyT3B0aW9uSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnkob3B0aW9ucylcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0ZpbHRlclJlcG9zaXRvcnknLFxuICAgICAgdXNlRXhpc3Rpbmc6IEZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogRmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAoXG4gICAgICAgIG9wdGlvbnM6IGFueSxcbiAgICAgICAgZmlsdGVyT3B0aW9uUmVwb3NpdG9yeTogRmlsdGVyT3B0aW9uSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICAgIGNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeTogQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICAgICk6IEZpbHRlclJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KG9wdGlvbnMsIGZpbHRlck9wdGlvblJlcG9zaXRvcnksIGNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSlcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZycsIEZpbHRlck9wdGlvbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LCBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogYW55KTogQ2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5IYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSA9PlxuICAgICAgICBuZXcgQ2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5IYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShvcHRpb25zKSxcbiAgICAgIGRlcHM6IFsnSGFzdXJhQ29uZmlnJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnQ2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5SZXBvc2l0b3J5JyxcbiAgICAgIHVzZUV4aXN0aW5nOiBDYXRlZ29yeUNvbGxlY3Rpb25DaGlsZHJlbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICAgIHVzZUZhY3Rvcnk6IChcbiAgICAgICAgb3B0aW9uczogYW55LFxuICAgICAgICBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnk6IENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICApOiBXaXNobGlzdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaXNobGlzdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KG9wdGlvbnMsIGNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSlcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZycsIENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnldLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1dpc2hsaXN0UmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFySGFzdXJhR3JhcGhRTE1vZHVsZSB7XG4gIHN0YXRpYyBpbml0aWFsaXplQXBwKG9wdGlvbnM6IHtcbiAgICBlbmRwb2ludDogc3RyaW5nXG4gICAgY3JlZGVudGlhbHM6IEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9uc1xuICB9KTogTW9kdWxlV2l0aFByb3ZpZGVyczxBbmd1bGFySGFzdXJhR3JhcGhRTE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQW5ndWxhckhhc3VyYUdyYXBoUUxNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEhBU1VSQV9PUFRJT05TLCB1c2VWYWx1ZTogb3B0aW9ucyB9XSxcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export const CATEGORY_STRUCTURE = 'CATEGORY_STRUCTURE';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktc3RydWN0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9jb25zdHMvY2F0ZWdvcnktc3RydWN0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IENBVEVHT1JZX1NUUlVDVFVSRSA9ICdDQVRFR09SWV9TVFJVQ1RVUkUnXG4iXX0=
@@ -1,4 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- export const FIREBASE_APP_NAME = new InjectionToken('firebaseAppName');
3
- export const FIREBASE_OPTIONS = new InjectionToken('firebaseOptions');
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2UtY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2NvbnN0cy9maXJlYmFzZS1jb25zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUE7QUFDdEUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuZXhwb3J0IGNvbnN0IEZJUkVCQVNFX0FQUF9OQU1FID0gbmV3IEluamVjdGlvblRva2VuKCdmaXJlYmFzZUFwcE5hbWUnKVxuZXhwb3J0IGNvbnN0IEZJUkVCQVNFX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2ZpcmViYXNlT3B0aW9ucycpXG4iXX0=
@@ -1,7 +0,0 @@
1
- export * from './backend-url.const';
2
- export * from './category-structure';
3
- export * from './default-shop.const';
4
- export * from './es-config.const';
5
- export * from './firebase-const';
6
- export * from './hasura-options.const';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2NvbnN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFBO0FBQ25DLGNBQWMsc0JBQXNCLENBQUE7QUFDcEMsY0FBYyxzQkFBc0IsQ0FBQTtBQUNwQyxjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsa0JBQWtCLENBQUE7QUFDaEMsY0FBYyx3QkFBd0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYmFja2VuZC11cmwuY29uc3QnXG5leHBvcnQgKiBmcm9tICcuL2NhdGVnb3J5LXN0cnVjdHVyZSdcbmV4cG9ydCAqIGZyb20gJy4vZGVmYXVsdC1zaG9wLmNvbnN0J1xuZXhwb3J0ICogZnJvbSAnLi9lcy1jb25maWcuY29uc3QnXG5leHBvcnQgKiBmcm9tICcuL2ZpcmViYXNlLWNvbnN0J1xuZXhwb3J0ICogZnJvbSAnLi9oYXN1cmEtb3B0aW9ucy5jb25zdCdcbiJdfQ==
@@ -1,2 +0,0 @@
1
- export * from './mobile-operation-system-checker.helper';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2hlbHBlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQ0FBMEMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbW9iaWxlLW9wZXJhdGlvbi1zeXN0ZW0tY2hlY2tlci5oZWxwZXInXG4iXX0=
@@ -1,7 +0,0 @@
1
- export class MobileOperationSystemCheckerHelper {
2
- static isAppleDevice() {
3
- return (['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator?.platform) ||
4
- (navigator?.userAgent?.includes?.('Mac') && 'ontouchend' in (document || {})));
5
- }
6
- }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWxlLW9wZXJhdGlvbi1zeXN0ZW0tY2hlY2tlci5oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2hlbHBlcnMvbW9iaWxlLW9wZXJhdGlvbi1zeXN0ZW0tY2hlY2tlci5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGtDQUFrQztJQUM3QyxNQUFNLENBQUMsYUFBYTtRQUNsQixPQUFPLENBQ0wsQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FDekYsU0FBUyxFQUFFLFFBQVEsQ0FDcEI7WUFDRCxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQzlFLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgTW9iaWxlT3BlcmF0aW9uU3lzdGVtQ2hlY2tlckhlbHBlciB7XG4gIHN0YXRpYyBpc0FwcGxlRGV2aWNlKCkge1xuICAgIHJldHVybiAoXG4gICAgICBbJ2lQYWQgU2ltdWxhdG9yJywgJ2lQaG9uZSBTaW11bGF0b3InLCAnaVBvZCBTaW11bGF0b3InLCAnaVBhZCcsICdpUGhvbmUnLCAnaVBvZCddLmluY2x1ZGVzKFxuICAgICAgICBuYXZpZ2F0b3I/LnBsYXRmb3JtLFxuICAgICAgKSB8fFxuICAgICAgKG5hdmlnYXRvcj8udXNlckFnZW50Py5pbmNsdWRlcz8uKCdNYWMnKSAmJiAnb250b3VjaGVuZCcgaW4gKGRvY3VtZW50IHx8IHt9KSlcbiAgICApXG4gIH1cbn1cbiJdfQ==
package/esm2020/index.mjs DELETED
@@ -1,6 +0,0 @@
1
- export * from './angular-connect.module';
2
- export * from './angular-firebase-auth.module';
3
- export * from './angular-firestore.module';
4
- export * from './angular-hasura-graphql.module';
5
- export * from './services';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUE7QUFDeEMsY0FBYyxnQ0FBZ0MsQ0FBQTtBQUM5QyxjQUFjLDRCQUE0QixDQUFBO0FBQzFDLGNBQWMsaUNBQWlDLENBQUE7QUFDL0MsY0FBYyxZQUFZLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuZ3VsYXItY29ubmVjdC5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL2FuZ3VsYXItZmlyZWJhc2UtYXV0aC5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL2FuZ3VsYXItZmlyZXN0b3JlLm1vZHVsZSdcbmV4cG9ydCAqIGZyb20gJy4vYW5ndWxhci1oYXN1cmEtZ3JhcGhxbC5tb2R1bGUnXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzJ1xuIl19
@@ -1,37 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { Auth, authState, getIdToken } from '@angular/fire/auth';
3
- import { combineLatest, from, of } from 'rxjs';
4
- import { catchError, map, mergeMap } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/fire/auth";
7
- export class AuthService {
8
- constructor(angularFireAuth, userRepository) {
9
- this.angularFireAuth = angularFireAuth;
10
- this.userRepository = userRepository;
11
- }
12
- getAuthstate() {
13
- const observables = [this.getFireUser(), this.getUser()];
14
- return combineLatest(observables).pipe(map(([fireUser, user]) => ({
15
- user,
16
- isAnonymous: fireUser?.isAnonymous,
17
- })));
18
- }
19
- getUser() {
20
- return this.getFireUser().pipe(map((user) => user?.uid), mergeMap((id) => (id ? from(this.userRepository.get({ id })).pipe(catchError(() => of(null))) : of(null))));
21
- }
22
- getTokenId() {
23
- return from(getIdToken(this.angularFireAuth.currentUser));
24
- }
25
- getFireUser() {
26
- return authState(this.angularFireAuth).pipe(catchError(() => of(null)));
27
- }
28
- }
29
- AuthService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AuthService, deps: [{ token: i1.Auth }, { token: 'UserRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
30
- AuthService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AuthService });
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AuthService, decorators: [{
32
- type: Injectable
33
- }], ctorParameters: function () { return [{ type: i1.Auth }, { type: undefined, decorators: [{
34
- type: Inject,
35
- args: ['UserRepository']
36
- }] }]; } });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbEQsT0FBTyxFQUFFLElBQUksRUFBd0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRXRGLE9BQU8sRUFBYyxhQUFhLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTs7O0FBRzFELE1BQU0sT0FBTyxXQUFXO0lBQ3RCLFlBQ21CLGVBQXFCLEVBQ0ssY0FBOEI7UUFEeEQsb0JBQWUsR0FBZixlQUFlLENBQU07UUFDSyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDeEUsQ0FBQztJQUVKLFlBQVk7UUFDVixNQUFNLFdBQVcsR0FBaUQsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFFdEcsT0FBTyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUNwQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6QixJQUFJO1lBQ0osV0FBVyxFQUFFLFFBQVEsRUFBRSxXQUFXO1NBQ25DLENBQUMsQ0FBQyxDQUNKLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FDNUIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ3hCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQzNHLENBQUE7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3pFLENBQUM7O3dHQTlCVSxXQUFXLHNDQUdaLGdCQUFnQjs0R0FIZixXQUFXOzJGQUFYLFdBQVc7a0JBRHZCLFVBQVU7OzBCQUlOLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEF1dGgsIFVzZXIgYXMgRmlyZWJhc2VVc2VyLCBhdXRoU3RhdGUsIGdldElkVG9rZW4gfSBmcm9tICdAYW5ndWxhci9maXJlL2F1dGgnXG5pbXBvcnQgeyBVc2VyLCBVc2VyUmVwb3NpdG9yeSB9IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgZnJvbSwgb2YgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFuZ3VsYXJGaXJlQXV0aDogQXV0aCxcbiAgICBASW5qZWN0KCdVc2VyUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgdXNlclJlcG9zaXRvcnk6IFVzZXJSZXBvc2l0b3J5LFxuICApIHt9XG5cbiAgZ2V0QXV0aHN0YXRlKCk6IE9ic2VydmFibGU8eyB1c2VyOiBVc2VyOyBpc0Fub255bW91czogYm9vbGVhbiB9PiB7XG4gICAgY29uc3Qgb2JzZXJ2YWJsZXM6IFtPYnNlcnZhYmxlPEZpcmViYXNlVXNlcj4sIE9ic2VydmFibGU8VXNlcj5dID0gW3RoaXMuZ2V0RmlyZVVzZXIoKSwgdGhpcy5nZXRVc2VyKCldXG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChvYnNlcnZhYmxlcykucGlwZShcbiAgICAgIG1hcCgoW2ZpcmVVc2VyLCB1c2VyXSkgPT4gKHtcbiAgICAgICAgdXNlcixcbiAgICAgICAgaXNBbm9ueW1vdXM6IGZpcmVVc2VyPy5pc0Fub255bW91cyxcbiAgICAgIH0pKSxcbiAgICApXG4gIH1cblxuICBnZXRVc2VyKCk6IE9ic2VydmFibGU8VXNlcj4ge1xuICAgIHJldHVybiB0aGlzLmdldEZpcmVVc2VyKCkucGlwZShcbiAgICAgIG1hcCgodXNlcikgPT4gdXNlcj8udWlkKSxcbiAgICAgIG1lcmdlTWFwKChpZCkgPT4gKGlkID8gZnJvbSh0aGlzLnVzZXJSZXBvc2l0b3J5LmdldCh7IGlkIH0pKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKSA6IG9mKG51bGwpKSksXG4gICAgKVxuICB9XG5cbiAgZ2V0VG9rZW5JZCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBmcm9tKGdldElkVG9rZW4odGhpcy5hbmd1bGFyRmlyZUF1dGguY3VycmVudFVzZXIpKVxuICB9XG5cbiAgZ2V0RmlyZVVzZXIoKTogT2JzZXJ2YWJsZTxGaXJlYmFzZVVzZXI+IHtcbiAgICByZXR1cm4gYXV0aFN0YXRlKHRoaXMuYW5ndWxhckZpcmVBdXRoKS5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICB9XG59XG4iXX0=