@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.
Files changed (355) hide show
  1. package/README.md +101 -0
  2. package/app/cart/useCart.ts +1 -0
  3. package/app/components/ChevronIcon/ChevronIcon.config.ts +17 -0
  4. package/app/components/DateSelect/DateSelect.config.ts +15 -0
  5. package/app/components/Field/Field.config.ts +14 -0
  6. package/app/components/FieldDate/FieldDate.config.ts +16 -0
  7. package/app/components/Form/Form.type.ts +8 -0
  8. package/app/components/Product/Product.config.ts +19 -0
  9. package/app/components/Product/Stock.config.ts +15 -0
  10. package/app/components/ProductCustomizableOption/ProductCustomizableOption.config.ts +5 -0
  11. package/app/components/ProductGallery/ProductGallery.config.ts +15 -0
  12. package/app/components/ProductReviews/ProductReviews.config.ts +8 -0
  13. package/app/composables/_types.ts +18 -0
  14. package/app/composables/adapters/abstract/cartAdapter.ts +0 -0
  15. package/app/composables/adapters/abstract/categoryAdapter.ts +0 -0
  16. package/app/composables/adapters/abstract/customerAdapter.ts +0 -0
  17. package/app/composables/adapters/abstract/inventoryAdapter.ts +0 -0
  18. package/app/composables/adapters/abstract/orderAdapter.ts +0 -0
  19. package/app/composables/adapters/abstract/productAdapter.ts +7 -0
  20. package/app/composables/cart/registry.ts +20 -0
  21. package/app/composables/cart/types.ts +18 -0
  22. package/app/composables/cart/useCart.ts +15 -0
  23. package/app/composables/config.ts +19 -0
  24. package/app/composables/defs/apiDefinitions.ts +55 -0
  25. package/app/composables/defs/extension.feature +40 -0
  26. package/app/composables/defs/extension.mocks.ts +39 -0
  27. package/app/composables/defs/extension.test.ts +280 -0
  28. package/app/composables/defs/extension.ts +236 -0
  29. package/app/composables/defs/index.ts +3 -0
  30. package/app/composables/defs/typeHelpers.ts +8 -0
  31. package/app/composables/defs/types.ts +136 -0
  32. package/app/composables/domain/product.ts +12 -0
  33. package/app/composables/featured-products.ts +20 -0
  34. package/app/composables/helpers/contextualizedNormalizers.feature +14 -0
  35. package/app/composables/helpers/contextualizedNormalizers.test.ts +85 -0
  36. package/app/composables/helpers/contextualizedNormalizers.ts +20 -0
  37. package/app/composables/helpers/index.ts +1 -0
  38. package/app/composables/index.ts +9 -0
  39. package/app/composables/methods/auth.ts +83 -0
  40. package/app/composables/methods/cart.ts +119 -0
  41. package/app/composables/methods/category.ts +27 -0
  42. package/app/composables/methods/checkout.ts +54 -0
  43. package/app/composables/methods/customer.ts +52 -0
  44. package/app/composables/methods/helpers.ts +5 -0
  45. package/app/composables/methods/index.ts +75 -0
  46. package/app/composables/methods/order.ts +39 -0
  47. package/app/composables/methods/product.ts +95 -0
  48. package/app/composables/methods/settings.ts +16 -0
  49. package/app/composables/models/cart.ts +95 -0
  50. package/app/composables/models/category.ts +13 -0
  51. package/app/composables/models/checkout.ts +17 -0
  52. package/app/composables/models/customer.ts +16 -0
  53. package/app/composables/models/facets.ts +25 -0
  54. package/app/composables/models/index.ts +94 -0
  55. package/app/composables/models/order.ts +43 -0
  56. package/app/composables/models/product.ts +73 -0
  57. package/app/composables/models/shared.ts +75 -0
  58. package/app/composables/orders.ts +69 -0
  59. package/app/composables/products/registry.ts +86 -0
  60. package/app/composables/products/types.ts +8 -0
  61. package/app/composables/products/useEvents.ts +26 -0
  62. package/app/composables/products/useGiftCards.ts +29 -0
  63. package/app/composables/products/useProducts.ts +12 -0
  64. package/app/composables/products/useSubscriptions.ts +29 -0
  65. package/app/composables/products.ts +30 -0
  66. package/app/composables/registry.ts +24 -0
  67. package/app/composables/useAuth.ts +43 -0
  68. package/app/composables/useBreakpoints/index.ts +1 -0
  69. package/app/composables/useBreakpoints/useBreakpoints.ts +28 -0
  70. package/app/composables/useCache.ts +38 -0
  71. package/app/composables/useCart/__tests__/useCart.spec.ts +11 -0
  72. package/app/composables/useCart/index.ts +1 -0
  73. package/app/composables/useCart/types.ts +17 -0
  74. package/app/composables/useCart/useCart.ts +46 -0
  75. package/app/composables/useCartShippingMethods/__tests__/useCartShippingMethods.spec.ts +11 -0
  76. package/app/composables/useCartShippingMethods/index.ts +1 -0
  77. package/app/composables/useCartShippingMethods/types.ts +17 -0
  78. package/app/composables/useCartShippingMethods/useCartShippingMethods.ts +47 -0
  79. package/app/composables/useCatalog.ts +26 -0
  80. package/app/composables/useContent.ts +26 -0
  81. package/app/composables/useCustomer/__tests__/useCustomer.spec.ts +25 -0
  82. package/app/composables/useCustomer/index.ts +2 -0
  83. package/app/composables/useCustomer/types.ts +17 -0
  84. package/app/composables/useCustomer/useCustomer.ts +40 -0
  85. package/app/composables/useCustomerAddress/__tests__/useCustomerAddress.spec.ts +11 -0
  86. package/app/composables/useCustomerAddress/index.ts +2 -0
  87. package/app/composables/useCustomerAddress/types.ts +17 -0
  88. package/app/composables/useCustomerAddress/useCustomerAddress.ts +55 -0
  89. package/app/composables/useCustomerOrder/__tests__/useCustomerOrder.spec.ts +11 -0
  90. package/app/composables/useCustomerOrder/adress.ts +10 -0
  91. package/app/composables/useCustomerOrder/index.ts +2 -0
  92. package/app/composables/useCustomerOrder/product.ts +37 -0
  93. package/app/composables/useCustomerOrder/types.ts +40 -0
  94. package/app/composables/useCustomerOrder/useCustomerOrder.ts +63 -0
  95. package/app/composables/useCustomerOrders/__tests__/useCustomerOrders.spec.ts +11 -0
  96. package/app/composables/useCustomerOrders/index.ts +2 -0
  97. package/app/composables/useCustomerOrders/types.ts +20 -0
  98. package/app/composables/useCustomerOrders/useCustomerOrders.ts +56 -0
  99. package/app/composables/useCustomerReturns/__tests__/useCustomerReturns.spec.ts +11 -0
  100. package/app/composables/useCustomerReturns/index.ts +2 -0
  101. package/app/composables/useCustomerReturns/types.ts +17 -0
  102. package/app/composables/useCustomerReturns/useCustomerReturns.ts +41 -0
  103. package/app/composables/useHandleError/index.ts +1 -0
  104. package/app/composables/useHandleError/types.ts +11 -0
  105. package/app/composables/useHandleError/useHandleError.ts +27 -0
  106. package/app/composables/useInventory.ts +29 -0
  107. package/app/composables/useLoading.ts +21 -0
  108. package/app/composables/useNotification.ts +21 -0
  109. package/app/composables/usePageTitle.ts +20 -0
  110. package/app/composables/useProduct/index.ts +2 -0
  111. package/app/composables/useProduct/types.ts +17 -0
  112. package/app/composables/useProduct/useProduct.ts +42 -0
  113. package/app/composables/useProductAttribute/__tests__/useProduct.mock.ts +31 -0
  114. package/app/composables/useProductAttribute/__tests__/useProductAttribute.spec.ts +14 -0
  115. package/app/composables/useProductAttribute/index.ts +1 -0
  116. package/app/composables/useProductAttribute/useProductAttribute.ts +37 -0
  117. package/app/composables/useProductRecommended/__tests__/useProductRecommended.spec.ts +12 -0
  118. package/app/composables/useProductRecommended/index.ts +1 -0
  119. package/app/composables/useProductRecommended/types.ts +17 -0
  120. package/app/composables/useProductRecommended/useProductRecommended.ts +43 -0
  121. package/app/composables/useProductReviews/__tests__/productReviews.mock.ts +20 -0
  122. package/app/composables/useProductReviews/__tests__/useProductReviews.spec.ts +22 -0
  123. package/app/composables/useProductReviews/index.ts +2 -0
  124. package/app/composables/useProductReviews/types.ts +17 -0
  125. package/app/composables/useProductReviews/useProductReviews.ts +46 -0
  126. package/app/composables/useProducts/__tests__/useProducts.spec.ts +11 -0
  127. package/app/composables/useProducts/types.ts +22 -0
  128. package/app/composables/useProducts/useProducts.ts +41 -0
  129. package/app/composables/useTax.ts +27 -0
  130. package/app/composables/validationRules/index.ts +1 -0
  131. package/app/composables/validationRules/password.feature +67 -0
  132. package/app/composables/validationRules/password.test.ts +89 -0
  133. package/app/composables/validationRules/password.ts +25 -0
  134. package/app/normalizers/Cart.query.ts +729 -0
  135. package/app/normalizers/Cart.type.ts +285 -0
  136. package/app/normalizers/Category.query.ts +146 -0
  137. package/app/normalizers/Category.type.ts +55 -0
  138. package/app/normalizers/CheckEmail.query.ts +28 -0
  139. package/app/normalizers/Checkout.query.ts +253 -0
  140. package/app/normalizers/Checkout.type.ts +77 -0
  141. package/app/normalizers/CmsBlock.query.ts +57 -0
  142. package/app/normalizers/CmsBlock.type.ts +25 -0
  143. package/app/normalizers/CmsPage.query.ts +59 -0
  144. package/app/normalizers/CmsPage.type.ts +26 -0
  145. package/app/normalizers/Config.query.ts +224 -0
  146. package/app/normalizers/Config.type.ts +196 -0
  147. package/app/normalizers/ContactForm.query.ts +49 -0
  148. package/app/normalizers/CreditMemo.type.ts +49 -0
  149. package/app/normalizers/GiftCard.type.ts +24 -0
  150. package/app/normalizers/Invoice.type.ts +58 -0
  151. package/app/normalizers/Menu.query.ts +54 -0
  152. package/app/normalizers/Menu.type.ts +22 -0
  153. package/app/normalizers/MyAccount.query.ts +268 -0
  154. package/app/normalizers/MyAccount.type.ts +129 -0
  155. package/app/normalizers/NewsletterSubscription.query.ts +38 -0
  156. package/app/normalizers/Order.query.ts +741 -0
  157. package/app/normalizers/Order.type.ts +268 -0
  158. package/app/normalizers/Payment.type.ts +28 -0
  159. package/app/normalizers/ProductAlerts.query.ts +23 -0
  160. package/app/normalizers/ProductCompare.query.ts +226 -0
  161. package/app/normalizers/ProductCompare.type.ts +90 -0
  162. package/app/normalizers/ProductList.query.ts +1620 -0
  163. package/app/normalizers/ProductList.type.ts +726 -0
  164. package/app/normalizers/Region.query.ts +58 -0
  165. package/app/normalizers/Region.type.ts +23 -0
  166. package/app/normalizers/Return.type.ts +50 -0
  167. package/app/normalizers/Review.query.ts +81 -0
  168. package/app/normalizers/Review.type.ts +42 -0
  169. package/app/normalizers/Slider.query.ts +72 -0
  170. package/app/normalizers/Slider.type.ts +26 -0
  171. package/app/normalizers/StoreInPickUp.query.ts +54 -0
  172. package/app/normalizers/StoreInPickUp.type.ts +59 -0
  173. package/app/normalizers/Subscription.type.ts +25 -0
  174. package/app/normalizers/Transaction.type.ts +20 -0
  175. package/app/normalizers/UrlRewrites.query.ts +55 -0
  176. package/app/normalizers/UrlRewrites.type.ts +25 -0
  177. package/app/normalizers/Wishlist.query.ts +202 -0
  178. package/app/normalizers/Wishlist.type.ts +42 -0
  179. package/app/pages/brand/[...slug].vue +76 -0
  180. package/app/pages/brands.vue +67 -0
  181. package/app/pages/cart.vue +142 -0
  182. package/app/pages/compare.vue +166 -0
  183. package/app/pages/departments/[...slug].vue +353 -0
  184. package/app/pages/departments/category/[...slug].vue +114 -0
  185. package/app/pages/incentive/[...id].vue +66 -0
  186. package/app/pages/invoice/[id].vue +309 -0
  187. package/app/pages/order/[id].vue +327 -0
  188. package/app/pages/product/[...id].vue +309 -0
  189. package/app/pages/product/showcases/index.vue +86 -0
  190. package/app/pages/shipment/[...id].vue +176 -0
  191. package/app/pages/shop/[...slug].vue +158 -0
  192. package/app/pages/shops.vue +76 -0
  193. package/app/pages/subscription/[...id].vue +147 -0
  194. package/app/pages/transaction/[...id].vue +74 -0
  195. package/app/routes/CategoryPage/CategoryPage.config.ts +28 -0
  196. package/app/routes/CategoryPage/CategoryPage.type.ts +8 -0
  197. package/app/routes/Checkout/Checkout.config.ts +3 -0
  198. package/app/routes/Checkout/Checkout.type.ts +14 -0
  199. package/app/routes/MyAccount/MyAccount.config.ts +1 -0
  200. package/app/routes/SearchPage/SearchPage.config.ts +1 -0
  201. package/app/routes/UrlRewrites/UrlRewrites.config.ts +5 -0
  202. package/app/stores/Cart/Cart.type.ts +26 -0
  203. package/app/stores/MyAccount/MyAccount.action.ts +7 -0
  204. package/app/stores/Notification/Notification.action.ts +40 -0
  205. package/app/stores/Notification/Notification.type.ts +16 -0
  206. package/app/stores/Popup/Popup.action.ts +30 -0
  207. package/app/stores/Product/Product.dispatcher.ts +53 -0
  208. package/app/stores/Product/Product.reducer.ts +12 -0
  209. package/app/stores/ProductList/ProductList.dispatcher.ts +35 -0
  210. package/app/stores/ProductList/ProductList.reducer.ts +13 -0
  211. package/app/stores/Store.type.ts +31 -0
  212. package/app/stores/Wishlist/Wishlist.type.ts +12 -0
  213. package/app/stores/cart.ts +218 -0
  214. package/app/stores/cartStore.ts +224 -0
  215. package/app/stores/checkout.ts +18 -0
  216. package/app/stores/compare.ts +65 -0
  217. package/app/stores/currency.js +29 -0
  218. package/app/stores/digital-products.js +11 -0
  219. package/app/stores/orders.ts +172 -0
  220. package/app/stores/product.ts +34 -0
  221. package/app/stores/productList.ts +35 -0
  222. package/app/stores/productListInfo.ts +0 -0
  223. package/app/stores/products.ts +118 -0
  224. package/app/stores/recentlyViewedProducts.ts +56 -0
  225. package/app/stores/review.ts +33 -0
  226. package/app/stores/storeInPickUp.ts +21 -0
  227. package/app/stores/user.ts +20 -0
  228. package/app/stores/wishlist.ts +46 -0
  229. package/app/types/Account.type.ts +141 -0
  230. package/app/types/Breadcrumbs.type.ts +23 -0
  231. package/app/types/CMS.type.ts +33 -0
  232. package/app/types/Category.type.ts +67 -0
  233. package/app/types/Checkout.type.ts +58 -0
  234. package/app/types/Common.type.ts +77 -0
  235. package/app/types/Config.type.ts +47 -0
  236. package/app/types/Device.type.ts +37 -0
  237. package/app/types/Direction.type.ts +23 -0
  238. package/app/types/Downloadable.type.ts +24 -0
  239. package/app/types/Error.type.ts +22 -0
  240. package/app/types/Field.type.ts +151 -0
  241. package/app/types/Global.type.ts +156 -0
  242. package/app/types/Graphql.type.ts +4497 -0
  243. package/app/types/Layout.type.ts +18 -0
  244. package/app/types/Menu.type.ts +39 -0
  245. package/app/types/MiniCart.type.ts +61 -0
  246. package/app/types/NotificationList.type.ts +34 -0
  247. package/app/types/Order.type.ts +174 -0
  248. package/app/types/Price.type.ts +72 -0
  249. package/app/types/ProductCompare.type.ts +24 -0
  250. package/app/types/ProductList.type.ts +351 -0
  251. package/app/types/Rating.type.ts +42 -0
  252. package/app/types/Router.type.ts +67 -0
  253. package/app/types/Slider.type.ts +25 -0
  254. package/app/types/StockStatus.type.ts +21 -0
  255. package/app/types/domain/index.ts +94 -0
  256. package/app/types/index.ts +33 -0
  257. package/app/types/shims.d.ts +52 -0
  258. package/app/types/tilework-opus.d.ts +48 -0
  259. package/app/utils/Address/Address.type.ts +28 -0
  260. package/app/utils/Address/index.ts +325 -0
  261. package/app/utils/Auth/IsSignedIn.ts +4 -0
  262. package/app/utils/Auth/Token.ts +9 -0
  263. package/app/utils/Base64/Base64.ts +16 -0
  264. package/app/utils/Base64/index.ts +12 -0
  265. package/app/utils/Browser/Browser.ts +29 -0
  266. package/app/utils/Browser/index.ts +12 -0
  267. package/app/utils/BrowserDatabase/BrowserDatabase.ts +70 -0
  268. package/app/utils/BrowserDatabase/index.ts +12 -0
  269. package/app/utils/CSS/CSS.ts +65 -0
  270. package/app/utils/CSS/index.ts +12 -0
  271. package/app/utils/Cache/Cache.ts +99 -0
  272. package/app/utils/Cart/Cart.ts +300 -0
  273. package/app/utils/Cart/Cart.type.ts +76 -0
  274. package/app/utils/Cart/Token.ts +59 -0
  275. package/app/utils/Cart/index.ts +13 -0
  276. package/app/utils/Category/Filters.ts +39 -0
  277. package/app/utils/Category/index.ts +12 -0
  278. package/app/utils/Common/index.ts +32 -0
  279. package/app/utils/Compare/Compare.ts +89 -0
  280. package/app/utils/Compare/index.ts +12 -0
  281. package/app/utils/Currency/Currency.ts +84 -0
  282. package/app/utils/Currency/index.ts +12 -0
  283. package/app/utils/DynamicReducer/DynamicReducer.type.ts +14 -0
  284. package/app/utils/DynamicReducer/Helper.ts +30 -0
  285. package/app/utils/DynamicReducer/index.tsx +35 -0
  286. package/app/utils/ElementTransition/ElementTransition.ts +100 -0
  287. package/app/utils/Form/Extract.ts +316 -0
  288. package/app/utils/Form/Form.ts +46 -0
  289. package/app/utils/Form/Form.type.ts +60 -0
  290. package/app/utils/Form/Transform.ts +33 -0
  291. package/app/utils/FormPortalCollector/index.ts +45 -0
  292. package/app/utils/History/History.type.ts +31 -0
  293. package/app/utils/History/index.ts +17 -0
  294. package/app/utils/Manipulations/Array.ts +18 -0
  295. package/app/utils/Manipulations/Date.ts +36 -0
  296. package/app/utils/Manipulations/index.ts +14 -0
  297. package/app/utils/Media/Media.ts +27 -0
  298. package/app/utils/Media/index.ts +13 -0
  299. package/app/utils/Menu/Menu.ts +116 -0
  300. package/app/utils/Menu/Menu.type.ts +37 -0
  301. package/app/utils/Menu/index.ts +12 -0
  302. package/app/utils/Mobile/index.ts +13 -0
  303. package/app/utils/Mobile/isMobile.ts +34 -0
  304. package/app/utils/Orders/Orders.ts +71 -0
  305. package/app/utils/Orders/Orders.type.ts +19 -0
  306. package/app/utils/Orders/index.ts +13 -0
  307. package/app/utils/Polyfill/index.ts +336 -0
  308. package/app/utils/Preload/CategoryPreload.ts +74 -0
  309. package/app/utils/Preload/ProductPreload.ts +28 -0
  310. package/app/utils/Preload/index.ts +75 -0
  311. package/app/utils/Price/Price.config.ts +189 -0
  312. package/app/utils/Price/Price.ts +63 -0
  313. package/app/utils/Price/index.ts +12 -0
  314. package/app/utils/Product/Extract.ts +652 -0
  315. package/app/utils/Product/Product.ts +575 -0
  316. package/app/utils/Product/Product.type.ts +260 -0
  317. package/app/utils/Product/Transform.ts +382 -0
  318. package/app/utils/Product/index.ts +12 -0
  319. package/app/utils/Promise/MakeCancelable.ts +44 -0
  320. package/app/utils/Promise/Promise.type.ts +15 -0
  321. package/app/utils/Promise/index.ts +13 -0
  322. package/app/utils/Query/Field.ts +71 -0
  323. package/app/utils/Query/Fragment.ts +22 -0
  324. package/app/utils/Query/PrepareDocument.ts +119 -0
  325. package/app/utils/Query/Query.type.ts +26 -0
  326. package/app/utils/Query/index.ts +15 -0
  327. package/app/utils/Request/Config.ts +21 -0
  328. package/app/utils/Request/DataContainer.ts +102 -0
  329. package/app/utils/Request/Debounce.ts +48 -0
  330. package/app/utils/Request/Error.ts +31 -0
  331. package/app/utils/Request/Hash.ts +88 -0
  332. package/app/utils/Request/LowPriorityLoad.ts +32 -0
  333. package/app/utils/Request/LowPriorityRender.ts +55 -0
  334. package/app/utils/Request/Mutation.ts +25 -0
  335. package/app/utils/Request/Query.ts +25 -0
  336. package/app/utils/Request/QueryDispatcher.ts +135 -0
  337. package/app/utils/Request/Request.ts +310 -0
  338. package/app/utils/Store/Store.type.ts +26 -0
  339. package/app/utils/Store/index.ts +71 -0
  340. package/app/utils/Url/Url.ts +297 -0
  341. package/app/utils/Url/index.ts +12 -0
  342. package/app/utils/Validator/Config.ts +96 -0
  343. package/app/utils/Validator/Validator.ts +268 -0
  344. package/app/utils/Validator/Validator.type.ts +47 -0
  345. package/app/utils/Validator/index.ts +12 -0
  346. package/app/utils/Wishlist/Wishlist.ts +65 -0
  347. package/app/utils/Wishlist/index.ts +12 -0
  348. package/app/utils/client.ts +280 -0
  349. package/app/utils/index.ts +53 -0
  350. package/app/utils/normalizer.ts +23 -0
  351. package/app/utils/normalizers/magento.ts +29 -0
  352. package/app/utils/normalizers/shopify.ts +29 -0
  353. package/nuxt.config.ts +11 -0
  354. package/package.json +43 -0
  355. 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
+ }