@infrab4a/connect-angular 5.0.0-beta.9 → 5.0.0-beta.90

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 (87) hide show
  1. package/angular-connect.module.d.ts +14 -8
  2. package/angular-firestore.module.d.ts +1 -2
  3. package/angular-hasura-graphql.module.d.ts +1 -1
  4. package/angular-vertex-search.module.d.ts +9 -0
  5. package/consts/firebase-const.d.ts +1 -0
  6. package/consts/index.d.ts +1 -0
  7. package/consts/vertex-config.const.d.ts +1 -0
  8. package/esm2022/angular-connect.module.mjs +187 -0
  9. package/esm2022/angular-elastic-search.module.mjs +34 -0
  10. package/esm2022/angular-firebase-auth.module.mjs +141 -0
  11. package/esm2022/angular-firestore.module.mjs +527 -0
  12. package/esm2022/angular-hasura-graphql.module.mjs +331 -0
  13. package/esm2022/angular-vertex-search.module.mjs +34 -0
  14. package/{esm2020 → esm2022}/consts/firebase-const.mjs +2 -1
  15. package/{esm2020 → esm2022}/consts/index.mjs +2 -1
  16. package/esm2022/consts/vertex-config.const.mjs +2 -0
  17. package/esm2022/persistence/cookie-data-persistence.mjs +22 -0
  18. package/{esm2020 → esm2022}/services/auth.service.mjs +6 -6
  19. package/esm2022/services/cart.service.mjs +86 -0
  20. package/esm2022/services/catalog/adapters/new-category-structure.adapter.mjs +43 -0
  21. package/{esm2020 → esm2022}/services/catalog/adapters/old-category-structure.adapter.mjs +6 -6
  22. package/esm2022/services/catalog/catalog.service.mjs +295 -0
  23. package/{esm2020 → esm2022}/services/catalog/category.service.mjs +6 -6
  24. package/{esm2020 → esm2022}/services/catalog/models/category-with-tree.model.mjs +1 -1
  25. package/esm2022/services/catalog/wishlist.service.mjs +235 -0
  26. package/{esm2020 → esm2022}/services/checkout-subscription.service.mjs +6 -6
  27. package/esm2022/services/checkout.service.mjs +122 -0
  28. package/esm2022/services/coupon.service.mjs +228 -0
  29. package/{esm2020 → esm2022}/services/home-shop.service.mjs +9 -9
  30. package/{esm2020 → esm2022}/services/index.mjs +1 -2
  31. package/{esm2020 → esm2022}/services/order.service.mjs +6 -6
  32. package/{fesm2020 → fesm2022}/infrab4a-connect-angular.mjs +1497 -1280
  33. package/fesm2022/infrab4a-connect-angular.mjs.map +1 -0
  34. package/package.json +9 -15
  35. package/services/cart.service.d.ts +8 -19
  36. package/services/catalog/catalog.service.d.ts +11 -4
  37. package/services/catalog/wishlist.service.d.ts +16 -4
  38. package/services/checkout.service.d.ts +16 -6
  39. package/services/coupon.service.d.ts +0 -2
  40. package/services/index.d.ts +0 -1
  41. package/esm2020/angular-connect.module.mjs +0 -115
  42. package/esm2020/angular-elastic-search.module.mjs +0 -34
  43. package/esm2020/angular-firebase-auth.module.mjs +0 -115
  44. package/esm2020/angular-firestore.module.mjs +0 -502
  45. package/esm2020/angular-hasura-graphql.module.mjs +0 -265
  46. package/esm2020/persistence/cookie-data-persistence.mjs +0 -23
  47. package/esm2020/services/cart.service.mjs +0 -281
  48. package/esm2020/services/catalog/adapters/new-category-structure.adapter.mjs +0 -41
  49. package/esm2020/services/catalog/catalog.service.mjs +0 -185
  50. package/esm2020/services/catalog/wishlist.service.mjs +0 -115
  51. package/esm2020/services/checkout.service.mjs +0 -68
  52. package/esm2020/services/coupon.service.mjs +0 -235
  53. package/esm2020/services/shipping.service.mjs +0 -96
  54. package/esm2020/services/types/shipping-methods.type.mjs +0 -2
  55. package/fesm2015/infrab4a-connect-angular.mjs +0 -2408
  56. package/fesm2015/infrab4a-connect-angular.mjs.map +0 -1
  57. package/fesm2020/infrab4a-connect-angular.mjs.map +0 -1
  58. package/services/shipping.service.d.ts +0 -19
  59. package/services/types/shipping-methods.type.d.ts +0 -12
  60. /package/{esm2020 → esm2022}/consts/backend-url.const.mjs +0 -0
  61. /package/{esm2020 → esm2022}/consts/category-structure.mjs +0 -0
  62. /package/{esm2020 → esm2022}/consts/default-shop.const.mjs +0 -0
  63. /package/{esm2020 → esm2022}/consts/es-config.const.mjs +0 -0
  64. /package/{esm2020 → esm2022}/consts/hasura-options.const.mjs +0 -0
  65. /package/{esm2020 → esm2022}/consts/persistence.const.mjs +0 -0
  66. /package/{esm2020 → esm2022}/consts/storage-base-url.const.mjs +0 -0
  67. /package/{esm2020 → esm2022}/helpers/index.mjs +0 -0
  68. /package/{esm2020 → esm2022}/helpers/mobile-operation-system-checker.helper.mjs +0 -0
  69. /package/{esm2020 → esm2022}/index.mjs +0 -0
  70. /package/{esm2020 → esm2022}/infrab4a-connect-angular.mjs +0 -0
  71. /package/{esm2020 → esm2022}/persistence/data-persistence.mjs +0 -0
  72. /package/{esm2020 → esm2022}/persistence/index.mjs +0 -0
  73. /package/{esm2020 → esm2022}/services/catalog/adapters/category-structure.adapter.mjs +0 -0
  74. /package/{esm2020 → esm2022}/services/catalog/adapters/index.mjs +0 -0
  75. /package/{esm2020 → esm2022}/services/catalog/enums/index.mjs +0 -0
  76. /package/{esm2020 → esm2022}/services/catalog/enums/product-sorts.enum.mjs +0 -0
  77. /package/{esm2020 → esm2022}/services/catalog/index.mjs +0 -0
  78. /package/{esm2020 → esm2022}/services/catalog/models/index.mjs +0 -0
  79. /package/{esm2020 → esm2022}/services/catalog/types/index.mjs +0 -0
  80. /package/{esm2020 → esm2022}/services/catalog/types/product-sort.type.mjs +0 -0
  81. /package/{esm2020 → esm2022}/services/helpers/index.mjs +0 -0
  82. /package/{esm2020 → esm2022}/services/helpers/util.helper.mjs +0 -0
  83. /package/{esm2020 → esm2022}/services/types/index.mjs +0 -0
  84. /package/{esm2020 → esm2022}/services/types/required-checkout-data.type.mjs +0 -0
  85. /package/{esm2020 → esm2022}/services/types/required-checkout-subscription-data.type.mjs +0 -0
  86. /package/{esm2020 → esm2022}/types/firebase-app-config.type.mjs +0 -0
  87. /package/{esm2020 → esm2022}/types/index.mjs +0 -0
