@infrab4a/connect-angular 5.1.0 → 6.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/eslint.config.js +18 -0
  2. package/index.ts +1 -0
  3. package/karma.conf.js +32 -0
  4. package/ng-package.json +8 -0
  5. package/package.json +10 -28
  6. package/project.json +37 -0
  7. package/src/angular-connect.module.ts +256 -0
  8. package/src/angular-elastic-search.module.ts +23 -0
  9. package/src/angular-firebase-auth.module.ts +101 -0
  10. package/src/angular-firestore.module.ts +371 -0
  11. package/src/angular-hasura-graphql.module.ts +219 -0
  12. package/src/angular-vertex-search.module.ts +23 -0
  13. package/src/consts/backend-url.const.ts +1 -0
  14. package/src/consts/category-structure.ts +1 -0
  15. package/src/consts/default-shop.const.ts +1 -0
  16. package/src/consts/es-config.const.ts +1 -0
  17. package/src/consts/firebase-const.ts +5 -0
  18. package/src/consts/hasura-options.const.ts +1 -0
  19. package/src/consts/index.ts +8 -0
  20. package/src/consts/persistence.const.ts +1 -0
  21. package/src/consts/storage-base-url.const.ts +1 -0
  22. package/src/consts/vertex-config.const.ts +1 -0
  23. package/src/helpers/index.ts +1 -0
  24. package/src/helpers/mobile-operation-system-checker.helper.ts +10 -0
  25. package/src/index.ts +6 -0
  26. package/src/interfaces/catalog-strategies.interface.ts +36 -0
  27. package/src/interfaces/category-facades.interface.ts +7 -0
  28. package/src/interfaces/index.ts +2 -0
  29. package/src/persistence/cookie-data-persistence.ts +21 -0
  30. package/src/persistence/data-persistence.ts +7 -0
  31. package/src/persistence/index.ts +2 -0
  32. package/src/services/auth.service.ts +39 -0
  33. package/src/services/cart/cart-services.facade.ts +14 -0
  34. package/src/services/cart/index.ts +1 -0
  35. package/src/services/cart.service.ts +124 -0
  36. package/src/services/catalog/adapters/category-structure.adapter.ts +5 -0
  37. package/src/services/catalog/adapters/index.ts +3 -0
  38. package/src/services/catalog/adapters/new-category-structure.adapter.ts +42 -0
  39. package/src/services/catalog/adapters/old-category-structure.adapter.ts +17 -0
  40. package/src/services/catalog/catalog.service.ts +153 -0
  41. package/src/services/catalog/category.service.ts +52 -0
  42. package/src/services/catalog/context/catalog-search.context.ts +61 -0
  43. package/src/services/catalog/enums/index.ts +1 -0
  44. package/src/services/catalog/enums/product-sorts.enum.ts +9 -0
  45. package/src/services/catalog/facades/catalog-service.facade.ts +32 -0
  46. package/src/services/catalog/facades/catalog-strategies.facade.ts +12 -0
  47. package/src/services/catalog/facades/category-repository.facade.ts +10 -0
  48. package/src/services/catalog/facades/category-service.facade.ts +25 -0
  49. package/src/services/catalog/facades/index.ts +5 -0
  50. package/src/services/catalog/facades/product-catalog.facade.ts +13 -0
  51. package/src/services/catalog/helpers/brand-manager.helper.ts +63 -0
  52. package/src/services/catalog/helpers/catalog-filter.helper.ts +50 -0
  53. package/src/services/catalog/helpers/catalog-sort.helper.ts +54 -0
  54. package/src/services/catalog/helpers/index.ts +4 -0
  55. package/src/services/catalog/helpers/product-fields.helper.ts +35 -0
  56. package/src/services/catalog/index.ts +7 -0
  57. package/src/services/catalog/models/category-with-tree.model.ts +7 -0
  58. package/src/services/catalog/models/index.ts +1 -0
  59. package/src/services/catalog/services/catalog-helpers.service.ts +35 -0
  60. package/src/services/catalog/services/catalog-operations.facade.ts +24 -0
  61. package/src/services/catalog/services/catalog-repository.service.ts +20 -0
  62. package/src/services/catalog/services/index.ts +4 -0
  63. package/src/services/catalog/services/product-management.facade.ts +20 -0
  64. package/src/services/catalog/strategies/category-search.strategy.ts +172 -0
  65. package/src/services/catalog/strategies/index.ts +3 -0
  66. package/src/services/catalog/strategies/profile-search.strategy.ts +51 -0
  67. package/src/services/catalog/strategies/term-search.strategy.ts +178 -0
  68. package/src/services/catalog/strategies/types/strategy-params.type.ts +58 -0
  69. package/src/services/catalog/types/fetch-products-options.type.ts +10 -0
  70. package/src/services/catalog/types/fetch-products-params.type.ts +27 -0
  71. package/src/services/catalog/types/fetch-products-response.type.ts +11 -0
  72. package/src/services/catalog/types/index.ts +5 -0
  73. package/src/services/catalog/types/method-params.type.ts +21 -0
  74. package/src/services/catalog/types/product-sort.type.ts +3 -0
  75. package/src/services/catalog/wishlist.service.ts +368 -0
  76. package/src/services/checkout/checkout-dependencies.facade.ts +13 -0
  77. package/src/services/checkout/checkout-repositories.facade.ts +10 -0
  78. package/src/services/checkout/index.ts +2 -0
  79. package/src/services/checkout-subscription.service.ts +76 -0
  80. package/src/services/checkout.service.ts +196 -0
  81. package/src/services/coupon/coupon-repositories.facade.ts +11 -0
  82. package/src/services/coupon/index.ts +1 -0
  83. package/src/services/coupon/types/coupon-params.type.ts +15 -0
  84. package/src/services/coupon.service.ts +347 -0
  85. package/src/services/errors/group-invalid-coupon.error.ts +9 -0
  86. package/src/services/errors/index.ts +2 -0
  87. package/src/services/errors/invalid-coupon.error.ts +7 -0
  88. package/src/services/helpers/index.ts +1 -0
  89. package/src/services/helpers/util.helper.ts +17 -0
  90. package/src/services/home-shop/home-shop-repositories.facade.ts +11 -0
  91. package/src/services/home-shop/index.ts +1 -0
  92. package/src/services/home-shop.service.ts +196 -0
  93. package/src/services/index.ts +9 -0
  94. package/src/services/order.service.ts +23 -0
  95. package/src/services/shared/configuration.facade.ts +21 -0
  96. package/src/services/shared/index.ts +1 -0
  97. package/src/services/types/index.ts +2 -0
  98. package/src/services/types/required-checkout-data.type.ts +3 -0
  99. package/src/services/types/required-checkout-subscription-data.type.ts +3 -0
  100. package/src/types/firebase-app-config.type.ts +1 -0
  101. package/src/types/index.ts +1 -0
  102. package/tsconfig.json +17 -0
  103. package/tsconfig.lib.json +13 -0
  104. package/tsconfig.lib.prod.json +13 -0
  105. package/tsconfig.spec.json +17 -0
  106. package/angular-connect.module.d.ts +0 -26
  107. package/angular-elastic-search.module.d.ts +0 -9
  108. package/angular-firebase-auth.module.d.ts +0 -11
  109. package/angular-firestore.module.d.ts +0 -18
  110. package/angular-hasura-graphql.module.d.ts +0 -16
  111. package/consts/backend-url.const.d.ts +0 -1
  112. package/consts/category-structure.d.ts +0 -1
  113. package/consts/default-shop.const.d.ts +0 -1
  114. package/consts/es-config.const.d.ts +0 -1
  115. package/consts/firebase-const.d.ts +0 -3
  116. package/consts/hasura-options.const.d.ts +0 -1
  117. package/consts/index.d.ts +0 -7
  118. package/consts/persistence.const.d.ts +0 -1
  119. package/consts/storage-base-url.const.d.ts +0 -1
  120. package/esm2020/angular-connect.module.mjs +0 -115
  121. package/esm2020/angular-elastic-search.module.mjs +0 -34
  122. package/esm2020/angular-firebase-auth.module.mjs +0 -115
  123. package/esm2020/angular-firestore.module.mjs +0 -504
  124. package/esm2020/angular-hasura-graphql.module.mjs +0 -265
  125. package/esm2020/consts/backend-url.const.mjs +0 -2
  126. package/esm2020/consts/category-structure.mjs +0 -2
  127. package/esm2020/consts/default-shop.const.mjs +0 -2
  128. package/esm2020/consts/es-config.const.mjs +0 -2
  129. package/esm2020/consts/firebase-const.mjs +0 -4
  130. package/esm2020/consts/hasura-options.const.mjs +0 -2
  131. package/esm2020/consts/index.mjs +0 -8
  132. package/esm2020/consts/persistence.const.mjs +0 -2
  133. package/esm2020/consts/storage-base-url.const.mjs +0 -2
  134. package/esm2020/helpers/index.mjs +0 -2
  135. package/esm2020/helpers/mobile-operation-system-checker.helper.mjs +0 -7
  136. package/esm2020/index.mjs +0 -7
  137. package/esm2020/infrab4a-connect-angular.mjs +0 -5
  138. package/esm2020/persistence/cookie-data-persistence.mjs +0 -22
  139. package/esm2020/persistence/data-persistence.mjs +0 -2
  140. package/esm2020/persistence/index.mjs +0 -3
  141. package/esm2020/services/auth.service.mjs +0 -37
  142. package/esm2020/services/cart.service.mjs +0 -281
  143. package/esm2020/services/catalog/adapters/category-structure.adapter.mjs +0 -2
  144. package/esm2020/services/catalog/adapters/index.mjs +0 -4
  145. package/esm2020/services/catalog/adapters/new-category-structure.adapter.mjs +0 -43
  146. package/esm2020/services/catalog/adapters/old-category-structure.adapter.mjs +0 -23
  147. package/esm2020/services/catalog/catalog.service.mjs +0 -194
  148. package/esm2020/services/catalog/category.service.mjs +0 -51
  149. package/esm2020/services/catalog/enums/index.mjs +0 -2
  150. package/esm2020/services/catalog/enums/product-sorts.enum.mjs +0 -11
  151. package/esm2020/services/catalog/index.mjs +0 -8
  152. package/esm2020/services/catalog/models/category-with-tree.model.mjs +0 -10
  153. package/esm2020/services/catalog/models/index.mjs +0 -2
  154. package/esm2020/services/catalog/types/index.mjs +0 -2
  155. package/esm2020/services/catalog/types/product-sort.type.mjs +0 -2
  156. package/esm2020/services/catalog/wishlist.service.mjs +0 -115
  157. package/esm2020/services/checkout-subscription.service.mjs +0 -50
  158. package/esm2020/services/checkout.service.mjs +0 -68
  159. package/esm2020/services/coupon.service.mjs +0 -235
  160. package/esm2020/services/helpers/index.mjs +0 -2
  161. package/esm2020/services/helpers/util.helper.mjs +0 -18
  162. package/esm2020/services/home-shop.service.mjs +0 -125
  163. package/esm2020/services/index.mjs +0 -11
  164. package/esm2020/services/order.service.mjs +0 -30
  165. package/esm2020/services/shipping.service.mjs +0 -96
  166. package/esm2020/services/types/index.mjs +0 -3
  167. package/esm2020/services/types/required-checkout-data.type.mjs +0 -2
  168. package/esm2020/services/types/required-checkout-subscription-data.type.mjs +0 -2
  169. package/esm2020/services/types/shipping-methods.type.mjs +0 -2
  170. package/esm2020/types/firebase-app-config.type.mjs +0 -2
  171. package/esm2020/types/index.mjs +0 -2
  172. package/fesm2015/infrab4a-connect-angular.mjs +0 -2417
  173. package/fesm2015/infrab4a-connect-angular.mjs.map +0 -1
  174. package/fesm2020/infrab4a-connect-angular.mjs +0 -2352
  175. package/fesm2020/infrab4a-connect-angular.mjs.map +0 -1
  176. package/helpers/index.d.ts +0 -1
  177. package/helpers/mobile-operation-system-checker.helper.d.ts +0 -3
  178. package/index.d.ts +0 -6
  179. package/persistence/cookie-data-persistence.d.ts +0 -10
  180. package/persistence/data-persistence.d.ts +0 -6
  181. package/persistence/index.d.ts +0 -2
  182. package/services/auth.service.d.ts +0 -18
  183. package/services/cart.service.d.ts +0 -42
  184. package/services/catalog/adapters/category-structure.adapter.d.ts +0 -4
  185. package/services/catalog/adapters/index.d.ts +0 -3
  186. package/services/catalog/adapters/new-category-structure.adapter.d.ts +0 -12
  187. package/services/catalog/adapters/old-category-structure.adapter.d.ts +0 -10
  188. package/services/catalog/catalog.service.d.ts +0 -86
  189. package/services/catalog/category.service.d.ts +0 -20
  190. package/services/catalog/enums/index.d.ts +0 -1
  191. package/services/catalog/enums/product-sorts.enum.d.ts +0 -9
  192. package/services/catalog/index.d.ts +0 -7
  193. package/services/catalog/models/category-with-tree.model.d.ts +0 -4
  194. package/services/catalog/models/index.d.ts +0 -1
  195. package/services/catalog/types/index.d.ts +0 -1
  196. package/services/catalog/types/product-sort.type.d.ts +0 -2
  197. package/services/catalog/wishlist.service.d.ts +0 -38
  198. package/services/checkout-subscription.service.d.ts +0 -19
  199. package/services/checkout.service.d.ts +0 -24
  200. package/services/coupon.service.d.ts +0 -29
  201. package/services/helpers/index.d.ts +0 -1
  202. package/services/helpers/util.helper.d.ts +0 -3
  203. package/services/home-shop.service.d.ts +0 -26
  204. package/services/index.d.ts +0 -10
  205. package/services/order.service.d.ts +0 -13
  206. package/services/shipping.service.d.ts +0 -19
  207. package/services/types/index.d.ts +0 -2
  208. package/services/types/required-checkout-data.type.d.ts +0 -2
  209. package/services/types/required-checkout-subscription-data.type.d.ts +0 -2
  210. package/services/types/shipping-methods.type.d.ts +0 -12
  211. package/types/firebase-app-config.type.d.ts +0 -1
  212. package/types/index.d.ts +0 -1
