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