@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.
- package/README.md +29 -0
- package/client.d.ts +1 -0
- package/client.js +1 -0
- package/dist/esnext/client.d.ts +7 -0
- package/dist/esnext/client.js +7 -0
- package/dist/esnext/components/AddToCartButton/AddToCartButton.client.d.ts +15 -0
- package/dist/esnext/components/AddToCartButton/AddToCartButton.client.js +44 -0
- package/dist/esnext/components/AddToCartButton/index.d.ts +1 -0
- package/dist/esnext/components/AddToCartButton/index.js +1 -0
- package/dist/esnext/components/BuyNowButton/BuyNowButton.d.ts +12 -0
- package/dist/esnext/components/BuyNowButton/BuyNowButton.js +29 -0
- package/dist/esnext/components/BuyNowButton/index.d.ts +1 -0
- package/dist/esnext/components/BuyNowButton/index.js +1 -0
- package/dist/esnext/components/CartCheckoutButton/CartCheckoutButton.client.d.ts +7 -0
- package/dist/esnext/components/CartCheckoutButton/CartCheckoutButton.client.js +14 -0
- package/dist/esnext/components/CartCheckoutButton/index.d.ts +1 -0
- package/dist/esnext/components/CartCheckoutButton/index.js +1 -0
- package/dist/esnext/components/CartContainer/CartContainer.client.d.ts +9 -0
- package/dist/esnext/components/CartContainer/CartContainer.client.js +24 -0
- package/dist/esnext/components/CartContainer/index.d.ts +1 -0
- package/dist/esnext/components/CartContainer/index.js +1 -0
- package/dist/esnext/components/CartLineAttributes/CartLineAttributes.client.d.ts +10 -0
- package/dist/esnext/components/CartLineAttributes/CartLineAttributes.client.js +9 -0
- package/dist/esnext/components/CartLineAttributes/index.d.ts +1 -0
- package/dist/esnext/components/CartLineAttributes/index.js +1 -0
- package/dist/esnext/components/CartLineImage/CartLineImage.client.d.ts +6 -0
- package/dist/esnext/components/CartLineImage/CartLineImage.client.js +8 -0
- package/dist/esnext/components/CartLineImage/index.d.ts +1 -0
- package/dist/esnext/components/CartLineImage/index.js +1 -0
- package/dist/esnext/components/CartLinePrice/CartLinePrice.client.d.ts +6 -0
- package/dist/esnext/components/CartLinePrice/CartLinePrice.client.js +17 -0
- package/dist/esnext/components/CartLinePrice/index.d.ts +1 -0
- package/dist/esnext/components/CartLinePrice/index.js +1 -0
- package/dist/esnext/components/CartLineProductTitle/CartLineProductTitle.client.d.ts +3 -0
- package/dist/esnext/components/CartLineProductTitle/CartLineProductTitle.client.js +8 -0
- package/dist/esnext/components/CartLineProductTitle/index.d.ts +1 -0
- package/dist/esnext/components/CartLineProductTitle/index.js +1 -0
- package/dist/esnext/components/CartLineProvider/CartLineProvider.client.d.ts +6 -0
- package/dist/esnext/components/CartLineProvider/CartLineProvider.client.js +5 -0
- package/dist/esnext/components/CartLineProvider/context.d.ts +26 -0
- package/dist/esnext/components/CartLineProvider/context.js +2 -0
- package/dist/esnext/components/CartLineProvider/hooks.d.ts +26 -0
- package/dist/esnext/components/CartLineProvider/hooks.js +9 -0
- package/dist/esnext/components/CartLineProvider/index.d.ts +2 -0
- package/dist/esnext/components/CartLineProvider/index.js +2 -0
- package/dist/esnext/components/CartLineQuantity/CartLineQuantity.client.d.ts +3 -0
- package/dist/esnext/components/CartLineQuantity/CartLineQuantity.client.js +8 -0
- package/dist/esnext/components/CartLineQuantity/index.d.ts +1 -0
- package/dist/esnext/components/CartLineQuantity/index.js +1 -0
- package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.d.ts +8 -0
- package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.js +17 -0
- package/dist/esnext/components/CartLineQuantityAdjustButton/index.d.ts +1 -0
- package/dist/esnext/components/CartLineQuantityAdjustButton/index.js +1 -0
- package/dist/esnext/components/CartLineSelectedOptions/CartLineSelectedOptions.client.d.ts +10 -0
- package/dist/esnext/components/CartLineSelectedOptions/CartLineSelectedOptions.client.js +9 -0
- package/dist/esnext/components/CartLineSelectedOptions/index.d.ts +1 -0
- package/dist/esnext/components/CartLineSelectedOptions/index.js +1 -0
- package/dist/esnext/components/CartLines/CartLines.d.ts +7 -0
- package/dist/esnext/components/CartLines/CartLines.js +15 -0
- package/dist/esnext/components/CartLines/index.d.ts +1 -0
- package/dist/esnext/components/CartLines/index.js +1 -0
- package/dist/esnext/components/CartProvider/CartProvider.client.d.ts +7 -0
- package/dist/esnext/components/CartProvider/CartProvider.client.js +422 -0
- package/dist/esnext/components/CartProvider/CartServerProvider.server.d.ts +11 -0
- package/dist/esnext/components/CartProvider/CartServerProvider.server.js +20 -0
- package/dist/esnext/components/CartProvider/constants.d.ts +2 -0
- package/dist/esnext/components/CartProvider/constants.js +2 -0
- package/dist/esnext/components/CartProvider/context.d.ts +2 -0
- package/dist/esnext/components/CartProvider/context.js +2 -0
- package/dist/esnext/components/CartProvider/graphql/CartAttributesUpdateMutation.d.ts +18 -0
- package/dist/esnext/components/CartProvider/graphql/CartAttributesUpdateMutation.js +1 -0
- package/dist/esnext/components/CartProvider/graphql/CartBuyerIdentityUpdateMutation.d.ts +18 -0
- package/dist/esnext/components/CartProvider/graphql/CartBuyerIdentityUpdateMutation.js +1 -0
- package/dist/esnext/components/CartProvider/graphql/CartCreateMutation.d.ts +17 -0
- package/dist/esnext/components/CartProvider/graphql/CartCreateMutation.js +1 -0
- package/dist/esnext/components/CartProvider/graphql/CartDiscountCodesUpdateMutation.d.ts +18 -0
- package/dist/esnext/components/CartProvider/graphql/CartDiscountCodesUpdateMutation.js +1 -0
- package/dist/esnext/components/CartProvider/graphql/CartFragment.d.ts +68 -0
- package/dist/esnext/components/CartProvider/graphql/CartFragment.js +1 -0
- package/dist/esnext/components/CartProvider/graphql/CartLineAddMutation.d.ts +18 -0
- package/dist/esnext/components/CartProvider/graphql/CartLineAddMutation.js +1 -0
- package/dist/esnext/components/CartProvider/graphql/CartLineRemoveMutation.d.ts +18 -0
- package/dist/esnext/components/CartProvider/graphql/CartLineRemoveMutation.js +1 -0
- package/dist/esnext/components/CartProvider/graphql/CartLineUpdateMutation.d.ts +18 -0
- package/dist/esnext/components/CartProvider/graphql/CartLineUpdateMutation.js +1 -0
- package/dist/esnext/components/CartProvider/graphql/CartNoteUpdateMutation.d.ts +18 -0
- package/dist/esnext/components/CartProvider/graphql/CartNoteUpdateMutation.js +1 -0
- package/dist/esnext/components/CartProvider/graphql/CartQuery.d.ts +13 -0
- package/dist/esnext/components/CartProvider/graphql/CartQuery.js +1 -0
- package/dist/esnext/components/CartProvider/hooks.d.ts +18 -0
- package/dist/esnext/components/CartProvider/hooks.js +79 -0
- package/dist/esnext/components/CartProvider/index.d.ts +4 -0
- package/dist/esnext/components/CartProvider/index.js +4 -0
- package/dist/esnext/components/CartProvider/types.d.ts +105 -0
- package/dist/esnext/components/CartProvider/types.js +1 -0
- package/dist/esnext/components/CartShopPayButton/CartShopPayButton.client.d.ts +2 -0
- package/dist/esnext/components/CartShopPayButton/CartShopPayButton.client.js +10 -0
- package/dist/esnext/components/CartShopPayButton/index.d.ts +1 -0
- package/dist/esnext/components/CartShopPayButton/index.js +1 -0
- package/dist/esnext/components/CartToggle/CartToggle.client.d.ts +8 -0
- package/dist/esnext/components/CartToggle/CartToggle.client.js +11 -0
- package/dist/esnext/components/CartToggle/index.d.ts +1 -0
- package/dist/esnext/components/CartToggle/index.js +1 -0
- package/dist/esnext/components/CartTotal/CartTotal.client.d.ts +3 -0
- package/dist/esnext/components/CartTotal/CartTotal.client.js +8 -0
- package/dist/esnext/components/CartTotal/index.d.ts +1 -0
- package/dist/esnext/components/CartTotal/index.js +1 -0
- package/dist/esnext/components/CartUIProvider/CartUIProvider.client.d.ts +5 -0
- package/dist/esnext/components/CartUIProvider/CartUIProvider.client.js +26 -0
- package/dist/esnext/components/CartUIProvider/context.d.ts +9 -0
- package/dist/esnext/components/CartUIProvider/context.js +2 -0
- package/dist/esnext/components/CartUIProvider/hooks.d.ts +1 -0
- package/dist/esnext/components/CartUIProvider/hooks.js +9 -0
- package/dist/esnext/components/CartUIProvider/index.d.ts +2 -0
- package/dist/esnext/components/CartUIProvider/index.js +2 -0
- package/dist/esnext/components/ExternalVideo/ExternalVideo.d.ts +14 -0
- package/dist/esnext/components/ExternalVideo/ExternalVideo.js +9 -0
- package/dist/esnext/components/ExternalVideo/ExternalVideoFragment.d.ts +4 -0
- package/dist/esnext/components/ExternalVideo/ExternalVideoFragment.js +1 -0
- package/dist/esnext/components/ExternalVideo/index.d.ts +1 -0
- package/dist/esnext/components/ExternalVideo/index.js +1 -0
- package/dist/esnext/components/Image/Image.d.ts +14 -0
- package/dist/esnext/components/Image/Image.js +10 -0
- package/dist/esnext/components/Image/ImageFragment.d.ts +4 -0
- package/dist/esnext/components/Image/ImageFragment.js +1 -0
- package/dist/esnext/components/Image/index.d.ts +1 -0
- package/dist/esnext/components/Image/index.js +1 -0
- package/dist/esnext/components/LocalizationProvider/LocalizationClientProvider.client.d.ts +6 -0
- package/dist/esnext/components/LocalizationProvider/LocalizationClientProvider.client.js +14 -0
- package/dist/esnext/components/LocalizationProvider/LocalizationContext.client.d.ts +8 -0
- package/dist/esnext/components/LocalizationProvider/LocalizationContext.client.js +2 -0
- package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.d.ts +4 -0
- package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.js +8 -0
- package/dist/esnext/components/LocalizationProvider/LocalizationQuery.d.ts +18 -0
- package/dist/esnext/components/LocalizationProvider/LocalizationQuery.js +1 -0
- package/dist/esnext/components/LocalizationProvider/hooks.d.ts +8 -0
- package/dist/esnext/components/LocalizationProvider/hooks.js +17 -0
- package/dist/esnext/components/LocalizationProvider/index.d.ts +2 -0
- package/dist/esnext/components/LocalizationProvider/index.js +2 -0
- package/dist/esnext/components/MediaFile/MediaFile.d.ts +19 -0
- package/dist/esnext/components/MediaFile/MediaFile.js +22 -0
- package/dist/esnext/components/MediaFile/MediaFileFragment.d.ts +22 -0
- package/dist/esnext/components/MediaFile/MediaFileFragment.js +1 -0
- package/dist/esnext/components/MediaFile/index.d.ts +1 -0
- package/dist/esnext/components/MediaFile/index.js +1 -0
- package/dist/esnext/components/Metafield/Metafield.client.d.ts +8 -0
- package/dist/esnext/components/Metafield/Metafield.client.js +50 -0
- package/dist/esnext/components/Metafield/MetafieldFragment.d.ts +4 -0
- package/dist/esnext/components/Metafield/MetafieldFragment.js +1 -0
- package/dist/esnext/components/Metafield/components/StarRating/StarRating.d.ts +12 -0
- package/dist/esnext/components/Metafield/components/StarRating/StarRating.js +48 -0
- package/dist/esnext/components/Metafield/components/StarRating/index.d.ts +1 -0
- package/dist/esnext/components/Metafield/components/StarRating/index.js +1 -0
- package/dist/esnext/components/Metafield/components/index.d.ts +1 -0
- package/dist/esnext/components/Metafield/components/index.js +1 -0
- package/dist/esnext/components/Metafield/index.d.ts +3 -0
- package/dist/esnext/components/Metafield/index.js +1 -0
- package/dist/esnext/components/Metafield/types.d.ts +4 -0
- package/dist/esnext/components/Metafield/types.js +1 -0
- package/dist/esnext/components/Model3D/Model3D.client.d.ts +25 -0
- package/dist/esnext/components/Model3D/Model3D.client.js +30 -0
- package/dist/esnext/components/Model3D/Model3DFragment.d.ts +11 -0
- package/dist/esnext/components/Model3D/Model3DFragment.js +1 -0
- package/dist/esnext/components/Model3D/index.d.ts +1 -0
- package/dist/esnext/components/Model3D/index.js +1 -0
- package/dist/esnext/components/Money/Money.client.d.ts +7 -0
- package/dist/esnext/components/Money/Money.client.js +10 -0
- package/dist/esnext/components/Money/index.d.ts +1 -0
- package/dist/esnext/components/Money/index.js +1 -0
- package/dist/esnext/components/ProductDescription/ProductDescription.client.d.ts +3 -0
- package/dist/esnext/components/ProductDescription/ProductDescription.client.js +10 -0
- package/dist/esnext/components/ProductDescription/index.d.ts +1 -0
- package/dist/esnext/components/ProductDescription/index.js +1 -0
- package/dist/esnext/components/ProductMetafield/ProductMetafield.client.d.ts +7 -0
- package/dist/esnext/components/ProductMetafield/ProductMetafield.client.js +16 -0
- package/dist/esnext/components/ProductMetafield/index.d.ts +1 -0
- package/dist/esnext/components/ProductMetafield/index.js +1 -0
- package/dist/esnext/components/ProductPrice/ProductPrice.client.d.ts +7 -0
- package/dist/esnext/components/ProductPrice/ProductPrice.client.js +32 -0
- package/dist/esnext/components/ProductPrice/index.d.ts +1 -0
- package/dist/esnext/components/ProductPrice/index.js +1 -0
- package/dist/esnext/components/ProductProvider/ProductProvider.client.d.ts +7 -0
- package/dist/esnext/components/ProductProvider/ProductProvider.client.js +35 -0
- package/dist/esnext/components/ProductProvider/ProductProviderFragment.d.ts +96 -0
- package/dist/esnext/components/ProductProvider/ProductProviderFragment.js +1 -0
- package/dist/esnext/components/ProductProvider/context.d.ts +13 -0
- package/dist/esnext/components/ProductProvider/context.js +2 -0
- package/dist/esnext/components/ProductProvider/hooks.d.ts +1 -0
- package/dist/esnext/components/ProductProvider/hooks.js +6 -0
- package/dist/esnext/components/ProductProvider/index.d.ts +2 -0
- package/dist/esnext/components/ProductProvider/index.js +2 -0
- package/dist/esnext/components/ProductProvider/types.d.ts +5 -0
- package/dist/esnext/components/ProductProvider/types.js +1 -0
- package/dist/esnext/components/ProductTitle/ProductTitle.client.d.ts +3 -0
- package/dist/esnext/components/ProductTitle/ProductTitle.client.js +11 -0
- package/dist/esnext/components/ProductTitle/index.d.ts +1 -0
- package/dist/esnext/components/ProductTitle/index.js +1 -0
- package/dist/esnext/components/RawHtml/RawHtml.d.ts +7 -0
- package/dist/esnext/components/RawHtml/RawHtml.js +13 -0
- package/dist/esnext/components/RawHtml/index.d.ts +1 -0
- package/dist/esnext/components/RawHtml/index.js +1 -0
- package/dist/esnext/components/SelectedVariantAddToCartButton/SelectedVariantAddToCartButton.client.d.ts +6 -0
- package/dist/esnext/components/SelectedVariantAddToCartButton/SelectedVariantAddToCartButton.client.js +12 -0
- package/dist/esnext/components/SelectedVariantAddToCartButton/index.d.ts +1 -0
- package/dist/esnext/components/SelectedVariantAddToCartButton/index.js +1 -0
- package/dist/esnext/components/SelectedVariantBuyNowButton/SelectedVariantBuyNowButton.d.ts +4 -0
- package/dist/esnext/components/SelectedVariantBuyNowButton/SelectedVariantBuyNowButton.js +12 -0
- package/dist/esnext/components/SelectedVariantBuyNowButton/index.d.ts +1 -0
- package/dist/esnext/components/SelectedVariantBuyNowButton/index.js +1 -0
- package/dist/esnext/components/SelectedVariantImage/SelectedVariantImage.client.d.ts +6 -0
- package/dist/esnext/components/SelectedVariantImage/SelectedVariantImage.client.js +12 -0
- package/dist/esnext/components/SelectedVariantImage/index.d.ts +1 -0
- package/dist/esnext/components/SelectedVariantImage/index.js +1 -0
- package/dist/esnext/components/SelectedVariantMetafield/SelectedVariantMetafield.client.d.ts +7 -0
- package/dist/esnext/components/SelectedVariantMetafield/SelectedVariantMetafield.client.js +15 -0
- package/dist/esnext/components/SelectedVariantMetafield/index.d.ts +1 -0
- package/dist/esnext/components/SelectedVariantMetafield/index.js +1 -0
- package/dist/esnext/components/SelectedVariantPrice/SelectedVariantPrice.client.d.ts +6 -0
- package/dist/esnext/components/SelectedVariantPrice/SelectedVariantPrice.client.js +18 -0
- package/dist/esnext/components/SelectedVariantPrice/index.d.ts +1 -0
- package/dist/esnext/components/SelectedVariantPrice/index.js +1 -0
- package/dist/esnext/components/SelectedVariantShopPayButton/SelectedVariantShopPayButton.client.d.ts +2 -0
- package/dist/esnext/components/SelectedVariantShopPayButton/SelectedVariantShopPayButton.client.js +12 -0
- package/dist/esnext/components/SelectedVariantShopPayButton/index.d.ts +1 -0
- package/dist/esnext/components/SelectedVariantShopPayButton/index.js +1 -0
- package/dist/esnext/components/SelectedVariantUnitPrice/SelectedVariantUnitPrice.client.d.ts +3 -0
- package/dist/esnext/components/SelectedVariantUnitPrice/SelectedVariantUnitPrice.client.js +12 -0
- package/dist/esnext/components/SelectedVariantUnitPrice/index.d.ts +1 -0
- package/dist/esnext/components/SelectedVariantUnitPrice/index.js +1 -0
- package/dist/esnext/components/ShopPayButton/ShopPayButton.client.d.ts +15 -0
- package/dist/esnext/components/ShopPayButton/ShopPayButton.client.js +32 -0
- package/dist/esnext/components/ShopPayButton/index.d.ts +1 -0
- package/dist/esnext/components/ShopPayButton/index.js +1 -0
- package/dist/esnext/components/UnitPrice/UnitPrice.client.d.ts +8 -0
- package/dist/esnext/components/UnitPrice/UnitPrice.client.js +16 -0
- package/dist/esnext/components/UnitPrice/index.d.ts +1 -0
- package/dist/esnext/components/UnitPrice/index.js +1 -0
- package/dist/esnext/components/Video/Video.d.ts +13 -0
- package/dist/esnext/components/Video/Video.js +8 -0
- package/dist/esnext/components/Video/VideoFragment.d.ts +11 -0
- package/dist/esnext/components/Video/VideoFragment.js +1 -0
- package/dist/esnext/components/Video/index.d.ts +1 -0
- package/dist/esnext/components/Video/index.js +1 -0
- package/dist/esnext/components/index.d.ts +41 -0
- package/dist/esnext/components/index.js +87 -0
- package/dist/esnext/components/types.d.ts +73 -0
- package/dist/esnext/components/types.js +10 -0
- package/dist/esnext/entry-client.d.ts +3 -0
- package/dist/esnext/entry-client.js +36 -0
- package/dist/esnext/entry-server.d.ts +3 -0
- package/dist/esnext/entry-server.js +286 -0
- package/dist/esnext/foundation/ClientMarker/ClientMarker.d.ts +10 -0
- package/dist/esnext/foundation/ClientMarker/ClientMarker.js +25 -0
- package/dist/esnext/foundation/ClientMarker/index.d.ts +1 -0
- package/dist/esnext/foundation/ClientMarker/index.js +1 -0
- package/dist/esnext/foundation/Hydration/Cache.client.d.ts +9 -0
- package/dist/esnext/foundation/Hydration/Cache.client.js +131 -0
- package/dist/esnext/foundation/Hydration/ClientComponents.server.d.ts +13 -0
- package/dist/esnext/foundation/Hydration/ClientComponents.server.js +18 -0
- package/dist/esnext/foundation/Hydration/Html.d.ts +5 -0
- package/dist/esnext/foundation/Hydration/Html.js +9 -0
- package/dist/esnext/foundation/Hydration/HydrationContext.server.d.ts +1 -0
- package/dist/esnext/foundation/Hydration/HydrationContext.server.js +2 -0
- package/dist/esnext/foundation/Hydration/ServerComponentRequest.server.d.ts +13 -0
- package/dist/esnext/foundation/Hydration/ServerComponentRequest.server.js +39 -0
- package/dist/esnext/foundation/Hydration/ServerComponentResponse.server.d.ts +18 -0
- package/dist/esnext/foundation/Hydration/ServerComponentResponse.server.js +35 -0
- package/dist/esnext/foundation/Hydration/react-utils.d.ts +5 -0
- package/dist/esnext/foundation/Hydration/react-utils.js +55 -0
- package/dist/esnext/foundation/Hydration/wire.server.d.ts +4 -0
- package/dist/esnext/foundation/Hydration/wire.server.js +75 -0
- package/dist/esnext/foundation/Hydration/writer.server.d.ts +14 -0
- package/dist/esnext/foundation/Hydration/writer.server.js +29 -0
- package/dist/esnext/foundation/Router/DefaultRoutes.d.ts +20 -0
- package/dist/esnext/foundation/Router/DefaultRoutes.js +54 -0
- package/dist/esnext/foundation/Router/ServerStateRouter.client.d.ts +6 -0
- package/dist/esnext/foundation/Router/ServerStateRouter.client.js +27 -0
- package/dist/esnext/foundation/Router/index.d.ts +1 -0
- package/dist/esnext/foundation/Router/index.js +1 -0
- package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.client.d.ts +11 -0
- package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.client.js +48 -0
- package/dist/esnext/foundation/ServerStateProvider/index.d.ts +1 -0
- package/dist/esnext/foundation/ServerStateProvider/index.js +1 -0
- package/dist/esnext/foundation/ShopifyProvider/ShopifyContext.d.ts +1 -0
- package/dist/esnext/foundation/ShopifyProvider/ShopifyContext.js +2 -0
- package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.d.ts +3 -0
- package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.js +11 -0
- package/dist/esnext/foundation/ShopifyProvider/ShopifyServerProvider.server.d.ts +8 -0
- package/dist/esnext/foundation/ShopifyProvider/ShopifyServerProvider.server.js +7 -0
- package/dist/esnext/foundation/ShopifyProvider/hooks.d.ts +2 -0
- package/dist/esnext/foundation/ShopifyProvider/hooks.js +9 -0
- package/dist/esnext/foundation/ShopifyProvider/index.d.ts +2 -0
- package/dist/esnext/foundation/ShopifyProvider/index.js +2 -0
- package/dist/esnext/foundation/ShopifyProvider/types.d.ts +12 -0
- package/dist/esnext/foundation/ShopifyProvider/types.js +1 -0
- package/dist/esnext/foundation/index.d.ts +4 -0
- package/dist/esnext/foundation/index.js +4 -0
- package/dist/esnext/framework/graphiql.d.ts +1 -0
- package/dist/esnext/framework/graphiql.js +39 -0
- package/dist/esnext/framework/middleware.d.ts +17 -0
- package/dist/esnext/framework/middleware.js +116 -0
- package/dist/esnext/framework/plugin.d.ts +3 -0
- package/dist/esnext/framework/plugin.js +14 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.d.ts +3 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.js +43 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +4 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.js +28 -0
- package/dist/esnext/framework/plugins/vite-plugin-react-server-components-shim.d.ts +3 -0
- package/dist/esnext/framework/plugins/vite-plugin-react-server-components-shim.js +123 -0
- package/dist/esnext/framework/server-components.d.ts +12 -0
- package/dist/esnext/framework/server-components.js +72 -0
- package/dist/esnext/graphql/graphql-constants.d.ts +1295 -0
- package/dist/esnext/graphql/graphql-constants.js +2482 -0
- package/dist/esnext/graphql/types/types.d.ts +5583 -0
- package/dist/esnext/graphql/types/types.js +1414 -0
- package/dist/esnext/handle-event.d.ts +20 -0
- package/dist/esnext/handle-event.js +140 -0
- package/dist/esnext/handle-worker-event.d.ts +11 -0
- package/dist/esnext/handle-worker-event.js +14 -0
- package/dist/esnext/hooks/index.d.ts +5 -0
- package/dist/esnext/hooks/index.js +5 -0
- package/dist/esnext/hooks/useMeasurement/hooks.d.ts +9 -0
- package/dist/esnext/hooks/useMeasurement/hooks.js +13 -0
- package/dist/esnext/hooks/useMeasurement/index.d.ts +1 -0
- package/dist/esnext/hooks/useMeasurement/index.js +1 -0
- package/dist/esnext/hooks/useMoney/hooks.d.ts +11 -0
- package/dist/esnext/hooks/useMoney/hooks.js +33 -0
- package/dist/esnext/hooks/useMoney/index.d.ts +1 -0
- package/dist/esnext/hooks/useMoney/index.js +1 -0
- package/dist/esnext/hooks/useParsedMetafields/hooks.d.ts +3 -0
- package/dist/esnext/hooks/useParsedMetafields/hooks.js +15 -0
- package/dist/esnext/hooks/useParsedMetafields/index.d.ts +1 -0
- package/dist/esnext/hooks/useParsedMetafields/index.js +1 -0
- package/dist/esnext/hooks/useProductOptions/helpers.d.ts +4 -0
- package/dist/esnext/hooks/useProductOptions/helpers.js +33 -0
- package/dist/esnext/hooks/useProductOptions/index.d.ts +2 -0
- package/dist/esnext/hooks/useProductOptions/index.js +2 -0
- package/dist/esnext/hooks/useProductOptions/types.d.ts +50 -0
- package/dist/esnext/hooks/useProductOptions/types.js +1 -0
- package/dist/esnext/hooks/useProductOptions/useProductOptions.d.ts +23 -0
- package/dist/esnext/hooks/useProductOptions/useProductOptions.js +84 -0
- package/dist/esnext/hooks/useQuery/QueryProvider.d.ts +6 -0
- package/dist/esnext/hooks/useQuery/QueryProvider.js +13 -0
- package/dist/esnext/hooks/useQuery/hooks.d.ts +12 -0
- package/dist/esnext/hooks/useQuery/hooks.js +28 -0
- package/dist/esnext/hooks/useQuery/index.d.ts +2 -0
- package/dist/esnext/hooks/useQuery/index.js +2 -0
- package/dist/esnext/hooks/useShopQuery/hooks.d.ts +9 -0
- package/dist/esnext/hooks/useShopQuery/hooks.js +34 -0
- package/dist/esnext/hooks/useShopQuery/index.d.ts +1 -0
- package/dist/esnext/hooks/useShopQuery/index.js +1 -0
- package/dist/esnext/index.d.ts +9 -0
- package/dist/esnext/index.js +11 -0
- package/dist/esnext/types.d.ts +62 -0
- package/dist/esnext/types.js +1 -0
- package/dist/esnext/utilities/connections.d.ts +2 -0
- package/dist/esnext/utilities/connections.js +4 -0
- package/dist/esnext/utilities/environment.d.ts +2 -0
- package/dist/esnext/utilities/environment.js +2 -0
- package/dist/esnext/utilities/image_size.d.ts +17 -0
- package/dist/esnext/utilities/image_size.js +45 -0
- package/dist/esnext/utilities/index.d.ts +8 -0
- package/dist/esnext/utilities/index.js +8 -0
- package/dist/esnext/utilities/meaurement.d.ts +3 -0
- package/dist/esnext/utilities/meaurement.js +98 -0
- package/dist/esnext/utilities/metafields.d.ts +2 -0
- package/dist/esnext/utilities/metafields.js +32 -0
- package/dist/esnext/utilities/script_loader.d.ts +3 -0
- package/dist/esnext/utilities/script_loader.js +23 -0
- package/dist/esnext/utilities/suspense.d.ts +7 -0
- package/dist/esnext/utilities/suspense.js +32 -0
- package/dist/esnext/utilities/video_parameters.d.ts +47 -0
- package/dist/esnext/utilities/video_parameters.js +22 -0
- package/dist/esnext/version.d.ts +1 -0
- package/dist/esnext/version.js +1 -0
- package/dist/node/foundation/ClientMarker/ClientMarker.d.ts +10 -0
- package/dist/node/foundation/ClientMarker/ClientMarker.js +48 -0
- package/dist/node/foundation/ClientMarker/index.d.ts +1 -0
- package/dist/node/foundation/ClientMarker/index.js +13 -0
- package/dist/node/foundation/Hydration/HydrationContext.server.d.ts +1 -0
- package/dist/node/foundation/Hydration/HydrationContext.server.js +5 -0
- package/dist/node/foundation/Hydration/ServerComponentRequest.server.d.ts +13 -0
- package/dist/node/foundation/Hydration/ServerComponentRequest.server.js +43 -0
- package/dist/node/foundation/Hydration/ServerComponentResponse.server.d.ts +18 -0
- package/dist/node/foundation/Hydration/ServerComponentResponse.server.js +39 -0
- package/dist/node/foundation/Hydration/react-utils.d.ts +5 -0
- package/dist/node/foundation/Hydration/react-utils.js +63 -0
- package/dist/node/foundation/Router/DefaultRoutes.d.ts +20 -0
- package/dist/node/foundation/Router/DefaultRoutes.js +78 -0
- package/dist/node/foundation/Router/index.d.ts +1 -0
- package/dist/node/foundation/Router/index.js +5 -0
- package/dist/node/foundation/ShopifyProvider/ShopifyContext.d.ts +1 -0
- package/dist/node/foundation/ShopifyProvider/ShopifyContext.js +5 -0
- package/dist/node/foundation/ShopifyProvider/ShopifyProvider.d.ts +3 -0
- package/dist/node/foundation/ShopifyProvider/ShopifyProvider.js +34 -0
- package/dist/node/foundation/ShopifyProvider/ShopifyServerProvider.server.d.ts +8 -0
- package/dist/node/foundation/ShopifyProvider/ShopifyServerProvider.server.js +14 -0
- package/dist/node/foundation/ShopifyProvider/hooks.d.ts +2 -0
- package/dist/node/foundation/ShopifyProvider/hooks.js +13 -0
- package/dist/node/foundation/ShopifyProvider/index.d.ts +2 -0
- package/dist/node/foundation/ShopifyProvider/index.js +8 -0
- package/dist/node/foundation/ShopifyProvider/types.d.ts +12 -0
- package/dist/node/foundation/ShopifyProvider/types.js +2 -0
- package/dist/node/foundation/index.d.ts +4 -0
- package/dist/node/foundation/index.js +13 -0
- package/dist/node/framework/graphiql.d.ts +1 -0
- package/dist/node/framework/graphiql.js +43 -0
- package/dist/node/framework/middleware.d.ts +17 -0
- package/dist/node/framework/middleware.js +141 -0
- package/dist/node/framework/plugin.d.ts +3 -0
- package/dist/node/framework/plugin.js +19 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-config.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-config.js +45 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +4 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.js +33 -0
- package/dist/node/framework/plugins/vite-plugin-react-server-components-shim.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-react-server-components-shim.js +128 -0
- package/dist/node/framework/server-components.d.ts +12 -0
- package/dist/node/framework/server-components.js +77 -0
- package/dist/node/graphql/types/types.d.ts +5583 -0
- package/dist/node/graphql/types/types.js +1417 -0
- package/dist/node/handle-event.d.ts +20 -0
- package/dist/node/handle-event.js +143 -0
- package/dist/node/hooks/useQuery/QueryProvider.d.ts +6 -0
- package/dist/node/hooks/useQuery/QueryProvider.js +20 -0
- package/dist/node/hooks/useQuery/hooks.d.ts +12 -0
- package/dist/node/hooks/useQuery/hooks.js +32 -0
- package/dist/node/hooks/useQuery/index.d.ts +2 -0
- package/dist/node/hooks/useQuery/index.js +14 -0
- package/dist/node/types.d.ts +62 -0
- package/dist/node/types.js +2 -0
- package/dist/worker/foundation/Hydration/ServerComponentRequest.server.d.ts +13 -0
- package/dist/worker/foundation/Hydration/ServerComponentRequest.server.js +39 -0
- package/dist/worker/foundation/Hydration/ServerComponentResponse.server.d.ts +18 -0
- package/dist/worker/foundation/Hydration/ServerComponentResponse.server.js +35 -0
- package/dist/worker/graphql/types/types.d.ts +5583 -0
- package/dist/worker/graphql/types/types.js +1414 -0
- package/dist/worker/handle-event.d.ts +20 -0
- package/dist/worker/handle-event.js +140 -0
- package/dist/worker/handle-worker-event.d.ts +11 -0
- package/dist/worker/handle-worker-event.js +14 -0
- package/dist/worker/types.d.ts +62 -0
- package/dist/worker/types.js +1 -0
- package/entry-client.d.ts +1 -0
- package/entry-client.js +1 -0
- package/entry-server.d.ts +1 -0
- package/entry-server.js +1 -0
- package/marker.js +1 -0
- package/middleware.d.ts +1 -0
- package/middleware.js +1 -0
- package/package.json +98 -0
- package/plugin.d.ts +1 -0
- package/plugin.js +1 -0
- 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,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,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,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,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
|
+
}
|