@shopify/hydrogen 1.0.2 → 1.3.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 (419) hide show
  1. package/README.md +1 -1
  2. package/dist/esnext/FileSessionStorage.d.ts +1 -1
  3. package/dist/esnext/FileSessionStorage.js +1 -1
  4. package/dist/esnext/client.d.ts +16 -16
  5. package/dist/esnext/client.js +16 -16
  6. package/dist/esnext/components/AddToCartButton/AddToCartButton.client.d.ts +5 -2
  7. package/dist/esnext/components/AddToCartButton/AddToCartButton.client.js +6 -5
  8. package/dist/esnext/components/AddToCartButton/index.d.ts +1 -1
  9. package/dist/esnext/components/AddToCartButton/index.js +1 -1
  10. package/dist/esnext/components/BaseButton/BaseButton.client.d.ts +7 -5
  11. package/dist/esnext/components/BaseButton/BaseButton.client.js +5 -4
  12. package/dist/esnext/components/BaseButton/index.d.ts +1 -1
  13. package/dist/esnext/components/BaseButton/index.js +1 -1
  14. package/dist/esnext/components/BuyNowButton/BuyNowButton.client.d.ts +3 -2
  15. package/dist/esnext/components/BuyNowButton/BuyNowButton.client.js +2 -2
  16. package/dist/esnext/components/BuyNowButton/index.d.ts +1 -1
  17. package/dist/esnext/components/BuyNowButton/index.js +1 -1
  18. package/dist/esnext/components/CartCheckoutButton/CartCheckoutButton.client.js +1 -1
  19. package/dist/esnext/components/CartCheckoutButton/index.d.ts +1 -1
  20. package/dist/esnext/components/CartCheckoutButton/index.js +1 -1
  21. package/dist/esnext/components/CartCost/CartCost.client.d.ts +1 -1
  22. package/dist/esnext/components/CartCost/CartCost.client.js +2 -2
  23. package/dist/esnext/components/CartCost/index.d.ts +1 -1
  24. package/dist/esnext/components/CartCost/index.js +1 -1
  25. package/dist/esnext/components/CartLineImage/CartLineImage.client.d.ts +1 -1
  26. package/dist/esnext/components/CartLineImage/CartLineImage.client.js +2 -2
  27. package/dist/esnext/components/CartLineImage/index.d.ts +1 -1
  28. package/dist/esnext/components/CartLineImage/index.js +1 -1
  29. package/dist/esnext/components/CartLinePrice/CartLinePrice.client.d.ts +1 -1
  30. package/dist/esnext/components/CartLinePrice/CartLinePrice.client.js +2 -2
  31. package/dist/esnext/components/CartLinePrice/index.d.ts +1 -1
  32. package/dist/esnext/components/CartLinePrice/index.js +1 -1
  33. package/dist/esnext/components/CartLineProductTitle/CartLineProductTitle.client.js +1 -1
  34. package/dist/esnext/components/CartLineProductTitle/index.d.ts +1 -1
  35. package/dist/esnext/components/CartLineProductTitle/index.js +1 -1
  36. package/dist/esnext/components/CartLineProvider/CartLineProvider.client.d.ts +1 -1
  37. package/dist/esnext/components/CartLineProvider/CartLineProvider.client.js +1 -1
  38. package/dist/esnext/components/CartLineProvider/context.d.ts +13 -13
  39. package/dist/esnext/components/CartLineProvider/index.d.ts +2 -2
  40. package/dist/esnext/components/CartLineProvider/index.js +2 -2
  41. package/dist/esnext/components/CartLineQuantity/CartLineQuantity.client.js +1 -1
  42. package/dist/esnext/components/CartLineQuantity/index.d.ts +1 -1
  43. package/dist/esnext/components/CartLineQuantity/index.js +1 -1
  44. package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.d.ts +7 -8
  45. package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.js +3 -3
  46. package/dist/esnext/components/CartLineQuantityAdjustButton/index.d.ts +1 -1
  47. package/dist/esnext/components/CartLineQuantityAdjustButton/index.js +1 -1
  48. package/dist/esnext/components/CartLines/CartLines.client.d.ts +1 -1
  49. package/dist/esnext/components/CartLines/CartLines.client.js +2 -2
  50. package/dist/esnext/components/CartLines/index.d.ts +1 -1
  51. package/dist/esnext/components/CartLines/index.js +1 -1
  52. package/dist/esnext/components/CartProvider/CartProvider.client.d.ts +2 -2
  53. package/dist/esnext/components/CartProvider/CartProvider.client.js +13 -7
  54. package/dist/esnext/components/CartProvider/cart-queries.d.ts +1 -1
  55. package/dist/esnext/components/CartProvider/cart-queries.js +1 -0
  56. package/dist/esnext/components/CartProvider/context.d.ts +1 -1
  57. package/dist/esnext/components/CartProvider/graphql/CartAttributesUpdateMutation.d.ts +1 -1
  58. package/dist/esnext/components/CartProvider/graphql/CartBuyerIdentityUpdateMutation.d.ts +1 -1
  59. package/dist/esnext/components/CartProvider/graphql/CartCreateMutation.d.ts +1 -1
  60. package/dist/esnext/components/CartProvider/graphql/CartDiscountCodesUpdateMutation.d.ts +1 -1
  61. package/dist/esnext/components/CartProvider/graphql/CartFragment.d.ts +1 -1
  62. package/dist/esnext/components/CartProvider/graphql/CartLineAddMutation.d.ts +1 -1
  63. package/dist/esnext/components/CartProvider/graphql/CartLineRemoveMutation.d.ts +1 -1
  64. package/dist/esnext/components/CartProvider/graphql/CartLineUpdateMutation.d.ts +1 -1
  65. package/dist/esnext/components/CartProvider/graphql/CartNoteUpdateMutation.d.ts +1 -1
  66. package/dist/esnext/components/CartProvider/graphql/CartQuery.d.ts +1 -1
  67. package/dist/esnext/components/CartProvider/hooks.client.d.ts +2 -2
  68. package/dist/esnext/components/CartProvider/hooks.client.js +4 -4
  69. package/dist/esnext/components/CartProvider/index.d.ts +4 -4
  70. package/dist/esnext/components/CartProvider/index.js +3 -3
  71. package/dist/esnext/components/CartProvider/types.d.ts +2 -2
  72. package/dist/esnext/components/CartShopPayButton/CartShopPayButton.client.d.ts +1 -1
  73. package/dist/esnext/components/CartShopPayButton/CartShopPayButton.client.js +2 -2
  74. package/dist/esnext/components/CartShopPayButton/index.d.ts +1 -1
  75. package/dist/esnext/components/CartShopPayButton/index.js +1 -1
  76. package/dist/esnext/components/ExternalVideo/ExternalVideo.d.ts +2 -2
  77. package/dist/esnext/components/ExternalVideo/ExternalVideo.js +1 -1
  78. package/dist/esnext/components/ExternalVideo/index.d.ts +1 -1
  79. package/dist/esnext/components/ExternalVideo/index.js +1 -1
  80. package/dist/esnext/components/Image/Image.d.ts +2 -2
  81. package/dist/esnext/components/Image/Image.js +5 -5
  82. package/dist/esnext/components/Image/index.d.ts +2 -2
  83. package/dist/esnext/components/Image/index.js +1 -1
  84. package/dist/esnext/components/Link/Link.client.js +5 -5
  85. package/dist/esnext/components/Link/index.d.ts +1 -1
  86. package/dist/esnext/components/Link/index.js +1 -1
  87. package/dist/esnext/components/LocalizationProvider/LocalizationClientProvider.client.d.ts +1 -1
  88. package/dist/esnext/components/LocalizationProvider/LocalizationClientProvider.client.js +1 -1
  89. package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.d.ts +1 -1
  90. package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.js +5 -5
  91. package/dist/esnext/components/LocalizationProvider/index.d.ts +1 -1
  92. package/dist/esnext/components/LocalizationProvider/index.js +1 -1
  93. package/dist/esnext/components/MediaFile/MediaFile.d.ts +4 -4
  94. package/dist/esnext/components/MediaFile/MediaFile.js +4 -4
  95. package/dist/esnext/components/MediaFile/index.d.ts +1 -1
  96. package/dist/esnext/components/MediaFile/index.js +1 -1
  97. package/dist/esnext/components/Metafield/Metafield.client.d.ts +2 -2
  98. package/dist/esnext/components/Metafield/Metafield.client.js +6 -6
  99. package/dist/esnext/components/Metafield/components/StarRating/StarRating.d.ts +1 -1
  100. package/dist/esnext/components/Metafield/components/StarRating/index.d.ts +1 -1
  101. package/dist/esnext/components/Metafield/components/StarRating/index.js +1 -1
  102. package/dist/esnext/components/Metafield/components/index.d.ts +1 -1
  103. package/dist/esnext/components/Metafield/components/index.js +1 -1
  104. package/dist/esnext/components/Metafield/index.d.ts +2 -2
  105. package/dist/esnext/components/Metafield/index.js +1 -1
  106. package/dist/esnext/components/Metafield/types.d.ts +1 -1
  107. package/dist/esnext/components/ModelViewer/ModelViewer.client.d.ts +2 -2
  108. package/dist/esnext/components/ModelViewer/ModelViewer.client.js +1 -1
  109. package/dist/esnext/components/ModelViewer/index.d.ts +1 -1
  110. package/dist/esnext/components/ModelViewer/index.js +1 -1
  111. package/dist/esnext/components/Money/Money.client.d.ts +1 -1
  112. package/dist/esnext/components/Money/Money.client.js +1 -1
  113. package/dist/esnext/components/Money/index.d.ts +1 -1
  114. package/dist/esnext/components/Money/index.js +1 -1
  115. package/dist/esnext/components/ProductOptionsProvider/ProductOptionsProvider.client.d.ts +1 -1
  116. package/dist/esnext/components/ProductOptionsProvider/ProductOptionsProvider.client.js +3 -3
  117. package/dist/esnext/components/ProductOptionsProvider/context.d.ts +1 -1
  118. package/dist/esnext/components/ProductOptionsProvider/index.d.ts +1 -1
  119. package/dist/esnext/components/ProductOptionsProvider/index.js +1 -1
  120. package/dist/esnext/components/ProductPrice/ProductPrice.client.d.ts +2 -2
  121. package/dist/esnext/components/ProductPrice/ProductPrice.client.js +2 -2
  122. package/dist/esnext/components/ProductPrice/index.d.ts +1 -1
  123. package/dist/esnext/components/ProductPrice/index.js +1 -1
  124. package/dist/esnext/components/Seo/CollectionSeo.client.d.ts +1 -1
  125. package/dist/esnext/components/Seo/CollectionSeo.client.js +4 -4
  126. package/dist/esnext/components/Seo/DefaultPageSeo.client.d.ts +1 -1
  127. package/dist/esnext/components/Seo/DefaultPageSeo.client.js +5 -5
  128. package/dist/esnext/components/Seo/DescriptionSeo.client.d.ts +1 -1
  129. package/dist/esnext/components/Seo/DescriptionSeo.client.js +1 -1
  130. package/dist/esnext/components/Seo/HomePageSeo.client.d.ts +1 -1
  131. package/dist/esnext/components/Seo/HomePageSeo.client.js +3 -3
  132. package/dist/esnext/components/Seo/ImageSeo.client.d.ts +1 -1
  133. package/dist/esnext/components/Seo/ImageSeo.client.js +1 -1
  134. package/dist/esnext/components/Seo/NoIndexSeo.client.d.ts +1 -1
  135. package/dist/esnext/components/Seo/NoIndexSeo.client.js +2 -2
  136. package/dist/esnext/components/Seo/PageSeo.client.d.ts +1 -1
  137. package/dist/esnext/components/Seo/PageSeo.client.js +3 -3
  138. package/dist/esnext/components/Seo/ProductSeo.client.d.ts +1 -1
  139. package/dist/esnext/components/Seo/ProductSeo.client.js +6 -6
  140. package/dist/esnext/components/Seo/Seo.client.d.ts +4 -4
  141. package/dist/esnext/components/Seo/Seo.client.js +7 -7
  142. package/dist/esnext/components/Seo/TitleSeo.client.d.ts +1 -1
  143. package/dist/esnext/components/Seo/TitleSeo.client.js +1 -1
  144. package/dist/esnext/components/Seo/TwitterSeo.client.d.ts +1 -1
  145. package/dist/esnext/components/Seo/TwitterSeo.client.js +1 -1
  146. package/dist/esnext/components/Seo/index.d.ts +1 -1
  147. package/dist/esnext/components/Seo/index.js +1 -1
  148. package/dist/esnext/components/Seo/seo-types.d.ts +1 -1
  149. package/dist/esnext/components/ShopPayButton/ShopPayButton.client.js +2 -2
  150. package/dist/esnext/components/ShopPayButton/index.d.ts +1 -1
  151. package/dist/esnext/components/ShopPayButton/index.js +1 -1
  152. package/dist/esnext/components/Video/Video.d.ts +7 -2
  153. package/dist/esnext/components/Video/Video.js +3 -3
  154. package/dist/esnext/components/Video/index.d.ts +1 -1
  155. package/dist/esnext/components/Video/index.js +1 -1
  156. package/dist/esnext/components/index.d.ts +27 -27
  157. package/dist/esnext/components/index.js +25 -25
  158. package/dist/esnext/config.d.ts +5 -5
  159. package/dist/esnext/config.js +4 -4
  160. package/dist/esnext/constants.d.ts +1 -0
  161. package/dist/esnext/constants.js +1 -0
  162. package/dist/esnext/entry-client.d.ts +1 -1
  163. package/dist/esnext/entry-client.js +35 -14
  164. package/dist/esnext/entry-server.d.ts +1 -1
  165. package/dist/esnext/entry-server.js +86 -60
  166. package/dist/esnext/experimental.d.ts +2 -0
  167. package/dist/esnext/experimental.js +2 -0
  168. package/dist/esnext/foundation/Analytics/Analytics.client.js +1 -1
  169. package/dist/esnext/foundation/Analytics/Analytics.server.js +5 -5
  170. package/dist/esnext/foundation/Analytics/ClientAnalytics.d.ts +1 -1
  171. package/dist/esnext/foundation/Analytics/ClientAnalytics.js +4 -4
  172. package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.d.ts +1 -1
  173. package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.js +1 -1
  174. package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetrics.client.js +7 -5
  175. package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetricsDebug.client.js +1 -1
  176. package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/ServerAnalyticsConnector.js +1 -1
  177. package/dist/esnext/foundation/Analytics/connectors/Shopify/ServerAnalyticsConnector.js +1 -1
  178. package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.client.js +3 -3
  179. package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.server.js +9 -9
  180. package/dist/esnext/foundation/Analytics/hook.js +2 -2
  181. package/dist/esnext/foundation/Analytics/index.d.ts +1 -1
  182. package/dist/esnext/foundation/Analytics/index.js +1 -1
  183. package/dist/esnext/foundation/Analytics/utils.js +1 -1
  184. package/dist/esnext/foundation/BuiltInRoutes/BuiltInRoutes.d.ts +1 -1
  185. package/dist/esnext/foundation/BuiltInRoutes/BuiltInRoutes.js +3 -3
  186. package/dist/esnext/foundation/Cache/cache-sub-request.d.ts +1 -1
  187. package/dist/esnext/foundation/Cache/cache-sub-request.js +4 -4
  188. package/dist/esnext/foundation/Cache/cache.d.ts +1 -1
  189. package/dist/esnext/foundation/Cache/cache.js +3 -4
  190. package/dist/esnext/foundation/Cache/strategies/index.d.ts +1 -1
  191. package/dist/esnext/foundation/Cookie/Cookie.js +2 -2
  192. package/dist/esnext/foundation/CookieSessionStorage/CookieSessionStorage.d.ts +2 -2
  193. package/dist/esnext/foundation/CookieSessionStorage/CookieSessionStorage.js +2 -1
  194. package/dist/esnext/foundation/DevTools/DevTools.client.js +1 -1
  195. package/dist/esnext/foundation/DevTools/DevTools.server.js +4 -3
  196. package/dist/esnext/foundation/DevTools/components/Heading.js +1 -1
  197. package/dist/esnext/foundation/DevTools/components/Interface.client.js +1 -1
  198. package/dist/esnext/foundation/DevTools/components/Panels.d.ts +2 -2
  199. package/dist/esnext/foundation/DevTools/components/Panels.js +28 -22
  200. package/dist/esnext/foundation/DevTools/components/Performance.client.js +1 -2
  201. package/dist/esnext/foundation/DevTools/components/Settings.client.d.ts +2 -1
  202. package/dist/esnext/foundation/DevTools/components/Settings.client.js +2 -5
  203. package/dist/esnext/foundation/DevTools/components/Table.js +3 -3
  204. package/dist/esnext/foundation/DevTools/components/index.d.ts +2 -2
  205. package/dist/esnext/foundation/DevTools/components/index.js +2 -2
  206. package/dist/esnext/foundation/FileRoutes/FileRoutes.server.d.ts +1 -1
  207. package/dist/esnext/foundation/FileRoutes/FileRoutes.server.js +5 -5
  208. package/dist/esnext/foundation/FileSessionStorage/FileSessionStorage.d.ts +3 -3
  209. package/dist/esnext/foundation/FileSessionStorage/FileSessionStorage.js +2 -2
  210. package/dist/esnext/foundation/Form/Form.client.d.ts +11 -0
  211. package/dist/esnext/foundation/Form/Form.client.js +51 -0
  212. package/dist/esnext/foundation/Head/Head.client.js +1 -1
  213. package/dist/esnext/foundation/Head/index.d.ts +1 -1
  214. package/dist/esnext/foundation/Head/index.js +1 -1
  215. package/dist/esnext/foundation/Html/Html.d.ts +1 -1
  216. package/dist/esnext/foundation/HydrogenRequest/HydrogenRequest.server.d.ts +6 -5
  217. package/dist/esnext/foundation/HydrogenRequest/HydrogenRequest.server.js +6 -7
  218. package/dist/esnext/foundation/HydrogenResponse/HydrogenResponse.server.d.ts +2 -4
  219. package/dist/esnext/foundation/HydrogenResponse/HydrogenResponse.server.js +4 -18
  220. package/dist/esnext/foundation/MemorySessionStorage/MemorySessionStorage.d.ts +2 -2
  221. package/dist/esnext/foundation/MemorySessionStorage/MemorySessionStorage.js +1 -1
  222. package/dist/esnext/foundation/Redirect/Redirect.client.js +1 -1
  223. package/dist/esnext/foundation/Route/Route.server.js +3 -3
  224. package/dist/esnext/foundation/Router/BrowserRouter.client.js +2 -2
  225. package/dist/esnext/foundation/Router/Router.server.js +1 -1
  226. package/dist/esnext/foundation/ServerPropsProvider/ServerPropsProvider.d.ts +3 -1
  227. package/dist/esnext/foundation/ServerPropsProvider/ServerPropsProvider.js +7 -7
  228. package/dist/esnext/foundation/ServerPropsProvider/index.d.ts +1 -1
  229. package/dist/esnext/foundation/ServerPropsProvider/index.js +1 -1
  230. package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +2 -2
  231. package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.js +3 -3
  232. package/dist/esnext/foundation/ServerRequestProvider/index.d.ts +1 -1
  233. package/dist/esnext/foundation/ServerRequestProvider/index.js +1 -1
  234. package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.client.d.ts +1 -1
  235. package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.server.d.ts +2 -2
  236. package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.server.js +7 -6
  237. package/dist/esnext/foundation/ShopifyProvider/index.d.ts +1 -1
  238. package/dist/esnext/foundation/ShopifyProvider/index.js +1 -1
  239. package/dist/esnext/foundation/ShopifyProvider/types.d.ts +4 -3
  240. package/dist/esnext/foundation/fetchSync/ResponseSync.d.ts +14 -0
  241. package/dist/esnext/foundation/fetchSync/ResponseSync.js +38 -0
  242. package/dist/esnext/foundation/fetchSync/client/fetchSync.d.ts +2 -2
  243. package/dist/esnext/foundation/fetchSync/client/fetchSync.js +5 -10
  244. package/dist/esnext/foundation/fetchSync/server/fetchSync.d.ts +3 -3
  245. package/dist/esnext/foundation/fetchSync/server/fetchSync.js +7 -13
  246. package/dist/esnext/foundation/index.d.ts +3 -3
  247. package/dist/esnext/foundation/index.js +3 -3
  248. package/dist/esnext/foundation/session/session-types.d.ts +15 -0
  249. package/dist/esnext/foundation/{fetchSync/types.js → session/session-types.js} +0 -0
  250. package/dist/esnext/foundation/session/session.d.ts +7 -16
  251. package/dist/esnext/foundation/session/session.js +17 -1
  252. package/dist/esnext/foundation/ssr-interop.d.ts +2 -2
  253. package/dist/esnext/foundation/ssr-interop.js +2 -2
  254. package/dist/esnext/foundation/useNavigate/useNavigate.js +2 -2
  255. package/dist/esnext/foundation/useQuery/hooks.d.ts +4 -1
  256. package/dist/esnext/foundation/useQuery/hooks.js +5 -5
  257. package/dist/esnext/foundation/useQuery/index.d.ts +1 -1
  258. package/dist/esnext/foundation/useQuery/index.js +1 -1
  259. package/dist/esnext/foundation/useRequestContext/index.js +1 -1
  260. package/dist/esnext/foundation/useRouteParams/useRouteParams.js +2 -2
  261. package/dist/esnext/foundation/useServerProps/index.d.ts +1 -1
  262. package/dist/esnext/foundation/useServerProps/index.js +1 -1
  263. package/dist/esnext/foundation/useServerProps/use-server-props.d.ts +1 -1
  264. package/dist/esnext/foundation/useServerProps/use-server-props.js +1 -1
  265. package/dist/esnext/foundation/useSession/useSession.d.ts +1 -0
  266. package/dist/esnext/foundation/useSession/useSession.js +14 -1
  267. package/dist/esnext/foundation/useShop/index.d.ts +1 -1
  268. package/dist/esnext/foundation/useShop/index.js +1 -1
  269. package/dist/esnext/foundation/useShop/use-shop.d.ts +1 -1
  270. package/dist/esnext/foundation/useShop/use-shop.js +2 -2
  271. package/dist/esnext/foundation/useUrl/index.d.ts +1 -1
  272. package/dist/esnext/foundation/useUrl/index.js +1 -1
  273. package/dist/esnext/foundation/useUrl/useUrl.js +4 -4
  274. package/dist/esnext/framework/graphiql.js +26 -30
  275. package/dist/esnext/framework/load-config.js +2 -2
  276. package/dist/esnext/framework/middleware.d.ts +1 -1
  277. package/dist/esnext/framework/middleware.js +2 -2
  278. package/dist/esnext/framework/plugin.d.ts +1 -1
  279. package/dist/esnext/framework/plugin.js +17 -15
  280. package/dist/esnext/framework/plugins/vite-plugin-assets-version.d.ts +2 -0
  281. package/dist/esnext/framework/plugins/vite-plugin-assets-version.js +8 -0
  282. package/dist/esnext/framework/plugins/vite-plugin-css-modules-rsc.js +1 -1
  283. package/dist/esnext/framework/plugins/vite-plugin-css-rsc.d.ts +2 -0
  284. package/dist/esnext/framework/plugins/vite-plugin-css-rsc.js +108 -0
  285. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.d.ts +2 -1
  286. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.js +8 -4
  287. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +1 -1
  288. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.js +3 -3
  289. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-rsc.d.ts +1 -1
  290. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-rsc.js +2 -2
  291. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.d.ts +1 -1
  292. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.js +35 -7
  293. package/dist/esnext/framework/plugins/vite-plugin-platform-entry.js +36 -7
  294. package/dist/esnext/framework/types.d.ts +14 -0
  295. package/dist/esnext/hooks/index.d.ts +6 -6
  296. package/dist/esnext/hooks/index.js +6 -6
  297. package/dist/esnext/hooks/useCart/index.d.ts +1 -1
  298. package/dist/esnext/hooks/useCart/index.js +1 -1
  299. package/dist/esnext/hooks/useCart/useCart.d.ts +1 -1
  300. package/dist/esnext/hooks/useCart/useCart.js +1 -1
  301. package/dist/esnext/hooks/useCartLine/index.d.ts +1 -1
  302. package/dist/esnext/hooks/useCartLine/index.js +1 -1
  303. package/dist/esnext/hooks/useCartLine/useCartLine.d.ts +13 -13
  304. package/dist/esnext/hooks/useCartLine/useCartLine.js +1 -1
  305. package/dist/esnext/hooks/useLoadScript/index.d.ts +1 -1
  306. package/dist/esnext/hooks/useLoadScript/index.js +1 -1
  307. package/dist/esnext/hooks/useLoadScript/useLoadScript.client.d.ts +1 -1
  308. package/dist/esnext/hooks/useLoadScript/useLoadScript.client.js +1 -1
  309. package/dist/esnext/hooks/useLocalization/useLocalization.d.ts +2 -3
  310. package/dist/esnext/hooks/useLocalization/useLocalization.js +2 -2
  311. package/dist/esnext/hooks/useMeasurement/hooks.d.ts +1 -1
  312. package/dist/esnext/hooks/useMeasurement/hooks.js +2 -2
  313. package/dist/esnext/hooks/useMeasurement/index.d.ts +1 -1
  314. package/dist/esnext/hooks/useMeasurement/index.js +1 -1
  315. package/dist/esnext/hooks/useMoney/hooks.d.ts +1 -1
  316. package/dist/esnext/hooks/useMoney/hooks.js +1 -1
  317. package/dist/esnext/hooks/useMoney/index.d.ts +1 -1
  318. package/dist/esnext/hooks/useMoney/index.js +1 -1
  319. package/dist/esnext/hooks/useProductOptions/helpers.d.ts +2 -2
  320. package/dist/esnext/hooks/useProductOptions/index.d.ts +2 -2
  321. package/dist/esnext/hooks/useProductOptions/index.js +2 -2
  322. package/dist/esnext/hooks/useProductOptions/types.d.ts +1 -1
  323. package/dist/esnext/hooks/useProductOptions/useProductOptions.client.d.ts +1 -1
  324. package/dist/esnext/hooks/useProductOptions/useProductOptions.client.js +1 -1
  325. package/dist/esnext/hooks/useShopQuery/hooks.d.ts +1 -1
  326. package/dist/esnext/hooks/useShopQuery/hooks.js +25 -17
  327. package/dist/esnext/hooks/useShopQuery/index.d.ts +1 -1
  328. package/dist/esnext/hooks/useShopQuery/index.js +1 -1
  329. package/dist/esnext/index.d.ts +26 -26
  330. package/dist/esnext/index.js +22 -22
  331. package/dist/esnext/node.d.ts +1 -1
  332. package/dist/esnext/node.js +1 -1
  333. package/dist/esnext/platforms/index.d.ts +1 -0
  334. package/dist/esnext/platforms/index.js +1 -0
  335. package/dist/esnext/platforms/node.d.ts +1 -1
  336. package/dist/esnext/platforms/node.js +5 -11
  337. package/dist/esnext/platforms/virtual.d.ts +8 -0
  338. package/dist/esnext/platforms/virtual.js +12 -0
  339. package/dist/esnext/platforms/worker-event.js +1 -1
  340. package/dist/esnext/platforms/worker.js +7 -7
  341. package/dist/esnext/shared-types.d.ts +3 -0
  342. package/dist/esnext/types.d.ts +8 -7
  343. package/dist/esnext/types.js +1 -1
  344. package/dist/esnext/utilities/apiRoutes.d.ts +4 -4
  345. package/dist/esnext/utilities/apiRoutes.js +51 -6
  346. package/dist/esnext/utilities/error.js +1 -1
  347. package/dist/esnext/utilities/fetch.js +1 -1
  348. package/dist/esnext/utilities/flattenConnection/flattenConnection.d.ts +1 -1
  349. package/dist/esnext/utilities/flattenConnection/index.d.ts +1 -1
  350. package/dist/esnext/utilities/flattenConnection/index.js +1 -1
  351. package/dist/esnext/utilities/hash.d.ts +1 -1
  352. package/dist/esnext/utilities/hash.js +1 -1
  353. package/dist/esnext/utilities/image_size.d.ts +1 -1
  354. package/dist/esnext/utilities/index.d.ts +12 -12
  355. package/dist/esnext/utilities/index.js +12 -12
  356. package/dist/esnext/utilities/isBrowser/index.d.ts +1 -1
  357. package/dist/esnext/utilities/isBrowser/index.js +1 -1
  358. package/dist/esnext/utilities/isServer/index.d.ts +1 -1
  359. package/dist/esnext/utilities/isServer/index.js +1 -1
  360. package/dist/esnext/utilities/isServer/isServer.js +1 -1
  361. package/dist/esnext/utilities/load_script.d.ts +1 -0
  362. package/dist/esnext/utilities/load_script.js +6 -1
  363. package/dist/esnext/utilities/locale/index.d.ts +1 -0
  364. package/dist/esnext/utilities/locale/index.js +1 -0
  365. package/dist/esnext/utilities/locale/locale.d.ts +7 -0
  366. package/dist/esnext/utilities/locale/locale.js +22 -0
  367. package/dist/esnext/utilities/log/index.d.ts +4 -4
  368. package/dist/esnext/utilities/log/index.js +4 -4
  369. package/dist/esnext/utilities/log/log-cache-api-status.js +1 -1
  370. package/dist/esnext/utilities/log/log-cache-header.d.ts +4 -4
  371. package/dist/esnext/utilities/log/log-cache-header.js +3 -3
  372. package/dist/esnext/utilities/log/log-query-timeline.d.ts +3 -3
  373. package/dist/esnext/utilities/log/log-query-timeline.js +13 -10
  374. package/dist/esnext/utilities/log/log.d.ts +1 -1
  375. package/dist/esnext/utilities/log/log.js +2 -2
  376. package/dist/esnext/utilities/log/utils.d.ts +1 -1
  377. package/dist/esnext/utilities/log/utils.js +1 -1
  378. package/dist/esnext/utilities/measurement.d.ts +1 -1
  379. package/dist/esnext/utilities/parseMetafield/index.d.ts +1 -1
  380. package/dist/esnext/utilities/parseMetafield/index.js +1 -1
  381. package/dist/esnext/utilities/parseMetafield/parseMetafield.d.ts +2 -2
  382. package/dist/esnext/utilities/parseMetafield/parseMetafield.js +1 -1
  383. package/dist/esnext/utilities/storefrontApi.js +1 -1
  384. package/dist/esnext/utilities/suspense.d.ts +1 -1
  385. package/dist/esnext/utilities/suspense.js +1 -1
  386. package/dist/esnext/version.d.ts +1 -1
  387. package/dist/esnext/version.js +1 -1
  388. package/dist/node/foundation/session/session-types.d.ts +15 -0
  389. package/dist/node/foundation/session/session-types.js +2 -0
  390. package/dist/node/framework/graphiql.js +26 -30
  391. package/dist/node/framework/load-config.js +3 -3
  392. package/dist/node/framework/middleware.d.ts +1 -1
  393. package/dist/node/framework/middleware.js +3 -3
  394. package/dist/node/framework/plugin.d.ts +1 -1
  395. package/dist/node/framework/plugin.js +26 -24
  396. package/dist/node/framework/plugins/vite-plugin-assets-version.d.ts +2 -0
  397. package/dist/node/framework/plugins/vite-plugin-assets-version.js +11 -0
  398. package/dist/node/framework/plugins/vite-plugin-css-modules-rsc.js +3 -3
  399. package/dist/node/framework/plugins/vite-plugin-css-rsc.d.ts +2 -0
  400. package/dist/node/framework/plugins/vite-plugin-css-rsc.js +114 -0
  401. package/dist/node/framework/plugins/vite-plugin-hydrogen-config.d.ts +2 -1
  402. package/dist/node/framework/plugins/vite-plugin-hydrogen-config.js +11 -4
  403. package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +1 -1
  404. package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.js +7 -7
  405. package/dist/node/framework/plugins/vite-plugin-hydrogen-rsc.d.ts +1 -1
  406. package/dist/node/framework/plugins/vite-plugin-hydrogen-rsc.js +5 -5
  407. package/dist/node/framework/plugins/vite-plugin-hydrogen-virtual-files.d.ts +1 -1
  408. package/dist/node/framework/plugins/vite-plugin-hydrogen-virtual-files.js +35 -7
  409. package/dist/node/framework/plugins/vite-plugin-platform-entry.js +36 -7
  410. package/dist/node/framework/types.d.ts +14 -0
  411. package/dist/node/shared-types.d.ts +3 -0
  412. package/package.json +20 -3
  413. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-plugin.js +36 -14
  414. package/vendor/react-server-dom-vite/esm/react-server-dom-vite-plugin.js +36 -14
  415. package/dist/esnext/foundation/fetchSync/types.d.ts +0 -5
  416. package/dist/esnext/framework/plugins/vite-plugin-purge-query-cache.d.ts +0 -3
  417. package/dist/esnext/framework/plugins/vite-plugin-purge-query-cache.js +0 -11
  418. package/dist/node/framework/plugins/vite-plugin-purge-query-cache.d.ts +0 -3
  419. package/dist/node/framework/plugins/vite-plugin-purge-query-cache.js +0 -16
