@shopify/hydrogen 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/README.md +29 -0
  2. package/client.d.ts +1 -0
  3. package/client.js +1 -0
  4. package/dist/esnext/client.d.ts +7 -0
  5. package/dist/esnext/client.js +7 -0
  6. package/dist/esnext/components/AddToCartButton/AddToCartButton.client.d.ts +15 -0
  7. package/dist/esnext/components/AddToCartButton/AddToCartButton.client.js +44 -0
  8. package/dist/esnext/components/AddToCartButton/index.d.ts +1 -0
  9. package/dist/esnext/components/AddToCartButton/index.js +1 -0
  10. package/dist/esnext/components/BuyNowButton/BuyNowButton.d.ts +12 -0
  11. package/dist/esnext/components/BuyNowButton/BuyNowButton.js +29 -0
  12. package/dist/esnext/components/BuyNowButton/index.d.ts +1 -0
  13. package/dist/esnext/components/BuyNowButton/index.js +1 -0
  14. package/dist/esnext/components/CartCheckoutButton/CartCheckoutButton.client.d.ts +7 -0
  15. package/dist/esnext/components/CartCheckoutButton/CartCheckoutButton.client.js +14 -0
  16. package/dist/esnext/components/CartCheckoutButton/index.d.ts +1 -0
  17. package/dist/esnext/components/CartCheckoutButton/index.js +1 -0
  18. package/dist/esnext/components/CartContainer/CartContainer.client.d.ts +9 -0
  19. package/dist/esnext/components/CartContainer/CartContainer.client.js +24 -0
  20. package/dist/esnext/components/CartContainer/index.d.ts +1 -0
  21. package/dist/esnext/components/CartContainer/index.js +1 -0
  22. package/dist/esnext/components/CartLineAttributes/CartLineAttributes.client.d.ts +10 -0
  23. package/dist/esnext/components/CartLineAttributes/CartLineAttributes.client.js +9 -0
  24. package/dist/esnext/components/CartLineAttributes/index.d.ts +1 -0
  25. package/dist/esnext/components/CartLineAttributes/index.js +1 -0
  26. package/dist/esnext/components/CartLineImage/CartLineImage.client.d.ts +6 -0
  27. package/dist/esnext/components/CartLineImage/CartLineImage.client.js +8 -0
  28. package/dist/esnext/components/CartLineImage/index.d.ts +1 -0
  29. package/dist/esnext/components/CartLineImage/index.js +1 -0
  30. package/dist/esnext/components/CartLinePrice/CartLinePrice.client.d.ts +6 -0
  31. package/dist/esnext/components/CartLinePrice/CartLinePrice.client.js +17 -0
  32. package/dist/esnext/components/CartLinePrice/index.d.ts +1 -0
  33. package/dist/esnext/components/CartLinePrice/index.js +1 -0
  34. package/dist/esnext/components/CartLineProductTitle/CartLineProductTitle.client.d.ts +3 -0
  35. package/dist/esnext/components/CartLineProductTitle/CartLineProductTitle.client.js +8 -0
  36. package/dist/esnext/components/CartLineProductTitle/index.d.ts +1 -0
  37. package/dist/esnext/components/CartLineProductTitle/index.js +1 -0
  38. package/dist/esnext/components/CartLineProvider/CartLineProvider.client.d.ts +6 -0
  39. package/dist/esnext/components/CartLineProvider/CartLineProvider.client.js +5 -0
  40. package/dist/esnext/components/CartLineProvider/context.d.ts +26 -0
  41. package/dist/esnext/components/CartLineProvider/context.js +2 -0
  42. package/dist/esnext/components/CartLineProvider/hooks.d.ts +26 -0
  43. package/dist/esnext/components/CartLineProvider/hooks.js +9 -0
  44. package/dist/esnext/components/CartLineProvider/index.d.ts +2 -0
  45. package/dist/esnext/components/CartLineProvider/index.js +2 -0
  46. package/dist/esnext/components/CartLineQuantity/CartLineQuantity.client.d.ts +3 -0
  47. package/dist/esnext/components/CartLineQuantity/CartLineQuantity.client.js +8 -0
  48. package/dist/esnext/components/CartLineQuantity/index.d.ts +1 -0
  49. package/dist/esnext/components/CartLineQuantity/index.js +1 -0
  50. package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.d.ts +8 -0
  51. package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.js +17 -0
  52. package/dist/esnext/components/CartLineQuantityAdjustButton/index.d.ts +1 -0
  53. package/dist/esnext/components/CartLineQuantityAdjustButton/index.js +1 -0
  54. package/dist/esnext/components/CartLineSelectedOptions/CartLineSelectedOptions.client.d.ts +10 -0
  55. package/dist/esnext/components/CartLineSelectedOptions/CartLineSelectedOptions.client.js +9 -0
  56. package/dist/esnext/components/CartLineSelectedOptions/index.d.ts +1 -0
  57. package/dist/esnext/components/CartLineSelectedOptions/index.js +1 -0
  58. package/dist/esnext/components/CartLines/CartLines.d.ts +7 -0
  59. package/dist/esnext/components/CartLines/CartLines.js +15 -0
  60. package/dist/esnext/components/CartLines/index.d.ts +1 -0
  61. package/dist/esnext/components/CartLines/index.js +1 -0
  62. package/dist/esnext/components/CartProvider/CartProvider.client.d.ts +7 -0
  63. package/dist/esnext/components/CartProvider/CartProvider.client.js +422 -0
  64. package/dist/esnext/components/CartProvider/CartServerProvider.server.d.ts +11 -0
  65. package/dist/esnext/components/CartProvider/CartServerProvider.server.js +20 -0
  66. package/dist/esnext/components/CartProvider/constants.d.ts +2 -0
  67. package/dist/esnext/components/CartProvider/constants.js +2 -0
  68. package/dist/esnext/components/CartProvider/context.d.ts +2 -0
  69. package/dist/esnext/components/CartProvider/context.js +2 -0
  70. package/dist/esnext/components/CartProvider/graphql/CartAttributesUpdateMutation.d.ts +18 -0
  71. package/dist/esnext/components/CartProvider/graphql/CartAttributesUpdateMutation.js +1 -0
  72. package/dist/esnext/components/CartProvider/graphql/CartBuyerIdentityUpdateMutation.d.ts +18 -0
  73. package/dist/esnext/components/CartProvider/graphql/CartBuyerIdentityUpdateMutation.js +1 -0
  74. package/dist/esnext/components/CartProvider/graphql/CartCreateMutation.d.ts +17 -0
  75. package/dist/esnext/components/CartProvider/graphql/CartCreateMutation.js +1 -0
  76. package/dist/esnext/components/CartProvider/graphql/CartDiscountCodesUpdateMutation.d.ts +18 -0
  77. package/dist/esnext/components/CartProvider/graphql/CartDiscountCodesUpdateMutation.js +1 -0
  78. package/dist/esnext/components/CartProvider/graphql/CartFragment.d.ts +68 -0
  79. package/dist/esnext/components/CartProvider/graphql/CartFragment.js +1 -0
  80. package/dist/esnext/components/CartProvider/graphql/CartLineAddMutation.d.ts +18 -0
  81. package/dist/esnext/components/CartProvider/graphql/CartLineAddMutation.js +1 -0
  82. package/dist/esnext/components/CartProvider/graphql/CartLineRemoveMutation.d.ts +18 -0
  83. package/dist/esnext/components/CartProvider/graphql/CartLineRemoveMutation.js +1 -0
  84. package/dist/esnext/components/CartProvider/graphql/CartLineUpdateMutation.d.ts +18 -0
  85. package/dist/esnext/components/CartProvider/graphql/CartLineUpdateMutation.js +1 -0
  86. package/dist/esnext/components/CartProvider/graphql/CartNoteUpdateMutation.d.ts +18 -0
  87. package/dist/esnext/components/CartProvider/graphql/CartNoteUpdateMutation.js +1 -0
  88. package/dist/esnext/components/CartProvider/graphql/CartQuery.d.ts +13 -0
  89. package/dist/esnext/components/CartProvider/graphql/CartQuery.js +1 -0
  90. package/dist/esnext/components/CartProvider/hooks.d.ts +18 -0
  91. package/dist/esnext/components/CartProvider/hooks.js +79 -0
  92. package/dist/esnext/components/CartProvider/index.d.ts +4 -0
  93. package/dist/esnext/components/CartProvider/index.js +4 -0
  94. package/dist/esnext/components/CartProvider/types.d.ts +105 -0
  95. package/dist/esnext/components/CartProvider/types.js +1 -0
  96. package/dist/esnext/components/CartShopPayButton/CartShopPayButton.client.d.ts +2 -0
  97. package/dist/esnext/components/CartShopPayButton/CartShopPayButton.client.js +10 -0
  98. package/dist/esnext/components/CartShopPayButton/index.d.ts +1 -0
  99. package/dist/esnext/components/CartShopPayButton/index.js +1 -0
  100. package/dist/esnext/components/CartToggle/CartToggle.client.d.ts +8 -0
  101. package/dist/esnext/components/CartToggle/CartToggle.client.js +11 -0
  102. package/dist/esnext/components/CartToggle/index.d.ts +1 -0
  103. package/dist/esnext/components/CartToggle/index.js +1 -0
  104. package/dist/esnext/components/CartTotal/CartTotal.client.d.ts +3 -0
  105. package/dist/esnext/components/CartTotal/CartTotal.client.js +8 -0
  106. package/dist/esnext/components/CartTotal/index.d.ts +1 -0
  107. package/dist/esnext/components/CartTotal/index.js +1 -0
  108. package/dist/esnext/components/CartUIProvider/CartUIProvider.client.d.ts +5 -0
  109. package/dist/esnext/components/CartUIProvider/CartUIProvider.client.js +26 -0
  110. package/dist/esnext/components/CartUIProvider/context.d.ts +9 -0
  111. package/dist/esnext/components/CartUIProvider/context.js +2 -0
  112. package/dist/esnext/components/CartUIProvider/hooks.d.ts +1 -0
  113. package/dist/esnext/components/CartUIProvider/hooks.js +9 -0
  114. package/dist/esnext/components/CartUIProvider/index.d.ts +2 -0
  115. package/dist/esnext/components/CartUIProvider/index.js +2 -0
  116. package/dist/esnext/components/ExternalVideo/ExternalVideo.d.ts +14 -0
  117. package/dist/esnext/components/ExternalVideo/ExternalVideo.js +9 -0
  118. package/dist/esnext/components/ExternalVideo/ExternalVideoFragment.d.ts +4 -0
  119. package/dist/esnext/components/ExternalVideo/ExternalVideoFragment.js +1 -0
  120. package/dist/esnext/components/ExternalVideo/index.d.ts +1 -0
  121. package/dist/esnext/components/ExternalVideo/index.js +1 -0
  122. package/dist/esnext/components/Image/Image.d.ts +14 -0
  123. package/dist/esnext/components/Image/Image.js +10 -0
  124. package/dist/esnext/components/Image/ImageFragment.d.ts +4 -0
  125. package/dist/esnext/components/Image/ImageFragment.js +1 -0
  126. package/dist/esnext/components/Image/index.d.ts +1 -0
  127. package/dist/esnext/components/Image/index.js +1 -0
  128. package/dist/esnext/components/LocalizationProvider/LocalizationClientProvider.client.d.ts +6 -0
  129. package/dist/esnext/components/LocalizationProvider/LocalizationClientProvider.client.js +14 -0
  130. package/dist/esnext/components/LocalizationProvider/LocalizationContext.client.d.ts +8 -0
  131. package/dist/esnext/components/LocalizationProvider/LocalizationContext.client.js +2 -0
  132. package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.d.ts +4 -0
  133. package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.js +8 -0
  134. package/dist/esnext/components/LocalizationProvider/LocalizationQuery.d.ts +18 -0
  135. package/dist/esnext/components/LocalizationProvider/LocalizationQuery.js +1 -0
  136. package/dist/esnext/components/LocalizationProvider/hooks.d.ts +8 -0
  137. package/dist/esnext/components/LocalizationProvider/hooks.js +17 -0
  138. package/dist/esnext/components/LocalizationProvider/index.d.ts +2 -0
  139. package/dist/esnext/components/LocalizationProvider/index.js +2 -0
  140. package/dist/esnext/components/MediaFile/MediaFile.d.ts +19 -0
  141. package/dist/esnext/components/MediaFile/MediaFile.js +22 -0
  142. package/dist/esnext/components/MediaFile/MediaFileFragment.d.ts +22 -0
  143. package/dist/esnext/components/MediaFile/MediaFileFragment.js +1 -0
  144. package/dist/esnext/components/MediaFile/index.d.ts +1 -0
  145. package/dist/esnext/components/MediaFile/index.js +1 -0
  146. package/dist/esnext/components/Metafield/Metafield.client.d.ts +8 -0
  147. package/dist/esnext/components/Metafield/Metafield.client.js +50 -0
  148. package/dist/esnext/components/Metafield/MetafieldFragment.d.ts +4 -0
  149. package/dist/esnext/components/Metafield/MetafieldFragment.js +1 -0
  150. package/dist/esnext/components/Metafield/components/StarRating/StarRating.d.ts +12 -0
  151. package/dist/esnext/components/Metafield/components/StarRating/StarRating.js +48 -0
  152. package/dist/esnext/components/Metafield/components/StarRating/index.d.ts +1 -0
  153. package/dist/esnext/components/Metafield/components/StarRating/index.js +1 -0
  154. package/dist/esnext/components/Metafield/components/index.d.ts +1 -0
  155. package/dist/esnext/components/Metafield/components/index.js +1 -0
  156. package/dist/esnext/components/Metafield/index.d.ts +3 -0
  157. package/dist/esnext/components/Metafield/index.js +1 -0
  158. package/dist/esnext/components/Metafield/types.d.ts +4 -0
  159. package/dist/esnext/components/Metafield/types.js +1 -0
  160. package/dist/esnext/components/Model3D/Model3D.client.d.ts +25 -0
  161. package/dist/esnext/components/Model3D/Model3D.client.js +30 -0
  162. package/dist/esnext/components/Model3D/Model3DFragment.d.ts +11 -0
  163. package/dist/esnext/components/Model3D/Model3DFragment.js +1 -0
  164. package/dist/esnext/components/Model3D/index.d.ts +1 -0
  165. package/dist/esnext/components/Model3D/index.js +1 -0
  166. package/dist/esnext/components/Money/Money.client.d.ts +7 -0
  167. package/dist/esnext/components/Money/Money.client.js +10 -0
  168. package/dist/esnext/components/Money/index.d.ts +1 -0
  169. package/dist/esnext/components/Money/index.js +1 -0
  170. package/dist/esnext/components/ProductDescription/ProductDescription.client.d.ts +3 -0
  171. package/dist/esnext/components/ProductDescription/ProductDescription.client.js +10 -0
  172. package/dist/esnext/components/ProductDescription/index.d.ts +1 -0
  173. package/dist/esnext/components/ProductDescription/index.js +1 -0
  174. package/dist/esnext/components/ProductMetafield/ProductMetafield.client.d.ts +7 -0
  175. package/dist/esnext/components/ProductMetafield/ProductMetafield.client.js +16 -0
  176. package/dist/esnext/components/ProductMetafield/index.d.ts +1 -0
  177. package/dist/esnext/components/ProductMetafield/index.js +1 -0
  178. package/dist/esnext/components/ProductPrice/ProductPrice.client.d.ts +7 -0
  179. package/dist/esnext/components/ProductPrice/ProductPrice.client.js +32 -0
  180. package/dist/esnext/components/ProductPrice/index.d.ts +1 -0
  181. package/dist/esnext/components/ProductPrice/index.js +1 -0
  182. package/dist/esnext/components/ProductProvider/ProductProvider.client.d.ts +7 -0
  183. package/dist/esnext/components/ProductProvider/ProductProvider.client.js +35 -0
  184. package/dist/esnext/components/ProductProvider/ProductProviderFragment.d.ts +96 -0
  185. package/dist/esnext/components/ProductProvider/ProductProviderFragment.js +1 -0
  186. package/dist/esnext/components/ProductProvider/context.d.ts +13 -0
  187. package/dist/esnext/components/ProductProvider/context.js +2 -0
  188. package/dist/esnext/components/ProductProvider/hooks.d.ts +1 -0
  189. package/dist/esnext/components/ProductProvider/hooks.js +6 -0
  190. package/dist/esnext/components/ProductProvider/index.d.ts +2 -0
  191. package/dist/esnext/components/ProductProvider/index.js +2 -0
  192. package/dist/esnext/components/ProductProvider/types.d.ts +5 -0
  193. package/dist/esnext/components/ProductProvider/types.js +1 -0
  194. package/dist/esnext/components/ProductTitle/ProductTitle.client.d.ts +3 -0
  195. package/dist/esnext/components/ProductTitle/ProductTitle.client.js +11 -0
  196. package/dist/esnext/components/ProductTitle/index.d.ts +1 -0
  197. package/dist/esnext/components/ProductTitle/index.js +1 -0
  198. package/dist/esnext/components/RawHtml/RawHtml.d.ts +7 -0
  199. package/dist/esnext/components/RawHtml/RawHtml.js +13 -0
  200. package/dist/esnext/components/RawHtml/index.d.ts +1 -0
  201. package/dist/esnext/components/RawHtml/index.js +1 -0
  202. package/dist/esnext/components/SelectedVariantAddToCartButton/SelectedVariantAddToCartButton.client.d.ts +6 -0
  203. package/dist/esnext/components/SelectedVariantAddToCartButton/SelectedVariantAddToCartButton.client.js +12 -0
  204. package/dist/esnext/components/SelectedVariantAddToCartButton/index.d.ts +1 -0
  205. package/dist/esnext/components/SelectedVariantAddToCartButton/index.js +1 -0
  206. package/dist/esnext/components/SelectedVariantBuyNowButton/SelectedVariantBuyNowButton.d.ts +4 -0
  207. package/dist/esnext/components/SelectedVariantBuyNowButton/SelectedVariantBuyNowButton.js +12 -0
  208. package/dist/esnext/components/SelectedVariantBuyNowButton/index.d.ts +1 -0
  209. package/dist/esnext/components/SelectedVariantBuyNowButton/index.js +1 -0
  210. package/dist/esnext/components/SelectedVariantImage/SelectedVariantImage.client.d.ts +6 -0
  211. package/dist/esnext/components/SelectedVariantImage/SelectedVariantImage.client.js +12 -0
  212. package/dist/esnext/components/SelectedVariantImage/index.d.ts +1 -0
  213. package/dist/esnext/components/SelectedVariantImage/index.js +1 -0
  214. package/dist/esnext/components/SelectedVariantMetafield/SelectedVariantMetafield.client.d.ts +7 -0
  215. package/dist/esnext/components/SelectedVariantMetafield/SelectedVariantMetafield.client.js +15 -0
  216. package/dist/esnext/components/SelectedVariantMetafield/index.d.ts +1 -0
  217. package/dist/esnext/components/SelectedVariantMetafield/index.js +1 -0
  218. package/dist/esnext/components/SelectedVariantPrice/SelectedVariantPrice.client.d.ts +6 -0
  219. package/dist/esnext/components/SelectedVariantPrice/SelectedVariantPrice.client.js +18 -0
  220. package/dist/esnext/components/SelectedVariantPrice/index.d.ts +1 -0
  221. package/dist/esnext/components/SelectedVariantPrice/index.js +1 -0
  222. package/dist/esnext/components/SelectedVariantShopPayButton/SelectedVariantShopPayButton.client.d.ts +2 -0
  223. package/dist/esnext/components/SelectedVariantShopPayButton/SelectedVariantShopPayButton.client.js +12 -0
  224. package/dist/esnext/components/SelectedVariantShopPayButton/index.d.ts +1 -0
  225. package/dist/esnext/components/SelectedVariantShopPayButton/index.js +1 -0
  226. package/dist/esnext/components/SelectedVariantUnitPrice/SelectedVariantUnitPrice.client.d.ts +3 -0
  227. package/dist/esnext/components/SelectedVariantUnitPrice/SelectedVariantUnitPrice.client.js +12 -0
  228. package/dist/esnext/components/SelectedVariantUnitPrice/index.d.ts +1 -0
  229. package/dist/esnext/components/SelectedVariantUnitPrice/index.js +1 -0
  230. package/dist/esnext/components/ShopPayButton/ShopPayButton.client.d.ts +15 -0
  231. package/dist/esnext/components/ShopPayButton/ShopPayButton.client.js +32 -0
  232. package/dist/esnext/components/ShopPayButton/index.d.ts +1 -0
  233. package/dist/esnext/components/ShopPayButton/index.js +1 -0
  234. package/dist/esnext/components/UnitPrice/UnitPrice.client.d.ts +8 -0
  235. package/dist/esnext/components/UnitPrice/UnitPrice.client.js +16 -0
  236. package/dist/esnext/components/UnitPrice/index.d.ts +1 -0
  237. package/dist/esnext/components/UnitPrice/index.js +1 -0
  238. package/dist/esnext/components/Video/Video.d.ts +13 -0
  239. package/dist/esnext/components/Video/Video.js +8 -0
  240. package/dist/esnext/components/Video/VideoFragment.d.ts +11 -0
  241. package/dist/esnext/components/Video/VideoFragment.js +1 -0
  242. package/dist/esnext/components/Video/index.d.ts +1 -0
  243. package/dist/esnext/components/Video/index.js +1 -0
  244. package/dist/esnext/components/index.d.ts +41 -0
  245. package/dist/esnext/components/index.js +87 -0
  246. package/dist/esnext/components/types.d.ts +73 -0
  247. package/dist/esnext/components/types.js +10 -0
  248. package/dist/esnext/entry-client.d.ts +3 -0
  249. package/dist/esnext/entry-client.js +36 -0
  250. package/dist/esnext/entry-server.d.ts +3 -0
  251. package/dist/esnext/entry-server.js +286 -0
  252. package/dist/esnext/foundation/ClientMarker/ClientMarker.d.ts +10 -0
  253. package/dist/esnext/foundation/ClientMarker/ClientMarker.js +25 -0
  254. package/dist/esnext/foundation/ClientMarker/index.d.ts +1 -0
  255. package/dist/esnext/foundation/ClientMarker/index.js +1 -0
  256. package/dist/esnext/foundation/Hydration/Cache.client.d.ts +9 -0
  257. package/dist/esnext/foundation/Hydration/Cache.client.js +131 -0
  258. package/dist/esnext/foundation/Hydration/ClientComponents.server.d.ts +13 -0
  259. package/dist/esnext/foundation/Hydration/ClientComponents.server.js +18 -0
  260. package/dist/esnext/foundation/Hydration/Html.d.ts +5 -0
  261. package/dist/esnext/foundation/Hydration/Html.js +9 -0
  262. package/dist/esnext/foundation/Hydration/HydrationContext.server.d.ts +1 -0
  263. package/dist/esnext/foundation/Hydration/HydrationContext.server.js +2 -0
  264. package/dist/esnext/foundation/Hydration/ServerComponentRequest.server.d.ts +13 -0
  265. package/dist/esnext/foundation/Hydration/ServerComponentRequest.server.js +39 -0
  266. package/dist/esnext/foundation/Hydration/ServerComponentResponse.server.d.ts +18 -0
  267. package/dist/esnext/foundation/Hydration/ServerComponentResponse.server.js +35 -0
  268. package/dist/esnext/foundation/Hydration/react-utils.d.ts +5 -0
  269. package/dist/esnext/foundation/Hydration/react-utils.js +55 -0
  270. package/dist/esnext/foundation/Hydration/wire.server.d.ts +4 -0
  271. package/dist/esnext/foundation/Hydration/wire.server.js +75 -0
  272. package/dist/esnext/foundation/Hydration/writer.server.d.ts +14 -0
  273. package/dist/esnext/foundation/Hydration/writer.server.js +29 -0
  274. package/dist/esnext/foundation/Router/DefaultRoutes.d.ts +20 -0
  275. package/dist/esnext/foundation/Router/DefaultRoutes.js +54 -0
  276. package/dist/esnext/foundation/Router/ServerStateRouter.client.d.ts +6 -0
  277. package/dist/esnext/foundation/Router/ServerStateRouter.client.js +27 -0
  278. package/dist/esnext/foundation/Router/index.d.ts +1 -0
  279. package/dist/esnext/foundation/Router/index.js +1 -0
  280. package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.client.d.ts +11 -0
  281. package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.client.js +48 -0
  282. package/dist/esnext/foundation/ServerStateProvider/index.d.ts +1 -0
  283. package/dist/esnext/foundation/ServerStateProvider/index.js +1 -0
  284. package/dist/esnext/foundation/ShopifyProvider/ShopifyContext.d.ts +1 -0
  285. package/dist/esnext/foundation/ShopifyProvider/ShopifyContext.js +2 -0
  286. package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.d.ts +3 -0
  287. package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.js +11 -0
  288. package/dist/esnext/foundation/ShopifyProvider/ShopifyServerProvider.server.d.ts +8 -0
  289. package/dist/esnext/foundation/ShopifyProvider/ShopifyServerProvider.server.js +7 -0
  290. package/dist/esnext/foundation/ShopifyProvider/hooks.d.ts +2 -0
  291. package/dist/esnext/foundation/ShopifyProvider/hooks.js +9 -0
  292. package/dist/esnext/foundation/ShopifyProvider/index.d.ts +2 -0
  293. package/dist/esnext/foundation/ShopifyProvider/index.js +2 -0
  294. package/dist/esnext/foundation/ShopifyProvider/types.d.ts +12 -0
  295. package/dist/esnext/foundation/ShopifyProvider/types.js +1 -0
  296. package/dist/esnext/foundation/index.d.ts +4 -0
  297. package/dist/esnext/foundation/index.js +4 -0
  298. package/dist/esnext/framework/graphiql.d.ts +1 -0
  299. package/dist/esnext/framework/graphiql.js +39 -0
  300. package/dist/esnext/framework/middleware.d.ts +17 -0
  301. package/dist/esnext/framework/middleware.js +116 -0
  302. package/dist/esnext/framework/plugin.d.ts +3 -0
  303. package/dist/esnext/framework/plugin.js +14 -0
  304. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.d.ts +3 -0
  305. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.js +43 -0
  306. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +4 -0
  307. package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.js +28 -0
  308. package/dist/esnext/framework/plugins/vite-plugin-react-server-components-shim.d.ts +3 -0
  309. package/dist/esnext/framework/plugins/vite-plugin-react-server-components-shim.js +123 -0
  310. package/dist/esnext/framework/server-components.d.ts +12 -0
  311. package/dist/esnext/framework/server-components.js +72 -0
  312. package/dist/esnext/graphql/graphql-constants.d.ts +1295 -0
  313. package/dist/esnext/graphql/graphql-constants.js +2482 -0
  314. package/dist/esnext/graphql/types/types.d.ts +5583 -0
  315. package/dist/esnext/graphql/types/types.js +1414 -0
  316. package/dist/esnext/handle-event.d.ts +20 -0
  317. package/dist/esnext/handle-event.js +140 -0
  318. package/dist/esnext/handle-worker-event.d.ts +11 -0
  319. package/dist/esnext/handle-worker-event.js +14 -0
  320. package/dist/esnext/hooks/index.d.ts +5 -0
  321. package/dist/esnext/hooks/index.js +5 -0
  322. package/dist/esnext/hooks/useMeasurement/hooks.d.ts +9 -0
  323. package/dist/esnext/hooks/useMeasurement/hooks.js +13 -0
  324. package/dist/esnext/hooks/useMeasurement/index.d.ts +1 -0
  325. package/dist/esnext/hooks/useMeasurement/index.js +1 -0
  326. package/dist/esnext/hooks/useMoney/hooks.d.ts +11 -0
  327. package/dist/esnext/hooks/useMoney/hooks.js +33 -0
  328. package/dist/esnext/hooks/useMoney/index.d.ts +1 -0
  329. package/dist/esnext/hooks/useMoney/index.js +1 -0
  330. package/dist/esnext/hooks/useParsedMetafields/hooks.d.ts +3 -0
  331. package/dist/esnext/hooks/useParsedMetafields/hooks.js +15 -0
  332. package/dist/esnext/hooks/useParsedMetafields/index.d.ts +1 -0
  333. package/dist/esnext/hooks/useParsedMetafields/index.js +1 -0
  334. package/dist/esnext/hooks/useProductOptions/helpers.d.ts +4 -0
  335. package/dist/esnext/hooks/useProductOptions/helpers.js +33 -0
  336. package/dist/esnext/hooks/useProductOptions/index.d.ts +2 -0
  337. package/dist/esnext/hooks/useProductOptions/index.js +2 -0
  338. package/dist/esnext/hooks/useProductOptions/types.d.ts +50 -0
  339. package/dist/esnext/hooks/useProductOptions/types.js +1 -0
  340. package/dist/esnext/hooks/useProductOptions/useProductOptions.d.ts +23 -0
  341. package/dist/esnext/hooks/useProductOptions/useProductOptions.js +84 -0
  342. package/dist/esnext/hooks/useQuery/QueryProvider.d.ts +6 -0
  343. package/dist/esnext/hooks/useQuery/QueryProvider.js +13 -0
  344. package/dist/esnext/hooks/useQuery/hooks.d.ts +12 -0
  345. package/dist/esnext/hooks/useQuery/hooks.js +28 -0
  346. package/dist/esnext/hooks/useQuery/index.d.ts +2 -0
  347. package/dist/esnext/hooks/useQuery/index.js +2 -0
  348. package/dist/esnext/hooks/useShopQuery/hooks.d.ts +9 -0
  349. package/dist/esnext/hooks/useShopQuery/hooks.js +34 -0
  350. package/dist/esnext/hooks/useShopQuery/index.d.ts +1 -0
  351. package/dist/esnext/hooks/useShopQuery/index.js +1 -0
  352. package/dist/esnext/index.d.ts +9 -0
  353. package/dist/esnext/index.js +11 -0
  354. package/dist/esnext/types.d.ts +62 -0
  355. package/dist/esnext/types.js +1 -0
  356. package/dist/esnext/utilities/connections.d.ts +2 -0
  357. package/dist/esnext/utilities/connections.js +4 -0
  358. package/dist/esnext/utilities/environment.d.ts +2 -0
  359. package/dist/esnext/utilities/environment.js +2 -0
  360. package/dist/esnext/utilities/image_size.d.ts +17 -0
  361. package/dist/esnext/utilities/image_size.js +45 -0
  362. package/dist/esnext/utilities/index.d.ts +8 -0
  363. package/dist/esnext/utilities/index.js +8 -0
  364. package/dist/esnext/utilities/meaurement.d.ts +3 -0
  365. package/dist/esnext/utilities/meaurement.js +98 -0
  366. package/dist/esnext/utilities/metafields.d.ts +2 -0
  367. package/dist/esnext/utilities/metafields.js +32 -0
  368. package/dist/esnext/utilities/script_loader.d.ts +3 -0
  369. package/dist/esnext/utilities/script_loader.js +23 -0
  370. package/dist/esnext/utilities/suspense.d.ts +7 -0
  371. package/dist/esnext/utilities/suspense.js +32 -0
  372. package/dist/esnext/utilities/video_parameters.d.ts +47 -0
  373. package/dist/esnext/utilities/video_parameters.js +22 -0
  374. package/dist/esnext/version.d.ts +1 -0
  375. package/dist/esnext/version.js +1 -0
  376. package/dist/node/foundation/ClientMarker/ClientMarker.d.ts +10 -0
  377. package/dist/node/foundation/ClientMarker/ClientMarker.js +48 -0
  378. package/dist/node/foundation/ClientMarker/index.d.ts +1 -0
  379. package/dist/node/foundation/ClientMarker/index.js +13 -0
  380. package/dist/node/foundation/Hydration/HydrationContext.server.d.ts +1 -0
  381. package/dist/node/foundation/Hydration/HydrationContext.server.js +5 -0
  382. package/dist/node/foundation/Hydration/ServerComponentRequest.server.d.ts +13 -0
  383. package/dist/node/foundation/Hydration/ServerComponentRequest.server.js +43 -0
  384. package/dist/node/foundation/Hydration/ServerComponentResponse.server.d.ts +18 -0
  385. package/dist/node/foundation/Hydration/ServerComponentResponse.server.js +39 -0
  386. package/dist/node/foundation/Hydration/react-utils.d.ts +5 -0
  387. package/dist/node/foundation/Hydration/react-utils.js +63 -0
  388. package/dist/node/foundation/Router/DefaultRoutes.d.ts +20 -0
  389. package/dist/node/foundation/Router/DefaultRoutes.js +78 -0
  390. package/dist/node/foundation/Router/index.d.ts +1 -0
  391. package/dist/node/foundation/Router/index.js +5 -0
  392. package/dist/node/foundation/ShopifyProvider/ShopifyContext.d.ts +1 -0
  393. package/dist/node/foundation/ShopifyProvider/ShopifyContext.js +5 -0
  394. package/dist/node/foundation/ShopifyProvider/ShopifyProvider.d.ts +3 -0
  395. package/dist/node/foundation/ShopifyProvider/ShopifyProvider.js +34 -0
  396. package/dist/node/foundation/ShopifyProvider/ShopifyServerProvider.server.d.ts +8 -0
  397. package/dist/node/foundation/ShopifyProvider/ShopifyServerProvider.server.js +14 -0
  398. package/dist/node/foundation/ShopifyProvider/hooks.d.ts +2 -0
  399. package/dist/node/foundation/ShopifyProvider/hooks.js +13 -0
  400. package/dist/node/foundation/ShopifyProvider/index.d.ts +2 -0
  401. package/dist/node/foundation/ShopifyProvider/index.js +8 -0
  402. package/dist/node/foundation/ShopifyProvider/types.d.ts +12 -0
  403. package/dist/node/foundation/ShopifyProvider/types.js +2 -0
  404. package/dist/node/foundation/index.d.ts +4 -0
  405. package/dist/node/foundation/index.js +13 -0
  406. package/dist/node/framework/graphiql.d.ts +1 -0
  407. package/dist/node/framework/graphiql.js +43 -0
  408. package/dist/node/framework/middleware.d.ts +17 -0
  409. package/dist/node/framework/middleware.js +141 -0
  410. package/dist/node/framework/plugin.d.ts +3 -0
  411. package/dist/node/framework/plugin.js +19 -0
  412. package/dist/node/framework/plugins/vite-plugin-hydrogen-config.d.ts +3 -0
  413. package/dist/node/framework/plugins/vite-plugin-hydrogen-config.js +45 -0
  414. package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +4 -0
  415. package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.js +33 -0
  416. package/dist/node/framework/plugins/vite-plugin-react-server-components-shim.d.ts +3 -0
  417. package/dist/node/framework/plugins/vite-plugin-react-server-components-shim.js +128 -0
  418. package/dist/node/framework/server-components.d.ts +12 -0
  419. package/dist/node/framework/server-components.js +77 -0
  420. package/dist/node/graphql/types/types.d.ts +5583 -0
  421. package/dist/node/graphql/types/types.js +1417 -0
  422. package/dist/node/handle-event.d.ts +20 -0
  423. package/dist/node/handle-event.js +143 -0
  424. package/dist/node/hooks/useQuery/QueryProvider.d.ts +6 -0
  425. package/dist/node/hooks/useQuery/QueryProvider.js +20 -0
  426. package/dist/node/hooks/useQuery/hooks.d.ts +12 -0
  427. package/dist/node/hooks/useQuery/hooks.js +32 -0
  428. package/dist/node/hooks/useQuery/index.d.ts +2 -0
  429. package/dist/node/hooks/useQuery/index.js +14 -0
  430. package/dist/node/types.d.ts +62 -0
  431. package/dist/node/types.js +2 -0
  432. package/dist/worker/foundation/Hydration/ServerComponentRequest.server.d.ts +13 -0
  433. package/dist/worker/foundation/Hydration/ServerComponentRequest.server.js +39 -0
  434. package/dist/worker/foundation/Hydration/ServerComponentResponse.server.d.ts +18 -0
  435. package/dist/worker/foundation/Hydration/ServerComponentResponse.server.js +35 -0
  436. package/dist/worker/graphql/types/types.d.ts +5583 -0
  437. package/dist/worker/graphql/types/types.js +1414 -0
  438. package/dist/worker/handle-event.d.ts +20 -0
  439. package/dist/worker/handle-event.js +140 -0
  440. package/dist/worker/handle-worker-event.d.ts +11 -0
  441. package/dist/worker/handle-worker-event.js +14 -0
  442. package/dist/worker/types.d.ts +62 -0
  443. package/dist/worker/types.js +1 -0
  444. package/entry-client.d.ts +1 -0
  445. package/entry-client.js +1 -0
  446. package/entry-server.d.ts +1 -0
  447. package/entry-server.js +1 -0
  448. package/marker.js +1 -0
  449. package/middleware.d.ts +1 -0
  450. package/middleware.js +1 -0
  451. package/package.json +98 -0
  452. package/plugin.d.ts +1 -0
  453. package/plugin.js +1 -0
  454. package/worker.js +1 -0
