@shopify/hydrogen-react 2024.7.5 → 2024.10.0

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.
Files changed (135) hide show
  1. package/customer-account.schema.json +1 -1
  2. package/dist/browser-dev/CartLineProvider.mjs.map +1 -1
  3. package/dist/browser-dev/CartProvider.mjs.map +1 -1
  4. package/dist/browser-dev/Image.mjs +3 -2
  5. package/dist/browser-dev/Image.mjs.map +1 -1
  6. package/dist/browser-dev/ModelViewer.mjs.map +1 -1
  7. package/dist/browser-dev/Money.mjs.map +1 -1
  8. package/dist/browser-dev/ProductPrice.mjs +7 -19
  9. package/dist/browser-dev/ProductPrice.mjs.map +1 -1
  10. package/dist/browser-dev/Video.mjs.map +1 -1
  11. package/dist/browser-dev/codegen.helpers.mjs.map +1 -1
  12. package/dist/browser-dev/index.mjs +3 -0
  13. package/dist/browser-dev/index.mjs.map +1 -1
  14. package/dist/browser-dev/optionValueDecoder.mjs +91 -0
  15. package/dist/browser-dev/optionValueDecoder.mjs.map +1 -0
  16. package/dist/browser-dev/packages/hydrogen-react/package.json.mjs +1 -1
  17. package/dist/browser-dev/storefront-api-constants.mjs +1 -1
  18. package/dist/browser-dev/storefront-api-constants.mjs.map +1 -1
  19. package/dist/browser-dev/useCartAPIStateMachine.mjs.map +1 -1
  20. package/dist/browser-dev/useCartActions.mjs.map +1 -1
  21. package/dist/browser-prod/CartLineProvider.mjs.map +1 -1
  22. package/dist/browser-prod/CartProvider.mjs.map +1 -1
  23. package/dist/browser-prod/Image.mjs +3 -2
  24. package/dist/browser-prod/Image.mjs.map +1 -1
  25. package/dist/browser-prod/ModelViewer.mjs.map +1 -1
  26. package/dist/browser-prod/Money.mjs.map +1 -1
  27. package/dist/browser-prod/ProductPrice.mjs +7 -19
  28. package/dist/browser-prod/ProductPrice.mjs.map +1 -1
  29. package/dist/browser-prod/Video.mjs.map +1 -1
  30. package/dist/browser-prod/codegen.helpers.mjs.map +1 -1
  31. package/dist/browser-prod/index.mjs +3 -0
  32. package/dist/browser-prod/index.mjs.map +1 -1
  33. package/dist/browser-prod/optionValueDecoder.mjs +91 -0
  34. package/dist/browser-prod/optionValueDecoder.mjs.map +1 -0
  35. package/dist/browser-prod/packages/hydrogen-react/package.json.mjs +1 -1
  36. package/dist/browser-prod/storefront-api-constants.mjs +1 -1
  37. package/dist/browser-prod/storefront-api-constants.mjs.map +1 -1
  38. package/dist/browser-prod/useCartAPIStateMachine.mjs.map +1 -1
  39. package/dist/browser-prod/useCartActions.mjs.map +1 -1
  40. package/dist/node-dev/CartLineProvider.js.map +1 -1
  41. package/dist/node-dev/CartLineProvider.mjs.map +1 -1
  42. package/dist/node-dev/CartProvider.js.map +1 -1
  43. package/dist/node-dev/CartProvider.mjs.map +1 -1
  44. package/dist/node-dev/Image.js +3 -2
  45. package/dist/node-dev/Image.js.map +1 -1
  46. package/dist/node-dev/Image.mjs +3 -2
  47. package/dist/node-dev/Image.mjs.map +1 -1
  48. package/dist/node-dev/ModelViewer.js.map +1 -1
  49. package/dist/node-dev/ModelViewer.mjs.map +1 -1
  50. package/dist/node-dev/Money.js.map +1 -1
  51. package/dist/node-dev/Money.mjs.map +1 -1
  52. package/dist/node-dev/ProductPrice.js +7 -19
  53. package/dist/node-dev/ProductPrice.js.map +1 -1
  54. package/dist/node-dev/ProductPrice.mjs +7 -19
  55. package/dist/node-dev/ProductPrice.mjs.map +1 -1
  56. package/dist/node-dev/Video.js.map +1 -1
  57. package/dist/node-dev/Video.mjs.map +1 -1
  58. package/dist/node-dev/codegen.helpers.js.map +1 -1
  59. package/dist/node-dev/codegen.helpers.mjs.map +1 -1
  60. package/dist/node-dev/index.js +3 -0
  61. package/dist/node-dev/index.js.map +1 -1
  62. package/dist/node-dev/index.mjs +3 -0
  63. package/dist/node-dev/index.mjs.map +1 -1
  64. package/dist/node-dev/optionValueDecoder.js +91 -0
  65. package/dist/node-dev/optionValueDecoder.js.map +1 -0
  66. package/dist/node-dev/optionValueDecoder.mjs +91 -0
  67. package/dist/node-dev/optionValueDecoder.mjs.map +1 -0
  68. package/dist/node-dev/packages/hydrogen-react/package.json.js +1 -1
  69. package/dist/node-dev/packages/hydrogen-react/package.json.mjs +1 -1
  70. package/dist/node-dev/storefront-api-constants.js +1 -1
  71. package/dist/node-dev/storefront-api-constants.js.map +1 -1
  72. package/dist/node-dev/storefront-api-constants.mjs +1 -1
  73. package/dist/node-dev/storefront-api-constants.mjs.map +1 -1
  74. package/dist/node-dev/useCartAPIStateMachine.js.map +1 -1
  75. package/dist/node-dev/useCartAPIStateMachine.mjs.map +1 -1
  76. package/dist/node-dev/useCartActions.js.map +1 -1
  77. package/dist/node-dev/useCartActions.mjs.map +1 -1
  78. package/dist/node-prod/CartLineProvider.js.map +1 -1
  79. package/dist/node-prod/CartLineProvider.mjs.map +1 -1
  80. package/dist/node-prod/CartProvider.js.map +1 -1
  81. package/dist/node-prod/CartProvider.mjs.map +1 -1
  82. package/dist/node-prod/Image.js +3 -2
  83. package/dist/node-prod/Image.js.map +1 -1
  84. package/dist/node-prod/Image.mjs +3 -2
  85. package/dist/node-prod/Image.mjs.map +1 -1
  86. package/dist/node-prod/ModelViewer.js.map +1 -1
  87. package/dist/node-prod/ModelViewer.mjs.map +1 -1
  88. package/dist/node-prod/Money.js.map +1 -1
  89. package/dist/node-prod/Money.mjs.map +1 -1
  90. package/dist/node-prod/ProductPrice.js +7 -19
  91. package/dist/node-prod/ProductPrice.js.map +1 -1
  92. package/dist/node-prod/ProductPrice.mjs +7 -19
  93. package/dist/node-prod/ProductPrice.mjs.map +1 -1
  94. package/dist/node-prod/Video.js.map +1 -1
  95. package/dist/node-prod/Video.mjs.map +1 -1
  96. package/dist/node-prod/codegen.helpers.js.map +1 -1
  97. package/dist/node-prod/codegen.helpers.mjs.map +1 -1
  98. package/dist/node-prod/index.js +3 -0
  99. package/dist/node-prod/index.js.map +1 -1
  100. package/dist/node-prod/index.mjs +3 -0
  101. package/dist/node-prod/index.mjs.map +1 -1
  102. package/dist/node-prod/optionValueDecoder.js +91 -0
  103. package/dist/node-prod/optionValueDecoder.js.map +1 -0
  104. package/dist/node-prod/optionValueDecoder.mjs +91 -0
  105. package/dist/node-prod/optionValueDecoder.mjs.map +1 -0
  106. package/dist/node-prod/packages/hydrogen-react/package.json.js +1 -1
  107. package/dist/node-prod/packages/hydrogen-react/package.json.mjs +1 -1
  108. package/dist/node-prod/storefront-api-constants.js +1 -1
  109. package/dist/node-prod/storefront-api-constants.js.map +1 -1
  110. package/dist/node-prod/storefront-api-constants.mjs +1 -1
  111. package/dist/node-prod/storefront-api-constants.mjs.map +1 -1
  112. package/dist/node-prod/useCartAPIStateMachine.js.map +1 -1
  113. package/dist/node-prod/useCartAPIStateMachine.mjs.map +1 -1
  114. package/dist/node-prod/useCartActions.js.map +1 -1
  115. package/dist/node-prod/useCartActions.mjs.map +1 -1
  116. package/dist/types/CartLineProvider.d.ts +1 -1
  117. package/dist/types/CartProvider.d.ts +2 -2
  118. package/dist/types/Image.d.ts +1 -22
  119. package/dist/types/ModelViewer.d.ts +1 -1
  120. package/dist/types/Money.d.ts +1 -1
  121. package/dist/types/Video.d.ts +1 -1
  122. package/dist/types/codegen.helpers.d.ts +2 -2
  123. package/dist/types/index.d.cts +1 -0
  124. package/dist/types/index.d.ts +1 -0
  125. package/dist/types/optionValueDecoder.d.ts +29 -0
  126. package/dist/types/storefront-api-constants.d.ts +1 -1
  127. package/dist/types/storefront-api-types.d.ts +419 -26
  128. package/dist/types/useCartAPIStateMachine.d.ts +2 -2
  129. package/dist/types/useCartActions.d.ts +2 -2
  130. package/dist/umd/hydrogen-react.dev.js +100 -23
  131. package/dist/umd/hydrogen-react.dev.js.map +1 -1
  132. package/dist/umd/hydrogen-react.prod.js +18 -18
  133. package/dist/umd/hydrogen-react.prod.js.map +1 -1
  134. package/package.json +2 -2
  135. package/storefront.schema.json +1 -1
