@reactionary/source 0.3.18 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/README.md +28 -14
  2. package/core/src/client/client-builder.ts +54 -6
  3. package/core/src/factories/cart.factory.ts +40 -0
  4. package/core/src/factories/category.factory.ts +40 -0
  5. package/core/src/factories/checkout.factory.ts +59 -0
  6. package/core/src/factories/identity.factory.ts +26 -0
  7. package/core/src/factories/index.ts +15 -0
  8. package/core/src/factories/inventory.factory.ts +26 -0
  9. package/core/src/factories/order-search.factory.ts +33 -0
  10. package/core/src/factories/order.factory.ts +21 -0
  11. package/core/src/factories/price.factory.ts +29 -0
  12. package/core/src/factories/product-associations.factory.ts +30 -0
  13. package/core/src/factories/product-list.factory.ts +82 -0
  14. package/core/src/factories/product-reviews.factory.ts +58 -0
  15. package/core/src/factories/product-search.factory.ts +31 -0
  16. package/core/src/factories/product.factory.ts +21 -0
  17. package/core/src/factories/profile.factory.ts +23 -0
  18. package/core/src/factories/store.factory.ts +21 -0
  19. package/core/src/index.ts +3 -1
  20. package/core/src/providers/cart.provider.ts +12 -10
  21. package/core/src/providers/category.provider.ts +9 -7
  22. package/core/src/providers/checkout.provider.ts +14 -10
  23. package/core/src/providers/identity.provider.ts +7 -7
  24. package/core/src/providers/inventory.provider.ts +4 -4
  25. package/core/src/providers/order-search.provider.ts +4 -2
  26. package/core/src/providers/order.provider.ts +4 -4
  27. package/core/src/providers/price.provider.ts +5 -5
  28. package/core/src/providers/product-associations.provider.ts +6 -4
  29. package/core/src/providers/product-list.provider.ts +13 -8
  30. package/core/src/providers/product-reviews.provider.ts +8 -4
  31. package/core/src/providers/product-search.provider.ts +15 -28
  32. package/core/src/providers/product.provider.ts +6 -6
  33. package/core/src/providers/profile.provider.ts +8 -8
  34. package/core/src/providers/store.provider.ts +2 -2
  35. package/core/src/test/client-builder.spec.ts +81 -0
  36. package/examples/node/package.json +7 -7
  37. package/examples/node/src/basic/basic-node-provider-model-extension.spec.ts +10 -4
  38. package/examples/node/src/basic/basic-node-provider-query-extension.spec.ts +8 -2
  39. package/examples/node/src/basic/basic-node-setup.spec.ts +5 -1
  40. package/examples/node/src/basic/client-creation.spec.ts +3 -3
  41. package/examples/node/src/utils.ts +41 -41
  42. package/examples/node/tsconfig.lib.json +2 -1
  43. package/package.json +1 -1
  44. package/providers/algolia/src/core/initialize.ts +76 -21
  45. package/providers/algolia/src/core/initialize.types.ts +107 -0
  46. package/providers/algolia/src/factories/index.ts +1 -0
  47. package/providers/algolia/src/factories/product-search/product-search.factory.ts +182 -0
  48. package/providers/algolia/src/index.ts +2 -2
  49. package/providers/algolia/src/providers/analytics.provider.ts +4 -4
  50. package/providers/algolia/src/providers/product-search.provider.ts +67 -184
  51. package/providers/algolia/src/schema/capabilities.schema.ts +81 -7
  52. package/providers/algolia/src/test/analytics.spec.ts +9 -1
  53. package/providers/algolia/src/test/client-builder-product-search-extension.example.ts +85 -0
  54. package/providers/commercetools/src/core/capability-descriptors.ts +324 -0
  55. package/providers/commercetools/src/core/initialize.ts +35 -151
  56. package/providers/commercetools/src/core/initialize.types.ts +174 -0
  57. package/providers/commercetools/src/factories/cart/cart.factory.ts +142 -0
  58. package/providers/commercetools/src/factories/category/category.factory.ts +77 -0
  59. package/providers/commercetools/src/factories/checkout/checkout-initializer-overrides.example.ts +94 -0
  60. package/providers/commercetools/src/factories/checkout/checkout.factory.ts +338 -0
  61. package/providers/commercetools/src/factories/identity/identity.factory.ts +26 -0
  62. package/providers/commercetools/src/factories/inventory/inventory.factory.ts +49 -0
  63. package/providers/commercetools/src/factories/order/order.factory.ts +149 -0
  64. package/providers/commercetools/src/factories/order-search/order-search.factory.ts +108 -0
  65. package/providers/commercetools/src/factories/price/price.factory.ts +76 -0
  66. package/providers/commercetools/src/factories/product/product-factory-baseline.example.ts +14 -0
  67. package/providers/commercetools/src/factories/product/product-factory-schema-and-parse-extension.example.ts +35 -0
  68. package/providers/commercetools/src/factories/product/product-factory-schema-extension.example.ts +23 -0
  69. package/providers/commercetools/src/factories/product/product-initializer-factory-extension.example.ts +41 -0
  70. package/providers/commercetools/src/factories/product/product-provider-custom-method-only.example.ts +47 -0
  71. package/providers/commercetools/src/factories/product/product-provider-schema-signature-extension.example.ts +61 -0
  72. package/providers/commercetools/src/factories/product/product.factory.ts +220 -0
  73. package/providers/commercetools/src/factories/product/utils.example.ts +9 -0
  74. package/providers/commercetools/src/factories/product-associations/product-associations.factory.ts +103 -0
  75. package/providers/commercetools/src/factories/product-list/product-list.factory.ts +122 -0
  76. package/providers/commercetools/src/factories/product-reviews/product-reviews.factory.ts +81 -0
  77. package/providers/commercetools/src/factories/product-search/product-search.factory.ts +182 -0
  78. package/providers/commercetools/src/factories/profile/profile.factory.ts +94 -0
  79. package/providers/commercetools/src/factories/store/store.factory.ts +49 -0
  80. package/providers/commercetools/src/index.ts +15 -0
  81. package/providers/commercetools/src/providers/cart.provider.ts +67 -193
  82. package/providers/commercetools/src/providers/category.provider.ts +24 -64
  83. package/providers/commercetools/src/providers/checkout.provider.ts +50 -322
  84. package/providers/commercetools/src/providers/identity.provider.ts +35 -15
  85. package/providers/commercetools/src/providers/inventory.provider.ts +13 -31
  86. package/providers/commercetools/src/providers/order-search.provider.ts +16 -110
  87. package/providers/commercetools/src/providers/order.provider.ts +13 -144
  88. package/providers/commercetools/src/providers/price.provider.ts +37 -51
  89. package/providers/commercetools/src/providers/product-associations.provider.ts +39 -104
  90. package/providers/commercetools/src/providers/product-list.provider.ts +38 -23
  91. package/providers/commercetools/src/providers/product-reviews.provider.ts +34 -14
  92. package/providers/commercetools/src/providers/product-search.provider.ts +17 -170
  93. package/providers/commercetools/src/providers/product.provider.ts +20 -199
  94. package/providers/commercetools/src/providers/profile.provider.ts +27 -73
  95. package/providers/commercetools/src/providers/store.provider.ts +13 -31
  96. package/providers/commercetools/src/schema/capabilities.schema.ts +258 -20
  97. package/providers/commercetools/src/test/caching.spec.ts +18 -2
  98. package/providers/commercetools/src/test/client-builder-merge-extensions.example.ts +125 -0
  99. package/providers/fake/src/core/initialize.ts +213 -44
  100. package/providers/fake/src/core/initialize.types.ts +164 -0
  101. package/providers/fake/src/factories/cart/cart.factory.ts +34 -0
  102. package/providers/fake/src/factories/category/category.factory.ts +40 -0
  103. package/providers/fake/src/factories/checkout/checkout.factory.ts +53 -0
  104. package/providers/fake/src/factories/identity/identity.factory.ts +25 -0
  105. package/providers/fake/src/factories/index.ts +14 -0
  106. package/providers/fake/src/factories/inventory/inventory.factory.ts +25 -0
  107. package/providers/fake/src/factories/order/order.factory.ts +22 -0
  108. package/providers/fake/src/factories/order-search/order-search.factory.ts +27 -0
  109. package/providers/fake/src/factories/price/price.factory.ts +26 -0
  110. package/providers/fake/src/factories/product/product.factory.ts +22 -0
  111. package/providers/fake/src/factories/product-associations/product-associations.factory.ts +25 -0
  112. package/providers/fake/src/factories/product-reviews/product-reviews.factory.ts +53 -0
  113. package/providers/fake/src/factories/product-search/product-search.factory.ts +27 -0
  114. package/providers/fake/src/factories/profile/profile.factory.ts +22 -0
  115. package/providers/fake/src/factories/store/store.factory.ts +22 -0
  116. package/providers/fake/src/index.ts +2 -0
  117. package/providers/fake/src/providers/cart.provider.ts +23 -14
  118. package/providers/fake/src/providers/category.provider.ts +120 -105
  119. package/providers/fake/src/providers/checkout.provider.ts +39 -20
  120. package/providers/fake/src/providers/identity.provider.ts +40 -34
  121. package/providers/fake/src/providers/inventory.provider.ts +26 -24
  122. package/providers/fake/src/providers/order-search.provider.ts +38 -30
  123. package/providers/fake/src/providers/order.provider.ts +21 -37
  124. package/providers/fake/src/providers/price.provider.ts +42 -34
  125. package/providers/fake/src/providers/product-associations.provider.ts +23 -10
  126. package/providers/fake/src/providers/product-reviews.provider.ts +71 -69
  127. package/providers/fake/src/providers/product-search.provider.ts +43 -70
  128. package/providers/fake/src/providers/product.provider.ts +34 -32
  129. package/providers/fake/src/providers/profile.provider.ts +62 -55
  130. package/providers/fake/src/providers/store.provider.ts +38 -22
  131. package/providers/fake/src/schema/capabilities.schema.ts +175 -18
  132. package/providers/fake/src/test/cart.provider.spec.ts +20 -3
  133. package/providers/fake/src/test/category.provider.spec.ts +4 -1
  134. package/providers/fake/src/test/checkout.provider.spec.ts +12 -2
  135. package/providers/fake/src/test/client-builder-product-extension.example.ts +75 -0
  136. package/providers/fake/src/test/order-search.provider.spec.ts +4 -7
  137. package/providers/fake/src/test/order.provider.spec.ts +4 -6
  138. package/providers/fake/src/test/price.provider.spec.ts +3 -1
  139. package/providers/fake/src/test/product.provider.spec.ts +8 -2
  140. package/providers/fake/src/test/profile.provider.spec.ts +4 -2
  141. package/providers/google-analytics/src/core/initialize.ts +37 -12
  142. package/providers/google-analytics/src/core/initialize.types.ts +47 -0
  143. package/providers/google-analytics/src/index.ts +1 -0
  144. package/providers/google-analytics/src/schema/capabilities.schema.ts +31 -5
  145. package/providers/medusa/src/core/initialize.ts +324 -81
  146. package/providers/medusa/src/core/initialize.types.ts +184 -0
  147. package/providers/medusa/src/factories/cart/cart.factory.ts +34 -0
  148. package/providers/medusa/src/factories/category/category.factory.ts +37 -0
  149. package/providers/medusa/src/factories/checkout/checkout.factory.ts +50 -0
  150. package/providers/medusa/src/factories/identity/identity.factory.ts +22 -0
  151. package/providers/medusa/src/factories/index.ts +12 -0
  152. package/providers/medusa/src/factories/inventory/inventory.factory.ts +25 -0
  153. package/providers/medusa/src/factories/order/order.factory.ts +22 -0
  154. package/providers/medusa/src/factories/order-search/order-search.factory.ts +27 -0
  155. package/providers/medusa/src/factories/price/price.factory.ts +26 -0
  156. package/providers/medusa/src/factories/product/product.factory.ts +22 -0
  157. package/providers/medusa/src/factories/product-associations/product-associations.factory.ts +25 -0
  158. package/providers/medusa/src/factories/product-search/product-search.factory.ts +27 -0
  159. package/providers/medusa/src/factories/profile/profile.factory.ts +22 -0
  160. package/providers/medusa/src/index.ts +2 -0
  161. package/providers/medusa/src/providers/cart.provider.ts +33 -20
  162. package/providers/medusa/src/providers/category.provider.ts +30 -12
  163. package/providers/medusa/src/providers/checkout.provider.ts +42 -17
  164. package/providers/medusa/src/providers/identity.provider.ts +1 -1
  165. package/providers/medusa/src/providers/inventory.provider.ts +21 -7
  166. package/providers/medusa/src/providers/order-search.provider.ts +16 -5
  167. package/providers/medusa/src/providers/order.provider.ts +17 -5
  168. package/providers/medusa/src/providers/price.provider.ts +26 -7
  169. package/providers/medusa/src/providers/product-associations.provider.ts +19 -8
  170. package/providers/medusa/src/providers/product-search.provider.ts +19 -31
  171. package/providers/medusa/src/providers/product.provider.ts +47 -11
  172. package/providers/medusa/src/providers/profile.provider.ts +35 -11
  173. package/providers/medusa/src/schema/capabilities.schema.ts +229 -18
  174. package/providers/medusa/src/test/cart.provider.spec.ts +18 -2
  175. package/providers/medusa/src/test/category.provider.spec.ts +4 -1
  176. package/providers/medusa/src/test/checkout.spec.ts +9 -9
  177. package/providers/medusa/src/test/inventory.provider.spec.ts +3 -1
  178. package/providers/medusa/src/test/large-cart.provider.spec.ts +8 -2
  179. package/providers/medusa/src/test/price.provider.spec.ts +8 -1
  180. package/providers/medusa/src/test/product.provider.spec.ts +3 -1
  181. package/providers/medusa/src/test/search.provider.spec.ts +16 -3
  182. package/providers/meilisearch/src/core/initialize.ts +88 -21
  183. package/providers/meilisearch/src/core/initialize.types.ts +119 -0
  184. package/providers/meilisearch/src/factories/index.ts +2 -0
  185. package/providers/meilisearch/src/factories/order-search/order-search.factory.ts +27 -0
  186. package/providers/meilisearch/src/factories/product-search/product-search.factory.ts +27 -0
  187. package/providers/meilisearch/src/index.ts +2 -0
  188. package/providers/meilisearch/src/providers/index.ts +1 -0
  189. package/providers/meilisearch/src/providers/order-search.provider.ts +21 -6
  190. package/providers/meilisearch/src/providers/product-search.provider.ts +24 -8
  191. package/providers/meilisearch/src/schema/capabilities.schema.ts +95 -8
