@shopify/hydrogen 2026.4.4 → 2026.10.0-preview.1
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 +73 -13
- package/bin/hydrogen.mjs +7 -0
- package/dist/cli/index.mjs +330 -0
- package/dist/client/client.d.mts +34 -0
- package/dist/client/client.mjs +193 -0
- package/dist/client/client.mjs.map +1 -0
- package/dist/client/errors.d.mts +48 -0
- package/dist/client/errors.mjs +52 -0
- package/dist/client/errors.mjs.map +1 -0
- package/dist/client/index.d.mts +4 -0
- package/dist/client/types.d.mts +147 -0
- package/dist/core/analytics/cart-tracker.d.mts +8 -0
- package/dist/core/analytics/cart-tracker.mjs +144 -0
- package/dist/core/analytics/cart-tracker.mjs.map +1 -0
- package/dist/core/analytics/events.d.mts +15 -0
- package/dist/core/analytics/events.mjs +15 -0
- package/dist/core/analytics/events.mjs.map +1 -0
- package/dist/core/analytics/index.d.mts +3 -0
- package/dist/core/analytics/types.d.mts +143 -0
- package/dist/core/analytics/utils/flatten-connection.d.mts +19 -0
- package/dist/core/analytics/utils/flatten-connection.mjs +25 -0
- package/dist/core/analytics/utils/flatten-connection.mjs.map +1 -0
- package/dist/core/cache/cache-status.mjs +17 -0
- package/dist/core/cache/cache-status.mjs.map +1 -0
- package/dist/core/cache/fetch-with-cache.d.mts +43 -0
- package/dist/core/cache/fetch-with-cache.mjs +188 -0
- package/dist/core/cache/fetch-with-cache.mjs.map +1 -0
- package/dist/core/cache/key.d.mts +6 -0
- package/dist/core/cache/key.mjs +27 -0
- package/dist/core/cache/key.mjs.map +1 -0
- package/dist/core/cache/run-with-cache.d.mts +36 -0
- package/dist/core/cache/run-with-cache.mjs +114 -0
- package/dist/core/cache/run-with-cache.mjs.map +1 -0
- package/dist/core/cache/store.d.mts +19 -0
- package/dist/core/cache/store.mjs +62 -0
- package/dist/core/cache/store.mjs.map +1 -0
- package/dist/core/cache/strategies.d.mts +39 -0
- package/dist/core/cache/strategies.mjs +70 -0
- package/dist/core/cache/strategies.mjs.map +1 -0
- package/dist/core/cart/actions.d.mts +50 -0
- package/dist/core/cart/actions.mjs +240 -0
- package/dist/core/cart/actions.mjs.map +1 -0
- package/dist/core/cart/attach-quantity-input.d.mts +5 -0
- package/dist/core/cart/attach-quantity-input.mjs +17 -0
- package/dist/core/cart/attach-quantity-input.mjs.map +1 -0
- package/dist/core/cart/buyer-identity-sync.d.mts +23 -0
- package/dist/core/cart/buyer-identity-sync.mjs +9 -0
- package/dist/core/cart/buyer-identity-sync.mjs.map +1 -0
- package/dist/core/cart/cart.d.mts +32 -0
- package/dist/core/cart/cart.mjs +1687 -0
- package/dist/core/cart/cart.mjs.map +1 -0
- package/dist/core/cart/cookie.d.mts +5 -0
- package/dist/core/cart/cookie.mjs +28 -0
- package/dist/core/cart/cookie.mjs.map +1 -0
- package/dist/core/cart/form.d.mts +130 -0
- package/dist/core/cart/form.mjs +75 -0
- package/dist/core/cart/form.mjs.map +1 -0
- package/dist/core/cart/get-cart.d.mts +25 -0
- package/dist/core/cart/get-cart.mjs +32 -0
- package/dist/core/cart/get-cart.mjs.map +1 -0
- package/dist/core/cart/index.d.mts +10 -0
- package/dist/core/cart/quantity.d.mts +10 -0
- package/dist/core/cart/quantity.mjs +14 -0
- package/dist/core/cart/quantity.mjs.map +1 -0
- package/dist/core/cart/queries.d.mts +4296 -0
- package/dist/core/cart/queries.mjs +70 -0
- package/dist/core/cart/queries.mjs.map +1 -0
- package/dist/core/cart/server-handlers.d.mts +82 -0
- package/dist/core/cart/server-handlers.mjs +322 -0
- package/dist/core/cart/server-handlers.mjs.map +1 -0
- package/dist/core/cart/state.d.mts +137 -0
- package/dist/core/cart/state.mjs +76 -0
- package/dist/core/cart/state.mjs.map +1 -0
- package/dist/core/cart/sync-quantity-inputs.mjs +16 -0
- package/dist/core/cart/sync-quantity-inputs.mjs.map +1 -0
- package/dist/core/collection/collection.d.mts +134 -0
- package/dist/core/collection/collection.mjs +170 -0
- package/dist/core/collection/collection.mjs.map +1 -0
- package/dist/core/collection/index.d.mts +6 -0
- package/dist/core/collection/reconciler.d.mts +32 -0
- package/dist/core/collection/reconciler.mjs +89 -0
- package/dist/core/collection/reconciler.mjs.map +1 -0
- package/dist/core/collection/state.d.mts +66 -0
- package/dist/core/collection/state.mjs +20 -0
- package/dist/core/collection/state.mjs.map +1 -0
- package/dist/core/collection/url.d.mts +70 -0
- package/dist/core/collection/url.mjs +367 -0
- package/dist/core/collection/url.mjs.map +1 -0
- package/dist/core/constants.d.mts +5 -0
- package/dist/core/constants.mjs +8 -0
- package/dist/core/constants.mjs.map +1 -0
- package/dist/core/headers.mjs +44 -0
- package/dist/core/headers.mjs.map +1 -0
- package/dist/core/index.d.mts +55 -0
- package/dist/core/index.mjs +44 -0
- package/dist/core/logging/logging.d.mts +21 -0
- package/dist/core/logging/logging.mjs +99 -0
- package/dist/core/logging/logging.mjs.map +1 -0
- package/dist/core/logging/types.d.mts +40 -0
- package/dist/core/logging/types.mjs +18 -0
- package/dist/core/logging/types.mjs.map +1 -0
- package/dist/core/money/cache.mjs +25 -0
- package/dist/core/money/cache.mjs.map +1 -0
- package/dist/core/money/format.d.mts +15 -0
- package/dist/core/money/format.mjs +243 -0
- package/dist/core/money/format.mjs.map +1 -0
- package/dist/core/money/types.d.mts +47 -0
- package/dist/core/observable.mjs +46 -0
- package/dist/core/observable.mjs.map +1 -0
- package/dist/core/predictive-search/constants.d.mts +5 -0
- package/dist/core/predictive-search/constants.mjs +6 -0
- package/dist/core/predictive-search/constants.mjs.map +1 -0
- package/dist/core/predictive-search/form.d.mts +31 -0
- package/dist/core/predictive-search/form.mjs +31 -0
- package/dist/core/predictive-search/form.mjs.map +1 -0
- package/dist/core/predictive-search/index.d.mts +6 -0
- package/dist/core/predictive-search/queries.d.mts +118 -0
- package/dist/core/predictive-search/queries.mjs +81 -0
- package/dist/core/predictive-search/queries.mjs.map +1 -0
- package/dist/core/predictive-search/search.d.mts +32 -0
- package/dist/core/predictive-search/search.mjs +74 -0
- package/dist/core/predictive-search/search.mjs.map +1 -0
- package/dist/core/predictive-search/server-handlers.d.mts +36 -0
- package/dist/core/predictive-search/server-handlers.mjs +113 -0
- package/dist/core/predictive-search/server-handlers.mjs.map +1 -0
- package/dist/core/predictive-search/store.d.mts +44 -0
- package/dist/core/predictive-search/store.mjs +224 -0
- package/dist/core/predictive-search/store.mjs.map +1 -0
- package/dist/core/predictive-search/url.d.mts +41 -0
- package/dist/core/predictive-search/url.mjs +71 -0
- package/dist/core/predictive-search/url.mjs.map +1 -0
- package/dist/core/product/form.d.mts +63 -0
- package/dist/core/product/form.mjs +44 -0
- package/dist/core/product/form.mjs.map +1 -0
- package/dist/core/product/index.d.mts +4 -0
- package/dist/core/product/options.d.mts +40 -0
- package/dist/core/product/options.mjs +291 -0
- package/dist/core/product/options.mjs.map +1 -0
- package/dist/core/product/product-form.d.mts +72 -0
- package/dist/core/product/product-form.mjs +158 -0
- package/dist/core/product/product-form.mjs.map +1 -0
- package/dist/core/product/state.d.mts +68 -0
- package/dist/core/request-context.d.mts +70 -0
- package/dist/core/request-context.mjs +120 -0
- package/dist/core/request-context.mjs.map +1 -0
- package/dist/core/request-routing/handle-shopify-redirects.d.mts +17 -0
- package/dist/core/request-routing/handle-shopify-redirects.mjs +31 -0
- package/dist/core/request-routing/handle-shopify-redirects.mjs.map +1 -0
- package/dist/core/request-routing/handle-shopify-routes.d.mts +14 -0
- package/dist/core/request-routing/handle-shopify-routes.mjs +42 -0
- package/dist/core/request-routing/handle-shopify-routes.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/admin-redirect.mjs +12 -0
- package/dist/core/request-routing/interceptors/admin-redirect.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/agent-proxy.mjs +19 -0
- package/dist/core/request-routing/interceptors/agent-proxy.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/ajax-api.mjs +16 -0
- package/dist/core/request-routing/interceptors/ajax-api.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/api-proxy.mjs +20 -0
- package/dist/core/request-routing/interceptors/api-proxy.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/checkout.mjs +58 -0
- package/dist/core/request-routing/interceptors/checkout.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/mcp-proxy.mjs +23 -0
- package/dist/core/request-routing/interceptors/mcp-proxy.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/proxy.mjs +68 -0
- package/dist/core/request-routing/interceptors/proxy.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/query-param-redirect.mjs +22 -0
- package/dist/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/sfapi-proxy.mjs +27 -0
- package/dist/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/standard-routes.mjs +19 -0
- package/dist/core/request-routing/interceptors/standard-routes.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/url-redirects.mjs +27 -0
- package/dist/core/request-routing/interceptors/url-redirects.mjs.map +1 -0
- package/dist/core/request-routing/interceptors/well-known.mjs +19 -0
- package/dist/core/request-routing/interceptors/well-known.mjs.map +1 -0
- package/dist/core/request-routing/registered-routes.d.mts +7 -0
- package/dist/core/request-routing/registered-routes.mjs +59 -0
- package/dist/core/request-routing/registered-routes.mjs.map +1 -0
- package/dist/core/request-routing/route-types.d.mts +51 -0
- package/dist/core/request-routing/safe-apply-response-headers.mjs +16 -0
- package/dist/core/request-routing/safe-apply-response-headers.mjs.map +1 -0
- package/dist/core/shop-pay/shop-pay.d.mts +102 -0
- package/dist/core/shop-pay/shop-pay.mjs +289 -0
- package/dist/core/shop-pay/shop-pay.mjs.map +1 -0
- package/dist/core/shopify-scripts/analytics.mjs +26 -0
- package/dist/core/shopify-scripts/analytics.mjs.map +1 -0
- package/dist/core/shopify-scripts/consent.mjs +17 -0
- package/dist/core/shopify-scripts/consent.mjs.map +1 -0
- package/dist/core/shopify-scripts/constants.mjs +19 -0
- package/dist/core/shopify-scripts/constants.mjs.map +1 -0
- package/dist/core/shopify-scripts/deprecated-cookies.mjs +97 -0
- package/dist/core/shopify-scripts/deprecated-cookies.mjs.map +1 -0
- package/dist/core/shopify-scripts/global.d.mts +1 -0
- package/dist/core/shopify-scripts/global.mjs +86 -0
- package/dist/core/shopify-scripts/global.mjs.map +1 -0
- package/dist/core/shopify-scripts/index.d.mts +27 -0
- package/dist/core/shopify-scripts/index.mjs +135 -0
- package/dist/core/shopify-scripts/index.mjs.map +1 -0
- package/dist/core/shopify-scripts/initialize.d.mts +18 -0
- package/dist/core/shopify-scripts/initialize.mjs +27 -0
- package/dist/core/shopify-scripts/initialize.mjs.map +1 -0
- package/dist/core/shopify-scripts/page-view.mjs +49 -0
- package/dist/core/shopify-scripts/page-view.mjs.map +1 -0
- package/dist/core/shopify-scripts/perfkit.mjs +33 -0
- package/dist/core/shopify-scripts/perfkit.mjs.map +1 -0
- package/dist/core/shopify-scripts/render.d.mts +1 -0
- package/dist/core/shopify-scripts/render.mjs +23 -0
- package/dist/core/shopify-scripts/render.mjs.map +1 -0
- package/dist/core/shopify-scripts/types.d.mts +76 -0
- package/dist/core/shopify-scripts/utils/cookie-domain.mjs +43 -0
- package/dist/core/shopify-scripts/utils/cookie-domain.mjs.map +1 -0
- package/dist/core/shopify-scripts/utils/inline-script.mjs +8 -0
- package/dist/core/shopify-scripts/utils/inline-script.mjs.map +1 -0
- package/dist/core/shopify-scripts/utils/navigation.mjs +46 -0
- package/dist/core/shopify-scripts/utils/navigation.mjs.map +1 -0
- package/dist/core/shopify-scripts/utils/tracking-values.mjs +65 -0
- package/dist/core/shopify-scripts/utils/tracking-values.mjs.map +1 -0
- package/dist/core/shopify-scripts/utils/uuid.mjs +17 -0
- package/dist/core/shopify-scripts/utils/uuid.mjs.map +1 -0
- package/dist/core/shopify-scripts/webmcp.mjs +22 -0
- package/dist/core/shopify-scripts/webmcp.mjs.map +1 -0
- package/dist/core/standard-routes/build.d.mts +34 -0
- package/dist/core/standard-routes/build.mjs +54 -0
- package/dist/core/standard-routes/build.mjs.map +1 -0
- package/dist/core/standard-routes/defaults.mjs +31 -0
- package/dist/core/standard-routes/defaults.mjs.map +1 -0
- package/dist/core/standard-routes/match.mjs +108 -0
- package/dist/core/standard-routes/match.mjs.map +1 -0
- package/dist/core/standard-routes/path.mjs +58 -0
- package/dist/core/standard-routes/path.mjs.map +1 -0
- package/dist/core/standard-routes/redirects.mjs +51 -0
- package/dist/core/standard-routes/redirects.mjs.map +1 -0
- package/dist/core/standard-routes/types.d.mts +95 -0
- package/dist/core/url.mjs +35 -0
- package/dist/core/url.mjs.map +1 -0
- package/dist/core/utils/load-script.mjs +34 -0
- package/dist/core/utils/load-script.mjs.map +1 -0
- package/dist/core/utils/parse-gid.mjs +33 -0
- package/dist/core/utils/parse-gid.mjs.map +1 -0
- package/dist/core/utils/record.mjs +8 -0
- package/dist/core/utils/record.mjs.map +1 -0
- package/dist/customer-account/client.d.mts +50 -0
- package/dist/customer-account/client.mjs +239 -0
- package/dist/customer-account/client.mjs.map +1 -0
- package/dist/customer-account/errors.d.mts +28 -0
- package/dist/customer-account/errors.mjs +39 -0
- package/dist/customer-account/errors.mjs.map +1 -0
- package/dist/customer-account/graphql.d.mts +29 -0
- package/dist/customer-account/graphql.mjs +39 -0
- package/dist/customer-account/graphql.mjs.map +1 -0
- package/dist/customer-account/index.d.mts +7 -0
- package/dist/customer-account/index.mjs +7 -0
- package/dist/customer-account/session.d.mts +117 -0
- package/dist/customer-account/session.mjs +733 -0
- package/dist/customer-account/session.mjs.map +1 -0
- package/dist/customer-account/type-resolver.d.mts +11 -0
- package/dist/customer-account-api-types.d.ts +3269 -3270
- package/dist/customer-account.schema.json +50753 -1
- package/dist/development/_virtual/_@oxc-project_runtime@0.127.0/helpers/taggedTemplateLiteral.mjs +7 -0
- package/dist/development/client/client.d.mts +34 -0
- package/dist/development/client/client.mjs +193 -0
- package/dist/development/client/client.mjs.map +1 -0
- package/dist/development/client/errors.d.mts +48 -0
- package/dist/development/client/errors.mjs +57 -0
- package/dist/development/client/errors.mjs.map +1 -0
- package/dist/development/client/index.d.mts +4 -0
- package/dist/development/client/types.d.mts +147 -0
- package/dist/development/core/analytics/cart-tracker.d.mts +8 -0
- package/dist/development/core/analytics/cart-tracker.mjs +144 -0
- package/dist/development/core/analytics/cart-tracker.mjs.map +1 -0
- package/dist/development/core/analytics/events.d.mts +15 -0
- package/dist/development/core/analytics/events.mjs +15 -0
- package/dist/development/core/analytics/events.mjs.map +1 -0
- package/dist/development/core/analytics/index.d.mts +3 -0
- package/dist/development/core/analytics/types.d.mts +143 -0
- package/dist/development/core/analytics/utils/flatten-connection.d.mts +19 -0
- package/dist/development/core/analytics/utils/flatten-connection.mjs +25 -0
- package/dist/development/core/analytics/utils/flatten-connection.mjs.map +1 -0
- package/dist/development/core/cache/cache-status.mjs +17 -0
- package/dist/development/core/cache/cache-status.mjs.map +1 -0
- package/dist/development/core/cache/fetch-with-cache.d.mts +43 -0
- package/dist/development/core/cache/fetch-with-cache.mjs +188 -0
- package/dist/development/core/cache/fetch-with-cache.mjs.map +1 -0
- package/dist/development/core/cache/key.d.mts +6 -0
- package/dist/development/core/cache/key.mjs +27 -0
- package/dist/development/core/cache/key.mjs.map +1 -0
- package/dist/development/core/cache/run-with-cache.d.mts +36 -0
- package/dist/development/core/cache/run-with-cache.mjs +114 -0
- package/dist/development/core/cache/run-with-cache.mjs.map +1 -0
- package/dist/development/core/cache/store.d.mts +19 -0
- package/dist/development/core/cache/store.mjs +62 -0
- package/dist/development/core/cache/store.mjs.map +1 -0
- package/dist/development/core/cache/strategies.d.mts +39 -0
- package/dist/development/core/cache/strategies.mjs +70 -0
- package/dist/development/core/cache/strategies.mjs.map +1 -0
- package/dist/development/core/cart/actions.d.mts +50 -0
- package/dist/development/core/cart/actions.mjs +240 -0
- package/dist/development/core/cart/actions.mjs.map +1 -0
- package/dist/development/core/cart/attach-quantity-input.d.mts +5 -0
- package/dist/development/core/cart/attach-quantity-input.mjs +17 -0
- package/dist/development/core/cart/attach-quantity-input.mjs.map +1 -0
- package/dist/development/core/cart/buyer-identity-sync.d.mts +19 -0
- package/dist/development/core/cart/buyer-identity-sync.mjs +6 -0
- package/dist/development/core/cart/buyer-identity-sync.mjs.map +1 -0
- package/dist/development/core/cart/cart.d.mts +32 -0
- package/dist/development/core/cart/cart.mjs +1687 -0
- package/dist/development/core/cart/cart.mjs.map +1 -0
- package/dist/development/core/cart/cookie.d.mts +5 -0
- package/dist/development/core/cart/cookie.mjs +28 -0
- package/dist/development/core/cart/cookie.mjs.map +1 -0
- package/dist/development/core/cart/form.d.mts +130 -0
- package/dist/development/core/cart/form.mjs +75 -0
- package/dist/development/core/cart/form.mjs.map +1 -0
- package/dist/development/core/cart/get-cart.d.mts +25 -0
- package/dist/development/core/cart/get-cart.mjs +32 -0
- package/dist/development/core/cart/get-cart.mjs.map +1 -0
- package/dist/development/core/cart/index.d.mts +10 -0
- package/dist/development/core/cart/quantity.d.mts +10 -0
- package/dist/development/core/cart/quantity.mjs +14 -0
- package/dist/development/core/cart/quantity.mjs.map +1 -0
- package/dist/development/core/cart/queries.d.mts +4296 -0
- package/dist/development/core/cart/queries.mjs +70 -0
- package/dist/development/core/cart/queries.mjs.map +1 -0
- package/dist/development/core/cart/server-handlers.d.mts +82 -0
- package/dist/development/core/cart/server-handlers.mjs +322 -0
- package/dist/development/core/cart/server-handlers.mjs.map +1 -0
- package/dist/development/core/cart/state.d.mts +137 -0
- package/dist/development/core/cart/state.mjs +76 -0
- package/dist/development/core/cart/state.mjs.map +1 -0
- package/dist/development/core/cart/sync-quantity-inputs.mjs +16 -0
- package/dist/development/core/cart/sync-quantity-inputs.mjs.map +1 -0
- package/dist/development/core/collection/collection.d.mts +134 -0
- package/dist/development/core/collection/collection.mjs +170 -0
- package/dist/development/core/collection/collection.mjs.map +1 -0
- package/dist/development/core/collection/index.d.mts +6 -0
- package/dist/development/core/collection/reconciler.d.mts +32 -0
- package/dist/development/core/collection/reconciler.mjs +89 -0
- package/dist/development/core/collection/reconciler.mjs.map +1 -0
- package/dist/development/core/collection/state.d.mts +66 -0
- package/dist/development/core/collection/state.mjs +20 -0
- package/dist/development/core/collection/state.mjs.map +1 -0
- package/dist/development/core/collection/url.d.mts +70 -0
- package/dist/development/core/collection/url.mjs +367 -0
- package/dist/development/core/collection/url.mjs.map +1 -0
- package/dist/development/core/constants.mjs +7 -0
- package/dist/development/core/constants.mjs.map +1 -0
- package/dist/development/core/development.d.mts +55 -0
- package/dist/development/core/development.mjs +44 -0
- package/dist/development/core/headers.mjs +44 -0
- package/dist/development/core/headers.mjs.map +1 -0
- package/dist/development/core/index.d.mts +53 -0
- package/dist/development/core/logging/logging.d.mts +21 -0
- package/dist/development/core/logging/logging.mjs +99 -0
- package/dist/development/core/logging/logging.mjs.map +1 -0
- package/dist/development/core/logging/types.d.mts +40 -0
- package/dist/development/core/logging/types.mjs +18 -0
- package/dist/development/core/logging/types.mjs.map +1 -0
- package/dist/development/core/money/cache.mjs +25 -0
- package/dist/development/core/money/cache.mjs.map +1 -0
- package/dist/development/core/money/format.d.mts +15 -0
- package/dist/development/core/money/format.mjs +243 -0
- package/dist/development/core/money/format.mjs.map +1 -0
- package/dist/development/core/money/types.d.mts +47 -0
- package/dist/development/core/observable.mjs +46 -0
- package/dist/development/core/observable.mjs.map +1 -0
- package/dist/development/core/predictive-search/constants.d.mts +5 -0
- package/dist/development/core/predictive-search/constants.mjs +6 -0
- package/dist/development/core/predictive-search/constants.mjs.map +1 -0
- package/dist/development/core/predictive-search/form.d.mts +31 -0
- package/dist/development/core/predictive-search/form.mjs +31 -0
- package/dist/development/core/predictive-search/form.mjs.map +1 -0
- package/dist/development/core/predictive-search/index.d.mts +6 -0
- package/dist/development/core/predictive-search/queries.d.mts +118 -0
- package/dist/development/core/predictive-search/queries.mjs +81 -0
- package/dist/development/core/predictive-search/queries.mjs.map +1 -0
- package/dist/development/core/predictive-search/search.d.mts +32 -0
- package/dist/development/core/predictive-search/search.mjs +74 -0
- package/dist/development/core/predictive-search/search.mjs.map +1 -0
- package/dist/development/core/predictive-search/server-handlers.d.mts +36 -0
- package/dist/development/core/predictive-search/server-handlers.mjs +113 -0
- package/dist/development/core/predictive-search/server-handlers.mjs.map +1 -0
- package/dist/development/core/predictive-search/store.d.mts +44 -0
- package/dist/development/core/predictive-search/store.mjs +224 -0
- package/dist/development/core/predictive-search/store.mjs.map +1 -0
- package/dist/development/core/predictive-search/url.d.mts +41 -0
- package/dist/development/core/predictive-search/url.mjs +71 -0
- package/dist/development/core/predictive-search/url.mjs.map +1 -0
- package/dist/development/core/product/form.d.mts +63 -0
- package/dist/development/core/product/form.mjs +44 -0
- package/dist/development/core/product/form.mjs.map +1 -0
- package/dist/development/core/product/index.d.mts +4 -0
- package/dist/development/core/product/options.d.mts +40 -0
- package/dist/development/core/product/options.mjs +291 -0
- package/dist/development/core/product/options.mjs.map +1 -0
- package/dist/development/core/product/product-form.d.mts +72 -0
- package/dist/development/core/product/product-form.mjs +158 -0
- package/dist/development/core/product/product-form.mjs.map +1 -0
- package/dist/development/core/product/state.d.mts +68 -0
- package/dist/development/core/request-context.d.mts +70 -0
- package/dist/development/core/request-context.mjs +120 -0
- package/dist/development/core/request-context.mjs.map +1 -0
- package/dist/development/core/request-routing/handle-shopify-redirects.d.mts +17 -0
- package/dist/development/core/request-routing/handle-shopify-redirects.mjs +31 -0
- package/dist/development/core/request-routing/handle-shopify-redirects.mjs.map +1 -0
- package/dist/development/core/request-routing/handle-shopify-routes.d.mts +1 -0
- package/dist/development/core/request-routing/handle-shopify-routes.development.d.mts +11 -0
- package/dist/development/core/request-routing/handle-shopify-routes.development.mjs +16 -0
- package/dist/development/core/request-routing/handle-shopify-routes.development.mjs.map +1 -0
- package/dist/development/core/request-routing/handle-shopify-routes.mjs +42 -0
- package/dist/development/core/request-routing/handle-shopify-routes.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/admin-redirect.mjs +12 -0
- package/dist/development/core/request-routing/interceptors/admin-redirect.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/agent-proxy.mjs +19 -0
- package/dist/development/core/request-routing/interceptors/agent-proxy.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/ajax-api.mjs +16 -0
- package/dist/development/core/request-routing/interceptors/ajax-api.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/api-proxy.mjs +20 -0
- package/dist/development/core/request-routing/interceptors/api-proxy.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/checkout.mjs +58 -0
- package/dist/development/core/request-routing/interceptors/checkout.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/graphiql.mjs +46 -0
- package/dist/development/core/request-routing/interceptors/graphiql.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/mcp-proxy.mjs +23 -0
- package/dist/development/core/request-routing/interceptors/mcp-proxy.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/proxy.mjs +68 -0
- package/dist/development/core/request-routing/interceptors/proxy.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs +22 -0
- package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs +27 -0
- package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/standard-routes.mjs +19 -0
- package/dist/development/core/request-routing/interceptors/standard-routes.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/url-redirects.mjs +27 -0
- package/dist/development/core/request-routing/interceptors/url-redirects.mjs.map +1 -0
- package/dist/development/core/request-routing/interceptors/well-known.mjs +19 -0
- package/dist/development/core/request-routing/interceptors/well-known.mjs.map +1 -0
- package/dist/development/core/request-routing/registered-routes.d.mts +7 -0
- package/dist/development/core/request-routing/registered-routes.mjs +59 -0
- package/dist/development/core/request-routing/registered-routes.mjs.map +1 -0
- package/dist/development/core/request-routing/route-types.d.mts +51 -0
- package/dist/development/core/request-routing/safe-apply-response-headers.mjs +16 -0
- package/dist/development/core/request-routing/safe-apply-response-headers.mjs.map +1 -0
- package/dist/development/core/shop-pay/shop-pay.d.mts +102 -0
- package/dist/development/core/shop-pay/shop-pay.mjs +289 -0
- package/dist/development/core/shop-pay/shop-pay.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/analytics.mjs +26 -0
- package/dist/development/core/shopify-scripts/analytics.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/consent.mjs +17 -0
- package/dist/development/core/shopify-scripts/consent.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/constants.mjs +19 -0
- package/dist/development/core/shopify-scripts/constants.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/deprecated-cookies.mjs +97 -0
- package/dist/development/core/shopify-scripts/deprecated-cookies.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/global.d.mts +1 -0
- package/dist/development/core/shopify-scripts/global.mjs +86 -0
- package/dist/development/core/shopify-scripts/global.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/index.d.mts +27 -0
- package/dist/development/core/shopify-scripts/index.mjs +145 -0
- package/dist/development/core/shopify-scripts/index.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/initialize.d.mts +18 -0
- package/dist/development/core/shopify-scripts/initialize.mjs +27 -0
- package/dist/development/core/shopify-scripts/initialize.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/page-view.mjs +49 -0
- package/dist/development/core/shopify-scripts/page-view.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/perfkit.mjs +33 -0
- package/dist/development/core/shopify-scripts/perfkit.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/render.d.mts +1 -0
- package/dist/development/core/shopify-scripts/render.mjs +23 -0
- package/dist/development/core/shopify-scripts/render.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/types.d.mts +76 -0
- package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs +43 -0
- package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/utils/inline-script.mjs +8 -0
- package/dist/development/core/shopify-scripts/utils/inline-script.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/utils/navigation.mjs +46 -0
- package/dist/development/core/shopify-scripts/utils/navigation.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/utils/tracking-values.mjs +65 -0
- package/dist/development/core/shopify-scripts/utils/tracking-values.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/utils/uuid.mjs +17 -0
- package/dist/development/core/shopify-scripts/utils/uuid.mjs.map +1 -0
- package/dist/development/core/shopify-scripts/webmcp.mjs +22 -0
- package/dist/development/core/shopify-scripts/webmcp.mjs.map +1 -0
- package/dist/development/core/standard-routes/build.d.mts +34 -0
- package/dist/development/core/standard-routes/build.mjs +54 -0
- package/dist/development/core/standard-routes/build.mjs.map +1 -0
- package/dist/development/core/standard-routes/defaults.mjs +31 -0
- package/dist/development/core/standard-routes/defaults.mjs.map +1 -0
- package/dist/development/core/standard-routes/match.mjs +108 -0
- package/dist/development/core/standard-routes/match.mjs.map +1 -0
- package/dist/development/core/standard-routes/path.mjs +58 -0
- package/dist/development/core/standard-routes/path.mjs.map +1 -0
- package/dist/development/core/standard-routes/redirects.mjs +51 -0
- package/dist/development/core/standard-routes/redirects.mjs.map +1 -0
- package/dist/development/core/standard-routes/types.d.mts +95 -0
- package/dist/development/core/types.d.mts +11 -0
- package/dist/development/core/url.mjs +35 -0
- package/dist/development/core/url.mjs.map +1 -0
- package/dist/development/core/utils/load-script.mjs +34 -0
- package/dist/development/core/utils/load-script.mjs.map +1 -0
- package/dist/development/core/utils/parse-gid.mjs +33 -0
- package/dist/development/core/utils/parse-gid.mjs.map +1 -0
- package/dist/development/customer-account/session.d.mts +46 -0
- package/dist/development/customer-account/session.mjs +21 -0
- package/dist/development/customer-account/session.mjs.map +1 -0
- package/dist/development/globals.d.mts +64 -0
- package/dist/development/graphql/generated/customer-account-api-types.d.mts +13 -0
- package/dist/development/graphql/generated/graphql-env.d.mts +19280 -0
- package/dist/development/graphql/generated/storefront-api-types.d.mts +47 -0
- package/dist/development/graphql/graphql.d.mts +40 -0
- package/dist/development/graphql/graphql.mjs +16 -0
- package/dist/development/graphql/graphql.mjs.map +1 -0
- package/dist/development/graphql/index.d.mts +2 -0
- package/dist/development/graphql/scalars.d.mts +15 -0
- package/dist/development/graphql/type-resolver.d.mts +229 -0
- package/dist/development/react/cart.d.mts +40 -0
- package/dist/development/react/cart.mjs +150 -0
- package/dist/development/react/cart.mjs.map +1 -0
- package/dist/development/react/collection.d.mts +91 -0
- package/dist/development/react/collection.mjs +129 -0
- package/dist/development/react/collection.mjs.map +1 -0
- package/dist/development/react/index.d.mts +13 -0
- package/dist/development/react/index.mjs +10 -0
- package/dist/development/react/predictive-search.d.mts +49 -0
- package/dist/development/react/predictive-search.mjs +133 -0
- package/dist/development/react/predictive-search.mjs.map +1 -0
- package/dist/development/react/product.d.mts +72 -0
- package/dist/development/react/product.mjs +127 -0
- package/dist/development/react/product.mjs.map +1 -0
- package/dist/development/react/shop-pay.d.mts +9 -0
- package/dist/development/react/shop-pay.mjs +16 -0
- package/dist/development/react/shop-pay.mjs.map +1 -0
- package/dist/development/react/shopify-scripts.d.mts +20 -0
- package/dist/development/react/shopify-scripts.mjs +39 -0
- package/dist/development/react/shopify-scripts.mjs.map +1 -0
- package/dist/development/vendor/standard-actions.d.mts +134 -0
- package/dist/development/vendor/standard-events.d.mts +1107 -0
- package/dist/development/vue/cart.d.mts +42 -0
- package/dist/development/vue/cart.mjs +118 -0
- package/dist/development/vue/cart.mjs.map +1 -0
- package/dist/development/vue/collection.d.mts +46 -0
- package/dist/development/vue/collection.mjs +108 -0
- package/dist/development/vue/collection.mjs.map +1 -0
- package/dist/development/vue/index.d.mts +11 -0
- package/dist/development/vue/index.mjs +8 -0
- package/dist/development/vue/predictive-search.d.mts +124 -0
- package/dist/development/vue/predictive-search.mjs +171 -0
- package/dist/development/vue/predictive-search.mjs.map +1 -0
- package/dist/development/vue/product.d.mts +57 -0
- package/dist/development/vue/product.mjs +167 -0
- package/dist/development/vue/product.mjs.map +1 -0
- package/dist/development/vue/shop-pay.d.mts +25 -0
- package/dist/development/vue/shop-pay.mjs +35 -0
- package/dist/development/vue/shop-pay.mjs.map +1 -0
- package/dist/development/vue/shopify-scripts.d.mts +127 -0
- package/dist/development/vue/shopify-scripts.mjs +79 -0
- package/dist/development/vue/shopify-scripts.mjs.map +1 -0
- package/dist/globals.d.mts +64 -0
- package/dist/graphql/generated/customer-account-api-types.d.mts +13 -0
- package/dist/graphql/generated/customer-account-graphql-env.d.mts +22170 -0
- package/dist/graphql/generated/graphql-env.d.mts +19280 -0
- package/dist/graphql/generated/storefront-api-types.d.mts +47 -0
- package/dist/graphql/graphql.d.mts +40 -0
- package/dist/graphql/graphql.mjs +16 -0
- package/dist/graphql/graphql.mjs.map +1 -0
- package/dist/graphql/index.d.mts +2 -0
- package/dist/graphql/scalars.d.mts +26 -0
- package/dist/graphql/type-resolver.d.mts +229 -0
- package/dist/react/cart.d.mts +40 -0
- package/dist/react/cart.mjs +150 -0
- package/dist/react/cart.mjs.map +1 -0
- package/dist/react/collection.d.mts +91 -0
- package/dist/react/collection.mjs +129 -0
- package/dist/react/collection.mjs.map +1 -0
- package/dist/react/index.d.mts +13 -0
- package/dist/react/index.mjs +10 -0
- package/dist/react/predictive-search.d.mts +49 -0
- package/dist/react/predictive-search.mjs +133 -0
- package/dist/react/predictive-search.mjs.map +1 -0
- package/dist/react/product.d.mts +72 -0
- package/dist/react/product.mjs +127 -0
- package/dist/react/product.mjs.map +1 -0
- package/dist/react/shop-pay.d.mts +9 -0
- package/dist/react/shop-pay.mjs +16 -0
- package/dist/react/shop-pay.mjs.map +1 -0
- package/dist/react/shopify-scripts.d.mts +20 -0
- package/dist/react/shopify-scripts.mjs +39 -0
- package/dist/react/shopify-scripts.mjs.map +1 -0
- package/dist/storefront-api-types.d.ts +2351 -2390
- package/dist/storefront.schema.json +41534 -1
- package/dist/ts-plugin/index.cjs +68 -0
- package/dist/ts-plugin/index.cjs.map +1 -0
- package/dist/ts-plugin/index.d.cts +4 -0
- package/dist/vendor/standard-actions.d.mts +134 -0
- package/dist/vendor/standard-events.d.mts +1107 -0
- package/dist/vite/index.d.mts +2 -0
- package/dist/vite/index.mjs +3 -0
- package/dist/vite/local-https.d.mts +35 -0
- package/dist/vite/local-https.mjs +202 -0
- package/dist/vite/local-https.mjs.map +1 -0
- package/dist/vue/cart.d.mts +42 -0
- package/dist/vue/cart.mjs +118 -0
- package/dist/vue/cart.mjs.map +1 -0
- package/dist/vue/collection.d.mts +46 -0
- package/dist/vue/collection.mjs +108 -0
- package/dist/vue/collection.mjs.map +1 -0
- package/dist/vue/index.d.mts +11 -0
- package/dist/vue/index.mjs +8 -0
- package/dist/vue/predictive-search.d.mts +124 -0
- package/dist/vue/predictive-search.mjs +171 -0
- package/dist/vue/predictive-search.mjs.map +1 -0
- package/dist/vue/product.d.mts +57 -0
- package/dist/vue/product.mjs +167 -0
- package/dist/vue/product.mjs.map +1 -0
- package/dist/vue/shop-pay.d.mts +25 -0
- package/dist/vue/shop-pay.mjs +35 -0
- package/dist/vue/shop-pay.mjs.map +1 -0
- package/dist/vue/shopify-scripts.d.mts +127 -0
- package/dist/vue/shopify-scripts.mjs +79 -0
- package/dist/vue/shopify-scripts.mjs.map +1 -0
- package/package.json +116 -86
- package/skills/hydrogen-analytics/SKILL.md +80 -0
- package/skills/hydrogen-analytics/references/react.md +160 -0
- package/skills/hydrogen-analytics/references/vue.md +80 -0
- package/skills/hydrogen-cart-drawer/SKILL.md +248 -0
- package/skills/hydrogen-cart-drawer/references/accessibility.md +109 -0
- package/skills/hydrogen-cart-drawer/references/css.md +67 -0
- package/skills/hydrogen-cart-ui/SKILL.md +218 -0
- package/skills/hydrogen-cart-ui/references/nextjs.md +89 -0
- package/skills/hydrogen-cart-ui/references/react.md +263 -0
- package/skills/hydrogen-cart-ui/references/vue.md +204 -0
- package/skills/hydrogen-collection-browser/SKILL.md +80 -0
- package/skills/hydrogen-collection-browser/references/nextjs.md +118 -0
- package/skills/hydrogen-collection-browser/references/nuxt.md +108 -0
- package/skills/hydrogen-collection-browser/references/react.md +237 -0
- package/skills/hydrogen-customer-account/SKILL.md +107 -0
- package/skills/hydrogen-image/SKILL.md +65 -0
- package/skills/hydrogen-local-https/SKILL.md +144 -0
- package/skills/hydrogen-markets/SKILL.md +221 -0
- package/skills/hydrogen-markets/references/nextjs.md +157 -0
- package/skills/hydrogen-money/SKILL.md +67 -0
- package/skills/hydrogen-oxygen/SKILL.md +245 -0
- package/skills/hydrogen-oxygen/references/react-router.md +230 -0
- package/skills/hydrogen-predictive-search/SKILL.md +130 -0
- package/skills/hydrogen-predictive-search/references/react.md +32 -0
- package/skills/hydrogen-predictive-search/references/vue.md +40 -0
- package/skills/hydrogen-request-handlers/SKILL.md +90 -0
- package/skills/hydrogen-request-handlers/references/frameworks.md +174 -0
- package/skills/hydrogen-request-handlers/references/nextjs.md +136 -0
- package/skills/hydrogen-request-handlers/references/nuxt.md +214 -0
- package/skills/hydrogen-routing/SKILL.md +154 -0
- package/skills/hydrogen-setup/SKILL.md +50 -0
- package/skills/hydrogen-setup/references/analytics.md +624 -0
- package/skills/hydrogen-setup/steps/1-inspect-app.md +62 -0
- package/skills/hydrogen-setup/steps/10-analytics.md +10 -0
- package/skills/hydrogen-setup/steps/11-verify.md +31 -0
- package/skills/hydrogen-setup/steps/2-scaffold.md +86 -0
- package/skills/hydrogen-setup/steps/3-build-home-page.md +37 -0
- package/skills/hydrogen-setup/steps/4-collection-and-search.md +13 -0
- package/skills/hydrogen-setup/steps/5-cart.md +10 -0
- package/skills/hydrogen-setup/steps/6-product-detail-page.md +390 -0
- package/skills/hydrogen-setup/steps/7-shopify-runtime-scripts.md +69 -0
- package/skills/hydrogen-setup/steps/8-cart-drawer-and-navbar.md +35 -0
- package/skills/hydrogen-setup/steps/9-account-page.md +54 -0
- package/skills/hydrogen-shop-pay/SKILL.md +79 -0
- package/skills/hydrogen-shop-pay/references/core.md +66 -0
- package/skills/hydrogen-shop-pay/references/react.md +50 -0
- package/skills/hydrogen-shop-pay/references/vue.md +39 -0
- package/skills/hydrogen-smoke-test/SKILL.md +203 -0
- package/skills/hydrogen-storefront-client/SKILL.md +322 -0
- package/skills/hydrogen-storefront-client/references/astro.md +125 -0
- package/skills/hydrogen-storefront-client/references/caching.md +25 -0
- package/skills/hydrogen-storefront-client/references/nextjs.md +121 -0
- package/skills/hydrogen-storefront-client/references/nuxt.md +121 -0
- package/skills/hydrogen-storefront-client/references/query-validation.md +95 -0
- package/skills/hydrogen-storefront-client/references/react-router.md +81 -0
- package/skills/hydrogen-storefront-client/references/solidstart.md +131 -0
- package/skills/hydrogen-storefront-client/references/sveltekit.md +169 -0
- package/skills/hydrogen-variant-form/SKILL.md +250 -0
- package/skills/hydrogen-variant-form/references/nextjs.md +203 -0
- package/skills/hydrogen-variant-form/references/nuxt.md +95 -0
- package/skills/hydrogen-variant-form/references/react.md +71 -0
- package/dist/dev/get-virtual-routes-H72465VB.js +0 -74
- package/dist/dev/hydrogen-routes.d.ts +0 -5
- package/dist/dev/hydrogen-routes.js +0 -25
- package/dist/development/get-virtual-routes-ACFZHU42.js +0 -71
- package/dist/development/get-virtual-routes-ACFZHU42.js.map +0 -1
- package/dist/development/index.cjs +0 -6948
- package/dist/development/index.cjs.map +0 -1
- package/dist/development/index.js +0 -6601
- package/dist/development/index.js.map +0 -1
- package/dist/development/log-seo-tags-IG37ONQ2.js +0 -74
- package/dist/development/log-seo-tags-IG37ONQ2.js.map +0 -1
- package/dist/development/react-router-preset.d.ts +0 -45
- package/dist/development/react-router-preset.js +0 -49
- package/dist/development/react-router-preset.js.map +0 -1
- package/dist/index.cjs +0 -1
- package/dist/oxygen/index.d.ts +0 -197
- package/dist/oxygen/index.js +0 -107
- package/dist/production/get-virtual-routes-ZZEGQQDV.js +0 -3
- package/dist/production/get-virtual-routes-ZZEGQQDV.js.map +0 -1
- package/dist/production/index.cjs +0 -1019
- package/dist/production/index.cjs.map +0 -1
- package/dist/production/index.d.cts +0 -3260
- package/dist/production/index.d.ts +0 -3260
- package/dist/production/index.js +0 -1019
- package/dist/production/index.js.map +0 -1
- package/dist/production/log-seo-tags-TY72EQWZ.js +0 -2
- package/dist/production/log-seo-tags-TY72EQWZ.js.map +0 -1
- package/dist/production/react-router-preset.d.ts +0 -45
- package/dist/production/react-router-preset.js +0 -11
- package/dist/react-router.d.ts +0 -75
- package/dist/vite/chunk-4O5OI3OO.js +0 -127
- package/dist/vite/chunk-FAQ7TVHC.js +0 -9
- package/dist/vite/chunk-QXBQVDMY.js +0 -68
- package/dist/vite/compat-date.d.ts +0 -3
- package/dist/vite/compat-date.js +0 -6
- package/dist/vite/get-virtual-routes.d.ts +0 -21
- package/dist/vite/get-virtual-routes.js +0 -74
- package/dist/vite/hydrogen-middleware.d.ts +0 -9
- package/dist/vite/hydrogen-middleware.js +0 -7
- package/dist/vite/plugin.d.ts +0 -22
- package/dist/vite/plugin.js +0 -171
- package/dist/vite/request-events.d.ts +0 -144
- package/dist/vite/request-events.js +0 -10
- package/dist/vite/types.d.ts +0 -5
- package/dist/vite/types.js +0 -0
- package/dist/vite/virtual-routes/assets/debug-network.css +0 -609
- package/dist/vite/virtual-routes/assets/favicon-dark.svg +0 -20
- package/dist/vite/virtual-routes/assets/favicon.svg +0 -28
- package/dist/vite/virtual-routes/assets/inter-variable-font.woff2 +0 -0
- package/dist/vite/virtual-routes/assets/jetbrainsmono-variable-font.woff2 +0 -0
- package/dist/vite/virtual-routes/assets/styles.css +0 -249
- package/dist/vite/virtual-routes/components/FlameChartWrapper.jsx +0 -123
- package/dist/vite/virtual-routes/components/HydrogenLogoBaseBW.jsx +0 -32
- package/dist/vite/virtual-routes/components/HydrogenLogoBaseColor.jsx +0 -47
- package/dist/vite/virtual-routes/components/IconBanner.jsx +0 -292
- package/dist/vite/virtual-routes/components/IconClose.jsx +0 -38
- package/dist/vite/virtual-routes/components/IconDiscard.jsx +0 -44
- package/dist/vite/virtual-routes/components/IconError.jsx +0 -61
- package/dist/vite/virtual-routes/components/IconGithub.jsx +0 -23
- package/dist/vite/virtual-routes/components/IconTwitter.jsx +0 -21
- package/dist/vite/virtual-routes/components/Layout.jsx +0 -7
- package/dist/vite/virtual-routes/components/RequestDetails.jsx +0 -171
- package/dist/vite/virtual-routes/components/RequestTable.jsx +0 -91
- package/dist/vite/virtual-routes/components/RequestWaterfall.jsx +0 -151
- package/dist/vite/virtual-routes/layout.jsx +0 -33
- package/dist/vite/virtual-routes/lib/useDebugNetworkServer.jsx +0 -178
- package/dist/vite/virtual-routes/routes/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.jsx +0 -37
- package/dist/vite/virtual-routes/routes/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.tsx +0 -79
- package/dist/vite/virtual-routes/routes/graphiql.jsx +0 -5
- package/dist/vite/virtual-routes/routes/index.jsx +0 -265
- package/dist/vite/virtual-routes/routes/subrequest-profiler.jsx +0 -243
- package/dist/vite/virtual-routes/virtual-root-with-layout.jsx +0 -63
- package/dist/vite/virtual-routes/virtual-root.jsx +0 -67
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Plugin } from "vite";
|
|
2
|
+
|
|
3
|
+
//#region src/vite/local-https.d.ts
|
|
4
|
+
declare const LOCAL_HTTPS_DEFAULTS: {
|
|
5
|
+
readonly host: "local.tryhydrogen.dev";
|
|
6
|
+
readonly port: 5173;
|
|
7
|
+
};
|
|
8
|
+
/** Options for Hydrogen's local HTTPS Vite plugin. */
|
|
9
|
+
type LocalHttpsOptions = {
|
|
10
|
+
/** Enable trusted local HTTPS for the dev server. */enabled: boolean; /** Local hostname registered in Shopify admin. Defaults to `local.tryhydrogen.dev`. */
|
|
11
|
+
host?: string; /** Local port registered in Shopify admin. Defaults to `5173`. */
|
|
12
|
+
port?: number; /** Certificate file path. Defaults to Hydrogen's mkcert path under `~/.shopify/hydrogen/certs`. */
|
|
13
|
+
certPath?: string | URL; /** Private key file path. Defaults to Hydrogen's mkcert path under `~/.shopify/hydrogen/certs`. */
|
|
14
|
+
keyPath?: string | URL;
|
|
15
|
+
};
|
|
16
|
+
type LocalHttpsPlugin = Plugin & {
|
|
17
|
+
api: {
|
|
18
|
+
/** Returns host, port, and TLS file paths for frameworks that terminate HTTPS outside Vite. */getDevServerConfig(): LocalHttpsDevServerConfig | undefined;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
type LocalHttpsDevServerConfig = {
|
|
22
|
+
host: string;
|
|
23
|
+
port: number;
|
|
24
|
+
https: {
|
|
25
|
+
cert: string;
|
|
26
|
+
key: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Configures Vite for trusted local HTTPS on Hydrogen's default development host.
|
|
31
|
+
*/
|
|
32
|
+
declare function localHttps(options: LocalHttpsOptions): LocalHttpsPlugin;
|
|
33
|
+
//#endregion
|
|
34
|
+
export { LOCAL_HTTPS_DEFAULTS, LocalHttpsDevServerConfig, LocalHttpsOptions, LocalHttpsPlugin, localHttps };
|
|
35
|
+
//# sourceMappingURL=local-https.d.mts.map
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { CUSTOMER_ACCOUNT_PATHS } from "../core/url.mjs";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
|
|
7
|
+
//#region src/vite/local-https.ts
|
|
8
|
+
const LOCAL_HTTPS_DEFAULTS = {
|
|
9
|
+
host: "local.tryhydrogen.dev",
|
|
10
|
+
port: 5173
|
|
11
|
+
};
|
|
12
|
+
const HEADER_PAIR_SIZE = 2;
|
|
13
|
+
const HTTP1_ONLY_RESPONSE_HEADERS = new Set([
|
|
14
|
+
"connection",
|
|
15
|
+
"keep-alive",
|
|
16
|
+
"proxy-authenticate",
|
|
17
|
+
"proxy-authorization",
|
|
18
|
+
"te",
|
|
19
|
+
"trailer",
|
|
20
|
+
"transfer-encoding",
|
|
21
|
+
"upgrade"
|
|
22
|
+
]);
|
|
23
|
+
const loggedCustomerAccountSettings = /* @__PURE__ */ new Set();
|
|
24
|
+
/**
|
|
25
|
+
* Configures Vite for trusted local HTTPS on Hydrogen's default development host.
|
|
26
|
+
*/
|
|
27
|
+
function localHttps(options) {
|
|
28
|
+
const settings = options.enabled ? resolveLocalHttpsSettings(options) : void 0;
|
|
29
|
+
let certificateFiles;
|
|
30
|
+
const getCertificateFiles = () => {
|
|
31
|
+
if (!settings) return;
|
|
32
|
+
certificateFiles ??= readCertificateFiles(settings);
|
|
33
|
+
return certificateFiles;
|
|
34
|
+
};
|
|
35
|
+
const getDevServerConfig = () => {
|
|
36
|
+
if (!settings) return;
|
|
37
|
+
getCertificateFiles();
|
|
38
|
+
return {
|
|
39
|
+
host: settings.host,
|
|
40
|
+
port: settings.port,
|
|
41
|
+
https: {
|
|
42
|
+
cert: settings.certPath,
|
|
43
|
+
key: settings.keyPath
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
name: "hydrogen-local-https",
|
|
49
|
+
api: { getDevServerConfig },
|
|
50
|
+
config() {
|
|
51
|
+
const certificates = getCertificateFiles();
|
|
52
|
+
if (!settings || !certificates) return;
|
|
53
|
+
return { server: {
|
|
54
|
+
allowedHosts: [settings.host],
|
|
55
|
+
host: settings.host,
|
|
56
|
+
port: settings.port,
|
|
57
|
+
strictPort: true,
|
|
58
|
+
https: {
|
|
59
|
+
ALPNProtocols: ["http/1.1"],
|
|
60
|
+
cert: certificates.cert,
|
|
61
|
+
key: certificates.key
|
|
62
|
+
},
|
|
63
|
+
hmr: {
|
|
64
|
+
host: settings.host,
|
|
65
|
+
protocol: "wss"
|
|
66
|
+
}
|
|
67
|
+
} };
|
|
68
|
+
},
|
|
69
|
+
configureServer(server) {
|
|
70
|
+
if (!settings) return;
|
|
71
|
+
getCertificateFiles();
|
|
72
|
+
configureLocalHttpsServer(server, settings);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function resolveLocalHttpsSettings(options) {
|
|
77
|
+
const host = options.host ?? LOCAL_HTTPS_DEFAULTS.host;
|
|
78
|
+
const certificateDirectory = join(homedir(), ".shopify", "hydrogen", "certs");
|
|
79
|
+
return {
|
|
80
|
+
host,
|
|
81
|
+
port: options.port ?? LOCAL_HTTPS_DEFAULTS.port,
|
|
82
|
+
certPath: resolveCertificatePath(options.certPath ?? join(certificateDirectory, `${host}.pem`)),
|
|
83
|
+
keyPath: resolveCertificatePath(options.keyPath ?? join(certificateDirectory, `${host}-key.pem`))
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function resolveCertificatePath(path) {
|
|
87
|
+
if (path instanceof URL) return fileURLToPath(path);
|
|
88
|
+
if (path === "~") return homedir();
|
|
89
|
+
if (path.startsWith("~/")) return resolve(homedir(), path.slice(2));
|
|
90
|
+
return isAbsolute(path) ? path : resolve(path);
|
|
91
|
+
}
|
|
92
|
+
function readCertificateFiles(settings) {
|
|
93
|
+
return {
|
|
94
|
+
cert: readCertificateFile(settings, "certificate", settings.certPath),
|
|
95
|
+
key: readCertificateFile(settings, "private key", settings.keyPath)
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function readCertificateFile(settings, label, path) {
|
|
99
|
+
try {
|
|
100
|
+
return readFileSync(path);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
throw new Error(formatCertificateReadError(settings, label, path, error), { cause: error });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function formatCertificateReadError({ certPath, host, keyPath }, label, path, error) {
|
|
106
|
+
const certificateDirectories = [...new Set([dirname(certPath), dirname(keyPath)])];
|
|
107
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
108
|
+
return [
|
|
109
|
+
`Local HTTPS requires a readable ${label} file:`,
|
|
110
|
+
` ${path}`,
|
|
111
|
+
`Reason: ${reason}`,
|
|
112
|
+
"",
|
|
113
|
+
"Expected certificate files:",
|
|
114
|
+
` Certificate: ${certPath}`,
|
|
115
|
+
` Private key: ${keyPath}`,
|
|
116
|
+
"",
|
|
117
|
+
"Install and configure mkcert, then generate the certificate:",
|
|
118
|
+
" macOS: brew install mkcert",
|
|
119
|
+
" mkcert -install",
|
|
120
|
+
` mkdir -p ${certificateDirectories.map(shellQuote).join(" ")}`,
|
|
121
|
+
` mkcert -cert-file ${shellQuote(certPath)} -key-file ${shellQuote(keyPath)} ${shellQuote(host)}`
|
|
122
|
+
].join("\n");
|
|
123
|
+
}
|
|
124
|
+
function shellQuote(value) {
|
|
125
|
+
return `'${value.replaceAll("'", `'\\''`)}'`;
|
|
126
|
+
}
|
|
127
|
+
function configureLocalHttpsServer(server, settings) {
|
|
128
|
+
const resolveBoundPort = () => {
|
|
129
|
+
const address = server.httpServer?.address();
|
|
130
|
+
return address && typeof address === "object" ? address.port : settings.port;
|
|
131
|
+
};
|
|
132
|
+
server.middlewares.use((request, response, next) => {
|
|
133
|
+
request.headers["x-forwarded-host"] ??= request.headers.host ?? `${settings.host}:${resolveBoundPort()}`;
|
|
134
|
+
request.headers["x-forwarded-proto"] ??= "https";
|
|
135
|
+
stripHttp1OnlyResponseHeaders(response);
|
|
136
|
+
next();
|
|
137
|
+
});
|
|
138
|
+
const logSettings = () => {
|
|
139
|
+
const port = resolveBoundPort();
|
|
140
|
+
const settingsKey = `${settings.host}:${port}`;
|
|
141
|
+
if (loggedCustomerAccountSettings.has(settingsKey)) return;
|
|
142
|
+
loggedCustomerAccountSettings.add(settingsKey);
|
|
143
|
+
server.config.logger.info(formatCustomerAccountSettings({
|
|
144
|
+
host: settings.host,
|
|
145
|
+
port
|
|
146
|
+
}));
|
|
147
|
+
};
|
|
148
|
+
if (server.httpServer) server.httpServer.once("listening", logSettings);
|
|
149
|
+
else logSettings();
|
|
150
|
+
}
|
|
151
|
+
function formatCustomerAccountSettings({ host, port }) {
|
|
152
|
+
const origin = `https://${host}`;
|
|
153
|
+
const portfulOrigin = `${origin}:${port}`;
|
|
154
|
+
return [
|
|
155
|
+
"",
|
|
156
|
+
"Customer Account API — make sure these values are configured for your storefront:",
|
|
157
|
+
"",
|
|
158
|
+
` Callback URI(s) (required): ${portfulOrigin}${CUSTOMER_ACCOUNT_PATHS.authorize}`,
|
|
159
|
+
` JavaScript origin(s): ${origin}`,
|
|
160
|
+
` Logout URI: ${portfulOrigin}`,
|
|
161
|
+
""
|
|
162
|
+
].join("\n");
|
|
163
|
+
}
|
|
164
|
+
function stripHttp1OnlyResponseHeaders(response) {
|
|
165
|
+
const originalWriteHead = response.writeHead.bind(response);
|
|
166
|
+
response.writeHead = (statusCode, statusMessageOrHeaders, headers) => {
|
|
167
|
+
removeStoredHttp1OnlyHeaders(response);
|
|
168
|
+
if (typeof statusMessageOrHeaders === "string") return originalWriteHead(statusCode, statusMessageOrHeaders, sanitizeWriteHeadHeaders(headers));
|
|
169
|
+
return originalWriteHead(statusCode, sanitizeWriteHeadHeaders(statusMessageOrHeaders));
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
function removeStoredHttp1OnlyHeaders(response) {
|
|
173
|
+
for (const header of HTTP1_ONLY_RESPONSE_HEADERS) response.removeHeader(header);
|
|
174
|
+
}
|
|
175
|
+
function sanitizeWriteHeadHeaders(headers) {
|
|
176
|
+
if (Array.isArray(headers)) return sanitizeHeaderArray(headers);
|
|
177
|
+
if (headers) return sanitizeHeaderObject(headers);
|
|
178
|
+
return headers;
|
|
179
|
+
}
|
|
180
|
+
function sanitizeHeaderObject(headers) {
|
|
181
|
+
const sanitizedHeaders = {};
|
|
182
|
+
for (const [name, value] of Object.entries(headers)) if (!isHttp1OnlyHeader(name)) sanitizedHeaders[name] = value;
|
|
183
|
+
return sanitizedHeaders;
|
|
184
|
+
}
|
|
185
|
+
function sanitizeHeaderArray(headers) {
|
|
186
|
+
const sanitizedHeaders = [];
|
|
187
|
+
for (let index = 0; index < headers.length; index += HEADER_PAIR_SIZE) {
|
|
188
|
+
const name = headers[index];
|
|
189
|
+
const value = headers[index + 1];
|
|
190
|
+
if (typeof name === "string" && isHttp1OnlyHeader(name)) continue;
|
|
191
|
+
sanitizedHeaders.push(name);
|
|
192
|
+
if (value !== void 0) sanitizedHeaders.push(value);
|
|
193
|
+
}
|
|
194
|
+
return sanitizedHeaders;
|
|
195
|
+
}
|
|
196
|
+
function isHttp1OnlyHeader(name) {
|
|
197
|
+
return HTTP1_ONLY_RESPONSE_HEADERS.has(name.toLowerCase());
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
//#endregion
|
|
201
|
+
export { LOCAL_HTTPS_DEFAULTS, localHttps };
|
|
202
|
+
//# sourceMappingURL=local-https.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-https.mjs","names":[],"sources":["../../src/vite/local-https.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport type { OutgoingHttpHeader, OutgoingHttpHeaders, ServerResponse } from \"node:http\";\nimport { homedir } from \"node:os\";\nimport { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport type { Plugin, ViteDevServer } from \"vite\";\n\nimport { CUSTOMER_ACCOUNT_PATHS } from \"../core/url\";\n\nexport const LOCAL_HTTPS_DEFAULTS = {\n host: \"local.tryhydrogen.dev\",\n port: 5_173,\n} as const;\n\nconst HEADER_PAIR_SIZE = 2;\nconst HTTP1_ONLY_RESPONSE_HEADERS = new Set([\n \"connection\",\n \"keep-alive\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n]);\nconst loggedCustomerAccountSettings = new Set<string>();\n\n/** Options for Hydrogen's local HTTPS Vite plugin. */\nexport type LocalHttpsOptions = {\n /** Enable trusted local HTTPS for the dev server. */\n enabled: boolean;\n /** Local hostname registered in Shopify admin. Defaults to `local.tryhydrogen.dev`. */\n host?: string;\n /** Local port registered in Shopify admin. Defaults to `5173`. */\n port?: number;\n /** Certificate file path. Defaults to Hydrogen's mkcert path under `~/.shopify/hydrogen/certs`. */\n certPath?: string | URL;\n /** Private key file path. Defaults to Hydrogen's mkcert path under `~/.shopify/hydrogen/certs`. */\n keyPath?: string | URL;\n};\n\nexport type LocalHttpsPlugin = Plugin & {\n api: {\n /** Returns host, port, and TLS file paths for frameworks that terminate HTTPS outside Vite. */\n getDevServerConfig(): LocalHttpsDevServerConfig | undefined;\n };\n};\n\nexport type LocalHttpsDevServerConfig = {\n host: string;\n port: number;\n https: {\n cert: string;\n key: string;\n };\n};\n\n/**\n * Configures Vite for trusted local HTTPS on Hydrogen's default development host.\n */\nexport function localHttps(options: LocalHttpsOptions): LocalHttpsPlugin {\n const settings = options.enabled ? resolveLocalHttpsSettings(options) : undefined;\n let certificateFiles: LocalHttpsCertificateFiles | undefined;\n\n const getCertificateFiles = () => {\n if (!settings) return;\n\n certificateFiles ??= readCertificateFiles(settings);\n return certificateFiles;\n };\n\n const getDevServerConfig = () => {\n if (!settings) return;\n\n getCertificateFiles();\n\n return {\n host: settings.host,\n port: settings.port,\n https: {\n cert: settings.certPath,\n key: settings.keyPath,\n },\n };\n };\n\n return {\n name: \"hydrogen-local-https\",\n api: { getDevServerConfig },\n config() {\n const certificates = getCertificateFiles();\n if (!settings || !certificates) return;\n\n return {\n server: {\n allowedHosts: [settings.host],\n host: settings.host,\n port: settings.port,\n strictPort: true,\n https: {\n // Several framework dev servers fail when Vite negotiates HTTP/2.\n ALPNProtocols: [\"http/1.1\"],\n cert: certificates.cert,\n key: certificates.key,\n },\n hmr: {\n host: settings.host,\n protocol: \"wss\",\n },\n },\n };\n },\n configureServer(server) {\n if (!settings) return;\n\n getCertificateFiles();\n configureLocalHttpsServer(server, settings);\n },\n };\n}\n\ntype LocalHttpsSettings = {\n host: string;\n port: number;\n certPath: string;\n keyPath: string;\n};\n\ntype LocalHttpsCertificateFiles = {\n cert: Buffer;\n key: Buffer;\n};\n\nfunction resolveLocalHttpsSettings(options: LocalHttpsOptions): LocalHttpsSettings {\n const host = options.host ?? LOCAL_HTTPS_DEFAULTS.host;\n const certificateDirectory = join(homedir(), \".shopify\", \"hydrogen\", \"certs\");\n\n return {\n host,\n port: options.port ?? LOCAL_HTTPS_DEFAULTS.port,\n certPath: resolveCertificatePath(options.certPath ?? join(certificateDirectory, `${host}.pem`)),\n keyPath: resolveCertificatePath(\n options.keyPath ?? join(certificateDirectory, `${host}-key.pem`),\n ),\n };\n}\n\nfunction resolveCertificatePath(path: string | URL) {\n if (path instanceof URL) return fileURLToPath(path);\n if (path === \"~\") return homedir();\n if (path.startsWith(\"~/\")) return resolve(homedir(), path.slice(2));\n return isAbsolute(path) ? path : resolve(path);\n}\n\nfunction readCertificateFiles(settings: LocalHttpsSettings): LocalHttpsCertificateFiles {\n return {\n cert: readCertificateFile(settings, \"certificate\", settings.certPath),\n key: readCertificateFile(settings, \"private key\", settings.keyPath),\n };\n}\n\nfunction readCertificateFile(settings: LocalHttpsSettings, label: string, path: string) {\n try {\n return readFileSync(path);\n } catch (error) {\n throw new Error(formatCertificateReadError(settings, label, path, error), { cause: error });\n }\n}\n\nfunction formatCertificateReadError(\n { certPath, host, keyPath }: LocalHttpsSettings,\n label: string,\n path: string,\n error: unknown,\n) {\n const certificateDirectories = [...new Set([dirname(certPath), dirname(keyPath)])];\n const reason = error instanceof Error ? error.message : String(error);\n\n return [\n `Local HTTPS requires a readable ${label} file:`,\n ` ${path}`,\n `Reason: ${reason}`,\n \"\",\n \"Expected certificate files:\",\n ` Certificate: ${certPath}`,\n ` Private key: ${keyPath}`,\n \"\",\n \"Install and configure mkcert, then generate the certificate:\",\n \" macOS: brew install mkcert\",\n \" mkcert -install\",\n ` mkdir -p ${certificateDirectories.map(shellQuote).join(\" \")}`,\n ` mkcert -cert-file ${shellQuote(certPath)} -key-file ${shellQuote(keyPath)} ${shellQuote(host)}`,\n ].join(\"\\n\");\n}\n\nfunction shellQuote(value: string) {\n return `'${value.replaceAll(\"'\", `'\\\\''`)}'`;\n}\n\nfunction configureLocalHttpsServer(server: ViteDevServer, settings: LocalHttpsSettings) {\n // The configured port is only a fallback: frameworks that own the listener\n // (or auto-incremented ports) can bind somewhere else, and the Customer\n // Account URLs registered in admin must match the port actually served.\n const resolveBoundPort = () => {\n const address = server.httpServer?.address();\n return address && typeof address === \"object\" ? address.port : settings.port;\n };\n\n server.middlewares.use((request, response, next) => {\n request.headers[\"x-forwarded-host\"] ??=\n request.headers.host ?? `${settings.host}:${resolveBoundPort()}`;\n request.headers[\"x-forwarded-proto\"] ??= \"https\";\n stripHttp1OnlyResponseHeaders(response);\n next();\n });\n\n const logSettings = () => {\n const port = resolveBoundPort();\n const settingsKey = `${settings.host}:${port}`;\n if (loggedCustomerAccountSettings.has(settingsKey)) return;\n loggedCustomerAccountSettings.add(settingsKey);\n server.config.logger.info(formatCustomerAccountSettings({ host: settings.host, port }));\n };\n\n if (server.httpServer) {\n server.httpServer.once(\"listening\", logSettings);\n } else {\n logSettings();\n }\n}\n\nfunction formatCustomerAccountSettings({ host, port }: Pick<LocalHttpsSettings, \"host\" | \"port\">) {\n const origin = `https://${host}`;\n const portfulOrigin = `${origin}:${port}`;\n\n return [\n \"\",\n \"Customer Account API — make sure these values are configured for your storefront:\",\n \"\",\n ` Callback URI(s) (required): ${portfulOrigin}${CUSTOMER_ACCOUNT_PATHS.authorize}`,\n // Shopify's server-side validation rejects JavaScript origins containing a port.\n ` JavaScript origin(s): ${origin}`,\n ` Logout URI: ${portfulOrigin}`,\n \"\",\n ].join(\"\\n\");\n}\n\nfunction stripHttp1OnlyResponseHeaders(response: ServerResponse) {\n const originalWriteHead = response.writeHead.bind(response);\n\n response.writeHead = (\n statusCode: number,\n statusMessageOrHeaders?: string | OutgoingHttpHeaders | OutgoingHttpHeader[],\n headers?: OutgoingHttpHeaders | OutgoingHttpHeader[],\n ) => {\n removeStoredHttp1OnlyHeaders(response);\n\n if (typeof statusMessageOrHeaders === \"string\") {\n return originalWriteHead(\n statusCode,\n statusMessageOrHeaders,\n sanitizeWriteHeadHeaders(headers),\n );\n }\n\n return originalWriteHead(statusCode, sanitizeWriteHeadHeaders(statusMessageOrHeaders));\n };\n}\n\nfunction removeStoredHttp1OnlyHeaders(response: ServerResponse) {\n for (const header of HTTP1_ONLY_RESPONSE_HEADERS) {\n response.removeHeader(header);\n }\n}\n\nfunction sanitizeWriteHeadHeaders(headers: OutgoingHttpHeaders | OutgoingHttpHeader[] | undefined) {\n if (Array.isArray(headers)) return sanitizeHeaderArray(headers);\n if (headers) return sanitizeHeaderObject(headers);\n return headers;\n}\n\nfunction sanitizeHeaderObject(headers: OutgoingHttpHeaders) {\n const sanitizedHeaders: OutgoingHttpHeaders = {};\n\n for (const [name, value] of Object.entries(headers)) {\n if (!isHttp1OnlyHeader(name)) sanitizedHeaders[name] = value;\n }\n\n return sanitizedHeaders;\n}\n\nfunction sanitizeHeaderArray(headers: OutgoingHttpHeader[]) {\n const sanitizedHeaders: OutgoingHttpHeader[] = [];\n\n for (let index = 0; index < headers.length; index += HEADER_PAIR_SIZE) {\n const name = headers[index];\n const value = headers[index + 1];\n if (typeof name === \"string\" && isHttp1OnlyHeader(name)) continue;\n\n sanitizedHeaders.push(name);\n if (value !== undefined) sanitizedHeaders.push(value);\n }\n\n return sanitizedHeaders;\n}\n\nfunction isHttp1OnlyHeader(name: string) {\n return HTTP1_ONLY_RESPONSE_HEADERS.has(name.toLowerCase());\n}\n"],"mappings":";;;;;;;AAUA,MAAa,uBAAuB;CAClC,MAAM;CACN,MAAM;CACP;AAED,MAAM,mBAAmB;AACzB,MAAM,8BAA8B,IAAI,IAAI;CAC1C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AACF,MAAM,gDAAgC,IAAI,KAAa;;;;AAmCvD,SAAgB,WAAW,SAA8C;CACvE,MAAM,WAAW,QAAQ,UAAU,0BAA0B,QAAQ,GAAG;CACxE,IAAI;CAEJ,MAAM,4BAA4B;AAChC,MAAI,CAAC,SAAU;AAEf,uBAAqB,qBAAqB,SAAS;AACnD,SAAO;;CAGT,MAAM,2BAA2B;AAC/B,MAAI,CAAC,SAAU;AAEf,uBAAqB;AAErB,SAAO;GACL,MAAM,SAAS;GACf,MAAM,SAAS;GACf,OAAO;IACL,MAAM,SAAS;IACf,KAAK,SAAS;IACf;GACF;;AAGH,QAAO;EACL,MAAM;EACN,KAAK,EAAE,oBAAoB;EAC3B,SAAS;GACP,MAAM,eAAe,qBAAqB;AAC1C,OAAI,CAAC,YAAY,CAAC,aAAc;AAEhC,UAAO,EACL,QAAQ;IACN,cAAc,CAAC,SAAS,KAAK;IAC7B,MAAM,SAAS;IACf,MAAM,SAAS;IACf,YAAY;IACZ,OAAO;KAEL,eAAe,CAAC,WAAW;KAC3B,MAAM,aAAa;KACnB,KAAK,aAAa;KACnB;IACD,KAAK;KACH,MAAM,SAAS;KACf,UAAU;KACX;IACF,EACF;;EAEH,gBAAgB,QAAQ;AACtB,OAAI,CAAC,SAAU;AAEf,wBAAqB;AACrB,6BAA0B,QAAQ,SAAS;;EAE9C;;AAeH,SAAS,0BAA0B,SAAgD;CACjF,MAAM,OAAO,QAAQ,QAAQ,qBAAqB;CAClD,MAAM,uBAAuB,KAAK,SAAS,EAAE,YAAY,YAAY,QAAQ;AAE7E,QAAO;EACL;EACA,MAAM,QAAQ,QAAQ,qBAAqB;EAC3C,UAAU,uBAAuB,QAAQ,YAAY,KAAK,sBAAsB,GAAG,KAAK,MAAM,CAAC;EAC/F,SAAS,uBACP,QAAQ,WAAW,KAAK,sBAAsB,GAAG,KAAK,UAAU,CACjE;EACF;;AAGH,SAAS,uBAAuB,MAAoB;AAClD,KAAI,gBAAgB,IAAK,QAAO,cAAc,KAAK;AACnD,KAAI,SAAS,IAAK,QAAO,SAAS;AAClC,KAAI,KAAK,WAAW,KAAK,CAAE,QAAO,QAAQ,SAAS,EAAE,KAAK,MAAM,EAAE,CAAC;AACnE,QAAO,WAAW,KAAK,GAAG,OAAO,QAAQ,KAAK;;AAGhD,SAAS,qBAAqB,UAA0D;AACtF,QAAO;EACL,MAAM,oBAAoB,UAAU,eAAe,SAAS,SAAS;EACrE,KAAK,oBAAoB,UAAU,eAAe,SAAS,QAAQ;EACpE;;AAGH,SAAS,oBAAoB,UAA8B,OAAe,MAAc;AACtF,KAAI;AACF,SAAO,aAAa,KAAK;UAClB,OAAO;AACd,QAAM,IAAI,MAAM,2BAA2B,UAAU,OAAO,MAAM,MAAM,EAAE,EAAE,OAAO,OAAO,CAAC;;;AAI/F,SAAS,2BACP,EAAE,UAAU,MAAM,WAClB,OACA,MACA,OACA;CACA,MAAM,yBAAyB,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,SAAS,EAAE,QAAQ,QAAQ,CAAC,CAAC,CAAC;CAClF,MAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAErE,QAAO;EACL,mCAAmC,MAAM;EACzC,KAAK;EACL,WAAW;EACX;EACA;EACA,kBAAkB;EAClB,kBAAkB;EAClB;EACA;EACA;EACA;EACA,cAAc,uBAAuB,IAAI,WAAW,CAAC,KAAK,IAAI;EAC9D,uBAAuB,WAAW,SAAS,CAAC,aAAa,WAAW,QAAQ,CAAC,GAAG,WAAW,KAAK;EACjG,CAAC,KAAK,KAAK;;AAGd,SAAS,WAAW,OAAe;AACjC,QAAO,IAAI,MAAM,WAAW,KAAK,QAAQ,CAAC;;AAG5C,SAAS,0BAA0B,QAAuB,UAA8B;CAItF,MAAM,yBAAyB;EAC7B,MAAM,UAAU,OAAO,YAAY,SAAS;AAC5C,SAAO,WAAW,OAAO,YAAY,WAAW,QAAQ,OAAO,SAAS;;AAG1E,QAAO,YAAY,KAAK,SAAS,UAAU,SAAS;AAClD,UAAQ,QAAQ,wBACd,QAAQ,QAAQ,QAAQ,GAAG,SAAS,KAAK,GAAG,kBAAkB;AAChE,UAAQ,QAAQ,yBAAyB;AACzC,gCAA8B,SAAS;AACvC,QAAM;GACN;CAEF,MAAM,oBAAoB;EACxB,MAAM,OAAO,kBAAkB;EAC/B,MAAM,cAAc,GAAG,SAAS,KAAK,GAAG;AACxC,MAAI,8BAA8B,IAAI,YAAY,CAAE;AACpD,gCAA8B,IAAI,YAAY;AAC9C,SAAO,OAAO,OAAO,KAAK,8BAA8B;GAAE,MAAM,SAAS;GAAM;GAAM,CAAC,CAAC;;AAGzF,KAAI,OAAO,WACT,QAAO,WAAW,KAAK,aAAa,YAAY;KAEhD,cAAa;;AAIjB,SAAS,8BAA8B,EAAE,MAAM,QAAmD;CAChG,MAAM,SAAS,WAAW;CAC1B,MAAM,gBAAgB,GAAG,OAAO,GAAG;AAEnC,QAAO;EACL;EACA;EACA;EACA,kCAAkC,gBAAgB,uBAAuB;EAEzE,kCAAkC;EAClC,kCAAkC;EAClC;EACD,CAAC,KAAK,KAAK;;AAGd,SAAS,8BAA8B,UAA0B;CAC/D,MAAM,oBAAoB,SAAS,UAAU,KAAK,SAAS;AAE3D,UAAS,aACP,YACA,wBACA,YACG;AACH,+BAA6B,SAAS;AAEtC,MAAI,OAAO,2BAA2B,SACpC,QAAO,kBACL,YACA,wBACA,yBAAyB,QAAQ,CAClC;AAGH,SAAO,kBAAkB,YAAY,yBAAyB,uBAAuB,CAAC;;;AAI1F,SAAS,6BAA6B,UAA0B;AAC9D,MAAK,MAAM,UAAU,4BACnB,UAAS,aAAa,OAAO;;AAIjC,SAAS,yBAAyB,SAAiE;AACjG,KAAI,MAAM,QAAQ,QAAQ,CAAE,QAAO,oBAAoB,QAAQ;AAC/D,KAAI,QAAS,QAAO,qBAAqB,QAAQ;AACjD,QAAO;;AAGT,SAAS,qBAAqB,SAA8B;CAC1D,MAAM,mBAAwC,EAAE;AAEhD,MAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,QAAQ,CACjD,KAAI,CAAC,kBAAkB,KAAK,CAAE,kBAAiB,QAAQ;AAGzD,QAAO;;AAGT,SAAS,oBAAoB,SAA+B;CAC1D,MAAM,mBAAyC,EAAE;AAEjD,MAAK,IAAI,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS,kBAAkB;EACrE,MAAM,OAAO,QAAQ;EACrB,MAAM,QAAQ,QAAQ,QAAQ;AAC9B,MAAI,OAAO,SAAS,YAAY,kBAAkB,KAAK,CAAE;AAEzD,mBAAiB,KAAK,KAAK;AAC3B,MAAI,UAAU,OAAW,kBAAiB,KAAK,MAAM;;AAGvD,QAAO;;AAGT,SAAS,kBAAkB,MAAc;AACvC,QAAO,4BAA4B,IAAI,KAAK,aAAa,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CartData, CartState } from "../core/cart/state.mjs";
|
|
2
|
+
import { CreateCartStoreOptions } from "../core/cart/cart.mjs";
|
|
3
|
+
import { CartFormRegister } from "../core/cart/form.mjs";
|
|
4
|
+
import { CartDataFromHandlers } from "../core/cart/server-handlers.mjs";
|
|
5
|
+
import { ComputedRef, PropType, ShallowRef } from "vue";
|
|
6
|
+
|
|
7
|
+
//#region src/vue/cart.d.ts
|
|
8
|
+
type TypedUseCart<TData extends CartData> = {
|
|
9
|
+
(): Readonly<ShallowRef<CartState<TData>>>;
|
|
10
|
+
<S>(selector: (state: CartState<TData>) => S, isEqual?: (a: S, b: S) => boolean): Readonly<ShallowRef<S>>;
|
|
11
|
+
};
|
|
12
|
+
type TypedUseOptionalCart<TData extends CartData> = <S>(selector: (state: CartState<TData>) => S, isEqual?: (a: S, b: S) => boolean) => Readonly<ShallowRef<S | undefined>>;
|
|
13
|
+
type CartInitialData<TData extends CartData = CartData> = CreateCartStoreOptions<TData>["initialData"];
|
|
14
|
+
type TypedCartProvider<TData extends CartData> = {
|
|
15
|
+
new (): {
|
|
16
|
+
$props: {
|
|
17
|
+
initialData?: CartInitialData<TData>;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
type TypedCartComponents<TData extends CartData> = {
|
|
22
|
+
CartProvider: TypedCartProvider<TData>;
|
|
23
|
+
useCart: TypedUseCart<TData>;
|
|
24
|
+
useOptionalCart: TypedUseOptionalCart<TData>;
|
|
25
|
+
useCartForm: typeof useCartForm;
|
|
26
|
+
};
|
|
27
|
+
declare function useCartAnalytics(): void;
|
|
28
|
+
declare function useCartForm(): {
|
|
29
|
+
formProps: (opts?: {
|
|
30
|
+
beforeSubmit?: (e: Event) => void;
|
|
31
|
+
afterSubmit?: (e: Event) => void;
|
|
32
|
+
}) => Record<string, unknown>;
|
|
33
|
+
register: CartFormRegister;
|
|
34
|
+
isPending: {
|
|
35
|
+
initial: ComputedRef<boolean>;
|
|
36
|
+
lines: (lineId?: string) => boolean;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
declare function createCartComponents<THandlers>(): TypedCartComponents<CartDataFromHandlers<THandlers>>;
|
|
40
|
+
//#endregion
|
|
41
|
+
export { createCartComponents, useCartAnalytics };
|
|
42
|
+
//# sourceMappingURL=cart.d.mts.map
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { trackCartAnalytics } from "../core/analytics/cart-tracker.mjs";
|
|
2
|
+
import { createCartFormRegister } from "../core/cart/form.mjs";
|
|
3
|
+
import { configureCartEndpoint, createCartStore } from "../core/cart/cart.mjs";
|
|
4
|
+
import { computed, defineComponent, h, inject, onMounted, onScopeDispose, onUnmounted, provide, shallowRef } from "vue";
|
|
5
|
+
|
|
6
|
+
//#region src/vue/cart.ts
|
|
7
|
+
let cartEndpoint = "/api/cart";
|
|
8
|
+
const CartStoreKey = Symbol("CartStore");
|
|
9
|
+
function getCartEndpoint() {
|
|
10
|
+
return cartEndpoint;
|
|
11
|
+
}
|
|
12
|
+
function createTypedCartProvider() {
|
|
13
|
+
return defineComponent((props, { slots }) => {
|
|
14
|
+
return () => h(CartProvider, { initialData: props.initialData }, slots.default);
|
|
15
|
+
}, {
|
|
16
|
+
name: "CartProvider",
|
|
17
|
+
props: ["initialData"]
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function useCartStore(composableName = "useCartStore") {
|
|
21
|
+
const store = inject(CartStoreKey, null);
|
|
22
|
+
if (!store) throw new Error(`${composableName} must be used inside a <CartProvider>.`);
|
|
23
|
+
return store;
|
|
24
|
+
}
|
|
25
|
+
function useOptionalCartStore() {
|
|
26
|
+
return inject(CartStoreKey, null);
|
|
27
|
+
}
|
|
28
|
+
const CartProvider = defineComponent({
|
|
29
|
+
name: "CartProvider",
|
|
30
|
+
props: { initialData: {
|
|
31
|
+
type: Object,
|
|
32
|
+
default: void 0
|
|
33
|
+
} },
|
|
34
|
+
setup(props, { slots }) {
|
|
35
|
+
const store = createCartStore({ initialData: props.initialData });
|
|
36
|
+
provide(CartStoreKey, store);
|
|
37
|
+
onMounted(() => {
|
|
38
|
+
configureCartEndpoint(cartEndpoint);
|
|
39
|
+
store.connect();
|
|
40
|
+
});
|
|
41
|
+
onUnmounted(() => {
|
|
42
|
+
store.destroy();
|
|
43
|
+
});
|
|
44
|
+
return () => slots.default?.();
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
function useCart(selector, isEqual) {
|
|
48
|
+
return useCartSelector(useCartStore("useCart"), selector ?? ((state) => state), isEqual);
|
|
49
|
+
}
|
|
50
|
+
function useCartAnalytics() {
|
|
51
|
+
const store = useCartStore("useCartAnalytics");
|
|
52
|
+
let stopTracking;
|
|
53
|
+
onMounted(() => {
|
|
54
|
+
stopTracking = trackCartAnalytics(store);
|
|
55
|
+
});
|
|
56
|
+
onScopeDispose(() => stopTracking?.());
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Like `useCart`, but returns `undefined` when rendered outside a `<CartProvider>`.
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
62
|
+
function useOptionalCart(selector, isEqual) {
|
|
63
|
+
const store = useOptionalCartStore();
|
|
64
|
+
if (!store) return shallowRef(void 0);
|
|
65
|
+
return useCartSelector(store, selector, isEqual);
|
|
66
|
+
}
|
|
67
|
+
function useCartSelector(store, selector, isEqual) {
|
|
68
|
+
const selected = shallowRef(selector(store.getState()));
|
|
69
|
+
onScopeDispose(store.subscribe(() => {
|
|
70
|
+
const next = selector(store.getState());
|
|
71
|
+
if (isEqual?.(selected.value, next)) return;
|
|
72
|
+
selected.value = next;
|
|
73
|
+
}));
|
|
74
|
+
return selected;
|
|
75
|
+
}
|
|
76
|
+
function useCartForm() {
|
|
77
|
+
const store = useCartStore("useCartForm");
|
|
78
|
+
const loading = useCart((s) => s.loading);
|
|
79
|
+
const pendingLines = useCart((s) => s.pending.lines);
|
|
80
|
+
const register = createCartFormRegister();
|
|
81
|
+
const formProps = (opts) => ({
|
|
82
|
+
onSubmit: (e) => {
|
|
83
|
+
opts?.beforeSubmit?.(e);
|
|
84
|
+
if (e.defaultPrevented) return;
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
store.handleFormSubmit(e).catch(() => {});
|
|
87
|
+
opts?.afterSubmit?.(e);
|
|
88
|
+
},
|
|
89
|
+
method: "post",
|
|
90
|
+
action: cartEndpoint
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
formProps,
|
|
94
|
+
register,
|
|
95
|
+
isPending: {
|
|
96
|
+
initial: computed(() => loading.value),
|
|
97
|
+
lines: (lineId) => lineId ? pendingLines.value.has(lineId) : pendingLines.value.size > 0
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function createCartComponents() {
|
|
102
|
+
const TypedCartProvider = createTypedCartProvider();
|
|
103
|
+
const useTypedCart = ((selector, isEqual) => {
|
|
104
|
+
if (!selector) return useCart();
|
|
105
|
+
return useCart(selector, isEqual);
|
|
106
|
+
});
|
|
107
|
+
const useTypedOptionalCart = ((selector, isEqual) => useOptionalCart(selector, isEqual));
|
|
108
|
+
return {
|
|
109
|
+
CartProvider: TypedCartProvider,
|
|
110
|
+
useCart: useTypedCart,
|
|
111
|
+
useOptionalCart: useTypedOptionalCart,
|
|
112
|
+
useCartForm
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
//#endregion
|
|
117
|
+
export { createCartComponents, getCartEndpoint, useCartAnalytics, useCartStore };
|
|
118
|
+
//# sourceMappingURL=cart.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cart.mjs","names":[],"sources":["../../src/vue/cart.ts"],"sourcesContent":["import {\n computed,\n defineComponent,\n h,\n inject,\n onMounted,\n onScopeDispose,\n onUnmounted,\n provide,\n shallowRef,\n type ComputedRef,\n type InjectionKey,\n type PropType,\n type ShallowRef,\n} from \"vue\";\n\nimport { trackCartAnalytics } from \"../core/analytics/cart-tracker\";\nimport {\n configureCartEndpoint as configureCoreCartEndpoint,\n createCartStore,\n type CreateCartStoreOptions,\n type CartStore,\n} from \"../core/cart/cart\";\nimport { createCartFormRegister, type CartFormRegister } from \"../core/cart/form\";\nimport type { CartDataFromHandlers } from \"../core/cart/server-handlers\";\nimport type { CartData, CartState } from \"../core/cart/state\";\n\nconst DEFAULT_CART_ENDPOINT = \"/api/cart\";\n\nlet cartEndpoint = DEFAULT_CART_ENDPOINT;\n\nconst CartStoreKey: InjectionKey<CartStore> = Symbol(\"CartStore\");\n\nexport function configureCartEndpoint(endpoint: string): void {\n cartEndpoint = endpoint;\n configureCoreCartEndpoint(endpoint);\n}\n\nexport function getCartEndpoint(): string {\n return cartEndpoint;\n}\n\ntype TypedUseCart<TData extends CartData> = {\n (): Readonly<ShallowRef<CartState<TData>>>;\n <S>(\n selector: (state: CartState<TData>) => S,\n isEqual?: (a: S, b: S) => boolean,\n ): Readonly<ShallowRef<S>>;\n};\n\ntype TypedUseOptionalCart<TData extends CartData> = <S>(\n selector: (state: CartState<TData>) => S,\n isEqual?: (a: S, b: S) => boolean,\n) => Readonly<ShallowRef<S | undefined>>;\n\ntype CartInitialData<TData extends CartData = CartData> =\n CreateCartStoreOptions<TData>[\"initialData\"];\n\ntype TypedCartProvider<TData extends CartData> = {\n new (): { $props: { initialData?: CartInitialData<TData> } };\n};\n\ntype TypedCartComponents<TData extends CartData> = {\n CartProvider: TypedCartProvider<TData>;\n useCart: TypedUseCart<TData>;\n useOptionalCart: TypedUseOptionalCart<TData>;\n useCartForm: typeof useCartForm;\n};\n\nfunction createTypedCartProvider<TData extends CartData>(): TypedCartProvider<TData> {\n const TypedCartProvider = defineComponent(\n (props: { initialData?: CartInitialData<TData> }, { slots }) => {\n return () =>\n h(\n CartProvider,\n { initialData: props.initialData as CartInitialData | undefined },\n slots.default,\n );\n },\n { name: \"CartProvider\", props: [\"initialData\"] },\n );\n\n return TypedCartProvider as unknown as TypedCartProvider<TData>;\n}\n\nexport function useCartStore(composableName = \"useCartStore\"): CartStore {\n const store = inject(CartStoreKey, null);\n if (!store) {\n throw new Error(`${composableName} must be used inside a <CartProvider>.`);\n }\n return store;\n}\n\nfunction useOptionalCartStore(): CartStore | null {\n return inject(CartStoreKey, null);\n}\n\nexport const CartProvider = defineComponent({\n name: \"CartProvider\",\n props: {\n initialData: {\n type: Object as PropType<CartInitialData>,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const store = createCartStore({ initialData: props.initialData });\n provide(CartStoreKey, store);\n\n onMounted(() => {\n configureCoreCartEndpoint(cartEndpoint);\n store.connect();\n });\n\n onUnmounted(() => {\n store.destroy();\n });\n\n return () => slots.default?.();\n },\n});\n\nexport function useCart(): Readonly<ShallowRef<CartState>>;\nexport function useCart<TData extends CartData = CartData, S = unknown>(\n selector: (state: CartState<TData>) => S,\n isEqual?: (a: S, b: S) => boolean,\n): Readonly<ShallowRef<S>>;\nexport function useCart<TData extends CartData = CartData, S = unknown>(\n selector?: (state: CartState<TData>) => S,\n isEqual?: (a: S, b: S) => boolean,\n): Readonly<ShallowRef<S | CartState>> {\n const store = useCartStore(\"useCart\");\n const resolve = selector ?? ((state: CartState<TData>) => state as unknown as S);\n return useCartSelector(store, resolve, isEqual) as Readonly<ShallowRef<S>>;\n}\n\nexport function useCartAnalytics(): void {\n const store = useCartStore(\"useCartAnalytics\");\n let stopTracking: (() => void) | undefined;\n\n onMounted(() => {\n stopTracking = trackCartAnalytics(store);\n });\n\n onScopeDispose(() => stopTracking?.());\n}\n\n/**\n * Like `useCart`, but returns `undefined` when rendered outside a `<CartProvider>`.\n * @internal\n */\nexport function useOptionalCart<TData extends CartData = CartData, S = unknown>(\n selector: (state: CartState<TData>) => S,\n isEqual?: (a: S, b: S) => boolean,\n): Readonly<ShallowRef<S | undefined>> {\n const store = useOptionalCartStore();\n if (!store) return shallowRef<S | undefined>(undefined);\n return useCartSelector(store, selector, isEqual);\n}\n\nfunction useCartSelector<TData extends CartData = CartData, S = unknown>(\n store: CartStore,\n selector: (state: CartState<TData>) => S,\n isEqual?: (a: S, b: S) => boolean,\n): Readonly<ShallowRef<S>> {\n const selected = shallowRef<S>(selector(store.getState() as CartState<TData>));\n\n const unsubscribe = store.subscribe(() => {\n const next = selector(store.getState() as CartState<TData>);\n if (isEqual?.(selected.value, next)) return;\n selected.value = next;\n });\n\n onScopeDispose(unsubscribe);\n\n return selected as Readonly<ShallowRef<S>>;\n}\n\nexport function useCartForm(): {\n formProps: (opts?: {\n beforeSubmit?: (e: Event) => void;\n afterSubmit?: (e: Event) => void;\n }) => Record<string, unknown>;\n register: CartFormRegister;\n isPending: {\n initial: ComputedRef<boolean>;\n lines: (lineId?: string) => boolean;\n };\n} {\n const store = useCartStore(\"useCartForm\");\n const loading = useCart((s) => s.loading);\n const pendingLines = useCart((s) => s.pending.lines);\n const register = createCartFormRegister();\n\n const formProps = (opts?: {\n beforeSubmit?: (e: Event) => void;\n afterSubmit?: (e: Event) => void;\n }): Record<string, unknown> => ({\n onSubmit: (e: Event) => {\n opts?.beforeSubmit?.(e);\n if (e.defaultPrevented) return;\n e.preventDefault();\n store.handleFormSubmit(e as SubmitEvent).catch(() => {});\n opts?.afterSubmit?.(e);\n },\n method: \"post\",\n action: cartEndpoint,\n });\n\n const isPending = {\n initial: computed(() => loading.value),\n lines: (lineId?: string): boolean =>\n lineId ? pendingLines.value.has(lineId) : pendingLines.value.size > 0,\n };\n\n return { formProps, register, isPending };\n}\n\nexport function createCartComponents<THandlers>(): TypedCartComponents<\n CartDataFromHandlers<THandlers>\n> {\n type TData = CartDataFromHandlers<THandlers>;\n const TypedCartProvider = createTypedCartProvider<TData>();\n\n const useTypedCart = ((\n selector?: (state: CartState<TData>) => unknown,\n isEqual?: (a: unknown, b: unknown) => boolean,\n ) => {\n if (!selector) return useCart() as Readonly<ShallowRef<CartState<TData>>>;\n return useCart<TData, unknown>(selector, isEqual);\n }) as TypedUseCart<TData>;\n\n const useTypedOptionalCart = (<S>(\n selector: (state: CartState<TData>) => S,\n isEqual?: (a: S, b: S) => boolean,\n ) => useOptionalCart<TData, S>(selector, isEqual)) as TypedUseOptionalCart<TData>;\n\n return {\n CartProvider: TypedCartProvider,\n useCart: useTypedCart,\n useOptionalCart: useTypedOptionalCart,\n useCartForm,\n };\n}\n"],"mappings":";;;;;;AA6BA,IAAI,eAAe;AAEnB,MAAM,eAAwC,OAAO,YAAY;AAOjE,SAAgB,kBAA0B;AACxC,QAAO;;AA8BT,SAAS,0BAA4E;AAanF,QAZ0B,iBACvB,OAAiD,EAAE,YAAY;AAC9D,eACE,EACE,cACA,EAAE,aAAa,MAAM,aAA4C,EACjE,MAAM,QACP;IAEL;EAAE,MAAM;EAAgB,OAAO,CAAC,cAAc;EAAE,CAG1B;;AAG1B,SAAgB,aAAa,iBAAiB,gBAA2B;CACvE,MAAM,QAAQ,OAAO,cAAc,KAAK;AACxC,KAAI,CAAC,MACH,OAAM,IAAI,MAAM,GAAG,eAAe,wCAAwC;AAE5E,QAAO;;AAGT,SAAS,uBAAyC;AAChD,QAAO,OAAO,cAAc,KAAK;;AAGnC,MAAa,eAAe,gBAAgB;CAC1C,MAAM;CACN,OAAO,EACL,aAAa;EACX,MAAM;EACN,SAAS;EACV,EACF;CACD,MAAM,OAAO,EAAE,SAAS;EACtB,MAAM,QAAQ,gBAAgB,EAAE,aAAa,MAAM,aAAa,CAAC;AACjE,UAAQ,cAAc,MAAM;AAE5B,kBAAgB;AACd,yBAA0B,aAAa;AACvC,SAAM,SAAS;IACf;AAEF,oBAAkB;AAChB,SAAM,SAAS;IACf;AAEF,eAAa,MAAM,WAAW;;CAEjC,CAAC;AAOF,SAAgB,QACd,UACA,SACqC;AAGrC,QAAO,gBAFO,aAAa,UAEC,EADZ,cAAc,UAA4B,QACnB,QAAQ;;AAGjD,SAAgB,mBAAyB;CACvC,MAAM,QAAQ,aAAa,mBAAmB;CAC9C,IAAI;AAEJ,iBAAgB;AACd,iBAAe,mBAAmB,MAAM;GACxC;AAEF,sBAAqB,gBAAgB,CAAC;;;;;;AAOxC,SAAgB,gBACd,UACA,SACqC;CACrC,MAAM,QAAQ,sBAAsB;AACpC,KAAI,CAAC,MAAO,QAAO,WAA0B,OAAU;AACvD,QAAO,gBAAgB,OAAO,UAAU,QAAQ;;AAGlD,SAAS,gBACP,OACA,UACA,SACyB;CACzB,MAAM,WAAW,WAAc,SAAS,MAAM,UAAU,CAAqB,CAAC;AAQ9E,gBANoB,MAAM,gBAAgB;EACxC,MAAM,OAAO,SAAS,MAAM,UAAU,CAAqB;AAC3D,MAAI,UAAU,SAAS,OAAO,KAAK,CAAE;AACrC,WAAS,QAAQ;GAGO,CAAC;AAE3B,QAAO;;AAGT,SAAgB,cAUd;CACA,MAAM,QAAQ,aAAa,cAAc;CACzC,MAAM,UAAU,SAAS,MAAM,EAAE,QAAQ;CACzC,MAAM,eAAe,SAAS,MAAM,EAAE,QAAQ,MAAM;CACpD,MAAM,WAAW,wBAAwB;CAEzC,MAAM,aAAa,UAGa;EAC9B,WAAW,MAAa;AACtB,SAAM,eAAe,EAAE;AACvB,OAAI,EAAE,iBAAkB;AACxB,KAAE,gBAAgB;AAClB,SAAM,iBAAiB,EAAiB,CAAC,YAAY,GAAG;AACxD,SAAM,cAAc,EAAE;;EAExB,QAAQ;EACR,QAAQ;EACT;AAQD,QAAO;EAAE;EAAW;EAAU;GAL5B,SAAS,eAAe,QAAQ,MAAM;GACtC,QAAQ,WACN,SAAS,aAAa,MAAM,IAAI,OAAO,GAAG,aAAa,MAAM,OAAO;GAGjC;EAAE;;AAG3C,SAAgB,uBAEd;CAEA,MAAM,oBAAoB,yBAAgC;CAE1D,MAAM,iBACJ,UACA,YACG;AACH,MAAI,CAAC,SAAU,QAAO,SAAS;AAC/B,SAAO,QAAwB,UAAU,QAAQ;;CAGnD,MAAM,yBACJ,UACA,YACG,gBAA0B,UAAU,QAAQ;AAEjD,QAAO;EACL,cAAc;EACd,SAAS;EACT,iBAAiB;EACjB;EACD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { CollectionState } from "../core/collection/state.mjs";
|
|
2
|
+
import { CollectionData, CollectionStore } from "../core/collection/collection.mjs";
|
|
3
|
+
import * as _$vue from "vue";
|
|
4
|
+
import { PropType, ShallowRef } from "vue";
|
|
5
|
+
|
|
6
|
+
//#region src/vue/collection.d.ts
|
|
7
|
+
type CollectionActions = Pick<CollectionStore, "setFilters" | "toggleFilter" | "toggleFilterInput" | "setSortKey" | "setSortByValue" | "reset" | "handleFormSubmit">;
|
|
8
|
+
declare const CollectionProvider: _$vue.DefineComponent<_$vue.ExtractPropTypes<{
|
|
9
|
+
data: {
|
|
10
|
+
type: PropType<CollectionData>;
|
|
11
|
+
required: true;
|
|
12
|
+
};
|
|
13
|
+
urlSearch: {
|
|
14
|
+
type: StringConstructor;
|
|
15
|
+
default: string;
|
|
16
|
+
};
|
|
17
|
+
}>, () => _$vue.VNode<_$vue.RendererNode, _$vue.RendererElement, {
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
}>[] | undefined, {}, {}, {}, _$vue.ComponentOptionsMixin, _$vue.ComponentOptionsMixin, {
|
|
20
|
+
change: (searchString: string) => boolean;
|
|
21
|
+
}, string, _$vue.PublicProps, Readonly<_$vue.ExtractPropTypes<{
|
|
22
|
+
data: {
|
|
23
|
+
type: PropType<CollectionData>;
|
|
24
|
+
required: true;
|
|
25
|
+
};
|
|
26
|
+
urlSearch: {
|
|
27
|
+
type: StringConstructor;
|
|
28
|
+
default: string;
|
|
29
|
+
};
|
|
30
|
+
}>> & Readonly<{
|
|
31
|
+
onChange?: ((searchString: string) => any) | undefined;
|
|
32
|
+
}>, {
|
|
33
|
+
urlSearch: string;
|
|
34
|
+
}, {}, {}, {}, string, _$vue.ComponentProvideOptions, true, {}, any>;
|
|
35
|
+
declare function useCollection(): Readonly<ShallowRef<CollectionState>>;
|
|
36
|
+
declare function useCollection<S>(selector: (state: CollectionState) => S, isEqual?: (a: S, b: S) => boolean): Readonly<ShallowRef<S>>;
|
|
37
|
+
declare function useCollectionActions(): CollectionActions;
|
|
38
|
+
declare function useCollectionForm(): {
|
|
39
|
+
formProps: (opts?: {
|
|
40
|
+
beforeSubmit?: (e: Event) => void;
|
|
41
|
+
afterSubmit?: (e: Event) => void;
|
|
42
|
+
}) => Record<string, unknown>;
|
|
43
|
+
};
|
|
44
|
+
//#endregion
|
|
45
|
+
export { CollectionActions, CollectionProvider, useCollection, useCollectionActions, useCollectionForm };
|
|
46
|
+
//# sourceMappingURL=collection.d.mts.map
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { createCollectionStore } from "../core/collection/collection.mjs";
|
|
2
|
+
import { createCollectionReconciler } from "../core/collection/reconciler.mjs";
|
|
3
|
+
import { defineComponent, inject, onUnmounted, provide, shallowRef, toValue, watch } from "vue";
|
|
4
|
+
|
|
5
|
+
//#region src/vue/collection.ts
|
|
6
|
+
const CollectionStoreKey = Symbol("CollectionStore");
|
|
7
|
+
const CollectionProvider = defineComponent({
|
|
8
|
+
name: "CollectionProvider",
|
|
9
|
+
props: {
|
|
10
|
+
data: {
|
|
11
|
+
type: Object,
|
|
12
|
+
required: true
|
|
13
|
+
},
|
|
14
|
+
urlSearch: {
|
|
15
|
+
type: String,
|
|
16
|
+
default: ""
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
emits: { change: (searchString) => typeof searchString === "string" },
|
|
20
|
+
setup(props, { slots, emit }) {
|
|
21
|
+
const readUrlSearch = () => toValue(props.urlSearch);
|
|
22
|
+
const initialStore = createCollectionStore({
|
|
23
|
+
data: props.data,
|
|
24
|
+
urlSearch: readUrlSearch()
|
|
25
|
+
});
|
|
26
|
+
const storeRef = shallowRef(initialStore);
|
|
27
|
+
provide(CollectionStoreKey, storeRef);
|
|
28
|
+
let reconciler = createCollectionReconciler({
|
|
29
|
+
getStore: () => storeRef.value,
|
|
30
|
+
readUrlSearch,
|
|
31
|
+
emitChange: (s) => emit("change", s)
|
|
32
|
+
}, readUrlSearch());
|
|
33
|
+
initialStore.setOnBrowseChange(() => reconciler.handleBrowseChange());
|
|
34
|
+
function resetStore() {
|
|
35
|
+
storeRef.value.setOnBrowseChange(null);
|
|
36
|
+
const store = createCollectionStore({
|
|
37
|
+
data: props.data,
|
|
38
|
+
urlSearch: readUrlSearch()
|
|
39
|
+
});
|
|
40
|
+
storeRef.value = store;
|
|
41
|
+
reconciler.reset(readUrlSearch());
|
|
42
|
+
store.setOnBrowseChange(() => reconciler.handleBrowseChange());
|
|
43
|
+
}
|
|
44
|
+
watch(() => props.data.handle, (newHandle, oldHandle) => {
|
|
45
|
+
if (newHandle === oldHandle) return;
|
|
46
|
+
resetStore();
|
|
47
|
+
});
|
|
48
|
+
watch(() => [readUrlSearch(), props.data], () => {
|
|
49
|
+
reconciler.reconcile(readUrlSearch(), props.data.dataSearch);
|
|
50
|
+
}, {
|
|
51
|
+
flush: "sync",
|
|
52
|
+
immediate: true,
|
|
53
|
+
deep: true
|
|
54
|
+
});
|
|
55
|
+
onUnmounted(() => {
|
|
56
|
+
storeRef.value.setOnBrowseChange(null);
|
|
57
|
+
});
|
|
58
|
+
return () => slots.default?.();
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
function useRequiredStoreRef(composableName) {
|
|
62
|
+
const storeRef = inject(CollectionStoreKey, null);
|
|
63
|
+
if (!storeRef) throw new Error(`${composableName} must be used inside a <CollectionProvider>.`);
|
|
64
|
+
return storeRef;
|
|
65
|
+
}
|
|
66
|
+
function useCollection(selector, isEqual) {
|
|
67
|
+
const storeRef = useRequiredStoreRef("useCollection");
|
|
68
|
+
const resolve = selector ?? ((state) => state);
|
|
69
|
+
const selected = shallowRef(resolve(storeRef.value.getState()));
|
|
70
|
+
watch(() => storeRef.value, (store, _, onCleanup) => {
|
|
71
|
+
selected.value = resolve(store.getState());
|
|
72
|
+
onCleanup(store.subscribe(() => {
|
|
73
|
+
const next = resolve(store.getState());
|
|
74
|
+
if (isEqual && selector) {
|
|
75
|
+
if (isEqual(selected.value, next)) return;
|
|
76
|
+
}
|
|
77
|
+
selected.value = next;
|
|
78
|
+
}));
|
|
79
|
+
}, { immediate: true });
|
|
80
|
+
return selected;
|
|
81
|
+
}
|
|
82
|
+
function useCollectionActions() {
|
|
83
|
+
const storeRef = useRequiredStoreRef("useCollectionActions");
|
|
84
|
+
return {
|
|
85
|
+
setFilters: (...args) => storeRef.value.setFilters(...args),
|
|
86
|
+
toggleFilter: (...args) => storeRef.value.toggleFilter(...args),
|
|
87
|
+
toggleFilterInput: (...args) => storeRef.value.toggleFilterInput(...args),
|
|
88
|
+
setSortKey: (...args) => storeRef.value.setSortKey(...args),
|
|
89
|
+
setSortByValue: (...args) => storeRef.value.setSortByValue(...args),
|
|
90
|
+
reset: (...args) => storeRef.value.reset(...args),
|
|
91
|
+
handleFormSubmit: (...args) => storeRef.value.handleFormSubmit(...args)
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function useCollectionForm() {
|
|
95
|
+
const actions = useCollectionActions();
|
|
96
|
+
const formProps = (opts) => ({ onSubmit: (e) => {
|
|
97
|
+
opts?.beforeSubmit?.(e);
|
|
98
|
+
if (e.defaultPrevented) return;
|
|
99
|
+
e.preventDefault();
|
|
100
|
+
actions.handleFormSubmit(e);
|
|
101
|
+
opts?.afterSubmit?.(e);
|
|
102
|
+
} });
|
|
103
|
+
return { formProps };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
//#endregion
|
|
107
|
+
export { CollectionProvider, useCollection, useCollectionActions, useCollectionForm };
|
|
108
|
+
//# sourceMappingURL=collection.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.mjs","names":[],"sources":["../../src/vue/collection.ts"],"sourcesContent":["import {\n defineComponent,\n inject,\n onUnmounted,\n provide,\n shallowRef,\n toValue,\n watch,\n type InjectionKey,\n type PropType,\n type ShallowRef,\n} from \"vue\";\n\nimport {\n createCollectionStore,\n createCollectionReconciler,\n type CollectionData,\n type CollectionReconciler,\n type CollectionStore,\n} from \"../core/collection\";\nimport type { CollectionState } from \"../core/collection\";\n\nexport type { CollectionData };\n\nconst CollectionStoreKey: InjectionKey<ShallowRef<CollectionStore>> = Symbol(\"CollectionStore\");\n\nexport type CollectionActions = Pick<\n CollectionStore,\n | \"setFilters\"\n | \"toggleFilter\"\n | \"toggleFilterInput\"\n | \"setSortKey\"\n | \"setSortByValue\"\n | \"reset\"\n | \"handleFormSubmit\"\n>;\n\nexport const CollectionProvider = defineComponent({\n name: \"CollectionProvider\",\n props: {\n data: {\n type: Object as PropType<CollectionData>,\n required: true,\n },\n urlSearch: {\n type: String,\n default: \"\",\n },\n },\n emits: {\n change: (searchString: string) => typeof searchString === \"string\",\n },\n setup(props, { slots, emit }) {\n const readUrlSearch = () => toValue(props.urlSearch);\n\n const initialStore = createCollectionStore({\n data: props.data,\n urlSearch: readUrlSearch(),\n });\n const storeRef = shallowRef<CollectionStore>(initialStore);\n provide(CollectionStoreKey, storeRef);\n\n let reconciler: CollectionReconciler = createCollectionReconciler(\n {\n getStore: () => storeRef.value,\n readUrlSearch,\n emitChange: (s) => emit(\"change\", s),\n },\n readUrlSearch(),\n );\n initialStore.setOnBrowseChange(() => reconciler.handleBrowseChange());\n\n function resetStore() {\n storeRef.value.setOnBrowseChange(null);\n const store = createCollectionStore({\n data: props.data,\n urlSearch: readUrlSearch(),\n });\n storeRef.value = store;\n reconciler.reset(readUrlSearch());\n store.setOnBrowseChange(() => reconciler.handleBrowseChange());\n }\n\n watch(\n () => props.data.handle,\n (newHandle, oldHandle) => {\n if (newHandle === oldHandle) return;\n resetStore();\n },\n );\n\n watch(\n () => [readUrlSearch(), props.data] as const,\n () => {\n reconciler.reconcile(readUrlSearch(), props.data.dataSearch);\n },\n { flush: \"sync\", immediate: true, deep: true },\n );\n\n onUnmounted(() => {\n storeRef.value.setOnBrowseChange(null);\n });\n\n return () => slots.default?.();\n },\n});\n\nfunction useRequiredStoreRef(composableName: string): ShallowRef<CollectionStore> {\n const storeRef = inject(CollectionStoreKey, null);\n if (!storeRef) {\n throw new Error(`${composableName} must be used inside a <CollectionProvider>.`);\n }\n return storeRef;\n}\n\nexport function useCollection(): Readonly<ShallowRef<CollectionState>>;\nexport function useCollection<S>(\n selector: (state: CollectionState) => S,\n isEqual?: (a: S, b: S) => boolean,\n): Readonly<ShallowRef<S>>;\nexport function useCollection<S>(\n selector?: (state: CollectionState) => S,\n isEqual?: (a: S, b: S) => boolean,\n): Readonly<ShallowRef<CollectionState | S>> {\n const storeRef = useRequiredStoreRef(\"useCollection\");\n const resolve = selector ?? ((state: CollectionState) => state as unknown as S);\n const selected = shallowRef<CollectionState | S>(resolve(storeRef.value.getState()));\n\n watch(\n () => storeRef.value,\n (store, _, onCleanup) => {\n selected.value = resolve(store.getState());\n\n const unsubscribe = store.subscribe(() => {\n const next = resolve(store.getState());\n if (isEqual && selector) {\n if (isEqual(selected.value as S, next)) return;\n }\n selected.value = next;\n });\n\n onCleanup(unsubscribe);\n },\n { immediate: true },\n );\n\n return selected as Readonly<ShallowRef<CollectionState | S>>;\n}\n\nexport function useCollectionActions(): CollectionActions {\n const storeRef = useRequiredStoreRef(\"useCollectionActions\");\n\n return {\n setFilters: (...args) => storeRef.value.setFilters(...args),\n toggleFilter: (...args) => storeRef.value.toggleFilter(...args),\n toggleFilterInput: (...args) => storeRef.value.toggleFilterInput(...args),\n setSortKey: (...args) => storeRef.value.setSortKey(...args),\n setSortByValue: (...args) => storeRef.value.setSortByValue(...args),\n reset: (...args) => storeRef.value.reset(...args),\n handleFormSubmit: (...args) => storeRef.value.handleFormSubmit(...args),\n };\n}\n\nexport function useCollectionForm(): {\n formProps: (opts?: {\n beforeSubmit?: (e: Event) => void;\n afterSubmit?: (e: Event) => void;\n }) => Record<string, unknown>;\n} {\n const actions = useCollectionActions();\n\n const formProps = (opts?: {\n beforeSubmit?: (e: Event) => void;\n afterSubmit?: (e: Event) => void;\n }): Record<string, unknown> => ({\n onSubmit: (e: Event) => {\n opts?.beforeSubmit?.(e);\n if (e.defaultPrevented) return;\n e.preventDefault();\n actions.handleFormSubmit(e as SubmitEvent);\n opts?.afterSubmit?.(e);\n },\n });\n\n return { formProps };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ShopifyGlobal } from "../globals.mjs";
|
|
2
|
+
import { CollectionData } from "../core/collection/collection.mjs";
|
|
3
|
+
import { ValidProductSelectionResult } from "../core/product/product-form.mjs";
|
|
4
|
+
import { ProductAddToCartProps, ProductFormRegister, ProductMerchandiseIdProps, ProductOptionValueProps, ProductQuantityDefaultProps, ProductQuantityProps } from "../core/product/form.mjs";
|
|
5
|
+
import { createCartComponents, useCartAnalytics } from "./cart.mjs";
|
|
6
|
+
import { CollectionActions, CollectionProvider, useCollection, useCollectionActions, useCollectionForm } from "./collection.mjs";
|
|
7
|
+
import { PredictiveSearchActions, PredictiveSearchFormPropsOptions, PredictiveSearchFormResult, PredictiveSearchProvider, PredictiveSearchQueryInputPropsOptions, usePredictiveSearch, usePredictiveSearchActions, usePredictiveSearchForm } from "./predictive-search.mjs";
|
|
8
|
+
import { UseProductFormOptions, UseProductFormResult, UseProductResult, createProductComponents, useProductForm } from "./product.mjs";
|
|
9
|
+
import { ShopPayButton, ShopPayButtonProps } from "./shop-pay.mjs";
|
|
10
|
+
import { ShopifyScripts, ShopifyScriptsProps } from "./shopify-scripts.mjs";
|
|
11
|
+
export { type CollectionActions, type CollectionData, CollectionProvider, type PredictiveSearchActions, type PredictiveSearchFormPropsOptions, type PredictiveSearchFormResult, PredictiveSearchProvider, type PredictiveSearchQueryInputPropsOptions, type ProductAddToCartProps, type ProductFormRegister, type ProductMerchandiseIdProps, type ProductOptionValueProps, type ProductQuantityDefaultProps, type ProductQuantityProps, ShopPayButton, type ShopPayButtonProps, type ShopifyGlobal, ShopifyScripts, type ShopifyScriptsProps, type UseProductFormOptions, type UseProductFormResult, type UseProductResult, type ValidProductSelectionResult, createCartComponents, createProductComponents, useCartAnalytics, useCollection, useCollectionActions, useCollectionForm, usePredictiveSearch, usePredictiveSearchActions, usePredictiveSearchForm, useProductForm };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createCartComponents, useCartAnalytics } from "./cart.mjs";
|
|
2
|
+
import { CollectionProvider, useCollection, useCollectionActions, useCollectionForm } from "./collection.mjs";
|
|
3
|
+
import { PredictiveSearchProvider, usePredictiveSearch, usePredictiveSearchActions, usePredictiveSearchForm } from "./predictive-search.mjs";
|
|
4
|
+
import { createProductComponents, useProductForm } from "./product.mjs";
|
|
5
|
+
import { ShopPayButton } from "./shop-pay.mjs";
|
|
6
|
+
import { ShopifyScripts } from "./shopify-scripts.mjs";
|
|
7
|
+
|
|
8
|
+
export { CollectionProvider, PredictiveSearchProvider, ShopPayButton, ShopifyScripts, createCartComponents, createProductComponents, useCartAnalytics, useCollection, useCollectionActions, useCollectionForm, usePredictiveSearch, usePredictiveSearchActions, usePredictiveSearchForm, useProductForm };
|