@@ -0,0 +1,18 @@
1
+ const baseConfig = require('../../eslint.config.js')
2
+
3
+ module.exports = [
4
+ ...baseConfig,
5
+ {
6
+ files: ['**/*.ts'],
7
+ languageOptions: {
8
+ parserOptions: {
9
+ project: './tsconfig.json',
10
+ },
11
+ },
12
+ rules: {
13
+ // Regras específicas para o projeto connect-angular
14
+ // Relaxar algumas regras para componentes Angular
15
+ '@typescript-eslint/explicit-member-accessibility': 'off',
16
+ },
17
+ },
18
+ ]
package/index.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './src'
package/karma.conf.js ADDED
@@ -0,0 +1,32 @@
1
+ // Karma configuration file, see link for more information
2
+ // https://karma-runner.github.io/1.0/config/configuration-file.html
3
+
4
+ module.exports = function (config) {
5
+ config.set({
6
+ basePath: '',
7
+ frameworks: ['jasmine', '@angular-devkit/build-angular'],
8
+ plugins: [
9
+ require('karma-jasmine'),
10
+ require('karma-chrome-launcher'),
11
+ require('karma-jasmine-html-reporter'),
12
+ require('karma-coverage-istanbul-reporter'),
13
+ require('@angular-devkit/build-angular/plugins/karma'),
14
+ ],
15
+ client: {
16
+ clearContext: false, // leave Jasmine Spec Runner output visible in browser
17
+ },
18
+ coverageIstanbulReporter: {
19
+ dir: require('path').join(__dirname, '../../coverage/connect-angular'),
20
+ reports: ['html', 'lcovonly', 'text-summary'],
21
+ fixWebpackSourcePaths: true,
22
+ },
23
+ reporters: ['progress', 'kjhtml'],
24
+ port: 9876,
25
+ colors: true,
26
+ logLevel: config.LOG_INFO,
27
+ autoWatch: true,
28
+ browsers: ['Chrome'],
29
+ singleRun: false,
30
+ restartOnFileChange: true,
31
+ })
32
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3
+ "dest": "../../dist/connect-angular",
4
+ "lib": {
5
+ "entryFile": "src/index.ts"
6
+ },
7
+ "allowedNonPeerDependencies": ["js-cookie", "ts-custom-error", "@infrab4a/connect"]
8
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infrab4a/connect-angular",
3
- "version": "5.1.0",
3
+ "version": "6.0.0-alpha.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org"
6
6
  },
