@shopify/hydrogen 0.22.1 → 0.25.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 (445) hide show
  1. package/CHANGELOG.md +378 -0
  2. package/dist/esnext/components/AddToCartButton/AddToCartButton.client.d.ts +2 -5
  3. package/dist/esnext/components/AddToCartButton/AddToCartButton.client.js +18 -17
  4. package/dist/esnext/components/BaseButton/BaseButton.client.d.ts +14 -0
  5. package/dist/esnext/components/BaseButton/BaseButton.client.js +15 -0
  6. package/dist/esnext/components/BaseButton/index.d.ts +1 -0
  7. package/dist/esnext/components/BaseButton/index.js +1 -0
  8. package/dist/esnext/components/BuyNowButton/BuyNowButton.client.d.ts +2 -5
  9. package/dist/esnext/components/BuyNowButton/BuyNowButton.client.js +5 -4
  10. package/dist/esnext/components/CartEstimatedCost/CartEstimatedCost.client.js +4 -4
  11. package/dist/esnext/components/CartLinePrice/CartLinePrice.client.js +5 -8
  12. package/dist/esnext/components/CartLineProvider/context.d.ts +10 -0
  13. package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.d.ts +4 -5
  14. package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.js +16 -14
  15. package/dist/esnext/components/CartLines/{CartLines.d.ts → CartLines.client.d.ts} +0 -0
  16. package/dist/esnext/components/CartLines/{CartLines.js → CartLines.client.js} +1 -1
  17. package/dist/esnext/components/CartLines/index.d.ts +1 -1
  18. package/dist/esnext/components/CartLines/index.js +1 -1
  19. package/dist/esnext/components/CartProvider/CartProvider.client.js +31 -38
  20. package/dist/esnext/components/CartProvider/cart-queries.d.ts +1 -1
  21. package/dist/esnext/components/CartProvider/cart-queries.js +11 -0
  22. package/dist/esnext/components/CartProvider/graphql/CartAttributesUpdateMutation.d.ts +11 -1
  23. package/dist/esnext/components/CartProvider/graphql/CartBuyerIdentityUpdateMutation.d.ts +11 -1
  24. package/dist/esnext/components/CartProvider/graphql/CartCreateMutation.d.ts +11 -1
  25. package/dist/esnext/components/CartProvider/graphql/CartDiscountCodesUpdateMutation.d.ts +11 -1
  26. package/dist/esnext/components/CartProvider/graphql/CartFragment.d.ts +11 -1
  27. package/dist/esnext/components/CartProvider/graphql/CartLineAddMutation.d.ts +11 -1
  28. package/dist/esnext/components/CartProvider/graphql/CartLineRemoveMutation.d.ts +11 -1
  29. package/dist/esnext/components/CartProvider/graphql/CartLineUpdateMutation.d.ts +11 -1
  30. package/dist/esnext/components/CartProvider/graphql/CartNoteUpdateMutation.d.ts +11 -1
  31. package/dist/esnext/components/CartProvider/graphql/CartQuery.d.ts +11 -1
  32. package/dist/esnext/components/CartProvider/hooks.client.js +5 -8
  33. package/dist/esnext/components/CartProvider/types.d.ts +2 -0
  34. package/dist/esnext/components/ExternalVideo/ExternalVideo.js +1 -1
  35. package/dist/esnext/components/Image/Image.d.ts +21 -0
  36. package/dist/esnext/components/Image/Image.js +88 -14
  37. package/dist/esnext/components/Link/Link.client.d.ts +2 -0
  38. package/dist/esnext/components/Link/Link.client.js +8 -5
  39. package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.js +2 -2
  40. package/dist/esnext/components/Metafield/Metafield.client.d.ts +6 -10
  41. package/dist/esnext/components/Metafield/Metafield.client.js +67 -31
  42. package/dist/esnext/components/Metafield/components/StarRating/StarRating.js +1 -1
  43. package/dist/esnext/components/ModelViewer/ModelViewer.client.js +2 -3
  44. package/dist/esnext/components/Money/Money.client.js +1 -1
  45. package/dist/esnext/components/ProductOptionsProvider/ProductOptionsProvider.client.d.ts +21 -0
  46. package/dist/esnext/components/ProductOptionsProvider/ProductOptionsProvider.client.js +133 -0
  47. package/dist/esnext/components/ProductOptionsProvider/context.d.ts +2 -0
  48. package/dist/esnext/components/{ProductProvider → ProductOptionsProvider}/context.js +0 -1
  49. package/dist/esnext/components/ProductOptionsProvider/index.d.ts +2 -0
  50. package/dist/esnext/components/ProductOptionsProvider/index.js +2 -0
  51. package/dist/esnext/components/ProductPrice/ProductPrice.client.d.ts +5 -2
  52. package/dist/esnext/components/ProductPrice/ProductPrice.client.js +10 -12
  53. package/dist/esnext/components/Seo/CollectionSeo.client.js +2 -3
  54. package/dist/esnext/components/Seo/DefaultPageSeo.client.js +3 -3
  55. package/dist/esnext/components/Seo/NoIndexSeo.client.js +2 -2
  56. package/dist/esnext/components/Seo/PageSeo.client.js +2 -3
  57. package/dist/esnext/components/Seo/ProductSeo.client.js +9 -10
  58. package/dist/esnext/components/ShopPayButton/ShopPayButton.client.js +2 -3
  59. package/dist/esnext/components/Video/Video.js +2 -3
  60. package/dist/esnext/components/index.d.ts +1 -1
  61. package/dist/esnext/components/index.js +1 -1
  62. package/dist/esnext/config.d.ts +4 -0
  63. package/dist/esnext/config.js +4 -0
  64. package/dist/esnext/constants.d.ts +2 -0
  65. package/dist/esnext/constants.js +2 -0
  66. package/dist/esnext/entry-client.js +107 -21
  67. package/dist/esnext/entry-server.d.ts +2 -31
  68. package/dist/esnext/entry-server.js +400 -335
  69. package/dist/esnext/foundation/Analytics/Analytics.client.js +15 -13
  70. package/dist/esnext/foundation/Analytics/Analytics.server.js +27 -20
  71. package/dist/esnext/foundation/Analytics/ClientAnalytics.d.ts +4 -2
  72. package/dist/esnext/foundation/Analytics/ClientAnalytics.js +16 -14
  73. package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.d.ts +4 -0
  74. package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.js +36 -0
  75. package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/ServerAnalyticsConnector.d.ts +3 -0
  76. package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/ServerAnalyticsConnector.js +27 -0
  77. package/dist/esnext/foundation/Analytics/connectors/Shopify/ServerAnalyticsConnector.d.ts +3 -0
  78. package/dist/esnext/foundation/Analytics/connectors/Shopify/ServerAnalyticsConnector.js +21 -0
  79. package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.client.d.ts +3 -0
  80. package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.client.js +190 -0
  81. package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.server.d.ts +3 -0
  82. package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.server.js +23 -0
  83. package/dist/esnext/foundation/Analytics/connectors/Shopify/const.d.ts +28 -0
  84. package/dist/esnext/foundation/Analytics/connectors/Shopify/const.js +51 -0
  85. package/dist/esnext/foundation/Analytics/connectors/Shopify/utils.d.ts +3 -0
  86. package/dist/esnext/foundation/Analytics/connectors/Shopify/utils.js +56 -0
  87. package/dist/esnext/foundation/Analytics/hook.js +4 -2
  88. package/dist/esnext/foundation/Analytics/utils.d.ts +2 -0
  89. package/dist/esnext/foundation/Analytics/utils.js +21 -0
  90. package/dist/esnext/foundation/BuiltInRoutes/BuiltInRoutes.d.ts +2 -0
  91. package/dist/esnext/foundation/BuiltInRoutes/BuiltInRoutes.js +23 -0
  92. package/dist/esnext/foundation/BuiltInRoutes/healthCheck.d.ts +1 -0
  93. package/dist/esnext/foundation/BuiltInRoutes/healthCheck.js +3 -0
  94. package/dist/{node/framework → esnext/foundation/Cache}/cache-sub-request.d.ts +1 -1
  95. package/dist/esnext/{framework → foundation/Cache}/cache-sub-request.js +4 -4
  96. package/dist/esnext/{framework → foundation/Cache}/cache.d.ts +1 -1
  97. package/dist/esnext/{framework → foundation/Cache}/cache.js +4 -4
  98. package/dist/esnext/foundation/Cache/strategies/index.d.ts +7 -0
  99. package/dist/esnext/foundation/Cache/strategies/index.js +54 -0
  100. package/dist/esnext/foundation/Cookie/Cookie.d.ts +3 -3
  101. package/dist/esnext/foundation/Cookie/Cookie.js +5 -0
  102. package/dist/esnext/foundation/DevTools/DevTools.client.d.ts +3 -0
  103. package/dist/esnext/foundation/DevTools/DevTools.client.js +17 -0
  104. package/dist/esnext/foundation/DevTools/DevTools.server.d.ts +1 -0
  105. package/dist/esnext/foundation/DevTools/DevTools.server.js +14 -0
  106. package/dist/esnext/foundation/DevTools/components/GraphQL.client.d.ts +1 -0
  107. package/dist/esnext/foundation/DevTools/components/GraphQL.client.js +25 -0
  108. package/dist/esnext/foundation/DevTools/components/Heading.d.ts +5 -0
  109. package/dist/esnext/foundation/DevTools/components/Heading.js +12 -0
  110. package/dist/esnext/foundation/DevTools/components/Interface.client.d.ts +11 -0
  111. package/dist/esnext/foundation/DevTools/components/Interface.client.js +47 -0
  112. package/dist/esnext/foundation/DevTools/components/Panels.d.ts +8 -0
  113. package/dist/esnext/foundation/DevTools/components/Panels.js +60 -0
  114. package/dist/esnext/foundation/DevTools/components/Performance.client.d.ts +14 -0
  115. package/dist/esnext/foundation/DevTools/components/Performance.client.js +26 -0
  116. package/dist/esnext/foundation/DevTools/components/Settings.client.d.ts +7 -0
  117. package/dist/esnext/foundation/DevTools/components/Settings.client.js +20 -0
  118. package/dist/esnext/foundation/DevTools/components/Table.d.ts +9 -0
  119. package/dist/esnext/foundation/DevTools/components/Table.js +7 -0
  120. package/dist/esnext/foundation/DevTools/components/icons.d.ts +2 -0
  121. package/dist/esnext/foundation/DevTools/components/icons.js +13 -0
  122. package/dist/esnext/foundation/DevTools/components/index.d.ts +2 -0
  123. package/dist/esnext/foundation/DevTools/components/index.js +2 -0
  124. package/dist/esnext/foundation/FileRoutes/FileRoutes.server.js +4 -4
  125. package/dist/{node/framework/Hydration → esnext/foundation/Html}/Html.d.ts +3 -1
  126. package/dist/esnext/{framework/Hydration → foundation/Html}/Html.js +15 -5
  127. package/dist/esnext/{framework/Hydration/ServerComponentRequest.server.d.ts → foundation/HydrogenRequest/HydrogenRequest.server.d.ts} +14 -4
  128. package/dist/esnext/{framework/Hydration/ServerComponentRequest.server.js → foundation/HydrogenRequest/HydrogenRequest.server.js} +70 -12
  129. package/dist/esnext/{framework/Hydration/ServerComponentResponse.server.d.ts → foundation/HydrogenResponse/HydrogenResponse.server.d.ts} +6 -11
  130. package/dist/esnext/foundation/HydrogenResponse/HydrogenResponse.server.js +48 -0
  131. package/dist/esnext/foundation/Router/BrowserRouter.client.js +15 -9
  132. package/dist/esnext/foundation/ServerPropsProvider/ServerPropsProvider.d.ts +2 -1
  133. package/dist/esnext/foundation/ServerPropsProvider/ServerPropsProvider.js +1 -1
  134. package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +5 -6
  135. package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.js +19 -24
  136. package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.d.ts +1 -1
  137. package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.js +1 -1
  138. package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.server.js +4 -5
  139. package/dist/esnext/foundation/fetchSync/server/fetchSync.js +1 -1
  140. package/dist/esnext/foundation/index.d.ts +1 -1
  141. package/dist/esnext/foundation/index.js +1 -1
  142. package/dist/esnext/foundation/runtime.d.ts +2 -0
  143. package/dist/esnext/foundation/runtime.js +6 -0
  144. package/dist/esnext/foundation/session/session.d.ts +3 -3
  145. package/dist/esnext/foundation/ssr-interop.d.ts +2 -2
  146. package/dist/esnext/foundation/useNavigate/useNavigate.d.ts +2 -0
  147. package/dist/esnext/foundation/useNavigate/useNavigate.js +10 -4
  148. package/dist/esnext/foundation/useQuery/hooks.d.ts +1 -0
  149. package/dist/esnext/foundation/useQuery/hooks.js +29 -18
  150. package/dist/esnext/foundation/useRequestContext/index.d.ts +15 -0
  151. package/dist/esnext/foundation/useRequestContext/index.js +23 -0
  152. package/dist/esnext/foundation/useServerProps/use-server-props.js +2 -2
  153. package/dist/esnext/foundation/useSession/useSession.js +1 -2
  154. package/dist/esnext/foundation/useUrl/useUrl.js +1 -2
  155. package/dist/esnext/framework/cache/in-memory.js +3 -3
  156. package/dist/esnext/framework/middleware.d.ts +1 -1
  157. package/dist/esnext/framework/middleware.js +3 -4
  158. package/dist/esnext/framework/plugin.d.ts +7 -3
  159. package/dist/esnext/framework/plugin.js +4 -1
  160. package/dist/esnext/framework/plugins/vite-plugin-client-imports.js +1 -1
  161. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.js +70 -64
  162. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +1 -1
  163. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.js +3 -4
  164. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-rsc.js +5 -13
  165. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-suppress-warnings.d.ts +3 -0
  166. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-suppress-warnings.js +19 -0
  167. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.d.ts +1 -1
  168. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.js +6 -4
  169. package/dist/esnext/framework/types.d.ts +5 -0
  170. package/dist/esnext/framework/types.js +1 -0
  171. package/dist/esnext/hooks/index.d.ts +0 -1
  172. package/dist/esnext/hooks/index.js +0 -1
  173. package/dist/esnext/hooks/useCartLine/useCartLine.d.ts +10 -0
  174. package/dist/esnext/hooks/useMoney/hooks.js +53 -39
  175. package/dist/esnext/hooks/useProductOptions/helpers.js +6 -10
  176. package/dist/esnext/hooks/useProductOptions/types.d.ts +17 -15
  177. package/dist/esnext/hooks/useProductOptions/useProductOptions.client.d.ts +1 -15
  178. package/dist/esnext/hooks/useProductOptions/useProductOptions.client.js +8 -107
  179. package/dist/esnext/hooks/useShopQuery/hooks.js +30 -18
  180. package/dist/esnext/index.d.ts +7 -5
  181. package/dist/esnext/index.js +5 -5
  182. package/dist/esnext/shared-types.d.ts +26 -0
  183. package/dist/esnext/shared-types.js +4 -0
  184. package/dist/esnext/storefront-api-types.d.ts +37 -443
  185. package/dist/esnext/streaming.server.d.ts +9 -19
  186. package/dist/esnext/streaming.server.js +2 -11
  187. package/dist/esnext/types.d.ts +40 -40
  188. package/dist/esnext/types.js +1 -1
  189. package/dist/esnext/utilities/apiRoutes.d.ts +8 -4
  190. package/dist/esnext/utilities/apiRoutes.js +6 -4
  191. package/dist/esnext/utilities/devtools.d.ts +1 -1
  192. package/dist/esnext/utilities/devtools.js +3 -3
  193. package/dist/esnext/utilities/flattenConnection/flattenConnection.d.ts +1 -0
  194. package/dist/esnext/utilities/flattenConnection/flattenConnection.js +13 -6
  195. package/dist/esnext/utilities/graphql-tracker.js +7 -9
  196. package/dist/esnext/utilities/hash.d.ts +2 -2
  197. package/dist/esnext/utilities/hash.js +29 -6
  198. package/dist/esnext/utilities/image_size.d.ts +24 -3
  199. package/dist/esnext/utilities/image_size.js +53 -31
  200. package/dist/esnext/utilities/index.d.ts +2 -2
  201. package/dist/esnext/utilities/index.js +2 -2
  202. package/dist/esnext/utilities/isBrowser/index.d.ts +1 -0
  203. package/dist/esnext/utilities/isBrowser/index.js +1 -0
  204. package/dist/esnext/utilities/isBrowser/isBrowser.d.ts +4 -0
  205. package/dist/esnext/utilities/isBrowser/isBrowser.js +6 -0
  206. package/dist/esnext/utilities/isServer/isServer.js +2 -2
  207. package/dist/esnext/utilities/load_script.js +1 -1
  208. package/dist/esnext/utilities/log/index.d.ts +1 -1
  209. package/dist/esnext/utilities/log/index.js +1 -1
  210. package/dist/esnext/utilities/log/log-cache-api-status.js +3 -2
  211. package/dist/esnext/utilities/log/log-cache-header.d.ts +4 -4
  212. package/dist/esnext/utilities/log/log-query-timeline.d.ts +3 -3
  213. package/dist/esnext/utilities/log/log-query-timeline.js +29 -10
  214. package/dist/esnext/utilities/log/log.d.ts +17 -11
  215. package/dist/esnext/utilities/log/log.js +28 -20
  216. package/dist/esnext/utilities/log/utils.js +1 -6
  217. package/dist/esnext/utilities/parseMetafield/index.d.ts +1 -0
  218. package/dist/esnext/utilities/parseMetafield/index.js +1 -0
  219. package/dist/esnext/utilities/parseMetafield/parseMetafield.d.ts +15 -0
  220. package/dist/esnext/utilities/{parseMetafieldValue/parseMetafieldValue.js → parseMetafield/parseMetafield.js} +28 -2
  221. package/dist/esnext/utilities/storefrontApi.js +9 -5
  222. package/dist/esnext/utilities/template.js +1 -2
  223. package/dist/esnext/utilities/web-api-polyfill.js +6 -0
  224. package/dist/esnext/version.d.ts +1 -1
  225. package/dist/esnext/version.js +1 -1
  226. package/dist/node/framework/cache/in-memory.js +3 -3
  227. package/dist/node/framework/middleware.d.ts +1 -1
  228. package/dist/node/framework/middleware.js +3 -4
  229. package/dist/node/framework/plugin.d.ts +4 -3
  230. package/dist/node/framework/plugin.js +5 -2
  231. package/dist/node/framework/plugins/vite-plugin-client-imports.js +1 -1
  232. package/dist/node/framework/plugins/vite-plugin-hydrogen-config.js +70 -64
  233. package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +1 -1
  234. package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.js +3 -4
  235. package/dist/node/framework/plugins/vite-plugin-hydrogen-rsc.js +6 -14
  236. package/dist/node/framework/plugins/vite-plugin-hydrogen-suppress-warnings.d.ts +3 -0
  237. package/dist/node/framework/plugins/vite-plugin-hydrogen-suppress-warnings.js +21 -0
  238. package/dist/node/framework/plugins/vite-plugin-hydrogen-virtual-files.d.ts +1 -1
  239. package/dist/node/framework/plugins/vite-plugin-hydrogen-virtual-files.js +6 -4
  240. package/dist/node/framework/types.d.ts +5 -0
  241. package/dist/node/{foundation/Analytics → framework}/types.js +0 -0
  242. package/dist/node/shared-types.d.ts +26 -0
  243. package/dist/node/shared-types.js +5 -0
  244. package/dist/node/utilities/web-api-polyfill.js +6 -0
  245. package/package.json +34 -26
  246. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-plugin.js +275 -60
  247. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.browser.development.server.js +119 -64
  248. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.browser.production.min.server.js +33 -32
  249. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.node.development.server.js +241 -75
  250. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.node.production.min.server.js +38 -35
  251. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite.development.js +9 -8
  252. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite.production.min.js +3 -3
  253. package/vendor/react-server-dom-vite/esm/react-server-dom-vite-client-proxy.js +3 -9
  254. package/vendor/react-server-dom-vite/esm/react-server-dom-vite-plugin.js +276 -61
  255. package/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.browser.server.js +119 -64
  256. package/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.node.server.js +241 -75
  257. package/vendor/react-server-dom-vite/esm/react-server-dom-vite.js +9 -8
  258. package/vendor/react-server-dom-vite/package.json +1 -1
  259. package/client.d.ts +0 -1
  260. package/client.js +0 -1
  261. package/config.d.ts +0 -1
  262. package/config.js +0 -1
  263. package/dist/esnext/components/DevTools.client.d.ts +0 -1
  264. package/dist/esnext/components/DevTools.client.js +0 -129
  265. package/dist/esnext/components/ProductProvider/ProductOptionsProvider.client.d.ts +0 -8
  266. package/dist/esnext/components/ProductProvider/ProductOptionsProvider.client.js +0 -12
  267. package/dist/esnext/components/ProductProvider/ProductProvider.client.d.ts +0 -24
  268. package/dist/esnext/components/ProductProvider/ProductProvider.client.js +0 -34
  269. package/dist/esnext/components/ProductProvider/context.d.ts +0 -29
  270. package/dist/esnext/components/ProductProvider/index.d.ts +0 -2
  271. package/dist/esnext/components/ProductProvider/index.js +0 -2
  272. package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.server.d.ts +0 -2
  273. package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.server.js +0 -33
  274. package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetrics.server.d.ts +0 -1
  275. package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetrics.server.js +0 -24
  276. package/dist/esnext/framework/CachingStrategy/index.d.ts +0 -10
  277. package/dist/esnext/framework/CachingStrategy/index.js +0 -96
  278. package/dist/esnext/framework/Hydration/Html.d.ts +0 -11
  279. package/dist/esnext/framework/Hydration/ServerComponentResponse.server.js +0 -42
  280. package/dist/esnext/framework/Hydration/rsc.d.ts +0 -8
  281. package/dist/esnext/framework/Hydration/rsc.js +0 -100
  282. package/dist/esnext/framework/cache-sub-request.d.ts +0 -17
  283. package/dist/esnext/framework/config.d.ts +0 -6
  284. package/dist/esnext/framework/config.js +0 -6
  285. package/dist/esnext/framework/runtime.d.ts +0 -13
  286. package/dist/esnext/framework/runtime.js +0 -27
  287. package/dist/esnext/hooks/useParsedMetafields/index.d.ts +0 -1
  288. package/dist/esnext/hooks/useParsedMetafields/index.js +0 -1
  289. package/dist/esnext/hooks/useParsedMetafields/useParsedMetafields.d.ts +0 -21
  290. package/dist/esnext/hooks/useParsedMetafields/useParsedMetafields.js +0 -21
  291. package/dist/esnext/hooks/useProduct/index.d.ts +0 -1
  292. package/dist/esnext/hooks/useProduct/index.js +0 -1
  293. package/dist/esnext/hooks/useProduct/useProduct.d.ts +0 -52
  294. package/dist/esnext/hooks/useProduct/useProduct.js +0 -43
  295. package/dist/esnext/utilities/isClient/index.d.ts +0 -1
  296. package/dist/esnext/utilities/isClient/index.js +0 -1
  297. package/dist/esnext/utilities/isClient/isClient.d.ts +0 -4
  298. package/dist/esnext/utilities/isClient/isClient.js +0 -6
  299. package/dist/esnext/utilities/parseMetafieldValue/index.d.ts +0 -1
  300. package/dist/esnext/utilities/parseMetafieldValue/index.js +0 -1
  301. package/dist/esnext/utilities/parseMetafieldValue/parseMetafieldValue.d.ts +0 -6
  302. package/dist/node/components/Image/Image.d.ts +0 -84
  303. package/dist/node/components/Image/Image.js +0 -89
  304. package/dist/node/components/Image/index.d.ts +0 -2
  305. package/dist/node/components/Image/index.js +0 -5
  306. package/dist/node/constants.d.ts +0 -7
  307. package/dist/node/constants.js +0 -10
  308. package/dist/node/entry-server.d.ts +0 -35
  309. package/dist/node/entry-server.js +0 -571
  310. package/dist/node/foundation/Analytics/Analytics.client.d.ts +0 -3
  311. package/dist/node/foundation/Analytics/Analytics.client.js +0 -32
  312. package/dist/node/foundation/Analytics/Analytics.server.d.ts +0 -1
  313. package/dist/node/foundation/Analytics/Analytics.server.js +0 -70
  314. package/dist/node/foundation/Analytics/ClientAnalytics.d.ts +0 -25
  315. package/dist/node/foundation/Analytics/ClientAnalytics.js +0 -100
  316. package/dist/node/foundation/Analytics/ServerAnalyticsRoute.server.d.ts +0 -2
  317. package/dist/node/foundation/Analytics/ServerAnalyticsRoute.server.js +0 -37
  318. package/dist/node/foundation/Analytics/const.d.ts +0 -9
  319. package/dist/node/foundation/Analytics/const.js +0 -12
  320. package/dist/node/foundation/Analytics/hook.d.ts +0 -1
  321. package/dist/node/foundation/Analytics/hook.js +0 -11
  322. package/dist/node/foundation/Analytics/types.d.ts +0 -5
  323. package/dist/node/foundation/Analytics/utils.d.ts +0 -1
  324. package/dist/node/foundation/Analytics/utils.js +0 -12
  325. package/dist/node/foundation/AnalyticsErrorBoundary.client.d.ts +0 -4
  326. package/dist/node/foundation/AnalyticsErrorBoundary.client.js +0 -14
  327. package/dist/node/foundation/Redirect/Redirect.client.d.ts +0 -5
  328. package/dist/node/foundation/Redirect/Redirect.client.js +0 -18
  329. package/dist/node/foundation/Router/BrowserRouter.client.d.ts +0 -14
  330. package/dist/node/foundation/Router/BrowserRouter.client.js +0 -159
  331. package/dist/node/foundation/ServerPropsProvider/ServerPropsProvider.d.ts +0 -40
  332. package/dist/node/foundation/ServerPropsProvider/ServerPropsProvider.js +0 -90
  333. package/dist/node/foundation/ServerPropsProvider/index.d.ts +0 -2
  334. package/dist/node/foundation/ServerPropsProvider/index.js +0 -6
  335. package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +0 -23
  336. package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.js +0 -158
  337. package/dist/node/foundation/ServerRequestProvider/index.d.ts +0 -1
  338. package/dist/node/foundation/ServerRequestProvider/index.js +0 -17
  339. package/dist/node/foundation/ShopifyProvider/types.d.ts +0 -13
  340. package/dist/node/foundation/ShopifyProvider/types.js +0 -2
  341. package/dist/node/foundation/session/session.d.ts +0 -27
  342. package/dist/node/foundation/session/session.js +0 -43
  343. package/dist/node/foundation/ssr-interop.d.ts +0 -29
  344. package/dist/node/foundation/ssr-interop.js +0 -39
  345. package/dist/node/foundation/useNavigate/useNavigate.d.ts +0 -13
  346. package/dist/node/foundation/useNavigate/useNavigate.js +0 -18
  347. package/dist/node/foundation/useServerProps/use-server-props.d.ts +0 -21
  348. package/dist/node/foundation/useServerProps/use-server-props.js +0 -40
  349. package/dist/node/framework/CachingStrategy/index.d.ts +0 -10
  350. package/dist/node/framework/CachingStrategy/index.js +0 -108
  351. package/dist/node/framework/Hydration/Html.js +0 -94
  352. package/dist/node/framework/Hydration/ServerComponentRequest.server.d.ts +0 -58
  353. package/dist/node/framework/Hydration/ServerComponentRequest.server.js +0 -150
  354. package/dist/node/framework/Hydration/ServerComponentResponse.server.d.ts +0 -26
  355. package/dist/node/framework/Hydration/ServerComponentResponse.server.js +0 -49
  356. package/dist/node/framework/Hydration/rsc.d.ts +0 -8
  357. package/dist/node/framework/Hydration/rsc.js +0 -103
  358. package/dist/node/framework/cache-sub-request.js +0 -95
  359. package/dist/node/framework/cache.d.ts +0 -17
  360. package/dist/node/framework/cache.js +0 -135
  361. package/dist/node/framework/config.d.ts +0 -6
  362. package/dist/node/framework/config.js +0 -11
  363. package/dist/node/framework/runtime.d.ts +0 -13
  364. package/dist/node/framework/runtime.js +0 -35
  365. package/dist/node/storefront-api-types.d.ts +0 -6405
  366. package/dist/node/storefront-api-types.js +0 -1766
  367. package/dist/node/streaming.server.d.ts +0 -26
  368. package/dist/node/streaming.server.js +0 -33
  369. package/dist/node/types.d.ts +0 -105
  370. package/dist/node/types.js +0 -2
  371. package/dist/node/utilities/apiRoutes.d.ts +0 -37
  372. package/dist/node/utilities/apiRoutes.js +0 -157
  373. package/dist/node/utilities/bot-ua.d.ts +0 -4
  374. package/dist/node/utilities/bot-ua.js +0 -65
  375. package/dist/node/utilities/defer.d.ts +0 -6
  376. package/dist/node/utilities/defer.js +0 -18
  377. package/dist/node/utilities/error.d.ts +0 -1
  378. package/dist/node/utilities/error.js +0 -10
  379. package/dist/node/utilities/fetch.d.ts +0 -9
  380. package/dist/node/utilities/fetch.js +0 -37
  381. package/dist/node/utilities/flattenConnection/flattenConnection.d.ts +0 -6
  382. package/dist/node/utilities/flattenConnection/flattenConnection.js +0 -15
  383. package/dist/node/utilities/flattenConnection/index.d.ts +0 -1
  384. package/dist/node/utilities/flattenConnection/index.js +0 -5
  385. package/dist/node/utilities/hash.d.ts +0 -2
  386. package/dist/node/utilities/hash.js +0 -11
  387. package/dist/node/utilities/html-encoding.d.ts +0 -1
  388. package/dist/node/utilities/html-encoding.js +0 -12
  389. package/dist/node/utilities/image_size.d.ts +0 -12
  390. package/dist/node/utilities/image_size.js +0 -68
  391. package/dist/node/utilities/index.d.ts +0 -12
  392. package/dist/node/utilities/index.js +0 -33
  393. package/dist/node/utilities/isClient/index.d.ts +0 -1
  394. package/dist/node/utilities/isClient/index.js +0 -5
  395. package/dist/node/utilities/isClient/isClient.d.ts +0 -4
  396. package/dist/node/utilities/isClient/isClient.js +0 -10
  397. package/dist/node/utilities/isServer/index.d.ts +0 -1
  398. package/dist/node/utilities/isServer/index.js +0 -5
  399. package/dist/node/utilities/isServer/isServer.d.ts +0 -4
  400. package/dist/node/utilities/isServer/isServer.js +0 -11
  401. package/dist/node/utilities/load_script.d.ts +0 -3
  402. package/dist/node/utilities/load_script.js +0 -27
  403. package/dist/node/utilities/log/index.d.ts +0 -4
  404. package/dist/node/utilities/log/index.js +0 -18
  405. package/dist/node/utilities/log/log-cache-api-status.d.ts +0 -1
  406. package/dist/node/utilities/log/log-cache-api-status.js +0 -17
  407. package/dist/node/utilities/log/log-cache-header.d.ts +0 -10
  408. package/dist/node/utilities/log/log-cache-header.js +0 -35
  409. package/dist/node/utilities/log/log-query-timeline.d.ts +0 -12
  410. package/dist/node/utilities/log/log-query-timeline.js +0 -88
  411. package/dist/node/utilities/log/log.d.ts +0 -22
  412. package/dist/node/utilities/log/log.js +0 -74
  413. package/dist/node/utilities/log/utils.d.ts +0 -3
  414. package/dist/node/utilities/log/utils.js +0 -21
  415. package/dist/node/utilities/matchPath.d.ts +0 -10
  416. package/dist/node/utilities/matchPath.js +0 -58
  417. package/dist/node/utilities/measurement.d.ts +0 -3
  418. package/dist/node/utilities/measurement.js +0 -103
  419. package/dist/node/utilities/parse.d.ts +0 -1
  420. package/dist/node/utilities/parse.js +0 -13
  421. package/dist/node/utilities/parseMetafieldValue/index.d.ts +0 -1
  422. package/dist/node/utilities/parseMetafieldValue/index.js +0 -5
  423. package/dist/node/utilities/parseMetafieldValue/parseMetafieldValue.d.ts +0 -6
  424. package/dist/node/utilities/parseMetafieldValue/parseMetafieldValue.js +0 -40
  425. package/dist/node/utilities/storefrontApi.d.ts +0 -4
  426. package/dist/node/utilities/storefrontApi.js +0 -26
  427. package/dist/node/utilities/suspense.d.ts +0 -12
  428. package/dist/node/utilities/suspense.js +0 -64
  429. package/dist/node/utilities/template.d.ts +0 -9
  430. package/dist/node/utilities/template.js +0 -27
  431. package/dist/node/utilities/timing.d.ts +0 -7
  432. package/dist/node/utilities/timing.js +0 -18
  433. package/dist/node/utilities/video_parameters.d.ts +0 -47
  434. package/dist/node/utilities/video_parameters.js +0 -27
  435. package/dist/node/version.d.ts +0 -1
  436. package/dist/node/version.js +0 -4
  437. package/entry-client.d.ts +0 -1
  438. package/entry-client.js +0 -1
  439. package/entry-server.d.ts +0 -1
  440. package/entry-server.js +0 -1
  441. package/middleware.d.ts +0 -1
  442. package/middleware.js +0 -1
  443. package/plugin.d.ts +0 -1
  444. package/plugin.js +0 -1
  445. package/web-polyfills.js +0 -1
