@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":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region src/core/constants.ts
|
|
2
|
+
const STOREFRONT_API_VERSION = "2026-04";
|
|
3
|
+
const CUSTOMER_ACCOUNT_API_VERSION = "2026-04";
|
|
4
|
+
const DEFAULT_TIMEOUT_IN_MS = 3e4;
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
export { CUSTOMER_ACCOUNT_API_VERSION, DEFAULT_TIMEOUT_IN_MS, STOREFRONT_API_VERSION };
|
|
8
|
+
//# sourceMappingURL=constants.mjs.map
|
|
@@ -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;AACtC,MAAa,+BAA+B;AAC5C,MAAa,wBAAwB"}
|
|
@@ -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,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 { handleShopifyRoutes } from "./request-routing/handle-shopify-routes.mjs";
|
|
14
|
+
import { createShopifyRouteHandler } from "./request-routing/registered-routes.mjs";
|
|
15
|
+
import { createFetchWithCache } from "./cache/fetch-with-cache.mjs";
|
|
16
|
+
import { StorefrontApiError, StorefrontTimeoutError } from "../client/errors.mjs";
|
|
17
|
+
import { ProductFilter } from "../vendor/standard-events.mjs";
|
|
18
|
+
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";
|
|
19
|
+
import { CartNetworkError, CartStore, CreateCartStoreOptions, STANDARD_ACTION_TIMEOUT_IN_MS, configureCartEndpoint, createCartStore } from "./cart/cart.mjs";
|
|
20
|
+
import { trackCartAnalytics } from "./analytics/cart-tracker.mjs";
|
|
21
|
+
import { AnalyticsEvent, AnalyticsEventName } from "./analytics/events.mjs";
|
|
22
|
+
import { ShopifyGlobal } from "../globals.mjs";
|
|
23
|
+
import { ShopifyRoutesOptions, ShopifyScriptTagDescriptor, ShopifyScriptTagDescriptors, ShopifyScriptTagsOptions, ShopifyScriptsAnalyticsConfig, ShopifyScriptsI18n, ShopifyScriptsOptions, ShopifyScriptsShop } from "./shopify-scripts/types.mjs";
|
|
24
|
+
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";
|
|
25
|
+
import { CartFormRegister, QuantityInputAttributes, SetButtonAttributes, createCartFormRegister } from "./cart/form.mjs";
|
|
26
|
+
import { attachQuantityInput } from "./cart/attach-quantity-input.mjs";
|
|
27
|
+
import { CartAction, CartAttributeInput, CartLineAddInput, CartLineUpdateInput, parseCartRequest } from "./cart/actions.mjs";
|
|
28
|
+
import { cartQueries } from "./cart/queries.mjs";
|
|
29
|
+
import { createCartCookie } from "./cart/cookie.mjs";
|
|
30
|
+
import { CartDataFromQuery, CartResult, getCart, getCartId } from "./cart/get-cart.mjs";
|
|
31
|
+
import { CartDataFromHandlers, CartError, CartErrorCode, CartGetData, CartGetHandler, CartGetResult, CartPostHandler, CartPostResult, CartServerHandlers, CartServerHandlersWithCustomerSession, CreateCartServerHandlersOptions, createCartServerHandlers } from "./cart/server-handlers.mjs";
|
|
32
|
+
import { DEFAULT_MINIMUM_QUANTITY, NO_QUANTITY_LIMIT, sanitizeQuantity } from "./cart/quantity.mjs";
|
|
33
|
+
import { initializeShopifyScripts } from "./shopify-scripts/initialize.mjs";
|
|
34
|
+
import { getShopifyScriptTags, renderShopifyScriptTags } from "./shopify-scripts/index.mjs";
|
|
35
|
+
import { AvailableFilter, AvailableFilterValue, CollectionState, FilterPresentation, FilterType, createInitialCollectionState } from "./collection/state.mjs";
|
|
36
|
+
import { CollectionData, CollectionStore, CreateCollectionStoreOptions, createCollectionStore } from "./collection/collection.mjs";
|
|
37
|
+
import { CollectionReconciler, ReconcilerCallbacks, createCollectionReconciler } from "./collection/reconciler.mjs";
|
|
38
|
+
import { CollectionParams, filterEquals, getFilterRemovalUrl, getSortByValue, isFilterInputActive, normalizeCollectionSearch, parseCollectionParams, parseSortByValue, serializeCollectionParams } from "./collection/url.mjs";
|
|
39
|
+
import { ProductInput, ProductOptionInput, ProductOptionValueInput, ProductVariantFrom, ProductVariantInput, SelectedOption, VariantOptionState, VariantOptionValueState } from "./product/state.mjs";
|
|
40
|
+
import { CreateProductFormStoreOptions, ProductFormErrors, ProductFormOptions, ProductFormStore, ProductFormStoreState, ValidProductSelectionResult, VariantSelectionResult, canAddToCart, createProductFormStore, findCartLineByMerchandiseId, getSelectedVariant } from "./product/product-form.mjs";
|
|
41
|
+
import { getSelectedProductOptions } from "./product/options.mjs";
|
|
42
|
+
import { ProductSelectionLinkStyle, buildProductSelectionSearchParams } from "./product/url.mjs";
|
|
43
|
+
import { ProductAddToCartProps, ProductFormRegister, ProductMerchandiseIdProps, ProductOptionValueProps, ProductQuantityDefaultProps, ProductQuantityProps, createProductFormRegister } from "./product/form.mjs";
|
|
44
|
+
import { SHOP_PAY_BUTTON_TAG_NAME, ShopPayButtonOptions, createShopPayButton, defineShopPayButton, getShopPayButtonUrl, renderShopPayButton } from "./shop-pay/shop-pay.mjs";
|
|
45
|
+
import { PredictiveSearchFormAttributes, PredictiveSearchFormRegister, PredictiveSearchQueryInputAttributes, createPredictiveSearchFormRegister, getPredictiveSearchFormAttributes, readPredictiveSearchFormTerm } from "./predictive-search/form.mjs";
|
|
46
|
+
import { CreatePredictiveSearchQueriesOptions, PredictiveSearchFragments, makePredictiveSearchQueries } from "./predictive-search/queries.mjs";
|
|
47
|
+
import { PredictiveSearchData, QueryPredictiveSearchOptions, queryPredictiveSearch } from "./predictive-search/search.mjs";
|
|
48
|
+
import { CreatePredictiveSearchServerHandlersOptions, createPredictiveSearchServerHandlers } from "./predictive-search/server-handlers.mjs";
|
|
49
|
+
import { CreatePredictiveSearchStoreOptions, PredictiveSearchState, PredictiveSearchStatus, PredictiveSearchStore, createPredictiveSearchStore } from "./predictive-search/store.mjs";
|
|
50
|
+
import { PredictiveSearchArticleItem, PredictiveSearchCollectionItem, PredictiveSearchItem, PredictiveSearchItemUrlOptions, PredictiveSearchPageItem, PredictiveSearchProductItem, PredictiveSearchQueryItem, PredictiveSearchQueryItemUrlOptions, PredictiveSearchResourceItem, getPredictiveSearchItemUrl, getSearchResultUrl } from "./predictive-search/url.mjs";
|
|
51
|
+
import { FormatMoneyOptions, FormattedMoney, FormattedMoneyRange, MoneyV2 } from "./money/types.mjs";
|
|
52
|
+
import { formatMoney } from "./money/format.mjs";
|
|
53
|
+
import { flattenConnection } from "./analytics/utils/flatten-connection.mjs";
|
|
54
|
+
import { HydrogenLogger, LogContext, LogLevel } from "./logging/types.mjs";
|
|
55
|
+
import { ConfigureLoggingOptions, configureLogging } from "./logging/logging.mjs";
|
|
56
|
+
export { type AnalyticsCart, type AnalyticsCartLine, AnalyticsEvent, type AnalyticsEventMap, type AnalyticsEventName, type AnyStorefrontQueryString, type Attribute, type AvailableFilter, type AvailableFilterValue, Cache, type CacheInstance, type CacheOptions, type CachingStrategy, type CallableRouteHandler, type CartAction, type CartAttributeInput, type CartCost, type CartData, type CartDataFromHandlers, type CartDataFromQuery, type CartError, type CartErrorCode, type CartErrorGroup, type CartErrorState, type CartFormRegister, type CartGetData, type CartGetHandler, type CartGetResult, type CartLine, type CartLineAddInput, type CartLineConnection, type CartLineCost, type CartLineMerchandise, type CartLineUpdateInput, type CartLineUpdatePayload, type CartNetworkEntry, CartNetworkError, type CartPending, type CartPostHandler, type CartPostResult, type CartResult, type CartServerHandlers, type CartServerHandlersWithCustomerSession, type CartState, type CartStore, type CartUpdatePayload, type CartUserError, type CartViewPayload, type CartWarning, type ClientType, type CollectionData, type CollectionParams, type CollectionReconciler, type CollectionState, type CollectionStore, type CollectionViewPayload, type ConfigureLoggingOptions, type ConsentConfig, type CreateCartServerHandlersOptions, type CreateCartStoreOptions, type CreateCollectionStoreOptions, type CreatePredictiveSearchQueriesOptions, type CreatePredictiveSearchServerHandlersOptions, type CreatePredictiveSearchStoreOptions, type CreateProductFormStoreOptions, type CreateStorefrontClientArgs, DEFAULT_MINIMUM_QUANTITY, type DiscountCode, EMPTY_CART_DATA, EMPTY_CART_STATE, type EventPayloads, type FilterPresentation, type FilterType, type FormatMoneyOptions, type FormattedMoney, type FormattedMoneyRange, type GqlRestParam, type GraphQLFormattedError, type HydrogenLogger, type I18nConfig, type InferResult, type InferVariables, type LogContext, type LogLevel, type MoneyV2, NO_QUANTITY_LIMIT, type OtherData, type PageViewPayload, type PayloadFor, type PredictiveSearchArticleItem, type PredictiveSearchCollectionItem, type PredictiveSearchData, type PredictiveSearchFormAttributes, type PredictiveSearchFormRegister, type PredictiveSearchFragments, type PredictiveSearchItem, type PredictiveSearchItemUrlOptions, type PredictiveSearchPageItem, type PredictiveSearchProductItem, type PredictiveSearchQueryInputAttributes, type PredictiveSearchQueryItem, type PredictiveSearchQueryItemUrlOptions, type PredictiveSearchResourceItem, type PredictiveSearchState, type PredictiveSearchStatus, type PredictiveSearchStore, type PrivateClientOptions, type PrivateNoBuyerContextClientOptions, type PrivateNoBuyerContextStorefrontClient, type PrivateStorefrontClient, type ProductAddToCartProps, type ProductCollectionSortKeys, type ProductFilter, type ProductFormErrors, type ProductFormOptions, type ProductFormRegister, type ProductFormStore, type ProductFormStoreState, type ProductInput, type ProductMerchandiseIdProps, type ProductOptionInput, type ProductOptionValueInput, type ProductOptionValueProps, type ProductPayload, type ProductQuantityDefaultProps, type ProductQuantityProps, type ProductSelectionLinkStyle, type ProductVariantFrom, type ProductVariantInput, type ProductViewPayload, type PublicClientOptions, type PublicStorefrontClient, type QuantityInputAttributes, type QueryPredictiveSearchOptions, type ReconcilerCallbacks, type RedirectOptions, type RequestScopedPrivateStorefrontClient, SHOP_PAY_BUTTON_TAG_NAME, STANDARD_ACTION_TIMEOUT_IN_MS, type SearchViewPayload, type SelectedOption, type SetButtonAttributes, type ShopAnalytics, type ShopPayButtonOptions, type ShopifyGlobal, type ShopifyRedirectStatus, type ShopifyRequestContext, type ShopifyRequestContextWithBuyerIp, type ShopifyRouteError, type ShopifyRouteErrorResult, type ShopifyRouteHandler, type ShopifyRouteHandlerContext, type ShopifyRouteHandlerGroup, type ShopifyRouteHandlerResult, type ShopifyRouteJsonResult, type ShopifyRouteRedirectResult, type ShopifyRouteTemplates, type ShopifyRoutesOptions, type ShopifyScriptTagDescriptor, type ShopifyScriptTagDescriptors, type ShopifyScriptTagsOptions, type ShopifyScriptsAnalyticsConfig, type ShopifyScriptsI18n, type ShopifyScriptsOptions, type ShopifyScriptsShop, type StorefrontAnalytics, type StorefrontAnalyticsConfig, type StorefrontAnalyticsDestination, type StorefrontAnalyticsDestinationSetupContext, type StorefrontApi, StorefrontApiError, type StorefrontClient, type StorefrontClientOptions, type StorefrontGraphql, type StorefrontGraphqlOptions, type StorefrontGraphqlResult, type StorefrontQueryString, StorefrontTimeoutError, type ValidProductSelectionResult, type VariantOptionState, type VariantOptionValueState, type 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, 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 { handleShopifyRoutes } from "./request-routing/handle-shopify-routes.mjs";
|
|
16
|
+
import { createShopifyRequestContext } from "./request-context.mjs";
|
|
17
|
+
import { AnalyticsEvent } from "./analytics/events.mjs";
|
|
18
|
+
import { flattenConnection } from "./analytics/utils/flatten-connection.mjs";
|
|
19
|
+
import { trackCartAnalytics } from "./analytics/cart-tracker.mjs";
|
|
20
|
+
import { initializeShopifyScripts } from "./shopify-scripts/initialize.mjs";
|
|
21
|
+
import { getShopifyScriptTags, renderShopifyScriptTags } from "./shopify-scripts/index.mjs";
|
|
22
|
+
import { createCartFormRegister } from "./cart/form.mjs";
|
|
23
|
+
import { DEFAULT_MINIMUM_QUANTITY, NO_QUANTITY_LIMIT, sanitizeQuantity } from "./cart/quantity.mjs";
|
|
24
|
+
import { EMPTY_CART_DATA, EMPTY_CART_STATE, createEmptyCartErrors, createEmptyErrorGroup } from "./cart/state.mjs";
|
|
25
|
+
import { CartNetworkError, STANDARD_ACTION_TIMEOUT_IN_MS, configureCartEndpoint, createCartStore } from "./cart/cart.mjs";
|
|
26
|
+
import { attachQuantityInput } from "./cart/attach-quantity-input.mjs";
|
|
27
|
+
import { parseCartRequest } from "./cart/actions.mjs";
|
|
28
|
+
import { createCartServerHandlers } from "./cart/server-handlers.mjs";
|
|
29
|
+
import { createInitialCollectionState } from "./collection/state.mjs";
|
|
30
|
+
import { filterEquals, getFilterRemovalUrl, getSortByValue, isFilterInputActive, normalizeCollectionSearch, parseCollectionParams, parseSortByValue, serializeCollectionParams } from "./collection/url.mjs";
|
|
31
|
+
import { createCollectionStore } from "./collection/collection.mjs";
|
|
32
|
+
import { createCollectionReconciler } from "./collection/reconciler.mjs";
|
|
33
|
+
import { getSelectedProductOptions } from "./product/options.mjs";
|
|
34
|
+
import { canAddToCart, createProductFormStore, findCartLineByMerchandiseId, getSelectedVariant } from "./product/product-form.mjs";
|
|
35
|
+
import { createProductFormRegister } from "./product/form.mjs";
|
|
36
|
+
import { SHOP_PAY_BUTTON_TAG_NAME, createShopPayButton, defineShopPayButton, getShopPayButtonUrl, renderShopPayButton } from "./shop-pay/shop-pay.mjs";
|
|
37
|
+
import { createPredictiveSearchFormRegister, getPredictiveSearchFormAttributes, readPredictiveSearchFormTerm } from "./predictive-search/form.mjs";
|
|
38
|
+
import { makePredictiveSearchQueries } from "./predictive-search/queries.mjs";
|
|
39
|
+
import { queryPredictiveSearch } from "./predictive-search/search.mjs";
|
|
40
|
+
import { createPredictiveSearchServerHandlers } from "./predictive-search/server-handlers.mjs";
|
|
41
|
+
import { createPredictiveSearchStore } from "./predictive-search/store.mjs";
|
|
42
|
+
import { getPredictiveSearchItemUrl, getSearchResultUrl } from "./predictive-search/url.mjs";
|
|
43
|
+
import { formatMoney } from "./money/format.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, handleShopifyRoutes, initializeShopifyScripts, isFilterInputActive, makePredictiveSearchQueries, normalizeCollectionSearch, parseCartRequest, parseCollectionParams, parseSortByValue, queryPredictiveSearch, readPredictiveSearchFormTerm, renderShopPayButton, renderShopifyScriptTags, sanitizeQuantity, serializeCollectionParams, trackCartAnalytics };
|
|
@@ -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, consoleLogger, 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
|