@@ -0,0 +1,324 @@
1
+ import {
2
+ CartIdentifierSchema,
3
+ CartSchema,
4
+ CategoryPaginatedResultSchema,
5
+ CategorySchema,
6
+ CheckoutSchema,
7
+ IdentitySchema,
8
+ InventorySchema,
9
+ OrderSearchResultSchema,
10
+ OrderSchema,
11
+ PaymentMethodSchema,
12
+ ProductAssociationSchema,
13
+ ProductListItemPaginatedResultsSchema,
14
+ ProductListItemSchema,
15
+ ProductListPaginatedResultsSchema,
16
+ ProductListSchema,
17
+ ProductRatingSummarySchema,
18
+ ProductReviewPaginatedResultSchema,
19
+ ProductReviewSchema,
20
+ ProductSchema,
21
+ ProductSearchResultSchema,
22
+ ProfileSchema,
23
+ PriceSchema,
24
+ ShippingMethodSchema,
25
+ StoreSchema,
26
+ type Cache,
27
+ type RequestContext,
28
+ } from '@reactionary/core';
29
+ import type * as z from 'zod';
30
+ import {
31
+ type CommercetoolsCapabilities,
32
+ type CommercetoolsCapabilitiesSchema,
33
+ } from '../schema/capabilities.schema.js';
34
+ import type { CommercetoolsConfiguration } from '../schema/configuration.schema.js';
35
+ import type { CommercetoolsAPI } from './client.js';
36
+ import { CommercetoolsCartFactory } from '../factories/cart/cart.factory.js';
37
+ import { CommercetoolsCategoryFactory } from '../factories/category/category.factory.js';
38
+ import { CommercetoolsCheckoutFactory } from '../factories/checkout/checkout.factory.js';
39
+ import { CommercetoolsIdentityFactory } from '../factories/identity/identity.factory.js';
40
+ import { CommercetoolsInventoryFactory } from '../factories/inventory/inventory.factory.js';
41
+ import { CommercetoolsOrderFactory } from '../factories/order/order.factory.js';
42
+ import { CommercetoolsOrderSearchFactory } from '../factories/order-search/order-search.factory.js';
43
+ import { CommercetoolsPriceFactory } from '../factories/price/price.factory.js';
44
+ import { CommercetoolsProductAssociationsFactory } from '../factories/product-associations/product-associations.factory.js';
45
+ import { CommercetoolsProductListFactory } from '../factories/product-list/product-list.factory.js';
46
+ import { CommercetoolsProductFactory } from '../factories/product/product.factory.js';
47
+ import { CommercetoolsProductReviewsFactory } from '../factories/product-reviews/product-reviews.factory.js';
48
+ import { CommercetoolsProductSearchFactory } from '../factories/product-search/product-search.factory.js';
49
+ import { CommercetoolsProfileFactory } from '../factories/profile/profile.factory.js';
50
+ import { CommercetoolsStoreFactory } from '../factories/store/store.factory.js';
51
+ import { CommercetoolsCartProvider } from '../providers/cart.provider.js';
52
+ import { CommercetoolsCategoryProvider } from '../providers/category.provider.js';
53
+ import { CommercetoolsCheckoutProvider } from '../providers/checkout.provider.js';
54
+ import { CommercetoolsIdentityProvider } from '../providers/identity.provider.js';
55
+ import { CommercetoolsInventoryProvider } from '../providers/inventory.provider.js';
56
+ import { CommercetoolsOrderProvider } from '../providers/order.provider.js';
57
+ import { CommercetoolsOrderSearchProvider } from '../providers/order-search.provider.js';
58
+ import { CommercetoolsPriceProvider } from '../providers/price.provider.js';
59
+ import { CommercetoolsProductAssociationsProvider } from '../providers/product-associations.provider.js';
60
+ import { CommercetoolsProductListProvider } from '../providers/product-list.provider.js';
61
+ import { CommercetoolsProductProvider } from '../providers/product.provider.js';
62
+ import { CommercetoolsProductReviewsProvider } from '../providers/product-reviews.provider.js';
63
+ import { CommercetoolsSearchProvider } from '../providers/product-search.provider.js';
64
+ import { CommercetoolsProfileProvider } from '../providers/profile.provider.js';
65
+ import { CommercetoolsStoreProvider } from '../providers/store.provider.js';
66
+
67
+ export const capabilityKeys = [
68
+ 'product',
69
+ 'profile',
70
+ 'productSearch',
71
+ 'productAssociations',
72
+ 'productList',
73
+ 'productReviews',
74
+ 'identity',
75
+ 'cart',
76
+ 'inventory',
77
+ 'price',
78
+ 'category',
79
+ 'checkout',
80
+ 'store',
81
+ 'order',
82
+ 'orderSearch',
83
+ ] as const;
84
+
85
+ export type OverridableCapabilityKey = (typeof capabilityKeys)[number];
86
+
87
+ type ProviderArgs<TFactory> = {
88
+ cache: Cache;
89
+ context: RequestContext;
90
+ config: CommercetoolsConfiguration;
91
+ commercetoolsApi: CommercetoolsAPI;
92
+ factory: TFactory;
93
+ };
94
+
95
+ type ParsedCapabilities = z.infer<typeof CommercetoolsCapabilitiesSchema>;
96
+
97
+ export type CapabilityDescriptor = {
98
+ isEnabled: (caps: ParsedCapabilities) => boolean | undefined;
99
+ getOverride: (caps: CommercetoolsCapabilities) => {
100
+ factory?: any;
101
+ provider?: (args: any) => any;
102
+ } | undefined;
103
+ createDefaultFactory: () => any;
104
+ createDefaultProvider: (args: any) => any;
105
+ };
106
+
107
+ export const capabilityDescriptors: Record<OverridableCapabilityKey, CapabilityDescriptor> = {
108
+ product: {
109
+ isEnabled: (caps) => caps.product?.enabled,
110
+ getOverride: (caps) => caps.product,
111
+ createDefaultFactory: () => new CommercetoolsProductFactory(ProductSchema),
112
+ createDefaultProvider: (args) =>
113
+ new CommercetoolsProductProvider(
114
+ args.cache,
115
+ args.context,
116
+ args.config,
117
+ args.commercetoolsApi,
118
+ args.factory,
119
+ ),
120
+ },
121
+ profile: {
122
+ isEnabled: (caps) => caps.profile?.enabled,
123
+ getOverride: (caps) => caps.profile,
124
+ createDefaultFactory: () => new CommercetoolsProfileFactory(ProfileSchema),
125
+ createDefaultProvider: (args) =>
126
+ new CommercetoolsProfileProvider(
127
+ args.config,
128
+ args.cache,
129
+ args.context,
130
+ args.commercetoolsApi,
131
+ args.factory,
132
+ ),
133
+ },
134
+ productSearch: {
135
+ isEnabled: (caps) => caps.productSearch?.enabled,
136
+ getOverride: (caps) => caps.productSearch,
137
+ createDefaultFactory: () =>
138
+ new CommercetoolsProductSearchFactory(ProductSearchResultSchema),
139
+ createDefaultProvider: (args) =>
140
+ new CommercetoolsSearchProvider(
141
+ args.config,
142
+ args.cache,
143
+ args.context,
144
+ args.commercetoolsApi,
145
+ args.factory,
146
+ ),
147
+ },
148
+ productAssociations: {
149
+ isEnabled: (caps) => caps.productAssociations?.enabled,
150
+ getOverride: (caps) => caps.productAssociations,
151
+ createDefaultFactory: () =>
152
+ new CommercetoolsProductAssociationsFactory(ProductAssociationSchema),
153
+ createDefaultProvider: (args) =>
154
+ new CommercetoolsProductAssociationsProvider(
155
+ args.config,
156
+ args.cache,
157
+ args.context,
158
+ args.commercetoolsApi,
159
+ args.factory,
160
+ ),
161
+ },
162
+ productList: {
163
+ isEnabled: (caps) => caps.productList?.enabled,
164
+ getOverride: (caps) => caps.productList,
165
+ createDefaultFactory: () =>
166
+ new CommercetoolsProductListFactory(
167
+ ProductListSchema,
168
+ ProductListItemSchema,
169
+ ProductListPaginatedResultsSchema,
170
+ ProductListItemPaginatedResultsSchema,
171
+ ),
172
+ createDefaultProvider: (args) =>
173
+ new CommercetoolsProductListProvider(
174
+ args.config,
175
+ args.cache,
176
+ args.context,
177
+ args.commercetoolsApi,
178
+ args.factory,
179
+ ),
180
+ },
181
+ productReviews: {
182
+ isEnabled: (caps) => caps.productReviews?.enabled,
183
+ getOverride: (caps) => caps.productReviews,
184
+ createDefaultFactory: () =>
185
+ new CommercetoolsProductReviewsFactory(
186
+ ProductRatingSummarySchema,
187
+ ProductReviewSchema,
188
+ ProductReviewPaginatedResultSchema,
189
+ ),
190
+ createDefaultProvider: (args) =>
191
+ new CommercetoolsProductReviewsProvider(
192
+ args.config,
193
+ args.cache,
194
+ args.context,
195
+ args.commercetoolsApi,
196
+ args.factory,
197
+ ),
198
+ },
199
+ identity: {
200
+ isEnabled: (caps) => caps.identity?.enabled,
201
+ getOverride: (caps) => caps.identity,
202
+ createDefaultFactory: () => new CommercetoolsIdentityFactory(IdentitySchema),
203
+ createDefaultProvider: (args) =>
204
+ new CommercetoolsIdentityProvider(
205
+ args.config,
206
+ args.cache,
207
+ args.context,
208
+ args.commercetoolsApi,
209
+ args.factory,
210
+ ),
211
+ },
212
+ cart: {
213
+ isEnabled: (caps) => caps.cart?.enabled,
214
+ getOverride: (caps) => caps.cart,
215
+ createDefaultFactory: () =>
216
+ new CommercetoolsCartFactory(CartSchema, CartIdentifierSchema),
217
+ createDefaultProvider: (args) =>
218
+ new CommercetoolsCartProvider(
219
+ args.config,
220
+ args.cache,
221
+ args.context,
222
+ args.commercetoolsApi,
223
+ args.factory,
224
+ ),
225
+ },
226
+ inventory: {
227
+ isEnabled: (caps) => caps.inventory?.enabled,
228
+ getOverride: (caps) => caps.inventory,
229
+ createDefaultFactory: () => new CommercetoolsInventoryFactory(InventorySchema),
230
+ createDefaultProvider: (args) =>
231
+ new CommercetoolsInventoryProvider(
232
+ args.config,
233
+ args.cache,
234
+ args.context,
235
+ args.commercetoolsApi,
236
+ args.factory,
237
+ ),
238
+ },
239
+ price: {
240
+ isEnabled: (caps) => caps.price?.enabled,
241
+ getOverride: (caps) => caps.price,
242
+ createDefaultFactory: () => new CommercetoolsPriceFactory(PriceSchema),
243
+ createDefaultProvider: (args) =>
244
+ new CommercetoolsPriceProvider(
245
+ args.config,
246
+ args.cache,
247
+ args.context,
248
+ args.commercetoolsApi,
249
+ args.factory,
250
+ ),
251
+ },
252
+ category: {
253
+ isEnabled: (caps) => caps.category?.enabled,
254
+ getOverride: (caps) => caps.category,
255
+ createDefaultFactory: () =>
256
+ new CommercetoolsCategoryFactory(CategorySchema, CategoryPaginatedResultSchema),
257
+ createDefaultProvider: (args) =>
258
+ new CommercetoolsCategoryProvider(
259
+ args.config,
260
+ args.cache,
261
+ args.context,
262
+ args.commercetoolsApi,
263
+ args.factory,
264
+ ),
265
+ },
266
+ checkout: {
267
+ isEnabled: (caps) => caps.checkout?.enabled,
268
+ getOverride: (caps) => caps.checkout,
269
+ createDefaultFactory: () =>
270
+ new CommercetoolsCheckoutFactory(
271
+ CheckoutSchema,
272
+ ShippingMethodSchema,
273
+ PaymentMethodSchema,
274
+ ),
275
+ createDefaultProvider: (args) =>
276
+ new CommercetoolsCheckoutProvider(
277
+ args.config,
278
+ args.cache,
279
+ args.context,
280
+ args.commercetoolsApi,
281
+ args.factory,
282
+ ),
283
+ },
284
+ store: {
285
+ isEnabled: (caps) => caps.store?.enabled,
286
+ getOverride: (caps) => caps.store,
287
+ createDefaultFactory: () => new CommercetoolsStoreFactory(StoreSchema),
288
+ createDefaultProvider: (args) =>
289
+ new CommercetoolsStoreProvider(
290
+ args.config,
291
+ args.cache,
292
+ args.context,
293
+ args.commercetoolsApi,
294
+ args.factory,
295
+ ),
296
+ },
297
+ order: {
298
+ isEnabled: (caps) => caps.order?.enabled,
299
+ getOverride: (caps) => caps.order,
300
+ createDefaultFactory: () => new CommercetoolsOrderFactory(OrderSchema),
301
+ createDefaultProvider: (args) =>
302
+ new CommercetoolsOrderProvider(
303
+ args.config,
304
+ args.cache,
305
+ args.context,
306
+ args.commercetoolsApi,
307
+ args.factory,
308
+ ),
309
+ },
310
+ orderSearch: {
311
+ isEnabled: (caps) => caps.orderSearch?.enabled,
312
+ getOverride: (caps) => caps.orderSearch,
313
+ createDefaultFactory: () =>
314
+ new CommercetoolsOrderSearchFactory(OrderSearchResultSchema),
315
+ createDefaultProvider: (args) =>
316
+ new CommercetoolsOrderSearchProvider(
317
+ args.config,
318
+ args.cache,
319
+ args.context,
320
+ args.commercetoolsApi,
321
+ args.factory,
322
+ ),
323
+ },
324
+ };
@@ -1,171 +1,55 @@
1
- import type { Cache, RequestContext, Client, ClientFromCapabilities } from '@reactionary/core';
1
+ import type { Cache, RequestContext } from '@reactionary/core';
2
2
  import {
3
3
  CommercetoolsCapabilitiesSchema,
4
4
  type CommercetoolsCapabilities,
5
5
  } from '../schema/capabilities.schema.js';