@@ -1,26 +1,32 @@
1
1
  import { ModuleWithProviders, Type } from '@angular/core';
2
2
  import { FirebaseOptions } from '@angular/fire/app';
3
- import { AxiosElasticSearchConfig, Shops } from '@infrab4a/connect';
3
+ import { AppCheckOptions } from '@angular/fire/app-check';
4
+ import { AxiosElasticSearchConfig, Shops, VertexSearchConfig } from '@infrab4a/connect';
4
5
  import { HasuraGraphQLOptions } from './angular-hasura-graphql.module';
5
6
  import { DataPersistence } from './persistence';
6
7
  import { FirebaseAppConfig } from './types';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/fire/app";
9
- import * as i2 from "./angular-elastic-search.module";
10
- import * as i3 from "./angular-firebase-auth.module";
11
- import * as i4 from "./angular-firestore.module";
12
- import * as i5 from "./angular-hasura-graphql.module";
10
+ import * as i2 from "@angular/fire/app-check";
11
+ import * as i3 from "@angular/fire/storage";
12
+ import * as i4 from "./angular-elastic-search.module";
13
+ import * as i5 from "./angular-vertex-search.module";
14
+ import * as i6 from "./angular-firebase-auth.module";
15
+ import * as i7 from "./angular-firestore.module";
16
+ import * as i8 from "./angular-hasura-graphql.module";
13
17
  export declare class AngularConnectModule {
14
18
  static initializeApp(defaultShop: Shops, options: {
15
- firebase: FirebaseOptions;
16
- elasticSearch: AxiosElasticSearchConfig;
19
+ firebase?: FirebaseOptions;
20
+ elasticSearch?: AxiosElasticSearchConfig;
21
+ vertexConfig?: VertexSearchConfig;
17
22
  hasura: HasuraGraphQLOptions;
18
23
  backendUrl: string;
19
24
  oldCategoryStructure?: boolean;
20
25
  storageBaseUrl?: string;
21
26
  persistenceProvider?: Type<DataPersistence>;
27
+ appCheckProvider?: AppCheckOptions['provider'];
22
28
  }, nameOrConfig?: string | FirebaseAppConfig): ModuleWithProviders<AngularConnectModule>;
23
29
  static ɵfac: i0.ɵɵFactoryDeclaration<AngularConnectModule, never>;
24
- static ɵmod: i0.ɵɵNgModuleDeclaration<AngularConnectModule, never, [typeof i1.FirebaseAppModule, typeof i2.AngularElasticSeachModule, typeof i3.AngularFirebaseAuthModule, typeof i4.AngularFirestoreModule, typeof i5.AngularHasuraGraphQLModule], never>;
30
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AngularConnectModule, never, [typeof i1.FirebaseAppModule, typeof i2.AppCheckModule, typeof i3.StorageModule, typeof i4.AngularElasticSeachModule, typeof i5.AngularVertexSeachModule, typeof i6.AngularFirebaseAuthModule, typeof i7.AngularFirestoreModule, typeof i8.AngularHasuraGraphQLModule], never>;
25
31
  static ɵinj: i0.ɵɵInjectorDeclaration<AngularConnectModule>;
26
32
  }
@@ -5,7 +5,6 @@ import { FirebaseAppConfig } from './types';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "./angular-elastic-search.module";
7
7
  import * as i2 from "@angular/fire/firestore";
8
- import * as i3 from "@angular/fire/storage";
9
8
  export type FirestoreOptions = Pick<FirestoreConstructorParams<any>, 'firestore' | 'interceptors'>;
