@shopify/hydrogen 2026.10.0-preview.2 → 2026.10.0-preview.4
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 +34 -3
- package/dist/cli/index.mjs +578 -85
- package/dist/client/client.mjs +2 -2
- package/dist/client/errors.d.mts +19 -19
- package/dist/client/errors.mjs +19 -16
- package/dist/client/errors.mjs.map +1 -1
- package/dist/client/types.d.mts +91 -10
- package/dist/core/analytics/cart-tracker.d.mts +14 -0
- package/dist/core/analytics/cart-tracker.mjs +15 -1
- package/dist/core/analytics/cart-tracker.mjs.map +1 -1
- package/dist/core/analytics/custom-consent.mjs +12 -0
- package/dist/core/analytics/custom-consent.mjs.map +1 -0
- package/dist/core/analytics/events.d.mts +7 -0
- package/dist/core/analytics/events.mjs +7 -0
- package/dist/core/analytics/events.mjs.map +1 -1
- package/dist/core/analytics/index.d.mts +1 -1
- package/dist/core/analytics/types.d.mts +152 -16
- package/dist/core/cart/actions.d.mts +47 -3
- package/dist/core/cart/actions.mjs +29 -0
- package/dist/core/cart/actions.mjs.map +1 -1
- package/dist/core/cart/attach-quantity-input.d.mts +26 -0
- package/dist/core/cart/attach-quantity-input.mjs +26 -0
- package/dist/core/cart/attach-quantity-input.mjs.map +1 -1
- package/dist/core/cart/cart.d.mts +106 -6
- package/dist/core/cart/cart.mjs +57 -6
- package/dist/core/cart/cart.mjs.map +1 -1
- package/dist/core/cart/cookie.d.mts +15 -0
- package/dist/core/cart/cookie.mjs +15 -0
- package/dist/core/cart/cookie.mjs.map +1 -1
- package/dist/core/cart/form.d.mts +61 -0
- package/dist/core/cart/form.mjs +18 -0
- package/dist/core/cart/form.mjs.map +1 -1
- package/dist/core/cart/get-cart.d.mts +43 -2
- package/dist/core/cart/get-cart.mjs +33 -0
- package/dist/core/cart/get-cart.mjs.map +1 -1
- package/dist/core/cart/index.d.mts +1 -1
- package/dist/core/cart/quantity.d.mts +17 -0
- package/dist/core/cart/quantity.mjs +17 -0
- package/dist/core/cart/quantity.mjs.map +1 -1
- package/dist/core/cart/queries.d.mts +402 -369
- package/dist/core/cart/queries.mjs +2 -1
- package/dist/core/cart/queries.mjs.map +1 -1
- package/dist/core/cart/server-handlers.d.mts +69 -0
- package/dist/core/cart/server-handlers.mjs +2 -10
- package/dist/core/cart/server-handlers.mjs.map +1 -1
- package/dist/core/cart/state.d.mts +133 -0
- package/dist/core/cart/state.mjs +8 -0
- package/dist/core/cart/state.mjs.map +1 -1
- package/dist/core/collection/collection.d.mts +18 -2
- package/dist/core/collection/collection.mjs +11 -0
- package/dist/core/collection/collection.mjs.map +1 -1
- package/dist/core/collection/index.d.mts +1 -1
- package/dist/core/collection/reconciler.d.mts +13 -4
- package/dist/core/collection/reconciler.mjs.map +1 -1
- package/dist/core/collection/state.d.mts +7 -2
- package/dist/core/collection/state.mjs.map +1 -1
- package/dist/core/collection/url.d.mts +3 -0
- package/dist/core/collection/url.mjs.map +1 -1
- package/dist/core/constants.d.mts +1 -1
- package/dist/core/constants.mjs +2 -2
- package/dist/core/constants.mjs.map +1 -1
- package/dist/core/headers.mjs +2 -2
- package/dist/core/headers.mjs.map +1 -1
- package/dist/core/index.d.mts +5 -5
- package/dist/core/logging/logging.mjs.map +1 -1
- package/dist/core/money/format.mjs +6 -3
- package/dist/core/money/format.mjs.map +1 -1
- package/dist/core/observable.mjs +0 -3
- package/dist/core/observable.mjs.map +1 -1
- package/dist/core/predictive-search/form.d.mts +1 -0
- package/dist/core/predictive-search/form.mjs +1 -0
- package/dist/core/predictive-search/form.mjs.map +1 -1
- package/dist/core/predictive-search/index.d.mts +1 -1
- package/dist/core/predictive-search/queries.d.mts +40 -4
- package/dist/core/predictive-search/queries.mjs +7 -1
- package/dist/core/predictive-search/queries.mjs.map +1 -1
- package/dist/core/predictive-search/search.d.mts +43 -10
- package/dist/core/predictive-search/search.mjs +34 -0
- package/dist/core/predictive-search/search.mjs.map +1 -1
- package/dist/core/predictive-search/server-handlers.d.mts +31 -5
- package/dist/core/predictive-search/server-handlers.mjs +5 -3
- package/dist/core/predictive-search/server-handlers.mjs.map +1 -1
- package/dist/core/predictive-search/store.d.mts +3 -1
- package/dist/core/predictive-search/store.mjs.map +1 -1
- package/dist/core/predictive-search/url.d.mts +50 -8
- package/dist/core/predictive-search/url.mjs +9 -0
- package/dist/core/predictive-search/url.mjs.map +1 -1
- package/dist/core/product/form.d.mts +21 -2
- package/dist/core/product/form.mjs +13 -0
- package/dist/core/product/form.mjs.map +1 -1
- package/dist/core/product/index.d.mts +1 -1
- package/dist/core/product/options.d.mts +2 -2
- package/dist/core/product/options.mjs +2 -2
- package/dist/core/product/options.mjs.map +1 -1
- package/dist/core/product/product-form.d.mts +33 -1
- package/dist/core/product/product-form.mjs +30 -0
- package/dist/core/product/product-form.mjs.map +1 -1
- package/dist/core/product/state.d.mts +41 -0
- package/dist/core/product/url.d.mts +6 -0
- package/dist/core/product/url.mjs.map +1 -1
- package/dist/core/request-context.d.mts +8 -5
- package/dist/core/request-context.mjs +17 -39
- package/dist/core/request-context.mjs.map +1 -1
- package/dist/core/request-routing/handle-shopify-routes.mjs +4 -1
- package/dist/core/request-routing/handle-shopify-routes.mjs.map +1 -1
- package/dist/core/request-routing/interceptors/ajax-api.mjs +1 -1
- package/dist/core/request-routing/interceptors/api-proxy.mjs +1 -1
- package/dist/core/request-routing/interceptors/checkout.mjs +22 -6
- package/dist/core/request-routing/interceptors/checkout.mjs.map +1 -1
- package/dist/core/request-routing/interceptors/mcp-proxy.mjs +1 -1
- package/dist/core/request-routing/interceptors/proxy.mjs +36 -10
- package/dist/core/request-routing/interceptors/proxy.mjs.map +1 -1
- package/dist/core/request-routing/interceptors/query-param-redirect.mjs +5 -11
- package/dist/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -1
- package/dist/core/request-routing/interceptors/sfapi-proxy.mjs +19 -1
- package/dist/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -1
- package/dist/core/request-routing/interceptors/ucp-mcp-proxy.mjs +35 -0
- package/dist/core/request-routing/interceptors/ucp-mcp-proxy.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/well-known.mjs +1 -1
- package/dist/core/shopify-scripts/analytics.mjs +2 -2
- package/dist/core/shopify-scripts/analytics.mjs.map +1 -1
- package/dist/core/shopify-scripts/constants.mjs +4 -2
- package/dist/core/shopify-scripts/constants.mjs.map +1 -1
- package/dist/core/shopify-scripts/global.mjs +9 -4
- package/dist/core/shopify-scripts/global.mjs.map +1 -1
- package/dist/core/shopify-scripts/index.d.mts +1 -0
- package/dist/core/shopify-scripts/index.mjs +14 -12
- package/dist/core/shopify-scripts/index.mjs.map +1 -1
- package/dist/core/shopify-scripts/initialize.d.mts +1 -0
- package/dist/core/shopify-scripts/initialize.mjs +10 -3
- package/dist/core/shopify-scripts/initialize.mjs.map +1 -1
- package/dist/core/shopify-scripts/types.d.mts +6 -0
- package/dist/core/url.mjs +21 -2
- package/dist/core/url.mjs.map +1 -1
- package/dist/customer-account/client.d.mts +128 -4
- package/dist/customer-account/client.mjs +27 -1
- package/dist/customer-account/client.mjs.map +1 -1
- package/dist/customer-account/errors.d.mts +46 -0
- package/dist/customer-account/errors.mjs +46 -0
- package/dist/customer-account/errors.mjs.map +1 -1
- package/dist/customer-account/graphql.d.mts +68 -0
- package/dist/customer-account/graphql.mjs +47 -0
- package/dist/customer-account/graphql.mjs.map +1 -1
- package/dist/customer-account/session.d.mts +114 -23
- package/dist/customer-account/session.mjs +27 -12
- package/dist/customer-account/session.mjs.map +1 -1
- package/dist/customer-account/type-resolver.d.mts +23 -0
- package/dist/customer-account-api-types.d.ts +570 -374
- package/dist/customer-account.schema.json +2981 -1527
- package/dist/development/client/client.mjs +2 -2
- package/dist/development/client/errors.d.mts +19 -19
- package/dist/development/client/errors.mjs +20 -20
- package/dist/development/client/errors.mjs.map +1 -1
- package/dist/development/client/types.d.mts +91 -10
- package/dist/development/core/analytics/cart-tracker.d.mts +14 -0
- package/dist/development/core/analytics/cart-tracker.mjs +15 -1
- package/dist/development/core/analytics/cart-tracker.mjs.map +1 -1
- package/dist/development/core/analytics/custom-consent.mjs +12 -0
- package/dist/development/core/analytics/custom-consent.mjs.map +1 -0
- package/dist/development/core/analytics/events.d.mts +7 -0
- package/dist/development/core/analytics/events.mjs +7 -0
- package/dist/development/core/analytics/events.mjs.map +1 -1
- package/dist/development/core/analytics/index.d.mts +1 -1
- package/dist/development/core/analytics/types.d.mts +152 -16
- package/dist/development/core/cart/actions.d.mts +47 -3
- package/dist/development/core/cart/actions.mjs +29 -0
- package/dist/development/core/cart/actions.mjs.map +1 -1
- package/dist/development/core/cart/attach-quantity-input.d.mts +26 -0
- package/dist/development/core/cart/attach-quantity-input.mjs +26 -0
- package/dist/development/core/cart/attach-quantity-input.mjs.map +1 -1
- package/dist/development/core/cart/cart.d.mts +106 -6
- package/dist/development/core/cart/cart.mjs +57 -6
- package/dist/development/core/cart/cart.mjs.map +1 -1
- package/dist/development/core/cart/cookie.d.mts +15 -0
- package/dist/development/core/cart/cookie.mjs +15 -0
- package/dist/development/core/cart/cookie.mjs.map +1 -1
- package/dist/development/core/cart/form.d.mts +61 -0
- package/dist/development/core/cart/form.mjs +18 -0
- package/dist/development/core/cart/form.mjs.map +1 -1
- package/dist/development/core/cart/get-cart.d.mts +43 -2
- package/dist/development/core/cart/get-cart.mjs +33 -0
- package/dist/development/core/cart/get-cart.mjs.map +1 -1
- package/dist/development/core/cart/index.d.mts +1 -1
- package/dist/development/core/cart/quantity.d.mts +17 -0
- package/dist/development/core/cart/quantity.mjs +17 -0
- package/dist/development/core/cart/quantity.mjs.map +1 -1
- package/dist/development/core/cart/queries.d.mts +345 -312
- package/dist/development/core/cart/queries.mjs +2 -1
- package/dist/development/core/cart/queries.mjs.map +1 -1
- package/dist/development/core/cart/server-handlers.d.mts +69 -0
- package/dist/development/core/cart/server-handlers.mjs +2 -10
- package/dist/development/core/cart/server-handlers.mjs.map +1 -1
- package/dist/development/core/cart/state.d.mts +133 -0
- package/dist/development/core/cart/state.mjs +8 -0
- package/dist/development/core/cart/state.mjs.map +1 -1
- package/dist/development/core/collection/collection.d.mts +18 -2
- package/dist/development/core/collection/collection.mjs +11 -0
- package/dist/development/core/collection/collection.mjs.map +1 -1
- package/dist/development/core/collection/index.d.mts +1 -1
- package/dist/development/core/collection/reconciler.d.mts +13 -4
- package/dist/development/core/collection/reconciler.mjs.map +1 -1
- package/dist/development/core/collection/state.d.mts +7 -2
- package/dist/development/core/collection/state.mjs.map +1 -1
- package/dist/development/core/collection/url.d.mts +3 -0
- package/dist/development/core/collection/url.mjs.map +1 -1
- package/dist/development/core/constants.mjs +1 -1
- package/dist/development/core/constants.mjs.map +1 -1
- package/dist/development/core/development.d.mts +5 -5
- package/dist/development/core/headers.mjs +2 -2
- package/dist/development/core/headers.mjs.map +1 -1
- package/dist/development/core/index.d.mts +4 -4
- package/dist/development/core/logging/logging.mjs.map +1 -1
- package/dist/development/core/money/format.mjs +6 -3
- package/dist/development/core/money/format.mjs.map +1 -1
- package/dist/development/core/observable.mjs +0 -3
- package/dist/development/core/observable.mjs.map +1 -1
- package/dist/development/core/predictive-search/form.d.mts +1 -0
- package/dist/development/core/predictive-search/form.mjs +1 -0
- package/dist/development/core/predictive-search/form.mjs.map +1 -1
- package/dist/development/core/predictive-search/index.d.mts +1 -1
- package/dist/development/core/predictive-search/queries.d.mts +38 -2
- package/dist/development/core/predictive-search/queries.mjs +7 -1
- package/dist/development/core/predictive-search/queries.mjs.map +1 -1
- package/dist/development/core/predictive-search/search.d.mts +43 -10
- package/dist/development/core/predictive-search/search.mjs +34 -0
- package/dist/development/core/predictive-search/search.mjs.map +1 -1
- package/dist/development/core/predictive-search/server-handlers.d.mts +31 -5
- package/dist/development/core/predictive-search/server-handlers.mjs +5 -3
- package/dist/development/core/predictive-search/server-handlers.mjs.map +1 -1
- package/dist/development/core/predictive-search/store.d.mts +3 -1
- package/dist/development/core/predictive-search/store.mjs.map +1 -1
- package/dist/development/core/predictive-search/url.d.mts +50 -8
- package/dist/development/core/predictive-search/url.mjs +9 -0
- package/dist/development/core/predictive-search/url.mjs.map +1 -1
- package/dist/development/core/product/form.d.mts +21 -2
- package/dist/development/core/product/form.mjs +13 -0
- package/dist/development/core/product/form.mjs.map +1 -1
- package/dist/development/core/product/index.d.mts +1 -1
- package/dist/development/core/product/options.d.mts +2 -2
- package/dist/development/core/product/options.mjs +2 -2
- package/dist/development/core/product/options.mjs.map +1 -1
- package/dist/development/core/product/product-form.d.mts +33 -1
- package/dist/development/core/product/product-form.mjs +30 -0
- package/dist/development/core/product/product-form.mjs.map +1 -1
- package/dist/development/core/product/state.d.mts +41 -0
- package/dist/development/core/product/url.d.mts +6 -0
- package/dist/development/core/product/url.mjs.map +1 -1
- package/dist/development/core/request-context.d.mts +8 -5
- package/dist/development/core/request-context.mjs +17 -39
- package/dist/development/core/request-context.mjs.map +1 -1
- package/dist/development/core/request-routing/handle-shopify-routes.mjs +4 -1
- package/dist/development/core/request-routing/handle-shopify-routes.mjs.map +1 -1
- package/dist/development/core/request-routing/interceptors/ajax-api.mjs +1 -1
- package/dist/development/core/request-routing/interceptors/api-proxy.mjs +1 -1
- package/dist/development/core/request-routing/interceptors/checkout.mjs +22 -6
- package/dist/development/core/request-routing/interceptors/checkout.mjs.map +1 -1
- package/dist/development/core/request-routing/interceptors/mcp-proxy.mjs +1 -1
- package/dist/development/core/request-routing/interceptors/proxy.mjs +36 -10
- package/dist/development/core/request-routing/interceptors/proxy.mjs.map +1 -1
- package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs +5 -11
- package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -1
- package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs +19 -1
- package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -1
- package/dist/development/core/request-routing/interceptors/ucp-mcp-proxy.mjs +35 -0
- package/dist/development/core/request-routing/interceptors/ucp-mcp-proxy.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/well-known.mjs +1 -1
- package/dist/development/core/shopify-scripts/analytics.mjs +2 -2
- package/dist/development/core/shopify-scripts/analytics.mjs.map +1 -1
- package/dist/development/core/shopify-scripts/constants.mjs +4 -2
- package/dist/development/core/shopify-scripts/constants.mjs.map +1 -1
- package/dist/development/core/shopify-scripts/global.mjs +9 -4
- package/dist/development/core/shopify-scripts/global.mjs.map +1 -1
- package/dist/development/core/shopify-scripts/index.d.mts +1 -0
- package/dist/development/core/shopify-scripts/index.mjs +14 -12
- package/dist/development/core/shopify-scripts/index.mjs.map +1 -1
- package/dist/development/core/shopify-scripts/initialize.d.mts +1 -0
- package/dist/development/core/shopify-scripts/initialize.mjs +10 -3
- package/dist/development/core/shopify-scripts/initialize.mjs.map +1 -1
- package/dist/development/core/shopify-scripts/types.d.mts +6 -0
- package/dist/development/core/url.mjs +21 -2
- package/dist/development/core/url.mjs.map +1 -1
- package/dist/development/customer-account/session.d.mts +69 -13
- package/dist/development/customer-account/session.mjs +4 -0
- package/dist/development/customer-account/session.mjs.map +1 -1
- package/dist/development/globals.d.mts +6 -5
- package/dist/development/graphql/generated/graphql-env.d.mts +459 -16
- package/dist/development/graphql/generated/storefront-api-types.d.mts +1 -1
- package/dist/development/graphql/graphql.d.mts +33 -0
- package/dist/development/graphql/graphql.mjs +30 -0
- package/dist/development/graphql/graphql.mjs.map +1 -1
- package/dist/development/graphql/type-resolver.d.mts +14 -0
- package/dist/development/react/cart.d.mts +85 -14
- package/dist/development/react/cart.mjs +123 -3
- package/dist/development/react/cart.mjs.map +1 -1
- package/dist/development/react/collection.d.mts +2 -4
- package/dist/development/react/collection.mjs.map +1 -1
- package/dist/development/react/index.d.mts +8 -6
- package/dist/development/react/index.mjs +2 -2
- package/dist/development/react/predictive-search.d.mts +68 -7
- package/dist/development/react/predictive-search.mjs +54 -12
- package/dist/development/react/predictive-search.mjs.map +1 -1
- package/dist/development/react/product.d.mts +1 -0
- package/dist/development/react/product.mjs +5 -2
- package/dist/development/react/product.mjs.map +1 -1
- package/dist/development/react/shopify-scripts.mjs +1 -0
- package/dist/development/react/shopify-scripts.mjs.map +1 -1
- package/dist/development/vue/cart.d.mts +85 -6
- package/dist/development/vue/cart.mjs +95 -0
- package/dist/development/vue/cart.mjs.map +1 -1
- package/dist/development/vue/collection.d.mts +83 -5
- package/dist/development/vue/collection.mjs +52 -0
- package/dist/development/vue/collection.mjs.map +1 -1
- package/dist/development/vue/index.d.mts +6 -4
- package/dist/development/vue/predictive-search.d.mts +53 -6
- package/dist/development/vue/predictive-search.mjs +33 -0
- package/dist/development/vue/predictive-search.mjs.map +1 -1
- package/dist/development/vue/product.d.mts +6 -2
- package/dist/development/vue/product.mjs.map +1 -1
- package/dist/development/vue/shopify-scripts.d.mts +30 -3
- package/dist/development/vue/shopify-scripts.mjs +6 -0
- package/dist/development/vue/shopify-scripts.mjs.map +1 -1
- package/dist/globals.d.mts +6 -5
- package/dist/graphql/generated/customer-account-graphql-env.d.mts +1717 -1090
- package/dist/graphql/generated/graphql-env.d.mts +459 -16
- package/dist/graphql/generated/storefront-api-types.d.mts +1 -1
- package/dist/graphql/graphql.d.mts +33 -0
- package/dist/graphql/graphql.mjs +30 -0
- package/dist/graphql/graphql.mjs.map +1 -1
- package/dist/graphql/type-resolver.d.mts +14 -0
- package/dist/react/cart.d.mts +85 -14
- package/dist/react/cart.mjs +123 -3
- package/dist/react/cart.mjs.map +1 -1
- package/dist/react/collection.d.mts +2 -4
- package/dist/react/collection.mjs.map +1 -1
- package/dist/react/index.d.mts +8 -6
- package/dist/react/index.mjs +2 -2
- package/dist/react/predictive-search.d.mts +68 -7
- package/dist/react/predictive-search.mjs +54 -12
- package/dist/react/predictive-search.mjs.map +1 -1
- package/dist/react/product.d.mts +1 -0
- package/dist/react/product.mjs +5 -2
- package/dist/react/product.mjs.map +1 -1
- package/dist/react/shopify-scripts.mjs +1 -0
- package/dist/react/shopify-scripts.mjs.map +1 -1
- package/dist/storefront-api-types.d.ts +165 -20
- package/dist/storefront.schema.json +782 -57
- package/dist/vite/customer-account.mjs +191 -0
- package/dist/vite/customer-account.mjs.map +1 -0
- package/dist/vite/local-https.mjs +13 -29
- package/dist/vite/local-https.mjs.map +1 -1
- package/dist/vite/mkcert.mjs +1 -1
- package/dist/vue/cart.d.mts +85 -6
- package/dist/vue/cart.mjs +95 -0
- package/dist/vue/cart.mjs.map +1 -1
- package/dist/vue/collection.d.mts +83 -5
- package/dist/vue/collection.mjs +52 -0
- package/dist/vue/collection.mjs.map +1 -1
- package/dist/vue/index.d.mts +6 -4
- package/dist/vue/predictive-search.d.mts +53 -6
- package/dist/vue/predictive-search.mjs +33 -0
- package/dist/vue/predictive-search.mjs.map +1 -1
- package/dist/vue/product.d.mts +6 -2
- package/dist/vue/product.mjs.map +1 -1
- package/dist/vue/shopify-scripts.d.mts +31 -4
- package/dist/vue/shopify-scripts.mjs +6 -0
- package/dist/vue/shopify-scripts.mjs.map +1 -1
- package/package.json +5 -2
- package/skills/hydrogen-analytics/SKILL.md +6 -5
- package/skills/hydrogen-analytics/references/custom-consent.md +52 -0
- package/skills/hydrogen-analytics/references/react.md +1 -1
- package/skills/hydrogen-cart-metafields/SKILL.md +133 -0
- package/skills/hydrogen-cart-ui/SKILL.md +2 -1
- package/skills/hydrogen-customer-account/SKILL.md +3 -3
- package/skills/hydrogen-local-https/SKILL.md +22 -7
- package/skills/hydrogen-request-handlers/SKILL.md +5 -5
- package/skills/hydrogen-request-handlers/references/nuxt.md +0 -6
- package/skills/hydrogen-setup/references/analytics.md +24 -23
- package/skills/hydrogen-setup/steps/1-inspect-app.md +1 -1
- package/skills/hydrogen-setup/steps/11-verify.md +1 -0
- package/skills/hydrogen-setup/steps/2-scaffold.md +22 -1
- package/skills/hydrogen-smoke-test/SKILL.md +2 -2
- package/skills/hydrogen-storefront-client/SKILL.md +4 -2
- package/skills/hydrogen-variant-form/SKILL.md +10 -4
- package/ts-plugin/package.json +5 -0
- package/dist/core/shopify-scripts/consent.mjs +0 -17
- package/dist/core/shopify-scripts/consent.mjs.map +0 -1
- package/dist/core/shopify-scripts/deprecated-cookies.mjs +0 -97
- package/dist/core/shopify-scripts/deprecated-cookies.mjs.map +0 -1
- package/dist/core/shopify-scripts/utils/cookie-domain.mjs +0 -43
- package/dist/core/shopify-scripts/utils/cookie-domain.mjs.map +0 -1
- package/dist/core/shopify-scripts/utils/tracking-values.mjs +0 -65
- package/dist/core/shopify-scripts/utils/tracking-values.mjs.map +0 -1
- package/dist/core/shopify-scripts/utils/uuid.mjs +0 -17
- package/dist/core/shopify-scripts/utils/uuid.mjs.map +0 -1
- package/dist/development/core/shopify-scripts/consent.mjs +0 -17
- package/dist/development/core/shopify-scripts/consent.mjs.map +0 -1
- package/dist/development/core/shopify-scripts/deprecated-cookies.mjs +0 -97
- package/dist/development/core/shopify-scripts/deprecated-cookies.mjs.map +0 -1
- package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs +0 -43
- package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs.map +0 -1
- package/dist/development/core/shopify-scripts/utils/tracking-values.mjs +0 -65
- package/dist/development/core/shopify-scripts/utils/tracking-values.mjs.map +0 -1
- package/dist/development/core/shopify-scripts/utils/uuid.mjs +0 -17
- package/dist/development/core/shopify-scripts/utils/uuid.mjs.map +0 -1
|
@@ -1,37 +1,137 @@
|
|
|
1
1
|
import { CartData, CartState } from "./state.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/core/cart/cart.d.ts
|
|
4
|
+
/** Timeout (in milliseconds) for cart loads and mutations. */
|
|
4
5
|
declare const STANDARD_ACTION_TIMEOUT_IN_MS = 30000;
|
|
6
|
+
/**
|
|
7
|
+
* Error thrown when the cart endpoint responds with a non-2xx status.
|
|
8
|
+
*
|
|
9
|
+
* Carries the HTTP {@link CartNetworkError.status | status} code so callers
|
|
10
|
+
* can distinguish transient failures from permanent ones.
|
|
11
|
+
*/
|
|
5
12
|
declare class CartNetworkError extends Error {
|
|
6
13
|
readonly status: number;
|
|
7
14
|
constructor(status: number);
|
|
8
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* A reactive, framework-agnostic cart state machine.
|
|
18
|
+
*
|
|
19
|
+
* The store manages optimistic mutations and server reconciliation — the client's
|
|
20
|
+
* *intent*. Cart-level costs and totals are always server-authoritative, but
|
|
21
|
+
* line-level data (quantity, estimated cost) and discount applicability are
|
|
22
|
+
* projected optimistically until the server response arrives.
|
|
23
|
+
*
|
|
24
|
+
* Mutations are dispatched via {@link CartStore.handleFormSubmit} (from HTML
|
|
25
|
+
* forms) or through Shopify Standard Action `shopify:cart:*` events.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* const store = createCartStore({
|
|
30
|
+
* initialData: { cart: loaderData.cart },
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* store.connect();
|
|
34
|
+
*
|
|
35
|
+
* const unsubscribe = store.subscribe((state) => {
|
|
36
|
+
* renderCart(state.data);
|
|
37
|
+
* });
|
|
38
|
+
*
|
|
39
|
+
* store.destroy();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
9
42
|
type CartStore = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Activates the store — starts listening for Shopify standard action events
|
|
45
|
+
* and triggers the initial cart load if no `initialData` was provided.
|
|
46
|
+
* Idempotent; no-op without `document` (SSR-safe).
|
|
47
|
+
*/
|
|
48
|
+
connect(): void; /** Tears down the store — cancels in-flight requests, removes event listeners, releases resources. */
|
|
49
|
+
destroy(): void; /** Replaces the settled cart data with a fresh server response. */
|
|
50
|
+
hydrate(data: CartData): void; /** Returns the current {@link CartState}, with optimistic projections applied on top of settled data. */
|
|
13
51
|
getState(): CartState;
|
|
14
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Registers a listener invoked on every state change. Returns an unsubscribe function.
|
|
54
|
+
* Compatible with React's `useSyncExternalStore`.
|
|
55
|
+
*
|
|
56
|
+
* @param listener - Callback receiving the new {@link CartState} snapshot
|
|
57
|
+
*/
|
|
58
|
+
subscribe(listener: (state: CartState) => void): () => void; /** Triggers a full cart load from the server endpoint. */
|
|
15
59
|
fetch(): Promise<void>;
|
|
16
60
|
/**
|
|
17
61
|
* Reconciles the cart after an out-of-band mutation: revalidates the current
|
|
18
62
|
* cart, or loads one when none is present yet (e.g. just created server-side).
|
|
19
63
|
*/
|
|
20
|
-
refresh(): void;
|
|
64
|
+
refresh(): void; /** Resets the store — aborts in-flight requests, clears data and errors, and re-fetches when connected. */
|
|
21
65
|
reset(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Intercepts a native `SubmitEvent` from a cart form, parses the intent and
|
|
68
|
+
* field values, and dispatches the matching transaction.
|
|
69
|
+
*
|
|
70
|
+
* The submitter's `value` attribute determines the action — `"add"`,
|
|
71
|
+
* `"increase"`, `"decrease"`, `"remove"`, `"set"`, `"discount-apply"`,
|
|
72
|
+
* `"discount-remove"`, `"note-update"`, or `"attributes-update"`. An empty
|
|
73
|
+
* value with a `merchandiseId` field is treated as `"add"`.
|
|
74
|
+
*
|
|
75
|
+
* The returned promise rejects with a `TypeError` if `event.target` is not
|
|
76
|
+
* a form or `event.submitter` is missing, and with an `Error` if the
|
|
77
|
+
* submitter's value is not a recognized intent.
|
|
78
|
+
*/
|
|
22
79
|
handleFormSubmit(event: SubmitEvent, eventDetail?: Record<string, unknown>): Promise<void>;
|
|
23
80
|
};
|
|
81
|
+
/** Actions for reconciling cart state after updates outside Standard Actions. */
|
|
82
|
+
type CartActions = Pick<CartStore, "refresh">;
|
|
24
83
|
type CartInitialData<TData extends CartData = CartData> = {
|
|
25
84
|
cart: TData | null;
|
|
26
85
|
errors?: Array<{
|
|
27
86
|
message: string;
|
|
28
87
|
}>;
|
|
29
88
|
};
|
|
89
|
+
/** Options for {@link createCartStore}. */
|
|
30
90
|
type CreateCartStoreOptions<TData extends CartData = CartData> = {
|
|
91
|
+
/**
|
|
92
|
+
* Server-loaded cart data to hydrate the store with on creation.
|
|
93
|
+
*
|
|
94
|
+
* Accepts a synchronous value or a `PromiseLike` for streamed/deferred data.
|
|
95
|
+
* When omitted, the store starts empty and loads the cart on {@link CartStore.connect}.
|
|
96
|
+
*/
|
|
31
97
|
initialData?: CartInitialData<TData> | PromiseLike<CartInitialData<TData>>;
|
|
32
98
|
};
|
|
99
|
+
/**
|
|
100
|
+
* Creates a new {@link CartStore} for the given initial data.
|
|
101
|
+
*
|
|
102
|
+
* The store is inert until {@link CartStore.connect} is called — no network
|
|
103
|
+
* requests are made and no event listeners are attached at creation time.
|
|
104
|
+
* Framework adapters call `connect()` on mount and `destroy()` on unmount.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* // With synchronous loader data
|
|
109
|
+
* const store = createCartStore({
|
|
110
|
+
* initialData: { cart: loaderData.cart },
|
|
111
|
+
* });
|
|
112
|
+
*
|
|
113
|
+
* // With deferred/streamed data
|
|
114
|
+
* const store = createCartStore({
|
|
115
|
+
* initialData: cartPromise,
|
|
116
|
+
* });
|
|
117
|
+
*
|
|
118
|
+
* // Empty — loads the cart on connect()
|
|
119
|
+
* const store = createCartStore();
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
33
122
|
declare function createCartStore<TData extends CartData = CartData>(options?: CreateCartStoreOptions<TData>): CartStore;
|
|
123
|
+
/**
|
|
124
|
+
* Routes cart loads and mutations to a custom endpoint instead of the
|
|
125
|
+
* Standard Actions default handler.
|
|
126
|
+
*
|
|
127
|
+
* Logs a warning if called again with a different endpoint.
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```ts
|
|
131
|
+
* configureCartEndpoint("/storefront/cart");
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
34
134
|
declare function configureCartEndpoint(endpoint: string): void;
|
|
35
135
|
//#endregion
|
|
36
|
-
export { CartNetworkError, CartStore, CreateCartStoreOptions, STANDARD_ACTION_TIMEOUT_IN_MS, configureCartEndpoint, createCartStore };
|
|
136
|
+
export { CartActions, CartNetworkError, CartStore, CreateCartStoreOptions, STANDARD_ACTION_TIMEOUT_IN_MS, configureCartEndpoint, createCartStore };
|
|
37
137
|
//# sourceMappingURL=cart.d.mts.map
|
package/dist/core/cart/cart.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getLogger } from "../logging/logging.mjs";
|
|
2
2
|
import { createObservable } from "../observable.mjs";
|
|
3
|
-
import { SHOPIFY_STOREFRONT_STANDARD_ACTIONS_SCRIPT, VISITOR_CONSENT_COLLECTED_EVENT } from "../shopify-scripts/constants.mjs";
|
|
3
|
+
import { CONSENT_TRACKING_API_LOADED_EVENT, SHOPIFY_STOREFRONT_STANDARD_ACTIONS_SCRIPT, VISITOR_CONSENT_COLLECTED_EVENT } from "../shopify-scripts/constants.mjs";
|
|
4
4
|
import { getCartAttributeFormEntries } from "./form.mjs";
|
|
5
5
|
import { DEFAULT_MINIMUM_QUANTITY, sanitizeQuantity } from "./quantity.mjs";
|
|
6
6
|
import { createCartState, createEmptyCartState, createEmptyErrorGroup } from "./state.mjs";
|
|
@@ -23,7 +23,14 @@ const EMPTY_QUANTITY = 0;
|
|
|
23
23
|
const FNV1A_OFFSET_BASIS = 2166136261;
|
|
24
24
|
const FNV1A_PRIME = 16777619;
|
|
25
25
|
const CART_REVALIDATION_ERROR_MESSAGE = "Something went wrong refreshing your cart. Please try again.";
|
|
26
|
+
/** Timeout (in milliseconds) for cart loads and mutations. */
|
|
26
27
|
const STANDARD_ACTION_TIMEOUT_IN_MS = 3e4;
|
|
28
|
+
/**
|
|
29
|
+
* Error thrown when the cart endpoint responds with a non-2xx status.
|
|
30
|
+
*
|
|
31
|
+
* Carries the HTTP {@link CartNetworkError.status | status} code so callers
|
|
32
|
+
* can distinguish transient failures from permanent ones.
|
|
33
|
+
*/
|
|
27
34
|
var CartNetworkError = class extends Error {
|
|
28
35
|
status;
|
|
29
36
|
constructor(status) {
|
|
@@ -949,6 +956,7 @@ function enqueueTransaction(store, type, payload, promise, reservedTransaction,
|
|
|
949
956
|
const expectedEventIndex = store.expectedEvents.findIndex((expected) => expected.token === eventToken);
|
|
950
957
|
if (expectedEventIndex !== -1) {
|
|
951
958
|
store.expectedEvents.splice(expectedEventIndex, 1);
|
|
959
|
+
promise.then(NOOP, NOOP);
|
|
952
960
|
return;
|
|
953
961
|
}
|
|
954
962
|
if (store.observedPromises.has(promise)) return;
|
|
@@ -1229,17 +1237,20 @@ function destroyCartStore(store, handlers) {
|
|
|
1229
1237
|
store.cartSyncAttached = false;
|
|
1230
1238
|
publishVisibleState(store);
|
|
1231
1239
|
}
|
|
1232
|
-
function
|
|
1240
|
+
function handleConsentStateChanged() {
|
|
1233
1241
|
revalidateConnectedCartCheckoutUrls();
|
|
1234
1242
|
}
|
|
1235
1243
|
function attachCartConsentListener() {
|
|
1236
1244
|
if (cartConsentListenerAttached) return;
|
|
1237
|
-
document.addEventListener(
|
|
1245
|
+
document.addEventListener(CONSENT_TRACKING_API_LOADED_EVENT, handleConsentStateChanged);
|
|
1246
|
+
document.addEventListener(VISITOR_CONSENT_COLLECTED_EVENT, handleConsentStateChanged);
|
|
1238
1247
|
cartConsentListenerAttached = true;
|
|
1248
|
+
if (window.Shopify?.customerPrivacy?.consentStatus === "loaded") revalidateConnectedCartCheckoutUrls();
|
|
1239
1249
|
}
|
|
1240
1250
|
function detachCartConsentListenerIfIdle() {
|
|
1241
1251
|
if (!cartConsentListenerAttached || connectedCartStores.size > 0) return;
|
|
1242
|
-
document.removeEventListener(
|
|
1252
|
+
document.removeEventListener(CONSENT_TRACKING_API_LOADED_EVENT, handleConsentStateChanged);
|
|
1253
|
+
document.removeEventListener(VISITOR_CONSENT_COLLECTED_EVENT, handleConsentStateChanged);
|
|
1243
1254
|
cartConsentListenerAttached = false;
|
|
1244
1255
|
}
|
|
1245
1256
|
function createCartObservable(initialState, onReadyPromiseRemoved) {
|
|
@@ -1365,6 +1376,29 @@ function loadCartInStore(store, cartPromise) {
|
|
|
1365
1376
|
store.observable.setReadyState(state);
|
|
1366
1377
|
return promise;
|
|
1367
1378
|
}
|
|
1379
|
+
/**
|
|
1380
|
+
* Creates a new {@link CartStore} for the given initial data.
|
|
1381
|
+
*
|
|
1382
|
+
* The store is inert until {@link CartStore.connect} is called — no network
|
|
1383
|
+
* requests are made and no event listeners are attached at creation time.
|
|
1384
|
+
* Framework adapters call `connect()` on mount and `destroy()` on unmount.
|
|
1385
|
+
*
|
|
1386
|
+
* @example
|
|
1387
|
+
* ```ts
|
|
1388
|
+
* // With synchronous loader data
|
|
1389
|
+
* const store = createCartStore({
|
|
1390
|
+
* initialData: { cart: loaderData.cart },
|
|
1391
|
+
* });
|
|
1392
|
+
*
|
|
1393
|
+
* // With deferred/streamed data
|
|
1394
|
+
* const store = createCartStore({
|
|
1395
|
+
* initialData: cartPromise,
|
|
1396
|
+
* });
|
|
1397
|
+
*
|
|
1398
|
+
* // Empty — loads the cart on connect()
|
|
1399
|
+
* const store = createCartStore();
|
|
1400
|
+
* ```
|
|
1401
|
+
*/
|
|
1368
1402
|
function createCartStore(options = {}) {
|
|
1369
1403
|
const initialData = options.initialData;
|
|
1370
1404
|
const asyncInitialData = isPromiseLike(initialData);
|
|
@@ -1476,11 +1510,17 @@ function getAddPayload(formData, eventDetail) {
|
|
|
1476
1510
|
const rawQuantity = Number.parseInt(formData.get("quantity"), 10);
|
|
1477
1511
|
const quantity = Number.isNaN(rawQuantity) ? DEFAULT_ADD_QUANTITY : Math.max(DEFAULT_ADD_QUANTITY, rawQuantity);
|
|
1478
1512
|
const sellingPlanId = formData.get("sellingPlanId") || void 0;
|
|
1513
|
+
const rawAttributes = getCartAttributeFormEntries(formData);
|
|
1514
|
+
const attributes = rawAttributes.length > 0 ? rawAttributes.filter(({ key }) => key !== "").map(({ key, value }) => ({
|
|
1515
|
+
key,
|
|
1516
|
+
value: String(value)
|
|
1517
|
+
})) : void 0;
|
|
1479
1518
|
return {
|
|
1480
1519
|
lines: [{
|
|
1481
1520
|
merchandiseId,
|
|
1482
1521
|
quantity,
|
|
1483
|
-
...sellingPlanId ? { sellingPlanId } : {}
|
|
1522
|
+
...sellingPlanId ? { sellingPlanId } : {},
|
|
1523
|
+
...attributes ? { attributes } : {}
|
|
1484
1524
|
}],
|
|
1485
1525
|
products: extractProductDetails(eventDetail),
|
|
1486
1526
|
...eventDetail ? { eventDetail } : {}
|
|
@@ -1505,12 +1545,23 @@ async function handleFormSubmitInStore(store, handlers, event, eventDetail) {
|
|
|
1505
1545
|
if (LINE_INTENTS.has(intent)) return submitLineIntent(store, intent, formData);
|
|
1506
1546
|
if (DISCOUNT_INTENTS.has(intent)) return submitDiscountIntent(store, intent, formData);
|
|
1507
1547
|
if (intent === "note-update") return dispatchTransaction(store, "set_note", { note: formData.get("note") ?? "" });
|
|
1508
|
-
if (intent === "attributes-update") return dispatchTransaction(store, "set_attributes", { attributes: getCartAttributeFormEntries(formData).map(({ key, value }) => ({
|
|
1548
|
+
if (intent === "attributes-update") return dispatchTransaction(store, "set_attributes", { attributes: getCartAttributeFormEntries(formData).filter(({ key }) => key !== "").map(({ key, value }) => ({
|
|
1509
1549
|
key,
|
|
1510
1550
|
value: String(value)
|
|
1511
1551
|
})) });
|
|
1512
1552
|
throw new Error(`Unknown cart form intent: "${intent}"`);
|
|
1513
1553
|
}
|
|
1554
|
+
/**
|
|
1555
|
+
* Routes cart loads and mutations to a custom endpoint instead of the
|
|
1556
|
+
* Standard Actions default handler.
|
|
1557
|
+
*
|
|
1558
|
+
* Logs a warning if called again with a different endpoint.
|
|
1559
|
+
*
|
|
1560
|
+
* @example
|
|
1561
|
+
* ```ts
|
|
1562
|
+
* configureCartEndpoint("/storefront/cart");
|
|
1563
|
+
* ```
|
|
1564
|
+
*/
|
|
1514
1565
|
function configureCartEndpoint(endpoint) {
|
|
1515
1566
|
if (configuredCartEndpoint === endpoint) return;
|
|
1516
1567
|
if (configuredCartEndpoint !== null) log.warn(`configureCartEndpoint called with "${endpoint}" but already configured with "${configuredCartEndpoint}".`);
|