@@ -9,35 +9,17 @@
9
9
  "url": "https://github.com/B4AGroup/b4a-firebase-libs"
10
10
  },
11
11
  "peerDependencies": {
12
- "@angular/common": "^17.0.0",
13
- "@angular/core": "^17.0.0",
14
- "@angular/fire": "^17.0.0-next.0",
15
- "@infrab4a/connect": "^4.9.0-beta.0",
12
+ "@angular/common": "^15.1.4",
13
+ "@angular/core": "^15.1.4",
14
+ "@angular/fire": "7.5.0",
15
+ "@infrab4a/connect": "6.0.0-alpha.0",
16
+ "class-transformer": "^0.5.1",
16
17
  "js-cookie": "^3.0.1",
17
- "rxjs": "^7.8.1"
18
+ "rxjs": "^6.6.7",
19
+ "ts-custom-error": "^3.3.1"
18
20
  },
19
21
  "dependencies": {
20
22
  "js-cookie": "^3.0.1",
21
23
  "tslib": "^2.4.0"
22
- },
23
- "module": "fesm2015/infrab4a-connect-angular.mjs",
24
- "es2020": "fesm2020/infrab4a-connect-angular.mjs",
25
- "esm2020": "esm2020/infrab4a-connect-angular.mjs",
26
- "fesm2020": "fesm2020/infrab4a-connect-angular.mjs",
27
- "fesm2015": "fesm2015/infrab4a-connect-angular.mjs",
28
- "typings": "index.d.ts",
29
- "exports": {
30
- "./package.json": {
31
- "default": "./package.json"
32
- },
33
- ".": {
34
- "types": "./index.d.ts",
35
- "esm2020": "./esm2020/infrab4a-connect-angular.mjs",
36
- "es2020": "./fesm2020/infrab4a-connect-angular.mjs",
37
- "es2015": "./fesm2015/infrab4a-connect-angular.mjs",
38
- "node": "./fesm2015/infrab4a-connect-angular.mjs",
39
- "default": "./fesm2020/infrab4a-connect-angular.mjs"
40
- }
41
- },
42
- "sideEffects": false
43
- }
24
+ }
25
+ }
package/project.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
3
+ "name": "connect-angular",
4
+ "projectType": "library",
5
+ "sourceRoot": "projects/connect-angular/src",
6
+ "prefix": "infrab4a",
7
+ "tags": ["type:lib", "scope:publishable", "framework:angular"],
8
+ "targets": {
9
+ "build": {
10
+ "executor": "@angular-devkit/build-angular:ng-packagr",
11
+ "options": {
12
+ "tsConfig": "projects/connect-angular/tsconfig.lib.json",
13
+ "project": "projects/connect-angular/ng-package.json"
14
+ },
15
+ "configurations": {
16
+ "production": {
17
+ "tsConfig": "projects/connect-angular/tsconfig.lib.prod.json"
18
+ }
19
+ },
20
+ "outputs": ["{workspaceRoot}/dist/connect-angular"]
21
+ },
22
+ "test": {
23
+ "executor": "@angular-devkit/build-angular:karma",
24
+ "options": {
25
+ "main": "projects/connect-angular/src/test.ts",
26
+ "tsConfig": "projects/connect-angular/tsconfig.spec.json",
27
+ "karmaConfig": "projects/connect-angular/karma.conf.js"
28
+ }
29
+ },
30
+ "lint": {
31
+ "executor": "@nx/eslint:lint",
32
+ "options": {
33
+ "lintFilePatterns": ["projects/connect-angular/**/*.ts"]
34
+ }
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,256 @@
1
+ import { Injector, ModuleWithProviders, NgModule, Type } from '@angular/core'
2
+ import { FirebaseApp, FirebaseOptions, getApp, initializeApp, provideFirebaseApp } from '@angular/fire/app'
3
+ import { AppCheckOptions, initializeAppCheck, provideAppCheck } from '@angular/fire/app-check'
4
+ import { getStorage, provideStorage, Storage } from '@angular/fire/storage'
5
+ import {
6
+ AxiosElasticSearchConfig,
7
+ FileUploaderService,
8
+ FirebaseFileUploaderService,
9
+ isNil,
10
+ ProductsVertexSearch,
11
+ Shops,
12
+ UpdateUserImage,
13
+ UserRepository,
14
+ VertexSearchConfig,
15
+ } from '@infrab4a/connect'
16
+
17
+ import { AngularElasticSeachModule } from './angular-elastic-search.module'
18
+ import { AngularFirebaseAuthModule } from './angular-firebase-auth.module'
19
+ import { AngularFirestoreModule } from './angular-firestore.module'
20
+ import { AngularHasuraGraphQLModule, HasuraGraphQLOptions } from './angular-hasura-graphql.module'
21
+ import { AngularVertexSeachModule } from './angular-vertex-search.module'
22
+ import {
23
+ APP_CHECK_PROVIDER,
24
+ BACKEND_URL,
25
+ CATEGORY_STRUCTURE,
26
+ DEFAULT_SHOP,
27
+ ES_CONFIG,
28
+ FIREBASE_APP_NAME,
29
+ FIREBASE_OPTIONS,
30
+ HASURA_OPTIONS,
31
+ PERSISTENCE_PROVIDER,
32
+ VERTEX_CONFIG,
33
+ } from './consts'
34
+ import { STORAGE_BASE_URL } from './consts/storage-base-url.const'
35
+ import { CookieDataPersistence, DataPersistence } from './persistence'
36
+ import {
37
+ AuthService,
38
+ CartService,
39
+ CatalogService,
40
+ CategoryService,
41
+ CheckoutService,
42
+ CheckoutSubscriptionService,
43
+ CouponService,
44
+ HomeShopService,
45
+ OrderService,
46
+ WishlistService,
47
+ } from './services'
48
+ import { CartServicesFacade } from './services/cart'
49
+ import { NewCategoryStructureAdapter, OldCategoryStructureAdapter } from './services/catalog/adapters'
50
+ import { CatalogSearchContext } from './services/catalog/context/catalog-search.context'
51
+ import {
52
+ CatalogServiceFacade,
53
+ CatalogStrategiesFacade,
54
+ CategoryRepositoryFacade,
55
+ CategoryServiceFacade,
56
+ ProductCatalogFacade,
57
+ } from './services/catalog/facades'
58
+ import {
59
+ BrandManagerHelper,
60
+ CatalogFilterHelper,
61
+ CatalogSortHelper,
62
+ ProductFieldsHelper,
63
+ } from './services/catalog/helpers'
64
+ import {
65
+ CatalogHelpersService,
66
+ CatalogOperationsFacade,
67
+ CatalogRepositoryService,
68
+ ProductManagementFacade,
69
+ } from './services/catalog/services'
70
+ import { CategorySearchStrategy, ProfileSearchStrategy, TermSearchStrategy } from './services/catalog/strategies'
71
+ import { CheckoutDependenciesFacade, CheckoutRepositoriesFacade } from './services/checkout'
72
+ import { CouponRepositoriesFacade } from './services/coupon'
73
+ import { HomeShopRepositoriesFacade } from './services/home-shop'
74
+ import { ConfigurationFacade } from './services/shared'
75
+ import { FirebaseAppConfig } from './types'
76
+
77
+ @NgModule({
78
+ imports: [
79
+ provideFirebaseApp((injector: Injector) => {
80
+ const appName = injector.get<string>(FIREBASE_APP_NAME)
81
+
82
+ try {
83
+ const app = appName ? getApp(appName) : getApp()
84
+
85
+ return app
86
+ } catch (error) {
87
+ console.warn('Firebase app not found, initializing new app')
88
+
89
+ if (error instanceof Error) console.error(error.message)
90
+
91
+ return initializeApp(injector.get(FIREBASE_OPTIONS), appName)
92
+ }
93
+ }),
94
+ provideAppCheck((injector: Injector) => {
95
+ const app = injector.get(FirebaseApp)
96
+
97
+ try {
98
+ const provider = injector.get<AppCheckOptions['provider']>(APP_CHECK_PROVIDER)
99
+
100
+ if (provider)
101
+ return initializeAppCheck(app, {
102
+ provider,
103
+ isTokenAutoRefreshEnabled: true,
104
+ })
105
+ } catch (error) {
106
+ if (error instanceof Error) console.error(error.message)
107
+
108
+ return
109
+ }
110
+ }),
111
+ provideStorage((injector: Injector) => getStorage(injector.get(FirebaseApp))),
112
+ AngularElasticSeachModule,
113
+ AngularVertexSeachModule,
114
+ AngularFirebaseAuthModule,
115
+ AngularFirestoreModule,
116
+ AngularHasuraGraphQLModule,
117
+ ],
118
+ providers: [
119
+ AuthService,
120
+ CartService,
121
+ CatalogService,
122
+ CategoryService,
123
+ CheckoutService,
124
+ CheckoutSubscriptionService,
125
+ CouponService,
126
+ HomeShopService,
127
+ OrderService,
128
+ WishlistService,
129
+ ConfigurationFacade,
130
+ CartServicesFacade,
131
+ CheckoutRepositoriesFacade,
132
+ CheckoutDependenciesFacade,
133
+ CategoryRepositoryFacade,
134
+ ProductCatalogFacade,
135
+ CatalogServiceFacade,
136
+ CategoryServiceFacade,
137
+ CatalogStrategiesFacade,
138
+ CatalogOperationsFacade,
139
+ ProductManagementFacade,
140
+ {
141
+ provide: 'ProductServicesFacade',
142
+ useFactory: (productStockNotificationRepository: any, categoryRepository: any, productSearch: any) => ({
143
+ productStockNotificationRepository,
144
+ categoryRepository,
145
+ productSearch,
146
+ }),
147
+ deps: ['ProductStockNotificationRepository', 'CategoryRepository', 'ProductSearch'],
148
+ },
149
+ CatalogFilterHelper,
150
+ CatalogSortHelper,
151
+ ProductFieldsHelper,
152
+ BrandManagerHelper,
153
+ CatalogRepositoryService,
154
+ CatalogHelpersService,
155
+ CategorySearchStrategy,
156
+ TermSearchStrategy,
157
+ ProfileSearchStrategy,
158
+ CatalogSearchContext,
159
+ {
160
+ provide: UpdateUserImage,
161
+ useFactory: (userRepository: UserRepository, fileUploader: FileUploaderService) => {
162
+ return new UpdateUserImage(userRepository, fileUploader)
163
+ },
164
+ deps: ['UserRepository', 'FileUploaderService'],
165
+ },
166
+ {
167
+ provide: 'FileUploaderService',
168
+ useFactory: (storage: Storage, baseUrl: string) => {
169
+ return new FirebaseFileUploaderService(storage, baseUrl)
170
+ },
171
+ deps: [Storage, STORAGE_BASE_URL],
172
+ },
173
+ {
174
+ provide: 'ProductSearch',
175
+ useExisting: ProductsVertexSearch,
176
+ },
177
+ CouponRepositoriesFacade,
178
+ HomeShopRepositoriesFacade,
179
+ ],
180
+ })
181
+ export class AngularConnectModule {
182
+ static initializeApp(
183
+ defaultShop: Shops,
184
+ options: {
185
+ firebase?: FirebaseOptions
186
+ elasticSearch?: AxiosElasticSearchConfig
187
+ vertexConfig?: VertexSearchConfig
188
+ hasura: HasuraGraphQLOptions
189
+ backendUrl: string
190
+ oldCategoryStructure?: boolean
191
+ storageBaseUrl?: string
192
+ persistenceProvider?: Type<DataPersistence>
193
+ appCheckProvider?: AppCheckOptions['provider']
194
+ },
195
+ nameOrConfig?: string | FirebaseAppConfig,
196
+ ): ModuleWithProviders<AngularConnectModule> {
197
+ return {
198
+ ngModule: AngularConnectModule,
199
+ providers: [
200
+ ...this.buildCoreProviders(nameOrConfig, options),
201
+ ...this.buildConditionalProviders(defaultShop, options),
202
+ ],
203
+ }
204
+ }
205
+
206
+ private static buildCoreProviders(
207
+ nameOrConfig: string | FirebaseAppConfig,
208
+ options: {
209
+ appCheckProvider?: AppCheckOptions['provider']
210
+ oldCategoryStructure?: boolean
211
+ persistenceProvider?: Type<DataPersistence>
212
+ },
213
+ ) {
214
+ return [
215
+ { provide: FIREBASE_APP_NAME, useValue: nameOrConfig },
216
+ { provide: APP_CHECK_PROVIDER, useValue: options.appCheckProvider },
217
+ {
218
+ provide: CATEGORY_STRUCTURE,
219
+ useClass: this.selectCategoryStructureAdapter(options.oldCategoryStructure),
220
+ },
221
+ { provide: PERSISTENCE_PROVIDER, useClass: options?.persistenceProvider || CookieDataPersistence },
222
+ ]
223
+ }
224
+
225
+ private static buildConditionalProviders(
226
+ defaultShop: Shops,
227
+ options: {
228
+ firebase?: FirebaseOptions
229
+ elasticSearch?: AxiosElasticSearchConfig
230
+ vertexConfig?: VertexSearchConfig
231
+ hasura: HasuraGraphQLOptions
232
+ backendUrl: string
233
+ storageBaseUrl?: string
234
+ },
235
+ ) {
236
+ return [
237
+ ...this.createProviderIfExists(DEFAULT_SHOP, defaultShop),
238
+ ...this.createProviderIfExists(FIREBASE_OPTIONS, options.firebase),
239
+ ...this.createProviderIfExists(ES_CONFIG, options.elasticSearch),
240
+ ...this.createProviderIfExists(VERTEX_CONFIG, options.vertexConfig),
241
+ ...this.createProviderIfExists(HASURA_OPTIONS, options.hasura),
242
+ ...this.createProviderIfExists(BACKEND_URL, options.backendUrl),
243
+ ...this.createProviderIfExists(STORAGE_BASE_URL, options.storageBaseUrl),
244
+ ]
245
+ }
246
+
247
+ private static selectCategoryStructureAdapter(oldCategoryStructure?: boolean) {
248
+ return isNil(oldCategoryStructure) || oldCategoryStructure
249
+ ? OldCategoryStructureAdapter
250
+ : NewCategoryStructureAdapter
251
+ }
252
+
253
+ private static createProviderIfExists(token: any, value: any) {
254
+ return isNil(value) ? [] : [{ provide: token, useValue: value }]
255
+ }
256
+ }
@@ -0,0 +1,23 @@
1
+ import { ModuleWithProviders, NgModule } from '@angular/core'
2
+ import { AxiosAdapter, AxiosElasticSearchConfig, ProductsIndex } from '@infrab4a/connect'
3
+
4
+ import { ES_CONFIG } from './consts/es-config.const'
5
+
6
+ @NgModule({
7
+ providers: [
8
+ {
9
+ provide: ProductsIndex,
10
+ useFactory: (configuration: AxiosElasticSearchConfig): ProductsIndex =>
11
+ new ProductsIndex(new AxiosAdapter(configuration)),
12
+ deps: [ES_CONFIG],
13
+ },
14
+ ],
15
+ })
16
+ export class AngularElasticSeachModule {
17
+ static initializeApp(options: AxiosElasticSearchConfig): ModuleWithProviders<AngularElasticSeachModule> {
18
+ return {
19
+ ngModule: AngularElasticSeachModule,
20
+ providers: [{ provide: ES_CONFIG, useValue: options }],
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,101 @@
1
+ import { Injector, ModuleWithProviders, NgModule } from '@angular/core'
2
+ import { FirebaseApp, FirebaseOptions } from '@angular/fire/app'
3
+ import {
4
+ Auth,
5
+ browserLocalPersistence,
6
+ browserSessionPersistence,
7
+ getAuth,
8
+ indexedDBLocalPersistence,
9
+ initializeAuth,
10
+ provideAuth,
11
+ } from '@angular/fire/auth'
12
+ import {
13
+ Authentication,
14
+ AuthenticationFirebaseAuthService,
15
+ AuthenticationService,
16
+ RecoveryPassword,
17
+ Register,
18
+ RegisterFirebaseAuthService,
19
+ RegisterService,
20
+ SignOut,
21
+ UserRepository,
22
+ } from '@infrab4a/connect'
23
+
24
+ import { FIREBASE_APP_NAME, FIREBASE_OPTIONS } from './consts'
25
+ import { FirebaseAppConfig } from './types'
26
+
27
+ @NgModule({
28
+ imports: [
29
+ provideAuth((injector: Injector) => {
30
+ const app = injector.get(FirebaseApp)
31
+
32
+ try {
33
+ return initializeAuth(app, {
34
+ persistence: [indexedDBLocalPersistence, browserLocalPersistence, browserSessionPersistence],
35
+ })
36
+ } catch (error) {
37
+ if (error instanceof Error) console.error('Error initializing auth', error.message)
38
+
39
+ return getAuth(app)
40
+ }
41
+ }),
42
+ ],
43
+ providers: [
44
+ {
45
+ provide: 'Authentication',
46
+ useFactory: (authenticationService: AuthenticationService, userRepository: UserRepository): Authentication => {
47
+ return new Authentication(authenticationService, userRepository)
48
+ },
49
+ deps: ['AuthenticationService', 'UserRepository'],
50
+ },
51
+ {
52
+ provide: 'AuthenticationService',
53
+ useFactory: (angularFireAuth: Auth): AuthenticationService => {
54
+ return new AuthenticationFirebaseAuthService(angularFireAuth)
55
+ },
56
+ deps: [Auth],
57
+ },
58
+ {
59
+ provide: 'Register',
60
+ useFactory: (registerService: RegisterService, userRepository: UserRepository): Register => {
61
+ return new Register(registerService, userRepository)
62
+ },
63
+ deps: ['RegisterService', 'UserRepository'],
64
+ },
65
+ {
66
+ provide: 'RegisterService',
67
+ useFactory: (angularFireAuth: Auth): RegisterService => {
68
+ return new RegisterFirebaseAuthService(angularFireAuth)
69
+ },
70
+ deps: [Auth],
71
+ },
72
+ {
73
+ provide: 'SignOut',
74
+ useFactory: (authenticationService: AuthenticationService): SignOut => {
75
+ return new SignOut(authenticationService)
76
+ },
77
+ deps: ['AuthenticationService'],
78
+ },
79
+ {
80
+ provide: 'RecoveryPassword',
81
+ useFactory: (authenticationService: AuthenticationService): RecoveryPassword => {
82
+ return new RecoveryPassword(authenticationService)
83
+ },
84
+ deps: ['AuthenticationService'],
85
+ },
86
+ ],
87
+ })
88
+ export class AngularFirebaseAuthModule {
89
+ static initializeApp(
90
+ options: FirebaseOptions,
91
+ nameOrConfig?: string | FirebaseAppConfig,
92
+ ): ModuleWithProviders<AngularFirebaseAuthModule> {
93
+ return {
94
+ ngModule: AngularFirebaseAuthModule,
95
+ providers: [
96
+ { provide: FIREBASE_OPTIONS, useValue: options },
97
+ { provide: FIREBASE_APP_NAME, useValue: nameOrConfig },
98
+ ],
99
+ }
100
+ }
101
+ }