6
- import { CommercetoolsSearchProvider } from '../providers/product-search.provider.js';
7
- import { CommercetoolsProductProvider } from '../providers/product.provider.js';
8
6
  import {
9
7
  CommercetoolsConfigurationSchema,
10
8
  type CommercetoolsConfiguration,
11
9
  } from '../schema/configuration.schema.js';
12
- import { CommercetoolsIdentityProvider } from '../providers/identity.provider.js';
13
- import { CommercetoolsCartProvider } from '../providers/cart.provider.js';
14
- import { CommercetoolsInventoryProvider } from '../providers/inventory.provider.js';
15
- import { CommercetoolsPriceProvider } from '../providers/price.provider.js';
16
- import { CommercetoolsCategoryProvider } from '../providers/category.provider.js';
17
- import {
18
- CommercetoolsCheckoutProvider,
19
- CommercetoolsOrderProvider,
20
- CommercetoolsOrderSearchProvider,
21
- CommercetoolsProfileProvider,
22
- CommercetoolsStoreProvider,
23
- CommercetoolsProductReviewsProvider,
24
- CommercetoolsProductAssociationsProvider,
25
- CommercetoolsProductListProvider,
26
- } from '../providers/index.js';
27
10
  import { CommercetoolsAPI } from './client.js';
