@mframework/layer-commerce 0.0.3
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 +101 -0
- package/app/cart/useCart.ts +1 -0
- package/app/components/ChevronIcon/ChevronIcon.config.ts +17 -0
- package/app/components/DateSelect/DateSelect.config.ts +15 -0
- package/app/components/Field/Field.config.ts +14 -0
- package/app/components/FieldDate/FieldDate.config.ts +16 -0
- package/app/components/Form/Form.type.ts +8 -0
- package/app/components/Product/Product.config.ts +19 -0
- package/app/components/Product/Stock.config.ts +15 -0
- package/app/components/ProductCustomizableOption/ProductCustomizableOption.config.ts +5 -0
- package/app/components/ProductGallery/ProductGallery.config.ts +15 -0
- package/app/components/ProductReviews/ProductReviews.config.ts +8 -0
- package/app/composables/_types.ts +18 -0
- package/app/composables/adapters/abstract/cartAdapter.ts +0 -0
- package/app/composables/adapters/abstract/categoryAdapter.ts +0 -0
- package/app/composables/adapters/abstract/customerAdapter.ts +0 -0
- package/app/composables/adapters/abstract/inventoryAdapter.ts +0 -0
- package/app/composables/adapters/abstract/orderAdapter.ts +0 -0
- package/app/composables/adapters/abstract/productAdapter.ts +7 -0
- package/app/composables/cart/registry.ts +20 -0
- package/app/composables/cart/types.ts +18 -0
- package/app/composables/cart/useCart.ts +15 -0
- package/app/composables/config.ts +19 -0
- package/app/composables/defs/apiDefinitions.ts +55 -0
- package/app/composables/defs/extension.feature +40 -0
- package/app/composables/defs/extension.mocks.ts +39 -0
- package/app/composables/defs/extension.test.ts +280 -0
- package/app/composables/defs/extension.ts +236 -0
- package/app/composables/defs/index.ts +3 -0
- package/app/composables/defs/typeHelpers.ts +8 -0
- package/app/composables/defs/types.ts +136 -0
- package/app/composables/domain/product.ts +12 -0
- package/app/composables/featured-products.ts +20 -0
- package/app/composables/helpers/contextualizedNormalizers.feature +14 -0
- package/app/composables/helpers/contextualizedNormalizers.test.ts +85 -0
- package/app/composables/helpers/contextualizedNormalizers.ts +20 -0
- package/app/composables/helpers/index.ts +1 -0
- package/app/composables/index.ts +9 -0
- package/app/composables/methods/auth.ts +83 -0
- package/app/composables/methods/cart.ts +119 -0
- package/app/composables/methods/category.ts +27 -0
- package/app/composables/methods/checkout.ts +54 -0
- package/app/composables/methods/customer.ts +52 -0
- package/app/composables/methods/helpers.ts +5 -0
- package/app/composables/methods/index.ts +75 -0
- package/app/composables/methods/order.ts +39 -0
- package/app/composables/methods/product.ts +95 -0
- package/app/composables/methods/settings.ts +16 -0
- package/app/composables/models/cart.ts +95 -0
- package/app/composables/models/category.ts +13 -0
- package/app/composables/models/checkout.ts +17 -0
- package/app/composables/models/customer.ts +16 -0
- package/app/composables/models/facets.ts +25 -0
- package/app/composables/models/index.ts +94 -0
- package/app/composables/models/order.ts +43 -0
- package/app/composables/models/product.ts +73 -0
- package/app/composables/models/shared.ts +75 -0
- package/app/composables/orders.ts +69 -0
- package/app/composables/products/registry.ts +86 -0
- package/app/composables/products/types.ts +8 -0
- package/app/composables/products/useEvents.ts +26 -0
- package/app/composables/products/useGiftCards.ts +29 -0
- package/app/composables/products/useProducts.ts +12 -0
- package/app/composables/products/useSubscriptions.ts +29 -0
- package/app/composables/products.ts +30 -0
- package/app/composables/registry.ts +24 -0
- package/app/composables/useAuth.ts +43 -0
- package/app/composables/useBreakpoints/index.ts +1 -0
- package/app/composables/useBreakpoints/useBreakpoints.ts +28 -0
- package/app/composables/useCache.ts +38 -0
- package/app/composables/useCart/__tests__/useCart.spec.ts +11 -0
- package/app/composables/useCart/index.ts +1 -0
- package/app/composables/useCart/types.ts +17 -0
- package/app/composables/useCart/useCart.ts +46 -0
- package/app/composables/useCartShippingMethods/__tests__/useCartShippingMethods.spec.ts +11 -0
- package/app/composables/useCartShippingMethods/index.ts +1 -0
- package/app/composables/useCartShippingMethods/types.ts +17 -0
- package/app/composables/useCartShippingMethods/useCartShippingMethods.ts +47 -0
- package/app/composables/useCatalog.ts +26 -0
- package/app/composables/useContent.ts +26 -0
- package/app/composables/useCustomer/__tests__/useCustomer.spec.ts +25 -0
- package/app/composables/useCustomer/index.ts +2 -0
- package/app/composables/useCustomer/types.ts +17 -0
- package/app/composables/useCustomer/useCustomer.ts +40 -0
- package/app/composables/useCustomerAddress/__tests__/useCustomerAddress.spec.ts +11 -0
- package/app/composables/useCustomerAddress/index.ts +2 -0
- package/app/composables/useCustomerAddress/types.ts +17 -0
- package/app/composables/useCustomerAddress/useCustomerAddress.ts +55 -0
- package/app/composables/useCustomerOrder/__tests__/useCustomerOrder.spec.ts +11 -0
- package/app/composables/useCustomerOrder/adress.ts +10 -0
- package/app/composables/useCustomerOrder/index.ts +2 -0
- package/app/composables/useCustomerOrder/product.ts +37 -0
- package/app/composables/useCustomerOrder/types.ts +40 -0
- package/app/composables/useCustomerOrder/useCustomerOrder.ts +63 -0
- package/app/composables/useCustomerOrders/__tests__/useCustomerOrders.spec.ts +11 -0
- package/app/composables/useCustomerOrders/index.ts +2 -0
- package/app/composables/useCustomerOrders/types.ts +20 -0
- package/app/composables/useCustomerOrders/useCustomerOrders.ts +56 -0
- package/app/composables/useCustomerReturns/__tests__/useCustomerReturns.spec.ts +11 -0
- package/app/composables/useCustomerReturns/index.ts +2 -0
- package/app/composables/useCustomerReturns/types.ts +17 -0
- package/app/composables/useCustomerReturns/useCustomerReturns.ts +41 -0
- package/app/composables/useHandleError/index.ts +1 -0
- package/app/composables/useHandleError/types.ts +11 -0
- package/app/composables/useHandleError/useHandleError.ts +27 -0
- package/app/composables/useInventory.ts +29 -0
- package/app/composables/useLoading.ts +21 -0
- package/app/composables/useNotification.ts +21 -0
- package/app/composables/usePageTitle.ts +20 -0
- package/app/composables/useProduct/index.ts +2 -0
- package/app/composables/useProduct/types.ts +17 -0
- package/app/composables/useProduct/useProduct.ts +42 -0
- package/app/composables/useProductAttribute/__tests__/useProduct.mock.ts +31 -0
- package/app/composables/useProductAttribute/__tests__/useProductAttribute.spec.ts +14 -0
- package/app/composables/useProductAttribute/index.ts +1 -0
- package/app/composables/useProductAttribute/useProductAttribute.ts +37 -0
- package/app/composables/useProductRecommended/__tests__/useProductRecommended.spec.ts +12 -0
- package/app/composables/useProductRecommended/index.ts +1 -0
- package/app/composables/useProductRecommended/types.ts +17 -0
- package/app/composables/useProductRecommended/useProductRecommended.ts +43 -0
- package/app/composables/useProductReviews/__tests__/productReviews.mock.ts +20 -0
- package/app/composables/useProductReviews/__tests__/useProductReviews.spec.ts +22 -0
- package/app/composables/useProductReviews/index.ts +2 -0
- package/app/composables/useProductReviews/types.ts +17 -0
- package/app/composables/useProductReviews/useProductReviews.ts +46 -0
- package/app/composables/useProducts/__tests__/useProducts.spec.ts +11 -0
- package/app/composables/useProducts/types.ts +22 -0
- package/app/composables/useProducts/useProducts.ts +41 -0
- package/app/composables/useTax.ts +27 -0
- package/app/composables/validationRules/index.ts +1 -0
- package/app/composables/validationRules/password.feature +67 -0
- package/app/composables/validationRules/password.test.ts +89 -0
- package/app/composables/validationRules/password.ts +25 -0
- package/app/normalizers/Cart.query.ts +729 -0
- package/app/normalizers/Cart.type.ts +285 -0
- package/app/normalizers/Category.query.ts +146 -0
- package/app/normalizers/Category.type.ts +55 -0
- package/app/normalizers/CheckEmail.query.ts +28 -0
- package/app/normalizers/Checkout.query.ts +253 -0
- package/app/normalizers/Checkout.type.ts +77 -0
- package/app/normalizers/CmsBlock.query.ts +57 -0
- package/app/normalizers/CmsBlock.type.ts +25 -0
- package/app/normalizers/CmsPage.query.ts +59 -0
- package/app/normalizers/CmsPage.type.ts +26 -0
- package/app/normalizers/Config.query.ts +224 -0
- package/app/normalizers/Config.type.ts +196 -0
- package/app/normalizers/ContactForm.query.ts +49 -0
- package/app/normalizers/CreditMemo.type.ts +49 -0
- package/app/normalizers/GiftCard.type.ts +24 -0
- package/app/normalizers/Invoice.type.ts +58 -0
- package/app/normalizers/Menu.query.ts +54 -0
- package/app/normalizers/Menu.type.ts +22 -0
- package/app/normalizers/MyAccount.query.ts +268 -0
- package/app/normalizers/MyAccount.type.ts +129 -0
- package/app/normalizers/NewsletterSubscription.query.ts +38 -0
- package/app/normalizers/Order.query.ts +741 -0
- package/app/normalizers/Order.type.ts +268 -0
- package/app/normalizers/Payment.type.ts +28 -0
- package/app/normalizers/ProductAlerts.query.ts +23 -0
- package/app/normalizers/ProductCompare.query.ts +226 -0
- package/app/normalizers/ProductCompare.type.ts +90 -0
- package/app/normalizers/ProductList.query.ts +1620 -0
- package/app/normalizers/ProductList.type.ts +726 -0
- package/app/normalizers/Region.query.ts +58 -0
- package/app/normalizers/Region.type.ts +23 -0
- package/app/normalizers/Return.type.ts +50 -0
- package/app/normalizers/Review.query.ts +81 -0
- package/app/normalizers/Review.type.ts +42 -0
- package/app/normalizers/Slider.query.ts +72 -0
- package/app/normalizers/Slider.type.ts +26 -0
- package/app/normalizers/StoreInPickUp.query.ts +54 -0
- package/app/normalizers/StoreInPickUp.type.ts +59 -0
- package/app/normalizers/Subscription.type.ts +25 -0
- package/app/normalizers/Transaction.type.ts +20 -0
- package/app/normalizers/UrlRewrites.query.ts +55 -0
- package/app/normalizers/UrlRewrites.type.ts +25 -0
- package/app/normalizers/Wishlist.query.ts +202 -0
- package/app/normalizers/Wishlist.type.ts +42 -0
- package/app/pages/brand/[...slug].vue +76 -0
- package/app/pages/brands.vue +67 -0
- package/app/pages/cart.vue +142 -0
- package/app/pages/compare.vue +166 -0
- package/app/pages/departments/[...slug].vue +353 -0
- package/app/pages/departments/category/[...slug].vue +114 -0
- package/app/pages/incentive/[...id].vue +66 -0
- package/app/pages/invoice/[id].vue +309 -0
- package/app/pages/order/[id].vue +327 -0
- package/app/pages/product/[...id].vue +309 -0
- package/app/pages/product/showcases/index.vue +86 -0
- package/app/pages/shipment/[...id].vue +176 -0
- package/app/pages/shop/[...slug].vue +158 -0
- package/app/pages/shops.vue +76 -0
- package/app/pages/subscription/[...id].vue +147 -0
- package/app/pages/transaction/[...id].vue +74 -0
- package/app/routes/CategoryPage/CategoryPage.config.ts +28 -0
- package/app/routes/CategoryPage/CategoryPage.type.ts +8 -0
- package/app/routes/Checkout/Checkout.config.ts +3 -0
- package/app/routes/Checkout/Checkout.type.ts +14 -0
- package/app/routes/MyAccount/MyAccount.config.ts +1 -0
- package/app/routes/SearchPage/SearchPage.config.ts +1 -0
- package/app/routes/UrlRewrites/UrlRewrites.config.ts +5 -0
- package/app/stores/Cart/Cart.type.ts +26 -0
- package/app/stores/MyAccount/MyAccount.action.ts +7 -0
- package/app/stores/Notification/Notification.action.ts +40 -0
- package/app/stores/Notification/Notification.type.ts +16 -0
- package/app/stores/Popup/Popup.action.ts +30 -0
- package/app/stores/Product/Product.dispatcher.ts +53 -0
- package/app/stores/Product/Product.reducer.ts +12 -0
- package/app/stores/ProductList/ProductList.dispatcher.ts +35 -0
- package/app/stores/ProductList/ProductList.reducer.ts +13 -0
- package/app/stores/Store.type.ts +31 -0
- package/app/stores/Wishlist/Wishlist.type.ts +12 -0
- package/app/stores/cart.ts +218 -0
- package/app/stores/cartStore.ts +224 -0
- package/app/stores/checkout.ts +18 -0
- package/app/stores/compare.ts +65 -0
- package/app/stores/currency.js +29 -0
- package/app/stores/digital-products.js +11 -0
- package/app/stores/orders.ts +172 -0
- package/app/stores/product.ts +34 -0
- package/app/stores/productList.ts +35 -0
- package/app/stores/productListInfo.ts +0 -0
- package/app/stores/products.ts +118 -0
- package/app/stores/recentlyViewedProducts.ts +56 -0
- package/app/stores/review.ts +33 -0
- package/app/stores/storeInPickUp.ts +21 -0
- package/app/stores/user.ts +20 -0
- package/app/stores/wishlist.ts +46 -0
- package/app/types/Account.type.ts +141 -0
- package/app/types/Breadcrumbs.type.ts +23 -0
- package/app/types/CMS.type.ts +33 -0
- package/app/types/Category.type.ts +67 -0
- package/app/types/Checkout.type.ts +58 -0
- package/app/types/Common.type.ts +77 -0
- package/app/types/Config.type.ts +47 -0
- package/app/types/Device.type.ts +37 -0
- package/app/types/Direction.type.ts +23 -0
- package/app/types/Downloadable.type.ts +24 -0
- package/app/types/Error.type.ts +22 -0
- package/app/types/Field.type.ts +151 -0
- package/app/types/Global.type.ts +156 -0
- package/app/types/Graphql.type.ts +4497 -0
- package/app/types/Layout.type.ts +18 -0
- package/app/types/Menu.type.ts +39 -0
- package/app/types/MiniCart.type.ts +61 -0
- package/app/types/NotificationList.type.ts +34 -0
- package/app/types/Order.type.ts +174 -0
- package/app/types/Price.type.ts +72 -0
- package/app/types/ProductCompare.type.ts +24 -0
- package/app/types/ProductList.type.ts +351 -0
- package/app/types/Rating.type.ts +42 -0
- package/app/types/Router.type.ts +67 -0
- package/app/types/Slider.type.ts +25 -0
- package/app/types/StockStatus.type.ts +21 -0
- package/app/types/domain/index.ts +94 -0
- package/app/types/index.ts +33 -0
- package/app/types/shims.d.ts +52 -0
- package/app/types/tilework-opus.d.ts +48 -0
- package/app/utils/Address/Address.type.ts +28 -0
- package/app/utils/Address/index.ts +325 -0
- package/app/utils/Auth/IsSignedIn.ts +4 -0
- package/app/utils/Auth/Token.ts +9 -0
- package/app/utils/Base64/Base64.ts +16 -0
- package/app/utils/Base64/index.ts +12 -0
- package/app/utils/Browser/Browser.ts +29 -0
- package/app/utils/Browser/index.ts +12 -0
- package/app/utils/BrowserDatabase/BrowserDatabase.ts +70 -0
- package/app/utils/BrowserDatabase/index.ts +12 -0
- package/app/utils/CSS/CSS.ts +65 -0
- package/app/utils/CSS/index.ts +12 -0
- package/app/utils/Cache/Cache.ts +99 -0
- package/app/utils/Cart/Cart.ts +300 -0
- package/app/utils/Cart/Cart.type.ts +76 -0
- package/app/utils/Cart/Token.ts +59 -0
- package/app/utils/Cart/index.ts +13 -0
- package/app/utils/Category/Filters.ts +39 -0
- package/app/utils/Category/index.ts +12 -0
- package/app/utils/Common/index.ts +32 -0
- package/app/utils/Compare/Compare.ts +89 -0
- package/app/utils/Compare/index.ts +12 -0
- package/app/utils/Currency/Currency.ts +84 -0
- package/app/utils/Currency/index.ts +12 -0
- package/app/utils/DynamicReducer/DynamicReducer.type.ts +14 -0
- package/app/utils/DynamicReducer/Helper.ts +30 -0
- package/app/utils/DynamicReducer/index.tsx +35 -0
- package/app/utils/ElementTransition/ElementTransition.ts +100 -0
- package/app/utils/Form/Extract.ts +316 -0
- package/app/utils/Form/Form.ts +46 -0
- package/app/utils/Form/Form.type.ts +60 -0
- package/app/utils/Form/Transform.ts +33 -0
- package/app/utils/FormPortalCollector/index.ts +45 -0
- package/app/utils/History/History.type.ts +31 -0
- package/app/utils/History/index.ts +17 -0
- package/app/utils/Manipulations/Array.ts +18 -0
- package/app/utils/Manipulations/Date.ts +36 -0
- package/app/utils/Manipulations/index.ts +14 -0
- package/app/utils/Media/Media.ts +27 -0
- package/app/utils/Media/index.ts +13 -0
- package/app/utils/Menu/Menu.ts +116 -0
- package/app/utils/Menu/Menu.type.ts +37 -0
- package/app/utils/Menu/index.ts +12 -0
- package/app/utils/Mobile/index.ts +13 -0
- package/app/utils/Mobile/isMobile.ts +34 -0
- package/app/utils/Orders/Orders.ts +71 -0
- package/app/utils/Orders/Orders.type.ts +19 -0
- package/app/utils/Orders/index.ts +13 -0
- package/app/utils/Polyfill/index.ts +336 -0
- package/app/utils/Preload/CategoryPreload.ts +74 -0
- package/app/utils/Preload/ProductPreload.ts +28 -0
- package/app/utils/Preload/index.ts +75 -0
- package/app/utils/Price/Price.config.ts +189 -0
- package/app/utils/Price/Price.ts +63 -0
- package/app/utils/Price/index.ts +12 -0
- package/app/utils/Product/Extract.ts +652 -0
- package/app/utils/Product/Product.ts +575 -0
- package/app/utils/Product/Product.type.ts +260 -0
- package/app/utils/Product/Transform.ts +382 -0
- package/app/utils/Product/index.ts +12 -0
- package/app/utils/Promise/MakeCancelable.ts +44 -0
- package/app/utils/Promise/Promise.type.ts +15 -0
- package/app/utils/Promise/index.ts +13 -0
- package/app/utils/Query/Field.ts +71 -0
- package/app/utils/Query/Fragment.ts +22 -0
- package/app/utils/Query/PrepareDocument.ts +119 -0
- package/app/utils/Query/Query.type.ts +26 -0
- package/app/utils/Query/index.ts +15 -0
- package/app/utils/Request/Config.ts +21 -0
- package/app/utils/Request/DataContainer.ts +102 -0
- package/app/utils/Request/Debounce.ts +48 -0
- package/app/utils/Request/Error.ts +31 -0
- package/app/utils/Request/Hash.ts +88 -0
- package/app/utils/Request/LowPriorityLoad.ts +32 -0
- package/app/utils/Request/LowPriorityRender.ts +55 -0
- package/app/utils/Request/Mutation.ts +25 -0
- package/app/utils/Request/Query.ts +25 -0
- package/app/utils/Request/QueryDispatcher.ts +135 -0
- package/app/utils/Request/Request.ts +310 -0
- package/app/utils/Store/Store.type.ts +26 -0
- package/app/utils/Store/index.ts +71 -0
- package/app/utils/Url/Url.ts +297 -0
- package/app/utils/Url/index.ts +12 -0
- package/app/utils/Validator/Config.ts +96 -0
- package/app/utils/Validator/Validator.ts +268 -0
- package/app/utils/Validator/Validator.type.ts +47 -0
- package/app/utils/Validator/index.ts +12 -0
- package/app/utils/Wishlist/Wishlist.ts +65 -0
- package/app/utils/Wishlist/index.ts +12 -0
- package/app/utils/client.ts +280 -0
- package/app/utils/index.ts +53 -0
- package/app/utils/normalizer.ts +23 -0
- package/app/utils/normalizers/magento.ts +29 -0
- package/app/utils/normalizers/shopify.ts +29 -0
- package/nuxt.config.ts +11 -0
- package/package.json +43 -0
- package/tsconfig.json +45 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M Framework - Flexible backend agnostic framework.
|
|
3
|
+
*
|
|
4
|
+
* Copyright © Meeovi, LTD. All rights reserved.
|
|
5
|
+
* See LICENSE for license details.
|
|
6
|
+
*
|
|
7
|
+
* @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
|
|
8
|
+
* @package mframework/mframework-theme
|
|
9
|
+
* @link https://github.com/meeovi/mframework
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { FieldType } from 'Component/Field/Field.config';
|
|
13
|
+
|
|
14
|
+
export interface ValidationRule {
|
|
15
|
+
isRequired?: boolean;
|
|
16
|
+
inputType?: string;
|
|
17
|
+
selector?: string;
|
|
18
|
+
match?: string
|
|
19
|
+
| ((value: string | Record<string, string | boolean>[] | undefined) => boolean)
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
|
+
| ((...args: any[]) => boolean | string);
|
|
22
|
+
range?: { min?: number; max?: number; showLengthError?: boolean };
|
|
23
|
+
fileExtension?: Record<string, string>;
|
|
24
|
+
customErrorMessages?: Record<string, string>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface ValidationOutput {
|
|
28
|
+
value: string | boolean;
|
|
29
|
+
errorMessages: string[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface ValidationDOMOutput {
|
|
33
|
+
values?: {
|
|
34
|
+
name: string;
|
|
35
|
+
value: string | boolean;
|
|
36
|
+
type: string;
|
|
37
|
+
}[];
|
|
38
|
+
errorFields?: unknown[];
|
|
39
|
+
errorMessages?: string[];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface FieldValidationOutput {
|
|
43
|
+
errorMessages?: string[];
|
|
44
|
+
name?: string;
|
|
45
|
+
type: any;
|
|
46
|
+
value?: string | boolean;
|
|
47
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M Framework - Flexible backend agnostic framework.
|
|
3
|
+
*
|
|
4
|
+
* Copyright © Meeovi, LTD. All rights reserved.
|
|
5
|
+
* See LICENSE for license details.
|
|
6
|
+
*
|
|
7
|
+
* @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
|
|
8
|
+
* @package mframework/mframework
|
|
9
|
+
* @link https://github.com/meeovi/mframework
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export * from './Validator';
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M Framework - Flexible backend agnostic framework.
|
|
3
|
+
*
|
|
4
|
+
* Copyright © Meeovi, LTD. All rights reserved.
|
|
5
|
+
* See LICENSE for license details.
|
|
6
|
+
*
|
|
7
|
+
* @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
|
|
8
|
+
* @package mframework/mframework
|
|
9
|
+
* @link https://github.com/meeovi/mframework
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
PriceRange,
|
|
14
|
+
ProductDiscount,
|
|
15
|
+
ProductItem,
|
|
16
|
+
ProductPrice,
|
|
17
|
+
} from '../../normalizers/ProductList.type';
|
|
18
|
+
import { Product as DomainProduct } from '../../types/domain';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Updates wishlist item price for option based products
|
|
22
|
+
* @param {Object} product
|
|
23
|
+
* @namespace ../../utils/Wishlist/getPriceRange
|
|
24
|
+
*/
|
|
25
|
+
export const getPriceRange = (
|
|
26
|
+
product: ProductItem | DomainProduct,
|
|
27
|
+
price: number,
|
|
28
|
+
priceWithoutTax: number,
|
|
29
|
+
discount: ProductDiscount | number = 0,
|
|
30
|
+
): { price_range?: PriceRange } => {
|
|
31
|
+
if (!price) {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const {
|
|
36
|
+
price_range: {
|
|
37
|
+
minimum_price: {
|
|
38
|
+
regular_price: {
|
|
39
|
+
currency,
|
|
40
|
+
} = {},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
} = product;
|
|
44
|
+
|
|
45
|
+
const priceCurrencyValue = { value: price, currency };
|
|
46
|
+
const priceCurrencyValueExclTax = { value: priceWithoutTax, currency };
|
|
47
|
+
|
|
48
|
+
const priceSection = {
|
|
49
|
+
final_price: priceCurrencyValue,
|
|
50
|
+
regular_price: priceCurrencyValue,
|
|
51
|
+
final_price_excl_tax: priceCurrencyValueExclTax,
|
|
52
|
+
regular_price_excl_tax: priceCurrencyValueExclTax,
|
|
53
|
+
default_final_price_excl_tax: priceCurrencyValueExclTax,
|
|
54
|
+
discount,
|
|
55
|
+
} as ProductPrice;
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
price_range: {
|
|
59
|
+
minimum_price: priceSection,
|
|
60
|
+
maximum_price: priceSection,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export default getPriceRange;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M Framework - Flexible backend agnostic framework.
|
|
3
|
+
*
|
|
4
|
+
* Copyright © Meeovi, LTD. All rights reserved.
|
|
5
|
+
* See LICENSE for license details.
|
|
6
|
+
*
|
|
7
|
+
* @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
|
|
8
|
+
* @package mframework/mframework
|
|
9
|
+
* @link https://github.com/meeovi/mframework
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export * from './Wishlist';
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import * as CommercePkg from '~/types';
|
|
2
|
+
import { sdk } from '@mframework/sdk';
|
|
3
|
+
import imports from '../types';
|
|
4
|
+
import { normalizeProductsQueryOutput, normalizeProduct } from '../normalizers/ProductList.type';
|
|
5
|
+
import { normalizeCart } from '../normalizers/Cart.type';
|
|
6
|
+
import { normalizeOrder } from '../normalizers/Order.type';
|
|
7
|
+
import { normalizeReview } from '../normalizers/Review.type';
|
|
8
|
+
import { normalizeGiftCard, normalizeGiftCards } from '../normalizers/GiftCard.type';
|
|
9
|
+
import { normalizeSubscription, normalizeSubscriptions } from '../normalizers/Subscription.type';
|
|
10
|
+
import { normalizeReturn, normalizeReturns } from '../normalizers/Return.type';
|
|
11
|
+
import { normalizeCreditMemo, normalizeCreditMemos } from '../normalizers/CreditMemo.type';
|
|
12
|
+
import { normalizeInvoice, normalizeInvoices } from '../normalizers/Invoice.type';
|
|
13
|
+
import { normalizeTransaction, normalizeTransactions } from '../normalizers/Transaction.type';
|
|
14
|
+
import { normalizePayment, normalizePayments } from '../normalizers/Payment.type';
|
|
15
|
+
|
|
16
|
+
function getRawCommerceClient(provider?: string, config?: any): any {
|
|
17
|
+
try {
|
|
18
|
+
if (typeof (imports as any)?.createClient === 'function') {
|
|
19
|
+
return (imports as any).createClient(provider, config);
|
|
20
|
+
}
|
|
21
|
+
if (typeof (imports as any)?.init === 'function') {
|
|
22
|
+
return (imports as any).init(config);
|
|
23
|
+
}
|
|
24
|
+
if ((imports as any).commerce) return (imports as any).commerce;
|
|
25
|
+
} catch (e) {
|
|
26
|
+
// ignore and continue to other fallbacks
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
const CommerceAny: any = CommercePkg as any;
|
|
31
|
+
if (typeof CommerceAny?.createClient === 'function') return CommerceAny.createClient(provider, config);
|
|
32
|
+
if (typeof CommerceAny?.init === 'function') return CommerceAny.init(config);
|
|
33
|
+
if (CommerceAny?.commerce) return CommerceAny.commerce;
|
|
34
|
+
} catch (e) {
|
|
35
|
+
// ignore and fallback to sdk
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return (sdk as any)?.commerce || null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function createNormalizedClient(client: any) {
|
|
42
|
+
if (!client) return client;
|
|
43
|
+
if ((client as any).__normalized) return client;
|
|
44
|
+
|
|
45
|
+
const wrapped: any = Object.create(client);
|
|
46
|
+
|
|
47
|
+
if (typeof client.listProducts === 'function') {
|
|
48
|
+
wrapped.listProducts = async (...args: any[]) => {
|
|
49
|
+
const res = await client.listProducts(...args);
|
|
50
|
+
try {
|
|
51
|
+
return normalizeProductsQueryOutput(res);
|
|
52
|
+
} catch (e) {
|
|
53
|
+
return res;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (typeof client.getProductById === 'function') {
|
|
59
|
+
wrapped.getProductById = async (...args: any[]) => {
|
|
60
|
+
const res = await client.getProductById(...args);
|
|
61
|
+
try {
|
|
62
|
+
return normalizeProduct(res);
|
|
63
|
+
} catch (e) {
|
|
64
|
+
return res;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (typeof client.getProductBySlug === 'function') {
|
|
70
|
+
wrapped.getProductBySlug = async (...args: any[]) => {
|
|
71
|
+
const res = await client.getProductBySlug(...args);
|
|
72
|
+
try {
|
|
73
|
+
return normalizeProduct(res);
|
|
74
|
+
} catch (e) {
|
|
75
|
+
return res;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (typeof client.getProduct === 'function') {
|
|
81
|
+
wrapped.getProduct = async (...args: any[]) => {
|
|
82
|
+
const res = await client.getProduct(...args);
|
|
83
|
+
try {
|
|
84
|
+
return normalizeProduct(res);
|
|
85
|
+
} catch (e) {
|
|
86
|
+
return res;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const cartMethods = ['getCart', 'createCart', 'addToCart', 'updateCart', 'removeFromCart', 'applyCoupon', 'setShippingAddress'];
|
|
92
|
+
for (const m of cartMethods) {
|
|
93
|
+
if (typeof client[m] === 'function') {
|
|
94
|
+
wrapped[m] = async (...args: any[]) => {
|
|
95
|
+
const res = await client[m](...args);
|
|
96
|
+
try {
|
|
97
|
+
return normalizeCart(res);
|
|
98
|
+
} catch (e) {
|
|
99
|
+
return res;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Order methods: normalize single orders and lists of orders
|
|
106
|
+
if (typeof client.listOrders === 'function') {
|
|
107
|
+
wrapped.listOrders = async (...args: any[]) => {
|
|
108
|
+
const res = await client.listOrders(...args);
|
|
109
|
+
try {
|
|
110
|
+
if (Array.isArray(res)) return res.map(normalizeOrder);
|
|
111
|
+
if (res && Array.isArray(res.items)) return res.items.map(normalizeOrder);
|
|
112
|
+
return res;
|
|
113
|
+
} catch (e) {
|
|
114
|
+
return res;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const orderSingles = ['getOrder', 'getOrderById', 'getOrders'];
|
|
120
|
+
for (const m of orderSingles) {
|
|
121
|
+
if (typeof client[m] === 'function') {
|
|
122
|
+
wrapped[m] = async (...args: any[]) => {
|
|
123
|
+
const res = await client[m](...args);
|
|
124
|
+
try {
|
|
125
|
+
return normalizeOrder(res);
|
|
126
|
+
} catch (e) {
|
|
127
|
+
return res;
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Returns
|
|
134
|
+
if (typeof client.listReturns === 'function') {
|
|
135
|
+
wrapped.listReturns = async (...args: any[]) => {
|
|
136
|
+
const res = await client.listReturns(...args);
|
|
137
|
+
try { if (Array.isArray(res)) return normalizeReturns(res); if (res && Array.isArray(res.items)) return normalizeReturns(res.items); return res; } catch (e) { return res; }
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
if (typeof client.getReturn === 'function') {
|
|
141
|
+
wrapped.getReturn = async (...args: any[]) => { const res = await client.getReturn(...args); try { return normalizeReturn(res); } catch (e) { return res; } };
|
|
142
|
+
}
|
|
143
|
+
if (typeof client.createReturn === 'function') {
|
|
144
|
+
wrapped.createReturn = async (...args: any[]) => { const res = await client.createReturn(...args); try { return normalizeReturn(res); } catch (e) { return res; } };
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Credit memos
|
|
148
|
+
if (typeof client.listCreditMemos === 'function') {
|
|
149
|
+
wrapped.listCreditMemos = async (...args: any[]) => {
|
|
150
|
+
const res = await client.listCreditMemos(...args);
|
|
151
|
+
try { if (Array.isArray(res)) return normalizeCreditMemos(res); if (res && Array.isArray(res.items)) return normalizeCreditMemos(res.items); return res; } catch (e) { return res; }
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (typeof client.getCreditMemo === 'function') {
|
|
155
|
+
wrapped.getCreditMemo = async (...args: any[]) => { const res = await client.getCreditMemo(...args); try { return normalizeCreditMemo(res); } catch (e) { return res; } };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Invoices
|
|
159
|
+
if (typeof client.listInvoices === 'function') {
|
|
160
|
+
wrapped.listInvoices = async (...args: any[]) => {
|
|
161
|
+
const res = await client.listInvoices(...args);
|
|
162
|
+
try { if (Array.isArray(res)) return normalizeInvoices(res); if (res && Array.isArray(res.items)) return normalizeInvoices(res.items); return res; } catch (e) { return res; }
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
if (typeof client.getInvoice === 'function') {
|
|
166
|
+
wrapped.getInvoice = async (...args: any[]) => { const res = await client.getInvoice(...args); try { return normalizeInvoice(res); } catch (e) { return res; } };
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Transactions
|
|
170
|
+
if (typeof client.listTransactions === 'function') {
|
|
171
|
+
wrapped.listTransactions = async (...args: any[]) => {
|
|
172
|
+
const res = await client.listTransactions(...args);
|
|
173
|
+
try { if (Array.isArray(res)) return normalizeTransactions(res); if (res && Array.isArray(res.items)) return normalizeTransactions(res.items); return res; } catch (e) { return res; }
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
if (typeof client.getTransaction === 'function') {
|
|
177
|
+
wrapped.getTransaction = async (...args: any[]) => { const res = await client.getTransaction(...args); try { return normalizeTransaction(res); } catch (e) { return res; } };
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Payments
|
|
181
|
+
if (typeof client.listPayments === 'function') {
|
|
182
|
+
wrapped.listPayments = async (...args: any[]) => {
|
|
183
|
+
const res = await client.listPayments(...args);
|
|
184
|
+
try { if (Array.isArray(res)) return normalizePayments(res); if (res && Array.isArray(res.items)) return normalizePayments(res.items); return res; } catch (e) { return res; }
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
if (typeof client.getPayment === 'function') {
|
|
188
|
+
wrapped.getPayment = async (...args: any[]) => { const res = await client.getPayment(...args); try { return normalizePayment(res); } catch (e) { return res; } };
|
|
189
|
+
}
|
|
190
|
+
if (typeof client.createPaymentIntent === 'function') {
|
|
191
|
+
wrapped.createPaymentIntent = async (...args: any[]) => { const res = await client.createPaymentIntent(...args); try { return normalizePayment(res); } catch (e) { return res; } };
|
|
192
|
+
}
|
|
193
|
+
if (typeof client.createPayment === 'function') {
|
|
194
|
+
wrapped.createPayment = async (...args: any[]) => { const res = await client.createPayment(...args); try { return normalizePayment(res); } catch (e) { return res; } };
|
|
195
|
+
}
|
|
196
|
+
if (typeof client.capturePayment === 'function') {
|
|
197
|
+
wrapped.capturePayment = async (...args: any[]) => { const res = await client.capturePayment(...args); try { return normalizePayment(res); } catch (e) { return res; } };
|
|
198
|
+
}
|
|
199
|
+
if (typeof client.refundPayment === 'function') {
|
|
200
|
+
wrapped.refundPayment = async (...args: any[]) => { const res = await client.refundPayment(...args); try { return normalizePayment(res); } catch (e) { return res; } };
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Reviews
|
|
204
|
+
if (typeof client.listReviews === 'function') {
|
|
205
|
+
wrapped.listReviews = async (...args: any[]) => {
|
|
206
|
+
const res = await client.listReviews(...args);
|
|
207
|
+
try {
|
|
208
|
+
if (Array.isArray(res)) return res.map(normalizeReview);
|
|
209
|
+
if (res && Array.isArray(res.items)) return res.items.map(normalizeReview);
|
|
210
|
+
return res;
|
|
211
|
+
} catch (e) {
|
|
212
|
+
return res;
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (typeof client.getReview === 'function') {
|
|
218
|
+
wrapped.getReview = async (...args: any[]) => {
|
|
219
|
+
const res = await client.getReview(...args);
|
|
220
|
+
try { return normalizeReview(res); } catch (e) { return res; }
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Gift cards
|
|
225
|
+
if (typeof client.listGiftCards === 'function') {
|
|
226
|
+
wrapped.listGiftCards = async (...args: any[]) => {
|
|
227
|
+
const res = await client.listGiftCards(...args);
|
|
228
|
+
try { return normalizeGiftCards(res); } catch (e) { return res; }
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
if (typeof client.getGiftCard === 'function') {
|
|
232
|
+
wrapped.getGiftCard = async (...args: any[]) => {
|
|
233
|
+
const res = await client.getGiftCard(...args);
|
|
234
|
+
try { return normalizeGiftCard(res); } catch (e) { return res; }
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (typeof client.redeemGiftCard === 'function') {
|
|
239
|
+
wrapped.redeemGiftCard = async (...args: any[]) => {
|
|
240
|
+
const res = await client.redeemGiftCard(...args);
|
|
241
|
+
try { return normalizeGiftCard(res); } catch (e) { return res; }
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Subscriptions
|
|
246
|
+
if (typeof client.listSubscriptions === 'function') {
|
|
247
|
+
wrapped.listSubscriptions = async (...args: any[]) => {
|
|
248
|
+
const res = await client.listSubscriptions(...args);
|
|
249
|
+
try { return normalizeSubscriptions(res); } catch (e) { return res; }
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
if (typeof client.getSubscription === 'function') {
|
|
253
|
+
wrapped.getSubscription = async (...args: any[]) => {
|
|
254
|
+
const res = await client.getSubscription(...args);
|
|
255
|
+
try { return normalizeSubscription(res); } catch (e) { return res; }
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
if (typeof client.subscribe === 'function') {
|
|
259
|
+
wrapped.subscribe = async (...args: any[]) => {
|
|
260
|
+
const res = await client.subscribe(...args);
|
|
261
|
+
try { return normalizeSubscription(res); } catch (e) { return res; }
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
(wrapped as any).__normalized = true;
|
|
266
|
+
return wrapped;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* Returns a commerce client. This exported function now returns a thin
|
|
271
|
+
* compatibility wrapper around provider clients so common methods return
|
|
272
|
+
* normalized domain shapes when possible. Under the hood it still prefers
|
|
273
|
+
* layer-local providers and falls back to package-level APIs and the SDK.
|
|
274
|
+
*/
|
|
275
|
+
export function getCommerceClient(provider?: string, config?: any): any {
|
|
276
|
+
const raw = getRawCommerceClient(provider, config);
|
|
277
|
+
return createNormalizedClient(raw);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export default getCommerceClient;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { NormalizerRegistry, CommerceNormalizer } from '../utils/normalizer';
|
|
2
|
+
|
|
3
|
+
// Keep imports loose because host `@mframework/commerce` implementations may vary
|
|
4
|
+
import * as CommercePkg from '~/types';
|
|
5
|
+
const CommerceAny: any = CommercePkg as any;
|
|
6
|
+
|
|
7
|
+
export type Provider = string;
|
|
8
|
+
|
|
9
|
+
export interface CommerceLayerConfig {
|
|
10
|
+
provider: Provider;
|
|
11
|
+
providerConfig?: Record<string, any>;
|
|
12
|
+
normalizer?: CommerceNormalizer;
|
|
13
|
+
registry?: NormalizerRegistry;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function createCommerceLayer(config: CommerceLayerConfig) {
|
|
17
|
+
const registry = config.registry ?? new NormalizerRegistry();
|
|
18
|
+
const normalizer = config.normalizer ?? registry.get(config.provider);
|
|
19
|
+
|
|
20
|
+
if (!normalizer) {
|
|
21
|
+
throw new Error('No normalizer found for provider: ' + config.provider);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Create or obtain a client from `@mframework/commerce` in a resilient way
|
|
25
|
+
const client = ((): any => {
|
|
26
|
+
try {
|
|
27
|
+
if (typeof CommerceAny.createClient === 'function') {
|
|
28
|
+
return CommerceAny.createClient(config.provider, config.providerConfig);
|
|
29
|
+
}
|
|
30
|
+
if (typeof CommerceAny.init === 'function') {
|
|
31
|
+
return CommerceAny.init(config.providerConfig);
|
|
32
|
+
}
|
|
33
|
+
return CommerceAny;
|
|
34
|
+
} catch (e) {
|
|
35
|
+
// In production, surface useful message while avoiding leaking secrets
|
|
36
|
+
throw new Error('Failed to initialize commerce client for provider: ' + config.provider);
|
|
37
|
+
}
|
|
38
|
+
})();
|
|
39
|
+
|
|
40
|
+
async function getProduct(id: string) {
|
|
41
|
+
const raw = await (client.getProduct?.(id) ?? client.fetchProduct?.(id) ?? client.product?.(id));
|
|
42
|
+
return normalizer!.normalizeProduct(raw);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
client,
|
|
47
|
+
getProduct,
|
|
48
|
+
registry,
|
|
49
|
+
normalizer,
|
|
50
|
+
} as const;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default createCommerceLayer;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface CommerceNormalizer {
|
|
2
|
+
normalizeProduct(data: any): any;
|
|
3
|
+
normalizeCategory?(data: any): any;
|
|
4
|
+
normalizeCart?(data: any): any;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export class NormalizerRegistry {
|
|
8
|
+
private registry = new Map<string, CommerceNormalizer>();
|
|
9
|
+
|
|
10
|
+
register(name: string, normalizer: CommerceNormalizer) {
|
|
11
|
+
this.registry.set(name, normalizer);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
get(name: string): CommerceNormalizer | undefined {
|
|
15
|
+
return this.registry.get(name);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
list(): string[] {
|
|
19
|
+
return Array.from(this.registry.keys());
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export default NormalizerRegistry;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CommerceNormalizer } from "../normalizer";
|
|
2
|
+
|
|
3
|
+
export const magentoNormalizer: CommerceNormalizer = {
|
|
4
|
+
normalizeProduct(data: any) {
|
|
5
|
+
return {
|
|
6
|
+
id: data?.id ?? data?.sku ?? data?.item_id,
|
|
7
|
+
title: data?.name ?? data?.title,
|
|
8
|
+
price:
|
|
9
|
+
data?.price ?? data?.price_range?.minimum_price?.final_price?.value,
|
|
10
|
+
description: data?.description ?? data?.short_description,
|
|
11
|
+
images: (data?.media_gallery_entries ?? []).map((m: any) => m.file || m.url),
|
|
12
|
+
raw: data,
|
|
13
|
+
};
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
normalizeCategory(data: any) {
|
|
17
|
+
return {
|
|
18
|
+
id: data?.id,
|
|
19
|
+
name: data?.name,
|
|
20
|
+
raw: data,
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
normalizeCart(data: any) {
|
|
25
|
+
return { raw: data };
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export default magentoNormalizer;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CommerceNormalizer } from "../normalizer";
|
|
2
|
+
|
|
3
|
+
export const shopifyNormalizer: CommerceNormalizer = {
|
|
4
|
+
normalizeProduct(data: any) {
|
|
5
|
+
// Shopify payloads vary depending on SDK; this maps common fields
|
|
6
|
+
return {
|
|
7
|
+
id: data?.id ?? data?.variants?.[0]?.id,
|
|
8
|
+
title: data?.title ?? data?.name,
|
|
9
|
+
price: data?.variants?.[0]?.price ?? data?.price,
|
|
10
|
+
description: data?.body_html ?? data?.description,
|
|
11
|
+
images: (data?.images ?? []).map((i: any) => i?.src || i?.url),
|
|
12
|
+
raw: data,
|
|
13
|
+
};
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
normalizeCategory(data: any) {
|
|
17
|
+
return {
|
|
18
|
+
id: data?.id,
|
|
19
|
+
name: data?.title ?? data?.name,
|
|
20
|
+
raw: data,
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
normalizeCart(data: any) {
|
|
25
|
+
return { raw: data };
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export default shopifyNormalizer;
|
package/nuxt.config.ts
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mframework/layer-commerce",
|
|
3
|
+
"version": "0.0.3",
|
|
4
|
+
"description": "Commerce Layer for the M Framework",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"commerce",
|
|
7
|
+
"mframework-framework",
|
|
8
|
+
"nuxt",
|
|
9
|
+
"layer"
|
|
10
|
+
],
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"author": "M Framework",
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "./nuxt.config.ts",
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "vitest",
|
|
17
|
+
"build": "tsc -p tsconfig.json",
|
|
18
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
19
|
+
"lint": "eslint 'src/**/*.{ts,tsx}' || true",
|
|
20
|
+
"prepare": "npm run build",
|
|
21
|
+
"prepublishOnly": "npm run typecheck && npm run build",
|
|
22
|
+
"codegen": "npx graphql-codegen --config ./node_modules/@mframework/adapter-magento/codegen.ts"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@better-auth/stripe": "^1.4.15",
|
|
26
|
+
"@mframework/core": "^0.0.1",
|
|
27
|
+
"@mframework/sdk": "^0.0.2",
|
|
28
|
+
"@polar-sh/sdk": "^0.42.2",
|
|
29
|
+
"@storefront-ui/nuxt": "^3.1.1",
|
|
30
|
+
"@tilework/opus": "^0.0.12",
|
|
31
|
+
"history": "^5.3.0",
|
|
32
|
+
"jwt-decode": "^4.0.0",
|
|
33
|
+
"lodash-es": "^4.17.23"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@biomejs/biome": "^2.3.11",
|
|
37
|
+
"@vitest/coverage-v8": "^4.0.17",
|
|
38
|
+
"eslint": "^8.0.0",
|
|
39
|
+
"jest-cucumber": "^4.5.0",
|
|
40
|
+
"nuxt": "^4.3.0",
|
|
41
|
+
"typescript": "^5.8.2"
|
|
42
|
+
}
|
|
43
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"types": ["node", "vitest", "vue", "pinia"],
|
|
4
|
+
"baseUrl": ".",
|
|
5
|
+
"paths": {
|
|
6
|
+
"~/*": ["app/*", "./*"],
|
|
7
|
+
"@/*": ["app/*", "./*"],
|
|
8
|
+
"Util/*": ["app/utils/*"],
|
|
9
|
+
"Query/*": ["app/normalizers/*"],
|
|
10
|
+
"Component/*": ["app/components/*"],
|
|
11
|
+
"Store/*": ["app/stores/*"],
|
|
12
|
+
"Type/*": ["app/types/*"],
|
|
13
|
+
"../../routes/*": ["app/routes/*"],
|
|
14
|
+
"#imports": ["app/imports"],
|
|
15
|
+
"~/app/*": ["app/*"]
|
|
16
|
+
},
|
|
17
|
+
"declaration": true,
|
|
18
|
+
"emitDeclarationOnly": false,
|
|
19
|
+
"outDir": "dist",
|
|
20
|
+
"moduleResolution": "bundler",
|
|
21
|
+
"module": "ESNext",
|
|
22
|
+
"target": "ESNext",
|
|
23
|
+
"strict": false,
|
|
24
|
+
"jsx": "preserve",
|
|
25
|
+
"skipLibCheck": true,
|
|
26
|
+
"noEmitOnError": false
|
|
27
|
+
},
|
|
28
|
+
"include": [
|
|
29
|
+
"src",
|
|
30
|
+
"index.ts",
|
|
31
|
+
"app",
|
|
32
|
+
"app/**/*.vue",
|
|
33
|
+
"app/types",
|
|
34
|
+
"global.d.ts",
|
|
35
|
+
"app/utils/client.ts",
|
|
36
|
+
"app/utils/normalizers"
|
|
37
|
+
]
|
|
38
|
+
,
|
|
39
|
+
"exclude": [
|
|
40
|
+
"**/__tests__/**",
|
|
41
|
+
"**/*.spec.ts",
|
|
42
|
+
"**/*.spec.tsx",
|
|
43
|
+
"node_modules"
|
|
44
|
+
]
|
|
45
|
+
}
|