@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,243 @@
|
|
|
1
|
+
import { getFormatter } from "./cache.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/core/money/format.ts
|
|
4
|
+
/**
|
|
5
|
+
* Intl.NumberFormat part types that make up the raw numeric amount.
|
|
6
|
+
* Used to extract "19.99" from a formatted string like "$19.99" by
|
|
7
|
+
* filtering out currency symbols, sign, and other non-numeric parts.
|
|
8
|
+
*/
|
|
9
|
+
const NUMERIC_PART_TYPES = new Set([
|
|
10
|
+
"decimal",
|
|
11
|
+
"fraction",
|
|
12
|
+
"group",
|
|
13
|
+
"integer",
|
|
14
|
+
"literal"
|
|
15
|
+
]);
|
|
16
|
+
const WELL_FORMED_CURRENCY_CODE = /^[a-z]{3}$/i;
|
|
17
|
+
function parseAmount(money) {
|
|
18
|
+
const parsed = parseFloat(money.amount);
|
|
19
|
+
if (Number.isNaN(parsed)) throw new Error(`formatMoney: "${money.amount}" is not a valid numeric amount for currency ${money.currencyCode}`);
|
|
20
|
+
return parsed;
|
|
21
|
+
}
|
|
22
|
+
function normalizeCurrencyCode(currencyCode) {
|
|
23
|
+
return currencyCode.toUpperCase();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Intl accepts well-formed three-letter currency codes. Non-standard but
|
|
27
|
+
* well-formed codes render as codes; malformed codes such as USDC throw.
|
|
28
|
+
*/
|
|
29
|
+
function isWellFormedCurrencyCode(currencyCode) {
|
|
30
|
+
return WELL_FORMED_CURRENCY_CODE.test(currencyCode);
|
|
31
|
+
}
|
|
32
|
+
function hasTrailingZeros(amount) {
|
|
33
|
+
return amount % 1 === 0;
|
|
34
|
+
}
|
|
35
|
+
function shouldStripTrailingZeros(amount, options) {
|
|
36
|
+
return options.withoutTrailingZeros === true && hasTrailingZeros(amount);
|
|
37
|
+
}
|
|
38
|
+
function hasExplicitFractionDigits(options) {
|
|
39
|
+
return options.minimumFractionDigits != null || options.maximumFractionDigits != null;
|
|
40
|
+
}
|
|
41
|
+
function decimalFractionOptions(options) {
|
|
42
|
+
return {
|
|
43
|
+
minimumFractionDigits: options.minimumFractionDigits ?? 2,
|
|
44
|
+
maximumFractionDigits: options.maximumFractionDigits ?? 2
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function buildFormatOptions(currencyCode, supported, options, amount) {
|
|
48
|
+
const withoutCurrency = options.withoutCurrency === true || !supported;
|
|
49
|
+
const trailingZeros = shouldStripTrailingZeros(amount, options);
|
|
50
|
+
if (withoutCurrency) return trailingZeros ? {
|
|
51
|
+
minimumFractionDigits: 0,
|
|
52
|
+
maximumFractionDigits: 0
|
|
53
|
+
} : decimalFractionOptions(options);
|
|
54
|
+
return {
|
|
55
|
+
style: "currency",
|
|
56
|
+
currency: currencyCode,
|
|
57
|
+
...options.currencyDisplay && { currencyDisplay: options.currencyDisplay },
|
|
58
|
+
...trailingZeros && {
|
|
59
|
+
minimumFractionDigits: 0,
|
|
60
|
+
maximumFractionDigits: 0
|
|
61
|
+
},
|
|
62
|
+
...!trailingZeros && options.minimumFractionDigits != null && { minimumFractionDigits: options.minimumFractionDigits },
|
|
63
|
+
...!trailingZeros && options.maximumFractionDigits != null && { maximumFractionDigits: options.maximumFractionDigits }
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function appendUnsupportedCurrencyCode(formatted, currencyCode) {
|
|
67
|
+
return `${formatted} ${currencyCode}`;
|
|
68
|
+
}
|
|
69
|
+
function extractNumericAmount(parts) {
|
|
70
|
+
return parts.filter((part) => NUMERIC_PART_TYPES.has(part.type)).map((part) => part.value).join("");
|
|
71
|
+
}
|
|
72
|
+
function findCurrencyPart(parts) {
|
|
73
|
+
return parts.find((part) => part.type === "currency")?.value ?? "";
|
|
74
|
+
}
|
|
75
|
+
function formatRange(formatter, min, max) {
|
|
76
|
+
const rangeFormatter = formatter;
|
|
77
|
+
return rangeFormatter.formatRange ? rangeFormatter.formatRange(min, max) : `${formatter.format(min)} - ${formatter.format(max)}`;
|
|
78
|
+
}
|
|
79
|
+
function isMoneyRange(money) {
|
|
80
|
+
return Array.isArray(money);
|
|
81
|
+
}
|
|
82
|
+
function buildRangeOptions(currencyCode, supported, options, amounts) {
|
|
83
|
+
const wholeRange = amounts.every(hasTrailingZeros);
|
|
84
|
+
return buildFormatOptions(currencyCode, supported, {
|
|
85
|
+
...options,
|
|
86
|
+
withoutTrailingZeros: options.withoutTrailingZeros ?? (wholeRange && !hasExplicitFractionDigits(options))
|
|
87
|
+
}, amounts[0] ?? 0);
|
|
88
|
+
}
|
|
89
|
+
function sortMoneyRangeEntries(entries) {
|
|
90
|
+
const sorted = [];
|
|
91
|
+
for (const entry of entries) {
|
|
92
|
+
const index = sorted.findIndex((candidate) => entry.amount < candidate.amount);
|
|
93
|
+
if (index === -1) sorted.push(entry);
|
|
94
|
+
else sorted.splice(index, 0, entry);
|
|
95
|
+
}
|
|
96
|
+
return sorted;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* All structured fields are computed lazily on first access and cached.
|
|
100
|
+
* localizedString is the exception — it's computed eagerly in the constructor
|
|
101
|
+
* so that the common `${price}` path never touches the getter machinery.
|
|
102
|
+
*/
|
|
103
|
+
var FormattedMoneyValue = class {
|
|
104
|
+
#amount;
|
|
105
|
+
#options;
|
|
106
|
+
#currencyCode;
|
|
107
|
+
#supported;
|
|
108
|
+
localizedString;
|
|
109
|
+
#defaultFormatter;
|
|
110
|
+
#formatterParts;
|
|
111
|
+
#parts;
|
|
112
|
+
#amountString;
|
|
113
|
+
#currencySymbol;
|
|
114
|
+
#currencyNarrowSymbol;
|
|
115
|
+
#currencyName;
|
|
116
|
+
#withoutTrailingZeros;
|
|
117
|
+
#withoutTrailingZerosAndCurrency;
|
|
118
|
+
constructor(money, options) {
|
|
119
|
+
this.#amount = parseAmount(money);
|
|
120
|
+
this.#options = options;
|
|
121
|
+
this.#currencyCode = normalizeCurrencyCode(money.currencyCode);
|
|
122
|
+
this.#supported = isWellFormedCurrencyCode(money.currencyCode);
|
|
123
|
+
this.#defaultFormatter = getFormatter(options.locale, buildFormatOptions(this.#currencyCode, this.#supported, options, this.#amount));
|
|
124
|
+
const formatted = this.#defaultFormatter.format(this.#amount);
|
|
125
|
+
this.localizedString = this.#supported || options.withoutCurrency === true ? formatted : appendUnsupportedCurrencyCode(formatted, this.#currencyCode);
|
|
126
|
+
}
|
|
127
|
+
get amount() {
|
|
128
|
+
this.#amountString ??= extractNumericAmount(this.formatterParts);
|
|
129
|
+
return this.#amountString;
|
|
130
|
+
}
|
|
131
|
+
get numericAmount() {
|
|
132
|
+
return this.#amount;
|
|
133
|
+
}
|
|
134
|
+
get currencySymbol() {
|
|
135
|
+
this.#currencySymbol ??= this.#supported ? findCurrencyPart(this.parts) : this.#currencyCode;
|
|
136
|
+
return this.#currencySymbol;
|
|
137
|
+
}
|
|
138
|
+
get currencyNarrowSymbol() {
|
|
139
|
+
this.#currencyNarrowSymbol ??= this.#supported ? findCurrencyPart(getFormatter(this.#options.locale, {
|
|
140
|
+
style: "currency",
|
|
141
|
+
currency: this.#currencyCode,
|
|
142
|
+
currencyDisplay: "narrowSymbol",
|
|
143
|
+
...this.#options.minimumFractionDigits != null && { minimumFractionDigits: this.#options.minimumFractionDigits },
|
|
144
|
+
...this.#options.maximumFractionDigits != null && { maximumFractionDigits: this.#options.maximumFractionDigits }
|
|
145
|
+
}).formatToParts(this.#amount)) : this.#currencyCode;
|
|
146
|
+
return this.#currencyNarrowSymbol;
|
|
147
|
+
}
|
|
148
|
+
get currencyName() {
|
|
149
|
+
this.#currencyName ??= this.#supported ? findCurrencyPart(getFormatter(this.#options.locale, {
|
|
150
|
+
style: "currency",
|
|
151
|
+
currency: this.#currencyCode,
|
|
152
|
+
currencyDisplay: "name",
|
|
153
|
+
...this.#options.minimumFractionDigits != null && { minimumFractionDigits: this.#options.minimumFractionDigits },
|
|
154
|
+
...this.#options.maximumFractionDigits != null && { maximumFractionDigits: this.#options.maximumFractionDigits }
|
|
155
|
+
}).formatToParts(this.#amount)) || this.#currencyCode : this.#currencyCode;
|
|
156
|
+
return this.#currencyName;
|
|
157
|
+
}
|
|
158
|
+
get parts() {
|
|
159
|
+
if (!this.#parts) this.#parts = this.#supported || this.#options.withoutCurrency === true ? this.formatterParts : [
|
|
160
|
+
...this.formatterParts,
|
|
161
|
+
{
|
|
162
|
+
type: "literal",
|
|
163
|
+
value: " "
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
type: "currency",
|
|
167
|
+
value: this.#currencyCode
|
|
168
|
+
}
|
|
169
|
+
];
|
|
170
|
+
return this.#parts;
|
|
171
|
+
}
|
|
172
|
+
get withoutTrailingZeros() {
|
|
173
|
+
if (!this.#withoutTrailingZeros) {
|
|
174
|
+
const options = {
|
|
175
|
+
...this.#options,
|
|
176
|
+
withoutTrailingZeros: true
|
|
177
|
+
};
|
|
178
|
+
const formatted = getFormatter(options.locale, buildFormatOptions(this.#currencyCode, this.#supported, options, this.#amount)).format(this.#amount);
|
|
179
|
+
this.#withoutTrailingZeros = this.#supported || this.#options.withoutCurrency === true ? formatted : appendUnsupportedCurrencyCode(formatted, this.#currencyCode);
|
|
180
|
+
}
|
|
181
|
+
return this.#withoutTrailingZeros;
|
|
182
|
+
}
|
|
183
|
+
get withoutTrailingZerosAndCurrency() {
|
|
184
|
+
if (!this.#withoutTrailingZerosAndCurrency) {
|
|
185
|
+
const options = {
|
|
186
|
+
...this.#options,
|
|
187
|
+
withoutCurrency: true,
|
|
188
|
+
withoutTrailingZeros: true
|
|
189
|
+
};
|
|
190
|
+
this.#withoutTrailingZerosAndCurrency = getFormatter(options.locale, buildFormatOptions(this.#currencyCode, this.#supported, options, this.#amount)).format(this.#amount);
|
|
191
|
+
}
|
|
192
|
+
return this.#withoutTrailingZerosAndCurrency;
|
|
193
|
+
}
|
|
194
|
+
get formatterParts() {
|
|
195
|
+
this.#formatterParts ??= this.#defaultFormatter.formatToParts(this.#amount);
|
|
196
|
+
return this.#formatterParts;
|
|
197
|
+
}
|
|
198
|
+
toString() {
|
|
199
|
+
return this.localizedString;
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
var FormattedMoneyRangeValue = class {
|
|
203
|
+
localizedString;
|
|
204
|
+
min;
|
|
205
|
+
max;
|
|
206
|
+
currencyCode;
|
|
207
|
+
constructor(range, options) {
|
|
208
|
+
if (range.length === 0) throw new Error("formatMoney: money range must contain at least one value");
|
|
209
|
+
const entries = sortMoneyRangeEntries(range.map((money) => ({
|
|
210
|
+
money,
|
|
211
|
+
amount: parseAmount(money),
|
|
212
|
+
currencyCode: normalizeCurrencyCode(money.currencyCode)
|
|
213
|
+
})));
|
|
214
|
+
const [first] = entries;
|
|
215
|
+
if (!first) throw new Error("formatMoney: money range must contain at least one value");
|
|
216
|
+
const mismatched = entries.find((entry) => entry.currencyCode !== first.currencyCode);
|
|
217
|
+
if (mismatched) throw new Error(`formatMoney: range values must share one currency, received ${first.currencyCode} and ${mismatched.currencyCode}`);
|
|
218
|
+
const last = entries[entries.length - 1] ?? first;
|
|
219
|
+
this.min = first.money;
|
|
220
|
+
this.max = last.money;
|
|
221
|
+
this.currencyCode = first.currencyCode;
|
|
222
|
+
if (first.amount === last.amount) {
|
|
223
|
+
this.localizedString = new FormattedMoneyValue(first.money, {
|
|
224
|
+
...options,
|
|
225
|
+
withoutTrailingZeros: options.withoutTrailingZeros ?? !hasExplicitFractionDigits(options)
|
|
226
|
+
}).localizedString;
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const supported = isWellFormedCurrencyCode(first.currencyCode);
|
|
230
|
+
const formatted = formatRange(getFormatter(options.locale, buildRangeOptions(first.currencyCode, supported, options, entries.map((entry) => entry.amount))), first.amount, last.amount);
|
|
231
|
+
this.localizedString = supported || options.withoutCurrency === true ? formatted : appendUnsupportedCurrencyCode(formatted, first.currencyCode);
|
|
232
|
+
}
|
|
233
|
+
toString() {
|
|
234
|
+
return this.localizedString;
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
function formatMoney(money, options) {
|
|
238
|
+
return isMoneyRange(money) ? new FormattedMoneyRangeValue(money, options) : new FormattedMoneyValue(money, options);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
//#endregion
|
|
242
|
+
export { formatMoney };
|
|
243
|
+
//# sourceMappingURL=format.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.mjs","names":["#amount","#options","#currencyCode","#supported","#defaultFormatter","#amountString","#currencySymbol","#currencyNarrowSymbol","#currencyName","#parts","#withoutTrailingZeros","#withoutTrailingZerosAndCurrency","#formatterParts"],"sources":["../../../../src/core/money/format.ts"],"sourcesContent":["import { getFormatter } from \"./cache\";\nimport type { FormatMoneyOptions, FormattedMoney, FormattedMoneyRange, MoneyV2 } from \"./types\";\n\n/**\n * Intl.NumberFormat part types that make up the raw numeric amount.\n * Used to extract \"19.99\" from a formatted string like \"$19.99\" by\n * filtering out currency symbols, sign, and other non-numeric parts.\n */\nconst NUMERIC_PART_TYPES = new Set([\"decimal\", \"fraction\", \"group\", \"integer\", \"literal\"]);\nconst WELL_FORMED_CURRENCY_CODE = /^[a-z]{3}$/i;\n\ntype RangeFormatter = Intl.NumberFormat & {\n formatRange?: (start: number, end: number) => string;\n};\n\ntype MoneyRangeEntry = {\n money: MoneyV2;\n amount: number;\n currencyCode: string;\n};\n\nfunction parseAmount(money: MoneyV2): number {\n const parsed = parseFloat(money.amount);\n if (Number.isNaN(parsed)) {\n throw new Error(\n `formatMoney: \"${money.amount}\" is not a valid numeric amount for currency ${money.currencyCode}`,\n );\n }\n return parsed;\n}\n\nfunction normalizeCurrencyCode(currencyCode: string): string {\n return currencyCode.toUpperCase();\n}\n\n/**\n * Intl accepts well-formed three-letter currency codes. Non-standard but\n * well-formed codes render as codes; malformed codes such as USDC throw.\n */\nfunction isWellFormedCurrencyCode(currencyCode: string): boolean {\n return WELL_FORMED_CURRENCY_CODE.test(currencyCode);\n}\n\nfunction hasTrailingZeros(amount: number): boolean {\n return amount % 1 === 0;\n}\n\nfunction shouldStripTrailingZeros(amount: number, options: FormatMoneyOptions): boolean {\n return options.withoutTrailingZeros === true && hasTrailingZeros(amount);\n}\n\nfunction hasExplicitFractionDigits(options: FormatMoneyOptions): boolean {\n return options.minimumFractionDigits != null || options.maximumFractionDigits != null;\n}\n\nfunction decimalFractionOptions(options: FormatMoneyOptions): Intl.NumberFormatOptions {\n return {\n minimumFractionDigits: options.minimumFractionDigits ?? 2,\n maximumFractionDigits: options.maximumFractionDigits ?? 2,\n };\n}\n\nfunction buildFormatOptions(\n currencyCode: string,\n supported: boolean,\n options: FormatMoneyOptions,\n amount: number,\n): Intl.NumberFormatOptions {\n const withoutCurrency = options.withoutCurrency === true || !supported;\n const trailingZeros = shouldStripTrailingZeros(amount, options);\n\n if (withoutCurrency) {\n return trailingZeros\n ? { minimumFractionDigits: 0, maximumFractionDigits: 0 }\n : decimalFractionOptions(options);\n }\n\n return {\n style: \"currency\",\n currency: currencyCode,\n ...(options.currencyDisplay && { currencyDisplay: options.currencyDisplay }),\n ...(trailingZeros && {\n minimumFractionDigits: 0,\n maximumFractionDigits: 0,\n }),\n ...(!trailingZeros &&\n options.minimumFractionDigits != null && {\n minimumFractionDigits: options.minimumFractionDigits,\n }),\n ...(!trailingZeros &&\n options.maximumFractionDigits != null && {\n maximumFractionDigits: options.maximumFractionDigits,\n }),\n };\n}\n\nfunction appendUnsupportedCurrencyCode(formatted: string, currencyCode: string): string {\n return `${formatted} ${currencyCode}`;\n}\n\nfunction extractNumericAmount(parts: Intl.NumberFormatPart[]): string {\n return parts\n .filter((part) => NUMERIC_PART_TYPES.has(part.type))\n .map((part) => part.value)\n .join(\"\");\n}\n\nfunction findCurrencyPart(parts: Intl.NumberFormatPart[]): string {\n return parts.find((part) => part.type === \"currency\")?.value ?? \"\";\n}\n\nfunction formatRange(formatter: Intl.NumberFormat, min: number, max: number): string {\n const rangeFormatter = formatter as RangeFormatter;\n return rangeFormatter.formatRange\n ? rangeFormatter.formatRange(min, max)\n : `${formatter.format(min)} - ${formatter.format(max)}`;\n}\n\nfunction isMoneyRange(money: MoneyV2 | readonly MoneyV2[]): money is readonly MoneyV2[] {\n return Array.isArray(money);\n}\n\nfunction buildRangeOptions(\n currencyCode: string,\n supported: boolean,\n options: FormatMoneyOptions,\n amounts: number[],\n): Intl.NumberFormatOptions {\n const wholeRange = amounts.every(hasTrailingZeros);\n const rangeOptions = {\n ...options,\n withoutTrailingZeros:\n options.withoutTrailingZeros ?? (wholeRange && !hasExplicitFractionDigits(options)),\n };\n\n return buildFormatOptions(currencyCode, supported, rangeOptions, amounts[0] ?? 0);\n}\n\nfunction sortMoneyRangeEntries(entries: MoneyRangeEntry[]): MoneyRangeEntry[] {\n const sorted: MoneyRangeEntry[] = [];\n\n for (const entry of entries) {\n const index = sorted.findIndex((candidate) => entry.amount < candidate.amount);\n if (index === -1) {\n sorted.push(entry);\n } else {\n sorted.splice(index, 0, entry);\n }\n }\n\n return sorted;\n}\n\n/**\n * All structured fields are computed lazily on first access and cached.\n * localizedString is the exception — it's computed eagerly in the constructor\n * so that the common `${price}` path never touches the getter machinery.\n */\nclass FormattedMoneyValue implements FormattedMoney {\n readonly #amount: number;\n readonly #options: FormatMoneyOptions;\n readonly #currencyCode: string;\n readonly #supported: boolean;\n readonly localizedString: string;\n\n readonly #defaultFormatter: Intl.NumberFormat;\n #formatterParts?: Intl.NumberFormatPart[];\n #parts?: Intl.NumberFormatPart[];\n #amountString?: string;\n #currencySymbol?: string;\n #currencyNarrowSymbol?: string;\n #currencyName?: string;\n #withoutTrailingZeros?: string;\n #withoutTrailingZerosAndCurrency?: string;\n\n constructor(money: MoneyV2, options: FormatMoneyOptions) {\n this.#amount = parseAmount(money);\n this.#options = options;\n this.#currencyCode = normalizeCurrencyCode(money.currencyCode);\n this.#supported = isWellFormedCurrencyCode(money.currencyCode);\n this.#defaultFormatter = getFormatter(\n options.locale,\n buildFormatOptions(this.#currencyCode, this.#supported, options, this.#amount),\n );\n\n const formatted = this.#defaultFormatter.format(this.#amount);\n this.localizedString =\n this.#supported || options.withoutCurrency === true\n ? formatted\n : appendUnsupportedCurrencyCode(formatted, this.#currencyCode);\n }\n\n get amount(): string {\n this.#amountString ??= extractNumericAmount(this.formatterParts);\n return this.#amountString;\n }\n\n get numericAmount(): number {\n return this.#amount;\n }\n\n get currencySymbol(): string {\n this.#currencySymbol ??= this.#supported ? findCurrencyPart(this.parts) : this.#currencyCode;\n return this.#currencySymbol;\n }\n\n get currencyNarrowSymbol(): string {\n this.#currencyNarrowSymbol ??= this.#supported\n ? findCurrencyPart(\n getFormatter(this.#options.locale, {\n style: \"currency\",\n currency: this.#currencyCode,\n currencyDisplay: \"narrowSymbol\",\n ...(this.#options.minimumFractionDigits != null && {\n minimumFractionDigits: this.#options.minimumFractionDigits,\n }),\n ...(this.#options.maximumFractionDigits != null && {\n maximumFractionDigits: this.#options.maximumFractionDigits,\n }),\n }).formatToParts(this.#amount),\n )\n : this.#currencyCode;\n return this.#currencyNarrowSymbol;\n }\n\n get currencyName(): string {\n this.#currencyName ??= this.#supported\n ? findCurrencyPart(\n getFormatter(this.#options.locale, {\n style: \"currency\",\n currency: this.#currencyCode,\n currencyDisplay: \"name\",\n ...(this.#options.minimumFractionDigits != null && {\n minimumFractionDigits: this.#options.minimumFractionDigits,\n }),\n ...(this.#options.maximumFractionDigits != null && {\n maximumFractionDigits: this.#options.maximumFractionDigits,\n }),\n }).formatToParts(this.#amount),\n ) || this.#currencyCode\n : this.#currencyCode;\n return this.#currencyName;\n }\n\n get parts(): Intl.NumberFormatPart[] {\n if (!this.#parts) {\n this.#parts =\n this.#supported || this.#options.withoutCurrency === true\n ? this.formatterParts\n : [\n ...this.formatterParts,\n { type: \"literal\" as const, value: \" \" },\n { type: \"currency\" as const, value: this.#currencyCode },\n ];\n }\n\n return this.#parts;\n }\n\n get withoutTrailingZeros(): string {\n if (!this.#withoutTrailingZeros) {\n const options = { ...this.#options, withoutTrailingZeros: true };\n const formatter = getFormatter(\n options.locale,\n buildFormatOptions(this.#currencyCode, this.#supported, options, this.#amount),\n );\n const formatted = formatter.format(this.#amount);\n this.#withoutTrailingZeros =\n this.#supported || this.#options.withoutCurrency === true\n ? formatted\n : appendUnsupportedCurrencyCode(formatted, this.#currencyCode);\n }\n\n return this.#withoutTrailingZeros;\n }\n\n get withoutTrailingZerosAndCurrency(): string {\n if (!this.#withoutTrailingZerosAndCurrency) {\n const options = { ...this.#options, withoutCurrency: true, withoutTrailingZeros: true };\n this.#withoutTrailingZerosAndCurrency = getFormatter(\n options.locale,\n buildFormatOptions(this.#currencyCode, this.#supported, options, this.#amount),\n ).format(this.#amount);\n }\n\n return this.#withoutTrailingZerosAndCurrency;\n }\n\n private get formatterParts(): Intl.NumberFormatPart[] {\n this.#formatterParts ??= this.#defaultFormatter.formatToParts(this.#amount);\n return this.#formatterParts;\n }\n\n toString(): string {\n return this.localizedString;\n }\n}\n\nclass FormattedMoneyRangeValue implements FormattedMoneyRange {\n readonly localizedString: string;\n readonly min: MoneyV2;\n readonly max: MoneyV2;\n readonly currencyCode: string;\n\n constructor(range: readonly MoneyV2[], options: FormatMoneyOptions) {\n if (range.length === 0) {\n throw new Error(\"formatMoney: money range must contain at least one value\");\n }\n\n const entries = sortMoneyRangeEntries(\n range.map((money) => ({\n money,\n amount: parseAmount(money),\n currencyCode: normalizeCurrencyCode(money.currencyCode),\n })),\n );\n\n const [first] = entries;\n if (!first) {\n throw new Error(\"formatMoney: money range must contain at least one value\");\n }\n\n const mismatched = entries.find((entry) => entry.currencyCode !== first.currencyCode);\n if (mismatched) {\n throw new Error(\n `formatMoney: range values must share one currency, received ${first.currencyCode} and ${mismatched.currencyCode}`,\n );\n }\n\n const last = entries[entries.length - 1] ?? first;\n this.min = first.money;\n this.max = last.money;\n this.currencyCode = first.currencyCode;\n\n if (first.amount === last.amount) {\n this.localizedString = new FormattedMoneyValue(first.money, {\n ...options,\n withoutTrailingZeros: options.withoutTrailingZeros ?? !hasExplicitFractionDigits(options),\n }).localizedString;\n return;\n }\n\n const supported = isWellFormedCurrencyCode(first.currencyCode);\n const formatter = getFormatter(\n options.locale,\n buildRangeOptions(\n first.currencyCode,\n supported,\n options,\n entries.map((entry) => entry.amount),\n ),\n );\n\n const formatted = formatRange(formatter, first.amount, last.amount);\n this.localizedString =\n supported || options.withoutCurrency === true\n ? formatted\n : appendUnsupportedCurrencyCode(formatted, first.currencyCode);\n }\n\n toString(): string {\n return this.localizedString;\n }\n}\n\n/**\n * Format a MoneyV2 value or a same-currency range of MoneyV2 values for display.\n *\n * Returns an object that stringifies to the locale-formatted price via\n * toString(). Structured fields on single prices are computed lazily when\n * accessed, so the common string path stays cheap.\n */\nexport function formatMoney(money: MoneyV2, options: FormatMoneyOptions): FormattedMoney;\nexport function formatMoney(\n money: readonly MoneyV2[],\n options: FormatMoneyOptions,\n): FormattedMoneyRange;\n\n// This is the implementation of the formatMoney function overloading the other two.\n// It checks if the input is a range and creates the appropriate object.\nexport function formatMoney(\n money: MoneyV2 | readonly MoneyV2[],\n options: FormatMoneyOptions,\n): FormattedMoney | FormattedMoneyRange {\n return isMoneyRange(money)\n ? new FormattedMoneyRangeValue(money, options)\n : new FormattedMoneyValue(money, options);\n}\n"],"mappings":";;;;;;;;AAQA,MAAM,qBAAqB,IAAI,IAAI;CAAC;CAAW;CAAY;CAAS;CAAW;CAAU,CAAC;AAC1F,MAAM,4BAA4B;AAYlC,SAAS,YAAY,OAAwB;CAC3C,MAAM,SAAS,WAAW,MAAM,OAAO;AACvC,KAAI,OAAO,MAAM,OAAO,CACtB,OAAM,IAAI,MACR,iBAAiB,MAAM,OAAO,+CAA+C,MAAM,eACpF;AAEH,QAAO;;AAGT,SAAS,sBAAsB,cAA8B;AAC3D,QAAO,aAAa,aAAa;;;;;;AAOnC,SAAS,yBAAyB,cAA+B;AAC/D,QAAO,0BAA0B,KAAK,aAAa;;AAGrD,SAAS,iBAAiB,QAAyB;AACjD,QAAO,SAAS,MAAM;;AAGxB,SAAS,yBAAyB,QAAgB,SAAsC;AACtF,QAAO,QAAQ,yBAAyB,QAAQ,iBAAiB,OAAO;;AAG1E,SAAS,0BAA0B,SAAsC;AACvE,QAAO,QAAQ,yBAAyB,QAAQ,QAAQ,yBAAyB;;AAGnF,SAAS,uBAAuB,SAAuD;AACrF,QAAO;EACL,uBAAuB,QAAQ,yBAAyB;EACxD,uBAAuB,QAAQ,yBAAyB;EACzD;;AAGH,SAAS,mBACP,cACA,WACA,SACA,QAC0B;CAC1B,MAAM,kBAAkB,QAAQ,oBAAoB,QAAQ,CAAC;CAC7D,MAAM,gBAAgB,yBAAyB,QAAQ,QAAQ;AAE/D,KAAI,gBACF,QAAO,gBACH;EAAE,uBAAuB;EAAG,uBAAuB;EAAG,GACtD,uBAAuB,QAAQ;AAGrC,QAAO;EACL,OAAO;EACP,UAAU;EACV,GAAI,QAAQ,mBAAmB,EAAE,iBAAiB,QAAQ,iBAAiB;EAC3E,GAAI,iBAAiB;GACnB,uBAAuB;GACvB,uBAAuB;GACxB;EACD,GAAI,CAAC,iBACH,QAAQ,yBAAyB,QAAQ,EACvC,uBAAuB,QAAQ,uBAChC;EACH,GAAI,CAAC,iBACH,QAAQ,yBAAyB,QAAQ,EACvC,uBAAuB,QAAQ,uBAChC;EACJ;;AAGH,SAAS,8BAA8B,WAAmB,cAA8B;AACtF,QAAO,GAAG,UAAU,GAAG;;AAGzB,SAAS,qBAAqB,OAAwC;AACpE,QAAO,MACJ,QAAQ,SAAS,mBAAmB,IAAI,KAAK,KAAK,CAAC,CACnD,KAAK,SAAS,KAAK,MAAM,CACzB,KAAK,GAAG;;AAGb,SAAS,iBAAiB,OAAwC;AAChE,QAAO,MAAM,MAAM,SAAS,KAAK,SAAS,WAAW,EAAE,SAAS;;AAGlE,SAAS,YAAY,WAA8B,KAAa,KAAqB;CACnF,MAAM,iBAAiB;AACvB,QAAO,eAAe,cAClB,eAAe,YAAY,KAAK,IAAI,GACpC,GAAG,UAAU,OAAO,IAAI,CAAC,KAAK,UAAU,OAAO,IAAI;;AAGzD,SAAS,aAAa,OAAkE;AACtF,QAAO,MAAM,QAAQ,MAAM;;AAG7B,SAAS,kBACP,cACA,WACA,SACA,SAC0B;CAC1B,MAAM,aAAa,QAAQ,MAAM,iBAAiB;AAOlD,QAAO,mBAAmB,cAAc,WAAW;EALjD,GAAG;EACH,sBACE,QAAQ,yBAAyB,cAAc,CAAC,0BAA0B,QAAQ;EAGvB,EAAE,QAAQ,MAAM,EAAE;;AAGnF,SAAS,sBAAsB,SAA+C;CAC5E,MAAM,SAA4B,EAAE;AAEpC,MAAK,MAAM,SAAS,SAAS;EAC3B,MAAM,QAAQ,OAAO,WAAW,cAAc,MAAM,SAAS,UAAU,OAAO;AAC9E,MAAI,UAAU,GACZ,QAAO,KAAK,MAAM;MAElB,QAAO,OAAO,OAAO,GAAG,MAAM;;AAIlC,QAAO;;;;;;;AAQT,IAAM,sBAAN,MAAoD;CAClD,CAASA;CACT,CAASC;CACT,CAASC;CACT,CAASC;CACT,AAAS;CAET,CAASC;CACT;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YAAY,OAAgB,SAA6B;AACvD,QAAKJ,SAAU,YAAY,MAAM;AACjC,QAAKC,UAAW;AAChB,QAAKC,eAAgB,sBAAsB,MAAM,aAAa;AAC9D,QAAKC,YAAa,yBAAyB,MAAM,aAAa;AAC9D,QAAKC,mBAAoB,aACvB,QAAQ,QACR,mBAAmB,MAAKF,cAAe,MAAKC,WAAY,SAAS,MAAKH,OAAQ,CAC/E;EAED,MAAM,YAAY,MAAKI,iBAAkB,OAAO,MAAKJ,OAAQ;AAC7D,OAAK,kBACH,MAAKG,aAAc,QAAQ,oBAAoB,OAC3C,YACA,8BAA8B,WAAW,MAAKD,aAAc;;CAGpE,IAAI,SAAiB;AACnB,QAAKG,iBAAkB,qBAAqB,KAAK,eAAe;AAChE,SAAO,MAAKA;;CAGd,IAAI,gBAAwB;AAC1B,SAAO,MAAKL;;CAGd,IAAI,iBAAyB;AAC3B,QAAKM,mBAAoB,MAAKH,YAAa,iBAAiB,KAAK,MAAM,GAAG,MAAKD;AAC/E,SAAO,MAAKI;;CAGd,IAAI,uBAA+B;AACjC,QAAKC,yBAA0B,MAAKJ,YAChC,iBACE,aAAa,MAAKF,QAAS,QAAQ;GACjC,OAAO;GACP,UAAU,MAAKC;GACf,iBAAiB;GACjB,GAAI,MAAKD,QAAS,yBAAyB,QAAQ,EACjD,uBAAuB,MAAKA,QAAS,uBACtC;GACD,GAAI,MAAKA,QAAS,yBAAyB,QAAQ,EACjD,uBAAuB,MAAKA,QAAS,uBACtC;GACF,CAAC,CAAC,cAAc,MAAKD,OAAQ,CAC/B,GACD,MAAKE;AACT,SAAO,MAAKK;;CAGd,IAAI,eAAuB;AACzB,QAAKC,iBAAkB,MAAKL,YACxB,iBACE,aAAa,MAAKF,QAAS,QAAQ;GACjC,OAAO;GACP,UAAU,MAAKC;GACf,iBAAiB;GACjB,GAAI,MAAKD,QAAS,yBAAyB,QAAQ,EACjD,uBAAuB,MAAKA,QAAS,uBACtC;GACD,GAAI,MAAKA,QAAS,yBAAyB,QAAQ,EACjD,uBAAuB,MAAKA,QAAS,uBACtC;GACF,CAAC,CAAC,cAAc,MAAKD,OAAQ,CAC/B,IAAI,MAAKE,eACV,MAAKA;AACT,SAAO,MAAKM;;CAGd,IAAI,QAAiC;AACnC,MAAI,CAAC,MAAKC,MACR,OAAKA,QACH,MAAKN,aAAc,MAAKF,QAAS,oBAAoB,OACjD,KAAK,iBACL;GACE,GAAG,KAAK;GACR;IAAE,MAAM;IAAoB,OAAO;IAAK;GACxC;IAAE,MAAM;IAAqB,OAAO,MAAKC;IAAe;GACzD;AAGT,SAAO,MAAKO;;CAGd,IAAI,uBAA+B;AACjC,MAAI,CAAC,MAAKC,sBAAuB;GAC/B,MAAM,UAAU;IAAE,GAAG,MAAKT;IAAU,sBAAsB;IAAM;GAKhE,MAAM,YAJY,aAChB,QAAQ,QACR,mBAAmB,MAAKC,cAAe,MAAKC,WAAY,SAAS,MAAKH,OAAQ,CAErD,CAAC,OAAO,MAAKA,OAAQ;AAChD,SAAKU,uBACH,MAAKP,aAAc,MAAKF,QAAS,oBAAoB,OACjD,YACA,8BAA8B,WAAW,MAAKC,aAAc;;AAGpE,SAAO,MAAKQ;;CAGd,IAAI,kCAA0C;AAC5C,MAAI,CAAC,MAAKC,iCAAkC;GAC1C,MAAM,UAAU;IAAE,GAAG,MAAKV;IAAU,iBAAiB;IAAM,sBAAsB;IAAM;AACvF,SAAKU,kCAAmC,aACtC,QAAQ,QACR,mBAAmB,MAAKT,cAAe,MAAKC,WAAY,SAAS,MAAKH,OAAQ,CAC/E,CAAC,OAAO,MAAKA,OAAQ;;AAGxB,SAAO,MAAKW;;CAGd,IAAY,iBAA0C;AACpD,QAAKC,mBAAoB,MAAKR,iBAAkB,cAAc,MAAKJ,OAAQ;AAC3E,SAAO,MAAKY;;CAGd,WAAmB;AACjB,SAAO,KAAK;;;AAIhB,IAAM,2BAAN,MAA8D;CAC5D,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CAET,YAAY,OAA2B,SAA6B;AAClE,MAAI,MAAM,WAAW,EACnB,OAAM,IAAI,MAAM,2DAA2D;EAG7E,MAAM,UAAU,sBACd,MAAM,KAAK,WAAW;GACpB;GACA,QAAQ,YAAY,MAAM;GAC1B,cAAc,sBAAsB,MAAM,aAAa;GACxD,EAAE,CACJ;EAED,MAAM,CAAC,SAAS;AAChB,MAAI,CAAC,MACH,OAAM,IAAI,MAAM,2DAA2D;EAG7E,MAAM,aAAa,QAAQ,MAAM,UAAU,MAAM,iBAAiB,MAAM,aAAa;AACrF,MAAI,WACF,OAAM,IAAI,MACR,+DAA+D,MAAM,aAAa,OAAO,WAAW,eACrG;EAGH,MAAM,OAAO,QAAQ,QAAQ,SAAS,MAAM;AAC5C,OAAK,MAAM,MAAM;AACjB,OAAK,MAAM,KAAK;AAChB,OAAK,eAAe,MAAM;AAE1B,MAAI,MAAM,WAAW,KAAK,QAAQ;AAChC,QAAK,kBAAkB,IAAI,oBAAoB,MAAM,OAAO;IAC1D,GAAG;IACH,sBAAsB,QAAQ,wBAAwB,CAAC,0BAA0B,QAAQ;IAC1F,CAAC,CAAC;AACH;;EAGF,MAAM,YAAY,yBAAyB,MAAM,aAAa;EAW9D,MAAM,YAAY,YAVA,aAChB,QAAQ,QACR,kBACE,MAAM,cACN,WACA,SACA,QAAQ,KAAK,UAAU,MAAM,OAAO,CACrC,CAGoC,EAAE,MAAM,QAAQ,KAAK,OAAO;AACnE,OAAK,kBACH,aAAa,QAAQ,oBAAoB,OACrC,YACA,8BAA8B,WAAW,MAAM,aAAa;;CAGpE,WAAmB;AACjB,SAAO,KAAK;;;AAmBhB,SAAgB,YACd,OACA,SACsC;AACtC,QAAO,aAAa,MAAM,GACtB,IAAI,yBAAyB,OAAO,QAAQ,GAC5C,IAAI,oBAAoB,OAAO,QAAQ"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//#region src/core/money/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Matches the Storefront API's MoneyV2 shape.
|
|
4
|
+
* Uses `string` for currencyCode instead of the generated CurrencyCode enum
|
|
5
|
+
* so the utility also accepts Customer Account API currencies (e.g. USDC)
|
|
6
|
+
* that may not be in the Storefront API's enum.
|
|
7
|
+
*/
|
|
8
|
+
type MoneyV2 = {
|
|
9
|
+
amount: string;
|
|
10
|
+
currencyCode: string;
|
|
11
|
+
};
|
|
12
|
+
type FormatMoneyOptions = {
|
|
13
|
+
/** BCP 47 locale string. e.g. 'en-US', 'fr-CA', 'ja-JP'. */locale: string; /** Omit the currency symbol/code from the output. */
|
|
14
|
+
withoutCurrency?: boolean; /** Strip trailing fractional zeros. '$19.00' → '$19'. */
|
|
15
|
+
withoutTrailingZeros?: boolean; /** Override Intl minimumFractionDigits. */
|
|
16
|
+
minimumFractionDigits?: number; /** Override Intl maximumFractionDigits. */
|
|
17
|
+
maximumFractionDigits?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Intl.NumberFormat currencyDisplay option.
|
|
20
|
+
* 'symbol' (default) | 'narrowSymbol' | 'code' | 'name'
|
|
21
|
+
*
|
|
22
|
+
* 'narrowSymbol' is useful for disambiguating $ across CAD/AUD/USD.
|
|
23
|
+
*/
|
|
24
|
+
currencyDisplay?: Intl.NumberFormatOptions["currencyDisplay"];
|
|
25
|
+
};
|
|
26
|
+
type FormattedMoney = {
|
|
27
|
+
/** The full locale-formatted string. Also returned by toString(). */localizedString: string; /** Just the numeric portion, no currency. '19.99' or '1,299.00'. */
|
|
28
|
+
amount: string; /** Currency symbol from Intl. '$', '€', '¥', 'CA$', etc. */
|
|
29
|
+
currencySymbol: string; /** Narrow symbol. '$' even for CAD. Empty string if unavailable. */
|
|
30
|
+
currencyNarrowSymbol: string; /** Full currency name. 'US dollars', 'Canadian dollars'. */
|
|
31
|
+
currencyName: string; /** The raw numeric amount as a number. parseFloat(money.amount). */
|
|
32
|
+
numericAmount: number; /** The raw Intl.NumberFormat parts array. */
|
|
33
|
+
parts: Intl.NumberFormatPart[]; /** Formatted string with trailing zeros removed. '$19.00' → '$19'. */
|
|
34
|
+
withoutTrailingZeros: string; /** Amount without currency and without trailing zeros. '19.00' → '19'. */
|
|
35
|
+
withoutTrailingZerosAndCurrency: string; /** Returns localizedString so the object works in template literals and string concatenation. */
|
|
36
|
+
toString(): string;
|
|
37
|
+
};
|
|
38
|
+
type FormattedMoneyRange = {
|
|
39
|
+
/** The full locale-formatted range string. Also returned by toString(). */localizedString: string; /** Lowest value in the input range after sorting. */
|
|
40
|
+
min: MoneyV2; /** Highest value in the input range after sorting. */
|
|
41
|
+
max: MoneyV2; /** Shared currency code for every range member. */
|
|
42
|
+
currencyCode: string; /** Returns localizedString so the object works in template literals and string concatenation. */
|
|
43
|
+
toString(): string;
|
|
44
|
+
};
|
|
45
|
+
//#endregion
|
|
46
|
+
export { FormatMoneyOptions, FormattedMoney, FormattedMoneyRange, MoneyV2 };
|
|
47
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
//#region src/core/observable.ts
|
|
2
|
+
function createObservable(initialState) {
|
|
3
|
+
let currentState = initialState;
|
|
4
|
+
let listeners = [];
|
|
5
|
+
function setState(next) {
|
|
6
|
+
const nextState = typeof next === "function" ? next(currentState) : next;
|
|
7
|
+
if (Object.is(currentState, nextState)) return;
|
|
8
|
+
currentState = nextState;
|
|
9
|
+
const snapshot = listeners.slice();
|
|
10
|
+
for (const listener of snapshot) {
|
|
11
|
+
if (!listeners.includes(listener)) continue;
|
|
12
|
+
if (listener.selector) {
|
|
13
|
+
const nextSlice = listener.selector(currentState);
|
|
14
|
+
if (listener.isEqual(listener.prev, nextSlice)) continue;
|
|
15
|
+
listener.prev = nextSlice;
|
|
16
|
+
listener.fn(nextSlice);
|
|
17
|
+
} else listener.fn(currentState);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function subscribe(fn, selector, isEqual) {
|
|
21
|
+
const listener = {
|
|
22
|
+
fn,
|
|
23
|
+
selector,
|
|
24
|
+
isEqual: isEqual ?? Object.is,
|
|
25
|
+
prev: selector ? selector(currentState) : void 0
|
|
26
|
+
};
|
|
27
|
+
listeners.push(listener);
|
|
28
|
+
let subscribed = true;
|
|
29
|
+
return () => {
|
|
30
|
+
if (!subscribed) return;
|
|
31
|
+
subscribed = false;
|
|
32
|
+
listeners = listeners.filter((l) => l !== listener);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
get state() {
|
|
37
|
+
return currentState;
|
|
38
|
+
},
|
|
39
|
+
subscribe,
|
|
40
|
+
setState
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
//#endregion
|
|
45
|
+
export { createObservable };
|
|
46
|
+
//# sourceMappingURL=observable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.mjs","names":[],"sources":["../../../src/core/observable.ts"],"sourcesContent":["interface Observable<T> {\n readonly state: T;\n subscribe(fn: (state: T) => void): () => void;\n subscribe<S>(\n fn: (slice: S) => void,\n selector: (state: T) => S,\n isEqual?: (a: S, b: S) => boolean,\n ): () => void;\n}\n\ntype InternalObservable<T> = Observable<T> & {\n setState(next: T | ((prev: T) => T)): void;\n};\n\ntype Listener<T> = {\n fn: (value: unknown) => void;\n selector?: (state: T) => unknown;\n isEqual: (a: unknown, b: unknown) => boolean;\n prev: unknown;\n};\n\nexport function createObservable<T>(initialState: T): InternalObservable<T> {\n let currentState = initialState;\n let listeners: Listener<T>[] = [];\n\n function setState(next: T | ((prev: T) => T)): void {\n const nextState = typeof next === \"function\" ? (next as (prev: T) => T)(currentState) : next;\n\n if (Object.is(currentState, nextState)) return;\n\n currentState = nextState;\n\n const snapshot = listeners.slice();\n for (const listener of snapshot) {\n if (!listeners.includes(listener)) continue;\n\n if (listener.selector) {\n const nextSlice = listener.selector(currentState);\n if (listener.isEqual(listener.prev, nextSlice)) continue;\n listener.prev = nextSlice;\n listener.fn(nextSlice);\n } else {\n listener.fn(currentState);\n }\n }\n }\n\n function subscribe(fn: (state: T) => void): () => void;\n function subscribe<S>(\n fn: (slice: S) => void,\n selector: (state: T) => S,\n isEqual?: (a: S, b: S) => boolean,\n ): () => void;\n function subscribe<S>(\n fn: (value: T | S) => void,\n selector?: (state: T) => S,\n isEqual?: (a: S, b: S) => boolean,\n ): () => void {\n const listener: Listener<T> = {\n fn: fn as (value: unknown) => void,\n selector,\n isEqual: (isEqual as ((a: unknown, b: unknown) => boolean) | undefined) ?? Object.is,\n prev: selector ? selector(currentState) : undefined,\n };\n\n listeners.push(listener);\n\n let subscribed = true;\n return () => {\n if (!subscribed) return;\n subscribed = false;\n listeners = listeners.filter((l) => l !== listener);\n };\n }\n\n return {\n get state() {\n return currentState;\n },\n subscribe,\n setState,\n };\n}\n"],"mappings":";AAqBA,SAAgB,iBAAoB,cAAwC;CAC1E,IAAI,eAAe;CACnB,IAAI,YAA2B,EAAE;CAEjC,SAAS,SAAS,MAAkC;EAClD,MAAM,YAAY,OAAO,SAAS,aAAc,KAAwB,aAAa,GAAG;AAExF,MAAI,OAAO,GAAG,cAAc,UAAU,CAAE;AAExC,iBAAe;EAEf,MAAM,WAAW,UAAU,OAAO;AAClC,OAAK,MAAM,YAAY,UAAU;AAC/B,OAAI,CAAC,UAAU,SAAS,SAAS,CAAE;AAEnC,OAAI,SAAS,UAAU;IACrB,MAAM,YAAY,SAAS,SAAS,aAAa;AACjD,QAAI,SAAS,QAAQ,SAAS,MAAM,UAAU,CAAE;AAChD,aAAS,OAAO;AAChB,aAAS,GAAG,UAAU;SAEtB,UAAS,GAAG,aAAa;;;CAW/B,SAAS,UACP,IACA,UACA,SACY;EACZ,MAAM,WAAwB;GACxB;GACJ;GACA,SAAU,WAAiE,OAAO;GAClF,MAAM,WAAW,SAAS,aAAa,GAAG;GAC3C;AAED,YAAU,KAAK,SAAS;EAExB,IAAI,aAAa;AACjB,eAAa;AACX,OAAI,CAAC,WAAY;AACjB,gBAAa;AACb,eAAY,UAAU,QAAQ,MAAM,MAAM,SAAS;;;AAIvD,QAAO;EACL,IAAI,QAAQ;AACV,UAAO;;EAET;EACA;EACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.mjs","names":[],"sources":["../../../../src/core/predictive-search/constants.ts"],"sourcesContent":["export const PREDICTIVE_SEARCH_API_PATH = \"/api/predictive-search\" as const;\nexport const PREDICTIVE_SEARCH_GET_METHOD = \"GET\" as const;\nexport const PREDICTIVE_SEARCH_QUERY_PARAM = \"q\" as const;\n"],"mappings":";AAAA,MAAa,6BAA6B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/core/predictive-search/form.d.ts
|
|
2
|
+
/** Props returned by {@link PredictiveSearchFormRegister} for the query input. */
|
|
3
|
+
interface PredictiveSearchQueryInputAttributes {
|
|
4
|
+
name: "q";
|
|
5
|
+
type: "search";
|
|
6
|
+
autoComplete: "off";
|
|
7
|
+
autoCapitalize: "off";
|
|
8
|
+
spellCheck: false;
|
|
9
|
+
}
|
|
10
|
+
/** Props returned by {@link getPredictiveSearchFormAttributes} for the search form. */
|
|
11
|
+
interface PredictiveSearchFormAttributes {
|
|
12
|
+
action: string;
|
|
13
|
+
method: "get";
|
|
14
|
+
role: "search";
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Register function returned by predictive search form bindings.
|
|
18
|
+
*
|
|
19
|
+
* Predictive search forms only register the Storefront API query input.
|
|
20
|
+
*/
|
|
21
|
+
type PredictiveSearchFormRegister = {
|
|
22
|
+
(field: "query"): PredictiveSearchQueryInputAttributes;
|
|
23
|
+
};
|
|
24
|
+
/** Creates a {@link PredictiveSearchFormRegister} for framework-neutral form fields. */
|
|
25
|
+
declare function createPredictiveSearchFormRegister(): PredictiveSearchFormRegister;
|
|
26
|
+
/** Returns progressive-enhancement attributes for a predictive search form. */
|
|
27
|
+
declare function getPredictiveSearchFormAttributes(action?: string): PredictiveSearchFormAttributes;
|
|
28
|
+
declare function readPredictiveSearchFormTerm(formData: FormData): string;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { PredictiveSearchFormAttributes, PredictiveSearchFormRegister, PredictiveSearchQueryInputAttributes, createPredictiveSearchFormRegister, getPredictiveSearchFormAttributes, readPredictiveSearchFormTerm };
|
|
31
|
+
//# sourceMappingURL=form.d.mts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/core/predictive-search/form.ts
|
|
2
|
+
/** Creates a {@link PredictiveSearchFormRegister} for framework-neutral form fields. */
|
|
3
|
+
function createPredictiveSearchFormRegister() {
|
|
4
|
+
return registerPredictiveSearchFormField;
|
|
5
|
+
}
|
|
6
|
+
function registerPredictiveSearchFormField(field) {
|
|
7
|
+
if (field !== "query") throw new Error(`Unknown predictive search form field: "${field}".`);
|
|
8
|
+
return {
|
|
9
|
+
name: "q",
|
|
10
|
+
type: "search",
|
|
11
|
+
autoComplete: "off",
|
|
12
|
+
autoCapitalize: "off",
|
|
13
|
+
spellCheck: false
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/** Returns progressive-enhancement attributes for a predictive search form. */
|
|
17
|
+
function getPredictiveSearchFormAttributes(action = "/search") {
|
|
18
|
+
return {
|
|
19
|
+
action,
|
|
20
|
+
method: "get",
|
|
21
|
+
role: "search"
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function readPredictiveSearchFormTerm(formData) {
|
|
25
|
+
const value = formData.get("q");
|
|
26
|
+
return typeof value === "string" ? value : "";
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { createPredictiveSearchFormRegister, getPredictiveSearchFormAttributes, readPredictiveSearchFormTerm };
|
|
31
|
+
//# sourceMappingURL=form.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.mjs","names":[],"sources":["../../../../src/core/predictive-search/form.ts"],"sourcesContent":["import { PREDICTIVE_SEARCH_QUERY_PARAM } from \"./constants\";\n\n/** Props returned by {@link PredictiveSearchFormRegister} for the query input. */\nexport interface PredictiveSearchQueryInputAttributes {\n name: \"q\";\n type: \"search\";\n autoComplete: \"off\";\n autoCapitalize: \"off\";\n spellCheck: false;\n}\n\n/** Props returned by {@link getPredictiveSearchFormAttributes} for the search form. */\nexport interface PredictiveSearchFormAttributes {\n action: string;\n method: \"get\";\n role: \"search\";\n}\n\n/**\n * Register function returned by predictive search form bindings.\n *\n * Predictive search forms only register the Storefront API query input.\n */\nexport type PredictiveSearchFormRegister = {\n (field: \"query\"): PredictiveSearchQueryInputAttributes;\n};\n\n/** Creates a {@link PredictiveSearchFormRegister} for framework-neutral form fields. */\nexport function createPredictiveSearchFormRegister(): PredictiveSearchFormRegister {\n return registerPredictiveSearchFormField;\n}\n\nfunction registerPredictiveSearchFormField(field: string): PredictiveSearchQueryInputAttributes {\n if (field !== \"query\") {\n throw new Error(`Unknown predictive search form field: \"${field}\".`);\n }\n\n return {\n name: \"q\",\n type: \"search\",\n autoComplete: \"off\",\n autoCapitalize: \"off\",\n spellCheck: false,\n };\n}\n\n/** Returns progressive-enhancement attributes for a predictive search form. */\nexport function getPredictiveSearchFormAttributes(\n action: string = \"/search\",\n): PredictiveSearchFormAttributes {\n return {\n action,\n method: \"get\",\n role: \"search\",\n };\n}\n\nexport function readPredictiveSearchFormTerm(formData: FormData): string {\n const value = formData.get(PREDICTIVE_SEARCH_QUERY_PARAM);\n return typeof value === \"string\" ? value : \"\";\n}\n"],"mappings":";;AA4BA,SAAgB,qCAAmE;AACjF,QAAO;;AAGT,SAAS,kCAAkC,OAAqD;AAC9F,KAAI,UAAU,QACZ,OAAM,IAAI,MAAM,0CAA0C,MAAM,IAAI;AAGtE,QAAO;EACL,MAAM;EACN,MAAM;EACN,cAAc;EACd,gBAAgB;EAChB,YAAY;EACb;;;AAIH,SAAgB,kCACd,SAAiB,WACe;AAChC,QAAO;EACL;EACA,QAAQ;EACR,MAAM;EACP;;AAGH,SAAgB,6BAA6B,UAA4B;CACvE,MAAM,QAAQ,SAAS,QAAkC;AACzD,QAAO,OAAO,UAAU,WAAW,QAAQ"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PredictiveSearchFormAttributes, PredictiveSearchFormRegister, PredictiveSearchQueryInputAttributes, createPredictiveSearchFormRegister, getPredictiveSearchFormAttributes, readPredictiveSearchFormTerm } from "./form.mjs";
|
|
2
|
+
import { CreatePredictiveSearchQueriesOptions, PredictiveSearchFragments, makePredictiveSearchQueries, predictiveSearchQueries } from "./queries.mjs";
|
|
3
|
+
import { PredictiveSearchData, PredictiveSearchDataForOptions, QueryPredictiveSearchOptions, queryPredictiveSearch } from "./search.mjs";
|
|
4
|
+
import { CreatePredictiveSearchServerHandlersOptions, createPredictiveSearchServerHandlers } from "./server-handlers.mjs";
|
|
5
|
+
import { CreatePredictiveSearchStoreOptions, PredictiveSearchState, PredictiveSearchStatus, PredictiveSearchStore, createPredictiveSearchStore } from "./store.mjs";
|
|
6
|
+
import { PredictiveSearchArticleItem, PredictiveSearchCollectionItem, PredictiveSearchItem, PredictiveSearchItemUrlOptions, PredictiveSearchPageItem, PredictiveSearchProductItem, PredictiveSearchQueryItem, PredictiveSearchQueryItemUrlOptions, PredictiveSearchResourceItem, getPredictiveSearchItemUrl, getSearchResultUrl } from "./url.mjs";
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { InferResult, InferVariables } from "../../graphql/type-resolver.mjs";
|
|
2
|
+
import { AnyStorefrontQueryString, ComposedSource, SourceOf, StorefrontQueryString } from "../../graphql/graphql.mjs";
|
|
3
|
+
//#region src/core/predictive-search/queries.d.ts
|
|
4
|
+
declare const PREDICTIVE_SEARCH_QUERY: StorefrontQueryString<{
|
|
5
|
+
predictiveSearch: {
|
|
6
|
+
articles: {
|
|
7
|
+
__typename: "Article";
|
|
8
|
+
id: string;
|
|
9
|
+
title: string;
|
|
10
|
+
handle: string;
|
|
11
|
+
blog: {
|
|
12
|
+
handle: string;
|
|
13
|
+
};
|
|
14
|
+
image: {
|
|
15
|
+
url: string;
|
|
16
|
+
altText: string | null;
|
|
17
|
+
width: number | null;
|
|
18
|
+
height: number | null;
|
|
19
|
+
} | null;
|
|
20
|
+
trackingParameters: string | null;
|
|
21
|
+
}[];
|
|
22
|
+
collections: {
|
|
23
|
+
__typename: "Collection";
|
|
24
|
+
id: string;
|
|
25
|
+
title: string;
|
|
26
|
+
handle: string;
|
|
27
|
+
image: {
|
|
28
|
+
url: string;
|
|
29
|
+
altText: string | null;
|
|
30
|
+
width: number | null;
|
|
31
|
+
height: number | null;
|
|
32
|
+
} | null;
|
|
33
|
+
trackingParameters: string | null;
|
|
34
|
+
}[];
|
|
35
|
+
pages: {
|
|
36
|
+
__typename: "Page";
|
|
37
|
+
id: string;
|
|
38
|
+
title: string;
|
|
39
|
+
handle: string;
|
|
40
|
+
trackingParameters: string | null;
|
|
41
|
+
}[];
|
|
42
|
+
products: {
|
|
43
|
+
__typename: "Product";
|
|
44
|
+
id: string;
|
|
45
|
+
title: string;
|
|
46
|
+
handle: string;
|
|
47
|
+
trackingParameters: string | null;
|
|
48
|
+
selectedOrFirstAvailableVariant: {
|
|
49
|
+
id: string;
|
|
50
|
+
image: {
|
|
51
|
+
url: string;
|
|
52
|
+
altText: string | null;
|
|
53
|
+
width: number | null;
|
|
54
|
+
height: number | null;
|
|
55
|
+
} | null;
|
|
56
|
+
price: {
|
|
57
|
+
amount: string;
|
|
58
|
+
currencyCode: "ALL" | "USD" | "EUR" | "GBP" | "CAD" | "AFN" | "DZD" | "AOA" | "ARS" | "AMD" | "AWG" | "AUD" | "BBD" | "AZN" | "BDT" | "BSD" | "BHD" | "BIF" | "BZD" | "BMD" | "BTN" | "BAM" | "BRL" | "BOB" | "BWP" | "BND" | "BGN" | "MMK" | "KHR" | "CVE" | "KYD" | "XAF" | "CLP" | "CNY" | "COP" | "KMF" | "CDF" | "CRC" | "HRK" | "CZK" | "DKK" | "DOP" | "XCD" | "EGP" | "ERN" | "ETB" | "FKP" | "XPF" | "FJD" | "GIP" | "GMD" | "GHS" | "GTQ" | "GYD" | "GEL" | "HTG" | "HNL" | "HKD" | "HUF" | "ISK" | "INR" | "IDR" | "ILS" | "IQD" | "JMD" | "JPY" | "JEP" | "JOD" | "KZT" | "KES" | "KID" | "KWD" | "KGS" | "LAK" | "LVL" | "LBP" | "LSL" | "LRD" | "LTL" | "MGA" | "MKD" | "MOP" | "MWK" | "MVR" | "MRU" | "MXN" | "MYR" | "MUR" | "MDL" | "MAD" | "MNT" | "MZN" | "NAD" | "NPR" | "ANG" | "NZD" | "NIO" | "NGN" | "NOK" | "OMR" | "PAB" | "PKR" | "PGK" | "PYG" | "PEN" | "PHP" | "PLN" | "QAR" | "RON" | "RUB" | "RWF" | "WST" | "SHP" | "SAR" | "RSD" | "SCR" | "SGD" | "SDG" | "SOS" | "SYP" | "ZAR" | "KRW" | "SSP" | "SBD" | "LKR" | "SRD" | "SZL" | "SEK" | "CHF" | "TWD" | "THB" | "TZS" | "TTD" | "TND" | "TRY" | "TMT" | "UGX" | "UAH" | "AED" | "UYU" | "UZS" | "VUV" | "VES" | "VND" | "XOF" | "YER" | "ZMW" | "BYN" | "BYR" | "DJF" | "GNF" | "IRR" | "LYD" | "SLL" | "STD" | "STN" | "TJS" | "TOP" | "VED" | "VEF" | "XXX";
|
|
59
|
+
};
|
|
60
|
+
} | null;
|
|
61
|
+
}[];
|
|
62
|
+
queries: {
|
|
63
|
+
__typename: "SearchQuerySuggestion";
|
|
64
|
+
text: string;
|
|
65
|
+
styledText: string;
|
|
66
|
+
trackingParameters: string | null;
|
|
67
|
+
}[];
|
|
68
|
+
} | null;
|
|
69
|
+
}, {
|
|
70
|
+
unavailableProducts?: "HIDE" | "LAST" | "SHOW" | null | undefined;
|
|
71
|
+
searchableFields?: ("AUTHOR" | "BODY" | "PRODUCT_TYPE" | "TAG" | "TITLE" | "VARIANTS_BARCODE" | "VARIANTS_SKU" | "VARIANTS_TITLE" | "VENDOR")[] | null | undefined;
|
|
72
|
+
types?: ("ARTICLE" | "COLLECTION" | "PAGE" | "PRODUCT" | "QUERY")[] | null | undefined;
|
|
73
|
+
term: string;
|
|
74
|
+
limitScope?: "ALL" | "EACH" | null | undefined;
|
|
75
|
+
limit?: number | null | undefined;
|
|
76
|
+
language?: "ID" | "AF" | "AK" | "AM" | "AR" | "AS" | "AZ" | "BE" | "BG" | "BM" | "BN" | "BO" | "BR" | "BS" | "CA" | "CE" | "CKB" | "CS" | "CY" | "DA" | "DE" | "DZ" | "EE" | "EL" | "EN" | "EO" | "ES" | "ET" | "EU" | "FA" | "FF" | "FI" | "FIL" | "FO" | "FR" | "FY" | "GA" | "GD" | "GL" | "GU" | "GV" | "HA" | "HE" | "HI" | "HR" | "HU" | "HY" | "IA" | "IG" | "II" | "IS" | "IT" | "JA" | "JV" | "KA" | "KI" | "KK" | "KL" | "KM" | "KN" | "KO" | "KS" | "KU" | "KW" | "KY" | "LB" | "LG" | "LN" | "LO" | "LT" | "LU" | "LV" | "MG" | "MI" | "MK" | "ML" | "MN" | "MR" | "MS" | "MT" | "MY" | "NB" | "ND" | "NE" | "NL" | "NN" | "NO" | "OM" | "OR" | "OS" | "PA" | "PL" | "PS" | "PT_BR" | "PT_PT" | "QU" | "RM" | "RN" | "RO" | "RU" | "RW" | "SA" | "SC" | "SD" | "SE" | "SG" | "SI" | "SK" | "SL" | "SN" | "SO" | "SQ" | "SR" | "SU" | "SV" | "SW" | "TA" | "TE" | "TG" | "TH" | "TI" | "TK" | "TO" | "TR" | "TT" | "UG" | "UK" | "UR" | "UZ" | "VI" | "WO" | "XH" | "YI" | "YO" | "ZH_CN" | "ZH_TW" | "ZU" | "ZH" | "PT" | "CU" | "VO" | "LA" | "SH" | "MO" | null | undefined;
|
|
77
|
+
country?: "ID" | "AF" | "AM" | "AR" | "AZ" | "BE" | "BG" | "BM" | "BN" | "BO" | "BR" | "BS" | "CA" | "CY" | "DE" | "DZ" | "EE" | "ES" | "ET" | "FI" | "FO" | "FR" | "GA" | "GD" | "GL" | "HR" | "HU" | "IS" | "IT" | "KI" | "KM" | "KN" | "KW" | "KY" | "LB" | "LT" | "LU" | "LV" | "MG" | "MK" | "ML" | "MN" | "MR" | "MS" | "MT" | "MY" | "NE" | "NL" | "NO" | "OM" | "PA" | "PL" | "PS" | "RO" | "RU" | "RW" | "SA" | "SC" | "SD" | "SE" | "SG" | "SI" | "SK" | "SL" | "SN" | "SO" | "SR" | "SV" | "TA" | "TG" | "TH" | "TK" | "TO" | "TR" | "TT" | "UG" | "UZ" | "PT" | "CU" | "LA" | "SH" | "MO" | "AX" | "AL" | "AD" | "AO" | "AI" | "AG" | "AW" | "AC" | "AU" | "AT" | "BH" | "BD" | "BB" | "BY" | "BZ" | "BJ" | "BT" | "BA" | "BW" | "BV" | "IO" | "BF" | "BI" | "KH" | "CV" | "BQ" | "CF" | "TD" | "CL" | "CN" | "CX" | "CC" | "CO" | "CG" | "CD" | "CK" | "CR" | "CW" | "CZ" | "CI" | "DK" | "DJ" | "DM" | "DO" | "EC" | "EG" | "GQ" | "ER" | "SZ" | "FK" | "FJ" | "GF" | "PF" | "TF" | "GM" | "GE" | "GH" | "GI" | "GR" | "GP" | "GT" | "GG" | "GN" | "GW" | "GY" | "HT" | "HM" | "VA" | "HN" | "HK" | "IN" | "IR" | "IQ" | "IE" | "IM" | "IL" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KP" | "XK" | "KG" | "LS" | "LR" | "LY" | "LI" | "MW" | "MV" | "MQ" | "MU" | "YT" | "MX" | "MD" | "MC" | "ME" | "MA" | "MZ" | "MM" | "NA" | "NR" | "NP" | "AN" | "NC" | "NZ" | "NI" | "NG" | "NU" | "NF" | "PK" | "PG" | "PY" | "PE" | "PH" | "PN" | "QA" | "CM" | "RE" | "BL" | "LC" | "MF" | "PM" | "WS" | "SM" | "ST" | "RS" | "SX" | "SB" | "ZA" | "GS" | "KR" | "SS" | "LK" | "VC" | "SJ" | "CH" | "SY" | "TW" | "TJ" | "TZ" | "TL" | "TN" | "TM" | "TC" | "TV" | "UA" | "AE" | "GB" | "US" | "UM" | "UY" | "VU" | "VE" | "VN" | "VG" | "WF" | "EH" | "YE" | "ZM" | "ZW" | "ZZ" | null | undefined;
|
|
78
|
+
}, "query PredictiveSearch(\n $country: CountryCode\n $language: LanguageCode\n $limit: Int\n $limitScope: PredictiveSearchLimitScope\n $term: String!\n $types: [PredictiveSearchType!]\n $searchableFields: [SearchableField!]\n $unavailableProducts: SearchUnavailableProductsType\n ) @inContext(country: $country, language: $language) {\n predictiveSearch(\n limit: $limit\n limitScope: $limitScope\n query: $term\n types: $types\n searchableFields: $searchableFields\n unavailableProducts: $unavailableProducts\n ) {\n articles {\n ...HydrogenPredictiveSearchArticleFragment\n ...PredictiveSearchArticleFragment\n }\n collections {\n ...HydrogenPredictiveSearchCollectionFragment\n ...PredictiveSearchCollectionFragment\n }\n pages {\n ...HydrogenPredictiveSearchPageFragment\n ...PredictiveSearchPageFragment\n }\n products {\n ...HydrogenPredictiveSearchProductFragment\n ...PredictiveSearchProductFragment\n }\n queries {\n ...HydrogenPredictiveSearchQueryFragment\n ...PredictiveSearchQueryFragment\n }\n }\n }\n\n fragment HydrogenPredictiveSearchProductFragment on Product {\n __typename\n id\n title\n handle\n trackingParameters\n selectedOrFirstAvailableVariant(\n selectedOptions: []\n ignoreUnknownOptions: true\n caseInsensitiveMatch: true\n ) {\n id\n image {\n url\n altText\n width\n height\n }\n price {\n amount\n currencyCode\n }\n }\n }\n\n\n fragment HydrogenPredictiveSearchCollectionFragment on Collection {\n __typename\n id\n title\n handle\n image {\n url\n altText\n width\n height\n }\n trackingParameters\n }\n\n\n fragment HydrogenPredictiveSearchPageFragment on Page {\n __typename\n id\n title\n handle\n trackingParameters\n }\n\n\n fragment HydrogenPredictiveSearchArticleFragment on Article {\n __typename\n id\n title\n handle\n blog {\n handle\n }\n image {\n url\n altText\n width\n height\n }\n trackingParameters\n }\n\n\n fragment HydrogenPredictiveSearchQueryFragment on SearchQuerySuggestion {\n __typename\n text\n styledText\n trackingParameters\n }\n">;
|
|
79
|
+
declare const DEFAULT_PRODUCT_FRAGMENT: StorefrontQueryString<{
|
|
80
|
+
id: string;
|
|
81
|
+
}, never, "\n fragment PredictiveSearchProductFragment on Product {\n id\n }\n">;
|
|
82
|
+
declare const DEFAULT_COLLECTION_FRAGMENT: StorefrontQueryString<{
|
|
83
|
+
id: string;
|
|
84
|
+
}, never, "\n fragment PredictiveSearchCollectionFragment on Collection {\n id\n }\n">;
|
|
85
|
+
declare const DEFAULT_PAGE_FRAGMENT: StorefrontQueryString<{
|
|
86
|
+
id: string;
|
|
87
|
+
}, never, "\n fragment PredictiveSearchPageFragment on Page {\n id\n }\n">;
|
|
88
|
+
declare const DEFAULT_ARTICLE_FRAGMENT: StorefrontQueryString<{
|
|
89
|
+
id: string;
|
|
90
|
+
}, never, "\n fragment PredictiveSearchArticleFragment on Article {\n id\n }\n">;
|
|
91
|
+
declare const DEFAULT_QUERY_FRAGMENT: StorefrontQueryString<{
|
|
92
|
+
text: string;
|
|
93
|
+
}, never, "\n fragment PredictiveSearchQueryFragment on SearchQuerySuggestion {\n text\n }\n">;
|
|
94
|
+
type PredictiveSearchFragments = {
|
|
95
|
+
readonly product?: AnyStorefrontQueryString;
|
|
96
|
+
readonly collection?: AnyStorefrontQueryString;
|
|
97
|
+
readonly page?: AnyStorefrontQueryString;
|
|
98
|
+
readonly article?: AnyStorefrontQueryString;
|
|
99
|
+
readonly query?: AnyStorefrontQueryString;
|
|
100
|
+
};
|
|
101
|
+
type CreatePredictiveSearchQueriesOptions<TFragments extends PredictiveSearchFragments = PredictiveSearchFragments> = {
|
|
102
|
+
readonly fragments?: TFragments;
|
|
103
|
+
};
|
|
104
|
+
type FragmentForOptions<TOptions, TKey extends keyof PredictiveSearchFragments, TDefault extends AnyStorefrontQueryString> = TOptions extends {
|
|
105
|
+
readonly fragments: infer TFragments;
|
|
106
|
+
} ? TFragments extends Record<TKey, infer TFragment extends AnyStorefrontQueryString> ? TFragment : TDefault : TDefault;
|
|
107
|
+
type PredictiveSearchQueryFragmentsForOptions<TOptions> = [FragmentForOptions<TOptions, "product", typeof DEFAULT_PRODUCT_FRAGMENT>, FragmentForOptions<TOptions, "collection", typeof DEFAULT_COLLECTION_FRAGMENT>, FragmentForOptions<TOptions, "page", typeof DEFAULT_PAGE_FRAGMENT>, FragmentForOptions<TOptions, "article", typeof DEFAULT_ARTICLE_FRAGMENT>, FragmentForOptions<TOptions, "query", typeof DEFAULT_QUERY_FRAGMENT>];
|
|
108
|
+
type PredictiveSearchQuerySourceForOptions<TOptions> = ComposedSource<SourceOf<typeof PREDICTIVE_SEARCH_QUERY>, PredictiveSearchQueryFragmentsForOptions<TOptions>>;
|
|
109
|
+
type PredictiveSearchQueryForOptions<TOptions> = StorefrontQueryString<InferResult<PredictiveSearchQuerySourceForOptions<TOptions>>, InferVariables<PredictiveSearchQuerySourceForOptions<TOptions>>, PredictiveSearchQuerySourceForOptions<TOptions>>;
|
|
110
|
+
type PredictiveSearchQueriesForOptions<TOptions> = {
|
|
111
|
+
readonly predictiveSearch: PredictiveSearchQueryForOptions<TOptions>;
|
|
112
|
+
};
|
|
113
|
+
declare function makePredictiveSearchQueries<const TOptions extends CreatePredictiveSearchQueriesOptions>(options: TOptions): PredictiveSearchQueriesForOptions<TOptions>;
|
|
114
|
+
declare function makePredictiveSearchQueries(): PredictiveSearchQueriesForOptions<undefined>;
|
|
115
|
+
declare const predictiveSearchQueries: PredictiveSearchQueriesForOptions<undefined>;
|
|
116
|
+
//#endregion
|
|
117
|
+
export { CreatePredictiveSearchQueriesOptions, PredictiveSearchFragments, PredictiveSearchQueriesForOptions, makePredictiveSearchQueries, predictiveSearchQueries };
|
|
118
|
+
//# sourceMappingURL=queries.d.mts.map
|