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

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 (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,236 +1,236 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- import { getDataFromTree } from '@apollo/react-ssr';
11
- import { getSelectedAndRecommendedChannel } from '@jetshop/core/ChannelHandler/channelUtils';
12
- import { setupIntl } from '@jetshop/intl/config';
13
- import IntlContext from '@jetshop/intl/context';
14
- import React from 'react';
15
- import { renderToString } from 'react-dom/server';
16
- import { ChunkExtractor, ChunkExtractorManager } from '@loadable/server';
17
- import { StaticRouter } from 'react-router-dom';
18
- import { createPolyfill } from '../../polyfills';
19
- import { getActiveFiltersFromSearch } from '../../resolvers/filters/filterParams';
20
- import { createClient } from '../apollo';
21
- import SharedTree from '../SharedTree';
22
- import createIntlOptions from '../utils/createIntOptions';
23
- import selectExperimentVariant from '../../experiments/selectExperimentVariant';
24
- import { ChannelHandler } from '../../ChannelHandler/ChannelHandler';
25
- import { AuthHandler } from '../AuthHandler';
26
- import { PreviewHandler } from '../PreviewHandler';
27
- import isBot from 'isbot';
28
- import { getPersistedQueriesForRequest } from './persistedQueries/getPersistedQueriesForRequest';
29
- import _merge from 'lodash.merge';
30
- import { salesSourceMiddleware } from './salesSource';
31
- import { getPreloadLinkHeaderString } from './getPreloadAssets';
32
- import { primaryRouteForPathFetcher } from '../../../core/ChannelHandler/redirectUtils';
33
- const injectDataIntoSlots = (template, data) => Object.keys(data).reduce((output, key) => key !== 'htmlAttributes'
34
- ? output.replace(`<slot name="${key}"/>`, data[key])
35
- : output.replace('<html lang="en">', `<html ${data[key]}>`), template);
36
- const wrapTree = (tree, req, renderOptions, client, channelHandler, authHandler, previewHandler, translator, locale, config, extractor) => __awaiter(void 0, void 0, void 0, function* () {
37
- var _a;
38
- const modules = [];
39
- const routerContext = { url: null, statusCode: 200 };
40
- const helmetContext = { helmet: null };
41
- const wrappedTree = (React.createElement(ChunkExtractorManager, { extractor: extractor },
42
- React.createElement(IntlContext.Provider, { value: translator },
43
- React.createElement(SharedTree, { activeBreakpoint: req.breakpoint, config: renderOptions, cookies: req.universalCookies, helmetContext: helmetContext, client: client, channelHandler: channelHandler, authHandler: authHandler, previewHandler: previewHandler, Router: StaticRouter, routerProps: {
44
- location: req.originalUrl,
45
- context: routerContext
46
- } }, tree))));
47
- try {
48
- // This getDataFromTree is used to get all of the data from the Query components
49
- yield getDataFromTree(wrappedTree);
50
- }
51
- catch (e) {
52
- // Don't log to Sentry here as we're already logging query errors in a
53
- // middleware and JS errors further down in `handleError` and then
54
- // again on the client if it fails to recover
55
- if (e.message ===
56
- 'GraphQL error: This channel requires you to be logged in.' ||
57
- ((_a = e.networkError) === null || _a === void 0 ? void 0 : _a.statusCode) === 401) {
58
- const base = channelHandler.getChannelBasename() || '';
59
- const loginPathWithBase = base + config.loginPath;
60
- const routesAllowedWithoutAuth = config.pathsWithNoAuthRequired.map((path) => base + path);
61
- const matches = routesAllowedWithoutAuth.filter((route) => req.path.startsWith(route))
62
- .length > 0;
63
- // Redirect to login page on all other routes
64
- if (!matches) {
65
- const reqUrl = new URL(req.protocol + '://' + req.get('host') + req.originalUrl);
66
- routerContext.statusCode = 302;
67
- routerContext.url = loginPathWithBase + reqUrl.search;
68
- }
69
- }
70
- else {
71
- console.error('Apollo data fetch failed:', e);
72
- routerContext.statusCode = 500;
73
- }
74
- }
75
- // Serialize the apollo state for client side rehydration. The html comment
76
- // (inside js comments) is intentional and prevents inline script tags
77
- // inside the extracted state from closing this script tag prematurely
78
- const apolloState = `<script>/*<!--*/
79
- window.__APOLLO_STATE__=JSON.parse(${JSON.stringify(JSON.stringify(client.extract()))});
80
- /*-->*/</script>`;
81
- return {
82
- wrappedTree,
83
- modules,
84
- routerUrl: routerContext.url,
85
- statusCode: routerContext.statusCode,
86
- helmet: helmetContext.helmet,
87
- apolloState,
88
- polyfill: createPolyfill(locale)
89
- };
90
- });
91
- const startResponse = ({ res, head, statusCode }) => {
92
- res.status(statusCode);
93
- // write head and don't end response
94
- res.write(head);
95
- };
96
- const endResponse = ({ res, foot }) => {
97
- res.write(foot);
98
- res.end();
99
- };
100
- const persistedQueryClients = {};
101
- const createRenderer = (template, tree, options) => {
102
- return (req, res) => __awaiter(void 0, void 0, void 0, function* () {
103
- var _a;
104
- const { apolloConfig, loadableStatsPath, intl, schema, globalClient, disableGeoRedirect, singleDomainMode } = options;
105
- // Set response headers immediately
106
- res.setHeader('Content-Type', 'text/html');
107
- const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
108
- const cookies = req.universalCookies;
109
- salesSourceMiddleware({
110
- queryObject: req.query,
111
- cookies
112
- });
113
- // geoIP is set in the load balancer
114
- const geoipCountry = req.header('x-geoip-country');
115
- const acceptedLanguages = req.headers['accept-language']
116
- ? req.headers['accept-language']
117
- : '';
118
- const channels = yield globalClient.getChannels();
119
- const { selectedChannel, recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
120
- url: fullUrl,
121
- singleDomainMode,
122
- channels,
123
- cookies,
124
- geoipCountry,
125
- acceptedLanguages,
126
- disableGeoRedirect
127
- });
128
- const authHandler = new AuthHandler({
129
- cookies
130
- });
131
- const previewHandler = new PreviewHandler();
132
- const channelHandler = new ChannelHandler({
133
- selectedChannel,
134
- recommendedChannel,
135
- channels
136
- });
137
- const createClientOpts = {
138
- apolloConfig,
139
- schema,
140
- authHandler,
141
- previewHandler,
142
- req,
143
- channelHandler
144
- };
145
- const { client } = createClient(createClientOpts);
146
- channelHandler.setGetPrimaryRoutePath(primaryRouteForPathFetcher(client));
147
- if (redirect && !isBot(req.header('user-agent'))) {
148
- const redirectUrl = yield channelHandler.getRedirectUrl({
149
- url: fullUrl,
150
- newChannel: channelHandler.recommendedChannel,
151
- preserveRedirect: true,
152
- routes: options.routes
153
- });
154
- return res.redirect(302, redirectUrl);
155
- }
156
- const persistedQueries = yield ((_a = getPersistedQueriesForRequest(persistedQueryClients, createClientOpts)) === null || _a === void 0 ? void 0 : _a.extractCache());
157
- // Merge channel and persisted query caches
158
- const cachedChannels = yield globalClient.extractCache();
159
- const combinedCache = _merge({}, cachedChannels, persistedQueries);
160
- client.cache.restore(combinedCache);
161
- // Initialise cache with active filters from the search params
162
- client.cache.writeData({
163
- data: {
164
- activeFilters: getActiveFiltersFromSearch(req.query)
165
- }
166
- });
167
- const intlOptions = createIntlOptions({
168
- selectedChannel,
169
- options: intl.options
170
- });
171
- const { translator, locale } = yield setupIntl({
172
- translations: intl.translations,
173
- locale: selectedChannel.language.culture,
174
- defaultLocale: intl.defaultLocale,
175
- options: intlOptions
176
- });
177
- if (options.optimize) {
178
- const selectedVariant = req.universalCookies.get('optimizeExperiment');
179
- const newVariant = selectExperimentVariant(options.optimize, selectedVariant);
180
- if (newVariant) {
181
- req.universalCookies.set('optimizeExperiment', newVariant, {
182
- path: '/',
183
- maxAge: 60 * 60 * 24 * 90 // 90 days
184
- });
185
- }
186
- }
187
- const chunkExtractor = new ChunkExtractor({
188
- statsFile: loadableStatsPath,
189
- entrypoints: ['client']
190
- });
191
- const { wrappedTree, routerUrl, statusCode, helmet: { htmlAttributes, title, meta, style, link }, apolloState, polyfill } = yield wrapTree(tree, req, options, client, channelHandler, authHandler, previewHandler, translator, locale, {
192
- loginPath: options.loginPath,
193
- pathsWithNoAuthRequired: options.pathsWithNoAuthRequired
194
- }, chunkExtractor);
195
- if (routerUrl) {
196
- return res.redirect(
197
- // We want to default to 302 redirects so if no status code comes back so we don't accidentally cache a temporary redirect as permanent
198
- // If we get a non-redirect status code or no status code we won't redirect so we need to change the status code to 302
199
- !statusCode || statusCode < 300 || statusCode >= 400 ? 302 : statusCode, routerUrl);
200
- }
201
- // We want to set the Link header string first so that the required assets are immediately downloaded before the html starts rendering
202
- const preLoadAssets = chunkExtractor.getPreAssets();
203
- if (preLoadAssets.length > 0) {
204
- res.set('Link', getPreloadLinkHeaderString(preLoadAssets));
205
- }
206
- // Here we get the actual link, style, and script tags to be rendered in the html slots
207
- const preloadLinks = chunkExtractor.getLinkTags();
208
- const preloadStyles = chunkExtractor.getStyleTags();
209
- const preloadScripts = chunkExtractor.getScriptTags();
210
- // eslint
211
- const breakpointScript = `<script>window.__ACTIVE_BREAKPOINT__ = "${req.breakpoint}";</script>`;
212
- const geoipCountryScript = `<script>window.__GEOIP_COUNTRY__ = "${geoipCountry}";</script>`;
213
- const acceptedLanguagesScript = `<script>window.__ACCEPTED_LANGUAGES__ = '${JSON.stringify(acceptedLanguages)}';</script>`;
214
- const statusCodeScript = `<script>window.__STATUS_CODE__ = '${statusCode}';</script>`;
215
- const data = {
216
- apolloState: apolloState,
217
- polyfill,
218
- preloadLinks,
219
- preloadScripts: preloadScripts +
220
- geoipCountryScript +
221
- acceptedLanguagesScript +
222
- statusCodeScript,
223
- title: title.toString(),
224
- meta: meta.toString() + link.toString(),
225
- style: style.toString() + breakpointScript + preloadStyles,
226
- htmlAttributes: htmlAttributes.toString()
227
- };
228
- const html = injectDataIntoSlots(template, data);
229
- const [head, foot] = html.split('<slot name="html"/>');
230
- startResponse({ res, head, statusCode });
231
- res.write(renderToString(wrappedTree));
232
- endResponse({ res, foot });
233
- });
234
- };
235
- export default createRenderer;
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { getDataFromTree } from '@apollo/react-ssr';
11
+ import { getSelectedAndRecommendedChannel } from '@jetshop/core/ChannelHandler/channelUtils';
12
+ import { setupIntl } from '@jetshop/intl/config';
13
+ import IntlContext from '@jetshop/intl/context';
14
+ import React from 'react';
15
+ import { renderToString } from 'react-dom/server';
16
+ import { ChunkExtractor, ChunkExtractorManager } from '@loadable/server';
17
+ import { StaticRouter } from 'react-router-dom';
18
+ import { createPolyfill } from '../../polyfills';
19
+ import { getActiveFiltersFromSearch } from '../../resolvers/filters/filterParams';
20
+ import { createClient } from '../apollo';
21
+ import SharedTree from '../SharedTree';
22
+ import createIntlOptions from '../utils/createIntOptions';
23
+ import selectExperimentVariant from '../../experiments/selectExperimentVariant';
24
+ import { ChannelHandler } from '../../ChannelHandler/ChannelHandler';
25
+ import { AuthHandler } from '../AuthHandler';
26
+ import { PreviewHandler } from '../PreviewHandler';
27
+ import isBot from 'isbot';
28
+ import { getPersistedQueriesForRequest } from './persistedQueries/getPersistedQueriesForRequest';
29
+ import _merge from 'lodash.merge';
30
+ import { salesSourceMiddleware } from './salesSource';
31
+ import { getPreloadLinkHeaderString } from './getPreloadAssets';
32
+ import { primaryRouteForPathFetcher } from '../../../core/ChannelHandler/redirectUtils';
33
+ const injectDataIntoSlots = (template, data) => Object.keys(data).reduce((output, key) => key !== 'htmlAttributes'
34
+ ? output.replace(`<slot name="${key}"/>`, data[key])
35
+ : output.replace('<html lang="en">', `<html ${data[key]}>`), template);
36
+ const wrapTree = (tree, req, renderOptions, client, channelHandler, authHandler, previewHandler, translator, locale, config, extractor) => __awaiter(void 0, void 0, void 0, function* () {
37
+ var _a;
38
+ const modules = [];
39
+ const routerContext = { url: null, statusCode: 200 };
40
+ const helmetContext = { helmet: null };
41
+ const wrappedTree = (React.createElement(ChunkExtractorManager, { extractor: extractor },
42
+ React.createElement(IntlContext.Provider, { value: translator },
43
+ React.createElement(SharedTree, { activeBreakpoint: req.breakpoint, config: renderOptions, cookies: req.universalCookies, helmetContext: helmetContext, client: client, channelHandler: channelHandler, authHandler: authHandler, previewHandler: previewHandler, Router: StaticRouter, routerProps: {
44
+ location: req.originalUrl,
45
+ context: routerContext
46
+ } }, tree))));
47
+ try {
48
+ // This getDataFromTree is used to get all of the data from the Query components
49
+ yield getDataFromTree(wrappedTree);
50
+ }
51
+ catch (e) {
52
+ // Don't log to Sentry here as we're already logging query errors in a
53
+ // middleware and JS errors further down in `handleError` and then
54
+ // again on the client if it fails to recover
55
+ if (e.message ===
56
+ 'GraphQL error: This channel requires you to be logged in.' ||
57
+ ((_a = e.networkError) === null || _a === void 0 ? void 0 : _a.statusCode) === 401) {
58
+ const base = channelHandler.getChannelBasename() || '';
59
+ const loginPathWithBase = base + config.loginPath;
60
+ const routesAllowedWithoutAuth = config.pathsWithNoAuthRequired.map((path) => base + path);
61
+ const matches = routesAllowedWithoutAuth.filter((route) => req.path.startsWith(route))
62
+ .length > 0;
63
+ // Redirect to login page on all other routes
64
+ if (!matches) {
65
+ const reqUrl = new URL(req.protocol + '://' + req.get('host') + req.originalUrl);
66
+ routerContext.statusCode = 302;
67
+ routerContext.url = loginPathWithBase + reqUrl.search;
68
+ }
69
+ }
70
+ else {
71
+ console.error('Apollo data fetch failed:', e);
72
+ routerContext.statusCode = 500;
73
+ }
74
+ }
75
+ // Serialize the apollo state for client side rehydration. The html comment
76
+ // (inside js comments) is intentional and prevents inline script tags
77
+ // inside the extracted state from closing this script tag prematurely
78
+ const apolloState = `<script>/*<!--*/
79
+ window.__APOLLO_STATE__=JSON.parse(${JSON.stringify(JSON.stringify(client.extract()))});
80
+ /*-->*/</script>`;
81
+ return {
82
+ wrappedTree,
83
+ modules,
84
+ routerUrl: routerContext.url,
85
+ statusCode: routerContext.statusCode,
86
+ helmet: helmetContext.helmet,
87
+ apolloState,
88
+ polyfill: createPolyfill(locale)
89
+ };
90
+ });
91
+ const startResponse = ({ res, head, statusCode }) => {
92
+ res.status(statusCode);
93
+ // write head and don't end response
94
+ res.write(head);
95
+ };
96
+ const endResponse = ({ res, foot }) => {
97
+ res.write(foot);
98
+ res.end();
99
+ };
100
+ const persistedQueryClients = {};
101
+ const createRenderer = (template, tree, options) => {
102
+ return (req, res) => __awaiter(void 0, void 0, void 0, function* () {
103
+ var _a;
104
+ const { apolloConfig, loadableStatsPath, intl, schema, globalClient, disableGeoRedirect, singleDomainMode } = options;
105
+ // Set response headers immediately
106
+ res.setHeader('Content-Type', 'text/html');
107
+ const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
108
+ const cookies = req.universalCookies;
109
+ salesSourceMiddleware({
110
+ queryObject: req.query,
111
+ cookies
112
+ });
113
+ // geoIP is set in the load balancer
114
+ const geoipCountry = req.header('x-geoip-country');
115
+ const acceptedLanguages = req.headers['accept-language']
116
+ ? req.headers['accept-language']
117
+ : '';
118
+ const channels = yield globalClient.getChannels();
119
+ const { selectedChannel, recommendedChannel, redirect } = getSelectedAndRecommendedChannel({
120
+ url: fullUrl,
121
+ singleDomainMode,
122
+ channels,
123
+ cookies,
124
+ geoipCountry,
125
+ acceptedLanguages,
126
+ disableGeoRedirect
127
+ });
128
+ const authHandler = new AuthHandler({
129
+ cookies
130
+ });
131
+ const previewHandler = new PreviewHandler();
132
+ const channelHandler = new ChannelHandler({
133
+ selectedChannel,
134
+ recommendedChannel,
135
+ channels
136
+ });
137
+ const createClientOpts = {
138
+ apolloConfig,
139
+ schema,
140
+ authHandler,
141
+ previewHandler,
142
+ req,
143
+ channelHandler
144
+ };
145
+ const { client } = createClient(createClientOpts);
146
+ channelHandler.setGetPrimaryRoutePath(primaryRouteForPathFetcher(client));
147
+ if (redirect && !isBot(req.header('user-agent'))) {
148
+ const redirectUrl = yield channelHandler.getRedirectUrl({
149
+ url: fullUrl,
150
+ newChannel: channelHandler.recommendedChannel,
151
+ preserveRedirect: true,
152
+ routes: options.routes
153
+ });
154
+ return res.redirect(302, redirectUrl);
155
+ }
156
+ const persistedQueries = yield ((_a = getPersistedQueriesForRequest(persistedQueryClients, createClientOpts)) === null || _a === void 0 ? void 0 : _a.extractCache());
157
+ // Merge channel and persisted query caches
158
+ const cachedChannels = yield globalClient.extractCache();
159
+ const combinedCache = _merge({}, cachedChannels, persistedQueries);
160
+ client.cache.restore(combinedCache);
161
+ // Initialise cache with active filters from the search params
162
+ client.cache.writeData({
163
+ data: {
164
+ activeFilters: getActiveFiltersFromSearch(req.query)
165
+ }
166
+ });
167
+ const intlOptions = createIntlOptions({
168
+ selectedChannel,
169
+ options: intl.options
170
+ });
171
+ const { translator, locale } = yield setupIntl({
172
+ translations: intl.translations,
173
+ locale: selectedChannel.language.culture,
174
+ defaultLocale: intl.defaultLocale,
175
+ options: intlOptions
176
+ });
177
+ if (options.optimize) {
178
+ const selectedVariant = req.universalCookies.get('optimizeExperiment');
179
+ const newVariant = selectExperimentVariant(options.optimize, selectedVariant);
180
+ if (newVariant) {
181
+ req.universalCookies.set('optimizeExperiment', newVariant, {
182
+ path: '/',
183
+ maxAge: 60 * 60 * 24 * 90 // 90 days
184
+ });
185
+ }
186
+ }
187
+ const chunkExtractor = new ChunkExtractor({
188
+ statsFile: loadableStatsPath,
189
+ entrypoints: ['client']
190
+ });
191
+ const { wrappedTree, routerUrl, statusCode, helmet: { htmlAttributes, title, meta, style, link }, apolloState, polyfill } = yield wrapTree(tree, req, options, client, channelHandler, authHandler, previewHandler, translator, locale, {
192
+ loginPath: options.loginPath,
193
+ pathsWithNoAuthRequired: options.pathsWithNoAuthRequired
194
+ }, chunkExtractor);
195
+ if (routerUrl) {
196
+ return res.redirect(
197
+ // We want to default to 302 redirects so if no status code comes back so we don't accidentally cache a temporary redirect as permanent
198
+ // If we get a non-redirect status code or no status code we won't redirect so we need to change the status code to 302
199
+ !statusCode || statusCode < 300 || statusCode >= 400 ? 302 : statusCode, routerUrl);
200
+ }
201
+ // We want to set the Link header string first so that the required assets are immediately downloaded before the html starts rendering
202
+ const preLoadAssets = chunkExtractor.getPreAssets();
203
+ if (preLoadAssets.length > 0) {
204
+ res.set('Link', getPreloadLinkHeaderString(preLoadAssets));
205
+ }
206
+ // Here we get the actual link, style, and script tags to be rendered in the html slots
207
+ const preloadLinks = chunkExtractor.getLinkTags();
208
+ const preloadStyles = chunkExtractor.getStyleTags();
209
+ const preloadScripts = chunkExtractor.getScriptTags();
210
+ // eslint
211
+ const breakpointScript = `<script>window.__ACTIVE_BREAKPOINT__ = "${req.breakpoint}";</script>`;
212
+ const geoipCountryScript = `<script>window.__GEOIP_COUNTRY__ = "${geoipCountry}";</script>`;
213
+ const acceptedLanguagesScript = `<script>window.__ACCEPTED_LANGUAGES__ = '${JSON.stringify(acceptedLanguages)}';</script>`;
214
+ const statusCodeScript = `<script>window.__STATUS_CODE__ = '${statusCode}';</script>`;
215
+ const data = {
216
+ apolloState: apolloState,
217
+ polyfill,
218
+ preloadLinks,
219
+ preloadScripts: preloadScripts +
220
+ geoipCountryScript +
221
+ acceptedLanguagesScript +
222
+ statusCodeScript,
223
+ title: title.toString(),
224
+ meta: meta.toString() + link.toString(),
225
+ style: style.toString() + breakpointScript + preloadStyles,
226
+ htmlAttributes: htmlAttributes.toString()
227
+ };
228
+ const html = injectDataIntoSlots(template, data);
229
+ const [head, foot] = html.split('<slot name="html"/>');
230
+ startResponse({ res, head, statusCode });
231
+ res.write(renderToString(wrappedTree));
232
+ endResponse({ res, foot });
233
+ });
234
+ };
235
+ export default createRenderer;
236
236
  //# sourceMappingURL=createRenderer.js.map
