@shopify/hydrogen 0.11.1 → 0.13.1

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 (318) hide show
  1. package/CHANGELOG.md +500 -3
  2. package/dist/esnext/client.d.ts +2 -0
  3. package/dist/esnext/client.js +2 -0
  4. package/dist/esnext/components/AddToCartButton/AddToCartButton.client.d.ts +3 -4
  5. package/dist/esnext/components/AddToCartButton/AddToCartButton.client.js +9 -22
  6. package/dist/esnext/components/AddToCartButton/index.d.ts +1 -1
  7. package/dist/esnext/components/BuyNowButton/BuyNowButton.client.d.ts +4 -5
  8. package/dist/esnext/components/BuyNowButton/index.d.ts +1 -1
  9. package/dist/esnext/components/BuyNowButton/index.js +1 -1
  10. package/dist/esnext/components/CartCheckoutButton/CartCheckoutButton.client.d.ts +2 -3
  11. package/dist/esnext/components/CartEstimatedCost/CartEstimatedCost.client.d.ts +3 -3
  12. package/dist/esnext/components/CartLineImage/CartLineImage.client.d.ts +5 -3
  13. package/dist/esnext/components/CartLinePrice/CartLinePrice.client.d.ts +5 -5
  14. package/dist/esnext/components/CartLinePrice/CartLinePrice.client.js +1 -1
  15. package/dist/esnext/components/CartLineProductTitle/CartLineProductTitle.client.d.ts +1 -3
  16. package/dist/esnext/components/CartLineProvider/context.d.ts +10 -16
  17. package/dist/esnext/components/CartLineQuantity/CartLineQuantity.client.d.ts +1 -3
  18. package/dist/esnext/components/CartProvider/CartProvider.client.d.ts +1 -1
  19. package/dist/esnext/components/CartProvider/CartProvider.client.js +8 -2
  20. package/dist/esnext/components/CartProvider/cart-queries.d.ts +9 -0
  21. package/dist/esnext/components/CartProvider/cart-queries.js +876 -0
  22. package/dist/esnext/components/CartProvider/graphql/CartAttributesUpdateMutation.d.ts +72 -5
  23. package/dist/esnext/components/CartProvider/graphql/CartBuyerIdentityUpdateMutation.d.ts +72 -5
  24. package/dist/esnext/components/CartProvider/graphql/CartCreateMutation.d.ts +72 -5
  25. package/dist/esnext/components/CartProvider/graphql/CartDiscountCodesUpdateMutation.d.ts +73 -6
  26. package/dist/esnext/components/CartProvider/graphql/CartFragment.d.ts +13 -11
  27. package/dist/esnext/components/CartProvider/graphql/CartLineAddMutation.d.ts +72 -5
  28. package/dist/esnext/components/CartProvider/graphql/CartLineRemoveMutation.d.ts +72 -5
  29. package/dist/esnext/components/CartProvider/graphql/CartLineUpdateMutation.d.ts +72 -5
  30. package/dist/esnext/components/CartProvider/graphql/CartNoteUpdateMutation.d.ts +73 -6
  31. package/dist/esnext/components/CartProvider/graphql/CartQuery.d.ts +72 -5
  32. package/dist/esnext/components/CartProvider/hooks.d.ts +1 -1
  33. package/dist/esnext/components/CartProvider/hooks.js +4 -1
  34. package/dist/esnext/components/CartProvider/types.d.ts +1 -1
  35. package/dist/esnext/components/CartShopPayButton/CartShopPayButton.client.d.ts +3 -2
  36. package/dist/esnext/components/ExternalVideo/ExternalVideo.d.ts +8 -13
  37. package/dist/esnext/components/ExternalVideo/ExternalVideo.js +7 -7
  38. package/dist/esnext/components/ExternalVideo/index.d.ts +1 -1
  39. package/dist/esnext/components/ExternalVideo/index.js +1 -1
  40. package/dist/esnext/components/Image/Image.d.ts +14 -16
  41. package/dist/esnext/components/Image/Image.js +17 -17
  42. package/dist/esnext/components/Image/index.d.ts +1 -1
  43. package/dist/esnext/components/Image/index.js +1 -1
  44. package/dist/esnext/components/Link/Link.client.d.ts +4 -5
  45. package/dist/esnext/components/Link/Link.client.js +5 -4
  46. package/dist/esnext/components/LocalizationProvider/LocalizationClientProvider.client.js +1 -3
  47. package/dist/esnext/components/LocalizationProvider/LocalizationContext.client.d.ts +0 -1
  48. package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.d.ts +4 -5
  49. package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.js +15 -4
  50. package/dist/esnext/components/LocalizationProvider/LocalizationQuery.d.ts +5 -8
  51. package/dist/esnext/components/LocalizationProvider/index.d.ts +0 -1
  52. package/dist/esnext/components/LocalizationProvider/index.js +0 -1
  53. package/dist/esnext/components/MediaFile/MediaFile.d.ts +10 -21
  54. package/dist/esnext/components/MediaFile/MediaFile.js +7 -5
  55. package/dist/esnext/components/MediaFile/index.d.ts +1 -1
  56. package/dist/esnext/components/MediaFile/index.js +1 -1
  57. package/dist/esnext/components/Metafield/Metafield.client.d.ts +2 -6
  58. package/dist/esnext/components/Metafield/Metafield.client.js +8 -8
  59. package/dist/esnext/components/Metafield/components/StarRating/StarRating.d.ts +1 -3
  60. package/dist/esnext/components/Metafield/index.d.ts +1 -2
  61. package/dist/esnext/components/Metafield/index.js +1 -1
  62. package/dist/esnext/components/Metafield/types.d.ts +1 -1
  63. package/dist/esnext/components/ModelViewer/ModelViewer.client.d.ts +58 -66
  64. package/dist/esnext/components/ModelViewer/ModelViewer.client.js +10 -7
  65. package/dist/esnext/components/ModelViewer/index.d.ts +1 -1
  66. package/dist/esnext/components/Money/Money.client.d.ts +8 -12
  67. package/dist/esnext/components/Money/Money.client.js +1 -4
  68. package/dist/esnext/components/Money/index.d.ts +1 -1
  69. package/dist/esnext/components/Money/index.js +1 -1
  70. package/dist/esnext/components/ProductDescription/ProductDescription.client.d.ts +7 -2
  71. package/dist/esnext/components/ProductDescription/ProductDescription.client.js +4 -3
  72. package/dist/esnext/components/ProductMetafield/ProductMetafield.client.js +3 -3
  73. package/dist/esnext/components/ProductPrice/ProductPrice.client.d.ts +5 -5
  74. package/dist/esnext/components/ProductPrice/ProductPrice.client.js +2 -2
  75. package/dist/esnext/components/ProductProvider/ProductProvider.client.d.ts +8 -8
  76. package/dist/esnext/components/ProductProvider/ProductProvider.client.js +2 -4
  77. package/dist/esnext/components/ProductProvider/context.d.ts +23 -14
  78. package/dist/esnext/components/ProductProvider/index.d.ts +1 -1
  79. package/dist/esnext/components/ProductProvider/index.js +1 -1
  80. package/dist/esnext/components/Seo/CollectionSeo.client.d.ts +3 -2
  81. package/dist/esnext/components/Seo/CollectionSeo.client.js +3 -3
  82. package/dist/esnext/components/Seo/DefaultPageSeo.client.d.ts +3 -2
  83. package/dist/esnext/components/Seo/DefaultPageSeo.client.js +2 -2
  84. package/dist/esnext/components/Seo/DescriptionSeo.client.d.ts +3 -3
  85. package/dist/esnext/components/Seo/DescriptionSeo.client.js +1 -1
  86. package/dist/esnext/components/Seo/HomePageSeo.client.d.ts +1 -1
  87. package/dist/esnext/components/Seo/ImageSeo.client.d.ts +3 -2
  88. package/dist/esnext/components/Seo/PageSeo.client.d.ts +3 -2
  89. package/dist/esnext/components/Seo/PageSeo.client.js +2 -2
  90. package/dist/esnext/components/Seo/ProductSeo.client.d.ts +5 -2
  91. package/dist/esnext/components/Seo/ProductSeo.client.js +10 -5
  92. package/dist/esnext/components/Seo/Seo.client.d.ts +11 -7
  93. package/dist/esnext/components/Seo/Seo.client.js +8 -14
  94. package/dist/esnext/components/Seo/TitleSeo.client.d.ts +3 -4
  95. package/dist/esnext/components/Seo/TwitterSeo.client.d.ts +1 -1
  96. package/dist/esnext/components/Seo/seo-types.d.ts +17 -0
  97. package/dist/esnext/components/{ExternalVideo/ExternalVideoFragment.js → Seo/seo-types.js} +0 -0
  98. package/dist/esnext/components/ShopPayButton/ShopPayButton.client.d.ts +2 -1
  99. package/dist/esnext/components/ShopPayButton/ShopPayButton.client.js +1 -9
  100. package/dist/esnext/components/ShopPayButton/index.d.ts +1 -1
  101. package/dist/esnext/components/UnitPrice/UnitPrice.client.d.ts +8 -13
  102. package/dist/esnext/components/UnitPrice/UnitPrice.client.js +9 -4
  103. package/dist/esnext/components/UnitPrice/index.d.ts +1 -1
  104. package/dist/esnext/components/UnitPrice/index.js +1 -1
  105. package/dist/esnext/components/Video/Video.d.ts +8 -16
  106. package/dist/esnext/components/Video/Video.js +11 -6
  107. package/dist/esnext/components/Video/index.d.ts +1 -2
  108. package/dist/esnext/components/Video/index.js +1 -1
  109. package/dist/esnext/components/index.d.ts +3 -16
  110. package/dist/esnext/components/index.js +2 -5
  111. package/dist/esnext/entry-client.js +27 -8
  112. package/dist/esnext/entry-server.d.ts +2 -1
  113. package/dist/esnext/entry-server.js +127 -160
  114. package/dist/esnext/foundation/Boomerang/Boomerang.client.d.ts +3 -1
  115. package/dist/esnext/foundation/Boomerang/Boomerang.client.js +17 -3
  116. package/dist/esnext/foundation/FileRoutes/FileRoutes.server.d.ts +22 -0
  117. package/dist/esnext/foundation/{Router/DefaultRoutes.js → FileRoutes/FileRoutes.server.js} +24 -23
  118. package/dist/esnext/foundation/Redirect/Redirect.client.d.ts +5 -0
  119. package/dist/esnext/foundation/Redirect/Redirect.client.js +14 -0
  120. package/dist/esnext/foundation/Route/Route.server.d.ts +12 -0
  121. package/dist/esnext/foundation/Route/Route.server.js +33 -0
  122. package/dist/esnext/foundation/Router/{Router.client.d.ts → BrowserRouter.client.d.ts} +3 -2
  123. package/dist/esnext/foundation/Router/{Router.client.js → BrowserRouter.client.js} +11 -7
  124. package/dist/esnext/foundation/Router/Router.server.d.ts +10 -0
  125. package/dist/esnext/foundation/Router/Router.server.js +8 -0
  126. package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.js +19 -24
  127. package/dist/esnext/foundation/ServerStateProvider/{ServerStateProvider.client.d.ts → ServerStateProvider.d.ts} +0 -0
  128. package/dist/esnext/foundation/ServerStateProvider/{ServerStateProvider.client.js → ServerStateProvider.js} +0 -0
  129. package/dist/esnext/foundation/ServerStateProvider/index.d.ts +2 -2
  130. package/dist/esnext/foundation/ServerStateProvider/index.js +1 -1
  131. package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.client.js +3 -0
  132. package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.server.js +3 -0
  133. package/dist/esnext/foundation/ShopifyProvider/index.d.ts +0 -1
  134. package/dist/esnext/foundation/ShopifyProvider/index.js +0 -1
  135. package/dist/esnext/foundation/index.d.ts +0 -2
  136. package/dist/esnext/foundation/index.js +0 -2
  137. package/dist/esnext/{hooks → foundation}/useNavigate/useNavigate.d.ts +6 -3
  138. package/dist/esnext/{hooks → foundation}/useNavigate/useNavigate.js +4 -1
  139. package/dist/esnext/foundation/useQuery/hooks.d.ts +5 -4
  140. package/dist/esnext/foundation/useQuery/hooks.js +13 -4
  141. package/dist/esnext/foundation/useRouteParams/RouteParamsProvider.client.d.ts +9 -0
  142. package/dist/esnext/foundation/useRouteParams/RouteParamsProvider.client.js +7 -0
  143. package/dist/esnext/foundation/useRouteParams/useRouteParams.d.ts +4 -0
  144. package/dist/esnext/foundation/useRouteParams/useRouteParams.js +9 -0
  145. package/dist/esnext/foundation/useUrl/useUrl.js +1 -1
  146. package/dist/esnext/framework/Hydration/Html.d.ts +2 -0
  147. package/dist/esnext/framework/Hydration/Html.js +71 -2
  148. package/dist/esnext/framework/Hydration/ServerComponentRequest.server.d.ts +13 -0
  149. package/dist/esnext/framework/Hydration/ServerComponentRequest.server.js +28 -7
  150. package/dist/esnext/framework/Hydration/ServerComponentResponse.server.d.ts +4 -1
  151. package/dist/esnext/framework/Hydration/ServerComponentResponse.server.js +5 -0
  152. package/dist/esnext/framework/Hydration/rsc.js +1 -1
  153. package/dist/esnext/framework/cache/in-memory.d.ts +1 -0
  154. package/dist/esnext/framework/cache/in-memory.js +15 -5
  155. package/dist/esnext/framework/middleware.js +25 -3
  156. package/dist/esnext/framework/plugin.js +6 -1
  157. package/dist/esnext/framework/plugins/vite-plugin-css-modules-rsc.d.ts +2 -0
  158. package/dist/esnext/framework/plugins/vite-plugin-css-modules-rsc.js +28 -0
  159. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.js +61 -77
  160. package/dist/esnext/framework/plugins/vite-plugin-platform-entry.js +1 -1
  161. package/dist/esnext/hooks/index.d.ts +0 -1
  162. package/dist/esnext/hooks/index.js +0 -1
  163. package/dist/esnext/hooks/useCartLine/useCartLine.d.ts +10 -18
  164. package/dist/esnext/hooks/useCountry/useCountry.d.ts +4 -4
  165. package/dist/esnext/hooks/useMoney/hooks.d.ts +3 -3
  166. package/dist/esnext/hooks/useMoney/hooks.js +2 -2
  167. package/dist/esnext/hooks/useParsedMetafields/useParsedMetafields.d.ts +17 -2
  168. package/dist/esnext/hooks/useParsedMetafields/useParsedMetafields.js +7 -3
  169. package/dist/esnext/hooks/useProduct/useProduct.d.ts +36 -138
  170. package/dist/esnext/hooks/useProductOptions/helpers.d.ts +6 -4
  171. package/dist/esnext/hooks/useProductOptions/helpers.js +13 -6
  172. package/dist/esnext/hooks/useProductOptions/types.d.ts +15 -35
  173. package/dist/esnext/hooks/useProductOptions/useProductOptions.d.ts +6 -5
  174. package/dist/esnext/hooks/useProductOptions/useProductOptions.js +13 -3
  175. package/dist/esnext/hooks/useShopQuery/hooks.js +79 -21
  176. package/dist/esnext/index.d.ts +8 -2
  177. package/dist/esnext/index.js +8 -2
  178. package/dist/esnext/platforms/node.d.ts +2 -3
  179. package/dist/esnext/platforms/node.js +5 -3
  180. package/dist/esnext/platforms/worker-event.d.ts +0 -8
  181. package/dist/esnext/platforms/worker-event.js +2 -23
  182. package/dist/esnext/platforms/worker.d.ts +14 -0
  183. package/dist/esnext/platforms/worker.js +25 -0
  184. package/dist/esnext/{graphql/types/types.d.ts → storefront-api-types.d.ts} +2016 -1593
  185. package/dist/esnext/{graphql/types/types.js → storefront-api-types.js} +1025 -732
  186. package/dist/esnext/streaming.server.d.ts +9 -6
  187. package/dist/esnext/streaming.server.js +2 -27
  188. package/dist/esnext/types.d.ts +3 -18
  189. package/dist/esnext/utilities/apiRoutes.d.ts +19 -3
  190. package/dist/esnext/utilities/apiRoutes.js +27 -5
  191. package/dist/esnext/utilities/devtools.d.ts +11 -0
  192. package/dist/esnext/utilities/devtools.js +11 -0
  193. package/dist/esnext/utilities/fetch.d.ts +7 -1
  194. package/dist/esnext/utilities/fetch.js +9 -18
  195. package/dist/esnext/utilities/flattenConnection/flattenConnection.d.ts +3 -2
  196. package/dist/esnext/utilities/flattenConnection/flattenConnection.js +6 -2
  197. package/dist/esnext/utilities/graphql-tracker.d.ts +17 -0
  198. package/dist/esnext/utilities/graphql-tracker.js +119 -0
  199. package/dist/esnext/utilities/image_size.d.ts +5 -4
  200. package/dist/esnext/utilities/log/log-query-timeline.d.ts +1 -1
  201. package/dist/esnext/utilities/log/log-query-timeline.js +1 -2
  202. package/dist/esnext/utilities/log/log.d.ts +1 -0
  203. package/dist/esnext/utilities/log/utils.js +3 -0
  204. package/dist/esnext/utilities/parseMetafieldValue/parseMetafieldValue.d.ts +3 -2
  205. package/dist/esnext/utilities/video_parameters.js +0 -4
  206. package/dist/esnext/version.d.ts +1 -1
  207. package/dist/esnext/version.js +1 -1
  208. package/dist/node/entry-server.d.ts +2 -1
  209. package/dist/node/entry-server.js +129 -158
  210. package/dist/node/foundation/Redirect/Redirect.client.d.ts +5 -0
  211. package/dist/node/foundation/Redirect/Redirect.client.js +17 -0
  212. package/dist/node/foundation/Router/BrowserRouter.client.d.ts +13 -0
  213. package/dist/node/foundation/Router/BrowserRouter.client.js +77 -0
  214. package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.js +24 -25
  215. package/dist/node/foundation/ServerRequestProvider/index.js +5 -1
  216. package/dist/node/foundation/ServerStateProvider/{ServerStateProvider.client.d.ts → ServerStateProvider.d.ts} +0 -0
  217. package/dist/node/foundation/ServerStateProvider/{ServerStateProvider.client.js → ServerStateProvider.js} +5 -1
  218. package/dist/node/foundation/ServerStateProvider/index.d.ts +2 -2
  219. package/dist/node/foundation/ServerStateProvider/index.js +3 -3
  220. package/dist/node/foundation/ssr-interop.d.ts +29 -0
  221. package/dist/node/foundation/ssr-interop.js +39 -0
  222. package/dist/node/foundation/useNavigate/useNavigate.d.ts +13 -0
  223. package/dist/node/foundation/useNavigate/useNavigate.js +18 -0
  224. package/dist/node/foundation/useServerState/index.d.ts +1 -0
  225. package/dist/node/foundation/useServerState/index.js +5 -0
  226. package/dist/node/foundation/useServerState/use-server-state.d.ts +16 -0
  227. package/dist/node/foundation/useServerState/use-server-state.js +24 -0
  228. package/dist/node/framework/Hydration/Html.d.ts +2 -0
  229. package/dist/node/framework/Hydration/Html.js +73 -3
  230. package/dist/node/framework/Hydration/ServerComponentRequest.server.d.ts +13 -0
  231. package/dist/node/framework/Hydration/ServerComponentRequest.server.js +28 -7
  232. package/dist/node/framework/Hydration/ServerComponentResponse.server.d.ts +4 -1
  233. package/dist/node/framework/Hydration/ServerComponentResponse.server.js +8 -0
  234. package/dist/node/framework/Hydration/rsc.js +1 -1
  235. package/dist/node/framework/cache/in-memory.d.ts +1 -0
  236. package/dist/node/framework/cache/in-memory.js +15 -5
  237. package/dist/node/framework/middleware.js +30 -4
  238. package/dist/node/framework/plugin.js +11 -2
  239. package/dist/node/framework/plugins/vite-plugin-css-modules-rsc.d.ts +2 -0
  240. package/dist/node/framework/plugins/vite-plugin-css-modules-rsc.js +31 -0
  241. package/dist/node/framework/plugins/vite-plugin-hydrogen-config.js +61 -77
  242. package/dist/node/framework/plugins/vite-plugin-platform-entry.js +1 -1
  243. package/dist/node/{graphql/types/types.d.ts → storefront-api-types.d.ts} +2016 -1593
  244. package/dist/node/{graphql/types/types.js → storefront-api-types.js} +1026 -733
  245. package/dist/node/streaming.server.d.ts +9 -6
  246. package/dist/node/streaming.server.js +3 -29
  247. package/dist/node/types.d.ts +3 -18
  248. package/dist/node/utilities/apiRoutes.d.ts +19 -3
  249. package/dist/node/utilities/apiRoutes.js +29 -7
  250. package/dist/node/utilities/fetch.d.ts +10 -0
  251. package/dist/node/utilities/fetch.js +39 -0
  252. package/dist/node/utilities/log/log-query-timeline.d.ts +1 -1
  253. package/dist/node/utilities/log/log-query-timeline.js +1 -2
  254. package/dist/node/utilities/log/log.d.ts +1 -0
  255. package/dist/node/utilities/log/utils.js +3 -0
  256. package/dist/node/utilities/web-api-polyfill.js +5 -1
  257. package/dist/node/version.d.ts +1 -0
  258. package/dist/node/version.js +4 -0
  259. package/package.json +21 -21
  260. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-plugin.js +43 -104
  261. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.browser.development.server.js +1566 -848
  262. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.browser.production.min.server.js +36 -421
  263. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.node.development.server.js +1523 -864
  264. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.node.production.min.server.js +35 -437
  265. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite.development.js +507 -517
  266. package/vendor/react-server-dom-vite/cjs/react-server-dom-vite.production.min.js +10 -246
  267. package/vendor/react-server-dom-vite/esm/react-server-dom-vite-client-proxy.js +18 -25
  268. package/vendor/react-server-dom-vite/esm/react-server-dom-vite-plugin.js +47 -108
  269. package/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.browser.server.js +1033 -306
  270. package/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.node.server.js +965 -293
  271. package/vendor/react-server-dom-vite/esm/react-server-dom-vite.js +98 -108
  272. package/vendor/react-server-dom-vite/package.json +0 -2
  273. package/dist/esnext/components/ExternalVideo/ExternalVideoFragment.d.ts +0 -4
  274. package/dist/esnext/components/Image/ImageFragment.d.ts +0 -4
  275. package/dist/esnext/components/Image/ImageFragment.js +0 -1
  276. package/dist/esnext/components/MediaFile/MediaFileFragment.d.ts +0 -22
  277. package/dist/esnext/components/MediaFile/MediaFileFragment.js +0 -1
  278. package/dist/esnext/components/Metafield/MetafieldFragment.d.ts +0 -19
  279. package/dist/esnext/components/Metafield/MetafieldFragment.js +0 -1
  280. package/dist/esnext/components/ModelViewer/Model3DFragment.d.ts +0 -11
  281. package/dist/esnext/components/ModelViewer/Model3DFragment.js +0 -1
  282. package/dist/esnext/components/Money/MoneyFragment.d.ts +0 -4
  283. package/dist/esnext/components/Money/MoneyFragment.js +0 -1
  284. package/dist/esnext/components/ProductProvider/ProductProviderFragment.d.ts +0 -80
  285. package/dist/esnext/components/ProductProvider/ProductProviderFragment.js +0 -1
  286. package/dist/esnext/components/ProductProvider/types.d.ts +0 -19
  287. package/dist/esnext/components/ProductProvider/types.js +0 -1
  288. package/dist/esnext/components/RawHtml/RawHtml.d.ts +0 -19
  289. package/dist/esnext/components/RawHtml/RawHtml.js +0 -21
  290. package/dist/esnext/components/RawHtml/index.d.ts +0 -1
  291. package/dist/esnext/components/RawHtml/index.js +0 -1
  292. package/dist/esnext/components/Router/index.d.ts +0 -1
  293. package/dist/esnext/components/Router/index.js +0 -1
  294. package/dist/esnext/components/Seo/types.d.ts +0 -67
  295. package/dist/esnext/components/Seo/types.js +0 -1
  296. package/dist/esnext/components/UnitPrice/UnitPriceFragment.d.ts +0 -12
  297. package/dist/esnext/components/UnitPrice/UnitPriceFragment.js +0 -1
  298. package/dist/esnext/components/Video/VideoFragment.d.ts +0 -11
  299. package/dist/esnext/components/Video/VideoFragment.js +0 -1
  300. package/dist/esnext/foundation/Boomerang/BoomerangPageTemplate.client.d.ts +0 -3
  301. package/dist/esnext/foundation/Boomerang/BoomerangPageTemplate.client.js +0 -14
  302. package/dist/esnext/foundation/Router/DefaultRoutes.d.ts +0 -22
  303. package/dist/esnext/foundation/Router/index.d.ts +0 -1
  304. package/dist/esnext/foundation/Router/index.js +0 -1
  305. package/dist/esnext/graphql/graphql-constants.d.ts +0 -1751
  306. package/dist/esnext/graphql/graphql-constants.js +0 -3364
  307. package/dist/esnext/hooks/useAvailableCountries/index.d.ts +0 -1
  308. package/dist/esnext/hooks/useAvailableCountries/index.js +0 -1
  309. package/dist/esnext/hooks/useAvailableCountries/useAvailableCountries.d.ts +0 -11
  310. package/dist/esnext/hooks/useAvailableCountries/useAvailableCountries.js +0 -17
  311. package/dist/esnext/hooks/useNavigate/index.d.ts +0 -1
  312. package/dist/esnext/hooks/useNavigate/index.js +0 -1
  313. package/dist/esnext/hooks/useProductOptions/SellingPlanFragment.d.ts +0 -28
  314. package/dist/esnext/hooks/useProductOptions/SellingPlanFragment.js +0 -1
  315. package/dist/esnext/hooks/useProductOptions/SellingPlanGroupsFragment.d.ts +0 -20
  316. package/dist/esnext/hooks/useProductOptions/SellingPlanGroupsFragment.js +0 -1
  317. package/dist/esnext/hooks/useProductOptions/VariantFragment.d.ts +0 -64
  318. package/dist/esnext/hooks/useProductOptions/VariantFragment.js +0 -1