@@ -4,9 +4,9 @@
4
4
  * In the server, this file is transformed by Vite to inject server logic.
5
5
  * NOTE: Do not remove SSR-prefixed comments in this file.
6
6
  */
7
- import type { ServerComponentRequest } from '../framework/Hydration/ServerComponentRequest.server';
7
+ import type { HydrogenRequest } from './HydrogenRequest/HydrogenRequest.server';
8
8
  export declare const META_ENV_SSR = false;
9
- declare type ServerGetter<T> = (request: ServerComponentRequest) => T;
9
+ declare type ServerGetter<T> = (request: HydrogenRequest) => T;
10
10
  /**
11
11
  * Isomorphic hook to access context data. It gives access to the current request
12
12
  * when running on the server, and returns the provided client fallback in the browser.
@@ -5,6 +5,8 @@ declare type NavigationOptions = {
5
5
  reloadDocument?: boolean;
6
6
  /** The custom client state with the navigation. */
7
7
  clientState?: any;
8
+ /** Whether to emulate natural browser behavior and restore scroll position on navigation. Defaults to true. */
9
+ scroll?: any;
8
10
  };
9
11
  /**
10
12
  * The useNavigate hook imperatively navigates between routes.
@@ -5,10 +5,16 @@ import { useRouter } from '../Router/BrowserRouter.client';
5
5
  export function useNavigate() {
6
6
  const router = useRouter();
7
7
  return (path, options = { replace: false, reloadDocument: false }) => {
8
+ const state = {
9
+ ...options?.clientState,
10
+ scroll: options?.scroll ?? true,
11
+ };
8
12
  // @todo wait for RSC and then change focus for a11y?
9
- if (options === null || options === void 0 ? void 0 : options.replace)
10
- router.history.replace(path, (options === null || options === void 0 ? void 0 : options.clientState) || {});
11
- else
12
- router.history.push(path, (options === null || options === void 0 ? void 0 : options.clientState) || {});
13
+ if (options?.replace) {
14
+ router.history.replace(path, state);
15
+ }
16
+ else {
17
+ router.history.push(path, state);
18
+ }
13
19
  };
14
20
  }
@@ -34,3 +34,4 @@ queryOptions?: HydrogenUseQueryOptions): {
34
34
  data: T;
35
35
  error?: undefined;
36
36
  };
37
+ export declare function shouldPreloadQuery(queryOptions?: HydrogenUseQueryOptions): boolean;
@@ -1,8 +1,7 @@
1
1
  import { getLoggerWithContext, collectQueryCacheControlHeaders, collectQueryTimings, } from '../../utilities/log';
2
- import { deleteItemFromCache, generateSubRequestCacheControlHeader, getItemFromCache, isStale, setItemInCache, } from '../../framework/cache-sub-request';
3
- import { runDelayedFunction } from '../../framework/runtime';
2
+ import { deleteItemFromCache, generateSubRequestCacheControlHeader, getItemFromCache, isStale, setItemInCache, } from '../Cache/cache-sub-request';
4
3
  import { useRequestCacheData, useServerRequest } from '../ServerRequestProvider';
5
- import { CacheSeconds } from '../../framework/CachingStrategy';
4
+ import { CacheShort, NO_STORE } from '../Cache/strategies';
6
5
  /**
7
6
  * The `useQuery` hook executes an asynchronous operation like `fetch` in a way that
8
7
  * supports [Suspense](https://reactjs.org/docs/concurrent-mode-suspense.html). You can use this
@@ -25,21 +24,33 @@ queryOptions) {
25
24
  ];
26
25
  const fetcher = cachedQueryFnBuilder(withCacheIdKey, queryFn, queryOptions);
27
26
  collectQueryTimings(request, withCacheIdKey, 'requested');
28
- if (queryOptions === null || queryOptions === void 0 ? void 0 : queryOptions.preload) {
27
+ if (shouldPreloadQuery(queryOptions)) {
29
28
  request.savePreloadQuery({
30
- preload: queryOptions === null || queryOptions === void 0 ? void 0 : queryOptions.preload,
29
+ preload: queryOptions?.preload,
31
30
  key: withCacheIdKey,
32
31
  fetcher,
33
32
  });
34
33
  }
35
34
  return useRequestCacheData(withCacheIdKey, fetcher);
36
35
  }
37
- function cachedQueryFnBuilder(key, queryFn, queryOptions) {
38
- var _a;
36
+ export function shouldPreloadQuery(queryOptions) {
37
+ if (!queryOptions)
38
+ return true;
39
+ const hasCacheOverride = typeof queryOptions?.cache?.mode !== 'undefined';
40
+ const hasPreloadOverride = typeof queryOptions?.preload !== 'undefined';
41
+ const cacheValue = queryOptions?.cache?.mode;
42
+ const preloadValue = queryOptions?.preload;
43
+ // If preload is explicitly defined, then it takes precedence
44
+ if (hasPreloadOverride) {
45
+ return !!preloadValue;
46
+ }
47
+ return hasCacheOverride ? cacheValue !== NO_STORE : true;
48
+ }
49
+ function cachedQueryFnBuilder(key, generateNewOutput, queryOptions) {
39
50
  const resolvedQueryOptions = {
40
- ...(queryOptions !== null && queryOptions !== void 0 ? queryOptions : {}),
51
+ ...(queryOptions ?? {}),
41
52
  };
42
- const shouldCacheResponse = (_a = queryOptions === null || queryOptions === void 0 ? void 0 : queryOptions.shouldCacheResponse) !== null && _a !== void 0 ? _a : (() => true);
53
+ const shouldCacheResponse = queryOptions?.shouldCacheResponse ?? (() => true);
43
54
  /**
44
55
  * Attempt to read the query from cache. If it doesn't exist or if it's stale, regenerate it.
45
56
  */