@@ -0,0 +1,116 @@
1
+ import { graphiqlHtml } from './graphiql';
2
+ import handleEvent from '../handle-event';
3
+ /**
4
+ * Provides middleware to Node.js Express-like servers. Used by the Hydrogen
5
+ * Vite dev server plugin as well as production Node.js implementation.
6
+ */
7
+ export default function hydrogenMiddleware({ dev, shopifyConfig, indexTemplate, getServerEntrypoint, devServer, }) {
8
+ return async function (request, response, next) {
9
+ const graphiqlRequest = dev && isGraphiqlRequest(request);
10
+ if (graphiqlRequest) {
11
+ return respondWithGraphiql(response, shopifyConfig);
12
+ }
13
+ const url = new URL('http://' + request.headers.host + request.originalUrl);
14
+ const isReactHydrationRequest = url.pathname === '/react';
15
+ /**
16
+ * If it's a dev environment, it's assumed that Vite's dev server is handling
17
+ * any static or JS requests, so we need to ensure that we don't try to handle them.
18
+ *
19
+ * If it's a product environment, it's assumed that the developer is handling
20
+ * static requests with e.g. static middleware.
21
+ */
22
+ if (dev && !shouldInterceptRequest(request, isReactHydrationRequest)) {
23
+ return next();
24
+ }
25
+ try {
26
+ /**
27
+ * We're running in the Node.js runtime without access to `fetch`,
28
+ * which is needed for proxy requests and server-side API requests.
29
+ */
30
+ if (!globalThis.fetch) {
31
+ const fetch = await import('node-fetch');
32
+ // @ts-ignore
33
+ globalThis.fetch = fetch.default;
34
+ // @ts-ignore
35
+ globalThis.Request = fetch.Request;
36
+ // @ts-ignore
37
+ globalThis.Response = fetch.Response;
38
+ // @ts-ignore
39
+ globalThis.Headers = fetch.Headers;
40
+ }
41
+ /**
42
+ * Dynamically import ServerComponentResponse after the `fetch`
43
+ * polyfill has loaded above.
44
+ */
45
+ const { ServerComponentRequest } = await import('../foundation/Hydration/ServerComponentRequest.server');
46
+ const eventResponse = await handleEvent(
47
+ /**
48
+ * Mimic a `FetchEvent`
49
+ */
50
+ {}, {
51
+ request: new ServerComponentRequest(request),
52
+ entrypoint: await getServerEntrypoint(),
53
+ indexTemplate,
54
+ streamableResponse: response,
55
+ dev,
56
+ });
57
+ /**
58
+ * If a `Response` was returned, that means it was not streamed.
59
+ * Convert the response into a proper Node.js response.
60
+ */
61
+ if (eventResponse) {
62
+ eventResponse.headers.forEach((value, key) => {
63
+ response.setHeader(key, value);
64
+ });
65
+ response.statusCode = eventResponse.status;
66
+ response.end(eventResponse.body);
67
+ }
68
+ }
69
+ catch (e) {
70
+ if (dev && devServer)
71
+ devServer.ssrFixStacktrace(e);
72
+ console.log(e.stack);
73
+ response.statusCode = 500;
74
+ /**
75
+ * Attempt to print the error stack within the template.
76
+ * This allows the react-refresh plugin and other Vite runtime helpers
77
+ * to display the error and auto-refresh when the error is fixed, instead
78
+ * of a white screen that needs a manual refresh.
79
+ */
80
+ try {
81
+ const template = typeof indexTemplate === 'function'
82
+ ? await indexTemplate(url.toString())
83
+ : indexTemplate;
84
+ const html = template.replace(`<div id="root"></div>`, `<div id="root"><pre><code>${e.stack}</code></pre></div>`);
85
+ response.write(html);
86
+ next(e);
87
+ }
88
+ catch (_e) {
89
+ // If template loading is the culprit, give up and just return the error stack.
90
+ response.write(e.stack);
91
+ next(e);
92
+ }
93
+ }
94
+ };
95
+ }
96
+ function shouldInterceptRequest(request, isReactHydrationRequest) {
97
+ var _a;
98
+ return ((((_a = request.headers['accept']) === null || _a === void 0 ? void 0 : _a.includes('text/html')) ||
99
+ isReactHydrationRequest) &&
100
+ request.method === 'GET' &&
101
+ request.url !== '/favicon.ico');
102
+ }
103
+ /**
104
+ * /graphiql and /___graphql are supported
105
+ */
106
+ function isGraphiqlRequest(request) {
107
+ return /^\/(?:_{3})?graphi?ql/.test(request.url || '');
108
+ }
109
+ async function respondWithGraphiql(response, shopifyConfig) {
110
+ if (!shopifyConfig) {
111
+ throw new Error("You must provide shopifyConfig to Hydrogen's Vite middleware");
112
+ }
113
+ const { storeDomain, storefrontToken, graphqlApiVersion } = shopifyConfig;
114
+ response.setHeader('Content-Type', 'text/html');
115
+ response.end(graphiqlHtml(storeDomain, storefrontToken, graphqlApiVersion));
116
+ }
@@ -0,0 +1,3 @@
1
+ import { ShopifyConfig } from '../types';
2
+ declare const _default: (shopifyConfig: ShopifyConfig) => ("" | import("vite").Plugin | import("vite").PluginOption[] | undefined)[];
3
+ export default _default;
@@ -0,0 +1,14 @@
1
+ import hydrogenConfig from './plugins/vite-plugin-hydrogen-config';
2
+ import hydrogenMiddleware from './plugins/vite-plugin-hydrogen-middleware';
3
+ import reactServerComponentShim from './plugins/vite-plugin-react-server-components-shim';
4
+ import inspect from 'vite-plugin-inspect';
5
+ import react from '@vitejs/plugin-react';
6
+ export default (shopifyConfig) => {
7
+ return [
8
+ process.env.VITE_INSPECT && inspect(),
9
+ hydrogenConfig(),
10
+ hydrogenMiddleware(shopifyConfig),
11
+ reactServerComponentShim(),
12
+ react(),
13
+ ];
14
+ };
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from 'vite';
2
+ declare const _default: () => Plugin;
3
+ export default _default;
@@ -0,0 +1,43 @@
1
+ export default () => {
2
+ return {
3
+ name: 'vite-plugin-hydrogen-config',
4
+ config: () => ({
5
+ resolve: {
6
+ alias: {
7
+ /**
8
+ * For some reason, when building in a worker, Vite always
9
+ * pulls the client version instead of the server version of these
10
+ * dependencies. We intentially force it to load the server versions.
11
+ */
12
+ 'html-dom-parser': process.env.WORKER
13
+ ? 'html-dom-parser/lib/server/html-to-dom'
14
+ : 'html-dom-parser',
15
+ },
16
+ },
17
+ build: {
18
+ sourcemap: true,
19
+ },
20
+ ssr: {
21
+ external: ['isomorphic-dompurify'],
22
+ /**
23
+ * Tell Vite to bundle everything when we're building for Workers.
24
+ */
25
+ noExternal: Boolean(process.env.WORKER),
26
+ target: process.env.WORKER ? 'webworker' : 'node',
27
+ },
28
+ optimizeDeps: {
29
+ /**
30
+ * Additionally, the following dependencies have trouble loading the
31
+ * correct version of the dependency (server vs client). This tells Vite to take the
32
+ * server versions and optimize them for ESM.
33
+ */
34
+ include: [
35
+ 'html-dom-parser',
36
+ 'html-react-parser',
37
+ 'focus-trap-react',
38
+ 'react-helmet-async',
39
+ ],
40
+ },
41
+ }),
42
+ };
43
+ };
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from 'vite';
2
+ import { ShopifyConfig } from '../../types';
3
+ declare const _default: (shopifyConfig: ShopifyConfig) => Plugin;
4
+ export default _default;
@@ -0,0 +1,28 @@
1
+ import path from 'path';
2
+ import { promises as fs } from 'fs';
3
+ import hydrogenMiddleware from '../middleware';
4
+ export default (shopifyConfig) => {
5
+ return {
6
+ name: 'vite-plugin-hydrogen-middleware',
7
+ /**
8
+ * By adding a middleware to the Vite dev server, we can handle SSR without needing
9
+ * a custom node script. It works by handling any requests for `text/html` documents,
10
+ * loading them in an SSR context, rendering them using the `entry-server` endpoint in the
11
+ * user's project, and injecting the static HTML into the template.
12
+ */
13
+ configureServer(server) {
14
+ const resolve = (p) => path.resolve(server.config.root, p);
15
+ async function getIndexTemplate(url) {
16
+ const indexHtml = await fs.readFile(resolve('index.html'), 'utf-8');
17
+ return await server.transformIndexHtml(url, indexHtml);
18
+ }
19
+ server.middlewares.use(hydrogenMiddleware({
20
+ dev: true,
21
+ shopifyConfig,
22
+ indexTemplate: getIndexTemplate,
23
+ getServerEntrypoint: async () => await server.ssrLoadModule(resolve('./src/entry-server')),
24
+ devServer: server,
25
+ }));
26
+ },
27
+ };
28
+ };
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from 'vite';
2
+ declare const _default: () => Plugin;
3
+ export default _default;
@@ -0,0 +1,123 @@
1
+ import path from 'path';
2
+ import { promises as fs } from 'fs';
3
+ import glob from 'fast-glob';
4
+ import { tagClientComponents, wrapClientComponents } from '../server-components';
5
+ export default () => {
6
+ let config;
7
+ let clientManifest;
8
+ return {
9
+ name: 'vite-plugin-react-server-components-shim',
10
+ enforce: 'pre',
11
+ configResolved(_config) {
12
+ config = _config;
13
+ },
14
+ buildStart() {
15
+ var _a;
16
+ if (config.build.ssr || config.command !== 'build')
17
+ return;
18
+ /**
19
+ * By default, it's assumed the path to Hydrogen components is adjacent to the config
20
+ * in node_modules. However, in the case of the Yarn monorepo (or E2E tests), this
21
+ * path needs to be customized. We use an environment variable in that case.
22
+ */
23
+ const hydrogenComponentPath = (_a = process.env.HYDROGEN_PATH) !== null && _a !== void 0 ? _a : './node_modules/@shopify/hydrogen';
24
+ /**
25
+ * Grab each of the client components in this project and emit them as chunks.
26
+ * This allows us to dynamically import them later during partial hydration in production.
27
+ */
28
+ const clientComponents = glob
29
+ .sync(path.resolve(config.root, './src/**/*.client.(j|t)sx'))
30
+ .concat(glob.sync(path.resolve(config.root, hydrogenComponentPath, 'dist/esnext/**/*.client.js')));
31
+ clientComponents.forEach((id) => {
32
+ this.emitFile({
33
+ type: 'chunk',
34
+ id,
35
+ preserveSignature: 'strict',
36
+ });
37
+ });
38
+ },
39
+ async resolveId(source, importer) {
40
+ if (!importer)
41
+ return null;
42
+ /**
43
+ * Throw errors when non-Server Components try to load Server Components.
44
+ */
45
+ if (/\.server(\.(j|t)sx?)?$/.test(source) &&
46
+ !/\.server\.(j|t)sx?$/.test(importer) &&
47
+ // Ignore entrypoints, index re-exports, ClientMarker, handle-worker-event
48
+ !/(entry-server\.(j|t)sx?|index\.(html|js)|ClientMarker\.js|handle-worker-event\.js)$/.test(importer)) {
49
+ throw new Error(`Cannot import ${source} from "${importer}". ` +
50
+ 'By convention, Server Components can only be imported from other Server Component files. ' +
51
+ 'That way nobody accidentally sends these to the client by indirectly importing it.');
52
+ }
53
+ /**
54
+ * Throw errors when Client Components try to load Hydrogen components from the
55
+ * server-only entrypoint.
56
+ */
57
+ if (/@shopify\/hydrogen$/.test(source) &&
58
+ /\.client\.(j|t)sx?$/.test(importer)) {
59
+ throw new Error(`Cannot import @shopify/hydrogen from "${importer}". ` +
60
+ 'When using Hydrogen components within Client Components, use the `@shopify/hydrogen/client` entrypoint instead.');
61
+ }
62
+ },
63
+ transform(src, id, ssr) {
64
+ if (!ssr)
65
+ return null;
66
+ /**
67
+ * When a server component imports a client component, tag a `?fromServer`
68
+ * identifier at the end of the import to indicate that we should transform
69
+ * it with a ClientMarker (below).
70
+ *
71
+ * We are manually passing `@shopify/hydrogen/client` as an additional "from"
72
+ * identifier to allow local Server Components to import them as tagged Client Components.
73
+ * We should also accept this as a plugin argument for other third-party packages.
74
+ */
75
+ if (/\.server\.(j|t)sx?$/.test(id)) {
76
+ return tagClientComponents(src);
77
+ }
78
+ },
79
+ async load(id, ssr) {
80
+ if (!ssr)
81
+ return null;
82
+ /**
83
+ * Client components being loaded from server components need to be
84
+ * wrapped in a ClientMarker so we can serialize their props and
85
+ * dynamically load them in the browser.
86
+ */
87
+ if (id.includes('?fromServer')) {
88
+ return await wrapClientComponents({
89
+ id,
90
+ getManifestFile: getFileFromClientManifest,
91
+ root: config.root,
92
+ isBuild: config.command === 'build',
93
+ });
94
+ }
95
+ return null;
96
+ },
97
+ };
98
+ async function getFileFromClientManifest(manifestId) {
99
+ const manifest = await getClientManifest();
100
+ const fileName = '/' + manifestId.split('/').pop();
101
+ const matchingKey = Object.keys(manifest).find((key) => key.endsWith(fileName));
102
+ if (!matchingKey) {
103
+ throw new Error(`Could not find a matching entry in the manifest for: ${manifestId}`);
104
+ }
105
+ return manifest[matchingKey].file;
106
+ }
107
+ async function getClientManifest() {
108
+ if (config.command !== 'build') {
109
+ return {};
110
+ }
111
+ if (clientManifest)
112
+ return clientManifest;
113
+ try {
114
+ const manifest = JSON.parse(await fs.readFile(path.resolve(config.root, './dist/client/manifest.json'), 'utf-8'));
115
+ clientManifest = manifest;
116
+ return manifest;
117
+ }
118
+ catch (e) {
119
+ console.error(`Failed to load client manifest:`);
120
+ console.error(e);
121
+ }
122
+ }
123
+ };
@@ -0,0 +1,12 @@
1
+ export declare function wrapClientComponents({ id, getManifestFile, root, isBuild, }: {
2
+ id: string;
3
+ getManifestFile: (manifestId: string) => Promise<string>;
4
+ root: string;
5
+ isBuild: boolean;
6
+ }): Promise<string>;
7
+ export declare function tagClientComponents(src: string, additionalReferences?: Array<string | RegExp>): {
8
+ code: string;
9
+ map: {
10
+ mappings: string;
11
+ };
12
+ };
@@ -0,0 +1,72 @@
1
+ export async function wrapClientComponents({ id, getManifestFile, root, isBuild, }) {
2
+ const normalizedId = id.slice(0, id.indexOf('?fromServer'));
3
+ const manifestId = normalizedId.replace(root, '');
4
+ const name = id.split('/').pop().split('.').shift();
5
+ /**
6
+ * ?fromServer can designate named exports as a comma-separated list.
7
+ * ?fromServer=Foo,Bar
8
+ *
9
+ * Re-named exports are also supported:
10
+ * ?fromServer=Foo:Baz,Bar
11
+ */
12
+ const names = id.includes('?fromServer=')
13
+ ? id
14
+ .slice(id.indexOf('?fromServer=') + '?fromServer='.length)
15
+ .split(',')
16
+ .map((name) => name.split(':').shift())
17
+ : [];
18
+ /**
19
+ * Determine the id of the chunk to be imported. If we're building
20
+ * the production bundle, we need to reference the chunk generated
21
+ * during the client manifest. Otherwise, we can pass the normalizedId
22
+ * and Vite's dev server will load it as expected.
23
+ */
24
+ const importId = isBuild
25
+ ? '/' + (await getManifestFile(manifestId))
26
+ : normalizedId;
27
+ const isNamedExport = names.length > 0;
28
+ let code = `import React from 'react';
29
+ import {ClientMarker} from '@shopify/hydrogen/marker';`;
30
+ if (!isNamedExport) {
31
+ code += `
32
+ import _Component from '${normalizedId}';
33
+
34
+ export default function _ClientComponent(props) {
35
+ return React.createElement(ClientMarker, { name: '${name}', id: '${importId}', props, component: _Component, named: false });
36
+ }
37
+ export * from '${normalizedId}';`;
38
+ }
39
+ else {
40
+ code += `
41
+ import {${names
42
+ .map((name, idx) => name + ' as ' + `_Component${idx}`)
43
+ .join(', ')}} from '${normalizedId}';`;
44
+ names.forEach((name, idx) => {
45
+ code += `\n
46
+ export function ${name}(props) {
47
+ return React.createElement(ClientMarker, { name: '${name}', id: '${importId}', props, component: _Component${idx}, named: true });
48
+ }`;
49
+ });
50
+ }
51
+ return code;
52
+ }
53
+ export function tagClientComponents(src, additionalReferences = []) {
54
+ const modulePatterns = [/[\w\/\.]+\.client(?:\.(?:j|t)sx?)?/]
55
+ // @ts-ignore
56
+ .concat(additionalReferences)
57
+ .map((pattern) => (pattern instanceof RegExp ? pattern.source : pattern));
58
+ const fromModulePattern = modulePatterns.join('|');
59
+ /**
60
+ * Default exports
61
+ * @see https://rubular.com/r/XZjsrolet5twvB
62
+ */
63
+ let regex = new RegExp(`import\\s*\\w*\\s*from\\s*(?:'|")(?:(${fromModulePattern}))`, 'g');
64
+ let code = src.replace(regex, (mod) => mod + '?fromServer');
65
+ /**
66
+ * Named exports
67
+ * @see https://rubular.com/r/6qdREcs4T9Nw1e
68
+ */
69
+ regex = new RegExp(`import\\s*{([\\w\\s,]+)}\\s*from\\s*(?:'|")(?:(${fromModulePattern}))`, 'g');
70
+ code = code.replace(regex, (mod, imports) => `${mod}?fromServer=${imports.replace(/ as /g, ':').replace(/ /g, '')}`);
71
+ return { code, map: { mappings: '' } };
72
+ }