@jetshop/core 5.13.12-0 → 5.14.0-alpha.49df897e

Sign up to get free protection for your applications and to get access to all the features.
Files changed (557) hide show
  1. package/ChannelHandler/CategoryPathnameRedirectQuery.gql +9 -9
  2. package/ChannelHandler/ChannelHandler.d.ts +52 -50
  3. package/ChannelHandler/ChannelHandler.js +114 -108
  4. package/ChannelHandler/ChannelHandler.js.map +1 -1
  5. package/ChannelHandler/PagePathnameRedirectQuery.gql +9 -9
  6. package/ChannelHandler/PreserveRedirectRouteQuery.gql +19 -19
  7. package/ChannelHandler/ProductPathnameRedirectQuery.gql +9 -9
  8. package/ChannelHandler/StartPagePathnameRedirectQuery.gql +9 -9
  9. package/ChannelHandler/channelUtils.d.ts +72 -68
  10. package/ChannelHandler/channelUtils.js +372 -266
  11. package/ChannelHandler/channelUtils.js.map +1 -1
  12. package/ChannelHandler/redirectUtils.d.ts +4 -4
  13. package/ChannelHandler/redirectUtils.js +49 -49
  14. package/ChannelHandler/redirectUtils.test.js +514 -538
  15. package/ChannelHandler/redirectUtilsGroupedChannels.test.js +732 -0
  16. package/analytics/Analytics.d.ts +18 -18
  17. package/analytics/Analytics.js +56 -56
  18. package/analytics/AnalyticsProvider.d.ts +42 -42
  19. package/analytics/AnalyticsProvider.js +177 -177
  20. package/analytics/AnalyticsProvider.js.map +1 -1
  21. package/analytics/deprecatedTracking.d.ts +17 -17
  22. package/analytics/deprecatedTracking.js +32 -32
  23. package/analytics/integrations/ga4.d.ts +23 -23
  24. package/analytics/integrations/ga4.js +144 -145
  25. package/analytics/integrations/ga4.js.map +1 -1
  26. package/analytics/integrations/gtag/gtag.d.ts +8 -8
  27. package/analytics/integrations/gtag/gtag.js +180 -180
  28. package/analytics/integrations/gtag/index.d.ts +1 -1
  29. package/analytics/integrations/gtag/index.js +1 -1
  30. package/analytics/integrations/gtm/index.d.ts +12 -12
  31. package/analytics/integrations/gtm/index.js +200 -200
  32. package/analytics/integrations/gtm/referrerModifier.d.ts +1 -1
  33. package/analytics/integrations/gtm/referrerModifier.js +61 -61
  34. package/analytics/integrations/releware/index.d.ts +3 -3
  35. package/analytics/integrations/releware/index.js +38 -38
  36. package/analytics/integrations/unslugify.d.ts +1 -1
  37. package/analytics/integrations/unslugify.js +15 -17
  38. package/analytics/integrations/unslugify.js.map +1 -1
  39. package/analytics/trackerRegistry.d.ts +101 -101
  40. package/analytics/trackerRegistry.js +219 -219
  41. package/analytics/trackerRegistry.test.js +160 -160
  42. package/analytics/tracking.d.ts +14 -14
  43. package/analytics/tracking.js +71 -71
  44. package/analytics/utils/breadcrumbsWithoutProduct.d.ts +1 -1
  45. package/analytics/utils/breadcrumbsWithoutProduct.js +8 -8
  46. package/analytics/utils/script.d.ts +8 -8
  47. package/analytics/utils/script.js +39 -39
  48. package/analytics/webVitals.d.ts +5 -5
  49. package/analytics/webVitals.js +38 -38
  50. package/boot/AuthHandler.d.ts +14 -14
  51. package/boot/AuthHandler.js +38 -38
  52. package/boot/ChannelsQuery.gql +7 -7
  53. package/boot/PreviewHandler.d.ts +7 -7
  54. package/boot/PreviewHandler.js +13 -13
  55. package/boot/SharedTree.d.ts +25 -25
  56. package/boot/SharedTree.js +28 -28
  57. package/boot/addMissingConfig.d.ts +5 -5
  58. package/boot/addMissingConfig.js +33 -33
  59. package/boot/apollo.d.ts +21 -21
  60. package/boot/apollo.js +197 -197
  61. package/boot/client/entrypoint.d.ts +1 -1
  62. package/boot/client/entrypoint.js +4 -4
  63. package/boot/client/index.d.ts +1 -1
  64. package/boot/client/index.js +1 -1
  65. package/boot/client/startClient.d.ts +4 -4
  66. package/boot/client/startClient.js +142 -142
  67. package/boot/client-schema.gql +59 -59
  68. package/boot/server/IntervalQuery.d.ts +32 -32
  69. package/boot/server/IntervalQuery.js +94 -94
  70. package/boot/server/IntervalQuery.test.js +280 -280
  71. package/boot/server/PersistedApolloClient.d.ts +20 -20
  72. package/boot/server/PersistedApolloClient.js +39 -39
  73. package/boot/server/PersistedApolloClient.test.js +233 -233
  74. package/boot/server/asyncErrorHandler.d.ts +3 -3
  75. package/boot/server/asyncErrorHandler.js +4 -4
  76. package/boot/server/breakpointMiddleware.d.ts +3 -3
  77. package/boot/server/breakpointMiddleware.js +9 -9
  78. package/boot/server/createApolloServer.d.ts +28 -28
  79. package/boot/server/createApolloServer.js +143 -143
  80. package/boot/server/createApolloServer.test.js +114 -114
  81. package/boot/server/createDevServer.d.ts +14 -14
  82. package/boot/server/createDevServer.js +29 -29
  83. package/boot/server/createRenderer.d.ts +28 -28
  84. package/boot/server/createRenderer.js +235 -235
  85. package/boot/server/createServer.d.ts +14 -14
  86. package/boot/server/createServer.js +41 -41
  87. package/boot/server/entrypoint.d.ts +1 -1
  88. package/boot/server/entrypoint.js +35 -35
  89. package/boot/server/getPrefetchFiles.d.ts +10 -10
  90. package/boot/server/getPrefetchFiles.js +19 -19
  91. package/boot/server/getPreloadAssets.d.ts +10 -10
  92. package/boot/server/getPreloadAssets.js +17 -17
  93. package/boot/server/getPreloadAssets.test.js +133 -133
  94. package/boot/server/index.d.ts +9 -9
  95. package/boot/server/index.js +122 -122
  96. package/boot/server/listen.d.ts +13 -13
  97. package/boot/server/listen.js +16 -16
  98. package/boot/server/overwriteServerIntl.js +1 -1
  99. package/boot/server/persistedQueries/PersistedClient.d.ts +22 -22
  100. package/boot/server/persistedQueries/PersistedClient.js +57 -57
  101. package/boot/server/persistedQueries/__tests__/getPersistedQueriesForRequest.test.js +201 -201
  102. package/boot/server/persistedQueries/__tests__/mockQuery.gql +6 -6
  103. package/boot/server/persistedQueries/getPersistedQueriesForRequest.d.ts +3 -3
  104. package/boot/server/persistedQueries/getPersistedQueriesForRequest.js +26 -26
  105. package/boot/server/saleSource.test.js +39 -39
  106. package/boot/server/salesSource.d.ts +8 -8
  107. package/boot/server/salesSource.js +15 -15
  108. package/boot/utils/__tests__/uid.js +47 -47
  109. package/boot/utils/createIntOptions.d.ts +6 -6
  110. package/boot/utils/createIntOptions.js +18 -18
  111. package/boot/utils/queryLoggingMiddleware.d.ts +2 -2
  112. package/boot/utils/queryLoggingMiddleware.js +14 -14
  113. package/boot/utils/uid.d.ts +3 -3
  114. package/boot/utils/uid.js +19 -19
  115. package/cart/AddToCartFormik.d.ts +42 -42
  116. package/cart/AddToCartFormik.js +76 -76
  117. package/cart/useAddToCart.d.ts +88 -88
  118. package/cart/useAddToCart.js +117 -117
  119. package/ci/.gitlab-ci.yml +3 -3
  120. package/components/Auth/CustomerUpdateForm.d.ts +32 -32
  121. package/components/Auth/CustomerUpdateForm.js +121 -121
  122. package/components/Auth/ForgotPasswordProvider.d.ts +71 -71
  123. package/components/Auth/ForgotPasswordProvider.js +56 -56
  124. package/components/Auth/ResetPasswordProvider.d.ts +88 -88
  125. package/components/Auth/ResetPasswordProvider.js +77 -77
  126. package/components/Auth/SSN.d.ts +12 -12
  127. package/components/Auth/SSN.js +34 -34
  128. package/components/Auth/SSNLookupContainer.d.ts +15 -15
  129. package/components/Auth/SSNLookupContainer.js +19 -19
  130. package/components/Auth/SignupFormContainer.d.ts +19 -19
  131. package/components/Auth/SignupFormContainer.js +81 -81
  132. package/components/Auth/UpdatePasswordForm.d.ts +44 -44
  133. package/components/Auth/UpdatePasswordForm.js +97 -97
  134. package/components/Auth/formFieldsFromSettings.d.ts +65 -65
  135. package/components/Auth/formFieldsFromSettings.js +76 -76
  136. package/components/Auth/formatSignupInput.d.ts +8 -8
  137. package/components/Auth/formatSignupInput.js +42 -42
  138. package/components/Auth/signup-context.d.ts +36 -36
  139. package/components/Auth/signup-context.js +71 -71
  140. package/components/Auth/signup-field-translations.d.ts +3 -3
  141. package/components/Auth/signup-field-translations.js +43 -43
  142. package/components/Auth/signupSubmit.d.ts +6 -6
  143. package/components/Auth/signupSubmit.js +56 -56
  144. package/components/Auth/useAddressFields.d.ts +22 -22
  145. package/components/Auth/useAddressFields.js +32 -32
  146. package/components/Auth/useAddressFields.test.js +294 -294
  147. package/components/Auth/useCustomer.d.ts +70 -70
  148. package/components/Auth/useCustomer.js +167 -167
  149. package/components/Auth/useLoginFields.d.ts +20 -20
  150. package/components/Auth/useLoginFields.js +20 -20
  151. package/components/Auth/useSignupForm.d.ts +7 -7
  152. package/components/Auth/useSignupForm.js +14 -14
  153. package/components/AuthContext/AuthContext.d.ts +8 -8
  154. package/components/AuthContext/AuthContext.js +8 -8
  155. package/components/AuthContext/AuthProvider.d.ts +6 -6
  156. package/components/AuthContext/AuthProvider.js +84 -84
  157. package/components/AuthContext/AuthProvider.js.map +1 -1
  158. package/components/AuthContext/AuthProvider.test.js +66 -66
  159. package/components/AuthContext/LogOut.d.ts +5 -5
  160. package/components/AuthContext/LogOut.js +14 -14
  161. package/components/AuthContext/googleUserIdQuery.gql +6 -6
  162. package/components/AuthContext/useAuth.d.ts +6 -6
  163. package/components/AuthContext/useAuth.js +20 -20
  164. package/components/BreakpointProvider.d.ts +21 -21
  165. package/components/BreakpointProvider.js +23 -23
  166. package/components/Cart/CartIdContext.d.ts +11 -11
  167. package/components/Cart/CartIdContext.js +60 -60
  168. package/components/Cart/CartIdContext.test.js +87 -87
  169. package/components/ChannelContext/ChannelContext.d.ts +21 -20
  170. package/components/ChannelContext/ChannelContext.js +3 -3
  171. package/components/ChannelContext/ChannelContext.js.map +1 -1
  172. package/components/ChannelContext/ChannelProvider.d.ts +10 -10
  173. package/components/ChannelContext/ChannelProvider.js +44 -42
  174. package/components/ChannelContext/ChannelProvider.js.map +1 -1
  175. package/components/ChannelContext/ChannelProvider.test.js +112 -112
  176. package/components/ChannelContext/CountrySettingsQuery.gql +34 -34
  177. package/components/ChannelContext/index.d.ts +2 -2
  178. package/components/ChannelContext/index.js +2 -2
  179. package/components/ChannelContext/useCountrySettings.d.ts +8 -8
  180. package/components/ChannelContext/useCountrySettings.js +23 -23
  181. package/components/ChannelContext/useCountrySettings.js.map +1 -1
  182. package/components/ConfigProvider.d.ts +107 -108
  183. package/components/ConfigProvider.js +19 -19
  184. package/components/ConfigProvider.js.map +1 -1
  185. package/components/DynamicRoute/ActiveFiltersQuery.gql +21 -21
  186. package/components/DynamicRoute/CategoryRoute.d.ts +13 -13
  187. package/components/DynamicRoute/CategoryRoute.js +55 -55
  188. package/components/DynamicRoute/ContentRoute.d.ts +14 -14
  189. package/components/DynamicRoute/ContentRoute.js +27 -27
  190. package/components/DynamicRoute/PreviewRoute.d.ts +17 -17
  191. package/components/DynamicRoute/PreviewRoute.js +57 -57
  192. package/components/DynamicRoute/ProductByArticlenumber.d.ts +5 -5
  193. package/components/DynamicRoute/ProductByArticlenumber.gql +16 -16
  194. package/components/DynamicRoute/ProductByArticlenumber.js +21 -21
  195. package/components/DynamicRoute/ProductRoute.d.ts +15 -15
  196. package/components/DynamicRoute/ProductRoute.js +57 -57
  197. package/components/DynamicRoute/RouteResolver.d.ts +22 -22
  198. package/components/DynamicRoute/RouteResolver.js +64 -64
  199. package/components/DynamicRoute/Status.d.ts +14 -14
  200. package/components/DynamicRoute/Status.js +19 -19
  201. package/components/DynamicRoute/index.d.ts +17 -17
  202. package/components/DynamicRoute/index.js +95 -95
  203. package/components/Filters/index.d.ts +1 -1
  204. package/components/Filters/index.js +1 -1
  205. package/components/Filters/toggleActiveListItem.gql +15 -15
  206. package/components/Filters/utils/replaceInSearch.d.ts +14 -14
  207. package/components/Filters/utils/replaceInSearch.js +22 -22
  208. package/components/Filters/utils/replaceInSearch.test.js +184 -184
  209. package/components/Filters/utils/updateHistory.d.ts +25 -25
  210. package/components/Filters/utils/updateHistory.js +29 -29
  211. package/components/Filters/utils/updateHistory.test.js +102 -102
  212. package/components/Fonts/CustomFont.d.ts +14 -14
  213. package/components/Fonts/CustomFont.js +16 -16
  214. package/components/Fonts/GoogleFont.d.ts +10 -10
  215. package/components/Fonts/GoogleFont.js +34 -34
  216. package/components/Fonts/TypekitFont.d.ts +16 -16
  217. package/components/Fonts/TypekitFont.js +24 -24
  218. package/components/Fonts/injectFont.d.ts +11 -11
  219. package/components/Fonts/injectFont.js +29 -29
  220. package/components/Head.d.ts +11 -11
  221. package/components/Head.js +79 -74
  222. package/components/Head.js.map +1 -1
  223. package/components/Mutation/AddToCart/addToCartUtils.d.ts +18 -18
  224. package/components/Mutation/AddToCart/addToCartUtils.js +51 -51
  225. package/components/Mutation/AddToCartFormik.d.ts +53 -53
  226. package/components/Mutation/AddToCartFormik.js +171 -171
  227. package/components/Mutation/DecrementQuantity.d.ts +4 -4
  228. package/components/Mutation/DecrementQuantity.js +34 -34
  229. package/components/Mutation/IncrementQuantity.d.ts +4 -4
  230. package/components/Mutation/IncrementQuantity.js +34 -34
  231. package/components/Mutation/RemoveFromCart.d.ts +5 -5
  232. package/components/Mutation/RemoveFromCart.js +51 -51
  233. package/components/Mutation/SetQuantity.d.ts +4 -4
  234. package/components/Mutation/SetQuantity.js +36 -36
  235. package/components/Mutation/SubscribeToNewsletter.d.ts +4 -4
  236. package/components/Mutation/SubscribeToNewsletter.js +29 -29
  237. package/components/Mutation/SubscribeToStockNotifications.d.ts +4 -4
  238. package/components/Mutation/SubscribeToStockNotifications.js +30 -30
  239. package/components/Mutation/cartMutationUtils.d.ts +28 -28
  240. package/components/Mutation/cartMutationUtils.js +108 -108
  241. package/components/Mutation/cartMutationUtils.spec.js +142 -142
  242. package/components/Mutation/useDecrementQuantity.d.ts +11 -11
  243. package/components/Mutation/useDecrementQuantity.js +53 -53
  244. package/components/Mutation/useIncrementQuantity.d.ts +11 -11
  245. package/components/Mutation/useIncrementQuantity.js +53 -53
  246. package/components/Mutation/useRemoveFromCart.d.ts +13 -13
  247. package/components/Mutation/useRemoveFromCart.js +49 -49
  248. package/components/Mutation/useSetQuantity.d.ts +12 -12
  249. package/components/Mutation/useSetQuantity.js +37 -37
  250. package/components/Notifications/Notifications.d.ts +15 -15
  251. package/components/Notifications/Notifications.js +26 -26
  252. package/components/Notifications/index.d.ts +2 -2
  253. package/components/Notifications/index.js +2 -2
  254. package/components/Notifications/notificationMachine.d.ts +30 -30
  255. package/components/Notifications/notificationMachine.js +73 -73
  256. package/components/Notifications/notificationsMachine.d.ts +37 -37
  257. package/components/Notifications/notificationsMachine.js +65 -65
  258. package/components/Notifications/useNotification.d.ts +9 -9
  259. package/components/Notifications/useNotification.js +26 -26
  260. package/components/OpenGraph/OpenGraph.test.js +180 -180
  261. package/components/OpenGraph/OpenGraphGeneralPageData.d.ts +25 -25
  262. package/components/OpenGraph/OpenGraphGeneralPageData.js +36 -36
  263. package/components/OpenGraph/OpenGraphGeneralPageData.js.map +1 -1
  264. package/components/OpenGraph/OpenGraphProductData.d.ts +25 -25
  265. package/components/OpenGraph/OpenGraphProductData.js +48 -48
  266. package/components/OpenGraph/OpenGraphProductData.js.map +1 -1
  267. package/components/OpenGraph/index.d.ts +2 -2
  268. package/components/OpenGraph/index.js +2 -2
  269. package/components/Pagination/PaginationContainer.d.ts +2 -2
  270. package/components/Pagination/PaginationContainer.js +4 -4
  271. package/components/Pagination/PaginationContext.d.ts +14 -14
  272. package/components/Pagination/PaginationContext.js +3 -3
  273. package/components/Pagination/PaginationProvider.d.ts +19 -19
  274. package/components/Pagination/PaginationProvider.js +94 -94
  275. package/components/Pagination/PaginationProvider.test.js +282 -282
  276. package/components/PreviewContext.d.ts +10 -10
  277. package/components/PreviewContext.js +26 -26
  278. package/components/ProductConfigurationProvider/ConfigPrice.gql +22 -22
  279. package/components/ProductConfigurationProvider/ProductConfigurationContext.d.ts +13 -13
  280. package/components/ProductConfigurationProvider/ProductConfigurationContext.js +4 -4
  281. package/components/ProductConfigurationProvider/ProductConfigurationProvider.d.ts +6 -6
  282. package/components/ProductConfigurationProvider/ProductConfigurationProvider.js +49 -49
  283. package/components/Query/CartProvider.d.ts +22 -22
  284. package/components/Query/CartProvider.js +67 -67
  285. package/components/SortOrder/SortOrderContainer.d.ts +40 -40
  286. package/components/SortOrder/SortOrderContainer.js +101 -101
  287. package/components/SortOrder/SortOrderContext.d.ts +9 -9
  288. package/components/SortOrder/SortOrderContext.js +8 -8
  289. package/components/StructuredData/SiteLinksSearchStructuredData.d.ts +3 -3
  290. package/components/StructuredData/SiteLinksSearchStructuredData.js +24 -24
  291. package/components/StructuredData/StructuredBreadcrumbData.d.ts +12 -12
  292. package/components/StructuredData/StructuredBreadcrumbData.js +54 -54
  293. package/components/StructuredData/StructuredCategoryData.d.ts +16 -16
  294. package/components/StructuredData/StructuredCategoryData.js +17 -17
  295. package/components/StructuredData/StructuredData.d.ts +9 -9
  296. package/components/StructuredData/StructuredData.js +6 -6
  297. package/components/StructuredData/StructuredPageData.d.ts +16 -16
  298. package/components/StructuredData/StructuredPageData.js +16 -16
  299. package/components/StructuredData/StructuredProductData.d.ts +18 -18
  300. package/components/StructuredData/StructuredProductData.js +42 -42
  301. package/components/StructuredData/StructuredProductData.test.js +130 -130
  302. package/components/StructuredData/index.d.ts +5 -5
  303. package/components/StructuredData/index.js +5 -5
  304. package/data/cache.d.ts +3 -3
  305. package/data/cache.js +20 -20
  306. package/data/fragmentTypes.d.ts +8 -8
  307. package/data/fragmentTypes.js +83 -83
  308. package/data/fragments/BadgeFragment.gql +7 -7
  309. package/data/fragments/CartCoreFragment.gql +89 -89
  310. package/data/fragments/ChannelsFragment.gql +59 -58
  311. package/data/fragments/CommentsFragment.gql +6 -6
  312. package/data/fragments/HeadFragment.gql +9 -9
  313. package/data/fragments/PriceFragment.gql +5 -5
  314. package/data/fragments/ProductCampaignFragment.gql +10 -10
  315. package/data/fragments/ProductConfigurationsFragment.gql +24 -24
  316. package/data/fragments/ProductListsFragments.gql +94 -94
  317. package/data/fragments/ProductMetadataFragment.gql +20 -20
  318. package/data/fragments/ProductPriceFragment.gql +10 -10
  319. package/data/fragments/ProductVariantPriceFragment.gql +10 -10
  320. package/data/fragments/RouteCrumbFragment.gql +20 -20
  321. package/data/fragments/RouteMetaFragment.gql +18 -18
  322. package/data/fragments/StockStatusFragment.gql +7 -7
  323. package/data/fragments/index.d.ts +1 -1
  324. package/data/fragments/index.js +1 -1
  325. package/data/mutations/accountMutations.gql +28 -28
  326. package/data/mutations/cartMutations.gql +41 -41
  327. package/data/mutations/productListMutations.gql +18 -18
  328. package/data/mutations/signup.gql +7 -7
  329. package/data/mutations/subscribeToNewsletter.gql +3 -3
  330. package/data/mutations/subscribeToStockNotifications.gql +6 -6
  331. package/data/mutations/updateCustomer.gql +5 -5
  332. package/data/mutations/updatePassword.gql +5 -5
  333. package/data/queries/CartMutationQuery.gql +36 -36
  334. package/data/queries/CartQuery.gql +7 -7
  335. package/data/queries/GetCustomerCountryCode.gql +9 -9
  336. package/data/queries/PersonLookupQuery.gql +28 -28
  337. package/data/queries/ProductLists.gql +8 -8
  338. package/dependencies.d.ts +104 -104
  339. package/errorReporting.browser.d.ts +3 -3
  340. package/errorReporting.browser.js +11 -11
  341. package/errorReporting.d.ts +3 -3
  342. package/errorReporting.js +19 -19
  343. package/errorReporting.server.d.ts +3 -3
  344. package/errorReporting.server.js +11 -11
  345. package/errorReporting.shared.d.ts +5 -5
  346. package/errorReporting.shared.js +16 -16
  347. package/experiments/ExperimentsProvider.d.ts +4 -4
  348. package/experiments/ExperimentsProvider.js +28 -28
  349. package/experiments/ExperimentsProvider.test.js +105 -105
  350. package/experiments/integration.test.js +76 -76
  351. package/experiments/selectExperimentVariant.d.ts +3 -3
  352. package/experiments/selectExperimentVariant.js +34 -34
  353. package/experiments/selectExperimentVariant.test.js +64 -64
  354. package/experiments/useExperiment.d.ts +2 -2
  355. package/experiments/useExperiment.js +10 -10
  356. package/experiments/useExperiment.test.js +100 -100
  357. package/global.d.ts +1 -1
  358. package/helpers/decodeUrlQuery.d.ts +9 -9
  359. package/helpers/decodeUrlQuery.js +26 -26
  360. package/helpers/decodeUrlQuery.test.js +54 -54
  361. package/helpers/distance.d.ts +7 -7
  362. package/helpers/distance.js +12 -12
  363. package/helpers/encodeVariant.d.ts +3 -3
  364. package/helpers/encodeVariant.js +24 -24
  365. package/helpers/getBreakpointsFromValues.d.ts +6 -6
  366. package/helpers/getBreakpointsFromValues.js +14 -14
  367. package/helpers/getBreakpointsFromValues.test.js +47 -47
  368. package/helpers/getCartItemVariant.d.ts +7 -7
  369. package/helpers/getCartItemVariant.js +8 -8
  370. package/helpers/getErrorDetail.d.ts +7 -7
  371. package/helpers/getErrorDetail.js +11 -11
  372. package/helpers/getErrorDetail.test.js +44 -44
  373. package/helpers/getHeaders.d.ts +6 -6
  374. package/helpers/getHeaders.js +3 -3
  375. package/helpers/isRelativeUrl.d.ts +1 -1
  376. package/helpers/isRelativeUrl.js +3 -3
  377. package/helpers/logError.d.ts +1 -1
  378. package/helpers/logError.js +16 -16
  379. package/helpers/logWarningInDev.d.ts +1 -1
  380. package/helpers/logWarningInDev.js +6 -6
  381. package/helpers/throwErrorInDev.d.ts +6 -6
  382. package/helpers/throwErrorInDev.js +14 -14
  383. package/helpers/uniqueId.d.ts +5 -5
  384. package/helpers/uniqueId.js +9 -9
  385. package/hooks/CartCheckoutQuery.gql +5 -5
  386. package/hooks/Channels/useChannelSettings.d.ts +7 -7
  387. package/hooks/Channels/useChannelSettings.js +11 -11
  388. package/hooks/Channels/useChannelSettings.js.map +1 -1
  389. package/hooks/Channels/useChannelSettings.test.js +51 -51
  390. package/hooks/Filters/useBooleanFilter.d.ts +8 -8
  391. package/hooks/Filters/useBooleanFilter.js +20 -20
  392. package/hooks/Filters/useFilters.d.ts +3 -3
  393. package/hooks/Filters/useFilters.js +15 -15
  394. package/hooks/Filters/useListFilter.d.ts +10 -10
  395. package/hooks/Filters/useListFilter.js +37 -37
  396. package/hooks/Filters/useMultiFilter.d.ts +13 -13
  397. package/hooks/Filters/useMultiFilter.js +49 -49
  398. package/hooks/Filters/useRangeFilter.d.ts +10 -10
  399. package/hooks/Filters/useRangeFilter.js +35 -35
  400. package/hooks/Filters/useSortOrder.d.ts +11 -11
  401. package/hooks/Filters/useSortOrder.js +21 -21
  402. package/hooks/FreeShippingQuery.gql +16 -16
  403. package/hooks/PackageProducts/index.d.ts +2 -2
  404. package/hooks/PackageProducts/index.js +2 -2
  405. package/hooks/PackageProducts/packagePriceQuery.gql +29 -29
  406. package/hooks/PackageProducts/usePackageProductItem.d.ts +17 -17
  407. package/hooks/PackageProducts/usePackageProductItem.js +26 -26
  408. package/hooks/PackageProducts/usePackageProducts.d.ts +19 -19
  409. package/hooks/PackageProducts/usePackageProducts.js +345 -345
  410. package/hooks/PackageProducts/usePackageProducts.test.js +383 -383
  411. package/hooks/Product/index.d.ts +1 -1
  412. package/hooks/Product/index.js +1 -1
  413. package/hooks/Product/useStockStatus.d.ts +9 -9
  414. package/hooks/Product/useStockStatus.js +25 -25
  415. package/hooks/Product/useSwitchToVariantImage.d.ts +9 -9
  416. package/hooks/Product/useSwitchToVariantImage.js +20 -20
  417. package/hooks/ProductList/ProductListContext.d.ts +7 -7
  418. package/hooks/ProductList/ProductListContext.js +110 -110
  419. package/hooks/ProductList/action-creators.d.ts +46 -46
  420. package/hooks/ProductList/action-creators.js +296 -296
  421. package/hooks/ProductList/index.d.ts +118 -118
  422. package/hooks/ProductList/index.js +21 -21
  423. package/hooks/ProductList/list-transforms.d.ts +73 -73
  424. package/hooks/ProductList/list-transforms.js +106 -106
  425. package/hooks/ProductList/list-transforms.test.js +489 -489
  426. package/hooks/ProductList/product-list-reducer.d.ts +76 -76
  427. package/hooks/ProductList/product-list-reducer.js +197 -197
  428. package/hooks/ProductList/product-list-reducer.test.js +464 -464
  429. package/hooks/ProductList/useProductList.d.ts +13 -13
  430. package/hooks/ProductList/useProductList.js +93 -93
  431. package/hooks/ProductList/useProductListItems.d.ts +10 -10
  432. package/hooks/ProductList/useProductListItems.js +48 -48
  433. package/hooks/ProductList/validate-product.d.ts +6 -6
  434. package/hooks/ProductList/validate-product.js +40 -40
  435. package/hooks/Subscriptions/useNewsletterSubscription.d.ts +38 -38
  436. package/hooks/Subscriptions/useNewsletterSubscription.js +41 -41
  437. package/hooks/Subscriptions/useStockNotifications.d.ts +36 -36
  438. package/hooks/Subscriptions/useStockNotifications.js +37 -37
  439. package/hooks/Subscriptions/useStoreSubscriptions.d.ts +48 -48
  440. package/hooks/Subscriptions/useStoreSubscriptions.js +150 -150
  441. package/hooks/Subscriptions/useStoresubscriptions.test.js +179 -179
  442. package/hooks/useAddMultipleToCart.d.ts +27 -27
  443. package/hooks/useAddMultipleToCart.js +113 -113
  444. package/hooks/useAddMultipleToCart.test.js +181 -181
  445. package/hooks/useChannelBanner.js +22 -22
  446. package/hooks/useChannelBanner.test.js +77 -77
  447. package/hooks/useCustomerOrders.test.js +176 -176
  448. package/hooks/useCustomerOrdersQuery.d.ts +21 -21
  449. package/hooks/useCustomerOrdersQuery.js +20 -20
  450. package/hooks/useDeleteAccountMutation.d.ts +15 -15
  451. package/hooks/useDeleteAccountMutation.js +38 -38
  452. package/hooks/useDynamicPrice.d.ts +3 -3
  453. package/hooks/useDynamicPrice.js +24 -24
  454. package/hooks/useFreeShippingCheck.d.ts +15 -15
  455. package/hooks/useFreeShippingCheck.js +30 -30
  456. package/hooks/useGeolocation.d.ts +11 -11
  457. package/hooks/useGeolocation.js +33 -33
  458. package/hooks/useInfinitePagination.d.ts +37 -37
  459. package/hooks/useInfinitePagination.js +138 -138
  460. package/hooks/useLogError.d.ts +1 -1
  461. package/hooks/useLogError.js +7 -7
  462. package/hooks/useLoginMutation.d.ts +12 -12
  463. package/hooks/useLoginMutation.js +14 -14
  464. package/hooks/useLoginRedirect.d.ts +4 -4
  465. package/hooks/useLoginRedirect.js +36 -36
  466. package/hooks/useOrderDetailQuery.d.ts +20 -20
  467. package/hooks/useOrderDetailQuery.js +28 -28
  468. package/hooks/usePreconnectLinks.d.ts +10 -10
  469. package/hooks/usePreconnectLinks.js +29 -29
  470. package/hooks/usePreconnectLinks.test.js +95 -95
  471. package/hooks/usePrice.d.ts +39 -39
  472. package/hooks/usePrice.js +71 -71
  473. package/hooks/usePrice.test.js +171 -171
  474. package/hooks/useProductVariants/index.d.ts +1 -1
  475. package/hooks/useProductVariants/index.js +1 -1
  476. package/hooks/useProductVariants/useProductVariants.d.ts +19 -19
  477. package/hooks/useProductVariants/useProductVariants.js +202 -202
  478. package/hooks/useProductVariants/useProductVariants.test.js +415 -415
  479. package/hooks/useProductVariants/useVariantFromUrl.d.ts +5 -5
  480. package/hooks/useProductVariants/useVariantFromUrl.js +15 -15
  481. package/hooks/useProductVariants/useVariantFromUrl.test.js +79 -79
  482. package/hooks/useRoutePreload.d.ts +24 -24
  483. package/hooks/useRoutePreload.js +39 -39
  484. package/hooks/useShopConfig.d.ts +1 -1
  485. package/hooks/useShopConfig.js +10 -10
  486. package/hooks/useShopConfig.js.map +1 -1
  487. package/hooks/useThrowErrorInDev.d.ts +1 -1
  488. package/hooks/useThrowErrorInDev.js +7 -7
  489. package/hooks/useThunkReducer.d.ts +7 -7
  490. package/hooks/useThunkReducer.js +23 -23
  491. package/hooks/useWarningInDev.d.ts +1 -1
  492. package/hooks/useWarningInDev.js +9 -9
  493. package/inServer.d.ts +1 -1
  494. package/inServer.js +2 -2
  495. package/index.d.ts +1 -1
  496. package/index.js +1 -1
  497. package/integrations/addwishSchemaExtension.d.ts +35 -35
  498. package/integrations/addwishSchemaExtension.js +140 -140
  499. package/integrations/nostoSchemaExtension.d.ts +5 -5
  500. package/integrations/nostoSchemaExtension.js +76 -76
  501. package/integrations/sluggishSchemaExtension.d.ts +2 -2
  502. package/integrations/sluggishSchemaExtension.js +26 -26
  503. package/package.json +2 -2
  504. package/polyfills.d.ts +1 -1
  505. package/polyfills.js +37 -37
  506. package/registerServiceWorker.js +110 -110
  507. package/resolvers/filters/boolFilter.d.ts +3 -3
  508. package/resolvers/filters/boolFilter.js +84 -84
  509. package/resolvers/filters/defaultActiveFilters.d.ts +3 -3
  510. package/resolvers/filters/defaultActiveFilters.js +8 -8
  511. package/resolvers/filters/filterParams.d.ts +3 -3
  512. package/resolvers/filters/filterParams.js +84 -84
  513. package/resolvers/filters/filters.d.ts +5 -5
  514. package/resolvers/filters/filters.js +78 -78
  515. package/resolvers/filters/index.d.ts +27 -27
  516. package/resolvers/filters/index.js +7 -7
  517. package/resolvers/filters/listFilter.d.ts +7 -7
  518. package/resolvers/filters/listFilter.js +73 -73
  519. package/resolvers/filters/listFilterItem.d.ts +3 -3
  520. package/resolvers/filters/listFilterItem.js +122 -122
  521. package/resolvers/filters/multiListFilter.d.ts +5 -5
  522. package/resolvers/filters/multiListFilter.js +195 -195
  523. package/resolvers/filters/multiListFilterList.d.ts +3 -3
  524. package/resolvers/filters/multiListFilterList.js +55 -55
  525. package/resolvers/filters/rangeFilter.d.ts +5 -5
  526. package/resolvers/filters/rangeFilter.js +137 -137
  527. package/resolvers/filters/updateQueryString.d.ts +12 -12
  528. package/resolvers/filters/updateQueryString.js +116 -116
  529. package/resolvers/index.d.ts +37 -37
  530. package/resolvers/index.js +37 -37
  531. package/scripts/dev-apolloServer.js +31 -31
  532. package/sentry/client.d.ts +1 -1
  533. package/sentry/client.js +29 -29
  534. package/sentry/common.d.ts +1 -1
  535. package/sentry/common.js +4 -4
  536. package/sentry/server.d.ts +1 -1
  537. package/sentry/server.js +19 -19
  538. package/sentry/utils.d.ts +1 -1
  539. package/sentry/utils.js +1 -1
  540. package/server/graphql.d.ts +20 -20
  541. package/server/graphql.js +118 -118
  542. package/server/graphql.test.js +123 -123
  543. package/server/index.d.ts +2 -2
  544. package/server/index.js +2 -2
  545. package/server/tracking/facebook.d.ts +5 -5
  546. package/server/tracking/facebook.js +132 -132
  547. package/server/tracking/middleware.d.ts +8 -8
  548. package/server/tracking/middleware.js +14 -14
  549. package/server/tracking/types.d.ts +33 -33
  550. package/setupTests.js +2 -2
  551. package/test-utils/ProviderPyramid.js +45 -45
  552. package/test-utils/mockShopConfig.js +26 -26
  553. package/test-utils/mockedProduct.js +253 -253
  554. package/test-utils/renderWithRouter.js +20 -20
  555. package/test-utils/variables.js +2465 -1231
  556. package/time.d.ts +1 -1
  557. package/time.js +5 -5
