@reactionary/source 0.6.1 → 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 +14 -11
  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
@@ -1,10 +1,84 @@
1
- import { CapabilitiesSchema } from "@reactionary/core";
2
- import type * as z from 'zod';
1
+ import type {
2
+ AnalyticsProvider,
3
+ Cache,
4
+ ProductRecommendationsProvider,
5
+ ProductSearchFactory,
6
+ ProductSearchFactoryWithOutput,
7
+ ProductSearchProvider,
8
+ RequestContext,
9
+ } from '@reactionary/core';
10
+ import { CapabilitiesSchema } from '@reactionary/core';
11
+ import type { AlgoliaConfiguration } from './configuration.schema.js';
12
+ import * as z from 'zod';
13
+
14
+ const ProductSearchCapabilitySchema = z.looseObject({
15
+ enabled: z.boolean(),
16
+ factory: z.unknown().optional(),
17
+ provider: z.unknown().optional(),
18
+ });
19
+
20
+ const ProviderCapabilitySchema = z.looseObject({
21
+ enabled: z.boolean(),
22
+ provider: z.unknown().optional(),
23
+ });
3
24
 
4
25
  export const AlgoliaCapabilitiesSchema = CapabilitiesSchema.pick({
5
- productSearch: true,
6
- analytics: true,
7
- productRecommendations: true
8
- }).partial();
26
+ productSearch: true,
27
+ analytics: true,
28
+ productRecommendations: true,
29
+ })
30
+ .extend({
31
+ productSearch: ProductSearchCapabilitySchema.optional(),
32
+ analytics: ProviderCapabilitySchema.optional(),
33
+ productRecommendations: ProviderCapabilitySchema.optional(),
34
+ })
35
+ .partial();
36
+
37
+ export interface AlgoliaProviderFactoryArgs {
38
+ cache: Cache;
39
+ context: RequestContext;
40
+ config: AlgoliaConfiguration;
41
+ }
42
+
43
+ export interface AlgoliaProductSearchProviderFactoryArgs<
44
+ TFactory extends ProductSearchFactory = ProductSearchFactory,
45
+ > extends AlgoliaProviderFactoryArgs {
46
+ factory: ProductSearchFactoryWithOutput<TFactory>;
47
+ }
48
+
49
+ export interface AlgoliaProductSearchCapabilityConfig<
50
+ TFactory extends ProductSearchFactory = ProductSearchFactory,
51
+ TProvider extends ProductSearchProvider = ProductSearchProvider,
52
+ > {
53
+ enabled: boolean;
54
+ factory?: ProductSearchFactoryWithOutput<TFactory>;
55
+ provider?: (args: AlgoliaProductSearchProviderFactoryArgs<TFactory>) => TProvider;
56
+ }
57
+
58
+ export interface AlgoliaAnalyticsCapabilityConfig<
59
+ TProvider extends AnalyticsProvider = AnalyticsProvider,
60
+ > {
61
+ enabled: boolean;
62
+ provider?: (args: AlgoliaProviderFactoryArgs) => TProvider;
63
+ }
64
+
65
+ export interface AlgoliaProductRecommendationsCapabilityConfig<
66
+ TProvider extends ProductRecommendationsProvider = ProductRecommendationsProvider,
67
+ > {
68
+ enabled: boolean;
69
+ provider?: (args: AlgoliaProviderFactoryArgs) => TProvider;
70
+ }
9
71
 
10
- export type AlgoliaCapabilities = z.infer<typeof AlgoliaCapabilitiesSchema>;
72
+ export type AlgoliaCapabilities<
73
+ TProductSearchFactory extends ProductSearchFactory = ProductSearchFactory,
74
+ TProductSearchProvider extends ProductSearchProvider = ProductSearchProvider,
75
+ TAnalyticsProvider extends AnalyticsProvider = AnalyticsProvider,
76
+ TProductRecommendationsProvider extends ProductRecommendationsProvider = ProductRecommendationsProvider,
77
+ > = {
78
+ productSearch?: AlgoliaProductSearchCapabilityConfig<
79
+ TProductSearchFactory,
80
+ TProductSearchProvider
81
+ >;
82
+ analytics?: AlgoliaAnalyticsCapabilityConfig<TAnalyticsProvider>;
83
+ productRecommendations?: AlgoliaProductRecommendationsCapabilityConfig<TProductRecommendationsProvider>;
84
+ };
@@ -3,6 +3,8 @@ import { AlgoliaAnalyticsProvider } from '../providers/analytics.provider.js';
3
3
  import { createInitialRequestContext, NoOpCache } from '@reactionary/core';