@@ -1,7 +1,8 @@
1
1
  import React, { useState, useEffect } from 'react';
2
- import { ClientAnalytics } from '../../Analytics';
3
- import { Performance } from './Performance.client';
4
- import { Settings } from './Settings.client';
2
+ import { ClientAnalytics } from '../../Analytics/index.js';
3
+ import { Performance } from './Performance.client.js';
4
+ import { Settings } from './Settings.client.js';
5
+ const isComponentPanel = (panel) => panel.component !== undefined;
5
6
  export function Panels({ settings }) {
6
7
  const [selectedPanel, setSelectedPanel] = useState(0);
7
8
  const [navigations, setNavigations] = useState([]);
@@ -22,36 +23,41 @@ export function Panels({ settings }) {
22
23
  });
23
24
  }, [setNavigations, navigations]);
24
25
  const panels = getPanels({ settings, performance: { navigations } });
25
- const panelComponents = panels.map((obj, index) => (React.createElement("div", { key: obj.content, style: { display: selectedPanel === index ? 'block' : 'none' } }, obj.panel)));
26
+ const panelComponents = panels.map((obj, index) => isComponentPanel(obj) ? (React.createElement("div", { key: obj.content, style: { display: selectedPanel === index ? 'block' : 'none' } }, obj.component)) : null);
26
27
  return (React.createElement("div", { style: { display: 'flex', height: '100%' } },
27
- React.createElement("div", { style: { borderRight: '1px solid', padding: '1em 0em' } }, panels.map(({ content, icon, id }, index) => {
28
+ React.createElement("div", { style: { borderRight: '1px solid', padding: '1em 0em' } }, panels.map((panel, index) => {
28
29
  const active = selectedPanel === index;
29
- return (React.createElement("button", { key: id, type: "button", style: {
30
- lineHeight: 2,
31
- padding: '0em 1.25em',
32
- fontWeight: active ? 'bold' : 'normal',
33
- display: 'flex',
34
- alignItems: 'center',
35
- }, onClick: () => setSelectedPanel(index) },
36
- React.createElement("span", { style: { paddingRight: '0.4em' } }, icon),
37
- React.createElement("span", { style: { fontFamily: 'monospace' } }, content)));
30
+ const style = {
31
+ padding: '0em 1.25em',
32
+ fontWeight: 'bold',
33
+ textDecoration: active ? 'underline' : 'none',
34
+ display: 'flex',
35
+ justifyContent: 'space-between',
36
+ alignItems: 'center',
37
+ };
38
+ if (isComponentPanel(panel)) {
39
+ return (React.createElement("button", { key: panel.id, type: "button", style: style, onClick: () => setSelectedPanel(index) },
40
+ React.createElement("span", null, panel.content)));
41
+ }
42
+ return (React.createElement("a", { style: style, target: "_blank", rel: "noreferrer", href: panel.url, key: panel.url },
43
+ panel.content,
44
+ React.createElement("span", null, "\u2197")));
38
45
  })),
39
- React.createElement("div", { style: { padding: '1.25em', width: '100%' } }, panelComponents[selectedPanel ? selectedPanel : 0])));
40
- }
41
- function Panel({ children }) {
42
- return React.createElement("div", null, children);
46
+ React.createElement("div", { style: { padding: '1em', width: '100%' } }, panelComponents[selectedPanel ? selectedPanel : 0])));
43
47
  }
