@jetshop/core 5.13.0 → 5.13.10-0

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