@shopify/hydrogen 2026.4.5 → 2026.10.0-preview.2
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 +647 -0
- package/dist/client/client.d.mts +34 -0
- package/dist/client/client.mjs +206 -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 +37 -0
- package/dist/core/cart/cart.mjs +1707 -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 +71 -0
- package/dist/core/collection/url.mjs +376 -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 +43 -0
- package/dist/core/headers.mjs.map +1 -0
- package/dist/core/index.d.mts +56 -0
- package/dist/core/index.mjs +45 -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/accept-variant-id.mjs +98 -0
- package/dist/core/product/accept-variant-id.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 +5 -0
- package/dist/core/product/options.d.mts +43 -0
- package/dist/core/product/options.mjs +296 -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/product/url.d.mts +47 -0
- package/dist/core/product/url.mjs +69 -0
- package/dist/core/product/url.mjs.map +1 -0
- package/dist/core/request-context.d.mts +75 -0
- package/dist/core/request-context.mjs +141 -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/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 +73 -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 +22 -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 +72 -0
- package/dist/core/request-routing/registered-routes.mjs.map +1 -0
- package/dist/core/request-routing/route-types.d.mts +56 -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 +42 -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 +206 -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 +37 -0
- package/dist/development/core/cart/cart.mjs +1707 -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 +71 -0
- package/dist/development/core/collection/url.mjs +376 -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 +56 -0
- package/dist/development/core/development.mjs +45 -0
- package/dist/development/core/headers.mjs +43 -0
- package/dist/development/core/headers.mjs.map +1 -0
- package/dist/development/core/index.d.mts +54 -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/accept-variant-id.mjs +98 -0
- package/dist/development/core/product/accept-variant-id.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 +5 -0
- package/dist/development/core/product/options.d.mts +43 -0
- package/dist/development/core/product/options.mjs +296 -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/product/url.d.mts +47 -0
- package/dist/development/core/product/url.mjs +69 -0
- package/dist/development/core/product/url.mjs.map +1 -0
- package/dist/development/core/request-context.d.mts +75 -0
- package/dist/development/core/request-context.mjs +141 -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/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 +73 -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 +22 -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 +72 -0
- package/dist/development/core/request-routing/registered-routes.mjs.map +1 -0
- package/dist/development/core/request-routing/route-types.d.mts +56 -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 +42 -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 +44 -0
- package/dist/development/react/cart.mjs +155 -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 +46 -0
- package/dist/development/vue/cart.mjs +122 -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 +44 -0
- package/dist/react/cart.mjs +155 -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/certificate-prompt.mjs +24 -0
- package/dist/vite/certificate-prompt.mjs.map +1 -0
- package/dist/vite/index.d.mts +2 -0
- package/dist/vite/index.mjs +3 -0
- package/dist/vite/local-https.d.mts +47 -0
- package/dist/vite/local-https.mjs +276 -0
- package/dist/vite/local-https.mjs.map +1 -0
- package/dist/vite/mkcert.mjs +141 -0
- package/dist/vite/mkcert.mjs.map +1 -0
- package/dist/vue/cart.d.mts +46 -0
- package/dist/vue/cart.mjs +122 -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 +224 -0
- package/skills/hydrogen-cart-ui/references/nextjs.md +89 -0
- package/skills/hydrogen-cart-ui/references/react.md +285 -0
- package/skills/hydrogen-cart-ui/references/vue.md +228 -0
- package/skills/hydrogen-collection-browser/SKILL.md +83 -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 +301 -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 +142 -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 +107 -0
- package/skills/hydrogen-request-handlers/references/frameworks.md +179 -0
- package/skills/hydrogen-request-handlers/references/nextjs.md +137 -0
- package/skills/hydrogen-request-handlers/references/nuxt.md +215 -0
- package/skills/hydrogen-routing/SKILL.md +171 -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 +14 -0
- package/skills/hydrogen-setup/steps/5-cart.md +10 -0
- package/skills/hydrogen-setup/steps/6-product-detail-page.md +416 -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 +205 -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 +267 -0
- package/skills/hydrogen-variant-form/references/nextjs.md +207 -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 -6978
- package/dist/development/index.cjs.map +0 -1
- package/dist/development/index.js +0 -6631
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"url.mjs","names":[],"sources":["../../../../src/core/collection/url.ts"],"sourcesContent":["import type { ProductFilter } from \"../../../vendor/standard-events\";\nimport type { ProductCollectionSortKeys } from \"../../graphql/generated/storefront-api-types\";\nimport type { CollectionState } from \"./state\";\n\n/**\n * Parsed collection URL parameters — the subset of {@link CollectionState}\n * that is derived from the URL query string.\n */\nexport interface CollectionParams {\n filters: ProductFilter[];\n sortKey: ProductCollectionSortKeys | undefined;\n reverse: boolean;\n}\n\nconst SORT_BY_DESCENDING_SUFFIX = \"-descending\";\nconst SORT_BY_ASCENDING_SUFFIX = \"-ascending\";\nconst PAGINATION_CURSOR_PARAMS: readonly string[] = [\"before\", \"after\"];\n\nconst SORT_KEY_TO_SORT_BY: Record<string, string> = {\n BEST_SELLING: \"best-selling\",\n CREATED: \"created\",\n PRICE: \"price\",\n TITLE: \"title\",\n MANUAL: \"manual\",\n ID: \"id\",\n RELEVANCE: \"relevance\",\n COLLECTION_DEFAULT: \"collection-default\",\n};\n\nconst SORT_BY_TO_SORT_KEY: Record<string, ProductCollectionSortKeys> = Object.fromEntries(\n Object.entries(SORT_KEY_TO_SORT_BY).map(([key, value]) => [\n value,\n key as ProductCollectionSortKeys,\n ]),\n);\n\nconst STANDARD_EVENTS_COLLECTION_SORT_KEY: Record<string, ProductCollectionSortKeys> = {\n \"best-selling\": \"BEST_SELLING\",\n \"created-ascending\": \"CREATED\",\n \"created-descending\": \"CREATED\",\n \"price-ascending\": \"PRICE\",\n \"price-descending\": \"PRICE\",\n \"title-ascending\": \"TITLE\",\n \"title-descending\": \"TITLE\",\n manual: \"MANUAL\",\n};\n\n/**\n * Extracts collection state from URL search params.\n *\n * Handles Liquid-compatible filter keys (`filter.p.*`, `filter.v.*`)\n * and the `sort_by` param (with optional `-descending`/`-ascending` suffix).\n *\n * @param searchParams - URL search params to parse\n */\nexport function parseCollectionParams(searchParams: URLSearchParams): CollectionParams {\n const filters = parseProductFilters(searchParams);\n const sortKey = parseCollectionSortKey(searchParams);\n const rawSortBy = searchParams.get(\"sort_by\");\n const reverse = rawSortBy?.endsWith(SORT_BY_DESCENDING_SUFFIX) ?? false;\n\n return { filters, sortKey, reverse };\n}\n\n/**\n * Serializes collection state into URL search params using Liquid-compatible keys.\n *\n * Only emits store-owned keys (`filter.*`, `sort_by`).\n * Omits `sort_by` when `sortKey` is `undefined` (collection default).\n *\n * @param state - The filter/sort slice of collection state\n */\nexport function serializeCollectionParams(\n state: Pick<CollectionState, \"filters\" | \"sortKey\" | \"reverse\">,\n): URLSearchParams {\n const params = new URLSearchParams();\n\n for (const filter of state.filters) {\n serializeFilter(params, filter);\n }\n\n if (state.sortKey) {\n params.set(\"sort_by\", getSortByValue(state.sortKey, state.reverse));\n }\n\n return params;\n}\n\n/** Returns `true` when the param key is owned by the collection store. */\nexport function isStoreOwnedParam(key: string): boolean {\n return key === \"sort_by\" || key.startsWith(\"filter.\");\n}\n\n/** Normalizes a router search string for comparison (strips a leading `?`). */\nexport function normalizeCollectionSearch(search: string): string {\n return search.startsWith(\"?\") ? search.slice(1) : search;\n}\n\n/**\n * Merges store-owned params from `state` into `existing`, preserving\n * unrelated keys (e.g. `grid`, `view`) already present in the URL. Collection\n * pagination cursors (`before`, `after`) are cleared so changed browse intent\n * starts from the first page.\n */\nexport function mergeCollectionParams(\n existing: URLSearchParams,\n state: Pick<CollectionState, \"filters\" | \"sortKey\" | \"reverse\">,\n): URLSearchParams {\n const merged = new URLSearchParams(existing);\n\n for (const key of Array.from(merged.keys())) {\n if (isStoreOwnedParam(key)) {\n merged.delete(key);\n }\n }\n\n clearPaginationCursors(merged);\n\n for (const [key, value] of serializeCollectionParams(state)) {\n merged.append(key, value);\n }\n\n return merged;\n}\n\n/** Returns `true` when two router search strings describe the same collection filters and sort. */\nexport function collectionSearchEqual(a: string, b: string): boolean {\n const parsedA = parseCollectionParams(new URLSearchParams(normalizeCollectionSearch(a)));\n const parsedB = parseCollectionParams(new URLSearchParams(normalizeCollectionSearch(b)));\n\n return (\n parsedA.sortKey === parsedB.sortKey &&\n parsedA.reverse === parsedB.reverse &&\n filtersEqual(parsedA.filters, parsedB.filters)\n );\n}\n\n/** Returns `true` when URL params and collection browse state describe the same filters and sort. */\nexport function collectionParamsMatchState(\n searchParams: URLSearchParams,\n state: Pick<CollectionState, \"filters\" | \"sortKey\" | \"reverse\">,\n): boolean {\n const parsed = parseCollectionParams(searchParams);\n\n return (\n parsed.sortKey === state.sortKey &&\n parsed.reverse === state.reverse &&\n filtersEqual(parsed.filters, state.filters)\n );\n}\n\n/**\n * Builds a URL query string with the given filter removed from the current params.\n *\n * Clears pagination cursors so the changed filter state starts from its first page.\n * Returns `\"?\"` when removing the filter leaves no params. Useful for\n * rendering \"remove filter\" links without updating store state.\n */\nexport function getFilterRemovalUrl(currentParams: URLSearchParams, filter: ProductFilter): string {\n const result = new URLSearchParams(currentParams);\n removeFilterParams(result, filter);\n clearPaginationCursors(result);\n const serialized = result.toString();\n return serialized ? `?${serialized}` : \"?\";\n}\n\n/** Returns `true` when the sort key supports ascending/descending direction suffixes. */\nexport function isDirectionalSortKey(sortKey: ProductCollectionSortKeys): boolean {\n return sortKey === \"PRICE\" || sortKey === \"TITLE\" || sortKey === \"CREATED\" || sortKey === \"ID\";\n}\n\n/**\n * Converts a Storefront API sort key and direction into the Liquid-compatible\n * `sort_by` param value (e.g. `\"price-ascending\"`, `\"best-selling\"`).\n *\n * Direction suffixes are only appended for sort keys that support them\n * (`PRICE`, `TITLE`, `CREATED`, `ID`). Others (like `BEST_SELLING`) return\n * the base value regardless of the `reverse` flag.\n *\n * @param sortKey - Storefront API `ProductCollectionSortKeys` enum value\n * @param reverse - `true` for descending, `false` for ascending\n */\nexport function getSortByValue(sortKey: ProductCollectionSortKeys, reverse: boolean): string {\n const base = SORT_KEY_TO_SORT_BY[sortKey] ?? sortKey.toLowerCase();\n\n if (!isDirectionalSortKey(sortKey)) return base;\n\n return reverse ? `${base}-descending` : `${base}-ascending`;\n}\n\n/**\n * Parses a Liquid-compatible `sort_by` value back into the Storefront API\n * sort key and direction. Inverse of {@link getSortByValue}.\n *\n * @param value - A `sort_by` param value (e.g. `\"price-ascending\"`, `\"best-selling\"`)\n */\nexport function parseSortByValue(value: string): {\n sortKey: ProductCollectionSortKeys | undefined;\n reverse: boolean;\n} {\n if (value.endsWith(SORT_BY_DESCENDING_SUFFIX)) {\n const base = value.slice(0, -SORT_BY_DESCENDING_SUFFIX.length);\n return { sortKey: SORT_BY_TO_SORT_KEY[base], reverse: true };\n }\n\n if (value.endsWith(SORT_BY_ASCENDING_SUFFIX)) {\n const base = value.slice(0, -SORT_BY_ASCENDING_SUFFIX.length);\n return { sortKey: SORT_BY_TO_SORT_KEY[base], reverse: false };\n }\n\n return { sortKey: SORT_BY_TO_SORT_KEY[value], reverse: false };\n}\n\n/**\n * Mirrors `parseProductFilters` from storefront-standard-events.\n *\n * Keep this local because Hydrogen only vendors Standard Events\n * declarations, so importing CollectionUpdateEvent would require runtime JS.\n */\nfunction parseProductFilters(searchParams: URLSearchParams): ProductFilter[] {\n const filters: ProductFilter[] = [];\n const price: ProductFilter[\"price\"] = {};\n const minPrice = searchParams.get(\"filter.v.price.gte\");\n const maxPrice = searchParams.get(\"filter.v.price.lte\");\n\n if (minPrice) price.min = parseLocalizedNumber(minPrice);\n if (maxPrice) price.max = parseLocalizedNumber(maxPrice);\n if (price.min !== undefined || price.max !== undefined) filters.push({ price });\n\n const availability = searchParams.getAll(\"filter.v.availability\");\n const inStock = availability.includes(\"1\");\n const outOfStock = availability.includes(\"0\");\n if (inStock && !outOfStock) filters.push({ available: true });\n if (outOfStock && !inStock) filters.push({ available: false });\n\n for (const productType of searchParams.getAll(\"filter.p.product_type\")) {\n filters.push({ productType });\n }\n\n for (const productVendor of searchParams.getAll(\"filter.p.vendor\")) {\n filters.push({ productVendor });\n }\n\n for (const tag of searchParams.getAll(\"filter.p.tag\")) {\n filters.push({ tag });\n }\n\n for (const [key, value] of searchParams) {\n let match: RegExpMatchArray | null;\n\n if ((match = key.match(/^filter\\.v\\.option\\.(.+)$/))) {\n filters.push({ variantOption: { name: decodeFilterKeyPart(match[1]), value } });\n continue;\n }\n\n if ((match = key.match(/^filter\\.p\\.m\\.([^.]+)\\.(.+)$/))) {\n filters.push({\n productMetafield: {\n namespace: decodeFilterKeyPart(match[1]),\n key: decodeFilterKeyPart(match[2]),\n value,\n },\n });\n continue;\n }\n\n if ((match = key.match(/^filter\\.v\\.m\\.([^.]+)\\.(.+)$/))) {\n filters.push({\n variantMetafield: {\n namespace: decodeFilterKeyPart(match[1]),\n key: decodeFilterKeyPart(match[2]),\n value,\n },\n });\n continue;\n }\n\n if ((match = key.match(/^filter\\.v\\.t\\.([^.]+)\\.(.+)$/))) {\n filters.push({\n taxonomyMetafield: {\n key: `${decodeFilterKeyPart(match[1])}.${decodeFilterKeyPart(match[2])}`,\n value,\n },\n });\n }\n }\n\n return filters;\n}\n\n/** Mirrors `getCollectionSortKey` from storefront-standard-events. */\nfunction parseCollectionSortKey(\n searchParams: URLSearchParams,\n): ProductCollectionSortKeys | undefined {\n const rawSortBy = searchParams.get(\"sort_by\");\n return rawSortBy ? STANDARD_EVENTS_COLLECTION_SORT_KEY[rawSortBy] : undefined;\n}\n\nfunction parseLocalizedNumber(value: string): number {\n try {\n const locale = typeof window !== \"undefined\" ? window.Shopify?.locale : undefined;\n const parts = new Intl.NumberFormat(locale ?? \"en\").formatToParts(1234.5);\n const group = parts.find((part) => part.type === \"group\")?.value ?? \",\";\n const decimal = parts.find((part) => part.type === \"decimal\")?.value ?? \".\";\n const normalized = value.split(group).join(\"\").replace(decimal, \".\");\n const number = Number(normalized);\n if (!Number.isNaN(number)) return number;\n } catch {}\n\n return Number(value.replace(/[^\\d.]/g, \"\")) || 0;\n}\n\nfunction decodeFilterKeyPart(value: string): string {\n return decodeURIComponent(value.replace(/\\+/g, \" \"));\n}\n\nfunction getFilterParamEntries(filter: ProductFilter): Array<{ key: string; value: string }> {\n const entries: Array<{ key: string; value: string }> = [];\n\n if (filter.available != null) {\n entries.push({ key: \"filter.v.availability\", value: filter.available ? \"1\" : \"0\" });\n }\n\n if (filter.price) {\n if (filter.price.min != null) {\n entries.push({ key: \"filter.v.price.gte\", value: String(filter.price.min) });\n }\n if (filter.price.max != null) {\n entries.push({ key: \"filter.v.price.lte\", value: String(filter.price.max) });\n }\n }\n\n if (filter.productType != null) {\n entries.push({ key: \"filter.p.product_type\", value: filter.productType });\n }\n\n if (filter.productVendor != null) {\n entries.push({ key: \"filter.p.vendor\", value: filter.productVendor });\n }\n\n if (filter.tag != null) {\n entries.push({ key: \"filter.p.tag\", value: filter.tag });\n }\n\n if (filter.variantOption) {\n entries.push({\n key: `filter.v.option.${encodeURIComponent(filter.variantOption.name)}`,\n value: filter.variantOption.value ?? \"\",\n });\n }\n\n if (filter.productMetafield) {\n const { namespace, key, value } = filter.productMetafield;\n entries.push({\n key: `filter.p.m.${encodeURIComponent(namespace)}.${encodeURIComponent(key)}`,\n value: value ?? \"\",\n });\n }\n\n if (filter.variantMetafield) {\n const { namespace, key, value } = filter.variantMetafield;\n entries.push({\n key: `filter.v.m.${encodeURIComponent(namespace)}.${encodeURIComponent(key)}`,\n value: value ?? \"\",\n });\n }\n\n if (filter.taxonomyMetafield) {\n const fullKey = filter.taxonomyMetafield.key;\n const dotIdx = fullKey.indexOf(\".\");\n const ns = dotIdx >= 0 ? fullKey.slice(0, dotIdx) : fullKey;\n const k = dotIdx >= 0 ? fullKey.slice(dotIdx + 1) : \"\";\n entries.push({\n key: `filter.v.t.${encodeURIComponent(ns)}.${encodeURIComponent(k)}`,\n value: filter.taxonomyMetafield.value,\n });\n }\n\n if (filter.category) {\n entries.push({ key: \"filter.p.category\", value: filter.category.id });\n }\n\n return entries;\n}\n\nfunction serializeFilter(params: URLSearchParams, filter: ProductFilter): void {\n for (const { key, value } of getFilterParamEntries(filter)) {\n params.append(key, value);\n }\n}\n\nfunction removeFilterParams(params: URLSearchParams, filter: ProductFilter): void {\n for (const { key, value } of getFilterParamEntries(filter)) {\n removeParamValue(params, key, value);\n }\n}\n\nfunction clearPaginationCursors(params: URLSearchParams): void {\n for (const key of PAGINATION_CURSOR_PARAMS) {\n params.delete(key);\n }\n}\n\n/** Compares two individual {@link ProductFilter} objects for semantic equality. */\nexport function filterEquals(a: ProductFilter, b: ProductFilter): boolean {\n const kindA = filterKind(a);\n const kindB = filterKind(b);\n if (kindA !== kindB || kindA == null) return false;\n\n switch (kindA) {\n case \"tag\":\n return a.tag === b.tag;\n case \"available\":\n return a.available === b.available;\n case \"price\":\n return priceRangeEquals(a.price, b.price);\n case \"productType\":\n return a.productType === b.productType;\n case \"productVendor\":\n return a.productVendor === b.productVendor;\n case \"variantOption\": {\n const aOpt = a.variantOption;\n const bOpt = b.variantOption;\n if (aOpt == null || bOpt == null) return false;\n return aOpt.name === bOpt.name && (aOpt.value ?? \"\") === (bOpt.value ?? \"\");\n }\n case \"productMetafield\": {\n const aMeta = a.productMetafield;\n const bMeta = b.productMetafield;\n if (aMeta == null || bMeta == null) return false;\n return metafieldEquals(aMeta, bMeta);\n }\n case \"variantMetafield\": {\n const aMeta = a.variantMetafield;\n const bMeta = b.variantMetafield;\n if (aMeta == null || bMeta == null) return false;\n return metafieldEquals(aMeta, bMeta);\n }\n case \"taxonomyMetafield\": {\n const aMeta = a.taxonomyMetafield;\n const bMeta = b.taxonomyMetafield;\n if (aMeta == null || bMeta == null) return false;\n return aMeta.key === bMeta.key && aMeta.value === bMeta.value;\n }\n case \"category\": {\n const aCat = a.category;\n const bCat = b.category;\n if (aCat == null || bCat == null) return false;\n return aCat.id === bCat.id;\n }\n }\n}\n\n/** Returns `true` when `input` (a Storefront API filter JSON string) matches an active filter. */\nexport function isFilterInputActive(activeFilters: ProductFilter[], input: string): boolean {\n let parsed: ProductFilter;\n try {\n parsed = JSON.parse(input) as ProductFilter;\n } catch {\n return false;\n }\n return activeFilters.some((filter) => filterEquals(filter, parsed));\n}\n\nfunction filterKind(\n filter: ProductFilter,\n):\n | \"tag\"\n | \"available\"\n | \"price\"\n | \"productType\"\n | \"productVendor\"\n | \"variantOption\"\n | \"productMetafield\"\n | \"variantMetafield\"\n | \"taxonomyMetafield\"\n | \"category\"\n | null {\n if (filter.tag != null) return \"tag\";\n if (filter.available != null) return \"available\";\n if (filter.price != null) return \"price\";\n if (filter.productType != null) return \"productType\";\n if (filter.productVendor != null) return \"productVendor\";\n if (filter.variantOption != null) return \"variantOption\";\n if (filter.productMetafield != null) return \"productMetafield\";\n if (filter.variantMetafield != null) return \"variantMetafield\";\n if (filter.taxonomyMetafield != null) return \"taxonomyMetafield\";\n if (filter.category != null) return \"category\";\n return null;\n}\n\nfunction priceRangeEquals(a: ProductFilter[\"price\"], b: ProductFilter[\"price\"]): boolean {\n if (a == null || b == null) return a === b;\n return a.min === b.min && a.max === b.max;\n}\n\nfunction metafieldEquals(\n a: { namespace: string; key: string; value?: string },\n b: { namespace: string; key: string; value?: string },\n): boolean {\n return a.namespace === b.namespace && a.key === b.key && (a.value ?? \"\") === (b.value ?? \"\");\n}\n\nfunction filtersEqual(a: ProductFilter[], b: ProductFilter[]): boolean {\n if (a.length !== b.length) return false;\n\n const remaining = [...b];\n for (const filter of a) {\n const index = remaining.findIndex((candidate) => filterEquals(filter, candidate));\n if (index === -1) return false;\n remaining.splice(index, 1);\n }\n\n return true;\n}\n\nfunction removeParamValue(params: URLSearchParams, name: string, value: string): void {\n const remaining = params.getAll(name).filter((v) => v !== value);\n params.delete(name);\n for (const v of remaining) {\n params.append(name, v);\n }\n}\n"],"mappings":";AAcA,MAAM,4BAA4B;AAClC,MAAM,2BAA2B;AACjC,MAAM,2BAA8C,CAAC,UAAU,QAAQ;AAEvE,MAAM,sBAA8C;CAClD,cAAc;CACd,SAAS;CACT,OAAO;CACP,OAAO;CACP,QAAQ;CACR,IAAI;CACJ,WAAW;CACX,oBAAoB;CACrB;AAED,MAAM,sBAAiE,OAAO,YAC5E,OAAO,QAAQ,oBAAoB,CAAC,KAAK,CAAC,KAAK,WAAW,CACxD,OACA,IACD,CAAC,CACH;AAED,MAAM,sCAAiF;CACrF,gBAAgB;CAChB,qBAAqB;CACrB,sBAAsB;CACtB,mBAAmB;CACnB,oBAAoB;CACpB,mBAAmB;CACnB,oBAAoB;CACpB,QAAQ;CACT;;;;;;;;;AAUD,SAAgB,sBAAsB,cAAiD;AAMrF,QAAO;EAAE,SALO,oBAAoB,aAKpB;EAAE,SAJF,uBAAuB,aAId;EAAE,SAHT,aAAa,IAAI,UACV,EAAE,SAAS,0BAA0B,IAAI;EAE9B;;;;;;;;;;AAWtC,SAAgB,0BACd,OACiB;CACjB,MAAM,SAAS,IAAI,iBAAiB;AAEpC,MAAK,MAAM,UAAU,MAAM,QACzB,iBAAgB,QAAQ,OAAO;AAGjC,KAAI,MAAM,QACR,QAAO,IAAI,WAAW,eAAe,MAAM,SAAS,MAAM,QAAQ,CAAC;AAGrE,QAAO;;;AAIT,SAAgB,kBAAkB,KAAsB;AACtD,QAAO,QAAQ,aAAa,IAAI,WAAW,UAAU;;;AAIvD,SAAgB,0BAA0B,QAAwB;AAChE,QAAO,OAAO,WAAW,IAAI,GAAG,OAAO,MAAM,EAAE,GAAG;;;;;;;;AASpD,SAAgB,sBACd,UACA,OACiB;CACjB,MAAM,SAAS,IAAI,gBAAgB,SAAS;AAE5C,MAAK,MAAM,OAAO,MAAM,KAAK,OAAO,MAAM,CAAC,CACzC,KAAI,kBAAkB,IAAI,CACxB,QAAO,OAAO,IAAI;AAItB,wBAAuB,OAAO;AAE9B,MAAK,MAAM,CAAC,KAAK,UAAU,0BAA0B,MAAM,CACzD,QAAO,OAAO,KAAK,MAAM;AAG3B,QAAO;;;AAIT,SAAgB,sBAAsB,GAAW,GAAoB;CACnE,MAAM,UAAU,sBAAsB,IAAI,gBAAgB,0BAA0B,EAAE,CAAC,CAAC;CACxF,MAAM,UAAU,sBAAsB,IAAI,gBAAgB,0BAA0B,EAAE,CAAC,CAAC;AAExF,QACE,QAAQ,YAAY,QAAQ,WAC5B,QAAQ,YAAY,QAAQ,WAC5B,aAAa,QAAQ,SAAS,QAAQ,QAAQ;;;AAKlD,SAAgB,2BACd,cACA,OACS;CACT,MAAM,SAAS,sBAAsB,aAAa;AAElD,QACE,OAAO,YAAY,MAAM,WACzB,OAAO,YAAY,MAAM,WACzB,aAAa,OAAO,SAAS,MAAM,QAAQ;;;;;;;;;AAW/C,SAAgB,oBAAoB,eAAgC,QAA+B;CACjG,MAAM,SAAS,IAAI,gBAAgB,cAAc;AACjD,oBAAmB,QAAQ,OAAO;AAClC,wBAAuB,OAAO;CAC9B,MAAM,aAAa,OAAO,UAAU;AACpC,QAAO,aAAa,IAAI,eAAe;;;AAIzC,SAAgB,qBAAqB,SAA6C;AAChF,QAAO,YAAY,WAAW,YAAY,WAAW,YAAY,aAAa,YAAY;;;;;;;;;;;;;AAc5F,SAAgB,eAAe,SAAoC,SAA0B;CAC3F,MAAM,OAAO,oBAAoB,YAAY,QAAQ,aAAa;AAElE,KAAI,CAAC,qBAAqB,QAAQ,CAAE,QAAO;AAE3C,QAAO,UAAU,GAAG,KAAK,eAAe,GAAG,KAAK;;;;;;;;AASlD,SAAgB,iBAAiB,OAG/B;AACA,KAAI,MAAM,SAAS,0BAA0B,CAE3C,QAAO;EAAE,SAAS,oBADL,MAAM,MAAM,GAAG,IACc;EAAG,SAAS;EAAM;AAG9D,KAAI,MAAM,SAAS,yBAAyB,CAE1C,QAAO;EAAE,SAAS,oBADL,MAAM,MAAM,GAAG,IACc;EAAG,SAAS;EAAO;AAG/D,QAAO;EAAE,SAAS,oBAAoB;EAAQ,SAAS;EAAO;;;;;;;;AAShE,SAAS,oBAAoB,cAAgD;CAC3E,MAAM,UAA2B,EAAE;CACnC,MAAM,QAAgC,EAAE;CACxC,MAAM,WAAW,aAAa,IAAI,qBAAqB;CACvD,MAAM,WAAW,aAAa,IAAI,qBAAqB;AAEvD,KAAI,SAAU,OAAM,MAAM,qBAAqB,SAAS;AACxD,KAAI,SAAU,OAAM,MAAM,qBAAqB,SAAS;AACxD,KAAI,MAAM,QAAQ,UAAa,MAAM,QAAQ,OAAW,SAAQ,KAAK,EAAE,OAAO,CAAC;CAE/E,MAAM,eAAe,aAAa,OAAO,wBAAwB;CACjE,MAAM,UAAU,aAAa,SAAS,IAAI;CAC1C,MAAM,aAAa,aAAa,SAAS,IAAI;AAC7C,KAAI,WAAW,CAAC,WAAY,SAAQ,KAAK,EAAE,WAAW,MAAM,CAAC;AAC7D,KAAI,cAAc,CAAC,QAAS,SAAQ,KAAK,EAAE,WAAW,OAAO,CAAC;AAE9D,MAAK,MAAM,eAAe,aAAa,OAAO,wBAAwB,CACpE,SAAQ,KAAK,EAAE,aAAa,CAAC;AAG/B,MAAK,MAAM,iBAAiB,aAAa,OAAO,kBAAkB,CAChE,SAAQ,KAAK,EAAE,eAAe,CAAC;AAGjC,MAAK,MAAM,OAAO,aAAa,OAAO,eAAe,CACnD,SAAQ,KAAK,EAAE,KAAK,CAAC;AAGvB,MAAK,MAAM,CAAC,KAAK,UAAU,cAAc;EACvC,IAAI;AAEJ,MAAK,QAAQ,IAAI,MAAM,4BAA4B,EAAG;AACpD,WAAQ,KAAK,EAAE,eAAe;IAAE,MAAM,oBAAoB,MAAM,GAAG;IAAE;IAAO,EAAE,CAAC;AAC/E;;AAGF,MAAK,QAAQ,IAAI,MAAM,gCAAgC,EAAG;AACxD,WAAQ,KAAK,EACX,kBAAkB;IAChB,WAAW,oBAAoB,MAAM,GAAG;IACxC,KAAK,oBAAoB,MAAM,GAAG;IAClC;IACD,EACF,CAAC;AACF;;AAGF,MAAK,QAAQ,IAAI,MAAM,gCAAgC,EAAG;AACxD,WAAQ,KAAK,EACX,kBAAkB;IAChB,WAAW,oBAAoB,MAAM,GAAG;IACxC,KAAK,oBAAoB,MAAM,GAAG;IAClC;IACD,EACF,CAAC;AACF;;AAGF,MAAK,QAAQ,IAAI,MAAM,gCAAgC,CACrD,SAAQ,KAAK,EACX,mBAAmB;GACjB,KAAK,GAAG,oBAAoB,MAAM,GAAG,CAAC,GAAG,oBAAoB,MAAM,GAAG;GACtE;GACD,EACF,CAAC;;AAIN,QAAO;;;AAIT,SAAS,uBACP,cACuC;CACvC,MAAM,YAAY,aAAa,IAAI,UAAU;AAC7C,QAAO,YAAY,oCAAoC,aAAa;;AAGtE,SAAS,qBAAqB,OAAuB;AACnD,KAAI;EACF,MAAM,SAAS,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;EACxE,MAAM,QAAQ,IAAI,KAAK,aAAa,UAAU,KAAK,CAAC,cAAc,OAAO;EACzE,MAAM,QAAQ,MAAM,MAAM,SAAS,KAAK,SAAS,QAAQ,EAAE,SAAS;EACpE,MAAM,UAAU,MAAM,MAAM,SAAS,KAAK,SAAS,UAAU,EAAE,SAAS;EACxE,MAAM,aAAa,MAAM,MAAM,MAAM,CAAC,KAAK,GAAG,CAAC,QAAQ,SAAS,IAAI;EACpE,MAAM,SAAS,OAAO,WAAW;AACjC,MAAI,CAAC,OAAO,MAAM,OAAO,CAAE,QAAO;SAC5B;AAER,QAAO,OAAO,MAAM,QAAQ,WAAW,GAAG,CAAC,IAAI;;AAGjD,SAAS,oBAAoB,OAAuB;AAClD,QAAO,mBAAmB,MAAM,QAAQ,OAAO,IAAI,CAAC;;AAGtD,SAAS,sBAAsB,QAA8D;CAC3F,MAAM,UAAiD,EAAE;AAEzD,KAAI,OAAO,aAAa,KACtB,SAAQ,KAAK;EAAE,KAAK;EAAyB,OAAO,OAAO,YAAY,MAAM;EAAK,CAAC;AAGrF,KAAI,OAAO,OAAO;AAChB,MAAI,OAAO,MAAM,OAAO,KACtB,SAAQ,KAAK;GAAE,KAAK;GAAsB,OAAO,OAAO,OAAO,MAAM,IAAI;GAAE,CAAC;AAE9E,MAAI,OAAO,MAAM,OAAO,KACtB,SAAQ,KAAK;GAAE,KAAK;GAAsB,OAAO,OAAO,OAAO,MAAM,IAAI;GAAE,CAAC;;AAIhF,KAAI,OAAO,eAAe,KACxB,SAAQ,KAAK;EAAE,KAAK;EAAyB,OAAO,OAAO;EAAa,CAAC;AAG3E,KAAI,OAAO,iBAAiB,KAC1B,SAAQ,KAAK;EAAE,KAAK;EAAmB,OAAO,OAAO;EAAe,CAAC;AAGvE,KAAI,OAAO,OAAO,KAChB,SAAQ,KAAK;EAAE,KAAK;EAAgB,OAAO,OAAO;EAAK,CAAC;AAG1D,KAAI,OAAO,cACT,SAAQ,KAAK;EACX,KAAK,mBAAmB,mBAAmB,OAAO,cAAc,KAAK;EACrE,OAAO,OAAO,cAAc,SAAS;EACtC,CAAC;AAGJ,KAAI,OAAO,kBAAkB;EAC3B,MAAM,EAAE,WAAW,KAAK,UAAU,OAAO;AACzC,UAAQ,KAAK;GACX,KAAK,cAAc,mBAAmB,UAAU,CAAC,GAAG,mBAAmB,IAAI;GAC3E,OAAO,SAAS;GACjB,CAAC;;AAGJ,KAAI,OAAO,kBAAkB;EAC3B,MAAM,EAAE,WAAW,KAAK,UAAU,OAAO;AACzC,UAAQ,KAAK;GACX,KAAK,cAAc,mBAAmB,UAAU,CAAC,GAAG,mBAAmB,IAAI;GAC3E,OAAO,SAAS;GACjB,CAAC;;AAGJ,KAAI,OAAO,mBAAmB;EAC5B,MAAM,UAAU,OAAO,kBAAkB;EACzC,MAAM,SAAS,QAAQ,QAAQ,IAAI;EACnC,MAAM,KAAK,UAAU,IAAI,QAAQ,MAAM,GAAG,OAAO,GAAG;EACpD,MAAM,IAAI,UAAU,IAAI,QAAQ,MAAM,SAAS,EAAE,GAAG;AACpD,UAAQ,KAAK;GACX,KAAK,cAAc,mBAAmB,GAAG,CAAC,GAAG,mBAAmB,EAAE;GAClE,OAAO,OAAO,kBAAkB;GACjC,CAAC;;AAGJ,KAAI,OAAO,SACT,SAAQ,KAAK;EAAE,KAAK;EAAqB,OAAO,OAAO,SAAS;EAAI,CAAC;AAGvE,QAAO;;AAGT,SAAS,gBAAgB,QAAyB,QAA6B;AAC7E,MAAK,MAAM,EAAE,KAAK,WAAW,sBAAsB,OAAO,CACxD,QAAO,OAAO,KAAK,MAAM;;AAI7B,SAAS,mBAAmB,QAAyB,QAA6B;AAChF,MAAK,MAAM,EAAE,KAAK,WAAW,sBAAsB,OAAO,CACxD,kBAAiB,QAAQ,KAAK,MAAM;;AAIxC,SAAS,uBAAuB,QAA+B;AAC7D,MAAK,MAAM,OAAO,yBAChB,QAAO,OAAO,IAAI;;;AAKtB,SAAgB,aAAa,GAAkB,GAA2B;CACxE,MAAM,QAAQ,WAAW,EAAE;AAE3B,KAAI,UADU,WAAW,EACN,IAAI,SAAS,KAAM,QAAO;AAE7C,SAAQ,OAAR;EACE,KAAK,MACH,QAAO,EAAE,QAAQ,EAAE;EACrB,KAAK,YACH,QAAO,EAAE,cAAc,EAAE;EAC3B,KAAK,QACH,QAAO,iBAAiB,EAAE,OAAO,EAAE,MAAM;EAC3C,KAAK,cACH,QAAO,EAAE,gBAAgB,EAAE;EAC7B,KAAK,gBACH,QAAO,EAAE,kBAAkB,EAAE;EAC/B,KAAK,iBAAiB;GACpB,MAAM,OAAO,EAAE;GACf,MAAM,OAAO,EAAE;AACf,OAAI,QAAQ,QAAQ,QAAQ,KAAM,QAAO;AACzC,UAAO,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,SAAS,KAAK,SAAS;;EAE1E,KAAK,oBAAoB;GACvB,MAAM,QAAQ,EAAE;GAChB,MAAM,QAAQ,EAAE;AAChB,OAAI,SAAS,QAAQ,SAAS,KAAM,QAAO;AAC3C,UAAO,gBAAgB,OAAO,MAAM;;EAEtC,KAAK,oBAAoB;GACvB,MAAM,QAAQ,EAAE;GAChB,MAAM,QAAQ,EAAE;AAChB,OAAI,SAAS,QAAQ,SAAS,KAAM,QAAO;AAC3C,UAAO,gBAAgB,OAAO,MAAM;;EAEtC,KAAK,qBAAqB;GACxB,MAAM,QAAQ,EAAE;GAChB,MAAM,QAAQ,EAAE;AAChB,OAAI,SAAS,QAAQ,SAAS,KAAM,QAAO;AAC3C,UAAO,MAAM,QAAQ,MAAM,OAAO,MAAM,UAAU,MAAM;;EAE1D,KAAK,YAAY;GACf,MAAM,OAAO,EAAE;GACf,MAAM,OAAO,EAAE;AACf,OAAI,QAAQ,QAAQ,QAAQ,KAAM,QAAO;AACzC,UAAO,KAAK,OAAO,KAAK;;;;;AAM9B,SAAgB,oBAAoB,eAAgC,OAAwB;CAC1F,IAAI;AACJ,KAAI;AACF,WAAS,KAAK,MAAM,MAAM;SACpB;AACN,SAAO;;AAET,QAAO,cAAc,MAAM,WAAW,aAAa,QAAQ,OAAO,CAAC;;AAGrE,SAAS,WACP,QAYO;AACP,KAAI,OAAO,OAAO,KAAM,QAAO;AAC/B,KAAI,OAAO,aAAa,KAAM,QAAO;AACrC,KAAI,OAAO,SAAS,KAAM,QAAO;AACjC,KAAI,OAAO,eAAe,KAAM,QAAO;AACvC,KAAI,OAAO,iBAAiB,KAAM,QAAO;AACzC,KAAI,OAAO,iBAAiB,KAAM,QAAO;AACzC,KAAI,OAAO,oBAAoB,KAAM,QAAO;AAC5C,KAAI,OAAO,oBAAoB,KAAM,QAAO;AAC5C,KAAI,OAAO,qBAAqB,KAAM,QAAO;AAC7C,KAAI,OAAO,YAAY,KAAM,QAAO;AACpC,QAAO;;AAGT,SAAS,iBAAiB,GAA2B,GAAoC;AACvF,KAAI,KAAK,QAAQ,KAAK,KAAM,QAAO,MAAM;AACzC,QAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE;;AAGxC,SAAS,gBACP,GACA,GACS;AACT,QAAO,EAAE,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,SAAS,EAAE,SAAS;;AAG3F,SAAS,aAAa,GAAoB,GAA6B;AACrE,KAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;CAElC,MAAM,YAAY,CAAC,GAAG,EAAE;AACxB,MAAK,MAAM,UAAU,GAAG;EACtB,MAAM,QAAQ,UAAU,WAAW,cAAc,aAAa,QAAQ,UAAU,CAAC;AACjF,MAAI,UAAU,GAAI,QAAO;AACzB,YAAU,OAAO,OAAO,EAAE;;AAG5B,QAAO;;AAGT,SAAS,iBAAiB,QAAyB,MAAc,OAAqB;CACpF,MAAM,YAAY,OAAO,OAAO,KAAK,CAAC,QAAQ,MAAM,MAAM,MAAM;AAChE,QAAO,OAAO,KAAK;AACnB,MAAK,MAAM,KAAK,UACd,QAAO,OAAO,MAAM,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.mjs","names":[],"sources":["../../../src/core/constants.ts"],"sourcesContent":["export const STOREFRONT_API_VERSION = \"2026-04\";\nexport const CUSTOMER_ACCOUNT_API_VERSION = \"2026-04\";\nexport const DEFAULT_TIMEOUT_IN_MS = 30_000;\n"],"mappings":";AAAA,MAAa,yBAAyB;AAEtC,MAAa,wBAAwB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Cache, CacheOptions, CachingStrategy } from "./cache/strategies.mjs";
|
|
2
|
+
import { CacheInstance, createRunWithCache } from "./cache/run-with-cache.mjs";
|
|
3
|
+
import { ProductCollectionSortKeys } from "../graphql/generated/storefront-api-types.mjs";
|
|
4
|
+
import { I18nConfig, ShopifyRequestContext, ShopifyRequestContextWithBuyerIp, createShopifyRequestContext } from "./request-context.mjs";
|
|
5
|
+
import { InferResult, InferVariables } from "../graphql/type-resolver.mjs";
|
|
6
|
+
import { AnyStorefrontQueryString, StorefrontQueryString, gql } from "../graphql/graphql.mjs";
|
|
7
|
+
import { ClientType, CreateStorefrontClientArgs, GqlRestParam, GraphQLFormattedError, PrivateClientOptions, PrivateNoBuyerContextClientOptions, PrivateNoBuyerContextStorefrontClient, PrivateStorefrontClient, PublicClientOptions, PublicStorefrontClient, RequestScopedPrivateStorefrontClient, StorefrontApi, StorefrontClient, StorefrontClientOptions, StorefrontGraphql, StorefrontGraphqlOptions, StorefrontGraphqlResult } from "../client/types.mjs";
|
|
8
|
+
import { createStorefrontClient } from "../client/client.mjs";
|
|
9
|
+
import { ShopifyRouteTemplates } from "./standard-routes/types.mjs";
|
|
10
|
+
import { createShopifyRouteTemplates } from "./standard-routes/build.mjs";
|
|
11
|
+
import { RedirectOptions, handleShopifyRedirects } from "./request-routing/handle-shopify-redirects.mjs";
|
|
12
|
+
import { CallableRouteHandler, ShopifyRedirectStatus, ShopifyRouteError, ShopifyRouteErrorResult, ShopifyRouteHandler, ShopifyRouteHandlerContext, ShopifyRouteHandlerGroup, ShopifyRouteHandlerResult, ShopifyRouteJsonResult, ShopifyRouteRedirectResult } from "./request-routing/route-types.mjs";
|
|
13
|
+
import { createShopifyRouteHandler } from "./request-routing/registered-routes.mjs";
|
|
14
|
+
import { createFetchWithCache } from "./cache/fetch-with-cache.mjs";
|
|
15
|
+
import { StorefrontApiError, StorefrontTimeoutError } from "../client/errors.mjs";
|
|
16
|
+
import { ProductFilter } from "../vendor/standard-events.mjs";
|
|
17
|
+
import { Attribute, CartCost, CartData, CartErrorGroup, CartErrorState, CartLine, CartLineConnection, CartLineCost, CartLineMerchandise, CartNetworkEntry, CartPending, CartState, CartUserError, CartWarning, DiscountCode, EMPTY_CART_DATA, EMPTY_CART_STATE, createEmptyCartErrors, createEmptyErrorGroup } from "./cart/state.mjs";
|
|
18
|
+
import { CartNetworkError, CartStore, CreateCartStoreOptions, STANDARD_ACTION_TIMEOUT_IN_MS, configureCartEndpoint, createCartStore } from "./cart/cart.mjs";
|
|
19
|
+
import { trackCartAnalytics } from "./analytics/cart-tracker.mjs";
|
|
20
|
+
import { AnalyticsEvent, AnalyticsEventName } from "./analytics/events.mjs";
|
|
21
|
+
import { ShopifyGlobal } from "../globals.mjs";
|
|
22
|
+
import { ShopifyRoutesOptions, ShopifyScriptTagDescriptor, ShopifyScriptTagDescriptors, ShopifyScriptTagsOptions, ShopifyScriptsAnalyticsConfig, ShopifyScriptsI18n, ShopifyScriptsOptions, ShopifyScriptsShop } from "./shopify-scripts/types.mjs";
|
|
23
|
+
import { AnalyticsCart, AnalyticsCartLine, AnalyticsEventMap, CartLineUpdatePayload, CartUpdatePayload, CartViewPayload, CollectionViewPayload, ConsentConfig, EventPayloads, OtherData, PageViewPayload, PayloadFor, ProductPayload, ProductViewPayload, SearchViewPayload, ShopAnalytics, StorefrontAnalytics, StorefrontAnalyticsConfig, StorefrontAnalyticsDestination, StorefrontAnalyticsDestinationSetupContext } from "./analytics/types.mjs";
|
|
24
|
+
import { CartFormRegister, QuantityInputAttributes, SetButtonAttributes, createCartFormRegister } from "./cart/form.mjs";
|
|
25
|
+
import { attachQuantityInput } from "./cart/attach-quantity-input.mjs";
|
|
26
|
+
import { CartAction, CartAttributeInput, CartLineAddInput, CartLineUpdateInput, parseCartRequest } from "./cart/actions.mjs";
|
|
27
|
+
import { cartQueries } from "./cart/queries.mjs";
|
|
28
|
+
import { createCartCookie } from "./cart/cookie.mjs";
|
|
29
|
+
import { CartDataFromQuery, CartResult, getCart, getCartId } from "./cart/get-cart.mjs";
|
|
30
|
+
import { CartDataFromHandlers, CartError, CartErrorCode, CartGetData, CartGetHandler, CartGetResult, CartPostHandler, CartPostResult, CartServerHandlers, CartServerHandlersWithCustomerSession, CreateCartServerHandlersOptions, createCartServerHandlers } from "./cart/server-handlers.mjs";
|
|
31
|
+
import { DEFAULT_MINIMUM_QUANTITY, NO_QUANTITY_LIMIT, sanitizeQuantity } from "./cart/quantity.mjs";
|
|
32
|
+
import { initializeShopifyScripts } from "./shopify-scripts/initialize.mjs";
|
|
33
|
+
import { getShopifyScriptTags, renderShopifyScriptTags } from "./shopify-scripts/index.mjs";
|
|
34
|
+
import { AvailableFilter, AvailableFilterValue, CollectionState, FilterPresentation, FilterType, createInitialCollectionState } from "./collection/state.mjs";
|
|
35
|
+
import { CollectionData, CollectionStore, CreateCollectionStoreOptions, createCollectionStore } from "./collection/collection.mjs";
|
|
36
|
+
import { CollectionReconciler, ReconcilerCallbacks, createCollectionReconciler } from "./collection/reconciler.mjs";
|
|
37
|
+
import { CollectionParams, filterEquals, getFilterRemovalUrl, getSortByValue, isFilterInputActive, normalizeCollectionSearch, parseCollectionParams, parseSortByValue, serializeCollectionParams } from "./collection/url.mjs";
|
|
38
|
+
import { ProductInput, ProductOptionInput, ProductOptionValueInput, ProductVariantFrom, ProductVariantInput, SelectedOption, VariantOptionState, VariantOptionValueState } from "./product/state.mjs";
|
|
39
|
+
import { CreateProductFormStoreOptions, ProductFormErrors, ProductFormOptions, ProductFormStore, ProductFormStoreState, ValidProductSelectionResult, VariantSelectionResult, canAddToCart, createProductFormStore, findCartLineByMerchandiseId, getSelectedVariant } from "./product/product-form.mjs";
|
|
40
|
+
import { getSelectedProductOptions } from "./product/options.mjs";
|
|
41
|
+
import { ProductSelectionLinkStyle, buildProductSelectionSearchParams } from "./product/url.mjs";
|
|
42
|
+
import { ProductAddToCartProps, ProductFormRegister, ProductMerchandiseIdProps, ProductOptionValueProps, ProductQuantityDefaultProps, ProductQuantityProps, createProductFormRegister } from "./product/form.mjs";
|
|
43
|
+
import { SHOP_PAY_BUTTON_TAG_NAME, ShopPayButtonOptions, createShopPayButton, defineShopPayButton, getShopPayButtonUrl, renderShopPayButton } from "./shop-pay/shop-pay.mjs";
|
|
44
|
+
import { PredictiveSearchFormAttributes, PredictiveSearchFormRegister, PredictiveSearchQueryInputAttributes, createPredictiveSearchFormRegister, getPredictiveSearchFormAttributes, readPredictiveSearchFormTerm } from "./predictive-search/form.mjs";
|
|
45
|
+
import { CreatePredictiveSearchQueriesOptions, PredictiveSearchFragments, makePredictiveSearchQueries } from "./predictive-search/queries.mjs";
|
|
46
|
+
import { PredictiveSearchData, QueryPredictiveSearchOptions, queryPredictiveSearch } from "./predictive-search/search.mjs";
|
|
47
|
+
import { CreatePredictiveSearchServerHandlersOptions, createPredictiveSearchServerHandlers } from "./predictive-search/server-handlers.mjs";
|
|
48
|
+
import { CreatePredictiveSearchStoreOptions, PredictiveSearchState, PredictiveSearchStatus, PredictiveSearchStore, createPredictiveSearchStore } from "./predictive-search/store.mjs";
|
|
49
|
+
import { PredictiveSearchArticleItem, PredictiveSearchCollectionItem, PredictiveSearchItem, PredictiveSearchItemUrlOptions, PredictiveSearchPageItem, PredictiveSearchProductItem, PredictiveSearchQueryItem, PredictiveSearchQueryItemUrlOptions, PredictiveSearchResourceItem, getPredictiveSearchItemUrl, getSearchResultUrl } from "./predictive-search/url.mjs";
|
|
50
|
+
import { FormatMoneyOptions, FormattedMoney, FormattedMoneyRange, MoneyV2 } from "./money/types.mjs";
|
|
51
|
+
import { formatMoney } from "./money/format.mjs";
|
|
52
|
+
import { flattenConnection } from "./analytics/utils/flatten-connection.mjs";
|
|
53
|
+
import { HydrogenLogger, LogContext, LogLevel } from "./logging/types.mjs";
|
|
54
|
+
import { ConfigureLoggingOptions, configureLogging } from "./logging/logging.mjs";
|
|
55
|
+
import { handleShopifyRoutesDev } from "./request-routing/handle-shopify-routes.development.mjs";
|
|
56
|
+
export { AnalyticsCart, AnalyticsCartLine, AnalyticsEvent, AnalyticsEventMap, AnalyticsEventName, AnyStorefrontQueryString, Attribute, AvailableFilter, AvailableFilterValue, Cache, CacheInstance, CacheOptions, CachingStrategy, CallableRouteHandler, CartAction, CartAttributeInput, CartCost, CartData, CartDataFromHandlers, CartDataFromQuery, CartError, CartErrorCode, CartErrorGroup, CartErrorState, CartFormRegister, CartGetData, CartGetHandler, CartGetResult, CartLine, CartLineAddInput, CartLineConnection, CartLineCost, CartLineMerchandise, CartLineUpdateInput, CartLineUpdatePayload, CartNetworkEntry, CartNetworkError, CartPending, CartPostHandler, CartPostResult, CartResult, CartServerHandlers, CartServerHandlersWithCustomerSession, CartState, CartStore, CartUpdatePayload, CartUserError, CartViewPayload, CartWarning, ClientType, CollectionData, CollectionParams, CollectionReconciler, CollectionState, CollectionStore, CollectionViewPayload, ConfigureLoggingOptions, ConsentConfig, CreateCartServerHandlersOptions, CreateCartStoreOptions, CreateCollectionStoreOptions, CreatePredictiveSearchQueriesOptions, CreatePredictiveSearchServerHandlersOptions, CreatePredictiveSearchStoreOptions, CreateProductFormStoreOptions, CreateStorefrontClientArgs, DEFAULT_MINIMUM_QUANTITY, DiscountCode, EMPTY_CART_DATA, EMPTY_CART_STATE, EventPayloads, FilterPresentation, FilterType, FormatMoneyOptions, FormattedMoney, FormattedMoneyRange, GqlRestParam, GraphQLFormattedError, HydrogenLogger, I18nConfig, InferResult, InferVariables, LogContext, LogLevel, MoneyV2, NO_QUANTITY_LIMIT, OtherData, PageViewPayload, PayloadFor, PredictiveSearchArticleItem, PredictiveSearchCollectionItem, PredictiveSearchData, PredictiveSearchFormAttributes, PredictiveSearchFormRegister, PredictiveSearchFragments, PredictiveSearchItem, PredictiveSearchItemUrlOptions, PredictiveSearchPageItem, PredictiveSearchProductItem, PredictiveSearchQueryInputAttributes, PredictiveSearchQueryItem, PredictiveSearchQueryItemUrlOptions, PredictiveSearchResourceItem, PredictiveSearchState, PredictiveSearchStatus, PredictiveSearchStore, PrivateClientOptions, PrivateNoBuyerContextClientOptions, PrivateNoBuyerContextStorefrontClient, PrivateStorefrontClient, ProductAddToCartProps, ProductCollectionSortKeys, ProductFilter, ProductFormErrors, ProductFormOptions, ProductFormRegister, ProductFormStore, ProductFormStoreState, ProductInput, ProductMerchandiseIdProps, ProductOptionInput, ProductOptionValueInput, ProductOptionValueProps, ProductPayload, ProductQuantityDefaultProps, ProductQuantityProps, ProductSelectionLinkStyle, ProductVariantFrom, ProductVariantInput, ProductViewPayload, PublicClientOptions, PublicStorefrontClient, QuantityInputAttributes, QueryPredictiveSearchOptions, ReconcilerCallbacks, RedirectOptions, RequestScopedPrivateStorefrontClient, SHOP_PAY_BUTTON_TAG_NAME, STANDARD_ACTION_TIMEOUT_IN_MS, SearchViewPayload, SelectedOption, SetButtonAttributes, ShopAnalytics, ShopPayButtonOptions, ShopifyGlobal, ShopifyRedirectStatus, ShopifyRequestContext, ShopifyRequestContextWithBuyerIp, ShopifyRouteError, ShopifyRouteErrorResult, ShopifyRouteHandler, ShopifyRouteHandlerContext, ShopifyRouteHandlerGroup, ShopifyRouteHandlerResult, ShopifyRouteJsonResult, ShopifyRouteRedirectResult, ShopifyRouteTemplates, ShopifyRoutesOptions, ShopifyScriptTagDescriptor, ShopifyScriptTagDescriptors, ShopifyScriptTagsOptions, ShopifyScriptsAnalyticsConfig, ShopifyScriptsI18n, ShopifyScriptsOptions, ShopifyScriptsShop, StorefrontAnalytics, StorefrontAnalyticsConfig, StorefrontAnalyticsDestination, StorefrontAnalyticsDestinationSetupContext, StorefrontApi, StorefrontApiError, StorefrontClient, StorefrontClientOptions, StorefrontGraphql, StorefrontGraphqlOptions, StorefrontGraphqlResult, StorefrontQueryString, StorefrontTimeoutError, ValidProductSelectionResult, VariantOptionState, VariantOptionValueState, VariantSelectionResult, attachQuantityInput, buildProductSelectionSearchParams, canAddToCart, cartQueries, configureCartEndpoint, configureLogging, createCartCookie, createCartFormRegister, createCartServerHandlers, createCartStore, createCollectionReconciler, createCollectionStore, createEmptyCartErrors, createEmptyErrorGroup, createFetchWithCache, createInitialCollectionState, createPredictiveSearchFormRegister, createPredictiveSearchServerHandlers, createPredictiveSearchStore, createProductFormRegister, createProductFormStore, createRunWithCache, createShopPayButton, createShopifyRequestContext, createShopifyRouteHandler, createShopifyRouteTemplates, createStorefrontClient, defineShopPayButton, filterEquals, findCartLineByMerchandiseId, flattenConnection, formatMoney, getCart, getCartId, getFilterRemovalUrl, getPredictiveSearchFormAttributes, getPredictiveSearchItemUrl, getSearchResultUrl, getSelectedProductOptions, getSelectedVariant, getShopPayButtonUrl, getShopifyScriptTags, getSortByValue, gql, handleShopifyRedirects, handleShopifyRoutesDev as handleShopifyRoutes, initializeShopifyScripts, isFilterInputActive, makePredictiveSearchQueries, normalizeCollectionSearch, parseCartRequest, parseCollectionParams, parseSortByValue, queryPredictiveSearch, readPredictiveSearchFormTerm, renderShopPayButton, renderShopifyScriptTags, sanitizeQuantity, serializeCollectionParams, trackCartAnalytics };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { createShopifyRouteTemplates } from "./standard-routes/build.mjs";
|
|
2
|
+
import { configureLogging } from "./logging/logging.mjs";
|
|
3
|
+
import { gql } from "../graphql/graphql.mjs";
|
|
4
|
+
import { handleShopifyRedirects } from "./request-routing/handle-shopify-redirects.mjs";
|
|
5
|
+
import { Cache } from "./cache/strategies.mjs";
|
|
6
|
+
import { createRunWithCache } from "./cache/run-with-cache.mjs";
|
|
7
|
+
import { createFetchWithCache } from "./cache/fetch-with-cache.mjs";
|
|
8
|
+
import { StorefrontApiError, StorefrontTimeoutError } from "../client/errors.mjs";
|
|
9
|
+
import { createStorefrontClient } from "../client/client.mjs";
|
|
10
|
+
import { buildProductSelectionSearchParams } from "./product/url.mjs";
|
|
11
|
+
import { createCartCookie } from "./cart/cookie.mjs";
|
|
12
|
+
import { cartQueries } from "./cart/queries.mjs";
|
|
13
|
+
import { getCart, getCartId } from "./cart/get-cart.mjs";
|
|
14
|
+
import { createShopifyRouteHandler } from "./request-routing/registered-routes.mjs";
|
|
15
|
+
import { createShopifyRequestContext } from "./request-context.mjs";
|
|
16
|
+
import { AnalyticsEvent } from "./analytics/events.mjs";
|
|
17
|
+
import { flattenConnection } from "./analytics/utils/flatten-connection.mjs";
|
|
18
|
+
import { trackCartAnalytics } from "./analytics/cart-tracker.mjs";
|
|
19
|
+
import { initializeShopifyScripts } from "./shopify-scripts/initialize.mjs";
|
|
20
|
+
import { getShopifyScriptTags, renderShopifyScriptTags } from "./shopify-scripts/index.mjs";
|
|
21
|
+
import { createCartFormRegister } from "./cart/form.mjs";
|
|
22
|
+
import { DEFAULT_MINIMUM_QUANTITY, NO_QUANTITY_LIMIT, sanitizeQuantity } from "./cart/quantity.mjs";
|
|
23
|
+
import { EMPTY_CART_DATA, EMPTY_CART_STATE, createEmptyCartErrors, createEmptyErrorGroup } from "./cart/state.mjs";
|
|
24
|
+
import { CartNetworkError, STANDARD_ACTION_TIMEOUT_IN_MS, configureCartEndpoint, createCartStore } from "./cart/cart.mjs";
|
|
25
|
+
import { attachQuantityInput } from "./cart/attach-quantity-input.mjs";
|
|
26
|
+
import { parseCartRequest } from "./cart/actions.mjs";
|
|
27
|
+
import { createCartServerHandlers } from "./cart/server-handlers.mjs";
|
|
28
|
+
import { createInitialCollectionState } from "./collection/state.mjs";
|
|
29
|
+
import { filterEquals, getFilterRemovalUrl, getSortByValue, isFilterInputActive, normalizeCollectionSearch, parseCollectionParams, parseSortByValue, serializeCollectionParams } from "./collection/url.mjs";
|
|
30
|
+
import { createCollectionStore } from "./collection/collection.mjs";
|
|
31
|
+
import { createCollectionReconciler } from "./collection/reconciler.mjs";
|
|
32
|
+
import { getSelectedProductOptions } from "./product/options.mjs";
|
|
33
|
+
import { canAddToCart, createProductFormStore, findCartLineByMerchandiseId, getSelectedVariant } from "./product/product-form.mjs";
|
|
34
|
+
import { createProductFormRegister } from "./product/form.mjs";
|
|
35
|
+
import { SHOP_PAY_BUTTON_TAG_NAME, createShopPayButton, defineShopPayButton, getShopPayButtonUrl, renderShopPayButton } from "./shop-pay/shop-pay.mjs";
|
|
36
|
+
import { createPredictiveSearchFormRegister, getPredictiveSearchFormAttributes, readPredictiveSearchFormTerm } from "./predictive-search/form.mjs";
|
|
37
|
+
import { makePredictiveSearchQueries } from "./predictive-search/queries.mjs";
|
|
38
|
+
import { queryPredictiveSearch } from "./predictive-search/search.mjs";
|
|
39
|
+
import { createPredictiveSearchServerHandlers } from "./predictive-search/server-handlers.mjs";
|
|
40
|
+
import { createPredictiveSearchStore } from "./predictive-search/store.mjs";
|
|
41
|
+
import { getPredictiveSearchItemUrl, getSearchResultUrl } from "./predictive-search/url.mjs";
|
|
42
|
+
import { formatMoney } from "./money/format.mjs";
|
|
43
|
+
import { handleShopifyRoutesDev } from "./request-routing/handle-shopify-routes.development.mjs";
|
|
44
|
+
|
|
45
|
+
export { AnalyticsEvent, Cache, CartNetworkError, DEFAULT_MINIMUM_QUANTITY, EMPTY_CART_DATA, EMPTY_CART_STATE, NO_QUANTITY_LIMIT, SHOP_PAY_BUTTON_TAG_NAME, STANDARD_ACTION_TIMEOUT_IN_MS, StorefrontApiError, StorefrontTimeoutError, attachQuantityInput, buildProductSelectionSearchParams, canAddToCart, cartQueries, configureCartEndpoint, configureLogging, createCartCookie, createCartFormRegister, createCartServerHandlers, createCartStore, createCollectionReconciler, createCollectionStore, createEmptyCartErrors, createEmptyErrorGroup, createFetchWithCache, createInitialCollectionState, createPredictiveSearchFormRegister, createPredictiveSearchServerHandlers, createPredictiveSearchStore, createProductFormRegister, createProductFormStore, createRunWithCache, createShopPayButton, createShopifyRequestContext, createShopifyRouteHandler, createShopifyRouteTemplates, createStorefrontClient, defineShopPayButton, filterEquals, findCartLineByMerchandiseId, flattenConnection, formatMoney, getCart, getCartId, getFilterRemovalUrl, getPredictiveSearchFormAttributes, getPredictiveSearchItemUrl, getSearchResultUrl, getSelectedProductOptions, getSelectedVariant, getShopPayButtonUrl, getShopifyScriptTags, getSortByValue, gql, handleShopifyRedirects, handleShopifyRoutesDev as handleShopifyRoutes, initializeShopifyScripts, isFilterInputActive, makePredictiveSearchQueries, normalizeCollectionSearch, parseCartRequest, parseCollectionParams, parseSortByValue, queryPredictiveSearch, readPredictiveSearchFormTerm, renderShopPayButton, renderShopifyScriptTags, sanitizeQuantity, serializeCollectionParams, trackCartAnalytics };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//#region src/core/headers.ts
|
|
2
|
+
const CACHE_CONTROL_HEADER = "Cache-Control";
|
|
3
|
+
const CONSENT_MANAGEMENT_HEADER = "Shopify-Storefront-Consent-Management";
|
|
4
|
+
const HYDROGEN_VERSION_HEADER = "X-Hydrogen-Version";
|
|
5
|
+
const SERVER_TIMING_HEADER = "Server-Timing";
|
|
6
|
+
const SURROGATE_CONTROL_HEADER = "Surrogate-Control";
|
|
7
|
+
const REQUEST_GROUP_ID_HEADER = "Custom-Storefront-Request-Group-ID";
|
|
8
|
+
const SDK_VARIANT_HEADER = "X-SDK-Variant";
|
|
9
|
+
const SDK_VARIANT_SOURCE_HEADER = "X-SDK-Variant-Source";
|
|
10
|
+
const SDK_VERSION_HEADER = "X-SDK-Version";
|
|
11
|
+
const SHOPIFY_STOREFRONT_ORIGIN_HEADER = "Sec-Shopify-Storefront-Origin";
|
|
12
|
+
const STOREFRONT_ID_HEADER = "Shopify-Storefront-Id";
|
|
13
|
+
const SHOPIFY_STOREFRONT_S_HEADER = "Shopify-Storefront-S";
|
|
14
|
+
const SHOPIFY_STOREFRONT_Y_HEADER = "Shopify-Storefront-Y";
|
|
15
|
+
const SHOPIFY_UNIQUE_TOKEN_HEADER = "X-Shopify-UniqueToken";
|
|
16
|
+
const SHOPIFY_VISIT_TOKEN_HEADER = "X-Shopify-VisitToken";
|
|
17
|
+
const STOREFRONT_ACCESS_TOKEN_HEADER = "X-Shopify-Storefront-Access-Token";
|
|
18
|
+
const STOREFRONT_BUYER_IP_HEADER = "Shopify-Storefront-Buyer-IP";
|
|
19
|
+
const STOREFRONT_PRIVATE_TOKEN_HEADER = "Shopify-Storefront-Private-Token";
|
|
20
|
+
const STOREFRONT_URL_HEADER = "x-storefront-url";
|
|
21
|
+
function defineHeaderList(...headerNames) {
|
|
22
|
+
return headerNames;
|
|
23
|
+
}
|
|
24
|
+
function extractHeaders(getter, allowlist) {
|
|
25
|
+
return allowlist.reduce((acc, key) => {
|
|
26
|
+
const value = getter(key);
|
|
27
|
+
if (value != null) acc.push([key, value]);
|
|
28
|
+
return acc;
|
|
29
|
+
}, []);
|
|
30
|
+
}
|
|
31
|
+
function applyPrivateResponseCacheHeaders(headers) {
|
|
32
|
+
headers.set(CACHE_CONTROL_HEADER, "private, no-store, max-age=0, must-revalidate");
|
|
33
|
+
for (const header of Array.from(headers.keys())) if (/^(?:.+-)?cdn-cache-control$/i.test(header) || header.toLowerCase() === "Surrogate-Control".toLowerCase()) headers.delete(header);
|
|
34
|
+
}
|
|
35
|
+
const COMMON_PROXY_HEADER_ALLOWLIST = defineHeaderList("accept", "accept-encoding", "accept-language", "content-type", "cookie", "origin", "referer", "user-agent");
|
|
36
|
+
const SFAPI_REQUEST_HEADER_ALLOWLIST = defineHeaderList(...COMMON_PROXY_HEADER_ALLOWLIST, "content-length", "access-control-request-headers", "access-control-request-method", STOREFRONT_ACCESS_TOKEN_HEADER, STOREFRONT_PRIVATE_TOKEN_HEADER, SHOPIFY_UNIQUE_TOKEN_HEADER, SHOPIFY_VISIT_TOKEN_HEADER);
|
|
37
|
+
const MCP_REQUEST_HEADER_ALLOWLIST = defineHeaderList(...COMMON_PROXY_HEADER_ALLOWLIST);
|
|
38
|
+
const AJAX_API_REQUEST_HEADER_ALLOWLIST = defineHeaderList(...COMMON_PROXY_HEADER_ALLOWLIST, "content-length", "x-requested-with");
|
|
39
|
+
const PROXY_REQUEST_HEADER_DENYLIST = defineHeaderList("cf-connecting-ip", "connection", "content-length", "host", "keep-alive", "proxy-authenticate", "proxy-authorization", "te", "trailer", "transfer-encoding", "upgrade");
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
export { AJAX_API_REQUEST_HEADER_ALLOWLIST, CONSENT_MANAGEMENT_HEADER, HYDROGEN_VERSION_HEADER, MCP_REQUEST_HEADER_ALLOWLIST, PROXY_REQUEST_HEADER_DENYLIST, REQUEST_GROUP_ID_HEADER, SDK_VARIANT_HEADER, SDK_VARIANT_SOURCE_HEADER, SDK_VERSION_HEADER, SERVER_TIMING_HEADER, SFAPI_REQUEST_HEADER_ALLOWLIST, SHOPIFY_STOREFRONT_ORIGIN_HEADER, SHOPIFY_STOREFRONT_S_HEADER, SHOPIFY_STOREFRONT_Y_HEADER, SHOPIFY_UNIQUE_TOKEN_HEADER, SHOPIFY_VISIT_TOKEN_HEADER, STOREFRONT_ACCESS_TOKEN_HEADER, STOREFRONT_BUYER_IP_HEADER, STOREFRONT_ID_HEADER, STOREFRONT_PRIVATE_TOKEN_HEADER, STOREFRONT_URL_HEADER, applyPrivateResponseCacheHeaders, extractHeaders };
|
|
43
|
+
//# sourceMappingURL=headers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.mjs","names":[],"sources":["../../../src/core/headers.ts"],"sourcesContent":["export const CACHE_CONTROL_HEADER = \"Cache-Control\";\nexport const CONSENT_MANAGEMENT_HEADER = \"Shopify-Storefront-Consent-Management\";\nexport const HYDROGEN_VERSION_HEADER = \"X-Hydrogen-Version\";\nexport const SERVER_TIMING_HEADER = \"Server-Timing\";\nexport const SURROGATE_CONTROL_HEADER = \"Surrogate-Control\";\nexport const REQUEST_GROUP_ID_HEADER = \"Custom-Storefront-Request-Group-ID\";\nexport const SDK_VARIANT_HEADER = \"X-SDK-Variant\";\nexport const SDK_VARIANT_SOURCE_HEADER = \"X-SDK-Variant-Source\";\nexport const SDK_VERSION_HEADER = \"X-SDK-Version\";\nexport const SHOPIFY_STOREFRONT_ORIGIN_HEADER = \"Sec-Shopify-Storefront-Origin\";\nexport const STOREFRONT_ID_HEADER = \"Shopify-Storefront-Id\";\nexport const SHOPIFY_STOREFRONT_S_HEADER = \"Shopify-Storefront-S\";\nexport const SHOPIFY_STOREFRONT_Y_HEADER = \"Shopify-Storefront-Y\";\nexport const SHOPIFY_UNIQUE_TOKEN_HEADER = \"X-Shopify-UniqueToken\";\nexport const SHOPIFY_VISIT_TOKEN_HEADER = \"X-Shopify-VisitToken\";\nexport const STOREFRONT_ACCESS_TOKEN_HEADER = \"X-Shopify-Storefront-Access-Token\";\nexport const STOREFRONT_BUYER_IP_HEADER = \"Shopify-Storefront-Buyer-IP\";\nexport const STOREFRONT_PRIVATE_TOKEN_HEADER = \"Shopify-Storefront-Private-Token\";\nexport const STOREFRONT_URL_HEADER = \"x-storefront-url\";\n\nexport type StandardHeaderName =\n | \"accept\"\n | \"accept-encoding\"\n | \"accept-language\"\n | \"access-control-request-headers\"\n | \"access-control-request-method\"\n | typeof CACHE_CONTROL_HEADER\n | \"cf-connecting-ip\"\n | \"connection\"\n | \"content-length\"\n | \"content-type\"\n | \"cookie\"\n | \"host\"\n | \"keep-alive\"\n | \"origin\"\n | \"proxy-authenticate\"\n | \"proxy-authorization\"\n | \"referer\"\n | typeof SERVER_TIMING_HEADER\n | typeof SURROGATE_CONTROL_HEADER\n | \"te\"\n | \"trailer\"\n | \"transfer-encoding\"\n | \"upgrade\"\n | \"user-agent\"\n | \"x-requested-with\";\n\nexport type ShopifyHeaderName =\n | typeof CONSENT_MANAGEMENT_HEADER\n | typeof HYDROGEN_VERSION_HEADER\n | typeof REQUEST_GROUP_ID_HEADER\n | typeof SDK_VARIANT_HEADER\n | typeof SDK_VARIANT_SOURCE_HEADER\n | typeof SDK_VERSION_HEADER\n | typeof SHOPIFY_STOREFRONT_ORIGIN_HEADER\n | typeof SHOPIFY_STOREFRONT_S_HEADER\n | typeof SHOPIFY_STOREFRONT_Y_HEADER\n | typeof SHOPIFY_UNIQUE_TOKEN_HEADER\n | typeof SHOPIFY_VISIT_TOKEN_HEADER\n | typeof STOREFRONT_ACCESS_TOKEN_HEADER\n | typeof STOREFRONT_BUYER_IP_HEADER\n | typeof STOREFRONT_ID_HEADER\n | typeof STOREFRONT_PRIVATE_TOKEN_HEADER\n | typeof STOREFRONT_URL_HEADER;\n\ntype KnownHeaderName = StandardHeaderName | ShopifyHeaderName;\n\nexport function defineHeaderList<const HeaderNames extends readonly KnownHeaderName[]>(\n ...headerNames: HeaderNames\n): HeaderNames {\n return headerNames;\n}\n\nexport function extractHeaders(\n getter: (key: string) => string | null,\n allowlist: readonly string[],\n): [string, string][] {\n return allowlist.reduce<[string, string][]>((acc, key) => {\n const value = getter(key);\n if (value != null) acc.push([key, value]);\n return acc;\n }, []);\n}\n\nexport function applyPrivateResponseCacheHeaders(headers: Headers): void {\n headers.set(CACHE_CONTROL_HEADER, \"private, no-store, max-age=0, must-revalidate\");\n for (const header of Array.from(headers.keys())) {\n if (\n /^(?:.+-)?cdn-cache-control$/i.test(header) ||\n header.toLowerCase() === SURROGATE_CONTROL_HEADER.toLowerCase()\n ) {\n headers.delete(header);\n }\n }\n}\n\nconst COMMON_PROXY_HEADER_ALLOWLIST = defineHeaderList(\n \"accept\",\n \"accept-encoding\",\n \"accept-language\",\n \"content-type\",\n \"cookie\",\n \"origin\",\n \"referer\",\n \"user-agent\",\n);\n\nexport const SFAPI_REQUEST_HEADER_ALLOWLIST = defineHeaderList(\n ...COMMON_PROXY_HEADER_ALLOWLIST,\n \"content-length\",\n \"access-control-request-headers\",\n \"access-control-request-method\",\n STOREFRONT_ACCESS_TOKEN_HEADER,\n STOREFRONT_PRIVATE_TOKEN_HEADER,\n SHOPIFY_UNIQUE_TOKEN_HEADER,\n SHOPIFY_VISIT_TOKEN_HEADER,\n);\n\nexport const MCP_REQUEST_HEADER_ALLOWLIST = defineHeaderList(...COMMON_PROXY_HEADER_ALLOWLIST);\n\nexport const AJAX_API_REQUEST_HEADER_ALLOWLIST = defineHeaderList(\n ...COMMON_PROXY_HEADER_ALLOWLIST,\n \"content-length\",\n \"x-requested-with\",\n);\n\n// Hop-by-hop headers must not be forwarded by proxies. `host` and\n// `content-length` are also removed so fetch can derive them for the upstream\n// request. See https://www.rfc-editor.org/rfc/rfc9110.html#section-7.6.1\nexport const PROXY_REQUEST_HEADER_DENYLIST = defineHeaderList(\n \"cf-connecting-ip\",\n \"connection\",\n \"content-length\",\n \"host\",\n \"keep-alive\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n);\n"],"mappings":";AAAA,MAAa,uBAAuB;AACpC,MAAa,4BAA4B;AACzC,MAAa,0BAA0B;AACvC,MAAa,uBAAuB;AACpC,MAAa,2BAA2B;AACxC,MAAa,0BAA0B;AACvC,MAAa,qBAAqB;AAClC,MAAa,4BAA4B;AACzC,MAAa,qBAAqB;AAClC,MAAa,mCAAmC;AAChD,MAAa,uBAAuB;AACpC,MAAa,8BAA8B;AAC3C,MAAa,8BAA8B;AAC3C,MAAa,8BAA8B;AAC3C,MAAa,6BAA6B;AAC1C,MAAa,iCAAiC;AAC9C,MAAa,6BAA6B;AAC1C,MAAa,kCAAkC;AAC/C,MAAa,wBAAwB;AAiDrC,SAAgB,iBACd,GAAG,aACU;AACb,QAAO;;AAGT,SAAgB,eACd,QACA,WACoB;AACpB,QAAO,UAAU,QAA4B,KAAK,QAAQ;EACxD,MAAM,QAAQ,OAAO,IAAI;AACzB,MAAI,SAAS,KAAM,KAAI,KAAK,CAAC,KAAK,MAAM,CAAC;AACzC,SAAO;IACN,EAAE,CAAC;;AAGR,SAAgB,iCAAiC,SAAwB;AACvE,SAAQ,IAAI,sBAAsB,gDAAgD;AAClF,MAAK,MAAM,UAAU,MAAM,KAAK,QAAQ,MAAM,CAAC,CAC7C,KACE,+BAA+B,KAAK,OAAO,IAC3C,OAAO,aAAa,yBAA8B,aAAa,CAE/D,SAAQ,OAAO,OAAO;;AAK5B,MAAM,gCAAgC,iBACpC,UACA,mBACA,mBACA,gBACA,UACA,UACA,WACA,aACD;AAED,MAAa,iCAAiC,iBAC5C,GAAG,+BACH,kBACA,kCACA,iCACA,gCACA,iCACA,6BACA,2BACD;AAED,MAAa,+BAA+B,iBAAiB,GAAG,8BAA8B;AAE9F,MAAa,oCAAoC,iBAC/C,GAAG,+BACH,kBACA,mBACD;AAKD,MAAa,gCAAgC,iBAC3C,oBACA,cACA,kBACA,QACA,cACA,sBACA,uBACA,MACA,WACA,qBACA,UACD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Cache, CacheOptions, CachingStrategy } from "./cache/strategies.mjs";
|
|
2
|
+
import { CacheInstance, createRunWithCache } from "./cache/run-with-cache.mjs";
|
|
3
|
+
import { ProductCollectionSortKeys } from "../graphql/generated/storefront-api-types.mjs";
|
|
4
|
+
import { I18nConfig, ShopifyRequestContext, ShopifyRequestContextWithBuyerIp, createShopifyRequestContext } from "./request-context.mjs";
|
|
5
|
+
import { InferResult, InferVariables } from "../graphql/type-resolver.mjs";
|
|
6
|
+
import { AnyStorefrontQueryString, StorefrontQueryString, gql } from "../graphql/graphql.mjs";
|
|
7
|
+
import { ClientType, CreateStorefrontClientArgs, GqlRestParam, GraphQLFormattedError, PrivateClientOptions, PrivateNoBuyerContextClientOptions, PrivateNoBuyerContextStorefrontClient, PrivateStorefrontClient, PublicClientOptions, PublicStorefrontClient, RequestScopedPrivateStorefrontClient, StorefrontApi, StorefrontClient, StorefrontClientOptions, StorefrontGraphql, StorefrontGraphqlOptions, StorefrontGraphqlResult } from "../client/types.mjs";
|
|
8
|
+
import { createStorefrontClient } from "../client/client.mjs";
|
|
9
|
+
import { ShopifyRouteTemplates } from "./standard-routes/types.mjs";
|
|
10
|
+
import { createShopifyRouteTemplates } from "./standard-routes/build.mjs";
|
|
11
|
+
import { RedirectOptions, handleShopifyRedirects } from "./request-routing/handle-shopify-redirects.mjs";
|
|
12
|
+
import { CallableRouteHandler, ShopifyRedirectStatus, ShopifyRouteError, ShopifyRouteErrorResult, ShopifyRouteHandler, ShopifyRouteHandlerContext, ShopifyRouteHandlerGroup, ShopifyRouteHandlerResult, ShopifyRouteJsonResult, ShopifyRouteRedirectResult } from "./request-routing/route-types.mjs";
|
|
13
|
+
import { createShopifyRouteHandler } from "./request-routing/registered-routes.mjs";
|
|
14
|
+
import { createFetchWithCache } from "./cache/fetch-with-cache.mjs";
|
|
15
|
+
import { StorefrontApiError, StorefrontTimeoutError } from "../client/errors.mjs";
|
|
16
|
+
import { ProductFilter } from "../vendor/standard-events.mjs";
|
|
17
|
+
import { Attribute, CartCost, CartData, CartErrorGroup, CartErrorState, CartLine, CartLineConnection, CartLineCost, CartLineMerchandise, CartNetworkEntry, CartPending, CartState, CartUserError, CartWarning, DiscountCode, EMPTY_CART_DATA, EMPTY_CART_STATE, createEmptyCartErrors, createEmptyErrorGroup } from "./cart/state.mjs";
|
|
18
|
+
import { CartNetworkError, CartStore, CreateCartStoreOptions, STANDARD_ACTION_TIMEOUT_IN_MS, configureCartEndpoint, createCartStore } from "./cart/cart.mjs";
|
|
19
|
+
import { trackCartAnalytics } from "./analytics/cart-tracker.mjs";
|
|
20
|
+
import { AnalyticsEvent, AnalyticsEventName } from "./analytics/events.mjs";
|
|
21
|
+
import { ShopifyGlobal } from "../globals.mjs";
|
|
22
|
+
import { ShopifyRoutesOptions, ShopifyScriptTagDescriptor, ShopifyScriptTagDescriptors, ShopifyScriptTagsOptions, ShopifyScriptsAnalyticsConfig, ShopifyScriptsI18n, ShopifyScriptsOptions, ShopifyScriptsShop } from "./shopify-scripts/types.mjs";
|
|
23
|
+
import { AnalyticsCart, AnalyticsCartLine, AnalyticsEventMap, CartLineUpdatePayload, CartUpdatePayload, CartViewPayload, CollectionViewPayload, ConsentConfig, EventPayloads, OtherData, PageViewPayload, PayloadFor, ProductPayload, ProductViewPayload, SearchViewPayload, ShopAnalytics, StorefrontAnalytics, StorefrontAnalyticsConfig, StorefrontAnalyticsDestination, StorefrontAnalyticsDestinationSetupContext } from "./analytics/types.mjs";
|
|
24
|
+
import { CartFormRegister, QuantityInputAttributes, SetButtonAttributes, createCartFormRegister } from "./cart/form.mjs";
|
|
25
|
+
import { attachQuantityInput } from "./cart/attach-quantity-input.mjs";
|
|
26
|
+
import { CartAction, CartAttributeInput, CartLineAddInput, CartLineUpdateInput, parseCartRequest } from "./cart/actions.mjs";
|
|
27
|
+
import { cartQueries } from "./cart/queries.mjs";
|
|
28
|
+
import { createCartCookie } from "./cart/cookie.mjs";
|
|
29
|
+
import { CartDataFromQuery, CartResult, getCart, getCartId } from "./cart/get-cart.mjs";
|
|
30
|
+
import { CartDataFromHandlers, CartError, CartErrorCode, CartGetData, CartGetHandler, CartGetResult, CartPostHandler, CartPostResult, CartServerHandlers, CartServerHandlersWithCustomerSession, CreateCartServerHandlersOptions, createCartServerHandlers } from "./cart/server-handlers.mjs";
|
|
31
|
+
import { DEFAULT_MINIMUM_QUANTITY, NO_QUANTITY_LIMIT, sanitizeQuantity } from "./cart/quantity.mjs";
|
|
32
|
+
import { initializeShopifyScripts } from "./shopify-scripts/initialize.mjs";
|
|
33
|
+
import { getShopifyScriptTags, renderShopifyScriptTags } from "./shopify-scripts/index.mjs";
|
|
34
|
+
import { AvailableFilter, AvailableFilterValue, CollectionState, FilterPresentation, FilterType, createInitialCollectionState } from "./collection/state.mjs";
|
|
35
|
+
import { CollectionData, CollectionStore, CreateCollectionStoreOptions, createCollectionStore } from "./collection/collection.mjs";
|
|
36
|
+
import { CollectionReconciler, ReconcilerCallbacks, createCollectionReconciler } from "./collection/reconciler.mjs";
|
|
37
|
+
import { CollectionParams, filterEquals, getFilterRemovalUrl, getSortByValue, isFilterInputActive, normalizeCollectionSearch, parseCollectionParams, parseSortByValue, serializeCollectionParams } from "./collection/url.mjs";
|
|
38
|
+
import { ProductInput, ProductOptionInput, ProductOptionValueInput, ProductVariantFrom, ProductVariantInput, SelectedOption, VariantOptionState, VariantOptionValueState } from "./product/state.mjs";
|
|
39
|
+
import { CreateProductFormStoreOptions, ProductFormErrors, ProductFormOptions, ProductFormStore, ProductFormStoreState, ValidProductSelectionResult, VariantSelectionResult, canAddToCart, createProductFormStore, findCartLineByMerchandiseId, getSelectedVariant } from "./product/product-form.mjs";
|
|
40
|
+
import { getSelectedProductOptions } from "./product/options.mjs";
|
|
41
|
+
import { ProductSelectionLinkStyle, buildProductSelectionSearchParams } from "./product/url.mjs";
|
|
42
|
+
import { ProductAddToCartProps, ProductFormRegister, ProductMerchandiseIdProps, ProductOptionValueProps, ProductQuantityDefaultProps, ProductQuantityProps, createProductFormRegister } from "./product/form.mjs";
|
|
43
|
+
import { SHOP_PAY_BUTTON_TAG_NAME, ShopPayButtonOptions, createShopPayButton, defineShopPayButton, getShopPayButtonUrl, renderShopPayButton } from "./shop-pay/shop-pay.mjs";
|
|
44
|
+
import { PredictiveSearchFormAttributes, PredictiveSearchFormRegister, PredictiveSearchQueryInputAttributes, createPredictiveSearchFormRegister, getPredictiveSearchFormAttributes, readPredictiveSearchFormTerm } from "./predictive-search/form.mjs";
|
|
45
|
+
import { CreatePredictiveSearchQueriesOptions, PredictiveSearchFragments, makePredictiveSearchQueries } from "./predictive-search/queries.mjs";
|
|
46
|
+
import { PredictiveSearchData, QueryPredictiveSearchOptions, queryPredictiveSearch } from "./predictive-search/search.mjs";
|
|
47
|
+
import { CreatePredictiveSearchServerHandlersOptions, createPredictiveSearchServerHandlers } from "./predictive-search/server-handlers.mjs";
|
|
48
|
+
import { CreatePredictiveSearchStoreOptions, PredictiveSearchState, PredictiveSearchStatus, PredictiveSearchStore, createPredictiveSearchStore } from "./predictive-search/store.mjs";
|
|
49
|
+
import { PredictiveSearchArticleItem, PredictiveSearchCollectionItem, PredictiveSearchItem, PredictiveSearchItemUrlOptions, PredictiveSearchPageItem, PredictiveSearchProductItem, PredictiveSearchQueryItem, PredictiveSearchQueryItemUrlOptions, PredictiveSearchResourceItem, getPredictiveSearchItemUrl, getSearchResultUrl } from "./predictive-search/url.mjs";
|
|
50
|
+
import { FormatMoneyOptions, FormattedMoney, FormattedMoneyRange, MoneyV2 } from "./money/types.mjs";
|
|
51
|
+
import { formatMoney } from "./money/format.mjs";
|
|
52
|
+
import { flattenConnection } from "./analytics/utils/flatten-connection.mjs";
|
|
53
|
+
import { HydrogenLogger, LogContext, LogLevel } from "./logging/types.mjs";
|
|
54
|
+
import { ConfigureLoggingOptions, configureLogging } from "./logging/logging.mjs";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { HydrogenLogger, LogLevel } from "./types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/core/logging/logging.d.ts
|
|
4
|
+
type ConfigureLoggingOptions = {
|
|
5
|
+
/** Receives all entries at or above `level`. Defaults to the built-in console logger. */logger?: HydrogenLogger; /** Minimum severity forwarded to the logger. Defaults to `"info"`. */
|
|
6
|
+
level?: LogLevel;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Configures logging for every Hydrogen helper in this JavaScript context.
|
|
10
|
+
* Call it once at startup (app entry on the browser, module init on the
|
|
11
|
+
* server) before Hydrogen helpers run.
|
|
12
|
+
*
|
|
13
|
+
* Reconfiguring with different options applies the new options (last call
|
|
14
|
+
* wins). Inline bootstrap scripts that Hydrogen serializes into HTML
|
|
15
|
+
* (analytics, consent) run outside the app bundle and always write to the
|
|
16
|
+
* console with the standard prefix; they cannot receive a custom logger.
|
|
17
|
+
*/
|
|
18
|
+
declare function configureLogging(options: ConfigureLoggingOptions): void;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { ConfigureLoggingOptions, configureLogging };
|
|
21
|
+
//# sourceMappingURL=logging.d.mts.map
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { DEFAULT_LOG_LEVEL, isLevelEnabled } from "./types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/core/logging/logging.ts
|
|
4
|
+
const CONSOLE_METHODS = {
|
|
5
|
+
trace: "debug",
|
|
6
|
+
debug: "debug",
|
|
7
|
+
info: "info",
|
|
8
|
+
warn: "warn",
|
|
9
|
+
error: "error",
|
|
10
|
+
fatal: "error"
|
|
11
|
+
};
|
|
12
|
+
function formatLogPrefix(level, scope) {
|
|
13
|
+
return `[hydrogen:${level}:${scope}]`;
|
|
14
|
+
}
|
|
15
|
+
function writeToConsole(level, message, context) {
|
|
16
|
+
const { scope, error, ...rest } = context ?? {};
|
|
17
|
+
const args = [scope ? `${formatLogPrefix(level, scope)} ${message}` : message];
|
|
18
|
+
if (error !== void 0) args.push(error);
|
|
19
|
+
if (Object.keys(rest).length > 0) args.push(rest);
|
|
20
|
+
console[CONSOLE_METHODS[level]](...args);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Built-in sink: writes `[hydrogen:<level>:<scope>] <message>` to a
|
|
24
|
+
* level-specific `console` method, followed by `context.error` and any extra
|
|
25
|
+
* context fields. `trace` uses `console.debug`; `fatal` uses `console.error`.
|
|
26
|
+
*/
|
|
27
|
+
const consoleLogger = {
|
|
28
|
+
trace: (message, context) => writeToConsole("trace", message, context),
|
|
29
|
+
debug: (message, context) => writeToConsole("debug", message, context),
|
|
30
|
+
info: (message, context) => writeToConsole("info", message, context),
|
|
31
|
+
warn: (message, context) => writeToConsole("warn", message, context),
|
|
32
|
+
error: (message, context) => writeToConsole("error", message, context),
|
|
33
|
+
fatal: (message, context) => writeToConsole("fatal", message, context)
|
|
34
|
+
};
|
|
35
|
+
const state = {
|
|
36
|
+
logger: consoleLogger,
|
|
37
|
+
level: DEFAULT_LOG_LEVEL
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Configures logging for every Hydrogen helper in this JavaScript context.
|
|
41
|
+
* Call it once at startup (app entry on the browser, module init on the
|
|
42
|
+
* server) before Hydrogen helpers run.
|
|
43
|
+
*
|
|
44
|
+
* Reconfiguring with different options applies the new options (last call
|
|
45
|
+
* wins). Inline bootstrap scripts that Hydrogen serializes into HTML
|
|
46
|
+
* (analytics, consent) run outside the app bundle and always write to the
|
|
47
|
+
* console with the standard prefix; they cannot receive a custom logger.
|
|
48
|
+
*/
|
|
49
|
+
function configureLogging(options) {
|
|
50
|
+
const logger = options.logger ?? consoleLogger;
|
|
51
|
+
const level = options.level ?? "info";
|
|
52
|
+
state.logger = logger;
|
|
53
|
+
state.level = level;
|
|
54
|
+
}
|
|
55
|
+
function emit(scope, level, message, context) {
|
|
56
|
+
if (!isLevelEnabled(level, state.level)) return;
|
|
57
|
+
try {
|
|
58
|
+
state.logger[level](message, {
|
|
59
|
+
...context,
|
|
60
|
+
scope
|
|
61
|
+
});
|
|
62
|
+
} catch (error) {
|
|
63
|
+
reportLoggerFailure(error, {
|
|
64
|
+
level,
|
|
65
|
+
scope,
|
|
66
|
+
message,
|
|
67
|
+
context
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function reportLoggerFailure(error, failedEntry) {
|
|
72
|
+
if (state.logger === consoleLogger) return;
|
|
73
|
+
const fallbackContext = {
|
|
74
|
+
scope: "logging",
|
|
75
|
+
error,
|
|
76
|
+
originalLevel: failedEntry.level,
|
|
77
|
+
originalScope: failedEntry.scope,
|
|
78
|
+
originalMessage: failedEntry.message
|
|
79
|
+
};
|
|
80
|
+
if (failedEntry.context !== void 0) fallbackContext.originalContext = failedEntry.context;
|
|
81
|
+
try {
|
|
82
|
+
consoleLogger.error("configured logger failed", fallbackContext);
|
|
83
|
+
} catch {}
|
|
84
|
+
}
|
|
85
|
+
/** @internal Returns the lazily-resolved scoped logger for a Hydrogen subsystem. */
|
|
86
|
+
function getLogger(scope) {
|
|
87
|
+
return {
|
|
88
|
+
trace: (message, context) => emit(scope, "trace", message, context),
|
|
89
|
+
debug: (message, context) => emit(scope, "debug", message, context),
|
|
90
|
+
info: (message, context) => emit(scope, "info", message, context),
|
|
91
|
+
warn: (message, context) => emit(scope, "warn", message, context),
|
|
92
|
+
error: (message, context) => emit(scope, "error", message, context),
|
|
93
|
+
fatal: (message, context) => emit(scope, "fatal", message, context)
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
//#endregion
|
|
98
|
+
export { configureLogging, getLogger };
|
|
99
|
+
//# sourceMappingURL=logging.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.mjs","names":[],"sources":["../../../../src/core/logging/logging.ts"],"sourcesContent":["import {\n DEFAULT_LOG_LEVEL,\n isLevelEnabled,\n type HydrogenLogger,\n type LogContext,\n type LogLevel,\n type LogSeverity,\n} from \"./types\";\n\nconst CONSOLE_METHODS: Record<LogSeverity, \"debug\" | \"info\" | \"warn\" | \"error\"> = {\n // `console.trace` prints a stack trace for every call, which is too noisy\n // for level-gated trace logs; route it to `console.debug` instead.\n trace: \"debug\",\n debug: \"debug\",\n info: \"info\",\n warn: \"warn\",\n error: \"error\",\n fatal: \"error\",\n};\n\nexport function formatLogPrefix(level: LogSeverity, scope: string): string {\n return `[hydrogen:${level}:${scope}]`;\n}\n\nfunction writeToConsole(level: LogSeverity, message: string, context?: LogContext): void {\n const { scope, error, ...rest } = context ?? {};\n const prefixed = scope ? `${formatLogPrefix(level, scope)} ${message}` : message;\n const args: unknown[] = [prefixed];\n if (error !== undefined) args.push(error);\n if (Object.keys(rest).length > 0) args.push(rest);\n\n // oxlint-disable-next-line no-console -- The built-in sink is the one sanctioned console call site.\n console[CONSOLE_METHODS[level]](...args);\n}\n\n/**\n * Built-in sink: writes `[hydrogen:<level>:<scope>] <message>` to a\n * level-specific `console` method, followed by `context.error` and any extra\n * context fields. `trace` uses `console.debug`; `fatal` uses `console.error`.\n */\nexport const consoleLogger: HydrogenLogger = {\n trace: (message, context) => writeToConsole(\"trace\", message, context),\n debug: (message, context) => writeToConsole(\"debug\", message, context),\n info: (message, context) => writeToConsole(\"info\", message, context),\n warn: (message, context) => writeToConsole(\"warn\", message, context),\n error: (message, context) => writeToConsole(\"error\", message, context),\n fatal: (message, context) => writeToConsole(\"fatal\", message, context),\n};\n\nexport type ConfigureLoggingOptions = {\n /** Receives all entries at or above `level`. Defaults to the built-in console logger. */\n logger?: HydrogenLogger;\n /** Minimum severity forwarded to the logger. Defaults to `\"info\"`. */\n level?: LogLevel;\n};\n\ntype LoggingState = {\n logger: HydrogenLogger;\n level: LogLevel;\n};\n\nconst state: LoggingState = {\n logger: consoleLogger,\n level: DEFAULT_LOG_LEVEL,\n};\n\n/**\n * Configures logging for every Hydrogen helper in this JavaScript context.\n * Call it once at startup (app entry on the browser, module init on the\n * server) before Hydrogen helpers run.\n *\n * Reconfiguring with different options applies the new options (last call\n * wins). Inline bootstrap scripts that Hydrogen serializes into HTML\n * (analytics, consent) run outside the app bundle and always write to the\n * console with the standard prefix; they cannot receive a custom logger.\n */\nexport function configureLogging(options: ConfigureLoggingOptions): void {\n const logger = options.logger ?? consoleLogger;\n const level = options.level ?? DEFAULT_LOG_LEVEL;\n\n state.logger = logger;\n state.level = level;\n}\n\n/** @internal */\nexport function resetLoggingForTests(): void {\n state.logger = consoleLogger;\n state.level = DEFAULT_LOG_LEVEL;\n}\n\n/**\n * Scoped logger used by Hydrogen internals. Entries are level-gated and\n * tagged with `scope`, then forwarded to the configured sink. Resolution is\n * lazy: `configureLogging` affects loggers obtained before or after the call.\n */\ntype ScopedLogContext = Omit<LogContext, \"scope\"> & { scope?: never };\n\ntype ScopedLogger = Record<LogSeverity, (message: string, context?: ScopedLogContext) => void>;\n\nfunction emit(scope: string, level: LogSeverity, message: string, context?: LogContext): void {\n if (!isLevelEnabled(level, state.level)) return;\n\n try {\n state.logger[level](message, { ...context, scope });\n } catch (error) {\n reportLoggerFailure(error, { level, scope, message, context });\n }\n}\n\ntype FailedLogEntry = {\n level: LogSeverity;\n scope: string;\n message: string;\n context?: LogContext;\n};\n\nfunction reportLoggerFailure(error: unknown, failedEntry: FailedLogEntry): void {\n if (state.logger === consoleLogger) return;\n\n const fallbackContext: LogContext = {\n scope: \"logging\",\n error,\n originalLevel: failedEntry.level,\n originalScope: failedEntry.scope,\n originalMessage: failedEntry.message,\n };\n if (failedEntry.context !== undefined) fallbackContext.originalContext = failedEntry.context;\n\n try {\n consoleLogger.error(\"configured logger failed\", fallbackContext);\n } catch {\n // Logging failures must never change the runtime path that triggered the log.\n }\n}\n\n/** @internal Returns the lazily-resolved scoped logger for a Hydrogen subsystem. */\nexport function getLogger(scope: string): ScopedLogger {\n return {\n trace: (message, context) => emit(scope, \"trace\", message, context),\n debug: (message, context) => emit(scope, \"debug\", message, context),\n info: (message, context) => emit(scope, \"info\", message, context),\n warn: (message, context) => emit(scope, \"warn\", message, context),\n error: (message, context) => emit(scope, \"error\", message, context),\n fatal: (message, context) => emit(scope, \"fatal\", message, context),\n };\n}\n"],"mappings":";;;AASA,MAAM,kBAA4E;CAGhF,OAAO;CACP,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACR;AAED,SAAgB,gBAAgB,OAAoB,OAAuB;AACzE,QAAO,aAAa,MAAM,GAAG,MAAM;;AAGrC,SAAS,eAAe,OAAoB,SAAiB,SAA4B;CACvF,MAAM,EAAE,OAAO,OAAO,GAAG,SAAS,WAAW,EAAE;CAE/C,MAAM,OAAkB,CADP,QAAQ,GAAG,gBAAgB,OAAO,MAAM,CAAC,GAAG,YAAY,QACvC;AAClC,KAAI,UAAU,OAAW,MAAK,KAAK,MAAM;AACzC,KAAI,OAAO,KAAK,KAAK,CAAC,SAAS,EAAG,MAAK,KAAK,KAAK;AAGjD,SAAQ,gBAAgB,QAAQ,GAAG,KAAK;;;;;;;AAQ1C,MAAa,gBAAgC;CAC3C,QAAQ,SAAS,YAAY,eAAe,SAAS,SAAS,QAAQ;CACtE,QAAQ,SAAS,YAAY,eAAe,SAAS,SAAS,QAAQ;CACtE,OAAO,SAAS,YAAY,eAAe,QAAQ,SAAS,QAAQ;CACpE,OAAO,SAAS,YAAY,eAAe,QAAQ,SAAS,QAAQ;CACpE,QAAQ,SAAS,YAAY,eAAe,SAAS,SAAS,QAAQ;CACtE,QAAQ,SAAS,YAAY,eAAe,SAAS,SAAS,QAAQ;CACvE;AAcD,MAAM,QAAsB;CAC1B,QAAQ;CACR,OAAO;CACR;;;;;;;;;;;AAYD,SAAgB,iBAAiB,SAAwC;CACvE,MAAM,SAAS,QAAQ,UAAU;CACjC,MAAM,QAAQ,QAAQ;AAEtB,OAAM,SAAS;AACf,OAAM,QAAQ;;AAkBhB,SAAS,KAAK,OAAe,OAAoB,SAAiB,SAA4B;AAC5F,KAAI,CAAC,eAAe,OAAO,MAAM,MAAM,CAAE;AAEzC,KAAI;AACF,QAAM,OAAO,OAAO,SAAS;GAAE,GAAG;GAAS;GAAO,CAAC;UAC5C,OAAO;AACd,sBAAoB,OAAO;GAAE;GAAO;GAAO;GAAS;GAAS,CAAC;;;AAWlE,SAAS,oBAAoB,OAAgB,aAAmC;AAC9E,KAAI,MAAM,WAAW,cAAe;CAEpC,MAAM,kBAA8B;EAClC,OAAO;EACP;EACA,eAAe,YAAY;EAC3B,eAAe,YAAY;EAC3B,iBAAiB,YAAY;EAC9B;AACD,KAAI,YAAY,YAAY,OAAW,iBAAgB,kBAAkB,YAAY;AAErF,KAAI;AACF,gBAAc,MAAM,4BAA4B,gBAAgB;SAC1D;;;AAMV,SAAgB,UAAU,OAA6B;AACrD,QAAO;EACL,QAAQ,SAAS,YAAY,KAAK,OAAO,SAAS,SAAS,QAAQ;EACnE,QAAQ,SAAS,YAAY,KAAK,OAAO,SAAS,SAAS,QAAQ;EACnE,OAAO,SAAS,YAAY,KAAK,OAAO,QAAQ,SAAS,QAAQ;EACjE,OAAO,SAAS,YAAY,KAAK,OAAO,QAAQ,SAAS,QAAQ;EACjE,QAAQ,SAAS,YAAY,KAAK,OAAO,SAAS,SAAS,QAAQ;EACnE,QAAQ,SAAS,YAAY,KAAK,OAAO,SAAS,SAAS,QAAQ;EACpE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//#region src/core/logging/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Logging contract for `@shopify/hydrogen` runtime failures.
|
|
4
|
+
*
|
|
5
|
+
* The interface is intentionally minimal and structural: any logger with these
|
|
6
|
+
* level methods can receive Hydrogen entries. Hydrogen never depends on a
|
|
7
|
+
* specific logging library.
|
|
8
|
+
*/
|
|
9
|
+
/** Log severities, ordered. `silent` disables all output. */
|
|
10
|
+
type LogLevel = "trace" | "debug" | "info" | "warn" | "error" | "fatal" | "silent";
|
|
11
|
+
/**
|
|
12
|
+
* Structured details attached to a log entry. `scope` names the Hydrogen
|
|
13
|
+
* subsystem (`cart`, `analytics`, `shop-pay`, ...). `error` carries the caught
|
|
14
|
+
* value when the entry reports a failure.
|
|
15
|
+
*/
|
|
16
|
+
type LogContext = {
|
|
17
|
+
scope?: string;
|
|
18
|
+
error?: unknown;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
};
|
|
21
|
+
type LogFn = (message: string, context?: LogContext) => void;
|
|
22
|
+
/**
|
|
23
|
+
* Sink that receives Hydrogen log entries. Pass your own logger to
|
|
24
|
+
* `configureLogging`, or rely on the built-in console logger.
|
|
25
|
+
*
|
|
26
|
+
* Messages arrive unprefixed; `context.scope` identifies the subsystem so
|
|
27
|
+
* custom sinks control their own formatting. The built-in console logger
|
|
28
|
+
* formats entries as `[hydrogen:<level>:<scope>] <message>`.
|
|
29
|
+
*/
|
|
30
|
+
interface HydrogenLogger {
|
|
31
|
+
trace: LogFn;
|
|
32
|
+
debug: LogFn;
|
|
33
|
+
info: LogFn;
|
|
34
|
+
warn: LogFn;
|
|
35
|
+
error: LogFn;
|
|
36
|
+
fatal: LogFn;
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { HydrogenLogger, LogContext, LogLevel };
|
|
40
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/core/logging/types.ts
|
|
2
|
+
const DEFAULT_LOG_LEVEL = "info";
|
|
3
|
+
const LOG_LEVEL_VALUES = {
|
|
4
|
+
trace: 10,
|
|
5
|
+
debug: 20,
|
|
6
|
+
info: 30,
|
|
7
|
+
warn: 40,
|
|
8
|
+
error: 50,
|
|
9
|
+
fatal: 60,
|
|
10
|
+
silent: Number.POSITIVE_INFINITY
|
|
11
|
+
};
|
|
12
|
+
function isLevelEnabled(level, threshold) {
|
|
13
|
+
return LOG_LEVEL_VALUES[level] >= LOG_LEVEL_VALUES[threshold];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
//#endregion
|
|
17
|
+
export { DEFAULT_LOG_LEVEL, isLevelEnabled };
|
|
18
|
+
//# sourceMappingURL=types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","names":[],"sources":["../../../../src/core/logging/types.ts"],"sourcesContent":["/**\n * Logging contract for `@shopify/hydrogen` runtime failures.\n *\n * The interface is intentionally minimal and structural: any logger with these\n * level methods can receive Hydrogen entries. Hydrogen never depends on a\n * specific logging library.\n */\n\n/** Log severities, ordered. `silent` disables all output. */\nexport type LogLevel = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\" | \"silent\";\n\n/**\n * Structured details attached to a log entry. `scope` names the Hydrogen\n * subsystem (`cart`, `analytics`, `shop-pay`, ...). `error` carries the caught\n * value when the entry reports a failure.\n */\nexport type LogContext = {\n scope?: string;\n error?: unknown;\n [key: string]: unknown;\n};\n\ntype LogFn = (message: string, context?: LogContext) => void;\n\n/**\n * Sink that receives Hydrogen log entries. Pass your own logger to\n * `configureLogging`, or rely on the built-in console logger.\n *\n * Messages arrive unprefixed; `context.scope` identifies the subsystem so\n * custom sinks control their own formatting. The built-in console logger\n * formats entries as `[hydrogen:<level>:<scope>] <message>`.\n */\nexport interface HydrogenLogger {\n trace: LogFn;\n debug: LogFn;\n info: LogFn;\n warn: LogFn;\n error: LogFn;\n fatal: LogFn;\n}\n\nexport const DEFAULT_LOG_LEVEL: LogLevel = \"info\";\n\nconst LOG_LEVEL_VALUES: Record<LogLevel, number> = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60,\n silent: Number.POSITIVE_INFINITY,\n};\n\n/** Severity actually emitted by a log entry (everything except `silent`). */\nexport type LogSeverity = Exclude<LogLevel, \"silent\">;\n\nexport function isLevelEnabled(level: LogSeverity, threshold: LogLevel): boolean {\n return LOG_LEVEL_VALUES[level] >= LOG_LEVEL_VALUES[threshold];\n}\n"],"mappings":";AAyCA,MAAa,oBAA8B;AAE3C,MAAM,mBAA6C;CACjD,OAAO;CACP,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACP,QAAQ,OAAO;CAChB;AAKD,SAAgB,eAAe,OAAoB,WAA8B;AAC/E,QAAO,iBAAiB,UAAU,iBAAiB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/core/money/cache.ts
|
|
2
|
+
/**
|
|
3
|
+
* Module-scoped cache for Intl.NumberFormat instances.
|
|
4
|
+
*
|
|
5
|
+
* Constructing an Intl.NumberFormat is expensive — it resolves the locale
|
|
6
|
+
* chain, loads currency data, and builds the formatting pattern. The
|
|
7
|
+
* .format() call on an existing instance is cheap by comparison.
|
|
8
|
+
*
|
|
9
|
+
* In a storefront, the same locale + currency + options combination is
|
|
10
|
+
* hit repeatedly (every cart line, every product in a collection grid),
|
|
11
|
+
* so reusing instances avoids redundant construction.
|
|
12
|
+
*/
|
|
13
|
+
const formatterCache = /* @__PURE__ */ new Map();
|
|
14
|
+
function getFormatter(locale, options) {
|
|
15
|
+
const key = `${locale}:${JSON.stringify(options)}`;
|
|
16
|
+
let formatter = formatterCache.get(key);
|
|
17
|
+
if (formatter) return formatter;
|
|
18
|
+
formatter = new Intl.NumberFormat(locale, options);
|
|
19
|
+
formatterCache.set(key, formatter);
|
|
20
|
+
return formatter;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//#endregion
|
|
24
|
+
export { getFormatter };
|
|
25
|
+
//# sourceMappingURL=cache.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.mjs","names":[],"sources":["../../../../src/core/money/cache.ts"],"sourcesContent":["/**\n * Module-scoped cache for Intl.NumberFormat instances.\n *\n * Constructing an Intl.NumberFormat is expensive — it resolves the locale\n * chain, loads currency data, and builds the formatting pattern. The\n * .format() call on an existing instance is cheap by comparison.\n *\n * In a storefront, the same locale + currency + options combination is\n * hit repeatedly (every cart line, every product in a collection grid),\n * so reusing instances avoids redundant construction.\n */\nconst formatterCache = new Map<string, Intl.NumberFormat>();\n\nexport function getFormatter(locale: string, options: Intl.NumberFormatOptions): Intl.NumberFormat {\n const key = `${locale}:${JSON.stringify(options)}`;\n\n let formatter = formatterCache.get(key);\n if (formatter) return formatter;\n\n formatter = new Intl.NumberFormat(locale, options);\n formatterCache.set(key, formatter);\n return formatter;\n}\n"],"mappings":";;;;;;;;;;;;AAWA,MAAM,iCAAiB,IAAI,KAAgC;AAE3D,SAAgB,aAAa,QAAgB,SAAsD;CACjG,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,UAAU,QAAQ;CAEhD,IAAI,YAAY,eAAe,IAAI,IAAI;AACvC,KAAI,UAAW,QAAO;AAEtB,aAAY,IAAI,KAAK,aAAa,QAAQ,QAAQ;AAClD,gBAAe,IAAI,KAAK,UAAU;AAClC,QAAO"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FormatMoneyOptions, FormattedMoney, FormattedMoneyRange, MoneyV2 } from "./types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/core/money/format.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Format a MoneyV2 value or a same-currency range of MoneyV2 values for display.
|
|
6
|
+
*
|
|
7
|
+
* Returns an object that stringifies to the locale-formatted price via
|
|
8
|
+
* toString(). Structured fields on single prices are computed lazily when
|
|
9
|
+
* accessed, so the common string path stays cheap.
|
|
10
|
+
*/
|
|
11
|
+
declare function formatMoney(money: MoneyV2, options: FormatMoneyOptions): FormattedMoney;
|
|
12
|
+
declare function formatMoney(money: readonly MoneyV2[], options: FormatMoneyOptions): FormattedMoneyRange;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { formatMoney };
|
|
15
|
+
//# sourceMappingURL=format.d.mts.map
|