@@ -5,17 +5,20 @@ export declare const createFromReadableStream: (rs: ReadableStream<Uint8Array>)
5
5
  };
6
6
  declare type StreamOptions = {
7
7
  nonce?: string;
8
- onCompleteShell?: () => void;
9
- onCompleteAll?: () => void;
10
- onError?: (error: Error) => void;
11
8
  bootstrapScripts?: string[];
12
9
  bootstrapModules?: string[];
10
+ onError?: (error: Error) => void;
13
11
  };
14
- export declare const ssrRenderToPipeableStream: (App: JSX.Element, options: StreamOptions) => {
12
+ export declare const ssrRenderToPipeableStream: (App: JSX.Element, options: StreamOptions & {
13
+ onAllReady?: (() => void) | undefined;
14
+ onShellReady?: (() => void) | undefined;
15
+ onShellError?: ((error: Error) => void) | undefined;
16
+ }) => {
15
17
  pipe: Writable['pipe'];
16
18
  };
17
- export declare const ssrRenderToReadableStream: (App: JSX.Element, options: StreamOptions) => ReadableStream<Uint8Array>;
18
- export declare function supportsReadableStream(): boolean;
19
+ export declare const ssrRenderToReadableStream: (App: JSX.Element, options: StreamOptions) => Promise<ReadableStream<Uint8Array> & {
20
+ allReady: Promise<void>;
21
+ }>;
19
22
  export declare function isStreamingSupported(): Promise<boolean>;
20
23
  export declare function bufferReadableStream(reader: ReadableStreamDefaultReader, cb?: (chunk: string) => void): Promise<string>;
21
24
  export {};
@@ -12,34 +12,9 @@ export const rscRenderToReadableStream = _rscRenderToReadableStream;
12
12
  export const createFromReadableStream = _createFromReadableStream;
13
13
  export const ssrRenderToPipeableStream = _ssrRenderToPipeableStream;
14
14
  export const ssrRenderToReadableStream = _ssrRenderToReadableStream;
15
- export function supportsReadableStream() {
16
- try {
17
- new ReadableStream();
18
- return true;
19
- }
20
- catch (_) {
21
- return false;
22
- }
23
- }
24
- let cachedStreamingSupport;
25
15
  export async function isStreamingSupported() {
26
- if (cachedStreamingSupport === undefined) {
27
- try {
28
- const rs = new ReadableStream({
29
- start(controller) {
30
- controller.close();
31
- },
32
- });
33
- // This will throw in CFW until streaming
34
- // is supported. It works in Miniflare.
35
- await new Response(rs).text();
36
- cachedStreamingSupport = true;
37
- }
38
- catch (_) {
39
- cachedStreamingSupport = false;
40
- }
41
- }
42
- return cachedStreamingSupport;
16
+ var _a, _b;
17
+ return Boolean((_b = (_a = globalThis.Oxygen) === null || _a === void 0 ? void 0 : _a.env) === null || _b === void 0 ? void 0 : _b.HYDROGEN_ENABLE_WORKER_STREAMING);
43
18
  }
44
19
  export async function bufferReadableStream(reader, cb) {
45
20
  const decoder = new TextDecoder();
@@ -3,10 +3,10 @@ import type { ServerResponse } from 'http';
3
3
  import type { Logger } from './utilities/log/log';
4
4
  import type { ServerComponentRequest } from './framework/Hydration/ServerComponentRequest.server';
5
5
  import type { ServerComponentResponse } from './framework/Hydration/ServerComponentResponse.server';
6
- import type { Metafield, Image, MediaContentType } from './graphql/types/types';
6
+ import type { Metafield, ProductVariant, Product, MediaImage } from './storefront-api-types';
7
7
  declare type CommonOptions = {
8
8
  App: any;
9
- pages?: ImportGlobEagerOutput;
9
+ routes?: ImportGlobEagerOutput;
10
10
  request: ServerComponentRequest;
11
11
  componentResponse: ServerComponentResponse;
12
12
  log: Logger;
@@ -36,7 +36,7 @@ export declare type Hook = (params: {
36
36
  } & Record<string, any>) => any | Promise<any>;
37
37
  export declare type ImportGlobEagerOutput = Record<string, Record<'default' | 'api', any>>;
38
38
  export declare type ServerHandlerConfig = {
39
- pages?: ImportGlobEagerOutput;
39
+ routes?: ImportGlobEagerOutput;
40
40
  shopifyConfig: ShopifyConfig;
41
41
  };
42
42
  export declare type ClientHandlerConfig = {
@@ -50,21 +50,6 @@ export interface GraphQLConnection<T> {
50
50
  node: T;
51
51
  }[];
52
52
  }
53
- export interface MediaImage {
54
- __typename?: string;
55
- id?: string;
56
- mediaContentType?: MediaContentType;
57
- data?: Pick<Image, 'altText' | 'url' | 'id' | 'width' | 'height'>;
58
- }
59
- interface ProductVariant {
60
- __typename?: string;
61
- }
62
- interface Product {
63
- __typename?: string;
64
- }
65
- export declare type RawMetafield = Omit<Partial<Metafield>, 'reference'> & {
66
- reference?: MediaImage | ProductVariant | Product | null;
67
- };
68
53
  export declare type ParsedMetafield = Omit<Partial<Metafield>, 'value' | 'reference'> & {
69
54
  value?: string | number | boolean | Record<any, string> | Date | Rating | Measurement;
70
55
  reference?: MediaImage | ProductVariant | Product | null;
@@ -1,7 +1,9 @@
1
- import { ImportGlobEagerOutput } from '../types';
1
+ import { ImportGlobEagerOutput, ShopifyConfig } from '../types';
2
+ import type { ASTNode } from 'graphql';
2
3
  declare type RouteParams = Record<string, string>;
3
4
  declare type RequestOptions = {
4
5
  params: RouteParams;
6
+ queryShop: (args: QueryShopArgs) => Promise<any>;
5
7
  };
6
8
  declare type ResourceGetter = (request: Request, requestOptions: RequestOptions) => Promise<Response | Object | String>;
7
9
  interface HydrogenApiRoute {
@@ -14,7 +16,21 @@ export declare type ApiRouteMatch = {
14
16
  hasServerComponent: boolean;
15
17
  params: RouteParams;
16
18
  };
17
- export declare function getApiRoutesFromPages(pages: ImportGlobEagerOutput | undefined, topLevelPath?: string): Array<HydrogenApiRoute>;
19
+ export declare function getApiRoutes(pages: ImportGlobEagerOutput | undefined, topLevelPath?: string): Array<HydrogenApiRoute>;
18
20
  export declare function getApiRouteFromURL(url: URL, routes: Array<HydrogenApiRoute>): ApiRouteMatch | null;
19
- export declare function renderApiRoute(request: Request, route: ApiRouteMatch): Promise<Response>;
21
+ /** The `queryShop` utility is a function that helps you query the Storefront API.
22
+ * It's similar to the `useShopQuery` hook, which is available in server components.
23
+ * To use `queryShop`, pass `shopifyConfig` to `renderHydrogen` inside `App.server.jsx`.
24
+ */
25
+ interface QueryShopArgs {
26
+ /** A string of the GraphQL query.
27
+ * If no query is provided, then the `useShopQuery` makes no calls to the Storefront API.
28
+ */
29
+ query: ASTNode | string;
30
+ /** An object of the variables for the GraphQL query. */
31
+ variables?: Record<string, any>;
32
+ /** A string corresponding to a valid locale identifier like `en-us` used to make the request. */
33
+ locale?: string;
34
+ }
35
+ export declare function renderApiRoute(request: Request, route: ApiRouteMatch, shopifyConfig: ShopifyConfig): Promise<Response>;
20
36
  export {};
@@ -1,16 +1,17 @@
1
1
  import { matchPath } from './matchPath';
2
2
  import { getLoggerWithContext, logServerResponse } from '../utilities/log/';
3
+ import { fetchBuilder, graphqlRequestBody } from './fetch';
3
4
  let memoizedRoutes = [];
4
5
  let memoizedPages = {};
5
- export function getApiRoutesFromPages(pages, topLevelPath = '*') {
6
+ export function getApiRoutes(pages, topLevelPath = '*') {
6
7
  if (!pages || memoizedPages === pages)
7
8
  return memoizedRoutes;
8
9
  const topLevelPrefix = topLevelPath.replace('*', '').replace(/\/$/, '');
9
10
  const routes = Object.keys(pages)
10
11
  .filter((key) => pages[key].api)
11
12
  .map((key) => {
12
- const path = key
13
- .replace('./pages', '')
13
+ let path = key
14
+ .replace('./routes', '')
14
15
  .replace(/\.server\.(t|j)sx?$/, '')
15
16
  /**
16
17
  * Replace /index with /
@@ -25,6 +26,8 @@ export function getApiRoutesFromPages(pages, topLevelPath = '*') {
25
26
  * Convert /[handle].jsx and /[...handle].jsx to /:handle.jsx for react-router-dom
26
27
  */
27
28
  .replace(/\[(?:[.]{3})?(\w+?)\]/g, (_match, param) => `:${param}`);
29
+ if (path.endsWith('/') && path !== '/')
30
+ path = path.substring(0, path.length - 1);
28
31
  /**
29
32
  * Catch-all routes [...handle].jsx don't need an exact match
30
33
  * https://reactrouter.com/core/api/Route/exact-bool
@@ -61,11 +64,30 @@ export function getApiRouteFromURL(url, routes) {
61
64
  hasServerComponent: foundRoute.hasServerComponent,
62
65
  };
63
66
  }
64
- export async function renderApiRoute(request, route) {
67
+ function queryShopBuilder(shopifyConfig) {
68
+ return async function queryShop({ query, variables, locale, }) {
69
+ var _a;
70
+ const { storeDomain, storefrontApiVersion, storefrontToken, defaultLocale } = shopifyConfig;
71
+ const fetcher = fetchBuilder(`https://${storeDomain}/api/${storefrontApiVersion}/graphql.json`, {
72
+ method: 'POST',
73
+ body: graphqlRequestBody(query, variables),
74
+ headers: {
75
+ 'X-Shopify-Storefront-Access-Token': storefrontToken,
76
+ 'Accept-Language': (_a = locale) !== null && _a !== void 0 ? _a : defaultLocale,
77
+ 'Content-Type': 'application/json',
78
+ },
79
+ });
80
+ return await fetcher();
81
+ };
82
+ }
83
+ export async function renderApiRoute(request, route, shopifyConfig) {
65
84
  let response;
66
85
  const log = getLoggerWithContext(request);
67
86
  try {
68
- response = await route.resource(request, { params: route.params });
87
+ response = await route.resource(request, {
88
+ params: route.params,
89
+ queryShop: queryShopBuilder(shopifyConfig),
90
+ });
69
91
  if (!(response instanceof Response)) {
70
92
  if (typeof response === 'string' || response instanceof String) {
71
93
  response = new Response(response);
@@ -0,0 +1,11 @@
1
+ export declare type DevServerMessage = {
2
+ type: 'warn';
3
+ data: string;
4
+ } | {
5
+ type: 'error';
6
+ data: {
7
+ message: string;
8
+ stack: string;
9
+ };
10
+ };
11
+ export declare function sendMessageToClient(message: DevServerMessage): void;
@@ -0,0 +1,11 @@
1
+ export function sendMessageToClient(message) {
2
+ // @ts-ignore
3
+ const devServer = globalThis.__viteDevServer;
4
+ if (devServer) {
5
+ devServer.ws.send({
6
+ type: 'custom',
7
+ event: 'hydrogen',
8
+ data: message,
9
+ });
10
+ }
11
+ }
@@ -1,4 +1,10 @@
1
1
  import { ASTNode } from 'graphql';
2
- export declare function fetchBuilder<T>(request: Request): () => Promise<T>;
2
+ declare type FetchInit = {
3
+ body?: string;
4
+ method?: string;
5
+ headers?: Record<string, string>;
6
+ };
7
+ export declare function fetchBuilder<T>(url: string, options?: FetchInit): () => Promise<T>;
3
8
  export declare function graphqlRequestBody(query: ASTNode | string, variables?: Record<string, any>): string;
4
9
  export declare function decodeShopifyId(id: string): string;
10
+ export {};
@@ -1,17 +1,16 @@
1
1
  import { print } from 'graphql';
2
2
  import { LIB_VERSION } from '../version';
3
- export function fetchBuilder(request) {
4
- const defaultHeaders = {
5
- 'content-type': 'application/json',
6
- 'user-agent': `Hydrogen ${LIB_VERSION}`,
3
+ const defaultHeaders = {
4
+ 'content-type': 'application/json',
5
+ 'user-agent': `Hydrogen ${LIB_VERSION}`,
6
+ };
7
+ export function fetchBuilder(url, options = {}) {
8
+ const requestInit = {
9
+ ...options,
10
+ headers: { ...defaultHeaders, ...options.headers },
7
11
  };
8
- for (const [property, value] of Object.entries(defaultHeaders)) {
9
- if (!request.headers.has(property)) {
10
- request.headers.append(property, value);
11
- }
12
- }
13
12
  return async () => {
14
- const response = await fetch(request.url, request);
13
+ const response = await fetch(url, requestInit);
15
14
  if (!response.ok) {
16
15
  throw response;
17
16
  }
@@ -27,14 +26,6 @@ export function graphqlRequestBody(query, variables) {
27
26
  });
28
27
  }
29
28
  export function decodeShopifyId(id) {
30
- // Start fix: for SFAPI 2022-01. Remove when upgrading to 2022-04
31
- if (!id.startsWith('gid://')) {
32
- id =
33
- typeof btoa !== 'undefined'
34
- ? btoa(id)
35
- : Buffer.from(id, 'base64').toString('ascii');
36
- }
37
- // End fix
38
29
  if (!id.startsWith('gid://')) {
39
30
  throw new Error('invalid Shopify ID');
40
31
  }
@@ -1,5 +1,6 @@
1
- import { GraphQLConnection } from '../../types';
1
+ import type { GraphQLConnection } from '../../types';
2
+ import type { PartialDeep } from 'type-fest';
2
3
  /**
3
4
  * The `flattenConnection` utility transforms a connection object from the Storefront API (for example, [Product-related connections](/api/storefront/reference/products/product)) into a flat array of nodes.
4
5
  */
5
- export declare function flattenConnection<T>(connection: GraphQLConnection<T>): T[];
6
+ export declare function flattenConnection<T>(connection: PartialDeep<GraphQLConnection<T>>): PartialDeep<T>[];
@@ -2,6 +2,10 @@
2
2
  * The `flattenConnection` utility transforms a connection object from the Storefront API (for example, [Product-related connections](/api/storefront/reference/products/product)) into a flat array of nodes.
3
3
  */
4
4
  export function flattenConnection(connection) {
5
- var _a;
6
- return ((_a = connection.edges) !== null && _a !== void 0 ? _a : []).map((edge) => edge.node);
5
+ return (connection.edges || []).map((edge) => {
6
+ if (!(edge === null || edge === void 0 ? void 0 : edge.node)) {
7
+ throw new Error('Connection edges must contain nodes');
8
+ }
9
+ return edge.node;
10
+ });
7
11
  }
@@ -0,0 +1,17 @@
1
+ import type { ASTNode } from 'graphql';
2
+ export declare const TIMEOUT_MS = 2000;
3
+ declare type TrackerParams = {
4
+ query: ASTNode;
5
+ data: {
6
+ data: unknown;
7
+ };
8
+ onUnusedData?: (params: {
9
+ queryName: string;
10
+ properties: string[];
11
+ }) => void;
12
+ };
13
+ export declare function injectGraphQLTracker({ query, data, onUnusedData, }: TrackerParams): (check?: (params: {
14
+ queryName: string;
15
+ properties: string[];
16
+ }) => void) => void;
17
+ export {};
@@ -0,0 +1,119 @@
1
+ export const TIMEOUT_MS = 2000;
2
+ export function injectGraphQLTracker({ query, data, onUnusedData, }) {
3
+ var _a;
4
+ const info = convertQueryToResolveInfo(query);
5
+ // E.g. ['shop.stuff.myString']
6
+ const requestedFields = getFieldList(info.nodes, info.fragments);
7
+ // Remove the last key of each path to avoid proxying primitive
8
+ // values. Reverse order to avoid accessing already defined
9
+ // proxies (i.e. handle child properties before parent properties)
10
+ // E.g. `shop.stuff.myString` => `shop.stuff`
11
+ const uniqueFieldPaths = [
12
+ ...new Set(requestedFields.map((path) => path.split('.').slice(0, -1).join('.'))),
13
+ ].reverse();
14
+ const queryName = ((_a = findOperationDefinition(query).name) === null || _a === void 0 ? void 0 : _a.value) || '';
15
+ // Record fields that are read in the proxy to compare later.
16
+ const readFieldsMap = {};
17
+ let isCheckedOnce = false;
18
+ const checkFields = (check = onUnusedData) => {
19
+ isCheckedOnce = true;
20
+ const properties = requestedFields
21
+ .filter((prop) => !readFieldsMap[prop] && !prop.endsWith('.__typename'))
22
+ .map((prop) => prop.replace(/\.edges\./g, '.').replace(/\.node\./g, '.'));
23
+ if (properties.length > 0) {
24
+ return check({ queryName, properties });
25
+ }
26
+ };
27
+ let readTimeout;
28
+ uniqueFieldPaths.forEach((fieldPath) => deepTransform(data, 'data.' + fieldPath, (value) => {
29
+ if (typeof value !== 'object' || value === null)
30
+ return value;
31
+ return new Proxy(value, {
32
+ get(target, prop) {
33
+ if (typeof prop === 'string') {
34
+ const fullPath = fieldPath + '.' + prop;
35
+ if (!readFieldsMap[fullPath]) {
36
+ readFieldsMap[fullPath] = true;
37
+ if (onUnusedData && !isCheckedOnce) {
38
+ clearTimeout(readTimeout);
39
+ readTimeout = setTimeout(checkFields, TIMEOUT_MS);
40
+ }
41
+ }
42
+ }
43
+ return target[prop];
44
+ },
45
+ });
46
+ }));
47
+ return checkFields;
48
+ }
49
+ function findOperationDefinition(query) {
50
+ return query.definitions.find((def) => def.kind === 'OperationDefinition');
51
+ }
52
+ function convertQueryToResolveInfo(query) {
53
+ var _a;
54
+ return {
55
+ // Root of the selection nodes
56
+ nodes: (_a = findOperationDefinition(query)) === null || _a === void 0 ? void 0 : _a.selectionSet.selections,
57
+ // Collection of all the fragments in this query
58
+ fragments: query.definitions.reduce((acc, current) => {
59
+ if (current.kind === 'FragmentDefinition') {
60
+ acc[current.name.value] = current;
61
+ }
62
+ return acc;
63
+ }, {}),
64
+ };
65
+ }
66
+ /**
67
+ * Extracts the selection fields from a query AST as a list of dot-separated paths.
68
+ * @param selectionNodes - Selection nodes from the AST
69
+ * @param fragments - Fragments from the AST
70
+ * @param path - Accummulated path for recursion
71
+ * @returns A plain JS array representing the selection fields
72
+ */
73
+ function getFieldList(nodes, fragments = {}, path = '') {
74
+ return nodes.reduce((acc, node) => {
75
+ var _a, _b, _c, _d, _e;
76
+ let nextPath = path;
77
+ let nextNodes;
78
+ if (node.kind === 'FragmentSpread') {
79
+ nextNodes = fragments[node.name.value].selectionSet.selections;
80
+ }
81
+ else if (node.kind === 'InlineFragment') {
82
+ nextNodes = (_a = node.selectionSet) === null || _a === void 0 ? void 0 : _a.selections;
83
+ }
84
+ else if (node.kind === 'Field') {
85
+ nextNodes = (_b = node.selectionSet) === null || _b === void 0 ? void 0 : _b.selections;
86
+ const name = (_d = (_c = node.alias) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : (_e = node.name) === null || _e === void 0 ? void 0 : _e.value;
87
+ nextPath = path ? `${path}.${name}` : name;
88
+ if (!nextNodes)
89
+ acc.push(nextPath); // This is a leaf
90
+ }
91
+ if (nextNodes)
92
+ acc.push(...getFieldList(nextNodes, fragments, nextPath));
93
+ return acc;
94
+ }, []);
95
+ }
96
+ /**
97
+ * Transform a nested property in a given object (in place).
98
+ * @param input - Object to transform
99
+ * @param path - Dot-separated path to the nested property
100
+ * @param valueTransform - Transformer function
101
+ */
102
+ function deepTransform(input, path, valueTransform) {
103
+ const keys = Array.isArray(path) ? path : path.split('.');
104
+ let obj = input;
105
+ let key;
106
+ for (let index = 0; !!obj && index < keys.length; index++) {
107
+ key = keys[index];
108
+ if (index === keys.length - 1) {
109
+ // Last property, transform value
110
+ obj[key] = valueTransform(obj[key]);
111
+ }
112
+ else if (Array.isArray(obj[key])) {
113
+ // We've found an array in the middle, run this recursively
114
+ const subKeys = keys.slice(index + 1);
115
+ obj[key].forEach((v) => deepTransform(v, subKeys, valueTransform));
116
+ }
117
+ obj = obj[key];
118
+ }
119
+ }
@@ -1,4 +1,5 @@
1
- import { Image as ImageType } from '../graphql/types/types';
1
+ import type { Image as ImageType } from '../storefront-api-types';
2
+ import type { PartialDeep } from 'type-fest';
2
3
  export declare type Width = string | 'original';
3
4
  export declare type Height = string | 'original';
4
5
  export declare type Crop = 'top' | 'bottom' | 'left' | 'right' | 'center';
@@ -23,7 +24,7 @@ export interface ImageLoaderOptions {
23
24
  export declare function addImageSizeParametersToUrl(url: string, { width, height, crop, scale, format }: ImageSizeOptions): string;
24
25
  export declare function shopifyImageLoader({ src, options }: ImageLoaderOptions): string;
25
26
  export declare function useImageUrl(src?: string, options?: ImageSizeOptions): string | undefined;
26
- export declare function getShopifyImageDimensions(image: Pick<ImageType, 'altText' | 'url' | 'id' | 'width' | 'height'>, options?: ImageSizeOptions): {
27
- width: import("../graphql/types/types").Maybe<number> | undefined;
28
- height: import("../graphql/types/types").Maybe<number> | undefined;
27
+ export declare function getShopifyImageDimensions(image: Pick<PartialDeep<ImageType>, 'altText' | 'url' | 'id' | 'width' | 'height'>, options?: ImageSizeOptions): {
28
+ width: import("../storefront-api-types").Maybe<number> | undefined;
29
+ height: import("../storefront-api-types").Maybe<number> | undefined;
29
30
  };
@@ -1,7 +1,7 @@
1
1
  import { ServerComponentRequest } from '../../framework/Hydration/ServerComponentRequest.server';
2
2
  import { QueryKey } from '../../types';
3
3
  import type { RenderType } from './log';
4
- export declare type TimingType = 'requested' | 'resolved' | 'rendered' | 'preload' | 'expired';
4
+ export declare type TimingType = 'requested' | 'resolved' | 'rendered' | 'preload';
5
5
  export declare type QueryTiming = {
6
6
  name: string;
7
7
  timingType: TimingType;
@@ -9,7 +9,6 @@ const TIMING_MAPPING = {
9
9
  rendered: 'Rendered',
10
10
  resolved: 'Resolved',
11
11
  preload: 'Preload',
12
- expired: 'Expired',
13
12
  };
14
13
  export function collectQueryTimings(request, queryKey, timingType, duration) {
15
14
  request.ctx.queryTimings.push({
@@ -45,7 +44,7 @@ export function logQueryTimings(type, request) {
45
44
  }
46
45
  const loadColor = query.timingType === 'preload' ? green : color;
47
46
  const duration = query.duration;
48
- log.debug(color(`│ ${`${(query.timestamp - requestStartTime).toFixed(2)}ms`.padEnd(10)} ${loadColor(TIMING_MAPPING[query.timingType].padEnd(10))} ${query.name}${query.timingType === 'resolved' || query.timingType === 'expired'
47
+ log.debug(color(`│ ${`${(query.timestamp - requestStartTime).toFixed(2)}ms`.padEnd(10)} ${loadColor(TIMING_MAPPING[query.timingType].padEnd(10))} ${query.name}${query.timingType === 'resolved'
49
48
  ? ` (Took ${duration === null || duration === void 0 ? void 0 : duration.toFixed(2)}ms)`
50
49
  : ''}`));
51
50
  // SSR + RSC render path generates 2 `load` and `render` for each query
@@ -11,6 +11,7 @@ export declare type LoggerOptions = {
11
11
  showCacheControlHeader?: boolean;
12
12
  showCacheApiStatus?: boolean;
13
13
  showQueryTiming?: boolean;
14
+ showUnusedQueryProperties?: boolean;
14
15
  };
15
16
  export declare type RenderType = 'str' | 'rsc' | 'ssr' | 'api';
16
17
  export declare const log: Logger;
@@ -1,5 +1,8 @@
1
1
  export function findQueryName(key) {
2
2
  const decodeKey = decodeURIComponent(key);
3
+ if (key.length < 100) {
4
+ return key.replace('"__QUERY_CACHE_ID__"', '').replace(/"/g, '');
5
+ }
3
6
  const match = decodeKey.match(/query ([^\s\()]*)\s?(|\(\{)/);
4
7
  if (match && match.length > 1) {
5
8
  return match[1];
@@ -1,5 +1,6 @@
1
- import { RawMetafield } from '../../types';
1
+ import type { Metafield } from '../../storefront-api-types';
2
+ import type { PartialDeep } from 'type-fest';
2
3
  /**
3
4
  * The `parseMetafieldValue` function parses a [Metafield](/api/storefront/reference/common-objects/metafield)'s `value` from a string into a sensible type corresponding to the [Metafield](/api/storefront/reference/common-objects/metafield)'s `type`.
4
5
  */
5
- export declare function parseMetafieldValue(metafield: Partial<RawMetafield>): any;
6
+ export declare function parseMetafieldValue(metafield: PartialDeep<Metafield>): any;
@@ -13,10 +13,6 @@ export function addParametersToEmbeddedVideoUrl(url, parameters) {
13
13
  return `${url}?${params}`;
14
14
  }
15
15
  export function useEmbeddedVideoUrl(url, parameters) {
16
- // Ensure a youtube shortened url is changed to an iFrame compatible embed link.
17
- // TODO: Fix is needed for SFAPI version 2022-01. Starting 2022-04 embeddedUrl has been marked as deprecated and replaced with
18
- // embedUrl. When the pinned SFAPI version is 2022-04 line can be removed in favor of changes on PR #455
19
- url = url.replace(/youtu\.be/, 'www.youtube.com/embed');
20
16
  return useMemo(() => {
21
17
  if (!parameters) {
22
18
  return url;
@@ -1 +1 @@
1
- export declare const LIB_VERSION = "0.11.1";
1
+ export declare const LIB_VERSION = "0.13.1";
@@ -1 +1 @@
1
- export const LIB_VERSION = '0.11.1';
1
+ export const LIB_VERSION = '0.13.1';
@@ -14,9 +14,10 @@ interface RequestHandlerOptions {
14
14
  dev?: boolean;
15
15
  context?: RuntimeContext;
16
16
  nonce?: string;
17
+ buyerIpHeader?: string;
17
18
  }
18
19
  export interface RequestHandler {
19
20
  (request: Request | IncomingMessage, options: RequestHandlerOptions): Promise<Response | undefined>;
20
21
  }
21
- export declare const renderHydrogen: (App: any, { pages }: ServerHandlerConfig) => RequestHandler;
22
+ export declare const renderHydrogen: (App: any, { shopifyConfig, routes }: ServerHandlerConfig) => RequestHandler;
22
23
  export default renderHydrogen;