11
+ import {
12
+ capabilityDescriptors,
13
+ capabilityKeys,
14
+ } from './capability-descriptors.js';
15
+ import {
16
+ type CommercetoolsClientFromCapabilities,
17
+ resolveCapabilityProvider,
18
+ } from './initialize.types.js';
28
19
 
29
20
  export function withCommercetoolsCapabilities<
30
- T extends CommercetoolsCapabilities
21
+ T extends CommercetoolsCapabilities,
31
22
  >(configuration: CommercetoolsConfiguration, capabilities: T) {
32
- return (cache: Cache, context: RequestContext): ClientFromCapabilities<T> => {
23
+ return (
24
+ cache: Cache,
25
+ context: RequestContext,
26
+ ): CommercetoolsClientFromCapabilities<T> => {
33
27
  const client: any = {};
34
28
  const config = CommercetoolsConfigurationSchema.parse(configuration);
35
29
  const caps = CommercetoolsCapabilitiesSchema.parse(capabilities);
36
30
  const commercetoolsApi = new CommercetoolsAPI(config, context);
37
31
 
38
- if (caps.product) {
39
- client.product = new CommercetoolsProductProvider(
40
- config,
41
- cache,
42
- context,
43
- commercetoolsApi
44
- );
45
- }
46
-
47
- if (caps.profile) {
48
- client.profile = new CommercetoolsProfileProvider(
49
- config,
50
- cache,
51
- context,
52
- commercetoolsApi
53
- );
54
- }
55
-
56
- if (caps.productSearch) {
57
- client.productSearch = new CommercetoolsSearchProvider(
58
- config,
59
- cache,
60
- context,
61
- commercetoolsApi
62
- );
63
- }
64
-
65
- if (caps.productAssociations) {
66
- client.productAssociations = new CommercetoolsProductAssociationsProvider(
67
- config,
68
- cache,
69
- context,
70
- commercetoolsApi
71
- );
72
- }
73
-
74
- if (caps.productList) {
75
- client.productList = new CommercetoolsProductListProvider(
76
- config,
77
- cache,
78
- context,
79
- commercetoolsApi
80
- );
81
- }
82
-
83
- if (caps.productReviews) {
84
- client.productReviews = new CommercetoolsProductReviewsProvider(
85
- config,
86
- cache,
87
- context,
88
- commercetoolsApi
89
- );
90
- }
91
-
92
- if (caps.identity) {
93
- client.identity = new CommercetoolsIdentityProvider(
94
- config,
95
- cache,
96
- context,
97
- commercetoolsApi
98
- );
99
- }
100
-
101
- if (caps.cart) {
102
- client.cart = new CommercetoolsCartProvider(
103
- config,
104
- cache,
105
- context,
106
- commercetoolsApi
107
- );
108
- }
109
-
110
- if (caps.inventory) {
111
- client.inventory = new CommercetoolsInventoryProvider(
112
- config,
113
- cache,
114
- context,
115
- commercetoolsApi
116
- );
117
- }
118
-
119
- if (caps.price) {
120
- client.price = new CommercetoolsPriceProvider(
121
- config,
122
- cache,
123
- context,
124
- commercetoolsApi
125
- );
126
- }
127
-
128
- if (caps.category) {
129
- client.category = new CommercetoolsCategoryProvider(
130
- config,
131
- cache,
132
- context,
133
- commercetoolsApi
134
- );
135
- }
136
-
137
- if (caps.checkout) {
138
- client.checkout = new CommercetoolsCheckoutProvider(
139
- config,
140
- cache,
141
- context,
142
- commercetoolsApi
143
- );
144
- }
145
-
146
- if (caps.store) {
147
- client.store = new CommercetoolsStoreProvider(
148
- config,
149
- cache,
150
- context,
151
- commercetoolsApi
152
- );
153
- }
154
-
155
- if (caps.order) {
156
- client.store = new CommercetoolsOrderProvider(
157
- config,
158
- cache,
159
- context,
160
- commercetoolsApi
161
- );
162
- }
163
- if (caps.orderSearch) {
164
- client.orderSearch = new CommercetoolsOrderSearchProvider(
165
- config,
166
- cache,
167
- context,
168
- commercetoolsApi
32
+ const buildProviderArgs = <TFactory,>(factory: TFactory) => ({
33
+ cache,
34
+ context,
35
+ config,
36
+ commercetoolsApi,
37
+ factory,
38
+ });
39
+
40
+ for (const key of capabilityKeys) {
41
+ const descriptor = capabilityDescriptors[key];
42
+ if (!descriptor.isEnabled(caps)) {
43
+ continue;
44
+ }
45
+
46
+ client[key] = resolveCapabilityProvider(
47
+ descriptor.getOverride(capabilities),
48
+ {
49
+ factory: descriptor.createDefaultFactory(),
50
+ provider: descriptor.createDefaultProvider,
51
+ },
52
+ buildProviderArgs,
169
53
  );
170
54
  }
171
55