@@ -49,9 +60,6 @@ function cachedQueryFnBuilder(key, queryFn, queryOptions) {
49
60
  const request = useServerRequest();
50
61
  const log = getLoggerWithContext(request);
51
62
  const cacheResponse = await getItemFromCache(key);
52
- async function generateNewOutput() {
53
- return await queryFn();
54
- }
55
63
  if (cacheResponse) {
56
64
  const [output, response] = cacheResponse;
57
65
  collectQueryCacheControlHeaders(request, key, response.headers.get('cache-control'));
@@ -60,17 +68,17 @@ function cachedQueryFnBuilder(key, queryFn, queryOptions) {
60
68
  */
61
69
  if (isStale(key, response)) {
62
70
  const lockKey = ['lock', ...(typeof key === 'string' ? [key] : key)];
63
- runDelayedFunction(async () => {
64
- const lockExists = await getItemFromCache(lockKey);
71
+ // Run revalidation asynchronously
72
+ const revalidatingPromise = getItemFromCache(lockKey).then(async (lockExists) => {
65
73
  if (lockExists)
66
74
  return;
67
- await setItemInCache(lockKey, true, CacheSeconds({
75
+ await setItemInCache(lockKey, true, CacheShort({
68
76
  maxAge: 10,
69
77
  }));
70
78
  try {
71
79
  const output = await generateNewOutput();
72
80
  if (shouldCacheResponse(output)) {
73
- await setItemInCache(key, output, resolvedQueryOptions === null || resolvedQueryOptions === void 0 ? void 0 : resolvedQueryOptions.cache);
81
+ await setItemInCache(key, output, resolvedQueryOptions?.cache);
74
82
  }
75
83
  }
76
84
  catch (e) {
@@ -80,6 +88,8 @@ function cachedQueryFnBuilder(key, queryFn, queryOptions) {
80
88
  await deleteItemFromCache(lockKey);
81
89
  }
82
90
  });
91
+ // Asynchronously wait for it in workers
92
+ request.ctx.runtime?.waitUntil?.(revalidatingPromise);
83
93
  }
84
94
  return output;
85
95
  }
@@ -88,9 +98,10 @@ function cachedQueryFnBuilder(key, queryFn, queryOptions) {
88
98
  * Important: Do this async
89
99
  */
90
100
  if (shouldCacheResponse(newOutput)) {
91
- runDelayedFunction(() => setItemInCache(key, newOutput, resolvedQueryOptions === null || resolvedQueryOptions === void 0 ? void 0 : resolvedQueryOptions.cache));
101
+ const setItemInCachePromise = setItemInCache(key, newOutput, resolvedQueryOptions?.cache);
102
+ request.ctx.runtime?.waitUntil?.(setItemInCachePromise);
92
103
  }
93
- collectQueryCacheControlHeaders(request, key, generateSubRequestCacheControlHeader(resolvedQueryOptions === null || resolvedQueryOptions === void 0 ? void 0 : resolvedQueryOptions.cache));
104
+ collectQueryCacheControlHeaders(request, key, generateSubRequestCacheControlHeader(resolvedQueryOptions?.cache));
94
105
  return newOutput;
95
106
  }
96
107
  return useCachedQueryFn;
@@ -0,0 +1,15 @@
1
+ declare type ScopedContext = Record<string, any>;
2
+ /**
3
+ * Provides access to the current request context.
4
+ * @param scope - An optional string used to scope the request context. It is recommended to
5
+ * prevent modifying the properties added by other plugins.
6
+ * @returns A request-scoped object that can be modified to provide and consume information
7
+ * across different React components in the tree.
8
+ * @example
9
+ * ```js
10
+ * import {useRequestContext} from '@shopify/hydrogen';
11
+ * useRequestContext('my-plugin-name');
12
+ * ```
13
+ */
14
+ export declare function useRequestContext<T extends ScopedContext>(scope?: string): T;
15
+ export {};
@@ -0,0 +1,23 @@
1
+ import { META_ENV_SSR, useEnvContext } from '../ssr-interop';
2
+ /**
3
+ * Provides access to the current request context.
4
+ * @param scope - An optional string used to scope the request context. It is recommended to
5
+ * prevent modifying the properties added by other plugins.
6
+ * @returns A request-scoped object that can be modified to provide and consume information
7
+ * across different React components in the tree.
8
+ * @example
9
+ * ```js
10
+ * import {useRequestContext} from '@shopify/hydrogen';
11
+ * useRequestContext('my-plugin-name');
12
+ * ```
13
+ */
14
+ export function useRequestContext(scope = 'default') {
15
+ if (__HYDROGEN_DEV__ && !META_ENV_SSR) {
16
+ throw new Error('useRequestContext can only be used in the server');
17
+ }
18
+ const scopes = useEnvContext((req) => req.ctx.scopes);
19
+ if (!scopes.has(scope)) {
20
+ scopes.set(scope, Object.create(null));
21
+ }
22
+ return scopes.get(scope);
23
+ }
@@ -30,6 +30,6 @@ export function useServerProps() {
30
30
  * @internal
31
31
  */
32
32
  export function useInternalServerProps() {
33
- var _a;
34
- return ((_a = useContext(ServerPropsContext)) !== null && _a !== void 0 ? _a : {});
33
+ return (useContext(ServerPropsContext) ??
34
+ {});
35
35
  }
@@ -1,8 +1,7 @@
1
1
  import { useServerRequest } from '../ServerRequestProvider';
2
2
  /** The `useSession` hook reads session data in server components. */
3
3
  export const useSession = function () {
4
- var _a;
5
4
  const request = useServerRequest();
6
- const session = ((_a = request.ctx.session) === null || _a === void 0 ? void 0 : _a.get()) || {};
5
+ const session = request.ctx.session?.get() || {};
7
6
  return session;
8
7
  };
@@ -7,13 +7,12 @@ import { useEnvContext, META_ENV_SSR } from '../ssr-interop';
7
7
  * The `useUrl` hook retrieves the current URL in a server or client component.
8
8
  */
9
9
  export function useUrl() {
10
- var _a, _b;
11
10
  if (META_ENV_SSR) {
12
11
  const serverUrl = new URL(useEnvContext((req) => req.url) // eslint-disable-line react-hooks/rules-of-hooks
13
12
  );
14
13
  if (serverUrl.pathname === RSC_PATHNAME) {
15
14
  const state = parseJSON(serverUrl.searchParams.get('state') || '{}');
16
- const parsedUrl = `${serverUrl.origin}${(_a = state.pathname) !== null && _a !== void 0 ? _a : ''}${(_b = state.search) !== null && _b !== void 0 ? _b : ''}`;
15
+ const parsedUrl = `${serverUrl.origin}${state.pathname ?? ''}${state.search ?? ''}`;
17
16
  return new URL(parsedUrl);
18
17
  }
19
18
  return new URL(serverUrl);
@@ -3,6 +3,7 @@
3
3
  * works and is only meant to be used during development.
4
4
  */
5
5
  export class InMemoryCache {
6
+ store;
6
7
  constructor() {
7
8
  this.store = new Map();
8
9
  }
@@ -13,15 +14,14 @@ export class InMemoryCache {
13
14
  });
14
15
  }
15
16
  match(request) {
16
- var _a, _b;
17
17
  const match = this.store.get(request.url);
18
18
  if (!match) {
19
19
  return;
20
20
  }
21
21
  const { value, date } = match;
22
22
  const cacheControl = value.headers.get('cache-control') || '';
23
- const maxAge = parseInt(((_a = cacheControl.match(/max-age=(\d+)/)) === null || _a === void 0 ? void 0 : _a[1]) || '0', 10);
24
- const swr = parseInt(((_b = cacheControl.match(/stale-while-revalidate=(\d+)/)) === null || _b === void 0 ? void 0 : _b[1]) || '0', 10);
23
+ const maxAge = parseInt(cacheControl.match(/max-age=(\d+)/)?.[1] || '0', 10);
24
+ const swr = parseInt(cacheControl.match(/stale-while-revalidate=(\d+)/)?.[1] || '0', 10);
25
25
  const age = (new Date().valueOf() - date.valueOf()) / 1000;
26
26
  const isMiss = age > maxAge + swr;
27
27
  if (isMiss) {
@@ -1,7 +1,7 @@
1
+ import type { ShopifyConfig } from '../shared-types';
1
2
  import type { IncomingMessage, NextFunction } from 'connect';
2
3
  import type { ServerResponse } from 'http';
3
4
  import type { ViteDevServer } from 'vite';
4
- import type { ShopifyConfig } from '../types';
5
5
  declare type HydrogenMiddlewareArgs = {
6
6
  dev?: boolean;
7
7
  indexTemplate: string | ((url: string) => Promise<string>);
@@ -27,7 +27,6 @@ export function hydrogenMiddleware({ dev, cache, indexTemplate, getServerEntrypo
27
27
  ? import('../utilities/web-api-polyfill')
28
28
  : undefined;
29
29
  return async function (request, response, next) {
30
- var _a, _b, _c;
31
30
  try {
32
31
  await webPolyfills;
33
32
  const entrypoint = await Promise.resolve(getServerEntrypoint()).catch((error) => {
@@ -37,7 +36,7 @@ export function hydrogenMiddleware({ dev, cache, indexTemplate, getServerEntrypo
37
36
  // to keep throwing it on refresh until things are fixed.
38
37
  entrypointError = error;
39
38
  });
40
- const handleRequest = (_a = entrypoint === null || entrypoint === void 0 ? void 0 : entrypoint.default) !== null && _a !== void 0 ? _a : entrypoint;
39
+ const handleRequest = entrypoint?.default ?? entrypoint;
41
40
  if (typeof handleRequest !== 'function') {
42
41
  if (entrypointError) {
43
42
  throw entrypointError;
@@ -68,7 +67,7 @@ export function hydrogenMiddleware({ dev, cache, indexTemplate, getServerEntrypo
68
67
  */
69
68
  try {
70
69
  const template = typeof indexTemplate === 'function'
71
- ? await indexTemplate((_c = (_b = request.originalUrl) !== null && _b !== void 0 ? _b : request.url) !== null && _c !== void 0 ? _c : '')
70
+ ? await indexTemplate(request.originalUrl ?? request.url ?? '')
72
71
  : indexTemplate;
73
72
  const html = template.replace(`<div id="root"></div>`, `<div id="root"><pre><code>${e.stack}</code></pre></div>`);
74
73
  response.write(html);
@@ -94,5 +93,5 @@ async function respondWithGraphiql(response, shopifyConfig) {
94
93
  }
95
94
  const { storeDomain, storefrontToken, storefrontApiVersion } = shopifyConfig;
96
95
  response.setHeader('Content-Type', 'text/html');
97
- response.end(graphiqlHtml(storeDomain === null || storeDomain === void 0 ? void 0 : storeDomain.replace(/^https?:\/\//, ''), storefrontToken, storefrontApiVersion));
96
+ response.end(graphiqlHtml(storeDomain?.replace(/^https?:\/\//, ''), storefrontToken, storefrontApiVersion));
98
97
  }
@@ -1,4 +1,8 @@
1
- import type { HydrogenVitePluginOptions } from '../types';
1
+ import type { HydrogenVitePluginOptions } from './types';
2
2
  import type { Plugin } from 'vite';
3
- declare const _default: (pluginOptions?: HydrogenVitePluginOptions) => Plugin[];
4
- export default _default;
3
+ declare const hydrogenPlugin: {
4
+ (pluginOptions?: HydrogenVitePluginOptions): Plugin[];
5
+ default: any;
6
+ };
7
+ export = hydrogenPlugin;
8
+ export default hydrogenPlugin;
@@ -11,7 +11,8 @@ import inspect from 'vite-plugin-inspect';
11
11
  import react from '@vitejs/plugin-react';
12
12
  import cssModulesRsc from './plugins/vite-plugin-css-modules-rsc';
13
13
  import clientImports from './plugins/vite-plugin-client-imports';
14
- export default (pluginOptions = {}) => {
14
+ import suppressWarnings from './plugins/vite-plugin-hydrogen-suppress-warnings';
15
+ const hydrogenPlugin = (pluginOptions = {}) => {
15
16
  return [
16
17
  process.env.VITE_INSPECT && inspect(),
17
18
  hydrogenConfig(),
@@ -25,6 +26,8 @@ export default (pluginOptions = {}) => {
25
26
  cssModulesRsc(),
26
27
  rsc(),
27
28
  platformEntry(),
29
+ suppressWarnings(),
28
30
  pluginOptions.purgeQueryCacheOnBuild && purgeQueryCache(),
29
31
  ];
30
32
  };
33
+ export default hydrogenPlugin; // For ESM
@@ -10,7 +10,7 @@ export default function clientImports() {
10
10
  async resolveId(source, importer, { ssr }) {
11
11
  if (ssr)
12
12
  return;
13
- if (/\.server\.(j|t)sx?/.test(importer !== null && importer !== void 0 ? importer : ''))
13
+ if (/\.server\.(j|t)sx?/.test(importer ?? ''))
14
14
  return;
15
15
  if ('@shopify/hydrogen' !== source)
16
16
  return;
@@ -24,73 +24,79 @@ export default () => {
24
24
  }
25
25
  return {
26
26
  name: 'vite-plugin-hydrogen-config',
27
- config: async (config, env) => {
28
- var _a, _b, _c;
29
- return ({
30
- resolve: {
31
- alias: {
32
- // This library is currently included as a compiled vendor lib, not published yet to NPM
33
- 'react-server-dom-vite/client-proxy': require.resolve('@shopify/hydrogen/vendor/react-server-dom-vite/esm/react-server-dom-vite-client-proxy.js'),
34
- },
27
+ config: async (config, env) => ({
28
+ resolve: {
29
+ alias: {
30
+ // This library is currently included as a compiled vendor lib, not published yet to NPM
31
+ 'react-server-dom-vite/client-proxy': require.resolve('@shopify/hydrogen/vendor/react-server-dom-vite/esm/react-server-dom-vite-client-proxy.js'),
35
32
  },
36
- build: {
37
- minify: (_b = (_a = config.build) === null || _a === void 0 ? void 0 : _a.minify) !== null && _b !== void 0 ? _b : 'esbuild',
38
- sourcemap: true,
39
- rollupOptions: ((_c = config.build) === null || _c === void 0 ? void 0 : _c.rollupOptions)
40
- ? Object.assign(rollupOptions, config.build.rollupOptions)
41
- : rollupOptions,
33
+ },
34
+ build: {
35
+ minify: config.build?.minify ?? 'esbuild',
36
+ sourcemap: true,
37
+ rollupOptions: config.build?.rollupOptions
38
+ ? Object.assign(rollupOptions, config.build.rollupOptions)
39
+ : rollupOptions,
40
+ target: config.build?.ssr
41
+ ? isWorker
42
+ ? 'es2022' // CFW (Updates weekly to latest V8)
43
+ : 'es2020' // Node (Support for v14.19 used in SB)
44
+ : 'modules', // Browsers (Vite default value)
45
+ },
46
+ ssr: {
47
+ /**
48
+ * Tell Vite to bundle everything when we're building for Workers.
49
+ * Otherwise, bundle RSC plugin as a workaround to apply the vendor alias above.
50
+ */
51
+ noExternal: isWorker || [/react-server-dom-vite/],
52
+ target: isWorker ? 'webworker' : 'node',
53
+ },
54
+ // Reload when updating local Hydrogen lib
55
+ server: process.env.LOCAL_DEV && {
56
+ watch: {
57
+ ignored: [
58
+ '!**/node_modules/@shopify/hydrogen/**',
59
+ '!**/node_modules/@shopify/hydrogen-ui/**',
60
+ ],
42
61
  },
43
- ssr: {
62
+ },
63
+ optimizeDeps: {
64
+ exclude: [
65
+ '@shopify/hydrogen',
66
+ '@shopify/hydrogen/client',
67
+ '@shopify/hydrogen/entry-client',
68
+ '@shopify/hydrogen-ui',
69
+ ],
70
+ include: [
44
71
  /**
45
- * Tell Vite to bundle everything when we're building for Workers.
46
- * Otherwise, bundle RSC plugin as a workaround to apply the vendor alias above.
72
+ * Additionally, the following dependencies have trouble loading the
73
+ * correct version of the dependency (server vs client). This tells Vite to take the
74
+ * server versions and optimize them for ESM.
47
75
  */
48
- noExternal: isWorker || [/react-server-dom-vite/],
49
- target: isWorker ? 'webworker' : 'node',
50
- },
51
- // Reload when updating local Hydrogen lib
52
- server: process.env.LOCAL_DEV && {
53
- watch: {
54
- ignored: [
55
- '!**/node_modules/@shopify/hydrogen/**',
56
- '!**/node_modules/@shopify/hydrogen-ui/**',
57
- ],
58
- },
59
- },
60
- optimizeDeps: {
61
- exclude: [
62
- '@shopify/hydrogen',
63
- '@shopify/hydrogen/client',
64
- '@shopify/hydrogen/entry-client',
65
- '@shopify/hydrogen-ui',
66
- ],
67
- include: [
68
- /**
69
- * Additionally, the following dependencies have trouble loading the
70
- * correct version of the dependency (server vs client). This tells Vite to take the
71
- * server versions and optimize them for ESM.
72
- */
73
- 'react-helmet-async',
74
- 'react-error-boundary',
75
- /**
76
- * Vite cannot find the following dependencies since they might be
77
- * required in RSC asynchronously. This tells Vite to optimize them
78
- * at server start to avoid posterior page reloads and issues (#429 #430).
79
- */
80
- 'react',
81
- 'react-dom/client',
82
- 'react-server-dom-vite/client-proxy',
83
- // https://github.com/vitejs/vite/issues/6215
84
- 'react/jsx-runtime',
85
- ],
86
- },
87
- define: {
88
- __DEV__: env.mode !== 'production',
89
- __WORKER__: isWorker,
90
- },
91
- envPrefix: ['VITE_', 'PUBLIC_'],
92
- base: process.env.HYDROGEN_ASSET_BASE_URL,
93
- });
94
- },
76
+ 'react-helmet-async',
77
+ 'react-error-boundary',
78
+ /**
79
+ * Vite cannot find the following dependencies since they might be
80
+ * required in RSC asynchronously. This tells Vite to optimize them
81
+ * at server start to avoid posterior page reloads and issues (#429 #430).
82
+ */
83
+ 'react',
84
+ 'react-dom/client',
85
+ 'react-server-dom-vite/client-proxy',
86
+ // https://github.com/vitejs/vite/issues/6215
87
+ 'react/jsx-runtime',
88
+ // https://github.com/nfriedly/set-cookie-parser/issues/50
89
+ 'set-cookie-parser',
90
+ 'undici',
91
+ ],
92
+ },
93
+ define: {
94
+ __HYDROGEN_DEV__: env.mode !== 'production',
95
+ __HYDROGEN_WORKER__: isWorker,
96
+ __HYDROGEN_TEST__: false, // Used in unit tests
97
+ },
98
+ envPrefix: ['VITE_', 'PUBLIC_'],
99
+ base: process.env.HYDROGEN_ASSET_BASE_URL,
100
+ }),
95
101
  };
96
102
  };
@@ -1,5 +1,5 @@
1
1
  import { Plugin } from 'vite';
2
- import type { HydrogenVitePluginOptions } from '../../types';
2
+ import type { HydrogenVitePluginOptions } from '../types';
3
3
  export declare const HYDROGEN_DEFAULT_SERVER_ENTRY: string;
4
4
  declare const _default: (pluginOptions: HydrogenVitePluginOptions) => Plugin;
5
5
  export default _default;
@@ -27,16 +27,15 @@ export default (pluginOptions) => {
27
27
  server.middlewares.use(graphiqlMiddleware({
28
28
  dev: true,
29
29
  getShopifyConfig: async (incomingMessage) => {
30
- var _a;
31
30
  const { default: hydrogenConfig } = await server.ssrLoadModule(VIRTUAL_PROXY_HYDROGEN_CONFIG_ID);
32
31
  // @ts-ignore
33
- const { address = 'localhost', port = '3000' } = ((_a = server.httpServer) === null || _a === void 0 ? void 0 : _a.address()) || {};
32
+ const { address = 'localhost', port = '3000' } = server.httpServer?.address() || {};
34
33
  const url = new URL(`http://${address}:${port}${incomingMessage.url}`);
35
34
  const request = new Request(url.toString(), {
36
35
  headers: incomingMessage.headers,
37
36
  });
38
37
  // @ts-expect-error Manually set `normalizedUrl` which a developer expects to be available
39
- // via `ServerComponentRequest` during production runtime.
38
+ // via `HydrogenRequest` during production runtime.
40
39
  request.normalizedUrl = request.url;
41
40
  const { shopify } = hydrogenConfig;
42
41
  return typeof shopify === 'function' ? shopify(request) : shopify;
@@ -48,7 +47,7 @@ export default (pluginOptions) => {
48
47
  indexTemplate: getIndexTemplate,
49
48
  getServerEntrypoint: () => server.ssrLoadModule(HYDROGEN_DEFAULT_SERVER_ENTRY),
50
49
  devServer: server,
51
- cache: (pluginOptions === null || pluginOptions === void 0 ? void 0 : pluginOptions.devCache)
50
+ cache: pluginOptions?.devCache
52
51
  ? new InMemoryCache()
53
52
  : undefined,
54
53
  }));
@@ -1,10 +1,13 @@
1
1
  // @ts-ignore
2
- import reactServerDomVite from '@shopify/hydrogen/vendor/react-server-dom-vite/plugin';
2
+ import reactServerDomVite from '@shopify/hydrogen/vendor/react-server-dom-vite/plugin.js';
3
3
  import { HYDROGEN_DEFAULT_SERVER_ENTRY } from './vite-plugin-hydrogen-middleware';
4
4
  import { VIRTUAL_PROXY_HYDROGEN_ROUTES_ID } from './vite-plugin-hydrogen-virtual-files';
5
- import { viteception } from '../viteception';
6
5
  export default function () {
7
6
  return reactServerDomVite({
7
+ serverBuildEntries: [
8
+ HYDROGEN_DEFAULT_SERVER_ENTRY,
9
+ VIRTUAL_PROXY_HYDROGEN_ROUTES_ID,
10
+ ],
8
11
  isServerComponentImporterAllowed(importer, source) {
9
12
  return (
10
13
  // Always allow the entry server (e.g. App.server.jsx) to be imported
@@ -15,16 +18,5 @@ export default function () {
15
18
  // TODO: revisit this when RSC splits into two bundles
16
19
  /\.test\.[tj]sx?$/.test(importer));
17
20
  },
18
- async findClientComponentsForClientBuild() {
19
- const { server } = await viteception([
20
- // Load server entry to discover client components early
21
- HYDROGEN_DEFAULT_SERVER_ENTRY,
22
- // Route globs are placed in a virtual module and need to
23
- // be loaded to discover client components in routes
24
- VIRTUAL_PROXY_HYDROGEN_ROUTES_ID,
25
- ]);
26
- // At this point, the server has loaded all the components in the module graph
27
- return reactServerDomVite.findClientComponentsFromServer(server);
28
- },
29
21
  });
30
22
  }
@@ -0,0 +1,3 @@
1
+ import { Plugin } from 'vite';
2
+ declare const _default: () => Plugin;
3
+ export default _default;
@@ -0,0 +1,19 @@
1
+ export default () => {
2
+ return {
3
+ name: 'hydrogen:suppress-warnings',
4
+ configResolved(config) {
5
+ // TODO: Fix the actual issues that cause these warnings
6
+ const filterOut = (msg) => msg.startsWith("@shopify/hydrogen doesn't appear to be written in CJS") ||
7
+ (msg.includes('missing source files') &&
8
+ ['kolorist'].some((lib) => msg.includes(lib)));
9
+ for (const method of ['warn', 'warnOnce']) {
10
+ const original = config.logger[method];
11
+ config.logger[method] = (msg, ...args) => {
12
+ if (filterOut(msg))
13
+ return;
14
+ return original(msg, ...args);
15
+ };
16
+ }
17
+ },
18
+ };
19
+ };
@@ -1,5 +1,5 @@
1
1
  import { Plugin } from 'vite';
2
- import type { HydrogenVitePluginOptions } from '../../types';
2
+ import type { HydrogenVitePluginOptions } from '../types';
3
3
  export declare const HYDROGEN_DEFAULT_SERVER_ENTRY: string;
4
4
  export declare const VIRTUAL_PROXY_HYDROGEN_CONFIG_ID: string;
5
5
  export declare const VIRTUAL_PROXY_HYDROGEN_ROUTES_ID: string;
@@ -51,8 +51,8 @@ export default (pluginOptions) => {
51
51
  }
52
52
  if (id === '\0' + VIRTUAL_HYDROGEN_ROUTES_ID) {
53
53
  return importHydrogenConfig().then((hc) => {
54
- var _a, _b, _c, _d;
55
- let routesPath = (_b = (typeof hc.routes === 'string' ? hc.routes : (_a = hc.routes) === null || _a === void 0 ? void 0 : _a.files)) !== null && _b !== void 0 ? _b : '/src/routes';
54
+ let routesPath = (typeof hc.routes === 'string' ? hc.routes : hc.routes?.files) ??
55
+ '/src/routes';
56
56
  if (routesPath.startsWith('./')) {
57
57
  routesPath = routesPath.slice(1);
58
58
  }
@@ -63,7 +63,7 @@ export default (pluginOptions) => {
63
63
  routesPath += '**/*.server.[jt](s|sx)';
64
64
  }
65
65
  const [dirPrefix] = routesPath.split('/*');
66
- let code = `export default {\n dirPrefix: '${dirPrefix}',\n basePath: '${(_d = (_c = hc.routes) === null || _c === void 0 ? void 0 : _c.basePath) !== null && _d !== void 0 ? _d : ''}',\n files: import.meta.globEager('${routesPath}')\n};`;
66
+ let code = `export default {\n dirPrefix: '${dirPrefix}',\n basePath: '${hc.routes?.basePath ?? ''}',\n files: import.meta.globEager('${routesPath}')\n};`;
67
67
  if (config.command === 'serve') {
68
68
  // Add dependency on Hydrogen config for HMR
69
69
  code += `\nimport '${VIRTUAL_HYDROGEN_CONFIG_ID}';`;
@@ -95,5 +95,7 @@ async function findHydrogenConfigPath(root, userProvidedPath) {
95
95
  configPath = path.resolve(root, configPath);
96
96
  }
97
97
  return (configPath ||
98
- require.resolve('@shopify/hydrogen/dist/esnext/utilities/empty-hydrogen-config.js'));
98
+ require.resolve(
99
+ // eslint-disable-next-line node/no-missing-require
100
+ '@shopify/hydrogen/utilities/empty-hydrogen-config'));
99
101
  }
@@ -0,0 +1,5 @@
1
+ export interface HydrogenVitePluginOptions {
2
+ devCache?: boolean;
3
+ purgeQueryCacheOnBuild?: boolean;
4
+ configPath?: string;
5
+ }