@@ -1,538 +1,514 @@
1
- import {
2
- createSelectedChannel,
3
- getSelectedAndRecommendedChannel
4
- } from './channelUtils';
5
- import { MockLink } from 'apollo-link-mock';
6
- import { InMemoryCache } from 'apollo-cache-inmemory';
7
- import ApolloClient from 'apollo-client';
8
- import gql from 'graphql-tag';
9
- import { ChannelHandler } from './ChannelHandler';
10
- import { channels, singleDomainChannels } from '../test-utils/variables';
11
- import { Cookies } from 'react-cookie';
12
- import { primaryRouteForPathFetcher } from './redirectUtils';
13
-
14
- const preserveRedirectRouteQuery = gql`
15
- query preserveRedirectRouteQuery($path: String!) {
16
- route(path: $path) {
17
- id
18
- object {
19
- ... on Category {
20
- id
21
- __typename
22
- }
23
- ... on Product {
24
- id
25
- __typename
26
- }
27
- ... on Page {
28
- id
29
- __typename
30
- }
31
- ... on StartPage {
32
- id
33
- __typename
34
- }
35
- __typename
36
- }
37
- __typename
38
- }
39
- }
40
- `;
41
-
42
- const startPagePathnameRedirectQuery = gql`
43
- query StartPagePathnameRedirectQuery($id: Int!) {
44
- StartPage: startPage(id: $id) {
45
- id
46
- primaryRoute {
47
- id
48
- path
49
- __typename
50
- }
51
- __typename
52
- }
53
- }
54
- `;
55
-
56
- const startPagePathnameRedirectRequest = {
57
- request: {
58
- query: startPagePathnameRedirectQuery,
59
- variables: { id: 44 }
60
- },
61
- result: {
62
- data: {
63
- StartPage: {
64
- id: 44,
65
- primaryRoute: {
66
- id: '/',
67
- path: '/',
68
- __typename: 'Route'
69
- },
70
- __typename: 'StartPage'
71
- }
72
- }
73
- }
74
- };
75
-
76
- const productPathnameRedirectQuery = gql`
77
- query ProductPathnameRedirectQuery($id: Int!) {
78
- Product: product(id: $id) {
79
- id
80
- primaryRoute {
81
- id
82
- path
83
- __typename
84
- }
85
- __typename
86
- }
87
- }
88
- `;
89
-
90
- const redirectQueryMocks = [
91
- {
92
- request: {
93
- query: preserveRedirectRouteQuery,
94
- variables: {
95
- path: '/'
96
- }
97
- },
98
- result: {
99
- data: {
100
- route: {
101
- id: '/',
102
- object: {
103
- id: 44,
104
- __typename: 'StartPage'
105
- },
106
- __typename: 'Route'
107
- },
108
- __typename: 'Query'
109
- }
110
- }
111
- },
112
- startPagePathnameRedirectRequest,
113
- startPagePathnameRedirectRequest,
114
- startPagePathnameRedirectRequest,
115
- startPagePathnameRedirectRequest,
116
- {
117
- request: {
118
- query: preserveRedirectRouteQuery,
119
- variables: {
120
- path: '/accessories/orchid-peach-bag'
121
- }
122
- },
123
- result: {
124
- data: {
125
- route: {
126
- id: '/accessories/orchid-peach-bag',
127
- object: {
128
- id: 522,
129
- __typename: 'Product'
130
- },
131
- __typename: 'Route'
132
- }
133
- }
134
- }
135
- },
136
- {
137
- request: {
138
- query: productPathnameRedirectQuery,
139
- variables: { id: 522 }
140
- },
141
- result: {
142
- data: {
143
- Product: {
144
- id: 522,
145
- primaryRoute: {
146
- id: '/accessories/bags/orchid-peach-bag-uk',
147
- path: '/accessories/bags/orchid-peach-bag-uk',
148
- __typename: 'Route'
149
- },
150
- __typename: 'Product'
151
- }
152
- }
153
- }
154
- },
155
- {
156
- request: {
157
- query: productPathnameRedirectQuery,
158
- variables: { id: 522 }
159
- },
160
- result: {
161
- data: {
162
- Product: {
163
- id: 522,
164
- primaryRoute: {
165
- id: '/accessories/orchid-peach-bag',
166
- path: '/accessories/orchid-peach-bag',
167
- __typename: 'Route'
168
- },
169
- __typename: 'Product'
170
- }
171
- }
172
- }
173
- }
174
- ];
175
-
176
- function createClient(mocks) {
177
- return new ApolloClient({
178
- cache: new InMemoryCache({ addTypename: true }),
179
- link: new MockLink(mocks)
180
- });
181
- }
182
-
183
- const client = createClient(redirectQueryMocks);
184
- const getPrimaryRoutePath = primaryRouteForPathFetcher(client);
185
-
186
- const selectedChannelSingleDomain = createSelectedChannel(
187
- singleDomainChannels[0]
188
- );
189
-
190
- describe('Channel utils', () => {
191
- beforeEach(() => {
192
- // Workaround changes in universal-cookie
193
- Object.defineProperty(document, 'cookie', {
194
- value: null
195
- });
196
- });
197
-
198
- it('successfully redirect to the appropriate channel', () => {
199
- const recommendedChannel = createSelectedChannel(channels[1]);
200
- const selectedChannel = createSelectedChannel(channels[0]);
201
- const channelHandler = new ChannelHandler({
202
- selectedChannel,
203
- recommendedChannel,
204
- getPrimaryRoutePath,
205
- channels
206
- });
207
- const redirectUrl = channelHandler.getRedirectUrl({
208
- client,
209
- url: selectedChannel.url,
210
- newChannel: recommendedChannel
211
- });
212
- expect(redirectUrl).resolves.toBe(
213
- 'https://flight-m2.jetshop.se/?culture=sv-SE&channelCountry=SE&channel=SE'
214
- );
215
- });
216
-
217
- it('Will not redirect when there is a channel in the cookie', () => {
218
- const cookies = new Cookies();
219
- cookies.set('channel', channels[0].name);
220
- const { redirect } = getSelectedAndRecommendedChannel({
221
- url: channels[0].url,
222
- singleDomainMode: false,
223
- channels,
224
- cookies
225
- });
226
- expect(redirect).toBeFalsy();
227
- });
228
-
229
- it('Will not redirect when there is a channel in the query string', () => {
230
- const cookies = new Cookies();
231
- cookies.set('channel', channels[0].name);
232
- const { redirect } = getSelectedAndRecommendedChannel({
233
- url: channels[0].url + '?channelCountry="US"',
234
- singleDomainMode: false,
235
- channels,
236
- cookies
237
- });
238
- expect(redirect).toBeFalsy();
239
- });
240
-
241
- it('Will not geo redirect when there is a channel in the query string', () => {
242
- const cookies = new Cookies();
243
- cookies.set('channel', channels[0].name);
244
- const { redirect } = getSelectedAndRecommendedChannel({
245
- url: channels[0].url + '?channelCountry="US"',
246
- geoipCountry: 'SE',
247
- singleDomainMode: false,
248
- channels,
249
- cookies
250
- });
251
- expect(redirect).toBeFalsy();
252
- });
253
-
254
- it('Will not redirect when the url is already correct', () => {
255
- const cookies = new Cookies();
256
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
257
- url: channels[0].url,
258
- geoipCountry: 'US',
259
- singleDomainMode: false,
260
- channels,
261
- cookies
262
- });
263
- expect(redirect).toBeFalsy();
264
- expect(recommendedChannel).toBeFalsy();
265
- });
266
-
267
- it('Will redirect to the channel that has the country set as the default country', () => {
268
- const cookies = new Cookies();
269
- channels[0].countries.push({
270
- name: 'Sweden',
271
- code: 'SE',
272
- isDefault: false
273
- });
274
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
275
- url: channels[0].url,
276
- geoipCountry: 'SE',
277
- singleDomainMode: false,
278
- channels,
279
- cookies
280
- });
281
- expect(redirect).toBeTruthy();
282
- expect(recommendedChannel.name).toBe('SE');
283
- });
284
-
285
- it('Will not redirect when the channel is from an unkown country', () => {
286
- const cookies = new Cookies();
287
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
288
- url: channels[0].url,
289
- geoipCountry: 'CO',
290
- singleDomainMode: false,
291
- channels,
292
- cookies
293
- });
294
- expect(redirect).toBeFalsy();
295
- expect(recommendedChannel).toBeFalsy();
296
- });
297
- });
298
-
299
- describe('Single domain mode', () => {
300
- it('Will not redirect when the channel is default, and the selected channel is also default', () => {
301
- const cookies = new Cookies();
302
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
303
- url: selectedChannelSingleDomain.url,
304
- singleDomainMode: true,
305
- channels: singleDomainChannels,
306
- cookies
307
- });
308
- expect(redirect).toBeFalsy();
309
- expect(recommendedChannel).toBeFalsy();
310
- });
311
-
312
- it('Will redirect when the url is at the wrong channel and the channel is default', () => {
313
- const cookies = new Cookies();
314
- const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
315
- url: channels[0].url,
316
- singleDomainMode: true,
317
- channels: singleDomainChannels,
318
- cookies
319
- });
320
- expect(redirect).toBe(true);
321
- expect(recommendedChannel.url).toBe(selectedChannelSingleDomain.url);
322
- });
323
-
324
- it('Will not redirect when the redirect is disabled', () => {
325
- const cookies = new Cookies();
326
- const { redirect } = getSelectedAndRecommendedChannel({
327
- url: channels[0].url + '?redirectDisabled=true',
328
- singleDomainMode: true,
329
- channels: singleDomainChannels,
330
- cookies
331
- });
332
- expect(redirect).toBe(false);
333
- });
334
-
335
- it('Will not when the url is at the right channel', () => {
336
- const cookies = new Cookies();
337
- const { redirect } = getSelectedAndRecommendedChannel({
338
- url: selectedChannelSingleDomain.url,
339
- singleDomainMode: true,
340
- channels: singleDomainChannels,
341
- cookies
342
- });
343
- expect(redirect).toBe(false);
344
- });
345
-
346
- it('Will redirect when the url is at the wrong channel', () => {
347
- const cookies = new Cookies();
348
- cookies.set('channel', singleDomainChannels[2].name);
349
- const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
350
- url: selectedChannelSingleDomain.url,
351
- singleDomainMode: true,
352
- channels: singleDomainChannels,
353
- cookies
354
- });
355
- expect(redirect).toBe(true);
356
- expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
357
- });
358
-
359
- it('Georedirect will respect single domain mode', () => {
360
- const cookies = new Cookies();
361
- const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
362
- url: selectedChannelSingleDomain.url,
363
- singleDomainMode: true,
364
- channels: singleDomainChannels,
365
- cookies,
366
- geoipCountry: 'UK'
367
- });
368
- expect(redirect).toBe(true);
369
- expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
370
- });
371
-
372
- it('Georedirect will respect single domain mode when there is a domain path', async () => {
373
- const urlToPreserve = '/accessories/orchid-peach-bag';
374
- const cookies = new Cookies();
375
- const { redirect, recommendedChannel, selectedChannel } =
376
- getSelectedAndRecommendedChannel({
377
- url: selectedChannelSingleDomain.url + urlToPreserve,
378
- singleDomainMode: true,
379
- channels: singleDomainChannels,
380
- cookies,
381
- geoipCountry: 'UK'
382
- });
383
- expect(redirect).toBe(true);
384
- expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
385
- const channelHandler = new ChannelHandler({
386
- selectedChannel,
387
- recommendedChannel,
388
- getPrimaryRoutePath,
389
- channels
390
- });
391
-
392
- const redirectUrl = channelHandler.getRedirectUrl({
393
- client,
394
- url: selectedChannelSingleDomain.url + urlToPreserve,
395
- newChannel: channelHandler.recommendedChannel,
396
- preserveRedirect: true
397
- });
398
- await expect(redirectUrl).resolves.toBe(
399
- 'https://flight-m2.jetshop.se/uk/accessories/bags/orchid-peach-bag-uk?culture=sv-SE&channelCountry=UK&channel=UK'
400
- );
401
- });
402
-
403
- it('Redirect on single domain mode when the basename shows up in the url', async () => {
404
- const urlToPreserve = '/accessories/int/orchid-peach-bag';
405
- const cookies = new Cookies();
406
- const { redirect, recommendedChannel, selectedChannel } =
407
- getSelectedAndRecommendedChannel({
408
- url: channels[0].url + urlToPreserve,
409
- singleDomainMode: true,
410
- channels: singleDomainChannels,
411
- cookies,
412
- geoipCountry: 'UK'
413
- });
414
- expect(redirect).toBe(true);
415
- const channelHandler = new ChannelHandler({
416
- selectedChannel,
417
- recommendedChannel,
418
- getPrimaryRoutePath,
419
- channels
420
- });
421
-
422
- const redirectUrl = channelHandler.getRedirectUrl({
423
- client,
424
- url: channels[0].url + urlToPreserve,
425
- newChannel: channelHandler.recommendedChannel,
426
- preserveRedirect: false
427
- });
428
- await expect(redirectUrl).resolves.toBe(
429
- `https://flight-m2.jetshop.se/uk${urlToPreserve}?culture=sv-SE&channelCountry=UK&channel=UK`
430
- );
431
- });
432
-
433
- it('Redirect on single domain mode when there is a domain path but no basename', async () => {
434
- const urlToPreserve = '/accessories/orchid-peach-bag';
435
- const cookies = new Cookies();
436
- const { redirect, recommendedChannel, selectedChannel } =
437
- getSelectedAndRecommendedChannel({
438
- url: channels[0].url + urlToPreserve,
439
- singleDomainMode: true,
440
- channels: singleDomainChannels,
441
- cookies
442
- });
443
- expect(redirect).toBe(true);
444
- expect(recommendedChannel.url).toBe('https://flight.jetshop.se/int');
445
- const channelHandler = new ChannelHandler({
446
- selectedChannel,
447
- recommendedChannel,
448
- getPrimaryRoutePath,
449
- channels
450
- });
451
-
452
- const redirectUrl = channelHandler.getRedirectUrl({
453
- client,
454
- url: channels[0].url + urlToPreserve,
455
- newChannel: channelHandler.recommendedChannel,
456
- preserveRedirect: true
457
- });
458
- await expect(redirectUrl).resolves.toBe(
459
- `https://flight.jetshop.se/int${urlToPreserve}?culture=en-GB&channelCountry=US&channel=INT`
460
- );
461
- });
462
-
463
- it('Will set the appropriate language based on basename', async () => {
464
- const cookies = new Cookies();
465
- const { selectedChannel } = getSelectedAndRecommendedChannel({
466
- url: channels[1].url + '/en',
467
- channels,
468
- cookies
469
- });
470
- expect(selectedChannel.language.culture).toBe('en-GB');
471
- });
472
-
473
- it('Will set the appropriate language based on basename in singledomain mode', async () => {
474
- const cookies = new Cookies();
475
- const { selectedChannel } = getSelectedAndRecommendedChannel({
476
- url: singleDomainChannels[1].url + '/en',
477
- channels: singleDomainChannels,
478
- cookies,
479
- singleDomainMode: true
480
- });
481
- expect(selectedChannel.language.culture).toBe('en-GB');
482
- });
483
-
484
- it('Will redirect to a new language basename based on cookies', async () => {
485
- const cookies = new Cookies();
486
- cookies.set('culture', 'en-GB');
487
- const { selectedChannel, recommendedChannel, redirect } =
488
- getSelectedAndRecommendedChannel({
489
- url: channels[1].url,
490
- channels,
491
- cookies
492
- });
493
- expect(redirect).toBe(true);
494
- expect(recommendedChannel.language.culture).toBe('en-GB');
495
- const channelHandler = new ChannelHandler({
496
- selectedChannel,
497
- recommendedChannel,
498
- getPrimaryRoutePath,
499
- channels
500
- });
501
- const redirectUrl = channelHandler.getRedirectUrl({
502
- client,
503
- url: selectedChannel.url,
504
- newChannel: recommendedChannel
505
- });
506
- expect(redirectUrl).resolves.toBe(
507
- 'https://flight-m2.jetshop.se/en/?culture=en-GB&channelCountry=SE&channel=SE'
508
- );
509
- });
510
-
511
- it('Will redirect to a new language basename based on cookies in single domain mode', async () => {
512
- const cookies = new Cookies();
513
- cookies.set('culture', 'en-GB');
514
- const { selectedChannel, recommendedChannel, redirect } =
515
- getSelectedAndRecommendedChannel({
516
- url: singleDomainChannels[1].url,
517
- channels: singleDomainChannels,
518
- cookies,
519
- singleDomainMode: true
520
- });
521
- expect(redirect).toBe(true);
522
- expect(recommendedChannel.language.culture).toBe('en-GB');
523
- const channelHandler = new ChannelHandler({
524
- selectedChannel,
525
- recommendedChannel,
526
- getPrimaryRoutePath,
527
- channels
528
- });
529
- const redirectUrl = channelHandler.getRedirectUrl({
530
- client,
531
- url: selectedChannel.url,
532
- newChannel: recommendedChannel
533
- });
534
- expect(redirectUrl).resolves.toBe(
535
- 'https://flight-m2.jetshop.se/se/en/?culture=en-GB&channelCountry=SE&channel=SE'
536
- );
537
- });
538
- });
1
+ import {
2
+ createSelectedChannel,
3
+ getSelectedAndRecommendedChannel
4
+ } from './channelUtils';
5
+ import { MockLink } from 'apollo-link-mock';
6
+ import {
7
+ InMemoryCache,
8
+ IntrospectionFragmentMatcher
9
+ } from 'apollo-cache-inmemory';
10
+ import ApolloClient from 'apollo-client';
11
+ import gql from 'graphql-tag';
12
+ import { ChannelHandler } from './ChannelHandler';
13
+ import {
14
+ channels,
15
+ singleDomainChannels,
16
+ groupedChannels,
17
+ groupedSingleDomainChannels
18
+ } from '../test-utils/variables';
19
+ import { Cookies } from 'react-cookie';
20
+ import { primaryRouteForPathFetcher } from './redirectUtils';
21
+ import PreserveRedirectRouteQuery from './PreserveRedirectRouteQuery.gql';
22
+ import fragmentTypes from '@jetshop/core/data/fragmentTypes';
23
+
24
+ const startPagePathnameRedirectQuery = gql`
25
+ query StartPagePathnameRedirectQuery($id: Int!) {
26
+ StartPage: startPage(id: $id) {
27
+ id
28
+ primaryRoute {
29
+ id
30
+ path
31
+ __typename
32
+ }
33
+ __typename
34
+ }
35
+ }
36
+ `;
37
+
38
+ const startPagePathnameRedirectRequest = {
39
+ request: {
40
+ query: startPagePathnameRedirectQuery,
41
+ variables: { id: 44 }
42
+ },
43
+ result: {
44
+ data: {
45
+ StartPage: {
46
+ id: 44,
47
+ primaryRoute: {
48
+ id: '/',
49
+ path: '/',
50
+ __typename: 'Route'
51
+ },
52
+ __typename: 'StartPage'
53
+ }
54
+ }
55
+ }
56
+ };
57
+
58
+ const productPathnameRedirectQuery = gql`
59
+ query ProductPathnameRedirectQuery($id: Int!) {
60
+ Product: product(id: $id) {
61
+ id
62
+ primaryRoute {
63
+ id
64
+ path
65
+ __typename
66
+ }
67
+ __typename
68
+ }
69
+ }
70
+ `;
71
+
72
+ const redirectQueryMocks = [
73
+ {
74
+ request: {
75
+ query: PreserveRedirectRouteQuery,
76
+ variables: {
77
+ path: '/'
78
+ }
79
+ },
80
+ result: {
81
+ data: {
82
+ route: {
83
+ id: '/',
84
+ object: {
85
+ id: 44,
86
+ __typename: 'StartPage'
87
+ },
88
+ __typename: 'Route'
89
+ },
90
+ __typename: 'Query'
91
+ }
92
+ }
93
+ },
94
+ startPagePathnameRedirectRequest,
95
+ startPagePathnameRedirectRequest,
96
+ startPagePathnameRedirectRequest,
97
+ startPagePathnameRedirectRequest,
98
+ {
99
+ request: {
100
+ query: PreserveRedirectRouteQuery,
101
+ variables: {
102
+ path: '/accessories/orchid-peach-bag'
103
+ }
104
+ },
105
+ result: {
106
+ data: {
107
+ route: {
108
+ id: '/accessories/orchid-peach-bag',
109
+ object: {
110
+ id: 522,
111
+ __typename: 'Product'
112
+ },
113
+ __typename: 'Route'
114
+ }
115
+ }
116
+ }
117
+ },
118
+ {
119
+ request: {
120
+ query: productPathnameRedirectQuery,
121
+ variables: { id: 522 }
122
+ },
123
+ result: {
124
+ data: {
125
+ Product: {
126
+ id: 522,
127
+ primaryRoute: {
128
+ id: '/accessories/bags/orchid-peach-bag-uk',
129
+ path: '/accessories/bags/orchid-peach-bag-uk',
130
+ __typename: 'Route'
131
+ },
132
+ __typename: 'Product'
133
+ }
134
+ }
135
+ }
136
+ },
137
+ {
138
+ request: {
139
+ query: productPathnameRedirectQuery,
140
+ variables: { id: 522 }
141
+ },
142
+ result: {
143
+ data: {
144
+ Product: {
145
+ id: 522,
146
+ primaryRoute: {
147
+ id: '/accessories/orchid-peach-bag',
148
+ path: '/accessories/orchid-peach-bag',
149
+ __typename: 'Route'
150
+ },
151
+ __typename: 'Product'
152
+ }
153
+ }
154
+ }
155
+ }
156
+ ];
157
+
158
+ function createClient(mocks) {
159
+ return new ApolloClient({
160
+ cache: new InMemoryCache({
161
+ addTypename: true,
162
+ fragmentMatcher: new IntrospectionFragmentMatcher({
163
+ introspectionQueryResultData: {
164
+ __schema: {
165
+ types: fragmentTypes
166
+ }
167
+ }
168
+ })
169
+ }),
170
+ link: new MockLink(mocks)
171
+ });
172
+ }
173
+
174
+ const client = createClient(redirectQueryMocks);
175
+ const getPrimaryRoutePath = primaryRouteForPathFetcher(client);
176
+
177
+ const selectedChannelSingleDomain = createSelectedChannel(
178
+ singleDomainChannels[0]
179
+ );
180
+
181
+ describe('Channel utils', () => {
182
+ beforeEach(() => {
183
+ // Workaround changes in universal-cookie
184
+ Object.defineProperty(document, 'cookie', {
185
+ value: null
186
+ });
187
+ });
188
+
189
+ it('successfully redirect to the appropriate channel', () => {
190
+ const recommendedChannel = createSelectedChannel(channels[1]);
191
+ const selectedChannel = createSelectedChannel(channels[0]);
192
+ const channelHandler = new ChannelHandler({
193
+ selectedChannel,
194
+ recommendedChannel,
195
+ getPrimaryRoutePath,
196
+ channels
197
+ });
198
+ const redirectUrl = channelHandler.getRedirectUrl({
199
+ client,
200
+ url: selectedChannel.url,
201
+ newChannel: recommendedChannel
202
+ });
203
+ expect(redirectUrl).resolves.toBe(
204
+ 'https://flight-m2.jetshop.se/?culture=sv-SE&channelCountry=SE&channel=SE'
205
+ );
206
+ });
207
+
208
+ it('Will not redirect when there is a channel in the cookie', () => {
209
+ const cookies = new Cookies();
210
+ cookies.set('channel', channels[0].name);
211
+ const { redirect } = getSelectedAndRecommendedChannel({
212
+ url: channels[0].url,
213
+ singleDomainMode: false,
214
+ channels,
215
+ cookies
216
+ });
217
+ expect(redirect).toBeFalsy();
218
+ });
219
+
220
+ it('Will not redirect when there is a channel in the query string', () => {
221
+ const cookies = new Cookies();
222
+ cookies.set('channel', channels[0].name);
223
+ const { redirect } = getSelectedAndRecommendedChannel({
224
+ url: channels[0].url + '?channelCountry="US"',
225
+ singleDomainMode: false,
226
+ channels,
227
+ cookies
228
+ });
229
+ expect(redirect).toBeFalsy();
230
+ });
231
+
232
+ it('Will not geo redirect when there is a channel in the query string', () => {
233
+ const cookies = new Cookies();
234
+ cookies.set('channel', channels[0].name);
235
+ const { redirect } = getSelectedAndRecommendedChannel({
236
+ url: channels[0].url + '?channelCountry="US"',
237
+ geoipCountry: 'SE',
238
+ singleDomainMode: false,
239
+ channels,
240
+ cookies
241
+ });
242
+ expect(redirect).toBeFalsy();
243
+ });
244
+
245
+ it('Will not redirect when the url is already correct', () => {
246
+ const cookies = new Cookies();
247
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
248
+ url: channels[0].url,
249
+ geoipCountry: 'US',
250
+ singleDomainMode: false,
251
+ channels,
252
+ cookies
253
+ });
254
+ expect(redirect).toBeFalsy();
255
+ expect(recommendedChannel).toBeFalsy();
256
+ });
257
+
258
+ it('Will redirect to the channel that has the country set as the default country', () => {
259
+ const cookies = new Cookies();
260
+ channels[0].countries.push({
261
+ name: 'Sweden',
262
+ code: 'SE',
263
+ isDefault: false
264
+ });
265
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
266
+ url: channels[0].url,
267
+ geoipCountry: 'SE',
268
+ singleDomainMode: false,
269
+ channels,
270
+ cookies
271
+ });
272
+ expect(redirect).toBeTruthy();
273
+ expect(recommendedChannel.name).toBe('SE');
274
+ });
275
+
276
+ it('Will not redirect when the channel is from an unkown country', () => {
277
+ const cookies = new Cookies();
278
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
279
+ url: channels[0].url,
280
+ geoipCountry: 'CO',
281
+ singleDomainMode: false,
282
+ channels,
283
+ cookies
284
+ });
285
+ expect(redirect).toBeFalsy();
286
+ expect(recommendedChannel).toBeFalsy();
287
+ });
288
+ });
289
+
290
+ describe('Single domain mode', () => {
291
+ it('Will not redirect when the channel is default, and the selected channel is also default', () => {
292
+ const cookies = new Cookies();
293
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
294
+ url: selectedChannelSingleDomain.url,
295
+ singleDomainMode: true,
296
+ channels: singleDomainChannels,
297
+ cookies
298
+ });
299
+ expect(redirect).toBeFalsy();
300
+ expect(recommendedChannel).toBeFalsy();
301
+ });
302
+ it('Will redirect when the url is at the wrong channel and the channel is default', () => {
303
+ const cookies = new Cookies();
304
+ const { recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
305
+ url: channels[0].url,
306
+ singleDomainMode: true,
307
+ channels: singleDomainChannels,
308
+ cookies
309
+ });
310
+ expect(redirect).toBe(true);
311
+ expect(recommendedChannel.url).toBe(selectedChannelSingleDomain.url);
312
+ });
313
+ it('Will not redirect when the redirect is disabled', () => {
314
+ const cookies = new Cookies();
315
+ const { redirect } = getSelectedAndRecommendedChannel({
316
+ url: channels[0].url + '?redirectDisabled=true',
317
+ singleDomainMode: true,
318
+ channels: singleDomainChannels,
319
+ cookies
320
+ });
321
+ expect(redirect).toBe(false);
322
+ });
323
+ it('Will not when the url is at the right channel', () => {
324
+ const cookies = new Cookies();
325
+ const { redirect } = getSelectedAndRecommendedChannel({
326
+ url: selectedChannelSingleDomain.url,
327
+ singleDomainMode: true,
328
+ channels: singleDomainChannels,
329
+ cookies
330
+ });
331
+ expect(redirect).toBe(false);
332
+ });
333
+ it('Will redirect when the url is at the wrong channel', () => {
334
+ const cookies = new Cookies();
335
+ cookies.set('channel', singleDomainChannels[2].name);
336
+ const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
337
+ url: selectedChannelSingleDomain.url,
338
+ singleDomainMode: true,
339
+ channels: singleDomainChannels,
340
+ cookies
341
+ });
342
+ expect(redirect).toBe(true);
343
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
344
+ });
345
+ it('Georedirect will respect single domain mode', () => {
346
+ const cookies = new Cookies();
347
+ const { redirect, recommendedChannel } = getSelectedAndRecommendedChannel({
348
+ url: selectedChannelSingleDomain.url,
349
+ singleDomainMode: true,
350
+ channels: singleDomainChannels,
351
+ cookies,
352
+ geoipCountry: 'UK'
353
+ });
354
+ expect(redirect).toBe(true);
355
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
356
+ });
357
+ it('Georedirect will respect single domain mode when there is a domain path', async () => {
358
+ const urlToPreserve = '/accessories/orchid-peach-bag';
359
+ const cookies = new Cookies();
360
+ const { redirect, recommendedChannel, selectedChannel } =
361
+ getSelectedAndRecommendedChannel({
362
+ url: selectedChannelSingleDomain.url + urlToPreserve,
363
+ singleDomainMode: true,
364
+ channels: singleDomainChannels,
365
+ cookies,
366
+ geoipCountry: 'UK'
367
+ });
368
+ expect(redirect).toBe(true);
369
+ expect(recommendedChannel.url).toBe('https://flight-m2.jetshop.se/uk');
370
+ const channelHandler = new ChannelHandler({
371
+ selectedChannel,
372
+ recommendedChannel,
373
+ getPrimaryRoutePath,
374
+ channels
375
+ });
376
+ const redirectUrl = channelHandler.getRedirectUrl({
377
+ client,
378
+ url: selectedChannelSingleDomain.url + urlToPreserve,
379
+ newChannel: channelHandler.recommendedChannel,
380
+ preserveRedirect: true
381
+ });
382
+ await expect(redirectUrl).resolves.toBe(
383
+ 'https://flight-m2.jetshop.se/uk/accessories/bags/orchid-peach-bag-uk?culture=sv-SE&channelCountry=UK&channel=UK'
384
+ );
385
+ });
386
+ it('Redirect on single domain mode when the basename shows up in the url', async () => {
387
+ const urlToPreserve = '/accessories/int/orchid-peach-bag';
388
+ const cookies = new Cookies();
389
+ const { redirect, recommendedChannel, selectedChannel } =
390
+ getSelectedAndRecommendedChannel({
391
+ url: channels[0].url + urlToPreserve,
392
+ singleDomainMode: true,
393
+ channels: singleDomainChannels,
394
+ cookies,
395
+ geoipCountry: 'UK'
396
+ });
397
+ expect(redirect).toBe(true);
398
+ const channelHandler = new ChannelHandler({
399
+ selectedChannel,
400
+ recommendedChannel,
401
+ getPrimaryRoutePath,
402
+ channels
403
+ });
404
+ const redirectUrl = channelHandler.getRedirectUrl({
405
+ client,
406
+ url: channels[0].url + urlToPreserve,
407
+ newChannel: channelHandler.recommendedChannel,
408
+ preserveRedirect: false
409
+ });
410
+ await expect(redirectUrl).resolves.toBe(
411
+ `https://flight-m2.jetshop.se/uk${urlToPreserve}?culture=sv-SE&channelCountry=UK&channel=UK`
412
+ );
413
+ });
414
+ it('Redirect on single domain mode when there is a domain path but no basename', async () => {
415
+ const urlToPreserve = '/accessories/orchid-peach-bag';
416
+ const cookies = new Cookies();
417
+ const { redirect, recommendedChannel, selectedChannel } =
418
+ getSelectedAndRecommendedChannel({
419
+ url: channels[0].url + urlToPreserve,
420
+ singleDomainMode: true,
421
+ channels: singleDomainChannels,
422
+ cookies
423
+ });
424
+ expect(redirect).toBe(true);
425
+ expect(recommendedChannel.url).toBe('https://flight.jetshop.se/int');
426
+ const channelHandler = new ChannelHandler({
427
+ selectedChannel,
428
+ recommendedChannel,
429
+ getPrimaryRoutePath,
430
+ channels
431
+ });
432
+ const redirectUrl = channelHandler.getRedirectUrl({
433
+ client,
434
+ url: channels[0].url + urlToPreserve,
435
+ newChannel: channelHandler.recommendedChannel,
436
+ preserveRedirect: true
437
+ });
438
+ await expect(redirectUrl).resolves.toBe(
439
+ `https://flight.jetshop.se/int${urlToPreserve}?culture=en-GB&channelCountry=US&channel=INT`
440
+ );
441
+ });
442
+ it('Will set the appropriate language based on basename', async () => {
443
+ const cookies = new Cookies();
444
+ const { selectedChannel } = getSelectedAndRecommendedChannel({
445
+ url: channels[1].url + '/en',
446
+ channels,
447
+ cookies
448
+ });
449
+ expect(selectedChannel.language.culture).toBe('en-GB');
450
+ });
451
+ it('Will set the appropriate language based on basename in singledomain mode', async () => {
452
+ const cookies = new Cookies();
453
+ const { selectedChannel } = getSelectedAndRecommendedChannel({
454
+ url: singleDomainChannels[1].url + '/en',
455
+ channels: singleDomainChannels,
456
+ cookies,
457
+ singleDomainMode: true
458
+ });
459
+ expect(selectedChannel.language.culture).toBe('en-GB');
460
+ });
461
+ it('Will redirect to a new language basename based on cookies', async () => {
462
+ const cookies = new Cookies();
463
+ cookies.set('culture', 'en-GB');
464
+ const { selectedChannel, recommendedChannel, redirect } =
465
+ getSelectedAndRecommendedChannel({
466
+ url: channels[1].url,
467
+ channels,
468
+ cookies
469
+ });
470
+ expect(redirect).toBe(true);
471
+ expect(recommendedChannel.language.culture).toBe('en-GB');
472
+ const channelHandler = new ChannelHandler({
473
+ selectedChannel,
474
+ recommendedChannel,
475
+ getPrimaryRoutePath,
476
+ channels
477
+ });
478
+ const redirectUrl = channelHandler.getRedirectUrl({
479
+ client,
480
+ url: selectedChannel.url,
481
+ newChannel: recommendedChannel
482
+ });
483
+ expect(redirectUrl).resolves.toBe(
484
+ 'https://flight-m2.jetshop.se/en/?culture=en-GB&channelCountry=SE&channel=SE'
485
+ );
486
+ });
487
+ it('Will redirect to a new language basename based on cookies in single domain mode', async () => {
488
+ const cookies = new Cookies();
489
+ cookies.set('culture', 'en-GB');
490
+ const { selectedChannel, recommendedChannel, redirect } =
491
+ getSelectedAndRecommendedChannel({
492
+ url: singleDomainChannels[1].url,
493
+ channels: singleDomainChannels,
494
+ cookies,
495
+ singleDomainMode: true
496
+ });
497
+ expect(redirect).toBe(true);
498
+ expect(recommendedChannel.language.culture).toBe('en-GB');
499
+ const channelHandler = new ChannelHandler({
500
+ selectedChannel,
501
+ recommendedChannel,
502
+ getPrimaryRoutePath,
503
+ channels
504
+ });
505
+ const redirectUrl = channelHandler.getRedirectUrl({
506
+ client,
507
+ url: selectedChannel.url,
508
+ newChannel: recommendedChannel
509
+ });
510
+ expect(redirectUrl).resolves.toBe(
511
+ 'https://flight-m2.jetshop.se/se/en/?culture=en-GB&channelCountry=SE&channel=SE'
512
+ );
513
+ });
514
+ });