@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.
- package/README.md +28 -14
- package/core/src/client/client-builder.ts +54 -6
- package/core/src/factories/cart.factory.ts +40 -0
- package/core/src/factories/category.factory.ts +40 -0
- package/core/src/factories/checkout.factory.ts +59 -0
- package/core/src/factories/identity.factory.ts +26 -0
- package/core/src/factories/index.ts +15 -0
- package/core/src/factories/inventory.factory.ts +26 -0
- package/core/src/factories/order-search.factory.ts +33 -0
- package/core/src/factories/order.factory.ts +21 -0
- package/core/src/factories/price.factory.ts +29 -0
- package/core/src/factories/product-associations.factory.ts +30 -0
- package/core/src/factories/product-list.factory.ts +82 -0
- package/core/src/factories/product-reviews.factory.ts +58 -0
- package/core/src/factories/product-search.factory.ts +31 -0
- package/core/src/factories/product.factory.ts +21 -0
- package/core/src/factories/profile.factory.ts +23 -0
- package/core/src/factories/store.factory.ts +21 -0
- package/core/src/index.ts +3 -1
- package/core/src/providers/cart.provider.ts +12 -10
- package/core/src/providers/category.provider.ts +9 -7
- package/core/src/providers/checkout.provider.ts +14 -10
- package/core/src/providers/identity.provider.ts +7 -7
- package/core/src/providers/inventory.provider.ts +4 -4
- package/core/src/providers/order-search.provider.ts +4 -2
- package/core/src/providers/order.provider.ts +4 -4
- package/core/src/providers/price.provider.ts +5 -5
- package/core/src/providers/product-associations.provider.ts +6 -4
- package/core/src/providers/product-list.provider.ts +13 -8
- package/core/src/providers/product-reviews.provider.ts +8 -4
- package/core/src/providers/product-search.provider.ts +15 -28
- package/core/src/providers/product.provider.ts +6 -6
- package/core/src/providers/profile.provider.ts +8 -8
- package/core/src/providers/store.provider.ts +2 -2
- package/core/src/test/client-builder.spec.ts +81 -0
- package/examples/node/package.json +7 -7
- package/examples/node/src/basic/basic-node-provider-model-extension.spec.ts +10 -4
- package/examples/node/src/basic/basic-node-provider-query-extension.spec.ts +8 -2
- package/examples/node/src/basic/basic-node-setup.spec.ts +5 -1
- package/examples/node/src/basic/client-creation.spec.ts +3 -3
- package/examples/node/src/utils.ts +41 -41
- package/examples/node/tsconfig.lib.json +2 -1
- package/package.json +1 -1
- package/providers/algolia/src/core/initialize.ts +76 -21
- package/providers/algolia/src/core/initialize.types.ts +107 -0
- package/providers/algolia/src/factories/index.ts +1 -0
- package/providers/algolia/src/factories/product-search/product-search.factory.ts +182 -0
- package/providers/algolia/src/index.ts +2 -2
- package/providers/algolia/src/providers/analytics.provider.ts +4 -4
- package/providers/algolia/src/providers/product-search.provider.ts +67 -184
- package/providers/algolia/src/schema/capabilities.schema.ts +81 -7
- package/providers/algolia/src/test/analytics.spec.ts +9 -1
- package/providers/algolia/src/test/client-builder-product-search-extension.example.ts +85 -0
- package/providers/commercetools/src/core/capability-descriptors.ts +324 -0
- package/providers/commercetools/src/core/initialize.ts +35 -151
- package/providers/commercetools/src/core/initialize.types.ts +174 -0
- package/providers/commercetools/src/factories/cart/cart.factory.ts +142 -0
- package/providers/commercetools/src/factories/category/category.factory.ts +77 -0
- package/providers/commercetools/src/factories/checkout/checkout-initializer-overrides.example.ts +94 -0
- package/providers/commercetools/src/factories/checkout/checkout.factory.ts +338 -0
- package/providers/commercetools/src/factories/identity/identity.factory.ts +26 -0
- package/providers/commercetools/src/factories/inventory/inventory.factory.ts +49 -0
- package/providers/commercetools/src/factories/order/order.factory.ts +149 -0
- package/providers/commercetools/src/factories/order-search/order-search.factory.ts +108 -0
- package/providers/commercetools/src/factories/price/price.factory.ts +76 -0
- package/providers/commercetools/src/factories/product/product-factory-baseline.example.ts +14 -0
- package/providers/commercetools/src/factories/product/product-factory-schema-and-parse-extension.example.ts +35 -0
- package/providers/commercetools/src/factories/product/product-factory-schema-extension.example.ts +23 -0
- package/providers/commercetools/src/factories/product/product-initializer-factory-extension.example.ts +41 -0
- package/providers/commercetools/src/factories/product/product-provider-custom-method-only.example.ts +47 -0
- package/providers/commercetools/src/factories/product/product-provider-schema-signature-extension.example.ts +61 -0
- package/providers/commercetools/src/factories/product/product.factory.ts +220 -0
- package/providers/commercetools/src/factories/product/utils.example.ts +9 -0
- package/providers/commercetools/src/factories/product-associations/product-associations.factory.ts +103 -0
- package/providers/commercetools/src/factories/product-list/product-list.factory.ts +122 -0
- package/providers/commercetools/src/factories/product-reviews/product-reviews.factory.ts +81 -0
- package/providers/commercetools/src/factories/product-search/product-search.factory.ts +182 -0
- package/providers/commercetools/src/factories/profile/profile.factory.ts +94 -0
- package/providers/commercetools/src/factories/store/store.factory.ts +49 -0
- package/providers/commercetools/src/index.ts +15 -0
- package/providers/commercetools/src/providers/cart.provider.ts +67 -193
- package/providers/commercetools/src/providers/category.provider.ts +24 -64
- package/providers/commercetools/src/providers/checkout.provider.ts +50 -322
- package/providers/commercetools/src/providers/identity.provider.ts +35 -15
- package/providers/commercetools/src/providers/inventory.provider.ts +13 -31
- package/providers/commercetools/src/providers/order-search.provider.ts +16 -110
- package/providers/commercetools/src/providers/order.provider.ts +13 -144
- package/providers/commercetools/src/providers/price.provider.ts +37 -51
- package/providers/commercetools/src/providers/product-associations.provider.ts +39 -104
- package/providers/commercetools/src/providers/product-list.provider.ts +38 -23
- package/providers/commercetools/src/providers/product-reviews.provider.ts +34 -14
- package/providers/commercetools/src/providers/product-search.provider.ts +17 -170
- package/providers/commercetools/src/providers/product.provider.ts +20 -199
- package/providers/commercetools/src/providers/profile.provider.ts +27 -73
- package/providers/commercetools/src/providers/store.provider.ts +13 -31
- package/providers/commercetools/src/schema/capabilities.schema.ts +258 -20
- package/providers/commercetools/src/test/caching.spec.ts +18 -2
- package/providers/commercetools/src/test/client-builder-merge-extensions.example.ts +125 -0
- package/providers/fake/src/core/initialize.ts +213 -44
- package/providers/fake/src/core/initialize.types.ts +164 -0
- package/providers/fake/src/factories/cart/cart.factory.ts +34 -0
- package/providers/fake/src/factories/category/category.factory.ts +40 -0
- package/providers/fake/src/factories/checkout/checkout.factory.ts +53 -0
- package/providers/fake/src/factories/identity/identity.factory.ts +25 -0
- package/providers/fake/src/factories/index.ts +14 -0
- package/providers/fake/src/factories/inventory/inventory.factory.ts +25 -0
- package/providers/fake/src/factories/order/order.factory.ts +22 -0
- package/providers/fake/src/factories/order-search/order-search.factory.ts +27 -0
- package/providers/fake/src/factories/price/price.factory.ts +26 -0
- package/providers/fake/src/factories/product/product.factory.ts +22 -0
- package/providers/fake/src/factories/product-associations/product-associations.factory.ts +25 -0
- package/providers/fake/src/factories/product-reviews/product-reviews.factory.ts +53 -0
- package/providers/fake/src/factories/product-search/product-search.factory.ts +27 -0
- package/providers/fake/src/factories/profile/profile.factory.ts +22 -0
- package/providers/fake/src/factories/store/store.factory.ts +22 -0
- package/providers/fake/src/index.ts +2 -0
- package/providers/fake/src/providers/cart.provider.ts +23 -14
- package/providers/fake/src/providers/category.provider.ts +120 -105
- package/providers/fake/src/providers/checkout.provider.ts +39 -20
- package/providers/fake/src/providers/identity.provider.ts +40 -34
- package/providers/fake/src/providers/inventory.provider.ts +26 -24
- package/providers/fake/src/providers/order-search.provider.ts +38 -30
- package/providers/fake/src/providers/order.provider.ts +21 -37
- package/providers/fake/src/providers/price.provider.ts +42 -34
- package/providers/fake/src/providers/product-associations.provider.ts +23 -10
- package/providers/fake/src/providers/product-reviews.provider.ts +71 -69
- package/providers/fake/src/providers/product-search.provider.ts +43 -70
- package/providers/fake/src/providers/product.provider.ts +34 -32
- package/providers/fake/src/providers/profile.provider.ts +62 -55
- package/providers/fake/src/providers/store.provider.ts +38 -22
- package/providers/fake/src/schema/capabilities.schema.ts +175 -18
- package/providers/fake/src/test/cart.provider.spec.ts +20 -3
- package/providers/fake/src/test/category.provider.spec.ts +4 -1
- package/providers/fake/src/test/checkout.provider.spec.ts +12 -2
- package/providers/fake/src/test/client-builder-product-extension.example.ts +75 -0
- package/providers/fake/src/test/order-search.provider.spec.ts +4 -7
- package/providers/fake/src/test/order.provider.spec.ts +4 -6
- package/providers/fake/src/test/price.provider.spec.ts +3 -1
- package/providers/fake/src/test/product.provider.spec.ts +8 -2
- package/providers/fake/src/test/profile.provider.spec.ts +4 -2
- package/providers/google-analytics/src/core/initialize.ts +37 -12
- package/providers/google-analytics/src/core/initialize.types.ts +47 -0
- package/providers/google-analytics/src/index.ts +1 -0
- package/providers/google-analytics/src/schema/capabilities.schema.ts +31 -5
- package/providers/medusa/src/core/initialize.ts +324 -81
- package/providers/medusa/src/core/initialize.types.ts +184 -0
- package/providers/medusa/src/factories/cart/cart.factory.ts +34 -0
- package/providers/medusa/src/factories/category/category.factory.ts +37 -0
- package/providers/medusa/src/factories/checkout/checkout.factory.ts +50 -0
- package/providers/medusa/src/factories/identity/identity.factory.ts +22 -0
- package/providers/medusa/src/factories/index.ts +12 -0
- package/providers/medusa/src/factories/inventory/inventory.factory.ts +25 -0
- package/providers/medusa/src/factories/order/order.factory.ts +22 -0
- package/providers/medusa/src/factories/order-search/order-search.factory.ts +27 -0
- package/providers/medusa/src/factories/price/price.factory.ts +26 -0
- package/providers/medusa/src/factories/product/product.factory.ts +22 -0
- package/providers/medusa/src/factories/product-associations/product-associations.factory.ts +25 -0
- package/providers/medusa/src/factories/product-search/product-search.factory.ts +27 -0
- package/providers/medusa/src/factories/profile/profile.factory.ts +22 -0
- package/providers/medusa/src/index.ts +2 -0
- package/providers/medusa/src/providers/cart.provider.ts +33 -20
- package/providers/medusa/src/providers/category.provider.ts +30 -12
- package/providers/medusa/src/providers/checkout.provider.ts +42 -17
- package/providers/medusa/src/providers/identity.provider.ts +1 -1
- package/providers/medusa/src/providers/inventory.provider.ts +21 -7
- package/providers/medusa/src/providers/order-search.provider.ts +16 -5
- package/providers/medusa/src/providers/order.provider.ts +17 -5
- package/providers/medusa/src/providers/price.provider.ts +26 -7
- package/providers/medusa/src/providers/product-associations.provider.ts +19 -8
- package/providers/medusa/src/providers/product-search.provider.ts +19 -31
- package/providers/medusa/src/providers/product.provider.ts +47 -11
- package/providers/medusa/src/providers/profile.provider.ts +35 -11
- package/providers/medusa/src/schema/capabilities.schema.ts +229 -18
- package/providers/medusa/src/test/cart.provider.spec.ts +18 -2
- package/providers/medusa/src/test/category.provider.spec.ts +4 -1
- package/providers/medusa/src/test/checkout.spec.ts +9 -9
- package/providers/medusa/src/test/inventory.provider.spec.ts +3 -1
- package/providers/medusa/src/test/large-cart.provider.spec.ts +8 -2
- package/providers/medusa/src/test/price.provider.spec.ts +8 -1
- package/providers/medusa/src/test/product.provider.spec.ts +3 -1
- package/providers/medusa/src/test/search.provider.spec.ts +16 -3
- package/providers/meilisearch/src/core/initialize.ts +88 -21
- package/providers/meilisearch/src/core/initialize.types.ts +119 -0
- package/providers/meilisearch/src/factories/index.ts +2 -0
- package/providers/meilisearch/src/factories/order-search/order-search.factory.ts +27 -0
- package/providers/meilisearch/src/factories/product-search/product-search.factory.ts +27 -0
- package/providers/meilisearch/src/index.ts +2 -0
- package/providers/meilisearch/src/providers/index.ts +1 -0
- package/providers/meilisearch/src/providers/order-search.provider.ts +21 -6
- package/providers/meilisearch/src/providers/product-search.provider.ts +24 -8
- package/providers/meilisearch/src/schema/capabilities.schema.ts +95 -8
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
CartFactory,
|
|
3
|
+
CategoryFactory,
|
|
4
|
+
CheckoutFactory,
|
|
5
|
+
ClientFromCapabilities,
|
|
6
|
+
IdentityFactory,
|
|
7
|
+
InventoryFactory,
|
|
8
|
+
OrderFactory,
|
|
9
|
+
OrderSearchFactory,
|
|
10
|
+
PriceFactory,
|
|
11
|
+
ProductAssociationsFactory,
|
|
12
|
+
ProductFactory,
|
|
13
|
+
ProductListFactory,
|
|
14
|
+
ProductReviewsFactory,
|
|
15
|
+
ProductSearchFactory,
|
|
16
|
+
ProfileFactory,
|
|
17
|
+
StoreFactory,
|
|
18
|
+
} from '@reactionary/core';
|
|
19
|
+
import type { CommercetoolsCapabilities } from '../schema/capabilities.schema.js';
|
|
20
|
+
import type { OverridableCapabilityKey } from './capability-descriptors.js';
|
|
21
|
+
import type { CommercetoolsCartFactory } from '../factories/cart/cart.factory.js';
|
|
22
|
+
import type { CommercetoolsCategoryFactory } from '../factories/category/category.factory.js';
|
|
23
|
+
import type { CommercetoolsCheckoutFactory } from '../factories/checkout/checkout.factory.js';
|
|
24
|
+
import type { CommercetoolsIdentityFactory } from '../factories/identity/identity.factory.js';
|
|
25
|
+
import type { CommercetoolsInventoryFactory } from '../factories/inventory/inventory.factory.js';
|
|
26
|
+
import type { CommercetoolsOrderFactory } from '../factories/order/order.factory.js';
|
|
27
|
+
import type { CommercetoolsOrderSearchFactory } from '../factories/order-search/order-search.factory.js';
|
|
28
|
+
import type { CommercetoolsPriceFactory } from '../factories/price/price.factory.js';
|
|
29
|
+
import type { CommercetoolsProductAssociationsFactory } from '../factories/product-associations/product-associations.factory.js';
|
|
30
|
+
import type { CommercetoolsProductFactory } from '../factories/product/product.factory.js';
|
|
31
|
+
import type { CommercetoolsProductListFactory } from '../factories/product-list/product-list.factory.js';
|
|
32
|
+
import type { CommercetoolsProductReviewsFactory } from '../factories/product-reviews/product-reviews.factory.js';
|
|
33
|
+
import type { CommercetoolsProductSearchFactory } from '../factories/product-search/product-search.factory.js';
|
|
34
|
+
import type { CommercetoolsProfileFactory } from '../factories/profile/profile.factory.js';
|
|
35
|
+
import type { CommercetoolsStoreFactory } from '../factories/store/store.factory.js';
|
|
36
|
+
import type { CommercetoolsCartProvider } from '../providers/cart.provider.js';
|
|
37
|
+
import type { CommercetoolsCategoryProvider } from '../providers/category.provider.js';
|
|
38
|
+
import type { CommercetoolsCheckoutProvider } from '../providers/checkout.provider.js';
|
|
39
|
+
import type { CommercetoolsIdentityProvider } from '../providers/identity.provider.js';
|
|
40
|
+
import type { CommercetoolsInventoryProvider } from '../providers/inventory.provider.js';
|
|
41
|
+
import type { CommercetoolsOrderSearchProvider } from '../providers/order-search.provider.js';
|
|
42
|
+
import type { CommercetoolsOrderProvider } from '../providers/order.provider.js';
|
|
43
|
+
import type { CommercetoolsPriceProvider } from '../providers/price.provider.js';
|
|
44
|
+
import type { CommercetoolsProductAssociationsProvider } from '../providers/product-associations.provider.js';
|
|
45
|
+
import type { CommercetoolsProductListProvider } from '../providers/product-list.provider.js';
|
|
46
|
+
import type { CommercetoolsProductProvider } from '../providers/product.provider.js';
|
|
47
|
+
import type { CommercetoolsProductReviewsProvider } from '../providers/product-reviews.provider.js';
|
|
48
|
+
import type { CommercetoolsSearchProvider } from '../providers/product-search.provider.js';
|
|
49
|
+
import type { CommercetoolsProfileProvider } from '../providers/profile.provider.js';
|
|
50
|
+
import type { CommercetoolsStoreProvider } from '../providers/store.provider.js';
|
|
51
|
+
|
|
52
|
+
type EnabledCapability<TCapability> =
|
|
53
|
+
TCapability extends { enabled: true } ? true : false;
|
|
54
|
+
|
|
55
|
+
type NormalizeConfiguredCapabilities<T extends CommercetoolsCapabilities> =
|
|
56
|
+
Omit<T, OverridableCapabilityKey> & {
|
|
57
|
+
[K in OverridableCapabilityKey]?: EnabledCapability<T[K]>;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
type ExtractCapabilityFactory<TCapability, TContract, TDefaultFactory> =
|
|
61
|
+
TCapability extends { enabled: true; factory?: infer TFactory }
|
|
62
|
+
? TFactory extends TContract
|
|
63
|
+
? TFactory
|
|
64
|
+
: TDefaultFactory
|
|
65
|
+
: TDefaultFactory;
|
|
66
|
+
|
|
67
|
+
type ExtractCapabilityProvider<TCapability, TDefaultProvider> =
|
|
68
|
+
TCapability extends { enabled: true; provider?: infer TProviderFactory }
|
|
69
|
+
? TProviderFactory extends (...args: any[]) => infer TProvider
|
|
70
|
+
? TProvider
|
|
71
|
+
: TDefaultProvider
|
|
72
|
+
: TDefaultProvider;
|
|
73
|
+
|
|
74
|
+
type FactoryContractMap = {
|
|
75
|
+
product: ProductFactory;
|
|
76
|
+
productSearch: ProductSearchFactory;
|
|
77
|
+
productAssociations: ProductAssociationsFactory;
|
|
78
|
+
productReviews: ProductReviewsFactory;
|
|
79
|
+
productList: ProductListFactory;
|
|
80
|
+
identity: IdentityFactory;
|
|
81
|
+
cart: CartFactory;
|
|
82
|
+
checkout: CheckoutFactory;
|
|
83
|
+
order: OrderFactory;
|
|
84
|
+
orderSearch: OrderSearchFactory;
|
|
85
|
+
inventory: InventoryFactory;
|
|
86
|
+
price: PriceFactory;
|
|
87
|
+
category: CategoryFactory;
|
|
88
|
+
store: StoreFactory;
|
|
89
|
+
profile: ProfileFactory;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
type DefaultFactoryMap = {
|
|
93
|
+
product: CommercetoolsProductFactory;
|
|
94
|
+
productSearch: CommercetoolsProductSearchFactory;
|
|
95
|
+
productAssociations: CommercetoolsProductAssociationsFactory;
|
|
96
|
+
productReviews: CommercetoolsProductReviewsFactory;
|
|
97
|
+
productList: CommercetoolsProductListFactory;
|
|
98
|
+
identity: CommercetoolsIdentityFactory;
|
|
99
|
+
cart: CommercetoolsCartFactory;
|
|
100
|
+
checkout: CommercetoolsCheckoutFactory;
|
|
101
|
+
order: CommercetoolsOrderFactory;
|
|
102
|
+
orderSearch: CommercetoolsOrderSearchFactory;
|
|
103
|
+
inventory: CommercetoolsInventoryFactory;
|
|
104
|
+
price: CommercetoolsPriceFactory;
|
|
105
|
+
category: CommercetoolsCategoryFactory;
|
|
106
|
+
store: CommercetoolsStoreFactory;
|
|
107
|
+
profile: CommercetoolsProfileFactory;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
type ResolvedFactoryMap<T extends CommercetoolsCapabilities> = {
|
|
111
|
+
[K in OverridableCapabilityKey]: ExtractCapabilityFactory<
|
|
112
|
+
T[K],
|
|
113
|
+
FactoryContractMap[K],
|
|
114
|
+
DefaultFactoryMap[K]
|
|
115
|
+
>;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
type DefaultProviderMap<T extends CommercetoolsCapabilities> = {
|
|
119
|
+
product: CommercetoolsProductProvider<ResolvedFactoryMap<T>['product']>;
|
|
120
|
+
productSearch: CommercetoolsSearchProvider<ResolvedFactoryMap<T>['productSearch']>;
|
|
121
|
+
productAssociations: CommercetoolsProductAssociationsProvider<
|
|
122
|
+
ResolvedFactoryMap<T>['productAssociations']
|
|
123
|
+
>;
|
|
124
|
+
productReviews: CommercetoolsProductReviewsProvider<
|
|
125
|
+
ResolvedFactoryMap<T>['productReviews']
|
|
126
|
+
>;
|
|
127
|
+
productList: CommercetoolsProductListProvider<ResolvedFactoryMap<T>['productList']>;
|
|
128
|
+
identity: CommercetoolsIdentityProvider<ResolvedFactoryMap<T>['identity']>;
|
|
129
|
+
cart: CommercetoolsCartProvider<ResolvedFactoryMap<T>['cart']>;
|
|
130
|
+
checkout: CommercetoolsCheckoutProvider<ResolvedFactoryMap<T>['checkout']>;
|
|
131
|
+
order: CommercetoolsOrderProvider<ResolvedFactoryMap<T>['order']>;
|
|
132
|
+
orderSearch: CommercetoolsOrderSearchProvider<ResolvedFactoryMap<T>['orderSearch']>;
|
|
133
|
+
inventory: CommercetoolsInventoryProvider<ResolvedFactoryMap<T>['inventory']>;
|
|
134
|
+
price: CommercetoolsPriceProvider<ResolvedFactoryMap<T>['price']>;
|
|
135
|
+
category: CommercetoolsCategoryProvider<ResolvedFactoryMap<T>['category']>;
|
|
136
|
+
store: CommercetoolsStoreProvider<ResolvedFactoryMap<T>['store']>;
|
|
137
|
+
profile: CommercetoolsProfileProvider<ResolvedFactoryMap<T>['profile']>;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
type CapabilityProviderTypeMap<T extends CommercetoolsCapabilities> = {
|
|
141
|
+
[K in OverridableCapabilityKey]: ExtractCapabilityProvider<T[K], DefaultProviderMap<T>[K]>;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
type EnabledCapabilityOverrideMap<T extends CommercetoolsCapabilities> = {
|
|
145
|
+
[K in OverridableCapabilityKey as T[K] extends { enabled: true } ? K : never]:
|
|
146
|
+
CapabilityProviderTypeMap<T>[K];
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export type CommercetoolsClientFromCapabilities<
|
|
150
|
+
T extends CommercetoolsCapabilities,
|
|
151
|
+
> = Omit<
|
|
152
|
+
ClientFromCapabilities<NormalizeConfiguredCapabilities<T>>,
|
|
153
|
+
OverridableCapabilityKey
|
|
154
|
+
> &
|
|
155
|
+
EnabledCapabilityOverrideMap<T>;
|
|
156
|
+
|
|
157
|
+
export function resolveCapabilityProvider<TFactory, TProvider, TProviderArgs>(
|
|
158
|
+
capability:
|
|
159
|
+
| {
|
|
160
|
+
factory?: TFactory;
|
|
161
|
+
provider?: (args: TProviderArgs) => TProvider;
|
|
162
|
+
}
|
|
163
|
+
| undefined,
|
|
164
|
+
defaults: {
|
|
165
|
+
factory: TFactory;
|
|
166
|
+
provider: (args: TProviderArgs) => TProvider;
|
|
167
|
+
},
|
|
168
|
+
buildProviderArgs: (factory: TFactory) => TProviderArgs,
|
|
169
|
+
): TProvider {
|
|
170
|
+
const factory = capability?.factory ?? defaults.factory;
|
|
171
|
+
const provider = capability?.provider ?? defaults.provider;
|
|
172
|
+
|
|
173
|
+
return provider(buildProviderArgs(factory));
|
|
174
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { Cart as CTCart, LineItem } from '@commercetools/platform-sdk';
|
|
2
|
+
import type {
|
|
3
|
+
CartIdentifierSchema,
|
|
4
|
+
CartSchema} from '@reactionary/core';
|
|
5
|
+
import {
|
|
6
|
+
CartItemSchema,
|
|
7
|
+
type AnyCartIdentifierSchema,
|
|
8
|
+
type AnyCartSchema,
|
|
9
|
+
type Cart,
|
|
10
|
+
type CartFactory,
|
|
11
|
+
type CartIdentifier,
|
|
12
|
+
type CartItem,
|
|
13
|
+
type CostBreakDown,
|
|
14
|
+
type Currency,
|
|
15
|
+
type RequestContext,
|
|
16
|
+
} from '@reactionary/core';
|
|
17
|
+
import type * as z from 'zod';
|
|
18
|
+
|
|
19
|
+
export class CommercetoolsCartFactory<
|
|
20
|
+
TCartSchema extends AnyCartSchema = typeof CartSchema,
|
|
21
|
+
TCartIdentifierSchema extends AnyCartIdentifierSchema = typeof CartIdentifierSchema,
|
|
22
|
+
> implements CartFactory<TCartSchema, TCartIdentifierSchema>
|
|
23
|
+
{
|
|
24
|
+
public readonly cartSchema: TCartSchema;
|
|
25
|
+
public readonly cartIdentifierSchema: TCartIdentifierSchema;
|
|
26
|
+
|
|
27
|
+
constructor(cartSchema: TCartSchema, cartIdentifierSchema: TCartIdentifierSchema) {
|
|
28
|
+
this.cartSchema = cartSchema;
|
|
29
|
+
this.cartIdentifierSchema = cartIdentifierSchema;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public parseCartIdentifier(
|
|
33
|
+
_context: RequestContext,
|
|
34
|
+
data: { key?: string },
|
|
35
|
+
): z.output<TCartIdentifierSchema> {
|
|
36
|
+
return this.cartIdentifierSchema.parse({
|
|
37
|
+
key: data.key || '',
|
|
38
|
+
} satisfies Partial<CartIdentifier>);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public parseCart(
|
|
42
|
+
context: RequestContext,
|
|
43
|
+
data: CTCart,
|
|
44
|
+
): z.output<TCartSchema> {
|
|
45
|
+
const identifier = this.parseCartIdentifier(context, {
|
|
46
|
+
key: data.id,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const grandTotal = data.totalPrice.centAmount || 0;
|
|
50
|
+
const shippingTotal = data.shippingInfo?.price.centAmount || 0;
|
|
51
|
+
const productTotal = grandTotal - shippingTotal;
|
|
52
|
+
const taxTotal = data.taxedPrice?.totalTax?.centAmount || 0;
|
|
53
|
+
const discountTotal = data.discountOnTotalPrice?.discountedAmount.centAmount || 0;
|
|
54
|
+
const surchargeTotal = 0;
|
|
55
|
+
const currency = data.totalPrice.currencyCode as Currency;
|
|
56
|
+
|
|
57
|
+
const price = {
|
|
58
|
+
totalTax: {
|
|
59
|
+
value: taxTotal / 100,
|
|
60
|
+
currency,
|
|
61
|
+
},
|
|
62
|
+
totalDiscount: {
|
|
63
|
+
value: discountTotal / 100,
|
|
64
|
+
currency,
|
|
65
|
+
},
|
|
66
|
+
totalSurcharge: {
|
|
67
|
+
value: surchargeTotal / 100,
|
|
68
|
+
currency,
|
|
69
|
+
},
|
|
70
|
+
totalShipping: {
|
|
71
|
+
value: shippingTotal / 100,
|
|
72
|
+
currency,
|
|
73
|
+
},
|
|
74
|
+
totalProductPrice: {
|
|
75
|
+
value: productTotal / 100,
|
|
76
|
+
currency,
|
|
77
|
+
},
|
|
78
|
+
grandTotal: {
|
|
79
|
+
value: grandTotal / 100,
|
|
80
|
+
currency,
|
|
81
|
+
},
|
|
82
|
+
} satisfies CostBreakDown;
|
|
83
|
+
|
|
84
|
+
const items: CartItem[] = [];
|
|
85
|
+
for (const lineItem of data.lineItems) {
|
|
86
|
+
items.push(this.parseCartItem(lineItem));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const result = {
|
|
90
|
+
identifier,
|
|
91
|
+
userId: {
|
|
92
|
+
userId: '???',
|
|
93
|
+
},
|
|
94
|
+
name: data.custom?.fields['name'] || '',
|
|
95
|
+
description: data.custom?.fields['description'] || '',
|
|
96
|
+
price,
|
|
97
|
+
items,
|
|
98
|
+
appliedPromotions: [],
|
|
99
|
+
} satisfies Cart;
|
|
100
|
+
|
|
101
|
+
return this.cartSchema.parse(result);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
protected parseCartItem(lineItem: LineItem): CartItem {
|
|
105
|
+
const unitPrice = lineItem.price.value.centAmount;
|
|
106
|
+
const totalPrice = lineItem.totalPrice.centAmount || 0;
|
|
107
|
+
const totalDiscount = lineItem.price.discounted?.value.centAmount || 0;
|
|
108
|
+
const unitDiscount = totalDiscount / lineItem.quantity;
|
|
109
|
+
const currency = lineItem.price.value.currencyCode.toUpperCase() as Currency;
|
|
110
|
+
|
|
111
|
+
return CartItemSchema.parse({
|
|
112
|
+
identifier: {
|
|
113
|
+
key: lineItem.id,
|
|
114
|
+
},
|
|
115
|
+
product: {
|
|
116
|
+
key: lineItem.productId,
|
|
117
|
+
},
|
|
118
|
+
variant: {
|
|
119
|
+
sku: lineItem.variant.sku || '',
|
|
120
|
+
},
|
|
121
|
+
quantity: lineItem.quantity,
|
|
122
|
+
price: {
|
|
123
|
+
unitPrice: {
|
|
124
|
+
value: unitPrice / 100,
|
|
125
|
+
currency,
|
|
126
|
+
},
|
|
127
|
+
unitDiscount: {
|
|
128
|
+
value: unitDiscount / 100,
|
|
129
|
+
currency,
|
|
130
|
+
},
|
|
131
|
+
totalPrice: {
|
|
132
|
+
value: totalPrice / 100,
|
|
133
|
+
currency,
|
|
134
|
+
},
|
|
135
|
+
totalDiscount: {
|
|
136
|
+
value: totalDiscount / 100,
|
|
137
|
+
currency,
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
} satisfies Partial<CartItem>);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { Category as CTCategory, CategoryPagedQueryResponse } from '@commercetools/platform-sdk';
|
|
2
|
+
import type {
|
|
3
|
+
CategoryPaginatedResultSchema,
|
|
4
|
+
CategorySchema} from '@reactionary/core';
|
|
5
|
+
import {
|
|
6
|
+
type AnyCategoryPaginatedResultSchema,
|
|
7
|
+
type AnyCategorySchema,
|
|
8
|
+
type Category,
|
|
9
|
+
type CategoryFactory,
|
|
10
|
+
type CategoryIdentifier,
|
|
11
|
+
type CategoryPaginatedResult,
|
|
12
|
+
type RequestContext,
|
|
13
|
+
} from '@reactionary/core';
|
|
14
|
+
import type * as z from 'zod';
|
|
15
|
+
|
|
16
|
+
export class CommercetoolsCategoryFactory<
|
|
17
|
+
TCategorySchema extends AnyCategorySchema = typeof CategorySchema,
|
|
18
|
+
TCategoryPaginatedSchema extends AnyCategoryPaginatedResultSchema = typeof CategoryPaginatedResultSchema,
|
|
19
|
+
> implements CategoryFactory<TCategorySchema, TCategoryPaginatedSchema>
|
|
20
|
+
{
|
|
21
|
+
public readonly categorySchema: TCategorySchema;
|
|
22
|
+
public readonly categoryPaginatedResultSchema: TCategoryPaginatedSchema;
|
|
23
|
+
|
|
24
|
+
constructor(
|
|
25
|
+
categorySchema: TCategorySchema,
|
|
26
|
+
categoryPaginatedResultSchema: TCategoryPaginatedSchema,
|
|
27
|
+
) {
|
|
28
|
+
this.categorySchema = categorySchema;
|
|
29
|
+
this.categoryPaginatedResultSchema = categoryPaginatedResultSchema;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public parseCategory(
|
|
33
|
+
context: RequestContext,
|
|
34
|
+
data: CTCategory,
|
|
35
|
+
): z.output<TCategorySchema> {
|
|
36
|
+
const identifier = { key: data.key || '' } satisfies CategoryIdentifier;
|
|
37
|
+
const result = {
|
|
38
|
+
identifier,
|
|
39
|
+
name: data.name[context.languageContext.locale] || 'No Name',
|
|
40
|
+
slug: data.slug ? data.slug[context.languageContext.locale] || '' : '',
|
|
41
|
+
text: data.description ? data.description[context.languageContext.locale] || '' : '',
|
|
42
|
+
parentCategory:
|
|
43
|
+
data.parent && data.parent.obj && data.parent.obj?.key
|
|
44
|
+
? { key: data.parent.obj.key }
|
|
45
|
+
: undefined,
|
|
46
|
+
images: (data.assets || [])
|
|
47
|
+
.filter((asset) => asset.sources.length > 0)
|
|
48
|
+
.filter((asset) => asset.sources[0].contentType?.startsWith('image/'))
|
|
49
|
+
.map((asset) => ({
|
|
50
|
+
sourceUrl: asset.sources[0].uri,
|
|
51
|
+
altText:
|
|
52
|
+
asset.description?.[context.languageContext.locale] ||
|
|
53
|
+
asset.name[context.languageContext.locale] ||
|
|
54
|
+
'',
|
|
55
|
+
height: asset.sources[0].dimensions?.h || 0,
|
|
56
|
+
width: asset.sources[0].dimensions?.w || 0,
|
|
57
|
+
})),
|
|
58
|
+
} satisfies Category;
|
|
59
|
+
|
|
60
|
+
return this.categorySchema.parse(result);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public parseCategoryPaginatedResult(
|
|
64
|
+
context: RequestContext,
|
|
65
|
+
data: CategoryPagedQueryResponse,
|
|
66
|
+
): z.output<TCategoryPaginatedSchema> {
|
|
67
|
+
const result = {
|
|
68
|
+
pageNumber: Math.floor(data.offset / data.count) + 1,
|
|
69
|
+
pageSize: data.count,
|
|
70
|
+
totalCount: data.total || 0,
|
|
71
|
+
totalPages: Math.ceil((data.total ?? 0) / data.count),
|
|
72
|
+
items: data.results.map((category) => this.parseCategory(context, category)),
|
|
73
|
+
} satisfies CategoryPaginatedResult;
|
|
74
|
+
|
|
75
|
+
return this.categoryPaginatedResultSchema.parse(result);
|
|
76
|
+
}
|
|
77
|
+
}
|
package/providers/commercetools/src/factories/checkout/checkout-initializer-overrides.example.ts
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { Cart as CTCart } from "@commercetools/platform-sdk";
|
|
2
|
+
import {
|
|
3
|
+
CheckoutSchema,
|
|
4
|
+
PaymentMethodSchema,
|
|
5
|
+
ShippingMethodSchema,
|
|
6
|
+
type CheckoutQueryById,
|
|
7
|
+
type RequestContext,
|
|
8
|
+
unwrapValue,
|
|
9
|
+
} from "@reactionary/core";
|
|
10
|
+
import { withCommercetoolsCapabilities } from "../../core/initialize.js";
|
|
11
|
+
import { CommercetoolsCheckoutProvider } from "../../providers/checkout.provider.js";
|
|
12
|
+
import { assertNotAny, assertType } from "../product/utils.example.js";
|
|
13
|
+
import { CommercetoolsCheckoutFactory } from "./checkout.factory.js";
|
|
14
|
+
import * as z from "zod";
|
|
15
|
+
|
|
16
|
+
const cache = {} as any;
|
|
17
|
+
const context = {} as any;
|
|
18
|
+
const config = {} as any;
|
|
19
|
+
|
|
20
|
+
const ExtendedCheckoutSchema = CheckoutSchema.safeExtend({
|
|
21
|
+
extendedValue: z.string().default(""),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
type ExtendedCheckout = z.output<typeof ExtendedCheckoutSchema>;
|
|
25
|
+
|
|
26
|
+
class ExtendedCommercetoolsCheckoutFactory extends CommercetoolsCheckoutFactory<
|
|
27
|
+
typeof ExtendedCheckoutSchema,
|
|
28
|
+
typeof ShippingMethodSchema,
|
|
29
|
+
typeof PaymentMethodSchema
|
|
30
|
+
> {
|
|
31
|
+
constructor() {
|
|
32
|
+
super(ExtendedCheckoutSchema, ShippingMethodSchema, PaymentMethodSchema);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public override parseCheckout(
|
|
36
|
+
context: RequestContext,
|
|
37
|
+
data: CTCart,
|
|
38
|
+
): ExtendedCheckout {
|
|
39
|
+
const base = super.parseCheckout(context, data);
|
|
40
|
+
return {
|
|
41
|
+
...base,
|
|
42
|
+
extendedValue: "from-factory",
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
class ExtendedCommercetoolsCheckoutProvider extends CommercetoolsCheckoutProvider<ExtendedCommercetoolsCheckoutFactory> {
|
|
48
|
+
public async getByIdOrThrow(payload: CheckoutQueryById): Promise<ExtendedCheckout> {
|
|
49
|
+
const result = await this.getById(payload);
|
|
50
|
+
return unwrapValue(result);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const extendedFactory = new ExtendedCommercetoolsCheckoutFactory();
|
|
55
|
+
|
|
56
|
+
const capabilityFactory = withCommercetoolsCapabilities(config, {
|
|
57
|
+
checkout: {
|
|
58
|
+
enabled: true,
|
|
59
|
+
factory: extendedFactory,
|
|
60
|
+
provider: ({ cache, context, config, commercetoolsApi }) =>
|
|
61
|
+
new ExtendedCommercetoolsCheckoutProvider(
|
|
62
|
+
config,
|
|
63
|
+
cache,
|
|
64
|
+
context,
|
|
65
|
+
commercetoolsApi,
|
|
66
|
+
extendedFactory,
|
|
67
|
+
),
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const client = capabilityFactory(cache, context);
|
|
72
|
+
|
|
73
|
+
client.checkout
|
|
74
|
+
.getById({
|
|
75
|
+
identifier: { key: "checkout-1" },
|
|
76
|
+
})
|
|
77
|
+
.then((result) => {
|
|
78
|
+
assertNotAny(result);
|
|
79
|
+
if (result.success) {
|
|
80
|
+
assertNotAny(result.value);
|
|
81
|
+
assertNotAny(result.value.extendedValue);
|
|
82
|
+
assertType<string>(result.value.extendedValue);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
client.checkout
|
|
87
|
+
.getByIdOrThrow({
|
|
88
|
+
identifier: { key: "checkout-2" },
|
|
89
|
+
})
|
|
90
|
+
.then((checkout) => {
|
|
91
|
+
assertNotAny(checkout);
|
|
92
|
+
assertNotAny(checkout.extendedValue);
|
|
93
|
+
assertType<string>(checkout.extendedValue);
|
|
94
|
+
});
|