@shopify/hydrogen 0.22.1 → 0.25.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/CHANGELOG.md +378 -0
- package/dist/esnext/components/AddToCartButton/AddToCartButton.client.d.ts +2 -5
- package/dist/esnext/components/AddToCartButton/AddToCartButton.client.js +18 -17
- package/dist/esnext/components/BaseButton/BaseButton.client.d.ts +14 -0
- package/dist/esnext/components/BaseButton/BaseButton.client.js +15 -0
- package/dist/esnext/components/BaseButton/index.d.ts +1 -0
- package/dist/esnext/components/BaseButton/index.js +1 -0
- package/dist/esnext/components/BuyNowButton/BuyNowButton.client.d.ts +2 -5
- package/dist/esnext/components/BuyNowButton/BuyNowButton.client.js +5 -4
- package/dist/esnext/components/CartEstimatedCost/CartEstimatedCost.client.js +4 -4
- package/dist/esnext/components/CartLinePrice/CartLinePrice.client.js +5 -8
- package/dist/esnext/components/CartLineProvider/context.d.ts +10 -0
- package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.d.ts +4 -5
- package/dist/esnext/components/CartLineQuantityAdjustButton/CartLineQuantityAdjustButton.js +16 -14
- package/dist/esnext/components/CartLines/{CartLines.d.ts → CartLines.client.d.ts} +0 -0
- package/dist/esnext/components/CartLines/{CartLines.js → CartLines.client.js} +1 -1
- package/dist/esnext/components/CartLines/index.d.ts +1 -1
- package/dist/esnext/components/CartLines/index.js +1 -1
- package/dist/esnext/components/CartProvider/CartProvider.client.js +31 -38
- package/dist/esnext/components/CartProvider/cart-queries.d.ts +1 -1
- package/dist/esnext/components/CartProvider/cart-queries.js +11 -0
- package/dist/esnext/components/CartProvider/graphql/CartAttributesUpdateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartBuyerIdentityUpdateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartCreateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartDiscountCodesUpdateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartFragment.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartLineAddMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartLineRemoveMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartLineUpdateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartNoteUpdateMutation.d.ts +11 -1
- package/dist/esnext/components/CartProvider/graphql/CartQuery.d.ts +11 -1
- package/dist/esnext/components/CartProvider/hooks.client.js +5 -8
- package/dist/esnext/components/CartProvider/types.d.ts +2 -0
- package/dist/esnext/components/ExternalVideo/ExternalVideo.js +1 -1
- package/dist/esnext/components/Image/Image.d.ts +21 -0
- package/dist/esnext/components/Image/Image.js +88 -14
- package/dist/esnext/components/Link/Link.client.d.ts +2 -0
- package/dist/esnext/components/Link/Link.client.js +8 -5
- package/dist/esnext/components/LocalizationProvider/LocalizationProvider.server.js +2 -2
- package/dist/esnext/components/Metafield/Metafield.client.d.ts +6 -10
- package/dist/esnext/components/Metafield/Metafield.client.js +67 -31
- package/dist/esnext/components/Metafield/components/StarRating/StarRating.js +1 -1
- package/dist/esnext/components/ModelViewer/ModelViewer.client.js +2 -3
- package/dist/esnext/components/Money/Money.client.js +1 -1
- package/dist/esnext/components/ProductOptionsProvider/ProductOptionsProvider.client.d.ts +21 -0
- package/dist/esnext/components/ProductOptionsProvider/ProductOptionsProvider.client.js +133 -0
- package/dist/esnext/components/ProductOptionsProvider/context.d.ts +2 -0
- package/dist/esnext/components/{ProductProvider → ProductOptionsProvider}/context.js +0 -1
- package/dist/esnext/components/ProductOptionsProvider/index.d.ts +2 -0
- package/dist/esnext/components/ProductOptionsProvider/index.js +2 -0
- package/dist/esnext/components/ProductPrice/ProductPrice.client.d.ts +5 -2
- package/dist/esnext/components/ProductPrice/ProductPrice.client.js +10 -12
- package/dist/esnext/components/Seo/CollectionSeo.client.js +2 -3
- package/dist/esnext/components/Seo/DefaultPageSeo.client.js +3 -3
- package/dist/esnext/components/Seo/NoIndexSeo.client.js +2 -2
- package/dist/esnext/components/Seo/PageSeo.client.js +2 -3
- package/dist/esnext/components/Seo/ProductSeo.client.js +9 -10
- package/dist/esnext/components/ShopPayButton/ShopPayButton.client.js +2 -3
- package/dist/esnext/components/Video/Video.js +2 -3
- package/dist/esnext/components/index.d.ts +1 -1
- package/dist/esnext/components/index.js +1 -1
- package/dist/esnext/config.d.ts +4 -0
- package/dist/esnext/config.js +4 -0
- package/dist/esnext/constants.d.ts +2 -0
- package/dist/esnext/constants.js +2 -0
- package/dist/esnext/entry-client.js +107 -21
- package/dist/esnext/entry-server.d.ts +2 -31
- package/dist/esnext/entry-server.js +400 -335
- package/dist/esnext/foundation/Analytics/Analytics.client.js +15 -13
- package/dist/esnext/foundation/Analytics/Analytics.server.js +27 -20
- package/dist/esnext/foundation/Analytics/ClientAnalytics.d.ts +4 -2
- package/dist/esnext/foundation/Analytics/ClientAnalytics.js +16 -14
- package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.d.ts +4 -0
- package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.js +36 -0
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/ServerAnalyticsConnector.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/ServerAnalyticsConnector.js +27 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ServerAnalyticsConnector.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ServerAnalyticsConnector.js +21 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.client.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.client.js +190 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.server.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/ShopifyAnalytics.server.js +23 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/const.d.ts +28 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/const.js +51 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/utils.d.ts +3 -0
- package/dist/esnext/foundation/Analytics/connectors/Shopify/utils.js +56 -0
- package/dist/esnext/foundation/Analytics/hook.js +4 -2
- package/dist/esnext/foundation/Analytics/utils.d.ts +2 -0
- package/dist/esnext/foundation/Analytics/utils.js +21 -0
- package/dist/esnext/foundation/BuiltInRoutes/BuiltInRoutes.d.ts +2 -0
- package/dist/esnext/foundation/BuiltInRoutes/BuiltInRoutes.js +23 -0
- package/dist/esnext/foundation/BuiltInRoutes/healthCheck.d.ts +1 -0
- package/dist/esnext/foundation/BuiltInRoutes/healthCheck.js +3 -0
- package/dist/{node/framework → esnext/foundation/Cache}/cache-sub-request.d.ts +1 -1
- package/dist/esnext/{framework → foundation/Cache}/cache-sub-request.js +4 -4
- package/dist/esnext/{framework → foundation/Cache}/cache.d.ts +1 -1
- package/dist/esnext/{framework → foundation/Cache}/cache.js +4 -4
- package/dist/esnext/foundation/Cache/strategies/index.d.ts +7 -0
- package/dist/esnext/foundation/Cache/strategies/index.js +54 -0
- package/dist/esnext/foundation/Cookie/Cookie.d.ts +3 -3
- package/dist/esnext/foundation/Cookie/Cookie.js +5 -0
- package/dist/esnext/foundation/DevTools/DevTools.client.d.ts +3 -0
- package/dist/esnext/foundation/DevTools/DevTools.client.js +17 -0
- package/dist/esnext/foundation/DevTools/DevTools.server.d.ts +1 -0
- package/dist/esnext/foundation/DevTools/DevTools.server.js +14 -0
- package/dist/esnext/foundation/DevTools/components/GraphQL.client.d.ts +1 -0
- package/dist/esnext/foundation/DevTools/components/GraphQL.client.js +25 -0
- package/dist/esnext/foundation/DevTools/components/Heading.d.ts +5 -0
- package/dist/esnext/foundation/DevTools/components/Heading.js +12 -0
- package/dist/esnext/foundation/DevTools/components/Interface.client.d.ts +11 -0
- package/dist/esnext/foundation/DevTools/components/Interface.client.js +47 -0
- package/dist/esnext/foundation/DevTools/components/Panels.d.ts +8 -0
- package/dist/esnext/foundation/DevTools/components/Panels.js +60 -0
- package/dist/esnext/foundation/DevTools/components/Performance.client.d.ts +14 -0
- package/dist/esnext/foundation/DevTools/components/Performance.client.js +26 -0
- package/dist/esnext/foundation/DevTools/components/Settings.client.d.ts +7 -0
- package/dist/esnext/foundation/DevTools/components/Settings.client.js +20 -0
- package/dist/esnext/foundation/DevTools/components/Table.d.ts +9 -0
- package/dist/esnext/foundation/DevTools/components/Table.js +7 -0
- package/dist/esnext/foundation/DevTools/components/icons.d.ts +2 -0
- package/dist/esnext/foundation/DevTools/components/icons.js +13 -0
- package/dist/esnext/foundation/DevTools/components/index.d.ts +2 -0
- package/dist/esnext/foundation/DevTools/components/index.js +2 -0
- package/dist/esnext/foundation/FileRoutes/FileRoutes.server.js +4 -4
- package/dist/{node/framework/Hydration → esnext/foundation/Html}/Html.d.ts +3 -1
- package/dist/esnext/{framework/Hydration → foundation/Html}/Html.js +15 -5
- package/dist/esnext/{framework/Hydration/ServerComponentRequest.server.d.ts → foundation/HydrogenRequest/HydrogenRequest.server.d.ts} +14 -4
- package/dist/esnext/{framework/Hydration/ServerComponentRequest.server.js → foundation/HydrogenRequest/HydrogenRequest.server.js} +70 -12
- package/dist/esnext/{framework/Hydration/ServerComponentResponse.server.d.ts → foundation/HydrogenResponse/HydrogenResponse.server.d.ts} +6 -11
- package/dist/esnext/foundation/HydrogenResponse/HydrogenResponse.server.js +48 -0
- package/dist/esnext/foundation/Router/BrowserRouter.client.js +15 -9
- package/dist/esnext/foundation/ServerPropsProvider/ServerPropsProvider.d.ts +2 -1
- package/dist/esnext/foundation/ServerPropsProvider/ServerPropsProvider.js +1 -1
- package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +5 -6
- package/dist/esnext/foundation/ServerRequestProvider/ServerRequestProvider.js +19 -24
- package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.d.ts +1 -1
- package/dist/esnext/foundation/ServerStateProvider/ServerStateProvider.js +1 -1
- package/dist/esnext/foundation/ShopifyProvider/ShopifyProvider.server.js +4 -5
- package/dist/esnext/foundation/fetchSync/server/fetchSync.js +1 -1
- package/dist/esnext/foundation/index.d.ts +1 -1
- package/dist/esnext/foundation/index.js +1 -1
- package/dist/esnext/foundation/runtime.d.ts +2 -0
- package/dist/esnext/foundation/runtime.js +6 -0
- package/dist/esnext/foundation/session/session.d.ts +3 -3
- package/dist/esnext/foundation/ssr-interop.d.ts +2 -2
- package/dist/esnext/foundation/useNavigate/useNavigate.d.ts +2 -0
- package/dist/esnext/foundation/useNavigate/useNavigate.js +10 -4
- package/dist/esnext/foundation/useQuery/hooks.d.ts +1 -0
- package/dist/esnext/foundation/useQuery/hooks.js +29 -18
- package/dist/esnext/foundation/useRequestContext/index.d.ts +15 -0
- package/dist/esnext/foundation/useRequestContext/index.js +23 -0
- package/dist/esnext/foundation/useServerProps/use-server-props.js +2 -2
- package/dist/esnext/foundation/useSession/useSession.js +1 -2
- package/dist/esnext/foundation/useUrl/useUrl.js +1 -2
- package/dist/esnext/framework/cache/in-memory.js +3 -3
- package/dist/esnext/framework/middleware.d.ts +1 -1
- package/dist/esnext/framework/middleware.js +3 -4
- package/dist/esnext/framework/plugin.d.ts +7 -3
- package/dist/esnext/framework/plugin.js +4 -1
- package/dist/esnext/framework/plugins/vite-plugin-client-imports.js +1 -1
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-config.js +70 -64
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +1 -1
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-middleware.js +3 -4
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-rsc.js +5 -13
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-suppress-warnings.d.ts +3 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-suppress-warnings.js +19 -0
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.d.ts +1 -1
- package/dist/esnext/framework/plugins/vite-plugin-hydrogen-virtual-files.js +6 -4
- package/dist/esnext/framework/types.d.ts +5 -0
- package/dist/esnext/framework/types.js +1 -0
- package/dist/esnext/hooks/index.d.ts +0 -1
- package/dist/esnext/hooks/index.js +0 -1
- package/dist/esnext/hooks/useCartLine/useCartLine.d.ts +10 -0
- package/dist/esnext/hooks/useMoney/hooks.js +53 -39
- package/dist/esnext/hooks/useProductOptions/helpers.js +6 -10
- package/dist/esnext/hooks/useProductOptions/types.d.ts +17 -15
- package/dist/esnext/hooks/useProductOptions/useProductOptions.client.d.ts +1 -15
- package/dist/esnext/hooks/useProductOptions/useProductOptions.client.js +8 -107
- package/dist/esnext/hooks/useShopQuery/hooks.js +30 -18
- package/dist/esnext/index.d.ts +7 -5
- package/dist/esnext/index.js +5 -5
- package/dist/esnext/shared-types.d.ts +26 -0
- package/dist/esnext/shared-types.js +4 -0
- package/dist/esnext/storefront-api-types.d.ts +37 -443
- package/dist/esnext/streaming.server.d.ts +9 -19
- package/dist/esnext/streaming.server.js +2 -11
- package/dist/esnext/types.d.ts +40 -40
- package/dist/esnext/types.js +1 -1
- package/dist/esnext/utilities/apiRoutes.d.ts +8 -4
- package/dist/esnext/utilities/apiRoutes.js +6 -4
- package/dist/esnext/utilities/devtools.d.ts +1 -1
- package/dist/esnext/utilities/devtools.js +3 -3
- package/dist/esnext/utilities/flattenConnection/flattenConnection.d.ts +1 -0
- package/dist/esnext/utilities/flattenConnection/flattenConnection.js +13 -6
- package/dist/esnext/utilities/graphql-tracker.js +7 -9
- package/dist/esnext/utilities/hash.d.ts +2 -2
- package/dist/esnext/utilities/hash.js +29 -6
- package/dist/esnext/utilities/image_size.d.ts +24 -3
- package/dist/esnext/utilities/image_size.js +53 -31
- package/dist/esnext/utilities/index.d.ts +2 -2
- package/dist/esnext/utilities/index.js +2 -2
- package/dist/esnext/utilities/isBrowser/index.d.ts +1 -0
- package/dist/esnext/utilities/isBrowser/index.js +1 -0
- package/dist/esnext/utilities/isBrowser/isBrowser.d.ts +4 -0
- package/dist/esnext/utilities/isBrowser/isBrowser.js +6 -0
- package/dist/esnext/utilities/isServer/isServer.js +2 -2
- package/dist/esnext/utilities/load_script.js +1 -1
- package/dist/esnext/utilities/log/index.d.ts +1 -1
- package/dist/esnext/utilities/log/index.js +1 -1
- package/dist/esnext/utilities/log/log-cache-api-status.js +3 -2
- package/dist/esnext/utilities/log/log-cache-header.d.ts +4 -4
- package/dist/esnext/utilities/log/log-query-timeline.d.ts +3 -3
- package/dist/esnext/utilities/log/log-query-timeline.js +29 -10
- package/dist/esnext/utilities/log/log.d.ts +17 -11
- package/dist/esnext/utilities/log/log.js +28 -20
- package/dist/esnext/utilities/log/utils.js +1 -6
- package/dist/esnext/utilities/parseMetafield/index.d.ts +1 -0
- package/dist/esnext/utilities/parseMetafield/index.js +1 -0
- package/dist/esnext/utilities/parseMetafield/parseMetafield.d.ts +15 -0
- package/dist/esnext/utilities/{parseMetafieldValue/parseMetafieldValue.js → parseMetafield/parseMetafield.js} +28 -2
- package/dist/esnext/utilities/storefrontApi.js +9 -5
- package/dist/esnext/utilities/template.js +1 -2
- package/dist/esnext/utilities/web-api-polyfill.js +6 -0
- package/dist/esnext/version.d.ts +1 -1
- package/dist/esnext/version.js +1 -1
- package/dist/node/framework/cache/in-memory.js +3 -3
- package/dist/node/framework/middleware.d.ts +1 -1
- package/dist/node/framework/middleware.js +3 -4
- package/dist/node/framework/plugin.d.ts +4 -3
- package/dist/node/framework/plugin.js +5 -2
- package/dist/node/framework/plugins/vite-plugin-client-imports.js +1 -1
- package/dist/node/framework/plugins/vite-plugin-hydrogen-config.js +70 -64
- package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.d.ts +1 -1
- package/dist/node/framework/plugins/vite-plugin-hydrogen-middleware.js +3 -4
- package/dist/node/framework/plugins/vite-plugin-hydrogen-rsc.js +6 -14
- package/dist/node/framework/plugins/vite-plugin-hydrogen-suppress-warnings.d.ts +3 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-suppress-warnings.js +21 -0
- package/dist/node/framework/plugins/vite-plugin-hydrogen-virtual-files.d.ts +1 -1
- package/dist/node/framework/plugins/vite-plugin-hydrogen-virtual-files.js +6 -4
- package/dist/node/framework/types.d.ts +5 -0
- package/dist/node/{foundation/Analytics → framework}/types.js +0 -0
- package/dist/node/shared-types.d.ts +26 -0
- package/dist/node/shared-types.js +5 -0
- package/dist/node/utilities/web-api-polyfill.js +6 -0
- package/package.json +34 -26
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-plugin.js +275 -60
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.browser.development.server.js +119 -64
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.browser.production.min.server.js +33 -32
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.node.development.server.js +241 -75
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite-writer.node.production.min.server.js +38 -35
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite.development.js +9 -8
- package/vendor/react-server-dom-vite/cjs/react-server-dom-vite.production.min.js +3 -3
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-client-proxy.js +3 -9
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-plugin.js +276 -61
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.browser.server.js +119 -64
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.node.server.js +241 -75
- package/vendor/react-server-dom-vite/esm/react-server-dom-vite.js +9 -8
- package/vendor/react-server-dom-vite/package.json +1 -1
- package/client.d.ts +0 -1
- package/client.js +0 -1
- package/config.d.ts +0 -1
- package/config.js +0 -1
- package/dist/esnext/components/DevTools.client.d.ts +0 -1
- package/dist/esnext/components/DevTools.client.js +0 -129
- package/dist/esnext/components/ProductProvider/ProductOptionsProvider.client.d.ts +0 -8
- package/dist/esnext/components/ProductProvider/ProductOptionsProvider.client.js +0 -12
- package/dist/esnext/components/ProductProvider/ProductProvider.client.d.ts +0 -24
- package/dist/esnext/components/ProductProvider/ProductProvider.client.js +0 -34
- package/dist/esnext/components/ProductProvider/context.d.ts +0 -29
- package/dist/esnext/components/ProductProvider/index.d.ts +0 -2
- package/dist/esnext/components/ProductProvider/index.js +0 -2
- package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.server.d.ts +0 -2
- package/dist/esnext/foundation/Analytics/ServerAnalyticsRoute.server.js +0 -33
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetrics.server.d.ts +0 -1
- package/dist/esnext/foundation/Analytics/connectors/PerformanceMetrics/PerformanceMetrics.server.js +0 -24
- package/dist/esnext/framework/CachingStrategy/index.d.ts +0 -10
- package/dist/esnext/framework/CachingStrategy/index.js +0 -96
- package/dist/esnext/framework/Hydration/Html.d.ts +0 -11
- package/dist/esnext/framework/Hydration/ServerComponentResponse.server.js +0 -42
- package/dist/esnext/framework/Hydration/rsc.d.ts +0 -8
- package/dist/esnext/framework/Hydration/rsc.js +0 -100
- package/dist/esnext/framework/cache-sub-request.d.ts +0 -17
- package/dist/esnext/framework/config.d.ts +0 -6
- package/dist/esnext/framework/config.js +0 -6
- package/dist/esnext/framework/runtime.d.ts +0 -13
- package/dist/esnext/framework/runtime.js +0 -27
- package/dist/esnext/hooks/useParsedMetafields/index.d.ts +0 -1
- package/dist/esnext/hooks/useParsedMetafields/index.js +0 -1
- package/dist/esnext/hooks/useParsedMetafields/useParsedMetafields.d.ts +0 -21
- package/dist/esnext/hooks/useParsedMetafields/useParsedMetafields.js +0 -21
- package/dist/esnext/hooks/useProduct/index.d.ts +0 -1
- package/dist/esnext/hooks/useProduct/index.js +0 -1
- package/dist/esnext/hooks/useProduct/useProduct.d.ts +0 -52
- package/dist/esnext/hooks/useProduct/useProduct.js +0 -43
- package/dist/esnext/utilities/isClient/index.d.ts +0 -1
- package/dist/esnext/utilities/isClient/index.js +0 -1
- package/dist/esnext/utilities/isClient/isClient.d.ts +0 -4
- package/dist/esnext/utilities/isClient/isClient.js +0 -6
- package/dist/esnext/utilities/parseMetafieldValue/index.d.ts +0 -1
- package/dist/esnext/utilities/parseMetafieldValue/index.js +0 -1
- package/dist/esnext/utilities/parseMetafieldValue/parseMetafieldValue.d.ts +0 -6
- package/dist/node/components/Image/Image.d.ts +0 -84
- package/dist/node/components/Image/Image.js +0 -89
- package/dist/node/components/Image/index.d.ts +0 -2
- package/dist/node/components/Image/index.js +0 -5
- package/dist/node/constants.d.ts +0 -7
- package/dist/node/constants.js +0 -10
- package/dist/node/entry-server.d.ts +0 -35
- package/dist/node/entry-server.js +0 -571
- package/dist/node/foundation/Analytics/Analytics.client.d.ts +0 -3
- package/dist/node/foundation/Analytics/Analytics.client.js +0 -32
- package/dist/node/foundation/Analytics/Analytics.server.d.ts +0 -1
- package/dist/node/foundation/Analytics/Analytics.server.js +0 -70
- package/dist/node/foundation/Analytics/ClientAnalytics.d.ts +0 -25
- package/dist/node/foundation/Analytics/ClientAnalytics.js +0 -100
- package/dist/node/foundation/Analytics/ServerAnalyticsRoute.server.d.ts +0 -2
- package/dist/node/foundation/Analytics/ServerAnalyticsRoute.server.js +0 -37
- package/dist/node/foundation/Analytics/const.d.ts +0 -9
- package/dist/node/foundation/Analytics/const.js +0 -12
- package/dist/node/foundation/Analytics/hook.d.ts +0 -1
- package/dist/node/foundation/Analytics/hook.js +0 -11
- package/dist/node/foundation/Analytics/types.d.ts +0 -5
- package/dist/node/foundation/Analytics/utils.d.ts +0 -1
- package/dist/node/foundation/Analytics/utils.js +0 -12
- package/dist/node/foundation/AnalyticsErrorBoundary.client.d.ts +0 -4
- package/dist/node/foundation/AnalyticsErrorBoundary.client.js +0 -14
- package/dist/node/foundation/Redirect/Redirect.client.d.ts +0 -5
- package/dist/node/foundation/Redirect/Redirect.client.js +0 -18
- package/dist/node/foundation/Router/BrowserRouter.client.d.ts +0 -14
- package/dist/node/foundation/Router/BrowserRouter.client.js +0 -159
- package/dist/node/foundation/ServerPropsProvider/ServerPropsProvider.d.ts +0 -40
- package/dist/node/foundation/ServerPropsProvider/ServerPropsProvider.js +0 -90
- package/dist/node/foundation/ServerPropsProvider/index.d.ts +0 -2
- package/dist/node/foundation/ServerPropsProvider/index.js +0 -6
- package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.d.ts +0 -23
- package/dist/node/foundation/ServerRequestProvider/ServerRequestProvider.js +0 -158
- package/dist/node/foundation/ServerRequestProvider/index.d.ts +0 -1
- package/dist/node/foundation/ServerRequestProvider/index.js +0 -17
- package/dist/node/foundation/ShopifyProvider/types.d.ts +0 -13
- package/dist/node/foundation/ShopifyProvider/types.js +0 -2
- package/dist/node/foundation/session/session.d.ts +0 -27
- package/dist/node/foundation/session/session.js +0 -43
- package/dist/node/foundation/ssr-interop.d.ts +0 -29
- package/dist/node/foundation/ssr-interop.js +0 -39
- package/dist/node/foundation/useNavigate/useNavigate.d.ts +0 -13
- package/dist/node/foundation/useNavigate/useNavigate.js +0 -18
- package/dist/node/foundation/useServerProps/use-server-props.d.ts +0 -21
- package/dist/node/foundation/useServerProps/use-server-props.js +0 -40
- package/dist/node/framework/CachingStrategy/index.d.ts +0 -10
- package/dist/node/framework/CachingStrategy/index.js +0 -108
- package/dist/node/framework/Hydration/Html.js +0 -94
- package/dist/node/framework/Hydration/ServerComponentRequest.server.d.ts +0 -58
- package/dist/node/framework/Hydration/ServerComponentRequest.server.js +0 -150
- package/dist/node/framework/Hydration/ServerComponentResponse.server.d.ts +0 -26
- package/dist/node/framework/Hydration/ServerComponentResponse.server.js +0 -49
- package/dist/node/framework/Hydration/rsc.d.ts +0 -8
- package/dist/node/framework/Hydration/rsc.js +0 -103
- package/dist/node/framework/cache-sub-request.js +0 -95
- package/dist/node/framework/cache.d.ts +0 -17
- package/dist/node/framework/cache.js +0 -135
- package/dist/node/framework/config.d.ts +0 -6
- package/dist/node/framework/config.js +0 -11
- package/dist/node/framework/runtime.d.ts +0 -13
- package/dist/node/framework/runtime.js +0 -35
- package/dist/node/storefront-api-types.d.ts +0 -6405
- package/dist/node/storefront-api-types.js +0 -1766
- package/dist/node/streaming.server.d.ts +0 -26
- package/dist/node/streaming.server.js +0 -33
- package/dist/node/types.d.ts +0 -105
- package/dist/node/types.js +0 -2
- package/dist/node/utilities/apiRoutes.d.ts +0 -37
- package/dist/node/utilities/apiRoutes.js +0 -157
- package/dist/node/utilities/bot-ua.d.ts +0 -4
- package/dist/node/utilities/bot-ua.js +0 -65
- package/dist/node/utilities/defer.d.ts +0 -6
- package/dist/node/utilities/defer.js +0 -18
- package/dist/node/utilities/error.d.ts +0 -1
- package/dist/node/utilities/error.js +0 -10
- package/dist/node/utilities/fetch.d.ts +0 -9
- package/dist/node/utilities/fetch.js +0 -37
- package/dist/node/utilities/flattenConnection/flattenConnection.d.ts +0 -6
- package/dist/node/utilities/flattenConnection/flattenConnection.js +0 -15
- package/dist/node/utilities/flattenConnection/index.d.ts +0 -1
- package/dist/node/utilities/flattenConnection/index.js +0 -5
- package/dist/node/utilities/hash.d.ts +0 -2
- package/dist/node/utilities/hash.js +0 -11
- package/dist/node/utilities/html-encoding.d.ts +0 -1
- package/dist/node/utilities/html-encoding.js +0 -12
- package/dist/node/utilities/image_size.d.ts +0 -12
- package/dist/node/utilities/image_size.js +0 -68
- package/dist/node/utilities/index.d.ts +0 -12
- package/dist/node/utilities/index.js +0 -33
- package/dist/node/utilities/isClient/index.d.ts +0 -1
- package/dist/node/utilities/isClient/index.js +0 -5
- package/dist/node/utilities/isClient/isClient.d.ts +0 -4
- package/dist/node/utilities/isClient/isClient.js +0 -10
- package/dist/node/utilities/isServer/index.d.ts +0 -1
- package/dist/node/utilities/isServer/index.js +0 -5
- package/dist/node/utilities/isServer/isServer.d.ts +0 -4
- package/dist/node/utilities/isServer/isServer.js +0 -11
- package/dist/node/utilities/load_script.d.ts +0 -3
- package/dist/node/utilities/load_script.js +0 -27
- package/dist/node/utilities/log/index.d.ts +0 -4
- package/dist/node/utilities/log/index.js +0 -18
- package/dist/node/utilities/log/log-cache-api-status.d.ts +0 -1
- package/dist/node/utilities/log/log-cache-api-status.js +0 -17
- package/dist/node/utilities/log/log-cache-header.d.ts +0 -10
- package/dist/node/utilities/log/log-cache-header.js +0 -35
- package/dist/node/utilities/log/log-query-timeline.d.ts +0 -12
- package/dist/node/utilities/log/log-query-timeline.js +0 -88
- package/dist/node/utilities/log/log.d.ts +0 -22
- package/dist/node/utilities/log/log.js +0 -74
- package/dist/node/utilities/log/utils.d.ts +0 -3
- package/dist/node/utilities/log/utils.js +0 -21
- package/dist/node/utilities/matchPath.d.ts +0 -10
- package/dist/node/utilities/matchPath.js +0 -58
- package/dist/node/utilities/measurement.d.ts +0 -3
- package/dist/node/utilities/measurement.js +0 -103
- package/dist/node/utilities/parse.d.ts +0 -1
- package/dist/node/utilities/parse.js +0 -13
- package/dist/node/utilities/parseMetafieldValue/index.d.ts +0 -1
- package/dist/node/utilities/parseMetafieldValue/index.js +0 -5
- package/dist/node/utilities/parseMetafieldValue/parseMetafieldValue.d.ts +0 -6
- package/dist/node/utilities/parseMetafieldValue/parseMetafieldValue.js +0 -40
- package/dist/node/utilities/storefrontApi.d.ts +0 -4
- package/dist/node/utilities/storefrontApi.js +0 -26
- package/dist/node/utilities/suspense.d.ts +0 -12
- package/dist/node/utilities/suspense.js +0 -64
- package/dist/node/utilities/template.d.ts +0 -9
- package/dist/node/utilities/template.js +0 -27
- package/dist/node/utilities/timing.d.ts +0 -7
- package/dist/node/utilities/timing.js +0 -18
- package/dist/node/utilities/video_parameters.d.ts +0 -47
- package/dist/node/utilities/video_parameters.js +0 -27
- package/dist/node/version.d.ts +0 -1
- package/dist/node/version.js +0 -4
- package/entry-client.d.ts +0 -1
- package/entry-client.js +0 -1
- package/entry-server.d.ts +0 -1
- package/entry-server.js +0 -1
- package/middleware.d.ts +0 -1
- package/middleware.js +0 -1
- package/plugin.d.ts +0 -1
- package/plugin.js +0 -1
- package/web-polyfills.js +0 -1
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* In the server, this file is transformed by Vite to inject server logic.
|
|
5
5
|
* NOTE: Do not remove SSR-prefixed comments in this file.
|
|
6
6
|
*/
|
|
7
|
-
import type {
|
|
7
|
+
import type { HydrogenRequest } from './HydrogenRequest/HydrogenRequest.server';
|
|
8
8
|
export declare const META_ENV_SSR = false;
|
|
9
|
-
declare type ServerGetter<T> = (request:
|
|
9
|
+
declare type ServerGetter<T> = (request: HydrogenRequest) => T;
|
|
10
10
|
/**
|
|
11
11
|
* Isomorphic hook to access context data. It gives access to the current request
|
|
12
12
|
* when running on the server, and returns the provided client fallback in the browser.
|
|
@@ -5,6 +5,8 @@ declare type NavigationOptions = {
|
|
|
5
5
|
reloadDocument?: boolean;
|
|
6
6
|
/** The custom client state with the navigation. */
|
|
7
7
|
clientState?: any;
|
|
8
|
+
/** Whether to emulate natural browser behavior and restore scroll position on navigation. Defaults to true. */
|
|
9
|
+
scroll?: any;
|
|
8
10
|
};
|
|
9
11
|
/**
|
|
10
12
|
* The useNavigate hook imperatively navigates between routes.
|
|
@@ -5,10 +5,16 @@ import { useRouter } from '../Router/BrowserRouter.client';
|
|
|
5
5
|
export function useNavigate() {
|
|
6
6
|
const router = useRouter();
|
|
7
7
|
return (path, options = { replace: false, reloadDocument: false }) => {
|
|
8
|
+
const state = {
|
|
9
|
+
...options?.clientState,
|
|
10
|
+
scroll: options?.scroll ?? true,
|
|
11
|
+
};
|
|
8
12
|
// @todo wait for RSC and then change focus for a11y?
|
|
9
|
-
if (options
|
|
10
|
-
router.history.replace(path,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
if (options?.replace) {
|
|
14
|
+
router.history.replace(path, state);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
router.history.push(path, state);
|
|
18
|
+
}
|
|
13
19
|
};
|
|
14
20
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { getLoggerWithContext, collectQueryCacheControlHeaders, collectQueryTimings, } from '../../utilities/log';
|
|
2
|
-
import { deleteItemFromCache, generateSubRequestCacheControlHeader, getItemFromCache, isStale, setItemInCache, } from '
|
|
3
|
-
import { runDelayedFunction } from '../../framework/runtime';
|
|
2
|
+
import { deleteItemFromCache, generateSubRequestCacheControlHeader, getItemFromCache, isStale, setItemInCache, } from '../Cache/cache-sub-request';
|
|
4
3
|
import { useRequestCacheData, useServerRequest } from '../ServerRequestProvider';
|
|
5
|
-
import {
|
|
4
|
+
import { CacheShort, NO_STORE } from '../Cache/strategies';
|
|
6
5
|
/**
|
|
7
6
|
* The `useQuery` hook executes an asynchronous operation like `fetch` in a way that
|
|
8
7
|
* supports [Suspense](https://reactjs.org/docs/concurrent-mode-suspense.html). You can use this
|
|
@@ -25,21 +24,33 @@ queryOptions) {
|
|
|
25
24
|
];
|
|
26
25
|
const fetcher = cachedQueryFnBuilder(withCacheIdKey, queryFn, queryOptions);
|
|
27
26
|
collectQueryTimings(request, withCacheIdKey, 'requested');
|
|
28
|
-
if (queryOptions
|
|
27
|
+
if (shouldPreloadQuery(queryOptions)) {
|
|
29
28
|
request.savePreloadQuery({
|
|
30
|
-
preload: queryOptions
|
|
29
|
+
preload: queryOptions?.preload,
|
|
31
30
|
key: withCacheIdKey,
|
|
32
31
|
fetcher,
|
|
33
32
|
});
|
|
34
33
|
}
|
|
35
34
|
return useRequestCacheData(withCacheIdKey, fetcher);
|
|
36
35
|
}
|
|
37
|
-
function
|
|
38
|
-
|
|
36
|
+
export function shouldPreloadQuery(queryOptions) {
|
|
37
|
+
if (!queryOptions)
|
|
38
|
+
return true;
|
|
39
|
+
const hasCacheOverride = typeof queryOptions?.cache?.mode !== 'undefined';
|
|
40
|
+
const hasPreloadOverride = typeof queryOptions?.preload !== 'undefined';
|
|
41
|
+
const cacheValue = queryOptions?.cache?.mode;
|
|
42
|
+
const preloadValue = queryOptions?.preload;
|
|
43
|
+
// If preload is explicitly defined, then it takes precedence
|
|
44
|
+
if (hasPreloadOverride) {
|
|
45
|
+
return !!preloadValue;
|
|
46
|
+
}
|
|
47
|
+
return hasCacheOverride ? cacheValue !== NO_STORE : true;
|
|
48
|
+
}
|
|
49
|
+
function cachedQueryFnBuilder(key, generateNewOutput, queryOptions) {
|
|
39
50
|
const resolvedQueryOptions = {
|
|
40
|
-
...(queryOptions
|
|
51
|
+
...(queryOptions ?? {}),
|
|
41
52
|
};
|
|
42
|
-
const shouldCacheResponse =
|
|
53
|
+
const shouldCacheResponse = queryOptions?.shouldCacheResponse ?? (() => true);
|
|
43
54
|
/**
|
|
44
55
|
* Attempt to read the query from cache. If it doesn't exist or if it's stale, regenerate it.
|
|
45
56
|
*/
|
|
@@ -49,9 +60,6 @@ function cachedQueryFnBuilder(key, queryFn, queryOptions) {
|
|
|
49
60
|
const request = useServerRequest();
|
|
50
61
|
const log = getLoggerWithContext(request);
|
|
51
62
|
const cacheResponse = await getItemFromCache(key);
|
|
52
|
-
async function generateNewOutput() {
|
|
53
|
-
return await queryFn();
|
|
54
|
-
}
|
|
55
63
|
if (cacheResponse) {
|
|
56
64
|
const [output, response] = cacheResponse;
|
|
57
65
|
collectQueryCacheControlHeaders(request, key, response.headers.get('cache-control'));
|
|
@@ -60,17 +68,17 @@ function cachedQueryFnBuilder(key, queryFn, queryOptions) {
|
|
|
60
68
|
*/
|
|
61
69
|
if (isStale(key, response)) {
|
|
62
70
|
const lockKey = ['lock', ...(typeof key === 'string' ? [key] : key)];
|
|
63
|
-
|
|
64
|
-
|
|
71
|
+
// Run revalidation asynchronously
|
|
72
|
+
const revalidatingPromise = getItemFromCache(lockKey).then(async (lockExists) => {
|
|
65
73
|
if (lockExists)
|
|
66
74
|
return;
|
|
67
|
-
await setItemInCache(lockKey, true,
|
|
75
|
+
await setItemInCache(lockKey, true, CacheShort({
|
|
68
76
|
maxAge: 10,
|
|
69
77
|
}));
|
|
70
78
|
try {
|
|
71
79
|
const output = await generateNewOutput();
|
|
72
80
|
if (shouldCacheResponse(output)) {
|
|
73
|
-
await setItemInCache(key, output, resolvedQueryOptions
|
|
81
|
+
await setItemInCache(key, output, resolvedQueryOptions?.cache);
|
|
74
82
|
}
|
|
75
83
|
}
|
|
76
84
|
catch (e) {
|
|
@@ -80,6 +88,8 @@ function cachedQueryFnBuilder(key, queryFn, queryOptions) {
|
|
|
80
88
|
await deleteItemFromCache(lockKey);
|
|
81
89
|
}
|
|
82
90
|
});
|
|
91
|
+
// Asynchronously wait for it in workers
|
|
92
|
+
request.ctx.runtime?.waitUntil?.(revalidatingPromise);
|
|
83
93
|
}
|
|
84
94
|
return output;
|
|
85
95
|
}
|
|
@@ -88,9 +98,10 @@ function cachedQueryFnBuilder(key, queryFn, queryOptions) {
|
|
|
88
98
|
* Important: Do this async
|
|
89
99
|
*/
|
|
90
100
|
if (shouldCacheResponse(newOutput)) {
|
|
91
|
-
|
|
101
|
+
const setItemInCachePromise = setItemInCache(key, newOutput, resolvedQueryOptions?.cache);
|
|
102
|
+
request.ctx.runtime?.waitUntil?.(setItemInCachePromise);
|
|
92
103
|
}
|
|
93
|
-
collectQueryCacheControlHeaders(request, key, generateSubRequestCacheControlHeader(resolvedQueryOptions
|
|
104
|
+
collectQueryCacheControlHeaders(request, key, generateSubRequestCacheControlHeader(resolvedQueryOptions?.cache));
|
|
94
105
|
return newOutput;
|
|
95
106
|
}
|
|
96
107
|
return useCachedQueryFn;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare type ScopedContext = Record<string, any>;
|
|
2
|
+
/**
|
|
3
|
+
* Provides access to the current request context.
|
|
4
|
+
* @param scope - An optional string used to scope the request context. It is recommended to
|
|
5
|
+
* prevent modifying the properties added by other plugins.
|
|
6
|
+
* @returns A request-scoped object that can be modified to provide and consume information
|
|
7
|
+
* across different React components in the tree.
|
|
8
|
+
* @example
|
|
9
|
+
* ```js
|
|
10
|
+
* import {useRequestContext} from '@shopify/hydrogen';
|
|
11
|
+
* useRequestContext('my-plugin-name');
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare function useRequestContext<T extends ScopedContext>(scope?: string): T;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { META_ENV_SSR, useEnvContext } from '../ssr-interop';
|
|
2
|
+
/**
|
|
3
|
+
* Provides access to the current request context.
|
|
4
|
+
* @param scope - An optional string used to scope the request context. It is recommended to
|
|
5
|
+
* prevent modifying the properties added by other plugins.
|
|
6
|
+
* @returns A request-scoped object that can be modified to provide and consume information
|
|
7
|
+
* across different React components in the tree.
|
|
8
|
+
* @example
|
|
9
|
+
* ```js
|
|
10
|
+
* import {useRequestContext} from '@shopify/hydrogen';
|
|
11
|
+
* useRequestContext('my-plugin-name');
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function useRequestContext(scope = 'default') {
|
|
15
|
+
if (__HYDROGEN_DEV__ && !META_ENV_SSR) {
|
|
16
|
+
throw new Error('useRequestContext can only be used in the server');
|
|
17
|
+
}
|
|
18
|
+
const scopes = useEnvContext((req) => req.ctx.scopes);
|
|
19
|
+
if (!scopes.has(scope)) {
|
|
20
|
+
scopes.set(scope, Object.create(null));
|
|
21
|
+
}
|
|
22
|
+
return scopes.get(scope);
|
|
23
|
+
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { useServerRequest } from '../ServerRequestProvider';
|
|
2
2
|
/** The `useSession` hook reads session data in server components. */
|
|
3
3
|
export const useSession = function () {
|
|
4
|
-
var _a;
|
|
5
4
|
const request = useServerRequest();
|
|
6
|
-
const session =
|
|
5
|
+
const session = request.ctx.session?.get() || {};
|
|
7
6
|
return session;
|
|
8
7
|
};
|
|
@@ -7,13 +7,12 @@ import { useEnvContext, META_ENV_SSR } from '../ssr-interop';
|
|
|
7
7
|
* The `useUrl` hook retrieves the current URL in a server or client component.
|
|
8
8
|
*/
|
|
9
9
|
export function useUrl() {
|
|
10
|
-
var _a, _b;
|
|
11
10
|
if (META_ENV_SSR) {
|
|
12
11
|
const serverUrl = new URL(useEnvContext((req) => req.url) // eslint-disable-line react-hooks/rules-of-hooks
|
|
13
12
|
);
|
|
14
13
|
if (serverUrl.pathname === RSC_PATHNAME) {
|
|
15
14
|
const state = parseJSON(serverUrl.searchParams.get('state') || '{}');
|
|
16
|
-
const parsedUrl = `${serverUrl.origin}${
|
|
15
|
+
const parsedUrl = `${serverUrl.origin}${state.pathname ?? ''}${state.search ?? ''}`;
|
|
17
16
|
return new URL(parsedUrl);
|
|
18
17
|
}
|
|
19
18
|
return new URL(serverUrl);
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* works and is only meant to be used during development.
|
|
4
4
|
*/
|
|
5
5
|
export class InMemoryCache {
|
|
6
|
+
store;
|
|
6
7
|
constructor() {
|
|
7
8
|
this.store = new Map();
|
|
8
9
|
}
|
|
@@ -13,15 +14,14 @@ export class InMemoryCache {
|
|
|
13
14
|
});
|
|
14
15
|
}
|
|
15
16
|
match(request) {
|
|
16
|
-
var _a, _b;
|
|
17
17
|
const match = this.store.get(request.url);
|
|
18
18
|
if (!match) {
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
21
|
const { value, date } = match;
|
|
22
22
|
const cacheControl = value.headers.get('cache-control') || '';
|
|
23
|
-
const maxAge = parseInt(
|
|
24
|
-
const swr = parseInt(
|
|
23
|
+
const maxAge = parseInt(cacheControl.match(/max-age=(\d+)/)?.[1] || '0', 10);
|
|
24
|
+
const swr = parseInt(cacheControl.match(/stale-while-revalidate=(\d+)/)?.[1] || '0', 10);
|
|
25
25
|
const age = (new Date().valueOf() - date.valueOf()) / 1000;
|
|
26
26
|
const isMiss = age > maxAge + swr;
|
|
27
27
|
if (isMiss) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import type { ShopifyConfig } from '../shared-types';
|
|
1
2
|
import type { IncomingMessage, NextFunction } from 'connect';
|
|
2
3
|
import type { ServerResponse } from 'http';
|
|
3
4
|
import type { ViteDevServer } from 'vite';
|
|
4
|
-
import type { ShopifyConfig } from '../types';
|
|
5
5
|
declare type HydrogenMiddlewareArgs = {
|
|
6
6
|
dev?: boolean;
|
|
7
7
|
indexTemplate: string | ((url: string) => Promise<string>);
|
|
@@ -27,7 +27,6 @@ export function hydrogenMiddleware({ dev, cache, indexTemplate, getServerEntrypo
|
|
|
27
27
|
? import('../utilities/web-api-polyfill')
|
|
28
28
|
: undefined;
|
|
29
29
|
return async function (request, response, next) {
|
|
30
|
-
var _a, _b, _c;
|
|
31
30
|
try {
|
|
32
31
|
await webPolyfills;
|
|
33
32
|
const entrypoint = await Promise.resolve(getServerEntrypoint()).catch((error) => {
|
|
@@ -37,7 +36,7 @@ export function hydrogenMiddleware({ dev, cache, indexTemplate, getServerEntrypo
|
|
|
37
36
|
// to keep throwing it on refresh until things are fixed.
|
|
38
37
|
entrypointError = error;
|
|
39
38
|
});
|
|
40
|
-
const handleRequest =
|
|
39
|
+
const handleRequest = entrypoint?.default ?? entrypoint;
|
|
41
40
|
if (typeof handleRequest !== 'function') {
|
|
42
41
|
if (entrypointError) {
|
|
43
42
|
throw entrypointError;
|
|
@@ -68,7 +67,7 @@ export function hydrogenMiddleware({ dev, cache, indexTemplate, getServerEntrypo
|
|
|
68
67
|
*/
|
|
69
68
|
try {
|
|
70
69
|
const template = typeof indexTemplate === 'function'
|
|
71
|
-
? await indexTemplate(
|
|
70
|
+
? await indexTemplate(request.originalUrl ?? request.url ?? '')
|
|
72
71
|
: indexTemplate;
|
|
73
72
|
const html = template.replace(`<div id="root"></div>`, `<div id="root"><pre><code>${e.stack}</code></pre></div>`);
|
|
74
73
|
response.write(html);
|
|
@@ -94,5 +93,5 @@ async function respondWithGraphiql(response, shopifyConfig) {
|
|
|
94
93
|
}
|
|
95
94
|
const { storeDomain, storefrontToken, storefrontApiVersion } = shopifyConfig;
|
|
96
95
|
response.setHeader('Content-Type', 'text/html');
|
|
97
|
-
response.end(graphiqlHtml(storeDomain
|
|
96
|
+
response.end(graphiqlHtml(storeDomain?.replace(/^https?:\/\//, ''), storefrontToken, storefrontApiVersion));
|
|
98
97
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type { HydrogenVitePluginOptions } from '
|
|
1
|
+
import type { HydrogenVitePluginOptions } from './types';
|
|
2
2
|
import type { Plugin } from 'vite';
|
|
3
|
-
declare const
|
|
4
|
-
|
|
3
|
+
declare const hydrogenPlugin: {
|
|
4
|
+
(pluginOptions?: HydrogenVitePluginOptions): Plugin[];
|
|
5
|
+
default: any;
|
|
6
|
+
};
|
|
7
|
+
export = hydrogenPlugin;
|
|
8
|
+
export default hydrogenPlugin;
|
|
@@ -11,7 +11,8 @@ import inspect from 'vite-plugin-inspect';
|
|
|
11
11
|
import react from '@vitejs/plugin-react';
|
|
12
12
|
import cssModulesRsc from './plugins/vite-plugin-css-modules-rsc';
|
|
13
13
|
import clientImports from './plugins/vite-plugin-client-imports';
|
|
14
|
-
|
|
14
|
+
import suppressWarnings from './plugins/vite-plugin-hydrogen-suppress-warnings';
|
|
15
|
+
const hydrogenPlugin = (pluginOptions = {}) => {
|
|
15
16
|
return [
|
|
16
17
|
process.env.VITE_INSPECT && inspect(),
|
|
17
18
|
hydrogenConfig(),
|
|
@@ -25,6 +26,8 @@ export default (pluginOptions = {}) => {
|
|
|
25
26
|
cssModulesRsc(),
|
|
26
27
|
rsc(),
|
|
27
28
|
platformEntry(),
|
|
29
|
+
suppressWarnings(),
|
|
28
30
|
pluginOptions.purgeQueryCacheOnBuild && purgeQueryCache(),
|
|
29
31
|
];
|
|
30
32
|
};
|
|
33
|
+
export default hydrogenPlugin; // For ESM
|
|
@@ -10,7 +10,7 @@ export default function clientImports() {
|
|
|
10
10
|
async resolveId(source, importer, { ssr }) {
|
|
11
11
|
if (ssr)
|
|
12
12
|
return;
|
|
13
|
-
if (/\.server\.(j|t)sx?/.test(importer
|
|
13
|
+
if (/\.server\.(j|t)sx?/.test(importer ?? ''))
|
|
14
14
|
return;
|
|
15
15
|
if ('@shopify/hydrogen' !== source)
|
|
16
16
|
return;
|
|
@@ -24,73 +24,79 @@ export default () => {
|
|
|
24
24
|
}
|
|
25
25
|
return {
|
|
26
26
|
name: 'vite-plugin-hydrogen-config',
|
|
27
|
-
config: async (config, env) => {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
// This library is currently included as a compiled vendor lib, not published yet to NPM
|
|
33
|
-
'react-server-dom-vite/client-proxy': require.resolve('@shopify/hydrogen/vendor/react-server-dom-vite/esm/react-server-dom-vite-client-proxy.js'),
|
|
34
|
-
},
|
|
27
|
+
config: async (config, env) => ({
|
|
28
|
+
resolve: {
|
|
29
|
+
alias: {
|
|
30
|
+
// This library is currently included as a compiled vendor lib, not published yet to NPM
|
|
31
|
+
'react-server-dom-vite/client-proxy': require.resolve('@shopify/hydrogen/vendor/react-server-dom-vite/esm/react-server-dom-vite-client-proxy.js'),
|
|
35
32
|
},
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
},
|
|
34
|
+
build: {
|
|
35
|
+
minify: config.build?.minify ?? 'esbuild',
|
|
36
|
+
sourcemap: true,
|
|
37
|
+
rollupOptions: config.build?.rollupOptions
|
|
38
|
+
? Object.assign(rollupOptions, config.build.rollupOptions)
|
|
39
|
+
: rollupOptions,
|
|
40
|
+
target: config.build?.ssr
|
|
41
|
+
? isWorker
|
|
42
|
+
? 'es2022' // CFW (Updates weekly to latest V8)
|
|
43
|
+
: 'es2020' // Node (Support for v14.19 used in SB)
|
|
44
|
+
: 'modules', // Browsers (Vite default value)
|
|
45
|
+
},
|
|
46
|
+
ssr: {
|
|
47
|
+
/**
|
|
48
|
+
* Tell Vite to bundle everything when we're building for Workers.
|
|
49
|
+
* Otherwise, bundle RSC plugin as a workaround to apply the vendor alias above.
|
|
50
|
+
*/
|
|
51
|
+
noExternal: isWorker || [/react-server-dom-vite/],
|
|
52
|
+
target: isWorker ? 'webworker' : 'node',
|
|
53
|
+
},
|
|
54
|
+
// Reload when updating local Hydrogen lib
|
|
55
|
+
server: process.env.LOCAL_DEV && {
|
|
56
|
+
watch: {
|
|
57
|
+
ignored: [
|
|
58
|
+
'!**/node_modules/@shopify/hydrogen/**',
|
|
59
|
+
'!**/node_modules/@shopify/hydrogen-ui/**',
|
|
60
|
+
],
|
|
42
61
|
},
|
|
43
|
-
|
|
62
|
+
},
|
|
63
|
+
optimizeDeps: {
|
|
64
|
+
exclude: [
|
|
65
|
+
'@shopify/hydrogen',
|
|
66
|
+
'@shopify/hydrogen/client',
|
|
67
|
+
'@shopify/hydrogen/entry-client',
|
|
68
|
+
'@shopify/hydrogen-ui',
|
|
69
|
+
],
|
|
70
|
+
include: [
|
|
44
71
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
72
|
+
* Additionally, the following dependencies have trouble loading the
|
|
73
|
+
* correct version of the dependency (server vs client). This tells Vite to take the
|
|
74
|
+
* server versions and optimize them for ESM.
|
|
47
75
|
*/
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
'react-helmet-async',
|
|
74
|
-
'react-error-boundary',
|
|
75
|
-
/**
|
|
76
|
-
* Vite cannot find the following dependencies since they might be
|
|
77
|
-
* required in RSC asynchronously. This tells Vite to optimize them
|
|
78
|
-
* at server start to avoid posterior page reloads and issues (#429 #430).
|
|
79
|
-
*/
|
|
80
|
-
'react',
|
|
81
|
-
'react-dom/client',
|
|
82
|
-
'react-server-dom-vite/client-proxy',
|
|
83
|
-
// https://github.com/vitejs/vite/issues/6215
|
|
84
|
-
'react/jsx-runtime',
|
|
85
|
-
],
|
|
86
|
-
},
|
|
87
|
-
define: {
|
|
88
|
-
__DEV__: env.mode !== 'production',
|
|
89
|
-
__WORKER__: isWorker,
|
|
90
|
-
},
|
|
91
|
-
envPrefix: ['VITE_', 'PUBLIC_'],
|
|
92
|
-
base: process.env.HYDROGEN_ASSET_BASE_URL,
|
|
93
|
-
});
|
|
94
|
-
},
|
|
76
|
+
'react-helmet-async',
|
|
77
|
+
'react-error-boundary',
|
|
78
|
+
/**
|
|
79
|
+
* Vite cannot find the following dependencies since they might be
|
|
80
|
+
* required in RSC asynchronously. This tells Vite to optimize them
|
|
81
|
+
* at server start to avoid posterior page reloads and issues (#429 #430).
|
|
82
|
+
*/
|
|
83
|
+
'react',
|
|
84
|
+
'react-dom/client',
|
|
85
|
+
'react-server-dom-vite/client-proxy',
|
|
86
|
+
// https://github.com/vitejs/vite/issues/6215
|
|
87
|
+
'react/jsx-runtime',
|
|
88
|
+
// https://github.com/nfriedly/set-cookie-parser/issues/50
|
|
89
|
+
'set-cookie-parser',
|
|
90
|
+
'undici',
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
define: {
|
|
94
|
+
__HYDROGEN_DEV__: env.mode !== 'production',
|
|
95
|
+
__HYDROGEN_WORKER__: isWorker,
|
|
96
|
+
__HYDROGEN_TEST__: false, // Used in unit tests
|
|
97
|
+
},
|
|
98
|
+
envPrefix: ['VITE_', 'PUBLIC_'],
|
|
99
|
+
base: process.env.HYDROGEN_ASSET_BASE_URL,
|
|
100
|
+
}),
|
|
95
101
|
};
|
|
96
102
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
|
-
import type { HydrogenVitePluginOptions } from '
|
|
2
|
+
import type { HydrogenVitePluginOptions } from '../types';
|
|
3
3
|
export declare const HYDROGEN_DEFAULT_SERVER_ENTRY: string;
|
|
4
4
|
declare const _default: (pluginOptions: HydrogenVitePluginOptions) => Plugin;
|
|
5
5
|
export default _default;
|
|
@@ -27,16 +27,15 @@ export default (pluginOptions) => {
|
|
|
27
27
|
server.middlewares.use(graphiqlMiddleware({
|
|
28
28
|
dev: true,
|
|
29
29
|
getShopifyConfig: async (incomingMessage) => {
|
|
30
|
-
var _a;
|
|
31
30
|
const { default: hydrogenConfig } = await server.ssrLoadModule(VIRTUAL_PROXY_HYDROGEN_CONFIG_ID);
|
|
32
31
|
// @ts-ignore
|
|
33
|
-
const { address = 'localhost', port = '3000' } =
|
|
32
|
+
const { address = 'localhost', port = '3000' } = server.httpServer?.address() || {};
|
|
34
33
|
const url = new URL(`http://${address}:${port}${incomingMessage.url}`);
|
|
35
34
|
const request = new Request(url.toString(), {
|
|
36
35
|
headers: incomingMessage.headers,
|
|
37
36
|
});
|
|
38
37
|
// @ts-expect-error Manually set `normalizedUrl` which a developer expects to be available
|
|
39
|
-
// via `
|
|
38
|
+
// via `HydrogenRequest` during production runtime.
|
|
40
39
|
request.normalizedUrl = request.url;
|
|
41
40
|
const { shopify } = hydrogenConfig;
|
|
42
41
|
return typeof shopify === 'function' ? shopify(request) : shopify;
|
|
@@ -48,7 +47,7 @@ export default (pluginOptions) => {
|
|
|
48
47
|
indexTemplate: getIndexTemplate,
|
|
49
48
|
getServerEntrypoint: () => server.ssrLoadModule(HYDROGEN_DEFAULT_SERVER_ENTRY),
|
|
50
49
|
devServer: server,
|
|
51
|
-
cache:
|
|
50
|
+
cache: pluginOptions?.devCache
|
|
52
51
|
? new InMemoryCache()
|
|
53
52
|
: undefined,
|
|
54
53
|
}));
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
// @ts-ignore
|
|
2
|
-
import reactServerDomVite from '@shopify/hydrogen/vendor/react-server-dom-vite/plugin';
|
|
2
|
+
import reactServerDomVite from '@shopify/hydrogen/vendor/react-server-dom-vite/plugin.js';
|
|
3
3
|
import { HYDROGEN_DEFAULT_SERVER_ENTRY } from './vite-plugin-hydrogen-middleware';
|
|
4
4
|
import { VIRTUAL_PROXY_HYDROGEN_ROUTES_ID } from './vite-plugin-hydrogen-virtual-files';
|
|
5
|
-
import { viteception } from '../viteception';
|
|
6
5
|
export default function () {
|
|
7
6
|
return reactServerDomVite({
|
|
7
|
+
serverBuildEntries: [
|
|
8
|
+
HYDROGEN_DEFAULT_SERVER_ENTRY,
|
|
9
|
+
VIRTUAL_PROXY_HYDROGEN_ROUTES_ID,
|
|
10
|
+
],
|
|
8
11
|
isServerComponentImporterAllowed(importer, source) {
|
|
9
12
|
return (
|
|
10
13
|
// Always allow the entry server (e.g. App.server.jsx) to be imported
|
|
@@ -15,16 +18,5 @@ export default function () {
|
|
|
15
18
|
// TODO: revisit this when RSC splits into two bundles
|
|
16
19
|
/\.test\.[tj]sx?$/.test(importer));
|
|
17
20
|
},
|
|
18
|
-
async findClientComponentsForClientBuild() {
|
|
19
|
-
const { server } = await viteception([
|
|
20
|
-
// Load server entry to discover client components early
|
|
21
|
-
HYDROGEN_DEFAULT_SERVER_ENTRY,
|
|
22
|
-
// Route globs are placed in a virtual module and need to
|
|
23
|
-
// be loaded to discover client components in routes
|
|
24
|
-
VIRTUAL_PROXY_HYDROGEN_ROUTES_ID,
|
|
25
|
-
]);
|
|
26
|
-
// At this point, the server has loaded all the components in the module graph
|
|
27
|
-
return reactServerDomVite.findClientComponentsFromServer(server);
|
|
28
|
-
},
|
|
29
21
|
});
|
|
30
22
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export default () => {
|
|
2
|
+
return {
|
|
3
|
+
name: 'hydrogen:suppress-warnings',
|
|
4
|
+
configResolved(config) {
|
|
5
|
+
// TODO: Fix the actual issues that cause these warnings
|
|
6
|
+
const filterOut = (msg) => msg.startsWith("@shopify/hydrogen doesn't appear to be written in CJS") ||
|
|
7
|
+
(msg.includes('missing source files') &&
|
|
8
|
+
['kolorist'].some((lib) => msg.includes(lib)));
|
|
9
|
+
for (const method of ['warn', 'warnOnce']) {
|
|
10
|
+
const original = config.logger[method];
|
|
11
|
+
config.logger[method] = (msg, ...args) => {
|
|
12
|
+
if (filterOut(msg))
|
|
13
|
+
return;
|
|
14
|
+
return original(msg, ...args);
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Plugin } from 'vite';
|
|
2
|
-
import type { HydrogenVitePluginOptions } from '
|
|
2
|
+
import type { HydrogenVitePluginOptions } from '../types';
|
|
3
3
|
export declare const HYDROGEN_DEFAULT_SERVER_ENTRY: string;
|
|
4
4
|
export declare const VIRTUAL_PROXY_HYDROGEN_CONFIG_ID: string;
|
|
5
5
|
export declare const VIRTUAL_PROXY_HYDROGEN_ROUTES_ID: string;
|
|
@@ -51,8 +51,8 @@ export default (pluginOptions) => {
|
|
|
51
51
|
}
|
|
52
52
|
if (id === '\0' + VIRTUAL_HYDROGEN_ROUTES_ID) {
|
|
53
53
|
return importHydrogenConfig().then((hc) => {
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
let routesPath = (typeof hc.routes === 'string' ? hc.routes : hc.routes?.files) ??
|
|
55
|
+
'/src/routes';
|
|
56
56
|
if (routesPath.startsWith('./')) {
|
|
57
57
|
routesPath = routesPath.slice(1);
|
|
58
58
|
}
|
|
@@ -63,7 +63,7 @@ export default (pluginOptions) => {
|
|
|
63
63
|
routesPath += '**/*.server.[jt](s|sx)';
|
|
64
64
|
}
|
|
65
65
|
const [dirPrefix] = routesPath.split('/*');
|
|
66
|
-
let code = `export default {\n dirPrefix: '${dirPrefix}',\n basePath: '${
|
|
66
|
+
let code = `export default {\n dirPrefix: '${dirPrefix}',\n basePath: '${hc.routes?.basePath ?? ''}',\n files: import.meta.globEager('${routesPath}')\n};`;
|
|
67
67
|
if (config.command === 'serve') {
|
|
68
68
|
// Add dependency on Hydrogen config for HMR
|
|
69
69
|
code += `\nimport '${VIRTUAL_HYDROGEN_CONFIG_ID}';`;
|
|
@@ -95,5 +95,7 @@ async function findHydrogenConfigPath(root, userProvidedPath) {
|
|
|
95
95
|
configPath = path.resolve(root, configPath);
|
|
96
96
|
}
|
|
97
97
|
return (configPath ||
|
|
98
|
-
require.resolve(
|
|
98
|
+
require.resolve(
|
|
99
|
+
// eslint-disable-next-line node/no-missing-require
|
|
100
|
+
'@shopify/hydrogen/utilities/empty-hydrogen-config'));
|
|
99
101
|
}
|