@@ -1,14 +1,14 @@
1
- import { ApolloServer } from 'apollo-server-express';
2
- import { Request, Response, Express, NextFunction } from 'express';
3
- export interface Middleware {
4
- path: string;
5
- handler: (req: Request, res: Response, next: NextFunction) => Promise<void> | void;
6
- }
7
- export interface CreateServerOptions {
8
- apolloServer: ApolloServer;
9
- }
10
- declare const createServer: ({ apolloServer, middlewares }: {
11
- apolloServer?: ApolloServer;
12
- middlewares: Middleware[];
13
- }) => Express;
14
- export default createServer;
1
+ import { ApolloServer } from 'apollo-server-express';
2
+ import { Request, Response, Express, NextFunction } from 'express';
3
+ export interface Middleware {
4
+ path: string;
5
+ handler: (req: Request, res: Response, next: NextFunction) => Promise<void> | void;
6
+ }
7
+ export interface CreateServerOptions {
8
+ apolloServer: ApolloServer;
9
+ }
10
+ declare const createServer: ({ apolloServer, middlewares }: {
11
+ apolloServer?: ApolloServer;
12
+ middlewares: Middleware[];
13
+ }) => Express;
14
+ export default createServer;
@@ -1,42 +1,42 @@
1
- import * as Sentry from '@sentry/node';
2
- import express from 'express';
3
- import compression from 'compression';
4
- import breakpointMiddleware from '@jetshop/core/boot/server/breakpointMiddleware';
5
- import cookiesMiddleware from 'universal-cookie-express';
6
- import report from '../../errorReporting';
7
- // Makes the script crash on unhandled rejections instead of silently
8
- // ignoring them. In the future, promise rejections that are not handled will
9
- // terminate the Node.js process with a non-zero exit code.
10
- process.on('unhandledRejection', (err) => {
11
- report(err, { reason: 'unhandledRejection' });
12
- throw err;
13
- });
14
- const createServer = ({ apolloServer, middlewares }) => {
15
- const app = express();
16
- // The Sentry.io request handler must be the first middleware on the app
17
- if (process.env.USE_SENTRY === '1') {
18
- app.use(Sentry.Handlers.requestHandler());
19
- }
20
- app.set('trust proxy', true);
21
- app.use(compression());
22
- app.use(breakpointMiddleware);
23
- app.use(cookiesMiddleware());
24
- if (apolloServer) {
25
- apolloServer.applyMiddleware({
26
- app: app,
27
- path: '/graphql'
28
- });
29
- }
30
- app.use(express.json());
31
- middlewares.forEach(({ path, handler }) => app.use(path, handler));
32
- app.use(express.static(process.env.RAZZLE_PUBLIC_DIR, {
33
- maxAge: '365d'
34
- }));
35
- // The error handler must be before any other error middleware
36
- if (process.env.USE_SENTRY === '1') {
37
- app.use(Sentry.Handlers.errorHandler());
38
- }
39
- return app;
40
- };
41
- export default createServer;
1
+ import * as Sentry from '@sentry/node';
2
+ import express from 'express';
3
+ import compression from 'compression';
4
+ import breakpointMiddleware from '@jetshop/core/boot/server/breakpointMiddleware';
5
+ import cookiesMiddleware from 'universal-cookie-express';
6
+ import report from '../../errorReporting';
7
+ // Makes the script crash on unhandled rejections instead of silently
8
+ // ignoring them. In the future, promise rejections that are not handled will
9
+ // terminate the Node.js process with a non-zero exit code.
10
+ process.on('unhandledRejection', (err) => {
11
+ report(err, { reason: 'unhandledRejection' });
12
+ throw err;
13
+ });
14
+ const createServer = ({ apolloServer, middlewares }) => {
15
+ const app = express();
16
+ // The Sentry.io request handler must be the first middleware on the app
17
+ if (process.env.USE_SENTRY === '1') {
18
+ app.use(Sentry.Handlers.requestHandler());
19
+ }
20
+ app.set('trust proxy', true);
21
+ app.use(compression());
22
+ app.use(breakpointMiddleware);
23
+ app.use(cookiesMiddleware());
24
+ if (apolloServer) {
25
+ apolloServer.applyMiddleware({
26
+ app: app,
27
+ path: '/graphql'
28
+ });
29
+ }
30
+ app.use(express.json());
31
+ middlewares.forEach(({ path, handler }) => app.use(path, handler));
32
+ app.use(express.static(process.env.RAZZLE_PUBLIC_DIR, {
33
+ maxAge: '365d'
34
+ }));
35
+ // The error handler must be before any other error middleware
36
+ if (process.env.USE_SENTRY === '1') {
37
+ app.use(Sentry.Handlers.errorHandler());
38
+ }
39
+ return app;
40
+ };
41
+ export default createServer;
42
42
  //# sourceMappingURL=createServer.js.map
@@ -1 +1 @@
1
- export {};
1
+ export {};