@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,35 @@
|
|
|
1
|
+
import { renderToString } from 'react-dom/server';
|
|
2
|
+
export class ServerComponentResponse extends Response {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.wait = false;
|
|
6
|
+
/**
|
|
7
|
+
* Allow custom body to be a string or a Promise.
|
|
8
|
+
*/
|
|
9
|
+
this.customBody = '';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Buffer the current response until all queries have resolved,
|
|
13
|
+
* and prevent it from streaming back early.
|
|
14
|
+
*/
|
|
15
|
+
doNotStream() {
|
|
16
|
+
this.wait = true;
|
|
17
|
+
}
|
|
18
|
+
canStream() {
|
|
19
|
+
return !this.wait;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Send the response from a Server Component. Renders React components to string,
|
|
23
|
+
* and returns `null` to make React happy.
|
|
24
|
+
*/
|
|
25
|
+
send(body) {
|
|
26
|
+
if (typeof body === 'object' &&
|
|
27
|
+
body.$$typeof === Symbol.for('react.element')) {
|
|
28
|
+
this.customBody = renderToString(body);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this.customBody = body;
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iterate through each prop in an object and render it to an object.
|
|
3
|
+
*/
|
|
4
|
+
export declare function renderReactProps(props: any): Record<string, any>;
|
|
5
|
+
export declare function parseReactFromString(input: string, options?: any): string | JSX.Element | JSX.Element[];
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { renderToString } from 'react-dom/server';
|
|
2
|
+
/**
|
|
3
|
+
* Load `domToReact` from within the library so it doesn't try to load `htmlToDom`
|
|
4
|
+
* which seems to always resolve to the client version, even though we want server.
|
|
5
|
+
*/
|
|
6
|
+
import domToReact from 'html-react-parser/lib/dom-to-react';
|
|
7
|
+
import htmlToDOM from 'html-dom-parser';
|
|
8
|
+
/**
|
|
9
|
+
* Iterate through each prop in an object and render it to an object.
|
|
10
|
+
*/
|
|
11
|
+
export function renderReactProps(props) {
|
|
12
|
+
return Object.entries(props).reduce((memo, [key, prop]) => {
|
|
13
|
+
if (prop instanceof Array) {
|
|
14
|
+
memo[key] = prop.map((p) => renderReactProp(p));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
memo[key] = renderReactProp(prop);
|
|
18
|
+
}
|
|
19
|
+
return memo;
|
|
20
|
+
}, {});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* If a prop is a React element (determined by the `$$typeof` property),
|
|
24
|
+
* check to see if it's a Function and call it. Otherwise, recursively
|
|
25
|
+
* render React props to support nested components.
|
|
26
|
+
*/
|
|
27
|
+
function renderReactProp(prop) {
|
|
28
|
+
if (typeof prop === 'object' &&
|
|
29
|
+
prop['$$typeof'] === Symbol.for('react.element')) {
|
|
30
|
+
if (prop.type instanceof Function) {
|
|
31
|
+
/**
|
|
32
|
+
* We can't simply call prop.type(), since this does funky things
|
|
33
|
+
* with hooks, etc. Instead, we render it to string and convert
|
|
34
|
+
* it to a React object. This *still* isn't a perfect approach
|
|
35
|
+
* because the component isn't wrapped in the same context
|
|
36
|
+
* that the developer may have intended. However, we can
|
|
37
|
+
* set expectations as thus when passing components as
|
|
38
|
+
* props within Server Components.
|
|
39
|
+
*/
|
|
40
|
+
return parseReactFromString(renderToString(prop));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return {
|
|
44
|
+
...prop,
|
|
45
|
+
props: renderReactProps(prop.props),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return prop;
|
|
50
|
+
}
|
|
51
|
+
export function parseReactFromString(input, options = {}) {
|
|
52
|
+
return domToReact(
|
|
53
|
+
// @ts-ignore
|
|
54
|
+
htmlToDOM(input, { lowerCaseAttributeNames: false }), options);
|
|
55
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { ClientComponents } from './ClientComponents.server';
|
|
2
|
+
import { parseReactFromString } from './react-utils';
|
|
3
|
+
/**
|
|
4
|
+
* Parse the HTML and convert it to wire syntax model.
|
|
5
|
+
*/
|
|
6
|
+
export function generateWireSyntaxFromRenderedHtml(html) {
|
|
7
|
+
const clientComponents = new ClientComponents();
|
|
8
|
+
const wireModel = parseReactFromString(html, {
|
|
9
|
+
library: {
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
createElement: convertToWireSyntax,
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Converts each DOM element to React's "wire" syntax. (I came up with this name; not sure what it's called).
|
|
16
|
+
* This is a terse syntax that records the model tree as an array of tuples. It also lists the client
|
|
17
|
+
* components used with their corresponding IDs to import dynamically.
|
|
18
|
+
*/
|
|
19
|
+
function convertToWireSyntax(type, props, children) {
|
|
20
|
+
let componentType = type;
|
|
21
|
+
let componentProps = props;
|
|
22
|
+
if (props && props['data-client-component']) {
|
|
23
|
+
const component = {
|
|
24
|
+
name: props['data-client-component'],
|
|
25
|
+
id: props['data-id'],
|
|
26
|
+
named: props['data-named'] === 'true',
|
|
27
|
+
};
|
|
28
|
+
const index = clientComponents.indexOf(component) > 0
|
|
29
|
+
? clientComponents.indexOf(component)
|
|
30
|
+
: clientComponents.add(component);
|
|
31
|
+
componentType = `@${index}`;
|
|
32
|
+
componentProps = JSON.parse(props['data-props']);
|
|
33
|
+
}
|
|
34
|
+
convertComponentPropsToWireSyntax(componentProps !== null && componentProps !== void 0 ? componentProps : {});
|
|
35
|
+
if (isDomNode(children) ||
|
|
36
|
+
(children instanceof Array && children.some(isDomNode))) {
|
|
37
|
+
if (children instanceof Array) {
|
|
38
|
+
children = children.map((child) => {
|
|
39
|
+
if (typeof child === 'string') {
|
|
40
|
+
return child;
|
|
41
|
+
}
|
|
42
|
+
const { children, ...props } = child.props;
|
|
43
|
+
return convertToWireSyntax(child.type, props, children);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const { children: childrenChildren, ...childrenProps } = children.props;
|
|
48
|
+
children = convertToWireSyntax(children.type, childrenProps, childrenChildren);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* TODO: The third position is actually supposed to be `key` I think.
|
|
53
|
+
* It's usually `null` which is what confused me. Find a way to pass
|
|
54
|
+
* through `key` here if we have one in `props`.
|
|
55
|
+
*/
|
|
56
|
+
return ['$', componentType, null, { ...componentProps, children }];
|
|
57
|
+
}
|
|
58
|
+
function convertComponentPropsToWireSyntax(componentProps) {
|
|
59
|
+
Object.entries(componentProps).forEach(([key, prop]) => {
|
|
60
|
+
if (isDomNode(prop)) {
|
|
61
|
+
const { children, ...props } = prop.props;
|
|
62
|
+
componentProps[key] = convertToWireSyntax(prop.type, props, children);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return (clientComponents
|
|
67
|
+
.all()
|
|
68
|
+
.map((component, idx) => {
|
|
69
|
+
return `M${idx + 1}:${JSON.stringify(component)}`;
|
|
70
|
+
})
|
|
71
|
+
.join('\n') + `\nJ0:${JSON.stringify(wireModel)}`);
|
|
72
|
+
}
|
|
73
|
+
function isDomNode(item) {
|
|
74
|
+
return item !== null && typeof item === 'object' && '_owner' in item;
|
|
75
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HydrationWriter is an implementation of `WritableStream` which
|
|
3
|
+
* keeps track of chunks emitted from React's `pipeToNodeWritable`.
|
|
4
|
+
*/
|
|
5
|
+
export declare class HydrationWriter {
|
|
6
|
+
private chunks;
|
|
7
|
+
drainCallback: () => any;
|
|
8
|
+
write(chunk: any): void;
|
|
9
|
+
on(event: string, callback: any): void;
|
|
10
|
+
drain(): void;
|
|
11
|
+
destroy(): void;
|
|
12
|
+
end(): void;
|
|
13
|
+
toString(): string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HydrationWriter is an implementation of `WritableStream` which
|
|
3
|
+
* keeps track of chunks emitted from React's `pipeToNodeWritable`.
|
|
4
|
+
*/
|
|
5
|
+
export class HydrationWriter {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.chunks = [];
|
|
8
|
+
this.drainCallback = () => { };
|
|
9
|
+
}
|
|
10
|
+
write(chunk) {
|
|
11
|
+
this.chunks.push(chunk.toString());
|
|
12
|
+
}
|
|
13
|
+
on(event, callback) {
|
|
14
|
+
if (event === Events.drain) {
|
|
15
|
+
this.drainCallback = callback;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
drain() {
|
|
19
|
+
this.drainCallback();
|
|
20
|
+
}
|
|
21
|
+
destroy() { }
|
|
22
|
+
end() { }
|
|
23
|
+
toString() {
|
|
24
|
+
return this.chunks.join('');
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const Events = {
|
|
28
|
+
drain: 'drain',
|
|
29
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
export declare type ImportGlobEagerOutput = Record<string, Record<'default', any>>;
|
|
3
|
+
/**
|
|
4
|
+
* Build a set of default Hydrogen routes based on the output provided by Vite's
|
|
5
|
+
* import.meta.globEager method.
|
|
6
|
+
*
|
|
7
|
+
* @see https://vitejs.dev/guide/features.html#glob-import
|
|
8
|
+
*/
|
|
9
|
+
export declare function DefaultRoutes({ pages, serverState, fallback, }: {
|
|
10
|
+
pages: ImportGlobEagerOutput;
|
|
11
|
+
serverState: Record<string, any>;
|
|
12
|
+
fallback?: ReactElement;
|
|
13
|
+
}): JSX.Element;
|
|
14
|
+
interface HydrogenRoute {
|
|
15
|
+
component: any;
|
|
16
|
+
path: string;
|
|
17
|
+
exact: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function createRoutesFromPages(pages: ImportGlobEagerOutput, topLevelPath?: string): HydrogenRoute[];
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
|
+
import { Route, Switch, useRouteMatch } from 'react-router-dom';
|
|
3
|
+
/**
|
|
4
|
+
* Build a set of default Hydrogen routes based on the output provided by Vite's
|
|
5
|
+
* import.meta.globEager method.
|
|
6
|
+
*
|
|
7
|
+
* @see https://vitejs.dev/guide/features.html#glob-import
|
|
8
|
+
*/
|
|
9
|
+
export function DefaultRoutes({ pages, serverState, fallback, }) {
|
|
10
|
+
const { path } = useRouteMatch();
|
|
11
|
+
const routes = useMemo(() => createRoutesFromPages(pages, path), [pages, path]);
|
|
12
|
+
return (React.createElement(Switch, null,
|
|
13
|
+
routes.map((route) => (React.createElement(Route, { key: route.path, exact: route.exact, path: route.path },
|
|
14
|
+
React.createElement(route.component, { ...serverState })))),
|
|
15
|
+
fallback && React.createElement(Route, { path: "*" }, fallback)));
|
|
16
|
+
}
|
|
17
|
+
export function createRoutesFromPages(pages, topLevelPath = '*') {
|
|
18
|
+
const topLevelPrefix = topLevelPath.replace('*', '').replace(/\/$/, '');
|
|
19
|
+
const routes = Object.keys(pages).map((key) => {
|
|
20
|
+
const path = key
|
|
21
|
+
.replace('./pages', '')
|
|
22
|
+
.replace(/\.server\.(t|j)sx?$/, '')
|
|
23
|
+
/**
|
|
24
|
+
* Replace /index with /
|
|
25
|
+
*/
|
|
26
|
+
.replace(/\/index$/i, '/')
|
|
27
|
+
/**
|
|
28
|
+
* Only lowercase the first letter. This allows the developer to use camelCase
|
|
29
|
+
* dynamic paths while ensuring their standard routes are normalized to lowercase.
|
|
30
|
+
*/
|
|
31
|
+
.replace(/\b[A-Z]/, (firstLetter) => firstLetter.toLowerCase())
|
|
32
|
+
/**
|
|
33
|
+
* Convert /[handle].jsx and /[...handle].jsx to /:handle.jsx for react-router-dom
|
|
34
|
+
*/
|
|
35
|
+
.replace(/\[(?:[.]{3})?(\w+?)\]/g, (_match, param) => `:${param}`);
|
|
36
|
+
/**
|
|
37
|
+
* Catch-all routes [...handle].jsx don't need an exact match
|
|
38
|
+
* https://reactrouter.com/core/api/Route/exact-bool
|
|
39
|
+
*/
|
|
40
|
+
const exact = !/\[(?:[.]{3})(\w+?)\]/.test(key);
|
|
41
|
+
return {
|
|
42
|
+
path: topLevelPrefix + path,
|
|
43
|
+
component: pages[key].default,
|
|
44
|
+
exact,
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* Place static paths BEFORE dynamic paths to grant priority.
|
|
49
|
+
*/
|
|
50
|
+
return [
|
|
51
|
+
...routes.filter((route) => !route.path.includes(':')),
|
|
52
|
+
...routes.filter((route) => route.path.includes(':')),
|
|
53
|
+
];
|
|
54
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Since we don't render each <Route> on the client like React Router expects,
|
|
3
|
+
* this listens for changes to `location` and proxies the new pathname to
|
|
4
|
+
* server state, which in turn fetches the correct server component.
|
|
5
|
+
*/
|
|
6
|
+
export declare function ServerStateRouter(): null;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { useLocation } from 'react-router-dom';
|
|
3
|
+
import { useServerState } from '../ServerStateProvider';
|
|
4
|
+
/**
|
|
5
|
+
* Since we don't render each <Route> on the client like React Router expects,
|
|
6
|
+
* this listens for changes to `location` and proxies the new pathname to
|
|
7
|
+
* server state, which in turn fetches the correct server component.
|
|
8
|
+
*/
|
|
9
|
+
export function ServerStateRouter() {
|
|
10
|
+
const { setServerState, pending } = useServerState();
|
|
11
|
+
const [isNavigating, setIsNavigating] = useState(false);
|
|
12
|
+
const location = useLocation();
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
setIsNavigating(true);
|
|
15
|
+
setServerState('page', location.pathname);
|
|
16
|
+
}, [location.pathname, setServerState]);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
/**
|
|
19
|
+
* Indicates navigation has occurred
|
|
20
|
+
*/
|
|
21
|
+
if (isNavigating && !pending) {
|
|
22
|
+
window.scrollTo(0, 0);
|
|
23
|
+
setIsNavigating(false);
|
|
24
|
+
}
|
|
25
|
+
}, [isNavigating, pending]);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DefaultRoutes } from './DefaultRoutes';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DefaultRoutes } from './DefaultRoutes';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React, { ReactNode } from 'react';
|
|
2
|
+
interface Props {
|
|
3
|
+
serverState: Record<string, any>;
|
|
4
|
+
setServerState: React.Dispatch<React.SetStateAction<{
|
|
5
|
+
page: string;
|
|
6
|
+
}>>;
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export declare function ServerStateProvider({ serverState, setServerState, children, }: Props): JSX.Element;
|
|
10
|
+
export declare function useServerState(): any;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React, { createContext, useContext, useMemo, useCallback,
|
|
2
|
+
// @ts-ignore
|
|
3
|
+
useTransition, } from 'react';
|
|
4
|
+
const ServerStateContext = createContext(null);
|
|
5
|
+
export function ServerStateProvider({ serverState, setServerState, children, }) {
|
|
6
|
+
const [pending, startTransition] = useTransition();
|
|
7
|
+
const setServerStateCallback = useCallback((input, value) => {
|
|
8
|
+
/**
|
|
9
|
+
* By wrapping this state change in a transition, React renders the new state
|
|
10
|
+
* concurrently in a new "tree" instead of Suspending and showing the (blank)
|
|
11
|
+
* fallback. This is preferred behavior, though we may want to revisit how
|
|
12
|
+
* we make this decision globally for the developer - and consider providing
|
|
13
|
+
* the `pending` flag also provided by the hook to display in the UI.
|
|
14
|
+
*/
|
|
15
|
+
startTransition(() => {
|
|
16
|
+
// Support callback-style setState
|
|
17
|
+
if (typeof input === 'function') {
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
return setServerState(input);
|
|
20
|
+
}
|
|
21
|
+
// Support a simple object, and spread it into the existing object.
|
|
22
|
+
if (typeof input === 'object') {
|
|
23
|
+
return setServerState((prev) => ({
|
|
24
|
+
...prev,
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
...input,
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
29
|
+
// Support a key, value as well.
|
|
30
|
+
if (typeof input === 'string') {
|
|
31
|
+
return setServerState((prev) => ({
|
|
32
|
+
...prev,
|
|
33
|
+
[input]: value,
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}, [setServerState, startTransition]);
|
|
38
|
+
const value = useMemo(() => ({
|
|
39
|
+
pending,
|
|
40
|
+
serverState,
|
|
41
|
+
setServerState: setServerStateCallback,
|
|
42
|
+
}), [serverState, setServerStateCallback, pending]);
|
|
43
|
+
return (React.createElement(ServerStateContext.Provider, { value: value }, children));
|
|
44
|
+
}
|
|
45
|
+
export function useServerState() {
|
|
46
|
+
var _a;
|
|
47
|
+
return (_a = useContext(ServerStateContext)) !== null && _a !== void 0 ? _a : {};
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ServerStateProvider.client';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ServerStateProvider.client';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ShopifyContext: import("react").Context<import("../../types").ShopifyConfig | null>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React, { useMemo } from 'react';
|
|
2
|
+
import { ShopifyContext } from './ShopifyContext';
|
|
3
|
+
export const DEFAULT_API_VERSION = '2021-10';
|
|
4
|
+
export function ShopifyProvider({ shopifyConfig, children, }) {
|
|
5
|
+
const shopifyProviderValue = useMemo(() => ({
|
|
6
|
+
locale: 'en-us',
|
|
7
|
+
graphqlApiVersion: DEFAULT_API_VERSION,
|
|
8
|
+
...shopifyConfig,
|
|
9
|
+
}), [shopifyConfig]);
|
|
10
|
+
return (React.createElement(ShopifyContext.Provider, { value: shopifyProviderValue }, children));
|
|
11
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import { ShopifyConfig } from '../../types';
|
|
3
|
+
import { ReactQueryHydrationContext } from './types';
|
|
4
|
+
export declare function ShopifyServerProvider({ children, shopifyConfig, hydrationContext, }: {
|
|
5
|
+
children: ReactElement;
|
|
6
|
+
shopifyConfig: ShopifyConfig;
|
|
7
|
+
hydrationContext: ReactQueryHydrationContext;
|
|
8
|
+
}): JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ShopifyProvider } from './ShopifyProvider';
|
|
3
|
+
import { QueryProvider } from '../../hooks/useQuery';
|
|
4
|
+
export function ShopifyServerProvider({ children, shopifyConfig, hydrationContext, }) {
|
|
5
|
+
return (React.createElement(ShopifyProvider, { shopifyConfig: shopifyConfig },
|
|
6
|
+
React.createElement(QueryProvider, { hydrationContext: hydrationContext }, children)));
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { QueryClient } from 'react-query';
|
|
2
|
+
import { ShopifyConfig } from '../../types';
|
|
3
|
+
export declare type ShopifyProviderValue = ShopifyConfig;
|
|
4
|
+
export declare type ShopifyProviderProps = {
|
|
5
|
+
shopifyConfig: ShopifyConfig;
|
|
6
|
+
children?: React.ReactNode;
|
|
7
|
+
manager?: any;
|
|
8
|
+
};
|
|
9
|
+
export interface ReactQueryHydrationContext {
|
|
10
|
+
queryClient?: QueryClient;
|
|
11
|
+
dehydratedState?: any;
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function graphiqlHtml(shop: string, token: string, apiVersion?: string): string;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { DEFAULT_API_VERSION } from '../foundation';
|
|
2
|
+
export function graphiqlHtml(shop, token, apiVersion = DEFAULT_API_VERSION) {
|
|
3
|
+
return `<html>
|
|
4
|
+
<head>
|
|
5
|
+
<title>Shopify Storefront API</title>
|
|
6
|
+
<link href="https://unpkg.com/graphiql/graphiql.min.css" rel="stylesheet" />
|
|
7
|
+
</head>
|
|
8
|
+
<body style="margin: 0;">
|
|
9
|
+
<div id="graphiql" style="height: 100vh;"></div>
|
|
10
|
+
<script
|
|
11
|
+
crossorigin
|
|
12
|
+
src="https://unpkg.com/react/umd/react.production.min.js"
|
|
13
|
+
></script>
|
|
14
|
+
<script
|
|
15
|
+
crossorigin
|
|
16
|
+
src="https://unpkg.com/react-dom/umd/react-dom.production.min.js"
|
|
17
|
+
></script>
|
|
18
|
+
<script
|
|
19
|
+
crossorigin
|
|
20
|
+
src="https://unpkg.com/graphiql/graphiql.min.js"
|
|
21
|
+
></script>
|
|
22
|
+
<script>
|
|
23
|
+
const fetcher = GraphiQL.createFetcher({
|
|
24
|
+
url: 'https://${shop}/api/${apiVersion}/graphql.json',
|
|
25
|
+
headers: {
|
|
26
|
+
Accept: 'application/json',
|
|
27
|
+
'Content-Type': 'application/graphql',
|
|
28
|
+
'X-Shopify-Storefront-Access-Token': '${token}'
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
ReactDOM.render(
|
|
32
|
+
React.createElement(GraphiQL, { fetcher: fetcher }),
|
|
33
|
+
document.getElementById('graphiql'),
|
|
34
|
+
);
|
|
35
|
+
</script>
|
|
36
|
+
</body>
|
|
37
|
+
</html>
|
|
38
|
+
`;
|
|
39
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IncomingMessage, NextFunction } from 'connect';
|
|
2
|
+
import http from 'http';
|
|
3
|
+
import { ViteDevServer } from 'vite';
|
|
4
|
+
import { ShopifyConfig } from '../types';
|
|
5
|
+
declare type HydrogenMiddlewareArgs = {
|
|
6
|
+
dev?: boolean;
|
|
7
|
+
shopifyConfig?: ShopifyConfig;
|
|
8
|
+
indexTemplate: string | ((url: string) => Promise<string>);
|
|
9
|
+
getServerEntrypoint: () => Record<string, any> | Promise<Record<string, any>>;
|
|
10
|
+
devServer?: ViteDevServer;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Provides middleware to Node.js Express-like servers. Used by the Hydrogen
|
|
14
|
+
* Vite dev server plugin as well as production Node.js implementation.
|
|
15
|
+
*/
|
|
16
|
+
export default function hydrogenMiddleware({ dev, shopifyConfig, indexTemplate, getServerEntrypoint, devServer, }: HydrogenMiddlewareArgs): (request: IncomingMessage, response: http.ServerResponse, next: NextFunction) => Promise<void>;
|
|
17
|
+
export {};
|