44
48
  function getPanels({ settings, performance }) {
45
49
  const panels = {
46
50
  settings: {
47
51
  content: 'Settings',
48
- panel: React.createElement(Settings, { ...settings }),
49
- icon: '🎛',
52
+ component: React.createElement(Settings, { ...settings }),
50
53
  },
51
54
  performance: {
52
55
  content: 'Performance',
53
- panel: React.createElement(Performance, { ...performance }),
54
- icon: '⏱',
56
+ component: React.createElement(Performance, { ...performance }),
57
+ },
58
+ graphiql: {
59
+ content: 'GraphiQL',
60
+ url: '/___graphql',
55
61
  },
56
62
  };
57
63
  return Object.keys(panels).map((key) => {
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Heading } from './Heading';
2
+ import { Heading } from './Heading.js';
3
3
  export function Performance({ navigations }) {
4
4
  const navigationsMarkup = navigations.map(({ url, ttfb, fcp, size, duration, type }) => (React.createElement("li", { key: url, style: { padding: '0.5em 0', borderBottom: '1px solid' } },
5
5
  React.createElement(Item, { label: type, value: url.replace('http://localhost:3000', '') }),
@@ -19,7 +19,6 @@ const Item = ({ label, value, unit }) => {
19
19
  return (React.createElement("span", { style: {
20
20
  fontFamily: 'monospace',
21
21
  padding: '0 2em 0 0',
22
- fontSize: '0.75em',
23
22
  } },
24
23
  label && label.padEnd(10),
25
24
  val));
@@ -1,5 +1,6 @@
1
+ import { Locale } from '../../ShopifyProvider/types.js';
1
2
  interface Props {
2
- locale: string;
3
+ locale: Locale;
3
4
  storeDomain: string;
4
5
  storefrontApiVersion: string;
5
6
  }
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
- import { Heading } from './Heading';
3
- import { Table } from './Table';
2
+ import { Table } from './Table.js';
4
3
  const KEY_MAP = {
5
4
  locale: 'Locale',
6
5
  storeDomain: 'Domain',
@@ -14,7 +13,5 @@ export function Settings(props) {
14
13
  type: typeof value,
15
14
  };
16
15
  });
17
- return (React.createElement(React.Fragment, null,
18
- React.createElement(Heading, null, "Config"),
19
- React.createElement(Table, { items: items })));
16
+ return React.createElement(Table, { items: items });
20
17
  }
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  export function Table({ items }) {
3
- const itemsMarkup = items.map(({ key, value }) => (React.createElement("div", { key: key, style: { display: 'flex' } },
4
- React.createElement("span", { style: { width: '30%', fontFamily: 'monospace', paddingRight: '1em' } }, key),
5
- React.createElement("span", { style: { width: '70%', fontFamily: 'monospace', fontWeight: 'bold' } }, value))));
3
+ const itemsMarkup = items.map(({ key, value }) => (React.createElement("div", { key: key, style: { display: 'flex', paddingBottom: '1em', flexDirection: 'column' } },
4
+ React.createElement("span", { style: { fontWeight: 'bold' } }, key),
5
+ React.createElement("span", { style: { width: '70%', fontFamily: 'monospace' } }, value))));
6
6
  return React.createElement("ul", null, itemsMarkup);
7
7
  }
@@ -1,2 +1,2 @@
1
- export { Interface } from './Interface.client';
2
- export { Panels } from './Panels';
1
+ export { Interface } from './Interface.client.js';
2
+ export { Panels } from './Panels.js';
@@ -1,2 +1,2 @@
1
- export { Interface } from './Interface.client';
2
- export { Panels } from './Panels';
1
+ export { Interface } from './Interface.client.js';
2
+ export { Panels } from './Panels.js';
@@ -1,4 +1,4 @@
1
- import type { ImportGlobEagerOutput } from '../../types';
1
+ import type { ImportGlobEagerOutput } from '../../types.js';
2
2
  interface FileRoutesProps {
3
3
  /** The routes defined by Vite's [import.meta.globEager](https://vitejs.dev/guide/features.html#glob-import) method. */
4
4
  routes?: ImportGlobEagerOutput;
@@ -1,9 +1,9 @@
1
1
  import React, { useMemo } from 'react';
2
- import { matchPath } from '../../utilities/matchPath';
3
- import { log } from '../../utilities/log';
4
- import { extractPathFromRoutesKey } from '../../utilities/apiRoutes';
5
- import { useServerRequest } from '../ServerRequestProvider';
6
- import { RouteParamsProvider } from '../useRouteParams/RouteParamsProvider.client';
2
+ import { matchPath } from '../../utilities/matchPath.js';
3
+ import { log } from '../../utilities/log/index.js';
4
+ import { extractPathFromRoutesKey } from '../../utilities/apiRoutes.js';
5
+ import { useServerRequest } from '../ServerRequestProvider/index.js';
6
+ import { RouteParamsProvider } from '../useRouteParams/RouteParamsProvider.client.js';
7
7
  /**
8
8
  * The `FileRoutes` component builds a set of default Hydrogen routes based on the output provided by Vite's
9
9
  * [import.meta.globEager](https://vitejs.dev/guide/features.html#glob-import) method. You can have multiple
@@ -1,6 +1,6 @@
1
- import type { SessionStorageAdapter } from '../session/session';
2
- import type { CookieOptions } from '../Cookie/Cookie';
3
- import { Logger } from '../../utilities/log';
1
+ import type { SessionStorageAdapter } from '../session/session-types.js';
2
+ import type { CookieOptions } from '../Cookie/Cookie.js';
3
+ import { Logger } from '../../utilities/log/index.js';
4
4
  /** The `FileSessionStorage` component persists session data to the file system.
5
5
  */
6
6
  export declare const FileSessionStorage: (name: string, dir: string, cookieOptions: CookieOptions) => (log: Logger) => SessionStorageAdapter;
@@ -1,8 +1,8 @@
1
- import { Cookie } from '../Cookie/Cookie';
1
+ import { Cookie } from '../Cookie/Cookie.js';
2
2
  import { v4 as uid } from 'uuid';
3
3
  import path from 'path';
4
4
  import { promises as fsp } from 'fs';
5
- import { parseJSON } from '../../utilities/parse';
5
+ import { parseJSON } from '../../utilities/parse.js';
6
6
  async function wait() {
7
7
  return new Promise((resolve) => setTimeout(resolve));
8
8
  }
@@ -0,0 +1,11 @@
1
+ import React, { FormEvent } from 'react';
2
+ interface FormProps {
3
+ action: string;
4
+ method?: string;
5
+ children?: Array<React.ReactNode>;
6
+ onSubmit?: (e: FormEvent<HTMLFormElement>) => void;
7
+ encType?: string;
8
+ noValidate?: boolean;
9
+ }
10
+ export declare function Form({ action, method, children, onSubmit, encType, noValidate, ...props }: FormProps): JSX.Element;
11
+ export {};
@@ -0,0 +1,51 @@
1
+ import React, { useCallback, useState } from 'react';
2
+ // @ts-ignore
3
+ import { createFromFetch } from '@shopify/hydrogen/vendor/react-server-dom-vite';
4
+ import { useInternalServerProps } from '../useServerProps/use-server-props.js';
5
+ export function Form({ action, method, children, onSubmit, encType = 'application/x-www-form-urlencoded', noValidate, ...props }) {
6
+ const { setRscResponseFromApiRoute } = useInternalServerProps();
7
+ const [_, startTransition] = React.useTransition();
8
+ const [loading, setLoading] = useState(false);
9
+ const [error, setError] = useState(null);
10
+ const submit = useCallback(async (e) => {
11
+ onSubmit && onSubmit(e);
12
+ if (e.defaultPrevented)
13
+ return;
14
+ setLoading(true);
15
+ e.preventDefault();
16
+ const formData = new FormData(e.target);
17
+ // @ts-expect-error
18
+ // It's valid to pass a FormData instance to a URLSearchParams constructor
19
+ // @todo - support multipart forms
20
+ const formBody = new URLSearchParams(formData);
21
+ startTransition(() => {
22
+ fetch(action, {
23
+ method,
24
+ headers: {
25
+ 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
26
+ 'Hydrogen-Client': 'Form-Action',
27
+ },
28
+ body: formBody.toString(),
29
+ })
30
+ .then((fetchResponse) => {
31
+ const rscPathname = fetchResponse.headers.get('Hydrogen-RSC-Pathname');
32
+ if (!rscPathname)
33
+ throw new Error(`The component's \`action\` attribute must point to an API route that responds with a new Request()\nRead more at https://shopify.dev/custom-storefronts/hydrogen/framework/forms`);
34
+ if (rscPathname !== window.location.pathname) {
35
+ window.history.pushState(null, '', rscPathname);
36
+ }
37
+ const rscResponse = createFromFetch(Promise.resolve(fetchResponse));
38
+ setRscResponseFromApiRoute({
39
+ url: method + action,
40
+ response: rscResponse,
41
+ });
42
+ setLoading(false);
43
+ })
44
+ .catch((error) => {
45
+ setError(error);
46
+ setLoading(false);
47
+ });
48
+ });
49
+ }, [onSubmit, startTransition, action, method, setRscResponseFromApiRoute]);
50
+ return (React.createElement("form", { action: action, method: method, onSubmit: submit, encType: "application/x-www-form-urlencoded", noValidate: noValidate, ...props }, children instanceof Function ? children({ loading, error }) : children));
51
+ }
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Helmet, HelmetData as HeadData, } from 'react-helmet-async';
3
- import { useEnvContext } from '../ssr-interop';
3
+ import { useEnvContext } from '../ssr-interop.js';
4
4
  const clientHeadData = new HeadData({});
5
5
  export function Head({ children, ...props }) {
6
6
  const headData = useEnvContext((req) => req.ctx.head, clientHeadData);
@@ -1 +1 @@
1
- export { Head } from './Head.client';
1
+ export { Head } from './Head.client.js';
@@ -1 +1 @@
1
- export { Head } from './Head.client';
1
+ export { Head } from './Head.client.js';
@@ -1,6 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import type { HelmetData as HeadData } from 'react-helmet-async';
3
- import { ResolvedHydrogenConfig } from '../../types';
3
+ import { ResolvedHydrogenConfig } from '../../types.js';
4
4
  declare type HtmlOptions = {
5
5
  children: ReactNode;
6
6
  template: string;
@@ -1,9 +1,9 @@
1
- import type { ShopifyContextValue, LocalizationContextValue } from '../ShopifyProvider/types';
2
- import type { QueryCacheControlHeaders } from '../../utilities/log/log-cache-header';
3
- import type { QueryTiming } from '../../utilities/log/log-query-timeline';
4
- import type { ResolvedHydrogenConfig, PreloadOptions, QueryKey, RuntimeContext } from '../../types';
1
+ import type { ShopifyContextValue, LocalizationContextValue } from '../ShopifyProvider/types.js';
2
+ import type { QueryCacheControlHeaders } from '../../utilities/log/log-cache-header.js';
3
+ import type { QueryTiming } from '../../utilities/log/log-query-timeline.js';
4
+ import type { ResolvedHydrogenConfig, PreloadOptions, QueryKey, RuntimeContext } from '../../types.js';
5
5
  import { HelmetData as HeadData } from 'react-helmet-async';
6
- import { SessionSyncApi } from '../session/session';
6
+ import type { SessionSyncApi } from '../session/session-types.js';
7
7
  export declare type PreloadQueryEntry = {
8
8
  key: QueryKey;
9
9
  fetcher: (request: HydrogenRequest) => Promise<unknown>;
@@ -46,6 +46,7 @@ export declare class HydrogenRequest extends Request {
46
46
  router: RouterContextData;
47
47
  buyerIpHeader?: string;
48
48
  session?: SessionSyncApi;
49
+ flashSession: Record<string, any>;
49
50
  runtime?: RuntimeContext;
50
51
  scopes: Map<string, Record<string, any>>;
51
52
  localization?: LocalizationContextValue;
@@ -1,8 +1,8 @@
1
- import { getTime } from '../../utilities/timing';
2
- import { hashKey } from '../../utilities/hash';
1
+ import { getTime } from '../../utilities/timing.js';
2
+ import { hashKey } from '../../utilities/hash.js';
3
3
  import { HelmetData as HeadData } from 'react-helmet-async';
4
- import { RSC_PATHNAME } from '../../constants';
5
- import { parseJSON } from '../../utilities/parse';
4
+ import { RSC_PATHNAME } from '../../constants.js';
5
+ import { parseJSON } from '../../utilities/parse.js';
6
6
  let reqCounter = 0; // For debugging
7
7
  const generateId = typeof crypto !== 'undefined' &&
8
8
  // @ts-ignore
@@ -43,9 +43,7 @@ export class HydrogenRequest extends Request {
43
43
  }
44
44
  this.time = getTime();
45
45
  this.id = generateId();
46
- this.normalizedUrl = this.isRscRequest()
47
- ? normalizeUrl(this.url)
48
- : this.url;
46
+ this.normalizedUrl = decodeURIComponent(this.isRscRequest() ? normalizeUrl(this.url) : this.url);
49
47
  this.ctx = {
50
48
  cache: new Map(),
51
49
  head: new HeadData({}),
@@ -62,6 +60,7 @@ export class HydrogenRequest extends Request {
62
60
  },
63
61
  preloadQueries: new Map(),
64
62
  scopes: new Map(),
63
+ flashSession: {},
65
64
  };
66
65
  this.cookies = this.parseCookies();
67
66
  }
@@ -1,19 +1,17 @@
1
- import type { CachingStrategy } from '../../types';
1
+ import type { CachingStrategy } from '../../types.js';
2
2
  import React from 'react';
3
3
  export declare class HydrogenResponse extends Response {
4
4
  private wait;
5
5
  private cacheOptions;
6
- private proxy;
7
6
  status: number;
8
7
  statusText: string;
9
- constructor(...args: ConstructorParameters<typeof Response>);
10
8
  /**
11
9
  * Buffer the current response until all queries have resolved,
12
10
  * and prevent it from streaming back early.
13
11
  */
14
12
  doNotStream(): void;
15
13
  canStream(): boolean;
16
- cache(options?: CachingStrategy): import("../../types").AllCacheOptions;
14
+ cache(options?: CachingStrategy): import("../../types.js").AllCacheOptions;
17
15
  get cacheControlHeader(): string;
18
16
  redirect(location: string, status?: number): React.FunctionComponentElement<{
19
17
  to: string;
@@ -1,25 +1,11 @@
1
- import { CacheShort, generateCacheControlHeader } from '../Cache/strategies';
2
- import Redirect from '../Redirect/Redirect.client';
1
+ import { CacheShort, generateCacheControlHeader, } from '../Cache/strategies/index.js';
2
+ import Redirect from '../Redirect/Redirect.client.js';
3
3
  import React from 'react';
4
4
  export class HydrogenResponse extends Response {
5
5
  wait = false;
6
6
  cacheOptions = CacheShort();
7
- proxy = Object.defineProperties(Object.create(null), {
8
- // Default values:
9
- status: { value: 200, writable: true },
10
- statusText: { value: '', writable: true },
11
- });
12
- // @ts-ignore
13
- status;
14
- // @ts-ignore
15
- statusText;
16
- constructor(...args) {
17
- super(...args);
18
- return new Proxy(this, {
19
- get: (target, key) => target.proxy[key] ?? Reflect.get(target, key),
20
- set: (target, key, value) => Reflect.set(key in target.proxy ? target.proxy : target, key, value),
21
- });
22
- }
7
+ status = 200;
8
+ statusText = '';
23
9
  /**
24
10
  * Buffer the current response until all queries have resolved,
25
11
  * and prevent it from streaming back early.
@@ -1,5 +1,5 @@
1
- import type { SessionStorageAdapter } from '../session/session';
2
- import type { CookieOptions } from '../Cookie/Cookie';
1
+ import type { SessionStorageAdapter } from '../session/session-types.js';
2
+ import type { CookieOptions } from '../Cookie/Cookie.js';
3
3
  /** The `MemorySessionStorage` component stores session data within Hydrogen runtime memory.
4
4
  */
5
5
  export declare const MemorySessionStorage: (name: string, options: CookieOptions) => () => SessionStorageAdapter;
@@ -1,4 +1,4 @@
1
- import { Cookie } from '../Cookie/Cookie';
1
+ import { Cookie } from '../Cookie/Cookie.js';
2
2
  import { v4 as uid } from 'uuid';
3
3
  /** The `MemorySessionStorage` component stores session data within Hydrogen runtime memory.
4
4
  */
@@ -1,5 +1,5 @@
1
1
  import { useEffect } from 'react';
2
- import { useNavigate } from '../../foundation/useNavigate/useNavigate';
2
+ import { useNavigate } from '../../foundation/useNavigate/useNavigate.js';
3
3
  export default function Redirect({ to }) {
4
4
  const navigate = useNavigate();
5
5
  useEffect(() => {
@@ -1,7 +1,7 @@
1
1
  import React, { cloneElement } from 'react';
2
- import { useServerRequest } from '../ServerRequestProvider';
3
- import { matchPath } from '../../utilities/matchPath';
4
- import { RouteParamsProvider } from '../useRouteParams/RouteParamsProvider.client';
2
+ import { useServerRequest } from '../ServerRequestProvider/index.js';
3
+ import { matchPath } from '../../utilities/matchPath.js';
4
+ import { RouteParamsProvider } from '../useRouteParams/RouteParamsProvider.client.js';
5
5
  /**
6
6
  * The `Route` component is used to set up a route in Hydrogen that's independent of the file system. Routes are
7
7
  * matched in the order that they're defined.
@@ -1,7 +1,7 @@
1
1
  import { createBrowserHistory } from 'history';
2
2
  import React, { createContext, useContext, useMemo, useState, useEffect, useLayoutEffect, useCallback, } from 'react';
3
- import { META_ENV_SSR } from '../ssr-interop';
4
- import { useInternalServerProps } from '../useServerProps/use-server-props';
3
+ import { META_ENV_SSR } from '../ssr-interop.js';
4
+ import { useInternalServerProps } from '../useServerProps/use-server-props.js';
5
5
  export const RouterContext = createContext(undefined);
6
6
  let isFirstLoad = true;
7
7
  const positions = {};
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { BrowserRouter } from './BrowserRouter.client';
2
+ import { BrowserRouter } from './BrowserRouter.client.js';
3
3
  /**
4
4
  * The `Router` component provides the context for routing in your Hydrogen app.
5
5
  */
@@ -26,6 +26,7 @@ export interface InternalServerPropsContextValue extends BaseServerPropsContextV
26
26
  serverProps: ServerProps;
27
27
  locationServerProps: LocationServerProps;
28
28
  getProposedLocationServerProps: ProposedServerPropsSetter;
29
+ setRscResponseFromApiRoute: (response: any) => void;
29
30
  }
30
31
  export interface ServerPropsContextValue extends BaseServerPropsContextValue {
31
32
  serverProps: ServerProps;
@@ -35,7 +36,8 @@ export declare const ServerPropsContext: React.Context<InternalServerPropsContex
35
36
  interface ServerPropsProviderProps {
36
37
  initialServerProps: LocationServerProps;
37
38
  setServerPropsForRsc: React.Dispatch<React.SetStateAction<LocationServerProps>>;
39
+ setRscResponseFromApiRoute: (response: any) => void;
38
40
  children: ReactNode;
39
41
  }
40
- export declare function ServerPropsProvider({ initialServerProps, setServerPropsForRsc, children, }: ServerPropsProviderProps): JSX.Element;
42
+ export declare function ServerPropsProvider({ initialServerProps, setServerPropsForRsc, setRscResponseFromApiRoute, children, }: ServerPropsProviderProps): JSX.Element;
41
43
  export {};
@@ -1,9 +1,7 @@
1
- import React, { createContext, useMemo, useCallback,
2
- // @ts-ignore
3
- useTransition, useState, } from 'react';
1
+ import React, { createContext, useMemo, useCallback, useTransition, useState, } from 'react';
4
2
  const PRIVATE_PROPS = ['request', 'response'];
5
3
  export const ServerPropsContext = createContext(null);
6
- export function ServerPropsProvider({ initialServerProps, setServerPropsForRsc, children, }) {
4
+ export function ServerPropsProvider({ initialServerProps, setServerPropsForRsc, setRscResponseFromApiRoute, children, }) {
7
5
  const [locationServerProps, setLocationServerProps] = useState(initialServerProps);
8
6
  const [serverProps, setServerProps] = useState({});
9
7
  const [pending, startTransition] = useTransition();
@@ -13,12 +11,12 @@ export function ServerPropsProvider({ initialServerProps, setServerPropsForRsc,
13
11
  setServerPropsForRsc((prev) => getNewValue(prev, input, propValue));
14
12
  });
15
13
  }, [setServerProps, setServerPropsForRsc]);
16
- const setLocationServerPropsCallback = useCallback((input, propValue) => {
14
+ const setLocationServerPropsCallback = useCallback((input) => {
17
15
  // Flush the existing user server state when location changes, leaving only the persisted state
18
16
  startTransition(() => {
19
- setServerPropsForRsc((prev) => getNewValue(prev, input, propValue));
17
+ setServerPropsForRsc(input);
20
18
  setServerProps({});
21
- setLocationServerProps((prev) => getNewValue(prev, input, propValue));
19
+ setLocationServerProps(input);
22
20
  });
23
21
  }, [setServerProps, setServerPropsForRsc, setLocationServerProps]);
24
22
  const getProposedLocationServerPropsCallback = useCallback((input, propValue) => {
@@ -53,6 +51,7 @@ export function ServerPropsProvider({ initialServerProps, setServerPropsForRsc,
53
51
  setServerProps: setServerPropsCallback,
54
52
  setLocationServerProps: setLocationServerPropsCallback,
55
53
  getProposedLocationServerProps: getProposedLocationServerPropsCallback,
54
+ setRscResponseFromApiRoute,
56
55
  }), [
57
56
  pending,
58
57
  locationServerProps,
@@ -60,6 +59,7 @@ export function ServerPropsProvider({ initialServerProps, setServerPropsForRsc,
60
59
  setServerPropsCallback,
61
60
  setLocationServerPropsCallback,
62
61
  getProposedLocationServerPropsCallback,
62
+ setRscResponseFromApiRoute,
63
63
  ]);
64
64
  return (React.createElement(ServerPropsContext.Provider, { value: value }, children));
65
65
  }
@@ -1 +1 @@
1
- export { ServerPropsProvider, ServerPropsContext, type ServerProps, type ServerPropsContextValue, } from './ServerPropsProvider';
1
+ export { ServerPropsProvider, ServerPropsContext, type ServerProps, type ServerPropsContextValue, } from './ServerPropsProvider.js';
@@ -1 +1 @@
1
- export { ServerPropsProvider, ServerPropsContext, } from './ServerPropsProvider';
1
+ export { ServerPropsProvider, ServerPropsContext, } from './ServerPropsProvider.js';
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import type { HydrogenRequest } from '../HydrogenRequest/HydrogenRequest.server';
3
- import type { QueryKey } from '../../types';
2
+ import type { HydrogenRequest } from '../HydrogenRequest/HydrogenRequest.server.js';
3
+ import type { QueryKey } from '../../types.js';
4
4
  declare type ServerRequestProviderProps = {
5
5
  request: HydrogenRequest;
6
6
  children: React.ReactNode;
@@ -1,7 +1,7 @@
1
1
  import React, { createContext, useContext } from 'react';
2
- import { getTime } from '../../utilities/timing';
3
- import { hashKey } from '../../utilities/hash';
4
- import { collectQueryTimings } from '../../utilities/log';
2
+ import { getTime } from '../../utilities/timing.js';
3
+ import { hashKey } from '../../utilities/hash.js';
4
+ import { collectQueryTimings } from '../../utilities/log/index.js';
5
5
  // Context to inject current request in SSR
6
6
  const RequestContextSSR = createContext(null);
7
7
  // Cache to inject current request in RSC
@@ -1 +1 @@
1
- export * from './ServerRequestProvider';
1
+ export * from './ServerRequestProvider.js';
@@ -1 +1 @@
1
- export * from './ServerRequestProvider';
1
+ export * from './ServerRequestProvider.js';
@@ -1,4 +1,4 @@
1
- import type { ShopifyContextValue, LocalizationContextValue } from './types';
1
+ import type { ShopifyContextValue, LocalizationContextValue } from './types.js';
2
2
  import React, { ReactNode } from 'react';
3
3
  export declare const ShopifyContext: React.Context<ShopifyContextValue | null>;
4
4
  export declare const LocalizationContext: React.Context<LocalizationContextValue | null>;
@@ -1,5 +1,5 @@
1
- import type { ShopifyProviderProps, LocalizationContextValue } from './types';
2
- import type { CountryCode, LanguageCode } from '../../storefront-api-types';
1
+ import type { ShopifyProviderProps, LocalizationContextValue } from './types.js';
2
+ import type { CountryCode, LanguageCode } from '../../storefront-api-types.js';
3
3
  export declare const SHOPIFY_PROVIDER_CONTEXT_KEY: unique symbol;
4
4
  /**
5
5
  * The `ShopifyProvider` component wraps your entire app and provides support for hooks.
@@ -1,9 +1,10 @@
1
1
  import React, { useMemo } from 'react';
2
- import { ShopifyProviderClient } from './ShopifyProvider.client';
3
- import { DEFAULT_COUNTRY, DEFAULT_LANGUAGE } from '../constants';
4
- import { useRequestCacheData, useServerRequest } from '../ServerRequestProvider';
5
- import { getOxygenVariable } from '../../utilities/storefrontApi';
6
- import { SHOPIFY_STOREFRONT_ID_VARIABLE } from '../../constants';
2
+ import { ShopifyProviderClient } from './ShopifyProvider.client.js';
3
+ import { DEFAULT_COUNTRY, DEFAULT_LANGUAGE } from '../constants.js';
4
+ import { useRequestCacheData, useServerRequest, } from '../ServerRequestProvider/index.js';
5
+ import { getOxygenVariable } from '../../utilities/storefrontApi.js';
6
+ import { SHOPIFY_STOREFRONT_ID_VARIABLE } from '../../constants.js';
7
+ import { getLocale } from '../../utilities/locale/index.js';
7
8
  function makeShopifyContext(shopifyConfig) {
8
9
  const countryCode = shopifyConfig.defaultCountryCode ?? DEFAULT_COUNTRY;
9
10
  const languageCode = shopifyConfig.defaultLanguageCode ?? DEFAULT_LANGUAGE;
@@ -71,7 +72,7 @@ export function getLocalizationContextValue(defaultLanguageCode, defaultCountryC
71
72
  language: {
72
73
  isoCode: runtimeLanguageCode,
73
74
  },
74
- locale: `${runtimeLanguageCode}-${runtimeCountryCode}`,
75
+ locale: getLocale(runtimeLanguageCode, runtimeCountryCode),
75
76
  };
76
77
  }, [defaultLanguageCode, defaultCountryCode, countryCode, languageCode]);
77
78
  }
@@ -1 +1 @@
1
- export { ShopifyContext } from './ShopifyProvider.client';
1
+ export { ShopifyContext } from './ShopifyProvider.client.js';
@@ -1 +1 @@
1
- export { ShopifyContext } from './ShopifyProvider.client';
1
+ export { ShopifyContext } from './ShopifyProvider.client.js';