@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
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -40,10 +44,13 @@ const config_1 = require("./framework/config");
40
44
  const streaming_server_1 = require("./streaming.server");
41
45
  const constants_1 = require("./constants");
42
46
  const template_1 = require("./utilities/template");
47
+ const DOCTYPE = '<!DOCTYPE html>';
48
+ const CONTENT_TYPE = 'Content-Type';
43
49
  const HTML_CONTENT_TYPE = 'text/html; charset=UTF-8';
44
- const renderHydrogen = (App, { pages }) => {
45
- const handleRequest = async function (rawRequest, { indexTemplate, streamableResponse, dev, cache, context, nonce }) {
50
+ const renderHydrogen = (App, { shopifyConfig, routes }) => {
51
+ const handleRequest = async function (rawRequest, { indexTemplate, streamableResponse, dev, cache, context, nonce, buyerIpHeader, }) {
46
52
  const request = new ServerComponentRequest_server_1.ServerComponentRequest(rawRequest);
53
+ request.ctx.buyerIpHeader = buyerIpHeader;
47
54
  const url = new URL(request.url);
48
55
  const log = (0, log_1.getLoggerWithContext)(request);
49
56
  const componentResponse = new ServerComponentResponse_server_1.ServerComponentResponse();
@@ -60,22 +67,22 @@ const renderHydrogen = (App, { pages }) => {
60
67
  if (template && typeof template !== 'string') {
61
68
  template = template.default;
62
69
  }
63
- if (!isReactHydrationRequest && pages) {
64
- const apiRoute = getApiRoute(url, { pages });
70
+ if (!isReactHydrationRequest && routes) {
71
+ const apiRoute = getApiRoute(url, { routes });
65
72
  // The API Route might have a default export, making it also a server component
66
73
  // If it does, only render the API route if the request method is GET
67
74
  if (apiRoute &&
68
75
  (!apiRoute.hasServerComponent || request.method !== 'GET')) {
69
- return (0, apiRoutes_1.renderApiRoute)(request, apiRoute);
76
+ return (0, apiRoutes_1.renderApiRoute)(request, apiRoute, shopifyConfig);
70
77
  }
71
78
  }
72
79
  const isStreamable = !(0, bot_ua_1.isBotUA)(url, request.headers.get('user-agent')) &&
73
- (!!streamableResponse || (0, streaming_server_1.supportsReadableStream)());
80
+ (!!streamableResponse || (await (0, streaming_server_1.isStreamingSupported)()));
74
81
  const params = {
75
82
  App,
76
83
  log,
77
84
  dev,
78
- pages,
85
+ routes,
79
86
  nonce,
80
87
  request,
81
88
  template,
@@ -99,28 +106,33 @@ const renderHydrogen = (App, { pages }) => {
99
106
  return handleRequest;
100
107
  };
101
108
  exports.renderHydrogen = renderHydrogen;
102
- function getApiRoute(url, { pages }) {
103
- const routes = (0, apiRoutes_1.getApiRoutesFromPages)(pages);
104
- return (0, apiRoutes_1.getApiRouteFromURL)(url, routes);
109
+ function getApiRoute(url, { routes }) {
110
+ const apiRoutes = (0, apiRoutes_1.getApiRoutes)(routes);
111
+ return (0, apiRoutes_1.getApiRouteFromURL)(url, apiRoutes);
105
112
  }
106
113
  /**
107
114
  * The render function is responsible for turning the provided `App` into an HTML string,
108
115
  * and returning any initial state that needs to be hydrated into the client version of the app.
109
116
  * NOTE: This is currently only used for SEO bots or Worker runtime (where Stream is not yet supported).
110
117
  */
111
- async function render(url, { App, pages, request, componentResponse, log, template, nonce, dev, }) {
118
+ async function render(url, { App, routes, request, componentResponse, log, template, nonce, dev, }) {
112
119
  const state = { pathname: url.pathname, search: url.search };
113
120
  const { AppSSR, rscReadable } = buildAppSSR({
114
121
  App,
115
122
  state,
116
123
  request,
117
124
  response: componentResponse,
118
- pages,
125
+ routes,
119
126
  log,
120
127
  }, { template });
128
+ function onErrorShell(error) {
129
+ log.error(error);
130
+ componentResponse.writeHead({ status: 500 });
131
+ return template;
132
+ }
121
133
  let [html, flight] = await Promise.all([
122
- renderToBufferedString(AppSSR, { log, nonce }),
123
- (0, streaming_server_1.bufferReadableStream)(rscReadable.getReader()),
134
+ renderToBufferedString(AppSSR, { log, nonce }).catch(onErrorShell),
135
+ (0, streaming_server_1.bufferReadableStream)(rscReadable.getReader()).catch(() => null),
124
136
  ]);
125
137
  const { headers, status, statusText } = getResponseOptions(componentResponse);
126
138
  /**
@@ -137,15 +149,11 @@ async function render(url, { App, pages, request, componentResponse, log, templa
137
149
  headers,
138
150
  });
139
151
  }
140
- headers['Content-type'] = HTML_CONTENT_TYPE;
141
- const { bodyAttributes, htmlAttributes, ...head } = extractHeadElements(request.ctx.head);
142
- html = html
143
- .replace(/<head>(.*?)<\/head>/s, generateHeadTag(head))
144
- .replace('<html', htmlAttributes ? `<html ${htmlAttributes}` : '$&')
145
- .replace('<body', bodyAttributes ? `<body ${bodyAttributes}` : '$&')
146
- .replace('</body>', flight
147
- ? `${flightContainer({ init: true, nonce, chunk: flight })}</body>`
148
- : '$&');
152
+ headers[CONTENT_TYPE] = HTML_CONTENT_TYPE;
153
+ html = (0, Html_1.applyHtmlHead)(html, request.ctx.head, template);
154
+ if (flight) {
155
+ html = html.replace('</body>', `${flightContainer({ init: true, nonce, chunk: flight })}</body>`);
156
+ }
149
157
  postRequestTasks('ssr', status, request, componentResponse);
150
158
  return new Response(html, {
151
159
  status,
@@ -157,7 +165,8 @@ async function render(url, { App, pages, request, componentResponse, log, templa
157
165
  * Stream a response to the client. NOTE: This omits custom `<head>`
158
166
  * information, so this method should not be used by crawlers.
159
167
  */
160
- async function stream(url, { App, pages, request, response, componentResponse, log, template, nonce, dev, }) {
168
+ async function stream(url, { App, routes, request, response, componentResponse, log, template, nonce, dev, }) {
169
+ var _a;
161
170
  const state = { pathname: url.pathname, search: url.search };
162
171
  log.trace('start stream');
163
172
  const { noScriptTemplate, bootstrapScripts, bootstrapModules } = (0, template_1.stripScriptsFromTemplate)(template);
@@ -167,11 +176,8 @@ async function stream(url, { App, pages, request, response, componentResponse, l
167
176
  request,
168
177
  response: componentResponse,
169
178
  log,
170
- pages,
171
- }, {
172
- template: noScriptTemplate,
173
- htmlAttrs: { lang: 'en' },
174
- });
179
+ routes,
180
+ }, { template: noScriptTemplate });
175
181
  const rscToScriptTagReadable = new ReadableStream({
176
182
  start(controller) {
177
183
  log.trace('rsc start chunks');
@@ -189,59 +195,66 @@ async function stream(url, { App, pages, request, response, componentResponse, l
189
195
  });
190
196
  let didError;
191
197
  if (__WORKER__) {
192
- const deferredShouldReturnApp = (0, defer_1.defer)();
198
+ const onCompleteAll = (0, defer_1.defer)();
193
199
  const encoder = new TextEncoder();
194
200
  const transform = new TransformStream();
195
201
  const writable = transform.writable.getWriter();
196
202
  const responseOptions = {};
197
- const ssrReadable = (0, streaming_server_1.ssrRenderToReadableStream)(AppSSR, {
198
- nonce,
199
- bootstrapScripts,
200
- bootstrapModules,
201
- onCompleteShell() {
202
- log.trace('worker ready to stream');
203
- Object.assign(responseOptions, getResponseOptions(componentResponse, didError));
204
- /**
205
- * TODO: This assumes `response.cache()` has been called _before_ any
206
- * queries which might be caught behind Suspense. Clarify this or add
207
- * additional checks downstream?
208
- */
209
- responseOptions.headers[(0, cache_1.getCacheControlHeader)({ dev })] =
210
- componentResponse.cacheControlHeader;
211
- if (isRedirect(responseOptions)) {
212
- // Return redirects early without further rendering/streaming
213
- return deferredShouldReturnApp.resolve(false);
214
- }
215
- if (!componentResponse.canStream())
216
- return;
217
- startWritingHtmlToStream(responseOptions, writable, encoder, dev ? didError : undefined);
218
- deferredShouldReturnApp.resolve(true);
219
- },
220
- async onCompleteAll() {
221
- log.trace('worker complete stream');
222
- if (componentResponse.canStream())
223
- return;
224
- Object.assign(responseOptions, getResponseOptions(componentResponse, didError));
225
- if (isRedirect(responseOptions)) {
226
- // Redirects found after any async code
227
- return deferredShouldReturnApp.resolve(false);
228
- }
203
+ let ssrReadable;
204
+ try {
205
+ ssrReadable = await (0, streaming_server_1.ssrRenderToReadableStream)(AppSSR, {
206
+ nonce,
207
+ bootstrapScripts,
208
+ bootstrapModules,
209
+ onError(error) {
210
+ didError = error;
211
+ if (dev && !writable.closed && !!responseOptions.status) {
212
+ writable.write((0, error_1.getErrorMarkup)(error));
213
+ }
214
+ log.error(error);
215
+ },
216
+ });
217
+ }
218
+ catch (error) {
219
+ log.error(error);
220
+ return new Response(template + (dev ? (0, error_1.getErrorMarkup)(error) : ''), {
221
+ status: 500,
222
+ headers: { [CONTENT_TYPE]: HTML_CONTENT_TYPE },
223
+ });
224
+ }
225
+ log.trace('worker ready to stream');
226
+ ssrReadable.allReady.then(() => {
227
+ log.trace('worker complete stream');
228
+ onCompleteAll.resolve(true);
229
+ });
230
+ async function prepareForStreaming(flush) {
231
+ Object.assign(responseOptions, getResponseOptions(componentResponse, didError));
232
+ /**
233
+ * TODO: This assumes `response.cache()` has been called _before_ any
234
+ * queries which might be caught behind Suspense. Clarify this or add
235
+ * additional checks downstream?
236
+ */
237
+ responseOptions.headers[(0, cache_1.getCacheControlHeader)({ dev })] =
238
+ componentResponse.cacheControlHeader;
239
+ if (isRedirect(responseOptions)) {
240
+ return false;
241
+ }
242
+ if (flush) {
229
243
  if (componentResponse.customBody) {
230
244
  writable.write(encoder.encode(await componentResponse.customBody));
231
- return deferredShouldReturnApp.resolve(false);
245
+ return false;
232
246
  }
233
- startWritingHtmlToStream(responseOptions, writable, encoder, dev ? didError : undefined);
234
- deferredShouldReturnApp.resolve(true);
235
- },
236
- onError(error) {
237
- didError = error;
238
- if (dev && deferredShouldReturnApp.status === 'pending') {
239
- writable.write((0, error_1.getErrorMarkup)(error));
247
+ responseOptions.headers[CONTENT_TYPE] = HTML_CONTENT_TYPE;
248
+ writable.write(encoder.encode(DOCTYPE));
249
+ if (didError) {
250
+ // This error was delayed until the headers were properly sent.
251
+ writable.write(encoder.encode((0, error_1.getErrorMarkup)(didError)));
240
252
  }
241
- log.error(error);
242
- },
243
- });
244
- if (await deferredShouldReturnApp.promise) {
253
+ return true;
254
+ }
255
+ }
256
+ const shouldReturnApp = (_a = (await prepareForStreaming(componentResponse.canStream()))) !== null && _a !== void 0 ? _a : (await onCompleteAll.promise.then(prepareForStreaming));
257
+ if (shouldReturnApp) {
245
258
  let bufferedSsr = '';
246
259
  let isPendingSsrWrite = false;
247
260
  const writingSSR = (0, streaming_server_1.bufferReadableStream)(ssrReadable.getReader(), (chunk) => {
@@ -278,12 +291,11 @@ async function stream(url, { App, pages, request, response, componentResponse, l
278
291
  return new Response(bufferedBody, responseOptions);
279
292
  }
280
293
  else if (response) {
281
- response.socket.on('error', log.fatal);
282
294
  const { pipe } = (0, streaming_server_1.ssrRenderToPipeableStream)(AppSSR, {
283
295
  nonce,
284
296
  bootstrapScripts,
285
297
  bootstrapModules,
286
- onCompleteShell() {
298
+ onShellReady() {
287
299
  log.trace('node ready to stream');
288
300
  /**
289
301
  * TODO: This assumes `response.cache()` has been called _before_ any
@@ -292,7 +304,6 @@ async function stream(url, { App, pages, request, response, componentResponse, l
292
304
  */
293
305
  response.setHeader((0, cache_1.getCacheControlHeader)({ dev }), componentResponse.cacheControlHeader);
294
306
  writeHeadToServerResponse(response, componentResponse, log, didError);
295
- (0, log_1.logServerResponse)('str', request, response.statusCode);
296
307
  if (isRedirect(response)) {
297
308
  // Return redirects early without further rendering/streaming
298
309
  return response.end();
@@ -309,7 +320,7 @@ async function stream(url, { App, pages, request, response, componentResponse, l
309
320
  return response.write(chunk);
310
321
  });
311
322
  },
312
- async onCompleteAll() {
323
+ async onAllReady() {
313
324
  log.trace('node complete stream');
314
325
  if (componentResponse.canStream() || response.writableEnded) {
315
326
  postRequestTasks('str', response.statusCode, request, componentResponse);
@@ -332,6 +343,15 @@ async function stream(url, { App, pages, request, response, componentResponse, l
332
343
  pipe(response);
333
344
  });
334
345
  },
346
+ onShellError(error) {
347
+ log.error(error);
348
+ if (!response.writableEnded) {
349
+ writeHeadToServerResponse(response, componentResponse, log, error);
350
+ startWritingHtmlToServerResponse(response, dev ? error : undefined);
351
+ response.write(template);
352
+ response.end();
353
+ }
354
+ },
335
355
  onError(error) {
336
356
  didError = error;
337
357
  if (dev && response.headersSent) {
@@ -347,7 +367,7 @@ async function stream(url, { App, pages, request, response, componentResponse, l
347
367
  /**
348
368
  * Stream a hydration response to the client.
349
369
  */
350
- async function hydrate(url, { App, pages, request, response, componentResponse, isStreamable, log, }) {
370
+ async function hydrate(url, { App, routes, request, response, componentResponse, isStreamable, log, }) {
351
371
  const state = JSON.parse(url.searchParams.get('state') || '{}');
352
372
  const { AppRSC } = buildAppRSC({
353
373
  App,
@@ -355,7 +375,7 @@ async function hydrate(url, { App, pages, request, response, componentResponse,
355
375
  request,
356
376
  response: componentResponse,
357
377
  log,
358
- pages,
378
+ routes,
359
379
  });
360
380
  if (__WORKER__) {
361
381
  const rscReadable = (0, streaming_server_1.rscRenderToReadableStream)(AppRSC);
@@ -369,7 +389,6 @@ async function hydrate(url, { App, pages, request, response, componentResponse,
369
389
  return new Response(bufferedBody);
370
390
  }
371
391
  else if (response) {
372
- response.socket.on('error', log.fatal);
373
392
  const rscWriter = await Promise.resolve().then(() => __importStar(require(
374
393
  // @ts-ignore
375
394
  '@shopify/hydrogen/vendor/react-server-dom-vite/writer.node.server')));
@@ -381,21 +400,23 @@ async function hydrate(url, { App, pages, request, response, componentResponse,
381
400
  });
382
401
  }
383
402
  }
384
- function buildAppRSC({ App, state, request, response, log, pages, }) {
403
+ function buildAppRSC({ App, state, request, response, log, routes, }) {
385
404
  const hydrogenServerProps = { request, response, log };
405
+ const serverProps = { ...state, ...hydrogenServerProps, routes };
406
+ request.ctx.router.serverProps = serverProps;
386
407
  const AppRSC = (react_1.default.createElement(ServerRequestProvider_1.ServerRequestProvider, { request: request, isRSC: true },
387
408
  react_1.default.createElement(PreloadQueries, { request: request },
388
- react_1.default.createElement(App, { ...state, ...hydrogenServerProps, pages: pages }))));
409
+ react_1.default.createElement(App, { ...serverProps }))));
389
410
  return { AppRSC };
390
411
  }
391
- function buildAppSSR({ App, state, request, response, log, pages }, htmlOptions) {
412
+ function buildAppSSR({ App, state, request, response, log, routes }, htmlOptions) {
392
413
  const { AppRSC } = buildAppRSC({
393
414
  App,
394
415
  state,
395
416
  request,
396
417
  response,
397
418
  log,
398
- pages,
419
+ routes,
399
420
  });
400
421
  const [rscReadableForFizz, rscReadableForFlight] = (0, streaming_server_1.rscRenderToReadableStream)(AppRSC).tee();
401
422
  const rscResponse = (0, streaming_server_1.createFromReadableStream)(rscReadableForFizz);
@@ -413,43 +434,26 @@ function PreloadQueries({ request, children, }) {
413
434
  (0, ServerRequestProvider_1.preloadRequestCacheData)(request, preloadQueries);
414
435
  return children;
415
436
  }
416
- function extractHeadElements({ context: { helmet } }) {
417
- return helmet
418
- ? {
419
- base: helmet.base.toString(),
420
- bodyAttributes: helmet.bodyAttributes.toString(),
421
- htmlAttributes: helmet.htmlAttributes.toString(),
422
- link: helmet.link.toString(),
423
- meta: helmet.meta.toString(),
424
- noscript: helmet.noscript.toString(),
425
- script: helmet.script.toString(),
426
- style: helmet.style.toString(),
427
- title: helmet.title.toString(),
428
- }
429
- : {};
430
- }
431
437
  async function renderToBufferedString(ReactApp, { log, nonce }) {
432
438
  return new Promise(async (resolve, reject) => {
433
439
  if (__WORKER__) {
434
- const deferred = (0, defer_1.defer)();
435
- const readable = (0, streaming_server_1.ssrRenderToReadableStream)(ReactApp, {
436
- nonce,
437
- onCompleteAll() {
438
- /**
439
- * We want to wait until `onCompleteAll` has been called before fetching the
440
- * stream body. Otherwise, React 18's streaming JS script/template tags
441
- * will be included in the output and cause issues when loading
442
- * the Client Components in the browser.
443
- */
444
- deferred.resolve(null);
445
- },
446
- onError(error) {
447
- log.error(error);
448
- deferred.reject(error);
449
- },
450
- });
451
- await deferred.promise.catch(reject);
452
- resolve(await (0, streaming_server_1.bufferReadableStream)(readable.getReader()));
440
+ try {
441
+ const ssrReadable = await (0, streaming_server_1.ssrRenderToReadableStream)(ReactApp, {
442
+ nonce,
443
+ onError: (error) => log.error(error),
444
+ });
445
+ /**
446
+ * We want to wait until `allReady` resolves before fetching the
447
+ * stream body. Otherwise, React 18's streaming JS script/template tags
448
+ * will be included in the output and cause issues when loading
449
+ * the Client Components in the browser.
450
+ */
451
+ await ssrReadable.allReady;
452
+ resolve((0, streaming_server_1.bufferReadableStream)(ssrReadable.getReader()));
453
+ }
454
+ catch (error) {
455
+ reject(error);
456
+ }
453
457
  }
454
458
  else {
455
459
  const writer = await createNodeWriter();
@@ -459,7 +463,7 @@ async function renderToBufferedString(ReactApp, { log, nonce }) {
459
463
  * When hydrating, we have to wait until `onCompleteAll` to avoid having
460
464
  * `template` and `script` tags inserted and rendered as part of the hydration response.
461
465
  */
462
- onCompleteAll() {
466
+ onAllReady() {
463
467
  let data = '';
464
468
  writer.on('data', (chunk) => (data += chunk.toString()));
465
469
  writer.once('error', reject);
@@ -467,10 +471,8 @@ async function renderToBufferedString(ReactApp, { log, nonce }) {
467
471
  // Tell React to start writing to the writer
468
472
  pipe(writer);
469
473
  },
470
- onError(error) {
471
- log.error(error);
472
- reject(error);
473
- },
474
+ onShellError: reject,
475
+ onError: (error) => log.error(error),
474
476
  });
475
477
  }
476
478
  });
@@ -478,22 +480,14 @@ async function renderToBufferedString(ReactApp, { log, nonce }) {
478
480
  exports.default = exports.renderHydrogen;
479
481
  function startWritingHtmlToServerResponse(response, error) {
480
482
  if (!response.headersSent) {
481
- response.setHeader('Content-type', HTML_CONTENT_TYPE);
482
- response.write('<!DOCTYPE html>');
483
+ response.setHeader(CONTENT_TYPE, HTML_CONTENT_TYPE);
484
+ response.write(DOCTYPE);
483
485
  }
484
486
  if (error) {
485
487
  // This error was delayed until the headers were properly sent.
486
488
  response.write((0, error_1.getErrorMarkup)(error));
487
489
  }
488
490
  }
489
- function startWritingHtmlToStream(responseOptions, writable, encoder, error) {
490
- responseOptions.headers['Content-type'] = HTML_CONTENT_TYPE;
491
- writable.write(encoder.encode('<!DOCTYPE html>'));
492
- if (error) {
493
- // This error was delayed until the headers were properly sent.
494
- writable.write(encoder.encode((0, error_1.getErrorMarkup)(error)));
495
- }
496
- }
497
491
  function getResponseOptions({ headers, status, customStatus }, error) {
498
492
  var _a, _b;
499
493
  const responseInit = {};
@@ -526,29 +520,6 @@ function isRedirect(response) {
526
520
  const status = (_b = (_a = response.status) !== null && _a !== void 0 ? _a : response.statusCode) !== null && _b !== void 0 ? _b : 0;
527
521
  return status >= 300 && status < 400;
528
522
  }
529
- /**
530
- * Generate the contents of the `head` tag, and update the existing `<title>` tag
531
- * if one exists, and if a title is passed.
532
- */
533
- function generateHeadTag({ title, ...rest }) {
534
- const headProps = ['base', 'meta', 'style', 'noscript', 'script', 'link'];
535
- const otherHeadProps = headProps
536
- .map((prop) => rest[prop])
537
- .filter(Boolean)
538
- .join('\n');
539
- return (_outerHtml, innerHtml) => {
540
- let headHtml = otherHeadProps + innerHtml;
541
- if (title) {
542
- if (headHtml.includes('<title>')) {
543
- headHtml = headHtml.replace(/(<title>(?:.|\n)*?<\/title>)/, title);
544
- }
545
- else {
546
- headHtml += title;
547
- }
548
- }
549
- return `<head>${headHtml}</head>`;
550
- };
551
- }
552
523
  async function createNodeWriter() {
553
524
  // Importing 'stream' directly breaks Vite resolve
554
525
  // when building for workers, even though this code
@@ -0,0 +1,5 @@
1
+ declare type RedirectProps = {
2
+ to: string;
3
+ };
4
+ export default function Redirect({ to }: RedirectProps): null;
5
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const react_1 = require("react");
4
+ const useNavigate_1 = require("../../foundation/useNavigate/useNavigate");
5
+ function Redirect({ to }) {
6
+ const navigate = (0, useNavigate_1.useNavigate)();
7
+ (0, react_1.useEffect)(() => {
8
+ if (to.startsWith('http')) {
9
+ window.location.href = to;
10
+ }
11
+ else {
12
+ navigate(to);
13
+ }
14
+ }, []);
15
+ return null;
16
+ }
17
+ exports.default = Redirect;
@@ -0,0 +1,13 @@
1
+ import { BrowserHistory, Location } from 'history';
2
+ import React, { FC } from 'react';
3
+ declare type RouterContextValue = {
4
+ history: BrowserHistory;
5
+ location: Location;
6
+ };
7
+ export declare const RouterContext: React.Context<{} | RouterContextValue>;
8
+ export declare const BrowserRouter: FC<{
9
+ history?: BrowserHistory;
10
+ }>;
11
+ export declare function useRouter(): RouterContextValue;
12
+ export declare function useLocation(): Location;
13
+ export {};
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.useLocation = exports.useRouter = exports.BrowserRouter = exports.RouterContext = void 0;
27
+ const history_1 = require("history");
28
+ const react_1 = __importStar(require("react"));
29
+ const ssr_interop_1 = require("../ssr-interop");
30
+ const useServerState_1 = require("../useServerState");
31
+ exports.RouterContext = (0, react_1.createContext)({});
32
+ let currentPath = '';
33
+ let isFirstLoad = true;
34
+ const BrowserRouter = ({ history: pHistory, children, }) => {
35
+ if (ssr_interop_1.META_ENV_SSR)
36
+ return react_1.default.createElement(react_1.default.Fragment, null, children);
37
+ const history = (0, react_1.useMemo)(() => pHistory || (0, history_1.createBrowserHistory)(), [pHistory]);
38
+ const [location, setLocation] = (0, react_1.useState)(history.location);
39
+ const { pending, serverState, setServerState } = (0, useServerState_1.useServerState)();
40
+ (0, react_1.useEffect)(() => {
41
+ // The app has just loaded
42
+ if (isFirstLoad)
43
+ isFirstLoad = false;
44
+ // A navigation event has just happened
45
+ else if (!pending && currentPath !== serverState.pathname) {
46
+ window.scrollTo(0, 0);
47
+ }
48
+ currentPath = serverState.pathname;
49
+ }, [pending]);
50
+ (0, react_1.useEffect)(() => {
51
+ const unlisten = history.listen(({ location: newLocation }) => {
52
+ setServerState({
53
+ pathname: newLocation.pathname,
54
+ search: location.search || undefined,
55
+ });
56
+ setLocation(newLocation);
57
+ });
58
+ return () => unlisten();
59
+ }, [history]);
60
+ return (react_1.default.createElement(exports.RouterContext.Provider, { value: {
61
+ history,
62
+ location,
63
+ } }, children));
64
+ };
65
+ exports.BrowserRouter = BrowserRouter;
66
+ function useRouter() {
67
+ const router = (0, react_1.useContext)(exports.RouterContext);
68
+ if (!router && ssr_interop_1.META_ENV_SSR) {
69
+ throw new Error('useRouter must be used within a <Router> component');
70
+ }
71
+ return router;
72
+ }
73
+ exports.useRouter = useRouter;
74
+ function useLocation() {
75
+ return useRouter().location;
76
+ }
77
+ exports.useLocation = useLocation;