10
9
  export declare class AngularFirestoreModule {
11
10
  static initializeApp(options: {
@@ -13,6 +12,6 @@ export declare class AngularFirestoreModule {
13
12
  elasticSearch: AxiosElasticSearchConfig;
14
13
  }, nameOrConfig?: string | FirebaseAppConfig): ModuleWithProviders<AngularFirestoreModule>;
15
14
  static ɵfac: i0.ɵɵFactoryDeclaration<AngularFirestoreModule, never>;
16
- static ɵmod: i0.ɵɵNgModuleDeclaration<AngularFirestoreModule, never, [typeof i1.AngularElasticSeachModule, typeof i2.FirestoreModule, typeof i3.StorageModule], never>;
15
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AngularFirestoreModule, never, [typeof i1.AngularElasticSeachModule, typeof i2.FirestoreModule], never>;
17
16
  static ɵinj: i0.ɵɵInjectorDeclaration<AngularFirestoreModule>;
18
17
  }
@@ -3,7 +3,7 @@ import { HasuraGraphQLAuthOptions } from '@infrab4a/connect';
3
3
  import * as i0 from "@angular/core";
4
4
  export type HasuraGraphQLOptions = {
5
5
  endpoint: string;
6
- credentials: HasuraGraphQLAuthOptions;
6
+ credentials?: HasuraGraphQLAuthOptions;
7
7
  };
8
8
  export declare class AngularHasuraGraphQLModule {
9
9
  static initializeApp(options: {
@@ -0,0 +1,9 @@
1
+ import { ModuleWithProviders } from '@angular/core';
2
+ import { VertexSearchConfig } from '@infrab4a/connect';
3
+ import * as i0 from "@angular/core";
4
+ export declare class AngularVertexSeachModule {
5
+ static initializeApp(options: VertexSearchConfig): ModuleWithProviders<AngularVertexSeachModule>;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<AngularVertexSeachModule, never>;
7
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AngularVertexSeachModule, never, never, never>;
8
+ static ɵinj: i0.ɵɵInjectorDeclaration<AngularVertexSeachModule>;
9
+ }
@@ -1,3 +1,4 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export declare const FIREBASE_APP_NAME: InjectionToken<unknown>;
3
3
  export declare const FIREBASE_OPTIONS: InjectionToken<unknown>;
4
+ export declare const APP_CHECK_PROVIDER: InjectionToken<unknown>;
package/consts/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export * from './es-config.const';
5
5
  export * from './firebase-const';
6
6
  export * from './hasura-options.const';
7
7
  export * from './persistence.const';
8
+ export * from './vertex-config.const';
@@ -0,0 +1 @@
1
+ export declare const VERTEX_CONFIG = "VERTEX_CONFIG";
@@ -0,0 +1,187 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { FirebaseApp, getApp, initializeApp, provideFirebaseApp } from '@angular/fire/app';
3
+ import { initializeAppCheck, provideAppCheck } from '@angular/fire/app-check';
4
+ import { getStorage, provideStorage, Storage } from '@angular/fire/storage';
5
+ import { FirebaseFileUploaderService, isNil, ProductsVertexSearch, UpdateUserImage, } from '@infrab4a/connect';
6
+ import { AngularElasticSeachModule } from './angular-elastic-search.module';
7
+ import { AngularFirebaseAuthModule } from './angular-firebase-auth.module';
8
+ import { AngularFirestoreModule } from './angular-firestore.module';
9
+ import { AngularHasuraGraphQLModule } from './angular-hasura-graphql.module';
10
+ import { AngularVertexSeachModule } from './angular-vertex-search.module';
11
+ import { APP_CHECK_PROVIDER, BACKEND_URL, CATEGORY_STRUCTURE, DEFAULT_SHOP, ES_CONFIG, FIREBASE_APP_NAME, FIREBASE_OPTIONS, HASURA_OPTIONS, PERSISTENCE_PROVIDER, VERTEX_CONFIG, } from './consts';
12
+ import { STORAGE_BASE_URL } from './consts/storage-base-url.const';
13
+ import { CookieDataPersistence } from './persistence';
14
+ import { AuthService, CartService, CatalogService, CategoryService, CheckoutService, CheckoutSubscriptionService, CouponService, HomeShopService, OrderService, WishlistService, } from './services';
15
+ import { NewCategoryStructureAdapter, OldCategoryStructureAdapter } from './services/catalog/adapters';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "@angular/fire/app";
18
+ import * as i2 from "@angular/fire/app-check";
19
+ import * as i3 from "@angular/fire/storage";
20
+ export class AngularConnectModule {
21
+ static initializeApp(defaultShop, options, nameOrConfig) {
22
+ return {
23
+ ngModule: AngularConnectModule,
24
+ providers: [
25
+ { provide: FIREBASE_APP_NAME, useValue: nameOrConfig },
26
+ { provide: APP_CHECK_PROVIDER, useValue: options.appCheckProvider },
27
+ {
28
+ provide: CATEGORY_STRUCTURE,
29
+ useClass: isNil(options?.oldCategoryStructure) || options?.oldCategoryStructure
30
+ ? OldCategoryStructureAdapter
31
+ : NewCategoryStructureAdapter,
32
+ },
33
+ { provide: PERSISTENCE_PROVIDER, useClass: options?.persistenceProvider || CookieDataPersistence },
34
+ ...(isNil(defaultShop) ? [] : [{ provide: DEFAULT_SHOP, useValue: defaultShop }]),
35
+ ...(isNil(options?.firebase) ? [] : [{ provide: FIREBASE_OPTIONS, useValue: options?.firebase }]),
36
+ ...(isNil(options?.elasticSearch) ? [] : [{ provide: ES_CONFIG, useValue: options.elasticSearch }]),
37
+ ...(isNil(options?.vertexConfig) ? [] : [{ provide: VERTEX_CONFIG, useValue: options.vertexConfig }]),
38
+ ...(isNil(options?.hasura) ? [] : [{ provide: HASURA_OPTIONS, useValue: options.hasura }]),
39
+ ...(isNil(options?.backendUrl) ? [] : [{ provide: BACKEND_URL, useValue: options.backendUrl }]),
40
+ ...(isNil(options?.storageBaseUrl) ? [] : [{ provide: STORAGE_BASE_URL, useValue: options.storageBaseUrl }]),
41
+ ],
42
+ };
43
+ }
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
45
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, imports: [i1.FirebaseAppModule, i2.AppCheckModule, i3.StorageModule, AngularElasticSeachModule,
46
+ AngularVertexSeachModule,
47
+ AngularFirebaseAuthModule,
48
+ AngularFirestoreModule,
49
+ AngularHasuraGraphQLModule] }); }
50
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, providers: [
51
+ AuthService,
52
+ CartService,
53
+ CatalogService,
54
+ CategoryService,
55
+ CheckoutService,
56
+ CheckoutSubscriptionService,
57
+ CouponService,
58
+ HomeShopService,
59
+ OrderService,
60
+ WishlistService,
61
+ {
62
+ provide: UpdateUserImage,
63
+ useFactory: (userRepository, fileUploader) => {
64
+ return new UpdateUserImage(userRepository, fileUploader);
65
+ },
66
+ deps: ['UserRepository', 'FileUploaderService'],
67
+ },
68
+ {
69
+ provide: 'FileUploaderService',
70
+ useFactory: (storage, baseUrl) => {
71
+ return new FirebaseFileUploaderService(storage, baseUrl);
72
+ },
73
+ deps: [Storage, STORAGE_BASE_URL],
74
+ },
75
+ {
76
+ provide: 'ProductSearch',
77
+ useExisting: ProductsVertexSearch,
78
+ },
79
+ ], imports: [provideFirebaseApp((injector) => {
80
+ const appName = injector.get(FIREBASE_APP_NAME);
81
+ try {
82
+ const app = appName ? getApp(appName) : getApp();
83
+ return app;
84
+ }
85
+ catch (error) {
86
+ console.warn('Firebase app not found, initializing new app');
87
+ if (error instanceof Error)
88
+ console.error(error.message);
89
+ return initializeApp(injector.get(FIREBASE_OPTIONS), appName);
90
+ }
91
+ }),
92
+ provideAppCheck((injector) => {
93
+ const app = injector.get(FirebaseApp);
94
+ try {
95
+ const provider = injector.get(APP_CHECK_PROVIDER);
96
+ if (provider)
97
+ return initializeAppCheck(app, {
98
+ provider,
99
+ isTokenAutoRefreshEnabled: true,
100
+ });
101
+ }
102
+ catch (error) {
103
+ if (error instanceof Error)
104
+ console.error(error.message);
105
+ return;
106
+ }
107
+ }),
108
+ provideStorage((injector) => getStorage(injector.get(FirebaseApp))),
109
+ AngularElasticSeachModule,
110
+ AngularVertexSeachModule,
111
+ AngularFirebaseAuthModule,
112
+ AngularFirestoreModule,
113
+ AngularHasuraGraphQLModule] }); }
114
+ }
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, decorators: [{
116
+ type: NgModule,
117
+ args: [{
118
+ imports: [
119
+ provideFirebaseApp((injector) => {
120
+ const appName = injector.get(FIREBASE_APP_NAME);
121
+ try {
122
+ const app = appName ? getApp(appName) : getApp();
123
+ return app;
124
+ }
125
+ catch (error) {
126
+ console.warn('Firebase app not found, initializing new app');
127
+ if (error instanceof Error)
128
+ console.error(error.message);
129
+ return initializeApp(injector.get(FIREBASE_OPTIONS), appName);
130
+ }
131
+ }),
132
+ provideAppCheck((injector) => {
133
+ const app = injector.get(FirebaseApp);
134
+ try {
135
+ const provider = injector.get(APP_CHECK_PROVIDER);
136
+ if (provider)
137
+ return initializeAppCheck(app, {
138
+ provider,
139
+ isTokenAutoRefreshEnabled: true,
140
+ });
141
+ }
142
+ catch (error) {
143
+ if (error instanceof Error)
144
+ console.error(error.message);
145
+ return;
146
+ }
147
+ }),
148
+ provideStorage((injector) => getStorage(injector.get(FirebaseApp))),
149
+ AngularElasticSeachModule,
150
+ AngularVertexSeachModule,
151
+ AngularFirebaseAuthModule,
152
+ AngularFirestoreModule,
153
+ AngularHasuraGraphQLModule,
154
+ ],
155
+ providers: [
156
+ AuthService,
157
+ CartService,
158
+ CatalogService,
159
+ CategoryService,
160
+ CheckoutService,
161
+ CheckoutSubscriptionService,
162
+ CouponService,
163
+ HomeShopService,
164
+ OrderService,
165
+ WishlistService,
166
+ {
167
+ provide: UpdateUserImage,
168
+ useFactory: (userRepository, fileUploader) => {
169
+ return new UpdateUserImage(userRepository, fileUploader);
170
+ },
171
+ deps: ['UserRepository', 'FileUploaderService'],
172
+ },
173
+ {
174
+ provide: 'FileUploaderService',
175
+ useFactory: (storage, baseUrl) => {
176
+ return new FirebaseFileUploaderService(storage, baseUrl);
177
+ },
178
+ deps: [Storage, STORAGE_BASE_URL],
179
+ },
180
+ {
181
+ provide: 'ProductSearch',
182
+ useExisting: ProductsVertexSearch,
183
+ },
184
+ ],
185
+ }]
186
+ }] });
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1jb25uZWN0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvYW5ndWxhci1jb25uZWN0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFFBQVEsRUFBUSxNQUFNLGVBQWUsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDM0csT0FBTyxFQUFtQixrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RixPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUMzRSxPQUFPLEVBR0wsMkJBQTJCLEVBQzNCLEtBQUssRUFDTCxvQkFBb0IsRUFFcEIsZUFBZSxHQUdoQixNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzNFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBd0IsTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN6RSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsYUFBYSxHQUNkLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FB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N0UseUJBQXlCO3dCQUN6Qix3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsc0JBQXNCO3dCQUN0QiwwQkFBMEI7cUJBQzNCO29CQUNELFNBQVMsRUFBRTt3QkFDVCxXQUFXO3dCQUNYLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsMkJBQTJCO3dCQUMzQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixlQUFlO3dCQUNmOzRCQUNFLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixVQUFVLEVBQUUsQ0FBQyxjQUE4QixFQUFFLFlBQWlDLEVBQUUsRUFBRTtnQ0FDaEYsT0FBTyxJQUFJLGVBQWUsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUE7NEJBQzFELENBQUM7NEJBQ0QsSUFBSSxFQUFFLENBQUMsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUM7eUJBQ2hEO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxxQkFBcUI7NEJBQzlCLFVBQVUsRUFBRSxDQUFDLE9BQWdCLEVBQUUsT0FBZSxFQUFFLEVBQUU7Z0NBQ2hELE9BQU8sSUFBSSwyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7NEJBQzFELENBQUM7NEJBQ0QsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDO3lCQUNsQzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsZUFBZTs0QkFDeEIsV0FBVyxFQUFFLG9CQUFvQjt5QkFDbEM7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRmlyZWJhc2VBcHAsIEZpcmViYXNlT3B0aW9ucywgZ2V0QXBwLCBpbml0aWFsaXplQXBwLCBwcm92aWRlRmlyZWJhc2VBcHAgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcCdcbmltcG9ydCB7IEFwcENoZWNrT3B0aW9ucywgaW5pdGlhbGl6ZUFwcENoZWNrLCBwcm92aWRlQXBwQ2hlY2sgfSBmcm9tICdAYW5ndWxhci9maXJlL2FwcC1jaGVjaydcbmltcG9ydCB7IGdldFN0b3JhZ2UsIHByb3ZpZGVTdG9yYWdlLCBTdG9yYWdlIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9zdG9yYWdlJ1xuaW1wb3J0IHtcbiAgQXhpb3NFbGFzdGljU2VhcmNoQ29uZmlnLFxuICBGaWxlVXBsb2FkZXJTZXJ2aWNlLFxuICBGaXJlYmFzZUZpbGVVcGxvYWRlclNlcnZpY2UsXG4gIGlzTmlsLFxuICBQcm9kdWN0c1ZlcnRleFNlYXJjaCxcbiAgU2hvcHMsXG4gIFVwZGF0ZVVzZXJJbWFnZSxcbiAgVXNlclJlcG9zaXRvcnksXG4gIFZlcnRleFNlYXJjaENvbmZpZyxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5pbXBvcnQgeyBBbmd1bGFyRWxhc3RpY1NlYWNoTW9kdWxlIH0gZnJvbSAnLi9hbmd1bGFyLWVsYXN0aWMtc2VhcmNoLm1vZHVsZSdcbmltcG9ydCB7IEFuZ3VsYXJGaXJlYmFzZUF1dGhNb2R1bGUgfSBmcm9tICcuL2FuZ3VsYXItZmlyZWJhc2UtYXV0aC5tb2R1bGUnXG5pbXBvcnQgeyBBbmd1bGFyRmlyZXN0b3JlTW9kdWxlIH0gZnJvbSAnLi9hbmd1bGFyLWZpcmVzdG9yZS5tb2R1bGUnXG5pbXBvcnQgeyBBbmd1bGFySGFzdXJhR3JhcGhRTE1vZHVsZSwgSGFzdXJhR3JhcGhRTE9wdGlvbnMgfSBmcm9tICcuL2FuZ3VsYXItaGFzdXJhLWdyYXBocWwubW9kdWxlJ1xuaW1wb3J0IHsgQW5ndWxhclZlcnRleFNlYWNoTW9kdWxlIH0gZnJvbSAnLi9hbmd1bGFyLXZlcnRleC1zZWFyY2gubW9kdWxlJ1xuaW1wb3J0IHtcbiAgQVBQX0NIRUNLX1BST1ZJREVSLFxuICBCQUNLRU5EX1VSTCxcbiAgQ0FURUdPUllfU1RSVUNUVVJFLFxuICBERUZBVUxUX1NIT1AsXG4gIEVTX0NPTkZJRyxcbiAgRklSRUJBU0VfQVBQX05BTUUsXG4gIEZJUkVCQVNFX09QVElPTlMsXG4gIEhBU1VSQV9PUFRJT05TLFxuICBQRVJTSVNURU5DRV9QUk9WSURFUixcbiAgVkVSVEVYX0NPTkZJRyxcbn0gZnJvbSAnLi9jb25zdHMnXG5pbXBvcnQgeyBTVE9SQUdFX0JBU0VfVVJMIH0gZnJvbSAnLi9jb25zdHMvc3RvcmFnZS1iYXNlLXVybC5jb25zdCdcbmltcG9ydCB7IENvb2tpZURhdGFQZXJzaXN0ZW5jZSwgRGF0YVBlcnNpc3RlbmNlIH0gZnJvbSAnLi9wZXJzaXN0ZW5jZSdcbmltcG9ydCB7XG4gIEF1dGhTZXJ2aWNlLFxuICBDYXJ0U2VydmljZSxcbiAgQ2F0YWxvZ1NlcnZpY2UsXG4gIENhdGVnb3J5U2VydmljZSxcbiAgQ2hlY2tvdXRTZXJ2aWNlLFxuICBDaGVja291dFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gIENvdXBvblNlcnZpY2UsXG4gIEhvbWVTaG9wU2VydmljZSxcbiAgT3JkZXJTZXJ2aWNlLFxuICBXaXNobGlzdFNlcnZpY2UsXG59IGZyb20gJy4vc2VydmljZXMnXG5pbXBvcnQgeyBOZXdDYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIsIE9sZENhdGVnb3J5U3RydWN0dXJlQWRhcHRlciB9IGZyb20gJy4vc2VydmljZXMvY2F0YWxvZy9hZGFwdGVycydcbmltcG9ydCB7IEZpcmViYXNlQXBwQ29uZmlnIH0gZnJvbSAnLi90eXBlcydcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIHByb3ZpZGVGaXJlYmFzZUFwcCgoaW5qZWN0b3I6IEluamVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBhcHBOYW1lID0gaW5qZWN0b3IuZ2V0PHN0cmluZz4oRklSRUJBU0VfQVBQX05BTUUpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGFwcCA9IGFwcE5hbWUgPyBnZXRBcHAoYXBwTmFtZSkgOiBnZXRBcHAoKVxuXG4gICAgICAgIHJldHVybiBhcHBcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRmlyZWJhc2UgYXBwIG5vdCBmb3VuZCwgaW5pdGlhbGl6aW5nIG5ldyBhcHAnKVxuXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UpXG5cbiAgICAgICAgcmV0dXJuIGluaXRpYWxpemVBcHAoaW5qZWN0b3IuZ2V0KEZJUkVCQVNFX09QVElPTlMpLCBhcHBOYW1lKVxuICAgICAgfVxuICAgIH0pLFxuICAgIHByb3ZpZGVBcHBDaGVjaygoaW5qZWN0b3I6IEluamVjdG9yKSA9PiB7XG4gICAgICBjb25zdCBhcHAgPSBpbmplY3Rvci5nZXQoRmlyZWJhc2VBcHApXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gaW5qZWN0b3IuZ2V0PEFwcENoZWNrT3B0aW9uc1sncHJvdmlkZXInXT4oQVBQX0NIRUNLX1BST1ZJREVSKVxuXG4gICAgICAgIGlmIChwcm92aWRlcilcbiAgICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZUFwcENoZWNrKGFwcCwge1xuICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICBpc1Rva2VuQXV0b1JlZnJlc2hFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikgY29uc29sZS5lcnJvcihlcnJvci5tZXNzYWdlKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH0pLFxuICAgIHByb3ZpZGVTdG9yYWdlKChpbmplY3RvcjogSW5qZWN0b3IpID0+IGdldFN0b3JhZ2UoaW5qZWN0b3IuZ2V0KEZpcmViYXNlQXBwKSkpLFxuICAgIEFuZ3VsYXJFbGFzdGljU2VhY2hNb2R1bGUsXG4gICAgQW5ndWxhclZlcnRleFNlYWNoTW9kdWxlLFxuICAgIEFuZ3VsYXJGaXJlYmFzZUF1dGhNb2R1bGUsXG4gICAgQW5ndWxhckZpcmVzdG9yZU1vZHVsZSxcbiAgICBBbmd1bGFySGFzdXJhR3JhcGhRTE1vZHVsZSxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQXV0aFNlcnZpY2UsXG4gICAgQ2FydFNlcnZpY2UsXG4gICAgQ2F0YWxvZ1NlcnZpY2UsXG4gICAgQ2F0ZWdvcnlTZXJ2aWNlLFxuICAgIENoZWNrb3V0U2VydmljZSxcbiAgICBDaGVja291dFN1YnNjcmlwdGlvblNlcnZpY2UsXG4gICAgQ291cG9uU2VydmljZSxcbiAgICBIb21lU2hvcFNlcnZpY2UsXG4gICAgT3JkZXJTZXJ2aWNlLFxuICAgIFdpc2hsaXN0U2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBVcGRhdGVVc2VySW1hZ2UsXG4gICAgICB1c2VGYWN0b3J5OiAodXNlclJlcG9zaXRvcnk6IFVzZXJSZXBvc2l0b3J5LCBmaWxlVXBsb2FkZXI6IEZpbGVVcGxvYWRlclNlcnZpY2UpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVVc2VySW1hZ2UodXNlclJlcG9zaXRvcnksIGZpbGVVcGxvYWRlcilcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ1VzZXJSZXBvc2l0b3J5JywgJ0ZpbGVVcGxvYWRlclNlcnZpY2UnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdGaWxlVXBsb2FkZXJTZXJ2aWNlJyxcbiAgICAgIHVzZUZhY3Rvcnk6IChzdG9yYWdlOiBTdG9yYWdlLCBiYXNlVXJsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaXJlYmFzZUZpbGVVcGxvYWRlclNlcnZpY2Uoc3RvcmFnZSwgYmFzZVVybClcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbU3RvcmFnZSwgU1RPUkFHRV9CQVNFX1VSTF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnUHJvZHVjdFNlYXJjaCcsXG4gICAgICB1c2VFeGlzdGluZzogUHJvZHVjdHNWZXJ0ZXhTZWFyY2gsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckNvbm5lY3RNb2R1bGUge1xuICBzdGF0aWMgaW5pdGlhbGl6ZUFwcChcbiAgICBkZWZhdWx0U2hvcDogU2hvcHMsXG4gICAgb3B0aW9uczoge1xuICAgICAgZmlyZWJhc2U/OiBGaXJlYmFzZU9wdGlvbnNcbiAgICAgIGVsYXN0aWNTZWFyY2g/OiBBeGlvc0VsYXN0aWNTZWFyY2hDb25maWdcbiAgICAgIHZlcnRleENvbmZpZz86IFZlcnRleFNlYXJjaENvbmZpZ1xuICAgICAgaGFzdXJhOiBIYXN1cmFHcmFwaFFMT3B0aW9uc1xuICAgICAgYmFja2VuZFVybDogc3RyaW5nXG4gICAgICBvbGRDYXRlZ29yeVN0cnVjdHVyZT86IGJvb2xlYW5cbiAgICAgIHN0b3JhZ2VCYXNlVXJsPzogc3RyaW5nXG4gICAgICBwZXJzaXN0ZW5jZVByb3ZpZGVyPzogVHlwZTxEYXRhUGVyc2lzdGVuY2U+XG4gICAgICBhcHBDaGVja1Byb3ZpZGVyPzogQXBwQ2hlY2tPcHRpb25zWydwcm92aWRlciddXG4gICAgfSxcbiAgICBuYW1lT3JDb25maWc/OiBzdHJpbmcgfCBGaXJlYmFzZUFwcENvbmZpZyxcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxBbmd1bGFyQ29ubmVjdE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQW5ndWxhckNvbm5lY3RNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBGSVJFQkFTRV9BUFBfTkFNRSwgdXNlVmFsdWU6IG5hbWVPckNvbmZpZyB9LFxuICAgICAgICB7IHByb3ZpZGU6IEFQUF9DSEVDS19QUk9WSURFUiwgdXNlVmFsdWU6IG9wdGlvbnMuYXBwQ2hlY2tQcm92aWRlciB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQ0FURUdPUllfU1RSVUNUVVJFLFxuICAgICAgICAgIHVzZUNsYXNzOlxuICAgICAgICAgICAgaXNOaWwob3B0aW9ucz8ub2xkQ2F0ZWdvcnlTdHJ1Y3R1cmUpIHx8IG9wdGlvbnM/Lm9sZENhdGVnb3J5U3RydWN0dXJlXG4gICAgICAgICAgICAgID8gT2xkQ2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyXG4gICAgICAgICAgICAgIDogTmV3Q2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyLFxuICAgICAgICB9LFxuICAgICAgICB7IHByb3ZpZGU6IFBFUlNJU1RFTkNFX1BST1ZJREVSLCB1c2VDbGFzczogb3B0aW9ucz8ucGVyc2lzdGVuY2VQcm92aWRlciB8fCBDb29raWVEYXRhUGVyc2lzdGVuY2UgfSxcbiAgICAgICAgLi4uKGlzTmlsKGRlZmF1bHRTaG9wKSA/IFtdIDogW3sgcHJvdmlkZTogREVGQVVMVF9TSE9QLCB1c2VWYWx1ZTogZGVmYXVsdFNob3AgfV0pLFxuICAgICAgICAuLi4oaXNOaWwob3B0aW9ucz8uZmlyZWJhc2UpID8gW10gOiBbeyBwcm92aWRlOiBGSVJFQkFTRV9PUFRJT05TLCB1c2VWYWx1ZTogb3B0aW9ucz8uZmlyZWJhc2UgfV0pLFxuICAgICAgICAuLi4oaXNOaWwob3B0aW9ucz8uZWxhc3RpY1NlYXJjaCkgPyBbXSA6IFt7IHByb3ZpZGU6IEVTX0NPTkZJRywgdXNlVmFsdWU6IG9wdGlvbnMuZWxhc3RpY1NlYXJjaCB9XSksXG4gICAgICAgIC4uLihpc05pbChvcHRpb25zPy52ZXJ0ZXhDb25maWcpID8gW10gOiBbeyBwcm92aWRlOiBWRVJURVhfQ09ORklHLCB1c2VWYWx1ZTogb3B0aW9ucy52ZXJ0ZXhDb25maWcgfV0pLFxuICAgICAgICAuLi4oaXNOaWwob3B0aW9ucz8uaGFzdXJhKSA/IFtdIDogW3sgcHJvdmlkZTogSEFTVVJBX09QVElPTlMsIHVzZVZhbHVlOiBvcHRpb25zLmhhc3VyYSB9XSksXG4gICAgICAgIC4uLihpc05pbChvcHRpb25zPy5iYWNrZW5kVXJsKSA/IFtdIDogW3sgcHJvdmlkZTogQkFDS0VORF9VUkwsIHVzZVZhbHVlOiBvcHRpb25zLmJhY2tlbmRVcmwgfV0pLFxuICAgICAgICAuLi4oaXNOaWwob3B0aW9ucz8uc3RvcmFnZUJhc2VVcmwpID8gW10gOiBbeyBwcm92aWRlOiBTVE9SQUdFX0JBU0VfVVJMLCB1c2VWYWx1ZTogb3B0aW9ucy5zdG9yYWdlQmFzZVVybCB9XSksXG4gICAgICBdLFxuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,34 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { AxiosAdapter, ProductsIndex } from '@infrab4a/connect';
3
+ import { ES_CONFIG } from './consts/es-config.const';
4
+ import * as i0 from "@angular/core";
5
+ export class AngularElasticSeachModule {
6
+ static initializeApp(options) {
7
+ return {
8
+ ngModule: AngularElasticSeachModule,
9
+ providers: [{ provide: ES_CONFIG, useValue: options }],
10
+ };
11
+ }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularElasticSeachModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
13
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: AngularElasticSeachModule }); }
14
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularElasticSeachModule, providers: [
15
+ {
16
+ provide: ProductsIndex,
17
+ useFactory: (configuration) => new ProductsIndex(new AxiosAdapter(configuration)),
18
+ deps: [ES_CONFIG],
19
+ },
20
+ ] }); }
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularElasticSeachModule, decorators: [{
23
+ type: NgModule,
24
+ args: [{
25
+ providers: [
26
+ {
27
+ provide: ProductsIndex,
28
+ useFactory: (configuration) => new ProductsIndex(new AxiosAdapter(configuration)),
29
+ deps: [ES_CONFIG],
30
+ },
31
+ ],
32
+ }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1lbGFzdGljLXNlYXJjaC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2FuZ3VsYXItZWxhc3RpYy1zZWFyY2gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQTRCLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXpGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTs7QUFZcEQsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQWlDO1FBQ3BELE9BQU87WUFDTCxRQUFRLEVBQUUseUJBQXlCO1lBQ25DLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDdkQsQ0FBQTtJQUNILENBQUM7OEdBTlUseUJBQXlCOytHQUF6Qix5QkFBeUI7K0dBQXpCLHlCQUF5QixhQVR6QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixVQUFVLEVBQUUsQ0FBQyxhQUF1QyxFQUFpQixFQUFFLENBQ3JFLElBQUksYUFBYSxDQUFDLElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7YUFDbEI7U0FDRjs7MkZBRVUseUJBQXlCO2tCQVZyQyxRQUFRO21CQUFDO29CQUNSLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsVUFBVSxFQUFFLENBQUMsYUFBdUMsRUFBaUIsRUFBRSxDQUNyRSxJQUFJLGFBQWEsQ0FBQyxJQUFJLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQzs0QkFDcEQsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDO3lCQUNsQjtxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEF4aW9zQWRhcHRlciwgQXhpb3NFbGFzdGljU2VhcmNoQ29uZmlnLCBQcm9kdWN0c0luZGV4IH0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5cbmltcG9ydCB7IEVTX0NPTkZJRyB9IGZyb20gJy4vY29uc3RzL2VzLWNvbmZpZy5jb25zdCdcblxuQE5nTW9kdWxlKHtcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogUHJvZHVjdHNJbmRleCxcbiAgICAgIHVzZUZhY3Rvcnk6IChjb25maWd1cmF0aW9uOiBBeGlvc0VsYXN0aWNTZWFyY2hDb25maWcpOiBQcm9kdWN0c0luZGV4ID0+XG4gICAgICAgIG5ldyBQcm9kdWN0c0luZGV4KG5ldyBBeGlvc0FkYXB0ZXIoY29uZmlndXJhdGlvbikpLFxuICAgICAgZGVwczogW0VTX0NPTkZJR10sXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQW5ndWxhckVsYXN0aWNTZWFjaE1vZHVsZSB7XG4gIHN0YXRpYyBpbml0aWFsaXplQXBwKG9wdGlvbnM6IEF4aW9zRWxhc3RpY1NlYXJjaENvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QW5ndWxhckVsYXN0aWNTZWFjaE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQW5ndWxhckVsYXN0aWNTZWFjaE1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogRVNfQ09ORklHLCB1c2VWYWx1ZTogb3B0aW9ucyB9XSxcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,141 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { FirebaseApp } from '@angular/fire/app';
3
+ import { Auth, browserLocalPersistence, getAuth, indexedDBLocalPersistence, initializeAuth, provideAuth, } from '@angular/fire/auth';
4
+ import { Authentication, AuthenticationFirebaseAuthService, RecoveryPassword, Register, RegisterFirebaseAuthService, SignOut, } from '@infrab4a/connect';
5
+ import { FIREBASE_APP_NAME, FIREBASE_OPTIONS } from './consts';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/fire/auth";
8
+ export class AngularFirebaseAuthModule {
9
+ static initializeApp(options, nameOrConfig) {
10
+ return {
11
+ ngModule: AngularFirebaseAuthModule,
12
+ providers: [
13
+ { provide: FIREBASE_OPTIONS, useValue: options },
14
+ { provide: FIREBASE_APP_NAME, useValue: nameOrConfig },
15
+ ],
16
+ };
17
+ }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularFirebaseAuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
19
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: AngularFirebaseAuthModule, imports: [i1.AuthModule] }); }
20
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularFirebaseAuthModule, providers: [
21
+ {
22
+ provide: 'Authentication',
23
+ useFactory: (authenticationService, userRepository) => {
24
+ return new Authentication(authenticationService, userRepository);
25
+ },
26
+ deps: ['AuthenticationService', 'UserRepository'],
27
+ },
28
+ {
29
+ provide: 'AuthenticationService',
30
+ useFactory: (angularFireAuth) => {
31
+ return new AuthenticationFirebaseAuthService(angularFireAuth);
32
+ },
33
+ deps: [Auth],
34
+ },
35
+ {
36
+ provide: 'Register',
37
+ useFactory: (registerService, userRepository) => {
38
+ return new Register(registerService, userRepository);
39
+ },
40
+ deps: ['RegisterService', 'UserRepository'],
41
+ },
42
+ {
43
+ provide: 'RegisterService',
44
+ useFactory: (angularFireAuth) => {
45
+ return new RegisterFirebaseAuthService(angularFireAuth);
46
+ },
47
+ deps: [Auth],
48
+ },
49
+ {
50
+ provide: 'SignOut',
51
+ useFactory: (authenticationService) => {
52
+ return new SignOut(authenticationService);
53
+ },
54
+ deps: ['AuthenticationService'],
55
+ },
56
+ {
57
+ provide: 'RecoveryPassword',
58
+ useFactory: (authenticationService) => {
59
+ return new RecoveryPassword(authenticationService);
60
+ },
61
+ deps: ['AuthenticationService'],
62
+ },
63
+ ], imports: [provideAuth((injector) => {
64
+ const app = injector.get(FirebaseApp);
65
+ try {
66
+ return initializeAuth(app, {
67
+ persistence: [indexedDBLocalPersistence, browserLocalPersistence],
68
+ });
69
+ }
70
+ catch (error) {
71
+ if (error instanceof Error)
72
+ console.error('Error initializing auth', error.message);
73
+ return getAuth(app);
74
+ }
75
+ })] }); }
76
+ }
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularFirebaseAuthModule, decorators: [{
78
+ type: NgModule,
79
+ args: [{
80
+ imports: [
81
+ provideAuth((injector) => {
82
+ const app = injector.get(FirebaseApp);
83
+ try {
84
+ return initializeAuth(app, {
85
+ persistence: [indexedDBLocalPersistence, browserLocalPersistence],
86
+ });
87
+ }
88
+ catch (error) {
89
+ if (error instanceof Error)
90
+ console.error('Error initializing auth', error.message);
91
+ return getAuth(app);
92
+ }
93
+ }),
94
+ ],
95
+ providers: [
96
+ {
97
+ provide: 'Authentication',
98
+ useFactory: (authenticationService, userRepository) => {
99
+ return new Authentication(authenticationService, userRepository);
100
+ },
101
+ deps: ['AuthenticationService', 'UserRepository'],
102
+ },
103
+ {
104
+ provide: 'AuthenticationService',
105
+ useFactory: (angularFireAuth) => {
106
+ return new AuthenticationFirebaseAuthService(angularFireAuth);
107
+ },
108
+ deps: [Auth],
109
+ },
110
+ {
111
+ provide: 'Register',
112
+ useFactory: (registerService, userRepository) => {
113
+ return new Register(registerService, userRepository);
114
+ },
115
+ deps: ['RegisterService', 'UserRepository'],
116
+ },
117
+ {
118
+ provide: 'RegisterService',
119
+ useFactory: (angularFireAuth) => {
120
+ return new RegisterFirebaseAuthService(angularFireAuth);
121
+ },
122
+ deps: [Auth],
123
+ },
124
+ {
125
+ provide: 'SignOut',
126
+ useFactory: (authenticationService) => {
127
+ return new SignOut(authenticationService);
128
+ },
129
+ deps: ['AuthenticationService'],
130
+ },
131
+ {
132
+ provide: 'RecoveryPassword',
133
+ useFactory: (authenticationService) => {
134
+ return new RecoveryPassword(authenticationService);
135
+ },
136
+ deps: ['AuthenticationService'],
137
+ },
138
+ ],
139
+ }]
140
+ }] });
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1maXJlYmFzZS1hdXRoLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvYW5ndWxhci1maXJlYmFzZS1hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlDLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLG1CQUFtQixDQUFBO0FBQ2hFLE9BQU8sRUFDTCxJQUFJLEVBQ0osdUJBQXVCLEVBQ3ZCLE9BQU8sRUFDUCx5QkFBeUIsRUFDekIsY0FBYyxFQUNkLFdBQVcsR0FDWixNQUFNLG9CQUFvQixDQUFBO0FBQzNCLE9BQU8sRUFDTCxjQUFjLEVBQ2QsaUNBQWlDLEVBRWpDLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsMkJBQTJCLEVBRTNCLE9BQU8sR0FFUixNQUFNLG1CQUFtQixDQUFBO0FBRTFCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7O0FBZ0U5RCxNQUFNLE9BQU8seUJBQXlCO0lBQ3BDLE1BQU0sQ0FBQyxhQUFhLENBQ2xCLE9BQXdCLEVBQ3hCLFlBQXlDO1FBRXpDLE9BQU87WUFDTCxRQUFRLEVBQUUseUJBQXlCO1lBQ25DLFNBQVMsRUFBRTtnQkFDVCxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO2dCQUNoRCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFO2FBQ3ZEO1NBQ0YsQ0FBQTtJQUNILENBQUM7OEdBWlUseUJBQXlCOytHQUF6Qix5QkFBeUI7K0dBQXpCLHlCQUF5QixhQTdDekI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsZ0JBQWdCO2dCQUN6QixVQUFVLEVBQUUsQ0FBQyxxQkFBNEMsRUFBRSxjQUE4QixFQUFrQixFQUFFO29C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LHFCQUE0QyxFQUFvQixFQUFFO2dDQUM3RSxPQUFPLElBQUksZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsQ0FBQTs0QkFDcEQsQ0FBQzs0QkFDRCxJQUFJLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzt5QkFDaEM7cUJBQ0Y7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRmlyZWJhc2VBcHAsIEZpcmViYXNlT3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXBwJ1xuaW1wb3J0IHtcbiAgQXV0aCxcbiAgYnJvd3NlckxvY2FsUGVyc2lzdGVuY2UsXG4gIGdldEF1dGgsXG4gIGluZGV4ZWREQkxvY2FsUGVyc2lzdGVuY2UsXG4gIGluaXRpYWxpemVBdXRoLFxuICBwcm92aWRlQXV0aCxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9hdXRoJ1xuaW1wb3J0IHtcbiAgQXV0aGVudGljYXRpb24sXG4gIEF1dGhlbnRpY2F0aW9uRmlyZWJhc2VBdXRoU2VydmljZSxcbiAgQXV0aGVudGljYXRpb25TZXJ2aWNlLFxuICBSZWNvdmVyeVBhc3N3b3JkLFxuICBSZWdpc3RlcixcbiAgUmVnaXN0ZXJGaXJlYmFzZUF1dGhTZXJ2aWNlLFxuICBSZWdpc3RlclNlcnZpY2UsXG4gIFNpZ25PdXQsXG4gIFVzZXJSZXBvc2l0b3J5LFxufSBmcm9tICdAaW5mcmFiNGEvY29ubmVjdCdcblxuaW1wb3J0IHsgRklSRUJBU0VfQVBQX05BTUUsIEZJUkVCQVNFX09QVElPTlMgfSBmcm9tICcuL2NvbnN0cydcbmltcG9ydCB7IEZpcmViYXNlQXBwQ29uZmlnIH0gZnJvbSAnLi90eXBlcydcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIHByb3ZpZGVBdXRoKChpbmplY3RvcjogSW5qZWN0b3IpID0+IHtcbiAgICAgIGNvbnN0IGFwcCA9IGluamVjdG9yLmdldChGaXJlYmFzZUFwcClcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxpemVBdXRoKGFwcCwge1xuICAgICAgICAgIHBlcnNpc3RlbmNlOiBbaW5kZXhlZERCTG9jYWxQZXJzaXN0ZW5jZSwgYnJvd3NlckxvY2FsUGVyc2lzdGVuY2VdLFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBhdXRoJywgZXJyb3IubWVzc2FnZSlcblxuICAgICAgICByZXR1cm4gZ2V0QXV0aChhcHApXG4gICAgICB9XG4gICAgfSksXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdBdXRoZW50aWNhdGlvbicsXG4gICAgICB1c2VGYWN0b3J5OiAoYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsIHVzZXJSZXBvc2l0b3J5OiBVc2VyUmVwb3NpdG9yeSk6IEF1dGhlbnRpY2F0aW9uID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBdXRoZW50aWNhdGlvbihhdXRoZW50aWNhdGlvblNlcnZpY2UsIHVzZXJSZXBvc2l0b3J5KVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnQXV0aGVudGljYXRpb25TZXJ2aWNlJywgJ1VzZXJSZXBvc2l0b3J5J10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnQXV0aGVudGljYXRpb25TZXJ2aWNlJyxcbiAgICAgIHVzZUZhY3Rvcnk6IChhbmd1bGFyRmlyZUF1dGg6IEF1dGgpOiBBdXRoZW50aWNhdGlvblNlcnZpY2UgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEF1dGhlbnRpY2F0aW9uRmlyZWJhc2VBdXRoU2VydmljZShhbmd1bGFyRmlyZUF1dGgpXG4gICAgICB9LFxuICAgICAgZGVwczogW0F1dGhdLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1JlZ2lzdGVyJyxcbiAgICAgIHVzZUZhY3Rvcnk6IChyZWdpc3RlclNlcnZpY2U6IFJlZ2lzdGVyU2VydmljZSwgdXNlclJlcG9zaXRvcnk6IFVzZXJSZXBvc2l0b3J5KTogUmVnaXN0ZXIgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ2lzdGVyKHJlZ2lzdGVyU2VydmljZSwgdXNlclJlcG9zaXRvcnkpXG4gICAgICB9LFxuICAgICAgZGVwczogWydSZWdpc3RlclNlcnZpY2UnLCAnVXNlclJlcG9zaXRvcnknXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdSZWdpc3RlclNlcnZpY2UnLFxuICAgICAgdXNlRmFjdG9yeTogKGFuZ3VsYXJGaXJlQXV0aDogQXV0aCk6IFJlZ2lzdGVyU2VydmljZSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnaXN0ZXJGaXJlYmFzZUF1dGhTZXJ2aWNlKGFuZ3VsYXJGaXJlQXV0aClcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbQXV0aF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnU2lnbk91dCcsXG4gICAgICB1c2VGYWN0b3J5OiAoYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UpOiBTaWduT3V0ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduT3V0KGF1dGhlbnRpY2F0aW9uU2VydmljZSlcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0F1dGhlbnRpY2F0aW9uU2VydmljZSddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1JlY292ZXJ5UGFzc3dvcmQnLFxuICAgICAgdXNlRmFjdG9yeTogKGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlKTogUmVjb3ZlcnlQYXNzd29yZCA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUmVjb3ZlcnlQYXNzd29yZChhdXRoZW50aWNhdGlvblNlcnZpY2UpXG4gICAgICB9LFxuICAgICAgZGVwczogWydBdXRoZW50aWNhdGlvblNlcnZpY2UnXSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFyRmlyZWJhc2VBdXRoTW9kdWxlIHtcbiAgc3RhdGljIGluaXRpYWxpemVBcHAoXG4gICAgb3B0aW9uczogRmlyZWJhc2VPcHRpb25zLFxuICAgIG5hbWVPckNvbmZpZz86IHN0cmluZyB8IEZpcmViYXNlQXBwQ29uZmlnLFxuICApOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFuZ3VsYXJGaXJlYmFzZUF1dGhNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IEFuZ3VsYXJGaXJlYmFzZUF1dGhNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBGSVJFQkFTRV9PUFRJT05TLCB1c2VWYWx1ZTogb3B0aW9ucyB9LFxuICAgICAgICB7IHByb3ZpZGU6IEZJUkVCQVNFX0FQUF9OQU1FLCB1c2VWYWx1ZTogbmFtZU9yQ29uZmlnIH0sXG4gICAgICBdLFxuICAgIH1cbiAgfVxufVxuIl19