@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,15 @@
|
|
|
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
|
+
export type CancelablePromise<T = unknown> = {
|
|
13
|
+
promise: Promise<T>;
|
|
14
|
+
cancel: () => void;
|
|
15
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
13
|
+
export { default as makeCancelable } from './MakeCancelable';
|
|
@@ -0,0 +1,71 @@
|
|
|
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 { FieldArgument } from './Query.type';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Builds GraphQL query according to https://graphql.org/learn/queries/ documentation
|
|
16
|
+
* @class Query
|
|
17
|
+
* @extends Field
|
|
18
|
+
* @namespace ../../utils/../../normalizers/Field
|
|
19
|
+
*/
|
|
20
|
+
export class Field {
|
|
21
|
+
name = '';
|
|
22
|
+
|
|
23
|
+
alias = '';
|
|
24
|
+
|
|
25
|
+
children: Field[] = [];
|
|
26
|
+
|
|
27
|
+
args: FieldArgument[] = [];
|
|
28
|
+
|
|
29
|
+
// eslint-disable-next-line @mframework/mframework-guidelines/use-magic-construct
|
|
30
|
+
constructor(name: string) {
|
|
31
|
+
this.__construct(name);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
__construct(name: string): void {
|
|
35
|
+
this.name = name;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
addField(field: string | Field): this {
|
|
39
|
+
if (typeof field === 'string') {
|
|
40
|
+
this.children.push(new Field(field));
|
|
41
|
+
} else if (field instanceof Field) {
|
|
42
|
+
this.children.push(field);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
setAlias(alias: string): this {
|
|
49
|
+
this.alias = `${alias}:`;
|
|
50
|
+
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
addFieldList(fieldList: Array<string | Field>): this {
|
|
55
|
+
fieldList.forEach(this.addField.bind(this));
|
|
56
|
+
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
addArgument<T>(name: string, type: string, value: T): this {
|
|
61
|
+
this.args.push({
|
|
62
|
+
name,
|
|
63
|
+
type,
|
|
64
|
+
value,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export default Field;
|
|
@@ -0,0 +1,22 @@
|
|
|
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 Field from './Field';
|
|
13
|
+
|
|
14
|
+
/** @namespace ../../utils/../../normalizers/Fragment */
|
|
15
|
+
export class Fragment extends Field {
|
|
16
|
+
__construct(name: string): void {
|
|
17
|
+
super.__construct(name);
|
|
18
|
+
(this as any).name = `... on ${name}`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default Fragment;
|
|
@@ -0,0 +1,119 @@
|
|
|
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 { AbstractField, Mutation, Query } from '@tilework/opus';
|
|
13
|
+
|
|
14
|
+
import { QueryObject, QueryVariables } from '../../utils/Request/Request';
|
|
15
|
+
|
|
16
|
+
import { FieldType } from './Query.type';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Prepare request body string from query list (all entries must be instances of Query).
|
|
20
|
+
* @param {Array<Field>} queries
|
|
21
|
+
* @return {String} JSON String, format: `{"query":"{alias: queryName (attr:key) { field1, field2 }}"}`
|
|
22
|
+
* @namespace ../../utils/../../normalizers/PrepareDocument/prepareFieldString */
|
|
23
|
+
export const prepareFieldString = <T>(
|
|
24
|
+
rootField: AbstractField<string, T, boolean> | string,
|
|
25
|
+
accArgs: Record<string, [string, unknown]> = {},
|
|
26
|
+
): string => {
|
|
27
|
+
// If the field is a plain string, return it directly.
|
|
28
|
+
if (typeof rootField === 'string') return rootField;
|
|
29
|
+
|
|
30
|
+
const {
|
|
31
|
+
alias, name, args, children,
|
|
32
|
+
} = rootField;
|
|
33
|
+
|
|
34
|
+
const resolvedArgs = (args || []).reduce((
|
|
35
|
+
acc: string[],
|
|
36
|
+
arg: {
|
|
37
|
+
name: string;
|
|
38
|
+
type: string;
|
|
39
|
+
value: unknown;
|
|
40
|
+
},
|
|
41
|
+
): string[] => {
|
|
42
|
+
if (!accArgs[arg.name]) {
|
|
43
|
+
// eslint-disable-next-line no-param-reassign
|
|
44
|
+
accArgs[arg.name] = [] as unknown as [string, unknown];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const index = accArgs[arg.name].push([arg.type, arg.value]);
|
|
48
|
+
|
|
49
|
+
return [...acc, `${arg.name}:$${arg.name}_${index}`];
|
|
50
|
+
}, [] as string[]);
|
|
51
|
+
|
|
52
|
+
const formattedArgs = resolvedArgs.length ? `(${resolvedArgs.join(',')})` : '';
|
|
53
|
+
|
|
54
|
+
const formattedChildren = (children || []).map((field) => prepareFieldString(field, accArgs)).join(',');
|
|
55
|
+
|
|
56
|
+
const body = (children && children.length) ? `{${formattedChildren}}` : '';
|
|
57
|
+
|
|
58
|
+
return `${alias || ''}${name}${formattedArgs}${body}`;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/** @namespace ../../utils/../../normalizers/PrepareDocument/prepareRequest */
|
|
62
|
+
export const prepareRequest = <T>(fields: AbstractField<string, T, boolean>[], type: FieldType): QueryObject => {
|
|
63
|
+
const fieldsArray = Array.isArray(fields) ? fields : [fields];
|
|
64
|
+
|
|
65
|
+
if (type !== FieldType.MUTATION && type !== FieldType.QUERY) {
|
|
66
|
+
// we only support Mutation and Query types
|
|
67
|
+
throw new Error(`GraphQL document type "${type}" is not supported.`);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const variables: QueryVariables = {};
|
|
71
|
+
const accArgs = {};
|
|
72
|
+
|
|
73
|
+
// prepare fields from each field passed
|
|
74
|
+
const fieldStrings = fieldsArray.map((field) => prepareFieldString(field, accArgs)).join(',');
|
|
75
|
+
|
|
76
|
+
// go through argument accumulator collected in "prepareFieldString", join values
|
|
77
|
+
// into the format "$var:Type" and append variable value to variables field
|
|
78
|
+
const resolvedArgs = Object.entries(accArgs).reduce((acc, [name, dataArray]): string[] => {
|
|
79
|
+
(dataArray as Array<string[]>).forEach(([type, value], i: number) => {
|
|
80
|
+
const variable = `${name}_${i + 1}`;
|
|
81
|
+
|
|
82
|
+
acc.push(`$${variable}:${type}`);
|
|
83
|
+
variables[variable] = value;
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
return acc;
|
|
87
|
+
}, [] as string[]);
|
|
88
|
+
|
|
89
|
+
// Wrap arguments with "()" and join using ","
|
|
90
|
+
const formattedArgs = resolvedArgs.length ? `(${resolvedArgs.join(',')})` : '';
|
|
91
|
+
|
|
92
|
+
if (process.env.NODE_ENV === 'development') {
|
|
93
|
+
// eslint-disable-next-line no-console
|
|
94
|
+
console.log(
|
|
95
|
+
'%cGraphQL Request',
|
|
96
|
+
'background-color: #ff00ff; color: #ffffff; font-weight: bold; border-radius: 5px; padding: 2px 5px',
|
|
97
|
+
{
|
|
98
|
+
query: `${type}${formattedArgs}{${fieldStrings}}`,
|
|
99
|
+
variables,
|
|
100
|
+
},
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return {
|
|
105
|
+
// format like "query($var_1:String){test(arg: $var_1){id}}"
|
|
106
|
+
query: `${type}${formattedArgs}{${fieldStrings}}`,
|
|
107
|
+
variables,
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
/** @namespace ../../utils/../../normalizers/PrepareDocument/prepareMutation */
|
|
112
|
+
export const prepareMutation = <T>(
|
|
113
|
+
mutations: Mutation<string, T, boolean>[],
|
|
114
|
+
): QueryObject => prepareRequest(mutations, FieldType.MUTATION);
|
|
115
|
+
|
|
116
|
+
/** @namespace ../../utils/../../normalizers/PrepareDocument/prepareQuery */
|
|
117
|
+
export const prepareQuery = <T>(
|
|
118
|
+
queries: Query<string, T, boolean>[],
|
|
119
|
+
): QueryObject => prepareRequest(queries, FieldType.QUERY);
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
export enum FieldType {
|
|
13
|
+
MUTATION = 'mutation',
|
|
14
|
+
QUERY = 'query',
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface FieldArgument {
|
|
18
|
+
name: string;
|
|
19
|
+
type: string;
|
|
20
|
+
value: unknown;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface PreparedRequest {
|
|
24
|
+
query: string;
|
|
25
|
+
variables: unknown;
|
|
26
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
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 './PrepareDocument';
|
|
13
|
+
export * from './Query.type';
|
|
14
|
+
export { default as Field } from './Field';
|
|
15
|
+
export { default as Fragment } from './Fragment';
|
|
@@ -0,0 +1,21 @@
|
|
|
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 const ONE_MONTH_IN_SECONDS = 2592000;
|
|
13
|
+
export const FIVE_MINUTES_IN_SECONDS = 300;
|
|
14
|
+
export const DEFAULT_ERROR_MESSAGE = __('Something went wrong!');
|
|
15
|
+
export const EV_PRIORITY_LOAD_END = 'pr_end';
|
|
16
|
+
export const INTERVAL_OF_CHECK = 50; // ms
|
|
17
|
+
export const GRAPHQL_URI = '/graphql';
|
|
18
|
+
export const WINDOW_ID = 'WINDOW_ID';
|
|
19
|
+
export const HTTP_503_SERVICE_UNAVAILABLE = 503;
|
|
20
|
+
export const HTTP_410_GONE = 410;
|
|
21
|
+
export const HTTP_201_CREATED = 201;
|
|
@@ -0,0 +1,102 @@
|
|
|
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 { Query } from '@tilework/opus';
|
|
13
|
+
import { PureComponent } from 'react';
|
|
14
|
+
|
|
15
|
+
import { NetworkError } from '../../types/Common.type';
|
|
16
|
+
import { noopFn } from '../../utils/Common';
|
|
17
|
+
import { makeCancelable } from '../../utils/Promise';
|
|
18
|
+
import { CancelablePromise } from '../../utils/Promise/Promise.type';
|
|
19
|
+
import { prepareQuery } from '../../utils/Query';
|
|
20
|
+
import { hash } from '../../utils/Request/Hash';
|
|
21
|
+
import { executeGet, listenForBroadCast } from '../../utils/Request/Request';
|
|
22
|
+
|
|
23
|
+
import { ONE_MONTH_IN_SECONDS } from './Config';
|
|
24
|
+
|
|
25
|
+
/** @namespace ../../utils/Request/DataContainer */
|
|
26
|
+
export class DataContainer<
|
|
27
|
+
P = Record<string, unknown>,
|
|
28
|
+
S = Record<string, unknown>,
|
|
29
|
+
> extends PureComponent<P, S> {
|
|
30
|
+
protected dataModelName = '';
|
|
31
|
+
|
|
32
|
+
protected isShouldListenForBroadcast = true;
|
|
33
|
+
|
|
34
|
+
protected cacheTTL = ONE_MONTH_IN_SECONDS;
|
|
35
|
+
|
|
36
|
+
protected promise?: CancelablePromise<unknown>;
|
|
37
|
+
|
|
38
|
+
__construct(
|
|
39
|
+
props: P,
|
|
40
|
+
dataModelName = '',
|
|
41
|
+
isShouldListenForBroadcast = true,
|
|
42
|
+
cacheTTL = ONE_MONTH_IN_SECONDS,
|
|
43
|
+
): void {
|
|
44
|
+
super.__construct?.(props);
|
|
45
|
+
|
|
46
|
+
this.dataModelName = dataModelName;
|
|
47
|
+
this.isShouldListenForBroadcast = isShouldListenForBroadcast;
|
|
48
|
+
this.cacheTTL = cacheTTL;
|
|
49
|
+
this.promise = undefined;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
componentWillUnmount(): void {
|
|
53
|
+
if (this.promise) {
|
|
54
|
+
this.promise.cancel();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
fetchData<T = unknown, E = NetworkError | NetworkError[]>(
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
60
|
+
rawQueries: Query<string, any, boolean>[],
|
|
61
|
+
onSuccess: (x: T) => void = noopFn,
|
|
62
|
+
onError: (x: E) => void = noopFn,
|
|
63
|
+
takeFromWindowCache = true,
|
|
64
|
+
): void {
|
|
65
|
+
const preparedQuery = prepareQuery(rawQueries);
|
|
66
|
+
const { query, variables } = preparedQuery;
|
|
67
|
+
const queryHash = hash(query + JSON.stringify(variables));
|
|
68
|
+
|
|
69
|
+
if (!window.dataCache) {
|
|
70
|
+
window.dataCache = {};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (takeFromWindowCache && window.dataCache[queryHash]) {
|
|
74
|
+
onSuccess(window.dataCache[queryHash] as T);
|
|
75
|
+
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
this.promise = makeCancelable(
|
|
80
|
+
executeGet(preparedQuery, this.dataModelName, this.cacheTTL),
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
this.promise.promise.then(
|
|
84
|
+
/** @namespace ../../utils/Request/DataContainer/DataContainer/fetchData/then */
|
|
85
|
+
(response) => {
|
|
86
|
+
(window.dataCache || {})[queryHash] = response;
|
|
87
|
+
onSuccess(response as T);
|
|
88
|
+
},
|
|
89
|
+
/** @namespace ../../utils/Request/DataContainer/DataContainer/fetchData/then/onError/catch */
|
|
90
|
+
(err) => onError(err),
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
if (this.isShouldListenForBroadcast) {
|
|
94
|
+
listenForBroadCast<T>(this.dataModelName).then(
|
|
95
|
+
/** @namespace ../../utils/Request/DataContainer/DataContainer/fetchData/listenForBroadCast/then/onSuccess */
|
|
96
|
+
onSuccess,
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export default DataContainer;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// TODO
|
|
2
|
+
/** @namespace ../../utils/Request/Debounce/debounce */
|
|
3
|
+
/**
|
|
4
|
+
* M Framework - Flexible backend agnostic framework.
|
|
5
|
+
*
|
|
6
|
+
* Copyright © Meeovi, LTD. All rights reserved.
|
|
7
|
+
* See LICENSE for license details.
|
|
8
|
+
*
|
|
9
|
+
* @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
|
|
10
|
+
* @package mframework/mframework
|
|
11
|
+
* @link https://github.com/meeovi/mframework
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
export const debounce = <T>(
|
|
15
|
+
callback: (...args: T[]) => void | Promise<void>, delay: number): (...args: T[]) => void => {
|
|
16
|
+
// eslint-disable-next-line fp/no-let
|
|
17
|
+
let timeout: NodeJS.Timeout;
|
|
18
|
+
|
|
19
|
+
return (...args: T[]) => {
|
|
20
|
+
clearTimeout(timeout);
|
|
21
|
+
timeout = setTimeout(() => callback.apply(this, args as []), delay);
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/** @namespace ../../utils/Request/Debounce */
|
|
26
|
+
export class Debouncer {
|
|
27
|
+
timeout!: NodeJS.Timeout;
|
|
28
|
+
|
|
29
|
+
handler = (): void => {};
|
|
30
|
+
|
|
31
|
+
startDebounce = <T = unknown>(
|
|
32
|
+
callback: (...args: T[]) => void,
|
|
33
|
+
delay: number,
|
|
34
|
+
) => (...args: T[]): void => {
|
|
35
|
+
clearTimeout(this.timeout);
|
|
36
|
+
this.handler = () => callback.apply(this, args);
|
|
37
|
+
this.timeout = setTimeout(this.handler, delay);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
cancelDebounce = (): void => {
|
|
41
|
+
clearTimeout(this.timeout);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
cancelDebounceAndExecuteImmediately = (): void => {
|
|
45
|
+
clearTimeout(this.timeout);
|
|
46
|
+
this.handler();
|
|
47
|
+
};
|
|
48
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
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 { NetworkError } from '../../types/Common.type';
|
|
13
|
+
|
|
14
|
+
import { DEFAULT_ERROR_MESSAGE } from './Config';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Get error message from an array of errors from graphql, or from a regular error object.
|
|
18
|
+
* @param array | object error
|
|
19
|
+
* @param string optional default error message if couldn't get any from the given error
|
|
20
|
+
* @return string message
|
|
21
|
+
* @namespace ../../utils/Request/Error/getErrorMessage */
|
|
22
|
+
export const getErrorMessage = (
|
|
23
|
+
error: NetworkError | NetworkError[],
|
|
24
|
+
defaultMessage: string = DEFAULT_ERROR_MESSAGE,
|
|
25
|
+
): string => {
|
|
26
|
+
if (Array.isArray(error)) {
|
|
27
|
+
return error?.[0].message || defaultMessage;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return error?.message || defaultMessage;
|
|
31
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
/* eslint-disable no-magic-numbers */
|
|
4
|
+
/* eslint-disable import/prefer-default-export */
|
|
5
|
+
/* eslint-disable no-fallthrough */
|
|
6
|
+
/* eslint-disable no-bitwise */
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* M Framework - Flexible backend agnostic framework.
|
|
10
|
+
*
|
|
11
|
+
* Copyright © Meeovi, LTD. All rights reserved.
|
|
12
|
+
* See LICENSE for license details.
|
|
13
|
+
*
|
|
14
|
+
* @license OSL-3.0 (Open Software License ("OSL") v. 3.0)
|
|
15
|
+
* @package mframework/mframework
|
|
16
|
+
* @link https://github.com/meeovi/mframework
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
// TODO seed is always undefined! Why ?
|
|
20
|
+
/**
|
|
21
|
+
* JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
|
|
22
|
+
*
|
|
23
|
+
* @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
|
|
24
|
+
* @see http://github.com/garycourt/murmurhash-js
|
|
25
|
+
* @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
|
|
26
|
+
* @see http://sites.google.com/site/murmurhash/
|
|
27
|
+
*
|
|
28
|
+
* @param {string} key ASCII only
|
|
29
|
+
* @param {number} seed Positive integer only
|
|
30
|
+
* @return {number} 32-bit positive integer hash
|
|
31
|
+
* @namespace ../../utils/Request/Hash/hash */
|
|
32
|
+
export const hash = (key: string, seed = 1): number => {
|
|
33
|
+
// eslint-disable-next-line one-var, fp/no-let
|
|
34
|
+
let h1,
|
|
35
|
+
h1b,
|
|
36
|
+
k1,
|
|
37
|
+
i;
|
|
38
|
+
|
|
39
|
+
const remainder = key.length & 3;
|
|
40
|
+
const bytes = key.length - remainder;
|
|
41
|
+
const c1 = 0xcc9e2d51;
|
|
42
|
+
const c2 = 0x1b873593;
|
|
43
|
+
|
|
44
|
+
h1 = seed;
|
|
45
|
+
i = 0;
|
|
46
|
+
|
|
47
|
+
// eslint-disable-next-line fp/no-loops
|
|
48
|
+
while (i < bytes) {
|
|
49
|
+
k1 = ((key.charCodeAt(i) & 0xff))
|
|
50
|
+
| ((key.charCodeAt(++i) & 0xff) << 8)
|
|
51
|
+
| ((key.charCodeAt(++i) & 0xff) << 16)
|
|
52
|
+
| ((key.charCodeAt(++i) & 0xff) << 24);
|
|
53
|
+
|
|
54
|
+
++i;
|
|
55
|
+
|
|
56
|
+
k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;
|
|
57
|
+
k1 = (k1 << 15) | (k1 >>> 17);
|
|
58
|
+
k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;
|
|
59
|
+
|
|
60
|
+
h1 ^= k1;
|
|
61
|
+
h1 = (h1 << 13) | (h1 >>> 19);
|
|
62
|
+
h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
|
|
63
|
+
h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
k1 = 0;
|
|
67
|
+
|
|
68
|
+
// eslint-disable-next-line default-case
|
|
69
|
+
switch (remainder) {
|
|
70
|
+
case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
|
|
71
|
+
case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
|
|
72
|
+
case 1: k1 ^= (key.charCodeAt(i) & 0xff);
|
|
73
|
+
k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;
|
|
74
|
+
k1 = (k1 << 15) | (k1 >>> 17);
|
|
75
|
+
k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;
|
|
76
|
+
h1 ^= k1;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
h1 ^= key.length;
|
|
80
|
+
|
|
81
|
+
h1 ^= h1 >>> 16;
|
|
82
|
+
h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
|
|
83
|
+
h1 ^= h1 >>> 13;
|
|
84
|
+
h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
|
|
85
|
+
h1 ^= h1 >>> 16;
|
|
86
|
+
|
|
87
|
+
return h1 >>> 0;
|
|
88
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
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 { INTERVAL_OF_CHECK } from './Config';
|
|
13
|
+
|
|
14
|
+
/** @namespace ../../utils/Request/LowPriorityLoad/waitForPriorityLoad */
|
|
15
|
+
export const waitForPriorityLoad = () => new Promise((resolve) => {
|
|
16
|
+
function waitForIt(){
|
|
17
|
+
if (window.isPriorityLoaded) {
|
|
18
|
+
resolve(null);
|
|
19
|
+
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
setTimeout(waitForIt, INTERVAL_OF_CHECK);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
waitForIt();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
/** @namespace ../../utils/Request/LowPriorityLoad/setLoadedFlag */
|
|
30
|
+
export const setLoadedFlag = () => {
|
|
31
|
+
window.isPriorityLoaded = true;
|
|
32
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
ComponentType,
|
|
14
|
+
lazy,
|
|
15
|
+
useEffect, useState,
|
|
16
|
+
} from 'react';
|
|
17
|
+
|
|
18
|
+
import { EV_PRIORITY_LOAD_END } from './Config';
|
|
19
|
+
import { waitForPriorityLoad } from './LowPriorityLoad';
|
|
20
|
+
|
|
21
|
+
/** @namespace ../../utils/Request/LowPriorityRender/lowPriorityLazy */
|
|
22
|
+
export const lowPriorityLazy = (callback: () => Promise<{ default: ComponentType<any> }>) => lazy(async () => {
|
|
23
|
+
await waitForPriorityLoad();
|
|
24
|
+
|
|
25
|
+
const ev = new Event(EV_PRIORITY_LOAD_END);
|
|
26
|
+
document.dispatchEvent(ev);
|
|
27
|
+
|
|
28
|
+
return callback();
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
/** @namespace ../../utils/Request/LowPriorityRender/AfterPriority */
|
|
32
|
+
|
|
33
|
+
export function AfterPriority(
|
|
34
|
+
{ children, fallback }: { children: JSX.Element; fallback?: JSX.Element },
|
|
35
|
+
): JSX.Element {
|
|
36
|
+
const [isPriorityLoaded, setIsPriorityLoaded] = useState(window.isPriorityLoaded);
|
|
37
|
+
|
|
38
|
+
function onPriorityLoad() {
|
|
39
|
+
setIsPriorityLoaded(true);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
document.addEventListener(EV_PRIORITY_LOAD_END, onPriorityLoad, { once: true });
|
|
44
|
+
|
|
45
|
+
return () => {
|
|
46
|
+
document.removeEventListener(EV_PRIORITY_LOAD_END, onPriorityLoad);
|
|
47
|
+
};
|
|
48
|
+
}, []);
|
|
49
|
+
|
|
50
|
+
if (!isPriorityLoaded && fallback) {
|
|
51
|
+
return fallback;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return children;
|
|
55
|
+
}
|