4
4
  import type { AlgoliaConfiguration } from '../schema/configuration.schema.js';
5
5
  import { AlgoliaProductSearchProvider } from '../providers/product-search.provider.js';
6
+ import { AlgoliaProductSearchFactory } from '../factories/product-search/product-search.factory.js';
7
+ import { AlgoliaProductSearchResultSchema } from '../schema/search.schema.js';
6
8
 
7
9
  describe('Analytics event tracking', async () => {
8
10
  const config = {
@@ -13,7 +15,13 @@ describe('Analytics event tracking', async () => {
13
15
  const cache = new NoOpCache();
14
16
  const context = createInitialRequestContext();
15
17
 
16
- const search = new AlgoliaProductSearchProvider(cache, context, config);
18
+ const searchFactory = new AlgoliaProductSearchFactory(AlgoliaProductSearchResultSchema);
19
+ const search = new AlgoliaProductSearchProvider<typeof searchFactory>(
20
+ cache,
21
+ context,
22
+ config,
23
+ searchFactory,
24
+ );
17
25
  const analytics = new AlgoliaAnalyticsProvider(cache, context, config);
18
26
  const searchResult = await search.queryByTerm({
19
27
  search: {
@@ -0,0 +1,85 @@
1
+ import {
2
+ ClientBuilder,
3
+ NoOpCache,
4
+ createInitialRequestContext,
5
+ type ProductSearchQueryByTerm,
6
+ type RequestContext,
7
+ } from '@reactionary/core';
8
+ import * as z from 'zod';
9
+ import type { AlgoliaConfiguration } from '../schema/configuration.schema.js';
10
+ import { withAlgoliaCapabilities } from '../core/initialize.js';
11
+ import { AlgoliaProductSearchFactory } from '../factories/product-search/product-search.factory.js';
12
+ import { AlgoliaProductSearchResultSchema } from '../schema/search.schema.js';
13
+
14
+ const assertType = <T>(_value: T) => {
15
+ void _value;
16
+ };
17
+ type IsAny<T> = 0 extends (1 & T) ? true : false;
18
+ const assertNotAny = <T>(_value: IsAny<T> extends true ? never : T) => {
19
+ void _value;
20
+ };
21
+
22
+ const ExtendedProductSearchResultSchema = AlgoliaProductSearchResultSchema.safeExtend(
23
+ {
24
+ extendedMeta: z.string(),
25
+ },
26
+ );
27
+
28
+ class ExtendedAlgoliaProductSearchFactory extends AlgoliaProductSearchFactory<
29
+ typeof ExtendedProductSearchResultSchema
30
+ > {
31
+ constructor() {
32
+ super(ExtendedProductSearchResultSchema);
33
+ }
34
+
35
+ public override parseSearchResult(
36
+ context: RequestContext,
37
+ data: unknown,
38
+ query: ProductSearchQueryByTerm,
39
+ ) {
40
+ const base = super.parseSearchResult(context, data, query);
41
+ return this.productSearchResultSchema.parse({
42
+ ...base,
43
+ extendedMeta: 'from-factory',
44
+ });
45
+ }
46
+ }
47
+
48
+ const config = {
49
+ appId: 'ALGOLIA_APP_ID',
50
+ apiKey: 'ALGOLIA_API_KEY',
51
+ indexName: 'ALGOLIA_INDEX',
52
+ } satisfies AlgoliaConfiguration;
53
+
54
+ const client = new ClientBuilder(createInitialRequestContext())
55
+ .withCache(new NoOpCache())
56
+ .withCapability(
57
+ withAlgoliaCapabilities(config, {
58
+ productSearch: {
59
+ enabled: true,
60
+ factory: new ExtendedAlgoliaProductSearchFactory(),
61
+ },
62
+ }),
63
+ )
64
+ .build();
65
+
66
+ client.productSearch
67
+ .queryByTerm({
68
+ search: {
69
+ term: 'test',
70
+ facets: [],
71
+ filters: [],
72
+ paginationOptions: {
73
+ pageNumber: 1,
74
+ pageSize: 10,
75
+ },
76
+ },
77
+ })
78
+ .then((result) => {
79
+ assertNotAny(result);
80
+ if (result.success) {
81
+ assertNotAny(result.value);
82
+ assertNotAny(result.value.extendedMeta);
83
+ assertType<string>(result.value.extendedMeta);
84
+ }
85
+ });
@@ -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
+ };