@@ -11,11 +11,11 @@ export declare function useCartAPIStateMachine({ numCartLines, onCartActionEntry
11
11
  onCartActionOptimisticUI?: (context: CartMachineContext, event: CartMachineEvent) => Partial<CartMachineContext>;
12
12
  /** A callback that is invoked after a Cart API completes. */
13
13
  onCartActionComplete?: (context: CartMachineContext, event: CartMachineFetchResultEvent) => void;
14
- /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/2024-07/objects/cart). */
14
+ /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/2024-10/objects/cart). */
15
15
  data?: PartialDeep<CartType, {
16
16
  recurseIntoArrays: true;
17
17
  }>;
18
- /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/2024-07/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */
18
+ /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/2024-10/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */
19
19
  cartFragment: string;
20
20
  /** The ISO country code for i18n. */
21
21
  countryCode?: CountryCode;
@@ -6,12 +6,12 @@ type CartResponse = PartialDeep<CartType, {
6
6
  /**
7
7
  * The `useCartActions` hook returns helper graphql functions for Storefront Cart API
8
8
  *
9
- * See [cart API graphql mutations](https://shopify.dev/api/storefront/2024-07/objects/Cart)
9
+ * See [cart API graphql mutations](https://shopify.dev/api/storefront/2024-10/objects/Cart)
10
10
  */
11
11
  export declare function useCartActions({ numCartLines, cartFragment, countryCode, languageCode, }: {
12
12
  /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */
13
13
  numCartLines?: number;
14
- /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/2024-07/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */
14
+ /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/2024-10/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */
15
15
  cartFragment: string;
16
16
  /** The ISO country code for i18n. Default to `US` */
17
17
  countryCode?: CountryCode;
@@ -796,7 +796,7 @@
796
796
  }
797
797
  `
798
798
  );
799
- const SFAPI_VERSION = "2024-07";
799
+ const SFAPI_VERSION = "2024-10";
800
800
  const MOCK_SHOP_DOMAIN = "mock.shop";
801
801
  const isMockShop = (domain) => domain.includes(MOCK_SHOP_DOMAIN);
802
802
  function createStorefrontClient({
@@ -2405,7 +2405,7 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
2405
2405
  }
2406
2406
  return false;
2407
2407
  }
2408
- const version = "2024.7.5";
2408
+ const version = "2024.10.0";
2409
2409
  const SCHEMA_ID = "custom_storefront_customer_tracking/1.2";
2410
2410
  const PAGE_RENDERED_EVENT_NAME = "page_rendered";
2411
2411
  const COLLECTION_PAGE_RENDERED_EVENT_NAME = "collection_page_rendered";
@@ -3383,11 +3383,12 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
3383
3383
  );
3384
3384
  }
3385
3385
  );
3386
+ const PLACEHOLDER_DOMAIN = "https://placeholder.shopify.com";
3386
3387
  function shopifyLoader({ src, width, height, crop }) {
3387
3388
  if (!src) {
3388
3389
  return "";
3389
3390
  }
3390
- const url = new URL(src);
3391
+ const url = new URL(src, PLACEHOLDER_DOMAIN);
3391
3392
  if (width) {
3392
3393
  url.searchParams.append("width", Math.round(width).toString());
3393
3394
  }
@@ -3397,7 +3398,7 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
3397
3398
  if (crop) {
3398
3399
  url.searchParams.append("crop", crop);
3399
3400
  }
3400
- return url.href;
3401
+ return url.href.replace(PLACEHOLDER_DOMAIN, "");
3401
3402
  }
3402
3403
  function unitsMatch(width = "100%", height = "auto") {
3403
3404
  return getUnitValueParts(width.toString()).unit === getUnitValueParts(height.toString()).unit;
@@ -3769,6 +3770,92 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
3769
3770
  }
3770
3771
  }
3771
3772
  }
3773
+ const OPTION_VALUE_SEPARATOR = ",";
3774
+ const V1_CONTROL_CHARS = {
3775
+ OPTION: ":",
3776
+ END_OF_PREFIX: ",",
3777
+ SEQUENCE_GAP: " ",
3778
+ RANGE: "-"
3779
+ };
3780
+ const isOptionValueCombinationInEncodedVariant = /* @__PURE__ */ (() => {
3781
+ const decodedOptionValues = /* @__PURE__ */ new Map();
3782
+ return function(targetOptionValueCombination, encodedVariantField) {
3783
+ var _a;
3784
+ if (targetOptionValueCombination.length === 0) {
3785
+ return false;
3786
+ }
3787
+ if (!decodedOptionValues.has(encodedVariantField)) {
3788
+ const decodedOptionValuesSet = /* @__PURE__ */ new Set();
3789
+ for (const optionValue of decodeEncodedVariant(encodedVariantField)) {
3790
+ decodedOptionValuesSet.add(optionValue.join(OPTION_VALUE_SEPARATOR));
3791
+ for (let i2 = 0; i2 < optionValue.length; i2++) {
3792
+ decodedOptionValuesSet.add(
3793
+ optionValue.slice(0, i2 + 1).join(OPTION_VALUE_SEPARATOR)
3794
+ );
3795
+ }
3796
+ }
3797
+ decodedOptionValues.set(encodedVariantField, decodedOptionValuesSet);
3798
+ }
3799
+ return Boolean(
3800
+ (_a = decodedOptionValues.get(encodedVariantField)) == null ? void 0 : _a.has(targetOptionValueCombination.join(OPTION_VALUE_SEPARATOR))
3801
+ );
3802
+ };
3803
+ })();
3804
+ function decodeEncodedVariant(encodedVariantField) {
3805
+ if (!encodedVariantField)
3806
+ return [];
3807
+ if (encodedVariantField.startsWith("v1_")) {
3808
+ return v1Decoder(stripVersion(encodedVariantField));
3809
+ }
3810
+ throw new Error("Unsupported option value encoding");
3811
+ }
3812
+ const stripVersion = (encodedVariantField) => encodedVariantField.replace(/^v1_/, "");
3813
+ function v1Decoder(encodedVariantField) {
3814
+ const tokenizer = /[ :,-]/g;
3815
+ let index2 = 0;
3816
+ let token;
3817
+ const options = [];
3818
+ const currentOptionValue = [];
3819
+ let depth = 0;
3820
+ let rangeStart = null;
3821
+ while (token = tokenizer.exec(encodedVariantField)) {
3822
+ const operation = token[0];
3823
+ const optionValueIndex = Number.parseInt(encodedVariantField.slice(index2, token.index)) || 0;
3824
+ if (rangeStart !== null) {
3825
+ for (; rangeStart < optionValueIndex; rangeStart++) {
3826
+ currentOptionValue[depth] = rangeStart;
3827
+ options.push([...currentOptionValue]);
3828
+ }
3829
+ rangeStart = null;
3830
+ }
3831
+ currentOptionValue[depth] = optionValueIndex;
3832
+ if (operation === V1_CONTROL_CHARS.RANGE) {
3833
+ rangeStart = optionValueIndex;
3834
+ } else if (operation === V1_CONTROL_CHARS.OPTION) {
3835
+ depth++;
3836
+ } else {
3837
+ if (operation === V1_CONTROL_CHARS.SEQUENCE_GAP || operation === V1_CONTROL_CHARS.END_OF_PREFIX && encodedVariantField[token.index - 1] !== V1_CONTROL_CHARS.END_OF_PREFIX) {
3838
+ options.push([...currentOptionValue]);
3839
+ }
3840
+ if (operation === V1_CONTROL_CHARS.END_OF_PREFIX) {
3841
+ currentOptionValue.pop();
3842
+ depth--;
3843
+ }
3844
+ }
3845
+ index2 = tokenizer.lastIndex;
3846
+ }
3847
+ const lastRangeStartIndex = encodedVariantField.lastIndexOf("-");
3848
+ if (rangeStart != null && lastRangeStartIndex > 0) {
3849
+ const finalValueIndex = parseInt(
3850
+ encodedVariantField.substring(lastRangeStartIndex + 1)
3851
+ );
3852
+ for (; rangeStart <= finalValueIndex; rangeStart++) {
3853
+ currentOptionValue[depth] = rangeStart;
3854
+ options.push([...currentOptionValue]);
3855
+ }
3856
+ }
3857
+ return options;
3858
+ }
3772
3859
  function parseMetafield(metafield) {
3773
3860
  if (!metafield.type) {
3774
3861
  const noTypeError = `parseMetafield(): The 'type' field is required in order to parse the Metafield.`;
@@ -3876,7 +3963,7 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
3876
3963
  return JSON.parse(json);
3877
3964
  }
3878
3965
  function ProductPrice(props) {
3879
- var _a, _b, _c, _d, _e, _f, _g;
3966
+ var _a, _b, _c, _d, _e, _f;
3880
3967
  const {
3881
3968
  priceType = "regular",
3882
3969
  variantId,
@@ -3895,23 +3982,16 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
3895
3982
  const variantPriceProperty = valueType === "max" ? "maxVariantPrice" : "minVariantPrice";
3896
3983
  if (priceType === "compareAt") {
3897
3984
  if (variantId && variant) {
3898
- if (variant.compareAtPriceV2) {
3899
- console.error(
3900
- "<ProductPrice> `compareAtPriceV2` is deprecated. Use `compareAtPrice` instead."
3901
- );
3902
- }
3903
- price = variant.compareAtPrice ?? variant.compareAtPriceV2;
3985
+ price = variant.compareAtPrice;
3904
3986
  } else {
3905
3987
  price = (_a = product == null ? void 0 : product.compareAtPriceRange) == null ? void 0 : _a[variantPriceProperty];
3906
3988
  }
3907
3989
  let priceAsNumber;
3908
3990
  if (variantId && variant) {
3909
- priceAsNumber = parseFloat(
3910
- ((_b = variant.price) == null ? void 0 : _b.amount) ?? ((_c = variant.priceV2) == null ? void 0 : _c.amount) ?? "0"
3911
- );
3991
+ priceAsNumber = parseFloat(((_b = variant.price) == null ? void 0 : _b.amount) ?? "0");
3912
3992
  } else {
3913
3993
  priceAsNumber = parseFloat(
3914
- ((_e = (_d = product == null ? void 0 : product.priceRange) == null ? void 0 : _d[variantPriceProperty]) == null ? void 0 : _e.amount) ?? "0"
3994
+ ((_d = (_c = product == null ? void 0 : product.priceRange) == null ? void 0 : _c[variantPriceProperty]) == null ? void 0 : _d.amount) ?? "0"
3915
3995
  );
3916
3996
  }
3917
3997
  const compareAtPriceAsNumber = parseFloat((price == null ? void 0 : price.amount) ?? "0");
@@ -3920,20 +4000,15 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
3920
4000
  }
3921
4001
  } else {
3922
4002
  if (variantId && variant) {
3923
- if (variant.priceV2) {
3924
- console.error(
3925
- "<ProductPrice> `priceV2` is deprecated. Use `price` instead."
3926
- );
3927
- }
3928
- price = variant.price ?? variant.priceV2;
4003
+ price = variant.price;
3929
4004
  if (valueType === "unit") {
3930
4005
  price = variant.unitPrice;
3931
4006
  measurement = variant.unitPriceMeasurement;
3932
4007
  }
3933
4008
  } else if (valueType === "max") {
3934
- price = (_f = product.priceRange) == null ? void 0 : _f.maxVariantPrice;
4009
+ price = (_e = product.priceRange) == null ? void 0 : _e.maxVariantPrice;
3935
4010
  } else {
3936
- price = (_g = product.priceRange) == null ? void 0 : _g.minVariantPrice;
4011
+ price = (_f = product.priceRange) == null ? void 0 : _f.minVariantPrice;
3937
4012
  }
3938
4013
  }
3939
4014
  if (!price) {
@@ -4302,9 +4377,11 @@ Refer to the authentication https://shopify.dev/api/storefront#authentication do
4302
4377
  exports2.Video = Video;
4303
4378
  exports2.createStorefrontClient = createStorefrontClient;
4304
4379
  exports2.customerAccountApiCustomScalars = customerAccountApiCustomScalars;
4380
+ exports2.decodeEncodedVariant = decodeEncodedVariant;
4305
4381
  exports2.flattenConnection = flattenConnection;
4306
4382
  exports2.getClientBrowserParameters = getClientBrowserParameters;
4307
4383
  exports2.getShopifyCookies = getShopifyCookies;
4384
+ exports2.isOptionValueCombinationInEncodedVariant = isOptionValueCombinationInEncodedVariant;
4308
4385
  exports2.parseGid = parseGid;
4309
4386
  exports2.parseMetafield = parseMetafield;
4310
4387
  exports2.sendShopifyAnalytics = sendShopifyAnalytics;