@shopify/hydrogen-react 2025.1.2 → 2025.1.4

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 (480) hide show
  1. package/dist/browser-dev/AddToCartButton.mjs.map +1 -1
  2. package/dist/browser-dev/BaseButton.mjs.map +1 -1
  3. package/dist/browser-dev/BuyNowButton.mjs.map +1 -1
  4. package/dist/browser-dev/CartCheckoutButton.mjs.map +1 -1
  5. package/dist/browser-dev/CartCost.mjs.map +1 -1
  6. package/dist/browser-dev/CartLineProvider.mjs.map +1 -1
  7. package/dist/browser-dev/CartLineQuantity.mjs.map +1 -1
  8. package/dist/browser-dev/CartLineQuantityAdjustButton.mjs.map +1 -1
  9. package/dist/browser-dev/CartProvider.mjs +4 -7
  10. package/dist/browser-dev/CartProvider.mjs.map +1 -1
  11. package/dist/browser-dev/ExternalVideo.mjs.map +1 -1
  12. package/dist/browser-dev/Image.mjs +2 -4
  13. package/dist/browser-dev/Image.mjs.map +1 -1
  14. package/dist/browser-dev/MediaFile.mjs.map +1 -1
  15. package/dist/browser-dev/ModelViewer.mjs.map +1 -1
  16. package/dist/browser-dev/Money.mjs.map +1 -1
  17. package/dist/browser-dev/ProductPrice.mjs.map +1 -1
  18. package/dist/browser-dev/ProductProvider.mjs +15 -12
  19. package/dist/browser-dev/ProductProvider.mjs.map +1 -1
  20. package/dist/browser-dev/RichText.components.mjs +2 -4
  21. package/dist/browser-dev/RichText.components.mjs.map +1 -1
  22. package/dist/browser-dev/RichText.mjs.map +1 -1
  23. package/dist/browser-dev/ShopPayButton.mjs.map +1 -1
  24. package/dist/browser-dev/ShopifyProvider.mjs +19 -2
  25. package/dist/browser-dev/ShopifyProvider.mjs.map +1 -1
  26. package/dist/browser-dev/Video.mjs.map +1 -1
  27. package/dist/browser-dev/_virtual/with-selector.mjs +3 -2
  28. package/dist/browser-dev/_virtual/with-selector.mjs.map +1 -1
  29. package/dist/browser-dev/_virtual/with-selector2.mjs +5 -0
  30. package/dist/browser-dev/_virtual/with-selector2.mjs.map +1 -0
  31. package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  32. package/dist/browser-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  33. package/dist/browser-dev/analytics-utils.mjs.map +1 -1
  34. package/dist/browser-dev/analytics.mjs +6 -9
  35. package/dist/browser-dev/analytics.mjs.map +1 -1
  36. package/dist/browser-dev/cart-hooks.mjs +25 -7
  37. package/dist/browser-dev/cart-hooks.mjs.map +1 -1
  38. package/dist/browser-dev/cookies-utils.mjs +5 -5
  39. package/dist/browser-dev/cookies-utils.mjs.map +1 -1
  40. package/dist/browser-dev/flatten-connection.mjs.map +1 -1
  41. package/dist/browser-dev/getProductOptions.mjs +2 -4
  42. package/dist/browser-dev/getProductOptions.mjs.map +1 -1
  43. package/dist/browser-dev/index.mjs +4 -0
  44. package/dist/browser-dev/index.mjs.map +1 -1
  45. package/dist/browser-dev/load-script.mjs.map +1 -1
  46. package/dist/browser-dev/node_modules/@xstate/fsm/es/index.mjs +10 -18
  47. package/dist/browser-dev/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  48. package/dist/browser-dev/node_modules/@xstate/react/es/fsm.mjs +5 -9
  49. package/dist/browser-dev/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
  50. package/dist/browser-dev/node_modules/@xstate/react/es/useConstant.mjs.map +1 -1
  51. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs +1 -2
  52. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
  53. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs +5 -10
  54. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
  55. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs +1 -2
  56. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
  57. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs +1 -2
  58. package/dist/browser-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
  59. package/dist/browser-dev/node_modules/use-sync-external-store/shim/index.mjs +1 -2
  60. package/dist/browser-dev/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
  61. package/dist/browser-dev/node_modules/use-sync-external-store/shim/with-selector.mjs +12 -7
  62. package/dist/browser-dev/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
  63. package/dist/browser-dev/optionValueDecoder.mjs +1 -2
  64. package/dist/browser-dev/optionValueDecoder.mjs.map +1 -1
  65. package/dist/browser-dev/packages/hydrogen-react/package.json.mjs +1 -1
  66. package/dist/browser-dev/parse-metafield.mjs +2 -2
  67. package/dist/browser-dev/parse-metafield.mjs.map +1 -1
  68. package/dist/browser-dev/storefront-client.mjs +1 -2
  69. package/dist/browser-dev/storefront-client.mjs.map +1 -1
  70. package/dist/browser-dev/tracking-utils.mjs +88 -0
  71. package/dist/browser-dev/tracking-utils.mjs.map +1 -0
  72. package/dist/browser-dev/useCartAPIStateMachine.mjs +6 -12
  73. package/dist/browser-dev/useCartAPIStateMachine.mjs.map +1 -1
  74. package/dist/browser-dev/useCartActions.mjs.map +1 -1
  75. package/dist/browser-dev/useMoney.mjs.map +1 -1
  76. package/dist/browser-dev/useSelectedOptionInUrlParam.mjs.map +1 -1
  77. package/dist/browser-dev/useShopifyCookies.mjs +97 -11
  78. package/dist/browser-dev/useShopifyCookies.mjs.map +1 -1
  79. package/dist/browser-prod/AddToCartButton.mjs.map +1 -1
  80. package/dist/browser-prod/BaseButton.mjs.map +1 -1
  81. package/dist/browser-prod/BuyNowButton.mjs.map +1 -1
  82. package/dist/browser-prod/CartCheckoutButton.mjs.map +1 -1
  83. package/dist/browser-prod/CartCost.mjs.map +1 -1
  84. package/dist/browser-prod/CartLineProvider.mjs.map +1 -1
  85. package/dist/browser-prod/CartLineQuantity.mjs.map +1 -1
  86. package/dist/browser-prod/CartLineQuantityAdjustButton.mjs.map +1 -1
  87. package/dist/browser-prod/CartProvider.mjs +4 -7
  88. package/dist/browser-prod/CartProvider.mjs.map +1 -1
  89. package/dist/browser-prod/ExternalVideo.mjs.map +1 -1
  90. package/dist/browser-prod/Image.mjs +2 -4
  91. package/dist/browser-prod/Image.mjs.map +1 -1
  92. package/dist/browser-prod/MediaFile.mjs.map +1 -1
  93. package/dist/browser-prod/ModelViewer.mjs.map +1 -1
  94. package/dist/browser-prod/Money.mjs.map +1 -1
  95. package/dist/browser-prod/ProductPrice.mjs.map +1 -1
  96. package/dist/browser-prod/ProductProvider.mjs +15 -12
  97. package/dist/browser-prod/ProductProvider.mjs.map +1 -1
  98. package/dist/browser-prod/RichText.components.mjs +2 -4
  99. package/dist/browser-prod/RichText.components.mjs.map +1 -1
  100. package/dist/browser-prod/RichText.mjs.map +1 -1
  101. package/dist/browser-prod/ShopPayButton.mjs.map +1 -1
  102. package/dist/browser-prod/ShopifyProvider.mjs +19 -2
  103. package/dist/browser-prod/ShopifyProvider.mjs.map +1 -1
  104. package/dist/browser-prod/Video.mjs.map +1 -1
  105. package/dist/browser-prod/_virtual/with-selector.mjs +3 -2
  106. package/dist/browser-prod/_virtual/with-selector.mjs.map +1 -1
  107. package/dist/browser-prod/_virtual/with-selector2.mjs +5 -0
  108. package/dist/browser-prod/_virtual/with-selector2.mjs.map +1 -0
  109. package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  110. package/dist/browser-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  111. package/dist/browser-prod/analytics-utils.mjs.map +1 -1
  112. package/dist/browser-prod/analytics.mjs +7 -11
  113. package/dist/browser-prod/analytics.mjs.map +1 -1
  114. package/dist/browser-prod/cart-hooks.mjs +25 -7
  115. package/dist/browser-prod/cart-hooks.mjs.map +1 -1
  116. package/dist/browser-prod/cookies-utils.mjs +5 -5
  117. package/dist/browser-prod/cookies-utils.mjs.map +1 -1
  118. package/dist/browser-prod/flatten-connection.mjs.map +1 -1
  119. package/dist/browser-prod/getProductOptions.mjs +2 -4
  120. package/dist/browser-prod/getProductOptions.mjs.map +1 -1
  121. package/dist/browser-prod/index.mjs +4 -0
  122. package/dist/browser-prod/index.mjs.map +1 -1
  123. package/dist/browser-prod/load-script.mjs.map +1 -1
  124. package/dist/browser-prod/node_modules/@xstate/fsm/es/index.mjs +10 -18
  125. package/dist/browser-prod/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  126. package/dist/browser-prod/node_modules/@xstate/react/es/fsm.mjs +5 -9
  127. package/dist/browser-prod/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
  128. package/dist/browser-prod/node_modules/@xstate/react/es/useConstant.mjs.map +1 -1
  129. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs +1 -2
  130. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
  131. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs +5 -10
  132. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
  133. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs +1 -2
  134. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
  135. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs +1 -2
  136. package/dist/browser-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
  137. package/dist/browser-prod/node_modules/use-sync-external-store/shim/index.mjs +1 -2
  138. package/dist/browser-prod/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
  139. package/dist/browser-prod/node_modules/use-sync-external-store/shim/with-selector.mjs +12 -7
  140. package/dist/browser-prod/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
  141. package/dist/browser-prod/optionValueDecoder.mjs +1 -2
  142. package/dist/browser-prod/optionValueDecoder.mjs.map +1 -1
  143. package/dist/browser-prod/packages/hydrogen-react/package.json.mjs +1 -1
  144. package/dist/browser-prod/parse-metafield.mjs +2 -2
  145. package/dist/browser-prod/parse-metafield.mjs.map +1 -1
  146. package/dist/browser-prod/storefront-client.mjs +1 -2
  147. package/dist/browser-prod/storefront-client.mjs.map +1 -1
  148. package/dist/browser-prod/tracking-utils.mjs +88 -0
  149. package/dist/browser-prod/tracking-utils.mjs.map +1 -0
  150. package/dist/browser-prod/useCartAPIStateMachine.mjs +6 -12
  151. package/dist/browser-prod/useCartAPIStateMachine.mjs.map +1 -1
  152. package/dist/browser-prod/useCartActions.mjs.map +1 -1
  153. package/dist/browser-prod/useMoney.mjs.map +1 -1
  154. package/dist/browser-prod/useSelectedOptionInUrlParam.mjs.map +1 -1
  155. package/dist/browser-prod/useShopifyCookies.mjs +97 -11
  156. package/dist/browser-prod/useShopifyCookies.mjs.map +1 -1
  157. package/dist/node-dev/AddToCartButton.js.map +1 -1
  158. package/dist/node-dev/AddToCartButton.mjs.map +1 -1
  159. package/dist/node-dev/BaseButton.js.map +1 -1
  160. package/dist/node-dev/BaseButton.mjs.map +1 -1
  161. package/dist/node-dev/BuyNowButton.js.map +1 -1
  162. package/dist/node-dev/BuyNowButton.mjs.map +1 -1
  163. package/dist/node-dev/CartCheckoutButton.js.map +1 -1
  164. package/dist/node-dev/CartCheckoutButton.mjs.map +1 -1
  165. package/dist/node-dev/CartCost.js.map +1 -1
  166. package/dist/node-dev/CartCost.mjs.map +1 -1
  167. package/dist/node-dev/CartLineProvider.js.map +1 -1
  168. package/dist/node-dev/CartLineProvider.mjs.map +1 -1
  169. package/dist/node-dev/CartLineQuantity.js.map +1 -1
  170. package/dist/node-dev/CartLineQuantity.mjs.map +1 -1
  171. package/dist/node-dev/CartLineQuantityAdjustButton.js.map +1 -1
  172. package/dist/node-dev/CartLineQuantityAdjustButton.mjs.map +1 -1
  173. package/dist/node-dev/CartProvider.js +3 -6
  174. package/dist/node-dev/CartProvider.js.map +1 -1
  175. package/dist/node-dev/CartProvider.mjs +4 -7
  176. package/dist/node-dev/CartProvider.mjs.map +1 -1
  177. package/dist/node-dev/ExternalVideo.js.map +1 -1
  178. package/dist/node-dev/ExternalVideo.mjs.map +1 -1
  179. package/dist/node-dev/Image.js +2 -4
  180. package/dist/node-dev/Image.js.map +1 -1
  181. package/dist/node-dev/Image.mjs +2 -4
  182. package/dist/node-dev/Image.mjs.map +1 -1
  183. package/dist/node-dev/MediaFile.js.map +1 -1
  184. package/dist/node-dev/MediaFile.mjs.map +1 -1
  185. package/dist/node-dev/ModelViewer.js.map +1 -1
  186. package/dist/node-dev/ModelViewer.mjs.map +1 -1
  187. package/dist/node-dev/Money.js.map +1 -1
  188. package/dist/node-dev/Money.mjs.map +1 -1
  189. package/dist/node-dev/ProductPrice.js.map +1 -1
  190. package/dist/node-dev/ProductPrice.mjs.map +1 -1
  191. package/dist/node-dev/ProductProvider.js +14 -11
  192. package/dist/node-dev/ProductProvider.js.map +1 -1
  193. package/dist/node-dev/ProductProvider.mjs +15 -12
  194. package/dist/node-dev/ProductProvider.mjs.map +1 -1
  195. package/dist/node-dev/RichText.components.js +2 -4
  196. package/dist/node-dev/RichText.components.js.map +1 -1
  197. package/dist/node-dev/RichText.components.mjs +2 -4
  198. package/dist/node-dev/RichText.components.mjs.map +1 -1
  199. package/dist/node-dev/RichText.js.map +1 -1
  200. package/dist/node-dev/RichText.mjs.map +1 -1
  201. package/dist/node-dev/ShopPayButton.js.map +1 -1
  202. package/dist/node-dev/ShopPayButton.mjs.map +1 -1
  203. package/dist/node-dev/ShopifyProvider.js +18 -1
  204. package/dist/node-dev/ShopifyProvider.js.map +1 -1
  205. package/dist/node-dev/ShopifyProvider.mjs +19 -2
  206. package/dist/node-dev/ShopifyProvider.mjs.map +1 -1
  207. package/dist/node-dev/Video.js.map +1 -1
  208. package/dist/node-dev/Video.mjs.map +1 -1
  209. package/dist/node-dev/_virtual/with-selector.js +3 -2
  210. package/dist/node-dev/_virtual/with-selector.js.map +1 -1
  211. package/dist/node-dev/_virtual/with-selector.mjs +3 -2
  212. package/dist/node-dev/_virtual/with-selector.mjs.map +1 -1
  213. package/dist/node-dev/_virtual/with-selector2.js +5 -0
  214. package/dist/node-dev/_virtual/with-selector2.js.map +1 -0
  215. package/dist/node-dev/_virtual/with-selector2.mjs +5 -0
  216. package/dist/node-dev/_virtual/with-selector2.mjs.map +1 -0
  217. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js.map +1 -1
  218. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  219. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.js.map +1 -1
  220. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  221. package/dist/node-dev/analytics-utils.js.map +1 -1
  222. package/dist/node-dev/analytics-utils.mjs.map +1 -1
  223. package/dist/node-dev/analytics.js +6 -9
  224. package/dist/node-dev/analytics.js.map +1 -1
  225. package/dist/node-dev/analytics.mjs +6 -9
  226. package/dist/node-dev/analytics.mjs.map +1 -1
  227. package/dist/node-dev/cart-hooks.js +24 -6
  228. package/dist/node-dev/cart-hooks.js.map +1 -1
  229. package/dist/node-dev/cart-hooks.mjs +25 -7
  230. package/dist/node-dev/cart-hooks.mjs.map +1 -1
  231. package/dist/node-dev/cookies-utils.js +4 -4
  232. package/dist/node-dev/cookies-utils.js.map +1 -1
  233. package/dist/node-dev/cookies-utils.mjs +5 -5
  234. package/dist/node-dev/cookies-utils.mjs.map +1 -1
  235. package/dist/node-dev/flatten-connection.js.map +1 -1
  236. package/dist/node-dev/flatten-connection.mjs.map +1 -1
  237. package/dist/node-dev/getProductOptions.js +2 -4
  238. package/dist/node-dev/getProductOptions.js.map +1 -1
  239. package/dist/node-dev/getProductOptions.mjs +2 -4
  240. package/dist/node-dev/getProductOptions.mjs.map +1 -1
  241. package/dist/node-dev/index.js +4 -0
  242. package/dist/node-dev/index.js.map +1 -1
  243. package/dist/node-dev/index.mjs +4 -0
  244. package/dist/node-dev/index.mjs.map +1 -1
  245. package/dist/node-dev/load-script.js.map +1 -1
  246. package/dist/node-dev/load-script.mjs.map +1 -1
  247. package/dist/node-dev/node_modules/@xstate/fsm/es/index.js +10 -18
  248. package/dist/node-dev/node_modules/@xstate/fsm/es/index.js.map +1 -1
  249. package/dist/node-dev/node_modules/@xstate/fsm/es/index.mjs +10 -18
  250. package/dist/node-dev/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  251. package/dist/node-dev/node_modules/@xstate/react/es/fsm.js +5 -9
  252. package/dist/node-dev/node_modules/@xstate/react/es/fsm.js.map +1 -1
  253. package/dist/node-dev/node_modules/@xstate/react/es/fsm.mjs +5 -9
  254. package/dist/node-dev/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
  255. package/dist/node-dev/node_modules/@xstate/react/es/useConstant.js.map +1 -1
  256. package/dist/node-dev/node_modules/@xstate/react/es/useConstant.mjs.map +1 -1
  257. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +1 -2
  258. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
  259. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs +1 -2
  260. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
  261. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +5 -10
  262. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -1
  263. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs +5 -10
  264. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
  265. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +1 -2
  266. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
  267. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs +1 -2
  268. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
  269. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js +1 -2
  270. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
  271. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs +1 -2
  272. package/dist/node-dev/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
  273. package/dist/node-dev/node_modules/use-sync-external-store/shim/index.js +1 -2
  274. package/dist/node-dev/node_modules/use-sync-external-store/shim/index.js.map +1 -1
  275. package/dist/node-dev/node_modules/use-sync-external-store/shim/index.mjs +1 -2
  276. package/dist/node-dev/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
  277. package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.js +12 -7
  278. package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -1
  279. package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.mjs +12 -7
  280. package/dist/node-dev/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
  281. package/dist/node-dev/optionValueDecoder.js +1 -2
  282. package/dist/node-dev/optionValueDecoder.js.map +1 -1
  283. package/dist/node-dev/optionValueDecoder.mjs +1 -2
  284. package/dist/node-dev/optionValueDecoder.mjs.map +1 -1
  285. package/dist/node-dev/packages/hydrogen-react/package.json.js +1 -1
  286. package/dist/node-dev/packages/hydrogen-react/package.json.mjs +1 -1
  287. package/dist/node-dev/parse-metafield.js +2 -2
  288. package/dist/node-dev/parse-metafield.js.map +1 -1
  289. package/dist/node-dev/parse-metafield.mjs +2 -2
  290. package/dist/node-dev/parse-metafield.mjs.map +1 -1
  291. package/dist/node-dev/storefront-client.js +1 -2
  292. package/dist/node-dev/storefront-client.js.map +1 -1
  293. package/dist/node-dev/storefront-client.mjs +1 -2
  294. package/dist/node-dev/storefront-client.mjs.map +1 -1
  295. package/dist/node-dev/tracking-utils.js +88 -0
  296. package/dist/node-dev/tracking-utils.js.map +1 -0
  297. package/dist/node-dev/tracking-utils.mjs +88 -0
  298. package/dist/node-dev/tracking-utils.mjs.map +1 -0
  299. package/dist/node-dev/useCartAPIStateMachine.js +6 -12
  300. package/dist/node-dev/useCartAPIStateMachine.js.map +1 -1
  301. package/dist/node-dev/useCartAPIStateMachine.mjs +6 -12
  302. package/dist/node-dev/useCartAPIStateMachine.mjs.map +1 -1
  303. package/dist/node-dev/useCartActions.js.map +1 -1
  304. package/dist/node-dev/useCartActions.mjs.map +1 -1
  305. package/dist/node-dev/useMoney.js.map +1 -1
  306. package/dist/node-dev/useMoney.mjs.map +1 -1
  307. package/dist/node-dev/useSelectedOptionInUrlParam.js.map +1 -1
  308. package/dist/node-dev/useSelectedOptionInUrlParam.mjs.map +1 -1
  309. package/dist/node-dev/useShopifyCookies.js +95 -9
  310. package/dist/node-dev/useShopifyCookies.js.map +1 -1
  311. package/dist/node-dev/useShopifyCookies.mjs +97 -11
  312. package/dist/node-dev/useShopifyCookies.mjs.map +1 -1
  313. package/dist/node-prod/AddToCartButton.js.map +1 -1
  314. package/dist/node-prod/AddToCartButton.mjs.map +1 -1
  315. package/dist/node-prod/BaseButton.js.map +1 -1
  316. package/dist/node-prod/BaseButton.mjs.map +1 -1
  317. package/dist/node-prod/BuyNowButton.js.map +1 -1
  318. package/dist/node-prod/BuyNowButton.mjs.map +1 -1
  319. package/dist/node-prod/CartCheckoutButton.js.map +1 -1
  320. package/dist/node-prod/CartCheckoutButton.mjs.map +1 -1
  321. package/dist/node-prod/CartCost.js.map +1 -1
  322. package/dist/node-prod/CartCost.mjs.map +1 -1
  323. package/dist/node-prod/CartLineProvider.js.map +1 -1
  324. package/dist/node-prod/CartLineProvider.mjs.map +1 -1
  325. package/dist/node-prod/CartLineQuantity.js.map +1 -1
  326. package/dist/node-prod/CartLineQuantity.mjs.map +1 -1
  327. package/dist/node-prod/CartLineQuantityAdjustButton.js.map +1 -1
  328. package/dist/node-prod/CartLineQuantityAdjustButton.mjs.map +1 -1
  329. package/dist/node-prod/CartProvider.js +3 -6
  330. package/dist/node-prod/CartProvider.js.map +1 -1
  331. package/dist/node-prod/CartProvider.mjs +4 -7
  332. package/dist/node-prod/CartProvider.mjs.map +1 -1
  333. package/dist/node-prod/ExternalVideo.js.map +1 -1
  334. package/dist/node-prod/ExternalVideo.mjs.map +1 -1
  335. package/dist/node-prod/Image.js +2 -4
  336. package/dist/node-prod/Image.js.map +1 -1
  337. package/dist/node-prod/Image.mjs +2 -4
  338. package/dist/node-prod/Image.mjs.map +1 -1
  339. package/dist/node-prod/MediaFile.js.map +1 -1
  340. package/dist/node-prod/MediaFile.mjs.map +1 -1
  341. package/dist/node-prod/ModelViewer.js.map +1 -1
  342. package/dist/node-prod/ModelViewer.mjs.map +1 -1
  343. package/dist/node-prod/Money.js.map +1 -1
  344. package/dist/node-prod/Money.mjs.map +1 -1
  345. package/dist/node-prod/ProductPrice.js.map +1 -1
  346. package/dist/node-prod/ProductPrice.mjs.map +1 -1
  347. package/dist/node-prod/ProductProvider.js +14 -11
  348. package/dist/node-prod/ProductProvider.js.map +1 -1
  349. package/dist/node-prod/ProductProvider.mjs +15 -12
  350. package/dist/node-prod/ProductProvider.mjs.map +1 -1
  351. package/dist/node-prod/RichText.components.js +2 -4
  352. package/dist/node-prod/RichText.components.js.map +1 -1
  353. package/dist/node-prod/RichText.components.mjs +2 -4
  354. package/dist/node-prod/RichText.components.mjs.map +1 -1
  355. package/dist/node-prod/RichText.js.map +1 -1
  356. package/dist/node-prod/RichText.mjs.map +1 -1
  357. package/dist/node-prod/ShopPayButton.js.map +1 -1
  358. package/dist/node-prod/ShopPayButton.mjs.map +1 -1
  359. package/dist/node-prod/ShopifyProvider.js +18 -1
  360. package/dist/node-prod/ShopifyProvider.js.map +1 -1
  361. package/dist/node-prod/ShopifyProvider.mjs +19 -2
  362. package/dist/node-prod/ShopifyProvider.mjs.map +1 -1
  363. package/dist/node-prod/Video.js.map +1 -1
  364. package/dist/node-prod/Video.mjs.map +1 -1
  365. package/dist/node-prod/_virtual/with-selector.js +3 -2
  366. package/dist/node-prod/_virtual/with-selector.js.map +1 -1
  367. package/dist/node-prod/_virtual/with-selector.mjs +3 -2
  368. package/dist/node-prod/_virtual/with-selector.mjs.map +1 -1
  369. package/dist/node-prod/_virtual/with-selector2.js +5 -0
  370. package/dist/node-prod/_virtual/with-selector2.js.map +1 -0
  371. package/dist/node-prod/_virtual/with-selector2.mjs +5 -0
  372. package/dist/node-prod/_virtual/with-selector2.mjs.map +1 -0
  373. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js.map +1 -1
  374. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -1
  375. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.js.map +1 -1
  376. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -1
  377. package/dist/node-prod/analytics-utils.js.map +1 -1
  378. package/dist/node-prod/analytics-utils.mjs.map +1 -1
  379. package/dist/node-prod/analytics.js +7 -11
  380. package/dist/node-prod/analytics.js.map +1 -1
  381. package/dist/node-prod/analytics.mjs +7 -11
  382. package/dist/node-prod/analytics.mjs.map +1 -1
  383. package/dist/node-prod/cart-hooks.js +24 -6
  384. package/dist/node-prod/cart-hooks.js.map +1 -1
  385. package/dist/node-prod/cart-hooks.mjs +25 -7
  386. package/dist/node-prod/cart-hooks.mjs.map +1 -1
  387. package/dist/node-prod/cookies-utils.js +4 -4
  388. package/dist/node-prod/cookies-utils.js.map +1 -1
  389. package/dist/node-prod/cookies-utils.mjs +5 -5
  390. package/dist/node-prod/cookies-utils.mjs.map +1 -1
  391. package/dist/node-prod/flatten-connection.js.map +1 -1
  392. package/dist/node-prod/flatten-connection.mjs.map +1 -1
  393. package/dist/node-prod/getProductOptions.js +2 -4
  394. package/dist/node-prod/getProductOptions.js.map +1 -1
  395. package/dist/node-prod/getProductOptions.mjs +2 -4
  396. package/dist/node-prod/getProductOptions.mjs.map +1 -1
  397. package/dist/node-prod/index.js +4 -0
  398. package/dist/node-prod/index.js.map +1 -1
  399. package/dist/node-prod/index.mjs +4 -0
  400. package/dist/node-prod/index.mjs.map +1 -1
  401. package/dist/node-prod/load-script.js.map +1 -1
  402. package/dist/node-prod/load-script.mjs.map +1 -1
  403. package/dist/node-prod/node_modules/@xstate/fsm/es/index.js +10 -18
  404. package/dist/node-prod/node_modules/@xstate/fsm/es/index.js.map +1 -1
  405. package/dist/node-prod/node_modules/@xstate/fsm/es/index.mjs +10 -18
  406. package/dist/node-prod/node_modules/@xstate/fsm/es/index.mjs.map +1 -1
  407. package/dist/node-prod/node_modules/@xstate/react/es/fsm.js +5 -9
  408. package/dist/node-prod/node_modules/@xstate/react/es/fsm.js.map +1 -1
  409. package/dist/node-prod/node_modules/@xstate/react/es/fsm.mjs +5 -9
  410. package/dist/node-prod/node_modules/@xstate/react/es/fsm.mjs.map +1 -1
  411. package/dist/node-prod/node_modules/@xstate/react/es/useConstant.js.map +1 -1
  412. package/dist/node-prod/node_modules/@xstate/react/es/useConstant.mjs.map +1 -1
  413. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +1 -2
  414. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
  415. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs +1 -2
  416. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.mjs.map +1 -1
  417. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +5 -10
  418. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js.map +1 -1
  419. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs +5 -10
  420. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.mjs.map +1 -1
  421. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +1 -2
  422. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
  423. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs +1 -2
  424. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.mjs.map +1 -1
  425. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js +1 -2
  426. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
  427. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs +1 -2
  428. package/dist/node-prod/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.mjs.map +1 -1
  429. package/dist/node-prod/node_modules/use-sync-external-store/shim/index.js +1 -2
  430. package/dist/node-prod/node_modules/use-sync-external-store/shim/index.js.map +1 -1
  431. package/dist/node-prod/node_modules/use-sync-external-store/shim/index.mjs +1 -2
  432. package/dist/node-prod/node_modules/use-sync-external-store/shim/index.mjs.map +1 -1
  433. package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.js +12 -7
  434. package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.js.map +1 -1
  435. package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.mjs +12 -7
  436. package/dist/node-prod/node_modules/use-sync-external-store/shim/with-selector.mjs.map +1 -1
  437. package/dist/node-prod/optionValueDecoder.js +1 -2
  438. package/dist/node-prod/optionValueDecoder.js.map +1 -1
  439. package/dist/node-prod/optionValueDecoder.mjs +1 -2
  440. package/dist/node-prod/optionValueDecoder.mjs.map +1 -1
  441. package/dist/node-prod/packages/hydrogen-react/package.json.js +1 -1
  442. package/dist/node-prod/packages/hydrogen-react/package.json.mjs +1 -1
  443. package/dist/node-prod/parse-metafield.js +2 -2
  444. package/dist/node-prod/parse-metafield.js.map +1 -1
  445. package/dist/node-prod/parse-metafield.mjs +2 -2
  446. package/dist/node-prod/parse-metafield.mjs.map +1 -1
  447. package/dist/node-prod/storefront-client.js +1 -2
  448. package/dist/node-prod/storefront-client.js.map +1 -1
  449. package/dist/node-prod/storefront-client.mjs +1 -2
  450. package/dist/node-prod/storefront-client.mjs.map +1 -1
  451. package/dist/node-prod/tracking-utils.js +88 -0
  452. package/dist/node-prod/tracking-utils.js.map +1 -0
  453. package/dist/node-prod/tracking-utils.mjs +88 -0
  454. package/dist/node-prod/tracking-utils.mjs.map +1 -0
  455. package/dist/node-prod/useCartAPIStateMachine.js +6 -12
  456. package/dist/node-prod/useCartAPIStateMachine.js.map +1 -1
  457. package/dist/node-prod/useCartAPIStateMachine.mjs +6 -12
  458. package/dist/node-prod/useCartAPIStateMachine.mjs.map +1 -1
  459. package/dist/node-prod/useCartActions.js.map +1 -1
  460. package/dist/node-prod/useCartActions.mjs.map +1 -1
  461. package/dist/node-prod/useMoney.js.map +1 -1
  462. package/dist/node-prod/useMoney.mjs.map +1 -1
  463. package/dist/node-prod/useSelectedOptionInUrlParam.js.map +1 -1
  464. package/dist/node-prod/useSelectedOptionInUrlParam.mjs.map +1 -1
  465. package/dist/node-prod/useShopifyCookies.js +95 -9
  466. package/dist/node-prod/useShopifyCookies.js.map +1 -1
  467. package/dist/node-prod/useShopifyCookies.mjs +97 -11
  468. package/dist/node-prod/useShopifyCookies.mjs.map +1 -1
  469. package/dist/types/Image.d.ts +1 -1
  470. package/dist/types/ShopifyProvider.d.ts +5 -0
  471. package/dist/types/cookies-utils.d.ts +4 -0
  472. package/dist/types/index.d.cts +1 -0
  473. package/dist/types/index.d.ts +1 -0
  474. package/dist/types/tracking-utils.d.ts +22 -0
  475. package/dist/types/useShopifyCookies.d.ts +28 -2
  476. package/dist/umd/hydrogen-react.dev.js +543 -367
  477. package/dist/umd/hydrogen-react.dev.js.map +1 -1
  478. package/dist/umd/hydrogen-react.prod.js +18 -18
  479. package/dist/umd/hydrogen-react.prod.js.map +1 -1
  480. package/package.json +35 -22
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-schema-trekkie-storefront-page-view.mjs","sources":["../../src/analytics-schema-trekkie-storefront-page-view.ts"],"sourcesContent":["import {\n ShopifyPageViewPayload,\n ShopifyMonorailPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {ShopifyAppId} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'trekkie_storefront_page_view/1.4';\nconst OXYGEN_DOMAIN = 'myshopify.dev';\n\nexport function pageView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const {id, resource} = parseGid(pageViewPayload.resourceId);\n const resourceType = resource ? resource.toLowerCase() : undefined;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n pageType: pageViewPayload.pageType,\n customerId: parseInt(parseGid(pageViewPayload.customerId).id || '0'),\n resourceType,\n resourceId: parseInt(id),\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailPayload {\n return {\n appClientId: payload.shopifySalesChannel\n ? ShopifyAppId[payload.shopifySalesChannel]\n : ShopifyAppId.headless,\n isMerchantRequest: isMerchantRequest(payload.url),\n hydrogenSubchannelId:\n payload.storefrontId || payload.hydrogenSubchannelId || '0',\n\n isPersistentCookie: payload.hasUserConsent,\n uniqToken: payload.uniqueToken,\n visitToken: payload.visitToken,\n microSessionId: buildUUID(),\n microSessionCount: 1,\n\n url: payload.url,\n path: payload.path,\n search: payload.search,\n referrer: payload.referrer,\n title: payload.title,\n\n shopId: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n contentLanguage: payload.acceptedLanguage || 'en',\n };\n}\n\nfunction isMerchantRequest(url: string): boolean {\n if (typeof url !== 'string') {\n return false;\n }\n const hostname = new URL(url).hostname;\n if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === 'localhost') {\n return true;\n }\n return false;\n}\n"],"names":[],"mappings":";;;AASA,MAAM,YAAY;AAClB,MAAM,gBAAgB;AAEf,SAAS,SACd,SACwB;AACxB,QAAM,kBAAkB;AACxB,QAAM,EAAC,IAAI,SAAA,IAAY,SAAS,gBAAgB,UAAU;AAC1D,QAAM,eAAe,WAAW,SAAS,YAAgB,IAAA;AAClD,SAAA;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,UACE,UAAU,gBAAgB;AAAA,UAC1B,YAAY,SAAS,SAAS,gBAAgB,UAAU,EAAE,MAAM,GAAG;AAAA,UACnE;AAAA,UACA,YAAY,SAAS,EAAE;AAAA,QACzB;AAAA,QACA,cAAc,eAAe;AAAA,MAC/B;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,cACP,SACwB;AACjB,SAAA;AAAA,IACL,aAAa,QAAQ,sBACjB,aAAa,QAAQ,mBAAmB,IACxC,aAAa;AAAA,IACjB,mBAAmB,kBAAkB,QAAQ,GAAG;AAAA,IAChD,sBACE,QAAQ,gBAAgB,QAAQ,wBAAwB;AAAA,IAE1D,oBAAoB,QAAQ;AAAA,IAC5B,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,UAAU;AAAA,IAC1B,mBAAmB;AAAA,IAEnB,KAAK,QAAQ;AAAA,IACb,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,OAAO,QAAQ;AAAA,IAEf,QAAQ,SAAS,SAAS,QAAQ,MAAM,EAAE,EAAE;AAAA,IAC5C,UAAU,QAAQ;AAAA,IAClB,iBAAiB,QAAQ,oBAAoB;AAAA,EAAA;AAEjD;AAEA,SAAS,kBAAkB,KAAsB;AAC3C,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EACT;AACA,QAAM,WAAW,IAAI,IAAI,GAAG,EAAE;AAC9B,MAAI,SAAS,QAAQ,aAAa,MAAM,MAAM,aAAa,aAAa;AAC/D,WAAA;AAAA,EACT;AACO,SAAA;AACT;"}
1
+ {"version":3,"file":"analytics-schema-trekkie-storefront-page-view.mjs","sources":["../../src/analytics-schema-trekkie-storefront-page-view.ts"],"sourcesContent":["import {\n ShopifyPageViewPayload,\n ShopifyMonorailPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {ShopifyAppId} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'trekkie_storefront_page_view/1.4';\nconst OXYGEN_DOMAIN = 'myshopify.dev';\n\nexport function pageView(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const {id, resource} = parseGid(pageViewPayload.resourceId);\n const resourceType = resource ? resource.toLowerCase() : undefined;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n pageType: pageViewPayload.pageType,\n customerId: parseInt(parseGid(pageViewPayload.customerId).id || '0'),\n resourceType,\n resourceId: parseInt(id),\n },\n formatPayload(pageViewPayload),\n ),\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyPageViewPayload,\n): ShopifyMonorailPayload {\n return {\n appClientId: payload.shopifySalesChannel\n ? ShopifyAppId[payload.shopifySalesChannel]\n : ShopifyAppId.headless,\n isMerchantRequest: isMerchantRequest(payload.url),\n hydrogenSubchannelId:\n payload.storefrontId || payload.hydrogenSubchannelId || '0',\n\n isPersistentCookie: payload.hasUserConsent,\n uniqToken: payload.uniqueToken,\n visitToken: payload.visitToken,\n microSessionId: buildUUID(),\n microSessionCount: 1,\n\n url: payload.url,\n path: payload.path,\n search: payload.search,\n referrer: payload.referrer,\n title: payload.title,\n\n shopId: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n contentLanguage: payload.acceptedLanguage || 'en',\n };\n}\n\nfunction isMerchantRequest(url: string): boolean {\n if (typeof url !== 'string') {\n return false;\n }\n const hostname = new URL(url).hostname;\n if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === 'localhost') {\n return true;\n }\n return false;\n}\n"],"names":[],"mappings":";;;AASA,MAAM,YAAY;AAClB,MAAM,gBAAgB;AAEf,SAAS,SACd,SACwB;AACxB,QAAM,kBAAkB;AACxB,QAAM,EAAC,IAAI,SAAA,IAAY,SAAS,gBAAgB,UAAU;AAC1D,QAAM,eAAe,WAAW,SAAS,YAAgB,IAAA;AAClD,SAAA;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,UACE,UAAU,gBAAgB;AAAA,UAC1B,YAAY,SAAS,SAAS,gBAAgB,UAAU,EAAE,MAAM,GAAG;AAAA,UACnE;AAAA,UACA,YAAY,SAAS,EAAE;AAAA,QACzB;AAAA,QACA,cAAc,eAAe;AAAA,MAAA;AAAA,IAC/B;AAAA,EAEJ;AACF;AAEA,SAAS,cACP,SACwB;AACjB,SAAA;AAAA,IACL,aAAa,QAAQ,sBACjB,aAAa,QAAQ,mBAAmB,IACxC,aAAa;AAAA,IACjB,mBAAmB,kBAAkB,QAAQ,GAAG;AAAA,IAChD,sBACE,QAAQ,gBAAgB,QAAQ,wBAAwB;AAAA,IAE1D,oBAAoB,QAAQ;AAAA,IAC5B,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,UAAU;AAAA,IAC1B,mBAAmB;AAAA,IAEnB,KAAK,QAAQ;AAAA,IACb,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,OAAO,QAAQ;AAAA,IAEf,QAAQ,SAAS,SAAS,QAAQ,MAAM,EAAE,EAAE;AAAA,IAC5C,UAAU,QAAQ;AAAA,IAClB,iBAAiB,QAAQ,oBAAoB;AAAA,EAC/C;AACF;AAEA,SAAS,kBAAkB,KAAsB;AAC3C,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EAAA;AAET,QAAM,WAAW,IAAI,IAAI,GAAG,EAAE;AAC9B,MAAI,SAAS,QAAQ,aAAa,MAAM,MAAM,aAAa,aAAa;AAC/D,WAAA;AAAA,EAAA;AAEF,SAAA;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-utils.mjs","sources":["../../src/analytics-utils.ts"],"sourcesContent":["import type {\n ShopifyMonorailPayload,\n ShopifyMonorailEvent,\n ShopifyGid,\n} from './analytics-types.js';\n\n/**\n * Builds a Shopify Monorail event from a Shopify Monorail payload and a schema ID.\n * @param payload - The Monorail payload\n * @param schemaId - The schema ID to use\n * @returns The formatted payload\n **/\nexport function schemaWrapper(\n schemaId: string,\n payload: ShopifyMonorailPayload,\n): ShopifyMonorailEvent {\n return {\n schema_id: schemaId,\n payload,\n metadata: {\n event_created_at_ms: Date.now(),\n },\n };\n}\n\n/**\n * Parses global id (gid) and returns the resource type and id.\n * @see https://shopify.dev/api/usage/gids\n * @param gid - A shopify GID (string)\n *\n * @example\n * ```ts\n * const {id, resource} = parseGid('gid://shopify/Order/123')\n * // => id = \"123\", resource = 'Order'\n *\n * * const {id, resource} = parseGid('gid://shopify/Cart/abc123')\n * // => id = \"abc123\", resource = 'Cart'\n * ```\n **/\nexport function parseGid(gid: string | undefined): ShopifyGid {\n const defaultReturn: ShopifyGid = {\n id: '',\n resource: null,\n resourceId: null,\n search: '',\n searchParams: new URLSearchParams(),\n hash: '',\n };\n\n if (typeof gid !== 'string') {\n return defaultReturn;\n }\n\n try {\n const {search, searchParams, pathname, hash} = new URL(gid);\n const pathnameParts = pathname.split('/');\n const lastPathnamePart = pathnameParts[pathnameParts.length - 1];\n const resourcePart = pathnameParts[pathnameParts.length - 2];\n\n if (!lastPathnamePart || !resourcePart) {\n return defaultReturn;\n }\n\n const id = `${lastPathnamePart}${search}${hash}` || '';\n const resourceId = lastPathnamePart || null;\n const resource = resourcePart ?? null;\n\n return {id, resource, resourceId, search, searchParams, hash};\n } catch {\n return defaultReturn;\n }\n}\n\n/**\n * Filters properties from an object and returns a new object with only the properties that have a truthy value.\n * @param keyValuePairs - An object of key-value pairs\n * @param formattedData - An object which will hold the truthy values\n * @returns The formatted object\n **/\nexport function addDataIf(\n keyValuePairs: ShopifyMonorailPayload,\n formattedData: ShopifyMonorailPayload,\n): ShopifyMonorailPayload {\n if (typeof keyValuePairs !== 'object') {\n return {};\n }\n Object.entries(keyValuePairs).forEach(([key, value]) => {\n if (value) {\n formattedData[key] = value;\n }\n });\n return formattedData;\n}\n\n/**\n * Utility that errors if a function is called on the server.\n * @param fnName - The name of the function\n * @returns A boolean\n **/\nexport function errorIfServer(fnName: string): boolean {\n if (typeof document === 'undefined') {\n console.error(\n `${fnName} should only be used within the useEffect callback or event handlers`,\n );\n return true;\n }\n return false;\n}\n"],"names":[],"mappings":"AAYgB,SAAA,cACd,UACA,SACsB;AACf,SAAA;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB,KAAK,IAAI;AAAA,IAChC;AAAA,EAAA;AAEJ;AAgBO,SAAS,SAAS,KAAqC;AAC5D,QAAM,gBAA4B;AAAA,IAChC,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,cAAc,IAAI,gBAAgB;AAAA,IAClC,MAAM;AAAA,EAAA;AAGJ,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EACT;AAEI,MAAA;AACI,UAAA,EAAC,QAAQ,cAAc,UAAU,SAAQ,IAAI,IAAI,GAAG;AACpD,UAAA,gBAAgB,SAAS,MAAM,GAAG;AACxC,UAAM,mBAAmB,cAAc,cAAc,SAAS,CAAC;AAC/D,UAAM,eAAe,cAAc,cAAc,SAAS,CAAC;AAEvD,QAAA,CAAC,oBAAoB,CAAC,cAAc;AAC/B,aAAA;AAAA,IACT;AAEA,UAAM,KAAK,GAAG,gBAAgB,GAAG,MAAM,GAAG,IAAI,MAAM;AACpD,UAAM,aAAa,oBAAoB;AACvC,UAAM,WAAW,gBAAgB;AAEjC,WAAO,EAAC,IAAI,UAAU,YAAY,QAAQ,cAAc;EAAI,QACtD;AACC,WAAA;AAAA,EACT;AACF;AAQgB,SAAA,UACd,eACA,eACwB;AACpB,MAAA,OAAO,kBAAkB,UAAU;AACrC,WAAO;EACT;AACO,SAAA,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,QAAI,OAAO;AACT,oBAAc,GAAG,IAAI;AAAA,IACvB;AAAA,EAAA,CACD;AACM,SAAA;AACT;AAOO,SAAS,cAAc,QAAyB;AACjD,MAAA,OAAO,aAAa,aAAa;AAC3B,YAAA;AAAA,MACN,GAAG,MAAM;AAAA,IAAA;AAEJ,WAAA;AAAA,EACT;AACO,SAAA;AACT;"}
1
+ {"version":3,"file":"analytics-utils.mjs","sources":["../../src/analytics-utils.ts"],"sourcesContent":["import type {\n ShopifyMonorailPayload,\n ShopifyMonorailEvent,\n ShopifyGid,\n} from './analytics-types.js';\n\n/**\n * Builds a Shopify Monorail event from a Shopify Monorail payload and a schema ID.\n * @param payload - The Monorail payload\n * @param schemaId - The schema ID to use\n * @returns The formatted payload\n **/\nexport function schemaWrapper(\n schemaId: string,\n payload: ShopifyMonorailPayload,\n): ShopifyMonorailEvent {\n return {\n schema_id: schemaId,\n payload,\n metadata: {\n event_created_at_ms: Date.now(),\n },\n };\n}\n\n/**\n * Parses global id (gid) and returns the resource type and id.\n * @see https://shopify.dev/api/usage/gids\n * @param gid - A shopify GID (string)\n *\n * @example\n * ```ts\n * const {id, resource} = parseGid('gid://shopify/Order/123')\n * // => id = \"123\", resource = 'Order'\n *\n * * const {id, resource} = parseGid('gid://shopify/Cart/abc123')\n * // => id = \"abc123\", resource = 'Cart'\n * ```\n **/\nexport function parseGid(gid: string | undefined): ShopifyGid {\n const defaultReturn: ShopifyGid = {\n id: '',\n resource: null,\n resourceId: null,\n search: '',\n searchParams: new URLSearchParams(),\n hash: '',\n };\n\n if (typeof gid !== 'string') {\n return defaultReturn;\n }\n\n try {\n const {search, searchParams, pathname, hash} = new URL(gid);\n const pathnameParts = pathname.split('/');\n const lastPathnamePart = pathnameParts[pathnameParts.length - 1];\n const resourcePart = pathnameParts[pathnameParts.length - 2];\n\n if (!lastPathnamePart || !resourcePart) {\n return defaultReturn;\n }\n\n const id = `${lastPathnamePart}${search}${hash}` || '';\n const resourceId = lastPathnamePart || null;\n const resource = resourcePart ?? null;\n\n return {id, resource, resourceId, search, searchParams, hash};\n } catch {\n return defaultReturn;\n }\n}\n\n/**\n * Filters properties from an object and returns a new object with only the properties that have a truthy value.\n * @param keyValuePairs - An object of key-value pairs\n * @param formattedData - An object which will hold the truthy values\n * @returns The formatted object\n **/\nexport function addDataIf(\n keyValuePairs: ShopifyMonorailPayload,\n formattedData: ShopifyMonorailPayload,\n): ShopifyMonorailPayload {\n if (typeof keyValuePairs !== 'object') {\n return {};\n }\n Object.entries(keyValuePairs).forEach(([key, value]) => {\n if (value) {\n formattedData[key] = value;\n }\n });\n return formattedData;\n}\n\n/**\n * Utility that errors if a function is called on the server.\n * @param fnName - The name of the function\n * @returns A boolean\n **/\nexport function errorIfServer(fnName: string): boolean {\n if (typeof document === 'undefined') {\n console.error(\n `${fnName} should only be used within the useEffect callback or event handlers`,\n );\n return true;\n }\n return false;\n}\n"],"names":[],"mappings":"AAYgB,SAAA,cACd,UACA,SACsB;AACf,SAAA;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB,KAAK,IAAI;AAAA,IAAA;AAAA,EAElC;AACF;AAgBO,SAAS,SAAS,KAAqC;AAC5D,QAAM,gBAA4B;AAAA,IAChC,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,cAAc,IAAI,gBAAgB;AAAA,IAClC,MAAM;AAAA,EACR;AAEI,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EAAA;AAGL,MAAA;AACI,UAAA,EAAC,QAAQ,cAAc,UAAU,SAAQ,IAAI,IAAI,GAAG;AACpD,UAAA,gBAAgB,SAAS,MAAM,GAAG;AACxC,UAAM,mBAAmB,cAAc,cAAc,SAAS,CAAC;AAC/D,UAAM,eAAe,cAAc,cAAc,SAAS,CAAC;AAEvD,QAAA,CAAC,oBAAoB,CAAC,cAAc;AAC/B,aAAA;AAAA,IAAA;AAGT,UAAM,KAAK,GAAG,gBAAgB,GAAG,MAAM,GAAG,IAAI,MAAM;AACpD,UAAM,aAAa,oBAAoB;AACvC,UAAM,WAAW,gBAAgB;AAEjC,WAAO,EAAC,IAAI,UAAU,YAAY,QAAQ,cAAc,KAAI;AAAA,EAAA,QACtD;AACC,WAAA;AAAA,EAAA;AAEX;AAQgB,SAAA,UACd,eACA,eACwB;AACpB,MAAA,OAAO,kBAAkB,UAAU;AACrC,WAAO,CAAC;AAAA,EAAA;AAEH,SAAA,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,QAAI,OAAO;AACT,oBAAc,GAAG,IAAI;AAAA,IAAA;AAAA,EACvB,CACD;AACM,SAAA;AACT;AAOO,SAAS,cAAc,QAAyB;AACjD,MAAA,OAAO,aAAa,aAAa;AAC3B,YAAA;AAAA,MACN,GAAG,MAAM;AAAA,IACX;AACO,WAAA;AAAA,EAAA;AAEF,SAAA;AACT;"}
@@ -1,13 +1,11 @@
1
- import { SHOPIFY_Y, SHOPIFY_S } from "./cart-constants.mjs";
2
1
  import { AnalyticsEventName } from "./analytics-constants.mjs";
3
2
  import { errorIfServer } from "./analytics-utils.mjs";
4
- import { getShopifyCookies } from "./cookies-utils.mjs";
3
+ import { getTrackingValues } from "./tracking-utils.mjs";
5
4
  import { pageView } from "./analytics-schema-trekkie-storefront-page-view.mjs";
6
5
  import { pageView as pageView$1, addToCart, pageView2, collectionView, productView, searchView } from "./analytics-schema-custom-storefront-customer-tracking.mjs";
7
6
  function sendShopifyAnalytics(event, shopDomain) {
8
7
  const { eventName, payload } = event;
9
- if (!payload.hasUserConsent)
10
- return Promise.resolve();
8
+ if (!payload.hasUserConsent) return Promise.resolve();
11
9
  let events = [];
12
10
  const pageViewPayload = payload;
13
11
  if (eventName === AnalyticsEventName.PAGE_VIEW) {
@@ -38,8 +36,7 @@ function sendShopifyAnalytics(event, shopDomain) {
38
36
  }
39
37
  }
40
38
  function isLighthouseUserAgent() {
41
- if (typeof window === "undefined" || !window.navigator)
42
- return false;
39
+ if (typeof window === "undefined" || !window.navigator) return false;
43
40
  return /Chrome-Lighthouse/.test(window.navigator.userAgent);
44
41
  }
45
42
  const ERROR_MESSAGE = "sendShopifyAnalytics request is unsuccessful";
@@ -103,10 +100,10 @@ function getClientBrowserParameters() {
103
100
  };
104
101
  }
105
102
  const [navigationType, navigationApi] = getNavigationType();
106
- const cookies = getShopifyCookies(document.cookie);
103
+ const trackingValues = getTrackingValues();
107
104
  return {
108
- uniqueToken: cookies[SHOPIFY_Y],
109
- visitToken: cookies[SHOPIFY_S],
105
+ uniqueToken: trackingValues.uniqueToken,
106
+ visitToken: trackingValues.visitToken,
110
107
  url: location.href,
111
108
  path: location.pathname,
112
109
  search: location.search,
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.mjs","sources":["../../src/analytics.ts"],"sourcesContent":["import {SHOPIFY_S, SHOPIFY_Y} from './cart-constants.js';\nimport type {\n ClientBrowserParameters,\n ShopifyAddToCartPayload,\n ShopifyAnalytics,\n ShopifyPageViewPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsEventName} from './analytics-constants.js';\nimport {errorIfServer} from './analytics-utils.js';\nimport {getShopifyCookies} from './cookies-utils.js';\n\nimport {pageView as trekkiePageView} from './analytics-schema-trekkie-storefront-page-view.js';\nimport {\n pageView as customerPageView,\n pageView2 as customerPageView2,\n collectionView as customerCollectionView,\n productView as customerProductView,\n searchView as customerSearchView,\n addToCart as customerAddToCart,\n} from './analytics-schema-custom-storefront-customer-tracking.js';\n\n/**\n * Set user and session cookies and refresh the expiry time\n * @param event - The analytics event.\n * @param shopDomain - The Online Store domain to sent Shopify analytics under the same\n * top level domain.\n */\nexport function sendShopifyAnalytics(\n event: ShopifyAnalytics,\n shopDomain?: string,\n): Promise<void> {\n const {eventName, payload} = event;\n if (!payload.hasUserConsent) return Promise.resolve();\n\n let events: ShopifyMonorailEvent[] = [];\n const pageViewPayload = payload as ShopifyPageViewPayload;\n\n if (eventName === AnalyticsEventName.PAGE_VIEW) {\n events = events.concat(\n trekkiePageView(pageViewPayload),\n customerPageView(pageViewPayload),\n );\n } else if (eventName === AnalyticsEventName.ADD_TO_CART) {\n events = events.concat(\n customerAddToCart(payload as ShopifyAddToCartPayload),\n );\n } else if (eventName === AnalyticsEventName.PAGE_VIEW_2) {\n events = events.concat(\n trekkiePageView(pageViewPayload),\n customerPageView2(pageViewPayload),\n );\n } else if (eventName === AnalyticsEventName.COLLECTION_VIEW) {\n events = events.concat(customerCollectionView(pageViewPayload));\n } else if (eventName === AnalyticsEventName.PRODUCT_VIEW) {\n events = events.concat(customerProductView(pageViewPayload));\n } else if (eventName === AnalyticsEventName.SEARCH_VIEW) {\n events = events.concat(customerSearchView(pageViewPayload));\n }\n\n if (events.length) {\n return sendToShopify(events, shopDomain);\n } else {\n return Promise.resolve();\n }\n}\n\n// Shopify monorail return invalid agent for Lighthouse userAgents\nfunction isLighthouseUserAgent(): boolean {\n if (typeof window === 'undefined' || !window.navigator) return false;\n return /Chrome-Lighthouse/.test(window.navigator.userAgent);\n}\n\ntype MonorailResponse = {\n status: number;\n message: string;\n};\n\nconst ERROR_MESSAGE = 'sendShopifyAnalytics request is unsuccessful';\n\nfunction sendToShopify(\n events: ShopifyMonorailEvent[],\n shopDomain?: string,\n): Promise<void> {\n if (isLighthouseUserAgent()) {\n return Promise.resolve();\n }\n\n const eventsToBeSent = {\n events,\n metadata: {\n event_sent_at_ms: Date.now(),\n },\n };\n\n try {\n return fetch(\n shopDomain\n ? `https://${shopDomain}/.well-known/shopify/monorail/unstable/produce_batch`\n : 'https://monorail-edge.shopifysvc.com/unstable/produce_batch',\n {\n method: 'post',\n headers: {\n 'content-type': 'text/plain',\n },\n body: JSON.stringify(eventsToBeSent),\n },\n )\n .then((response) => {\n if (!response.ok) {\n throw new Error('Response failed');\n }\n return response.text();\n })\n .then((data) => {\n if (data) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const jsonResponse = JSON.parse(data);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n jsonResponse.result.forEach((eventResponse: MonorailResponse) => {\n if (eventResponse.status !== 200) {\n console.error(ERROR_MESSAGE, '\\n\\n', eventResponse.message);\n }\n });\n }\n })\n .catch((err) => {\n console.error(ERROR_MESSAGE, err);\n if (__HYDROGEN_DEV__) {\n throw new Error(ERROR_MESSAGE);\n }\n });\n } catch (error) {\n // Do nothing\n return Promise.resolve();\n }\n}\n\nexport function getClientBrowserParameters(): ClientBrowserParameters {\n if (errorIfServer('getClientBrowserParameters')) {\n return {\n uniqueToken: '',\n visitToken: '',\n url: '',\n path: '',\n search: '',\n referrer: '',\n title: '',\n userAgent: '',\n navigationType: '',\n navigationApi: '',\n };\n }\n\n const [navigationType, navigationApi] = getNavigationType();\n const cookies = getShopifyCookies(document.cookie);\n\n return {\n uniqueToken: cookies[SHOPIFY_Y],\n visitToken: cookies[SHOPIFY_S],\n url: location.href,\n path: location.pathname,\n search: location.search,\n referrer: document.referrer,\n title: document.title,\n userAgent: navigator.userAgent,\n navigationType,\n navigationApi,\n };\n}\n\nfunction getNavigationTypeExperimental(): string | undefined {\n try {\n const navigationEntries =\n performance?.getEntriesByType &&\n performance?.getEntriesByType('navigation');\n\n if (navigationEntries && navigationEntries[0]) {\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming\n const rawType = (\n window.performance.getEntriesByType(\n 'navigation',\n )[0] as PerformanceNavigationTiming\n )['type'];\n const navType = rawType && rawType.toString();\n\n return navType;\n }\n } catch (err) {\n // Do nothing\n }\n return undefined;\n}\n\nfunction getNavigationTypeLegacy(): string | undefined {\n try {\n if (\n PerformanceNavigation &&\n performance?.navigation?.type !== null &&\n performance?.navigation?.type !== undefined\n ) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Performance/navigation\n const rawType = performance.navigation.type;\n switch (rawType) {\n case PerformanceNavigation.TYPE_NAVIGATE:\n return 'navigate';\n case PerformanceNavigation.TYPE_RELOAD:\n return 'reload';\n case PerformanceNavigation.TYPE_BACK_FORWARD:\n return 'back_forward';\n default:\n return `unknown: ${rawType}`;\n }\n }\n } catch (err) {\n // do nothing\n }\n return undefined;\n}\n\nfunction getNavigationType(): [string, string] {\n try {\n let navApi = 'PerformanceNavigationTiming';\n let navType = getNavigationTypeExperimental();\n if (!navType) {\n navType = getNavigationTypeLegacy();\n navApi = 'performance.navigation';\n }\n if (navType) {\n return [navType, navApi];\n } else {\n return ['unknown', 'unknown'];\n }\n } catch (err) {\n // do nothing\n }\n return ['error', 'error'];\n}\n"],"names":["trekkiePageView","customerPageView","customerAddToCart","customerPageView2","customerCollectionView","customerProductView","customerSearchView"],"mappings":"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"}
1
+ {"version":3,"file":"analytics.mjs","sources":["../../src/analytics.ts"],"sourcesContent":["import type {\n ClientBrowserParameters,\n ShopifyAddToCartPayload,\n ShopifyAnalytics,\n ShopifyPageViewPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsEventName} from './analytics-constants.js';\nimport {errorIfServer} from './analytics-utils.js';\nimport {getTrackingValues} from './tracking-utils.js';\n\nimport {pageView as trekkiePageView} from './analytics-schema-trekkie-storefront-page-view.js';\nimport {\n pageView as customerPageView,\n pageView2 as customerPageView2,\n collectionView as customerCollectionView,\n productView as customerProductView,\n searchView as customerSearchView,\n addToCart as customerAddToCart,\n} from './analytics-schema-custom-storefront-customer-tracking.js';\n\n/**\n * Set user and session cookies and refresh the expiry time\n * @param event - The analytics event.\n * @param shopDomain - The Online Store domain to sent Shopify analytics under the same\n * top level domain.\n */\nexport function sendShopifyAnalytics(\n event: ShopifyAnalytics,\n shopDomain?: string,\n): Promise<void> {\n const {eventName, payload} = event;\n if (!payload.hasUserConsent) return Promise.resolve();\n\n let events: ShopifyMonorailEvent[] = [];\n const pageViewPayload = payload as ShopifyPageViewPayload;\n\n if (eventName === AnalyticsEventName.PAGE_VIEW) {\n events = events.concat(\n trekkiePageView(pageViewPayload),\n customerPageView(pageViewPayload),\n );\n } else if (eventName === AnalyticsEventName.ADD_TO_CART) {\n events = events.concat(\n customerAddToCart(payload as ShopifyAddToCartPayload),\n );\n } else if (eventName === AnalyticsEventName.PAGE_VIEW_2) {\n events = events.concat(\n trekkiePageView(pageViewPayload),\n customerPageView2(pageViewPayload),\n );\n } else if (eventName === AnalyticsEventName.COLLECTION_VIEW) {\n events = events.concat(customerCollectionView(pageViewPayload));\n } else if (eventName === AnalyticsEventName.PRODUCT_VIEW) {\n events = events.concat(customerProductView(pageViewPayload));\n } else if (eventName === AnalyticsEventName.SEARCH_VIEW) {\n events = events.concat(customerSearchView(pageViewPayload));\n }\n\n if (events.length) {\n return sendToShopify(events, shopDomain);\n } else {\n return Promise.resolve();\n }\n}\n\n// Shopify monorail return invalid agent for Lighthouse userAgents\nfunction isLighthouseUserAgent(): boolean {\n if (typeof window === 'undefined' || !window.navigator) return false;\n return /Chrome-Lighthouse/.test(window.navigator.userAgent);\n}\n\ntype MonorailResponse = {\n status: number;\n message: string;\n};\n\nconst ERROR_MESSAGE = 'sendShopifyAnalytics request is unsuccessful';\n\nfunction sendToShopify(\n events: ShopifyMonorailEvent[],\n shopDomain?: string,\n): Promise<void> {\n if (isLighthouseUserAgent()) {\n return Promise.resolve();\n }\n\n const eventsToBeSent = {\n events,\n metadata: {\n event_sent_at_ms: Date.now(),\n },\n };\n\n try {\n return fetch(\n shopDomain\n ? `https://${shopDomain}/.well-known/shopify/monorail/unstable/produce_batch`\n : 'https://monorail-edge.shopifysvc.com/unstable/produce_batch',\n {\n method: 'post',\n headers: {\n 'content-type': 'text/plain',\n },\n body: JSON.stringify(eventsToBeSent),\n },\n )\n .then((response) => {\n if (!response.ok) {\n throw new Error('Response failed');\n }\n return response.text();\n })\n .then((data) => {\n if (data) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const jsonResponse = JSON.parse(data);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n jsonResponse.result.forEach((eventResponse: MonorailResponse) => {\n if (eventResponse.status !== 200) {\n console.error(ERROR_MESSAGE, '\\n\\n', eventResponse.message);\n }\n });\n }\n })\n .catch((err) => {\n console.error(ERROR_MESSAGE, err);\n if (__HYDROGEN_DEV__) {\n throw new Error(ERROR_MESSAGE);\n }\n });\n } catch (error) {\n // Do nothing\n return Promise.resolve();\n }\n}\n\nexport function getClientBrowserParameters(): ClientBrowserParameters {\n if (errorIfServer('getClientBrowserParameters')) {\n return {\n uniqueToken: '',\n visitToken: '',\n url: '',\n path: '',\n search: '',\n referrer: '',\n title: '',\n userAgent: '',\n navigationType: '',\n navigationApi: '',\n };\n }\n\n const [navigationType, navigationApi] = getNavigationType();\n const trackingValues = getTrackingValues();\n\n return {\n uniqueToken: trackingValues.uniqueToken,\n visitToken: trackingValues.visitToken,\n url: location.href,\n path: location.pathname,\n search: location.search,\n referrer: document.referrer,\n title: document.title,\n userAgent: navigator.userAgent,\n navigationType,\n navigationApi,\n };\n}\n\nfunction getNavigationTypeExperimental(): string | undefined {\n try {\n const navigationEntries =\n performance?.getEntriesByType &&\n performance?.getEntriesByType('navigation');\n\n if (navigationEntries && navigationEntries[0]) {\n // https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming\n const rawType = (\n window.performance.getEntriesByType(\n 'navigation',\n )[0] as PerformanceNavigationTiming\n )['type'];\n const navType = rawType && rawType.toString();\n\n return navType;\n }\n } catch (err) {\n // Do nothing\n }\n return undefined;\n}\n\nfunction getNavigationTypeLegacy(): string | undefined {\n try {\n if (\n PerformanceNavigation &&\n performance?.navigation?.type !== null &&\n performance?.navigation?.type !== undefined\n ) {\n // https://developer.mozilla.org/en-US/docs/Web/API/Performance/navigation\n const rawType = performance.navigation.type;\n switch (rawType) {\n case PerformanceNavigation.TYPE_NAVIGATE:\n return 'navigate';\n case PerformanceNavigation.TYPE_RELOAD:\n return 'reload';\n case PerformanceNavigation.TYPE_BACK_FORWARD:\n return 'back_forward';\n default:\n return `unknown: ${rawType}`;\n }\n }\n } catch (err) {\n // do nothing\n }\n return undefined;\n}\n\nfunction getNavigationType(): [string, string] {\n try {\n let navApi = 'PerformanceNavigationTiming';\n let navType = getNavigationTypeExperimental();\n if (!navType) {\n navType = getNavigationTypeLegacy();\n navApi = 'performance.navigation';\n }\n if (navType) {\n return [navType, navApi];\n } else {\n return ['unknown', 'unknown'];\n }\n } catch (err) {\n // do nothing\n }\n return ['error', 'error'];\n}\n"],"names":["trekkiePageView","customerPageView","customerAddToCart","customerPageView2","customerCollectionView","customerProductView","customerSearchView"],"mappings":"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"}
@@ -1,9 +1,14 @@
1
1
  import { useCallback } from "react";
2
2
  import { useShop } from "./ShopifyProvider.mjs";
3
- import { SHOPIFY_STOREFRONT_ID_HEADER, SHOPIFY_STOREFRONT_Y_HEADER, SHOPIFY_Y, SHOPIFY_STOREFRONT_S_HEADER, SHOPIFY_S } from "./cart-constants.mjs";
4
- import { getShopifyCookies } from "./cookies-utils.mjs";
3
+ import { SHOPIFY_STOREFRONT_ID_HEADER, SHOPIFY_STOREFRONT_Y_HEADER, SHOPIFY_STOREFRONT_S_HEADER } from "./cart-constants.mjs";
4
+ import { getTrackingValues, SHOPIFY_UNIQUE_TOKEN_HEADER, SHOPIFY_VISIT_TOKEN_HEADER } from "./tracking-utils.mjs";
5
5
  function useCartFetch() {
6
- const { storefrontId, getPublicTokenHeaders, getStorefrontApiUrl } = useShop();
6
+ const {
7
+ storefrontId,
8
+ getPublicTokenHeaders,
9
+ getStorefrontApiUrl,
10
+ sameDomainForStorefrontApi
11
+ } = useShop();
7
12
  return useCallback(
8
13
  ({
9
14
  query,
@@ -13,9 +18,17 @@ function useCartFetch() {
13
18
  if (storefrontId) {
14
19
  headers[SHOPIFY_STOREFRONT_ID_HEADER] = storefrontId;
15
20
  }
16
- const cookieData = getShopifyCookies(document.cookie);
17
- headers[SHOPIFY_STOREFRONT_Y_HEADER] = cookieData[SHOPIFY_Y];
18
- headers[SHOPIFY_STOREFRONT_S_HEADER] = cookieData[SHOPIFY_S];
21
+ if (!sameDomainForStorefrontApi) {
22
+ const { uniqueToken, visitToken } = getTrackingValues();
23
+ if (uniqueToken) {
24
+ headers[SHOPIFY_STOREFRONT_Y_HEADER] = uniqueToken;
25
+ headers[SHOPIFY_UNIQUE_TOKEN_HEADER] = uniqueToken;
26
+ }
27
+ if (visitToken) {
28
+ headers[SHOPIFY_STOREFRONT_S_HEADER] = visitToken;
29
+ headers[SHOPIFY_VISIT_TOKEN_HEADER] = visitToken;
30
+ }
31
+ }
19
32
  return fetch(getStorefrontApiUrl(), {
20
33
  method: "POST",
21
34
  headers,
@@ -33,7 +46,12 @@ function useCartFetch() {
33
46
  };
34
47
  });
35
48
  },
36
- [getPublicTokenHeaders, storefrontId, getStorefrontApiUrl]
49
+ [
50
+ getPublicTokenHeaders,
51
+ storefrontId,
52
+ getStorefrontApiUrl,
53
+ sameDomainForStorefrontApi
54
+ ]
37
55
  );
38
56
  }
39
57
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"cart-hooks.mjs","sources":["../../src/cart-hooks.tsx"],"sourcesContent":["import {useState, useCallback} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {CartInput, Cart as CartType} from './storefront-api-types.js';\nimport {CartCreate, defaultCartFragment} from './cart-queries.js';\nimport {Cart} from './cart-types.js';\nimport {\n SHOPIFY_STOREFRONT_ID_HEADER,\n SHOPIFY_STOREFRONT_Y_HEADER,\n SHOPIFY_STOREFRONT_S_HEADER,\n SHOPIFY_Y,\n SHOPIFY_S,\n} from './cart-constants.js';\nimport type {StorefrontApiResponseOkPartial} from './storefront-api-response.types.js';\nimport {getShopifyCookies} from './cookies-utils.js';\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function useCartFetch() {\n const {storefrontId, getPublicTokenHeaders, getStorefrontApiUrl} = useShop();\n\n return useCallback(\n <ReturnDataGeneric,>({\n query,\n variables,\n }: {\n query: string;\n variables: Record<string, unknown>;\n }): Promise<StorefrontApiResponseOkPartial<ReturnDataGeneric>> => {\n const headers = getPublicTokenHeaders({contentType: 'json'});\n\n if (storefrontId) {\n headers[SHOPIFY_STOREFRONT_ID_HEADER] = storefrontId;\n }\n\n // Find Shopify cookies\n const cookieData = getShopifyCookies(document.cookie);\n headers[SHOPIFY_STOREFRONT_Y_HEADER] = cookieData[SHOPIFY_Y];\n headers[SHOPIFY_STOREFRONT_S_HEADER] = cookieData[SHOPIFY_S];\n\n return fetch(getStorefrontApiUrl(), {\n method: 'POST',\n headers,\n body: JSON.stringify({\n query: query.toString(),\n variables,\n }),\n })\n .then(\n (res) =>\n res.json() as StorefrontApiResponseOkPartial<ReturnDataGeneric>,\n )\n .catch((error) => {\n return {\n data: undefined,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n errors: error?.toString(),\n };\n });\n },\n [getPublicTokenHeaders, storefrontId, getStorefrontApiUrl],\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function useInstantCheckout() {\n const [cart, updateCart] = useState<Cart | undefined>();\n const [checkoutUrl, updateCheckoutUrl] = useState<Cart['checkoutUrl']>();\n const [error, updateError] = useState<string | undefined>();\n\n const fetch = useCartFetch();\n\n const createInstantCheckout = useCallback(\n async (cartInput: CartInput) => {\n const {data, errors} = await fetch<{\n cartCreate: {cart: CartType};\n }>({\n query: CartCreate(defaultCartFragment),\n variables: {\n input: cartInput,\n },\n });\n\n if (errors) {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n updateError(errors.toString());\n updateCart(undefined);\n updateCheckoutUrl(undefined);\n }\n\n if (data?.cartCreate?.cart) {\n const dataCart = data.cartCreate.cart;\n updateCart({\n ...dataCart,\n lines: flattenConnection(dataCart.lines),\n note: dataCart.note ?? undefined,\n });\n updateCheckoutUrl(dataCart.checkoutUrl);\n }\n },\n [fetch],\n );\n\n return {cart, checkoutUrl, error, createInstantCheckout};\n}\n"],"names":[],"mappings":";;;;AAiBO,SAAS,eAAe;AAC7B,QAAM,EAAC,cAAc,uBAAuB,wBAAuB,QAAQ;AAEpE,SAAA;AAAA,IACL,CAAqB;AAAA,MACnB;AAAA,MACA;AAAA,IAAA,MAIgE;AAChE,YAAM,UAAU,sBAAsB,EAAC,aAAa,OAAO,CAAA;AAE3D,UAAI,cAAc;AAChB,gBAAQ,4BAA4B,IAAI;AAAA,MAC1C;AAGM,YAAA,aAAa,kBAAkB,SAAS,MAAM;AAC5C,cAAA,2BAA2B,IAAI,WAAW,SAAS;AACnD,cAAA,2BAA2B,IAAI,WAAW,SAAS;AAEpD,aAAA,MAAM,uBAAuB;AAAA,QAClC,QAAQ;AAAA,QACR;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB,OAAO,MAAM,SAAS;AAAA,UACtB;AAAA,QAAA,CACD;AAAA,MACF,CAAA,EACE;AAAA,QACC,CAAC,QACC,IAAI,KAAK;AAAA,MAAA,EAEZ,MAAM,CAAC,UAAU;AACT,eAAA;AAAA,UACL,MAAM;AAAA;AAAA,UAEN,QAAQ,+BAAO;AAAA,QAAS;AAAA,MAC1B,CACD;AAAA,IACL;AAAA,IACA,CAAC,uBAAuB,cAAc,mBAAmB;AAAA,EAAA;AAE7D;"}
1
+ {"version":3,"file":"cart-hooks.mjs","sources":["../../src/cart-hooks.tsx"],"sourcesContent":["import {useState, useCallback} from 'react';\nimport {useShop} from './ShopifyProvider.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {CartInput, Cart as CartType} from './storefront-api-types.js';\nimport {CartCreate, defaultCartFragment} from './cart-queries.js';\nimport {Cart} from './cart-types.js';\nimport {\n SHOPIFY_STOREFRONT_ID_HEADER,\n SHOPIFY_STOREFRONT_Y_HEADER,\n SHOPIFY_STOREFRONT_S_HEADER,\n} from './cart-constants.js';\nimport type {StorefrontApiResponseOkPartial} from './storefront-api-response.types.js';\nimport {\n getTrackingValues,\n SHOPIFY_UNIQUE_TOKEN_HEADER,\n SHOPIFY_VISIT_TOKEN_HEADER,\n} from './tracking-utils.js';\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function useCartFetch() {\n const {\n storefrontId,\n getPublicTokenHeaders,\n getStorefrontApiUrl,\n sameDomainForStorefrontApi,\n } = useShop();\n\n return useCallback(\n <ReturnDataGeneric,>({\n query,\n variables,\n }: {\n query: string;\n variables: Record<string, unknown>;\n }): Promise<StorefrontApiResponseOkPartial<ReturnDataGeneric>> => {\n const headers = getPublicTokenHeaders({contentType: 'json'});\n\n if (storefrontId) {\n headers[SHOPIFY_STOREFRONT_ID_HEADER] = storefrontId;\n }\n\n if (!sameDomainForStorefrontApi) {\n // If we are in cross-domain mode, add tracking headers manually.\n // Otherwise, for same-domain we rely on the browser to attach cookies automatically.\n const {uniqueToken, visitToken} = getTrackingValues();\n if (uniqueToken) {\n headers[SHOPIFY_STOREFRONT_Y_HEADER] = uniqueToken;\n headers[SHOPIFY_UNIQUE_TOKEN_HEADER] = uniqueToken;\n }\n if (visitToken) {\n headers[SHOPIFY_STOREFRONT_S_HEADER] = visitToken;\n headers[SHOPIFY_VISIT_TOKEN_HEADER] = visitToken;\n }\n }\n\n return fetch(getStorefrontApiUrl(), {\n method: 'POST',\n headers,\n body: JSON.stringify({\n query: query.toString(),\n variables,\n }),\n })\n .then(\n (res) =>\n res.json() as StorefrontApiResponseOkPartial<ReturnDataGeneric>,\n )\n .catch((error) => {\n return {\n data: undefined,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n errors: error?.toString(),\n };\n });\n },\n [\n getPublicTokenHeaders,\n storefrontId,\n getStorefrontApiUrl,\n sameDomainForStorefrontApi,\n ],\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function useInstantCheckout() {\n const [cart, updateCart] = useState<Cart | undefined>();\n const [checkoutUrl, updateCheckoutUrl] = useState<Cart['checkoutUrl']>();\n const [error, updateError] = useState<string | undefined>();\n\n const fetch = useCartFetch();\n\n const createInstantCheckout = useCallback(\n async (cartInput: CartInput) => {\n const {data, errors} = await fetch<{\n cartCreate: {cart: CartType};\n }>({\n query: CartCreate(defaultCartFragment),\n variables: {\n input: cartInput,\n },\n });\n\n if (errors) {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n updateError(errors.toString());\n updateCart(undefined);\n updateCheckoutUrl(undefined);\n }\n\n if (data?.cartCreate?.cart) {\n const dataCart = data.cartCreate.cart;\n updateCart({\n ...dataCart,\n lines: flattenConnection(dataCart.lines),\n note: dataCart.note ?? undefined,\n });\n updateCheckoutUrl(dataCart.checkoutUrl);\n }\n },\n [fetch],\n );\n\n return {cart, checkoutUrl, error, createInstantCheckout};\n}\n"],"names":[],"mappings":";;;;AAmBO,SAAS,eAAe;AACvB,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,QAAQ;AAEL,SAAA;AAAA,IACL,CAAqB;AAAA,MACnB;AAAA,MACA;AAAA,IAAA,MAIgE;AAChE,YAAM,UAAU,sBAAsB,EAAC,aAAa,QAAO;AAE3D,UAAI,cAAc;AAChB,gBAAQ,4BAA4B,IAAI;AAAA,MAAA;AAG1C,UAAI,CAAC,4BAA4B;AAG/B,cAAM,EAAC,aAAa,WAAU,IAAI,kBAAkB;AACpD,YAAI,aAAa;AACf,kBAAQ,2BAA2B,IAAI;AACvC,kBAAQ,2BAA2B,IAAI;AAAA,QAAA;AAEzC,YAAI,YAAY;AACd,kBAAQ,2BAA2B,IAAI;AACvC,kBAAQ,0BAA0B,IAAI;AAAA,QAAA;AAAA,MACxC;AAGK,aAAA,MAAM,uBAAuB;AAAA,QAClC,QAAQ;AAAA,QACR;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB,OAAO,MAAM,SAAS;AAAA,UACtB;AAAA,QACD,CAAA;AAAA,MACF,CAAA,EACE;AAAA,QACC,CAAC,QACC,IAAI,KAAK;AAAA,MAAA,EAEZ,MAAM,CAAC,UAAU;AACT,eAAA;AAAA,UACL,MAAM;AAAA;AAAA,UAEN,QAAQ,+BAAO;AAAA,QACjB;AAAA,MAAA,CACD;AAAA,IACL;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;"}
@@ -1,5 +1,5 @@
1
- import { parse } from "worktop/cookie";
2
- import { SHOPIFY_Y, SHOPIFY_S } from "./cart-constants.mjs";
1
+ import { SHOPIFY_S, SHOPIFY_Y } from "./cart-constants.mjs";
2
+ import { getTrackingValues } from "./tracking-utils.mjs";
3
3
  const tokenHash = "xxxx-4xxx-xxxx-xxxxxxxxxxxx";
4
4
  function buildUUID() {
5
5
  let hash = "";
@@ -36,10 +36,10 @@ function hexTime() {
36
36
  return output.padStart(8, "0");
37
37
  }
38
38
  function getShopifyCookies(cookies) {
39
- const cookieData = parse(cookies);
39
+ const trackingValues = getTrackingValues(cookies);
40
40
  return {
41
- [SHOPIFY_Y]: cookieData[SHOPIFY_Y] || "",
42
- [SHOPIFY_S]: cookieData[SHOPIFY_S] || ""
41
+ [SHOPIFY_Y]: trackingValues.uniqueToken,
42
+ [SHOPIFY_S]: trackingValues.visitToken
43
43
  };
44
44
  }
45
45
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"cookies-utils.mjs","sources":["../../src/cookies-utils.tsx"],"sourcesContent":["import {parse} from 'worktop/cookie';\nimport {ShopifyCookies} from './analytics-types.js';\nimport {SHOPIFY_Y, SHOPIFY_S} from './cart-constants.js';\n\nconst tokenHash = 'xxxx-4xxx-xxxx-xxxxxxxxxxxx';\n\nexport function buildUUID(): string {\n let hash = '';\n\n try {\n const crypto: Crypto = window.crypto;\n const randomValuesArray = new Uint16Array(31);\n crypto.getRandomValues(randomValuesArray);\n\n // Generate a strong UUID\n let i = 0;\n hash = tokenHash\n .replace(/[x]/g, (c: string): string => {\n const r = randomValuesArray[i] % 16;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n i++;\n return v.toString(16);\n })\n .toUpperCase();\n } catch (err) {\n // crypto not available, generate weak UUID\n hash = tokenHash\n .replace(/[x]/g, (c: string): string => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n })\n .toUpperCase();\n }\n\n return `${hexTime()}-${hash}`;\n}\n\nexport function hexTime(): string {\n // 32 bit representations of new Date().getTime() and performance.now()\n let dateNumber = 0;\n let perfNumber = 0;\n\n // Result of zero-fill right shift is always positive\n dateNumber = new Date().getTime() >>> 0;\n\n try {\n perfNumber = performance.now() >>> 0;\n } catch (err) {\n perfNumber = 0;\n }\n\n const output = Math.abs(dateNumber + perfNumber)\n .toString(16)\n .toLowerCase();\n\n // Ensure the output is exactly 8 characters\n return output.padStart(8, '0');\n}\n\nexport function getShopifyCookies(cookies: string): ShopifyCookies {\n const cookieData = parse(cookies);\n return {\n [SHOPIFY_Y]: cookieData[SHOPIFY_Y] || '',\n [SHOPIFY_S]: cookieData[SHOPIFY_S] || '',\n };\n}\n"],"names":[],"mappings":";;AAIA,MAAM,YAAY;AAEX,SAAS,YAAoB;AAClC,MAAI,OAAO;AAEP,MAAA;AACF,UAAM,SAAiB,OAAO;AACxB,UAAA,oBAAoB,IAAI,YAAY,EAAE;AAC5C,WAAO,gBAAgB,iBAAiB;AAGxC,QAAI,IAAI;AACR,WAAO,UACJ,QAAQ,QAAQ,CAAC,MAAsB;AAChC,YAAA,IAAI,kBAAkB,CAAC,IAAI;AACjC,YAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AACtC;AACO,aAAA,EAAE,SAAS,EAAE;AAAA,IAAA,CACrB,EACA,YAAY;AAAA,WACR,KAAK;AAEZ,WAAO,UACJ,QAAQ,QAAQ,CAAC,MAAsB;AACtC,YAAM,IAAK,KAAK,OAAO,IAAI,KAAM;AACjC,YAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AAC/B,aAAA,EAAE,SAAS,EAAE;AAAA,IAAA,CACrB,EACA,YAAY;AAAA,EACjB;AAEA,SAAO,GAAG,QAAA,CAAS,IAAI,IAAI;AAC7B;AAEO,SAAS,UAAkB;AAEhC,MAAI,aAAa;AACjB,MAAI,aAAa;AAGjB,gBAAiB,oBAAA,KAAO,GAAA,QAAA,MAAc;AAElC,MAAA;AACW,iBAAA,YAAY,IAAU,MAAA;AAAA,WAC5B,KAAK;AACC,iBAAA;AAAA,EACf;AAEM,QAAA,SAAS,KAAK,IAAI,aAAa,UAAU,EAC5C,SAAS,EAAE,EACX;AAGI,SAAA,OAAO,SAAS,GAAG,GAAG;AAC/B;AAEO,SAAS,kBAAkB,SAAiC;AAC3D,QAAA,aAAa,MAAM,OAAO;AACzB,SAAA;AAAA,IACL,CAAC,SAAS,GAAG,WAAW,SAAS,KAAK;AAAA,IACtC,CAAC,SAAS,GAAG,WAAW,SAAS,KAAK;AAAA,EAAA;AAE1C;"}
1
+ {"version":3,"file":"cookies-utils.mjs","sources":["../../src/cookies-utils.tsx"],"sourcesContent":["import {ShopifyCookies} from './analytics-types.js';\nimport {SHOPIFY_Y, SHOPIFY_S} from './cart-constants.js';\nimport {getTrackingValues} from './tracking-utils.js';\n\nconst tokenHash = 'xxxx-4xxx-xxxx-xxxxxxxxxxxx';\n\nexport function buildUUID(): string {\n let hash = '';\n\n try {\n const crypto: Crypto = window.crypto;\n const randomValuesArray = new Uint16Array(31);\n crypto.getRandomValues(randomValuesArray);\n\n // Generate a strong UUID\n let i = 0;\n hash = tokenHash\n .replace(/[x]/g, (c: string): string => {\n const r = randomValuesArray[i] % 16;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n i++;\n return v.toString(16);\n })\n .toUpperCase();\n } catch (err) {\n // crypto not available, generate weak UUID\n hash = tokenHash\n .replace(/[x]/g, (c: string): string => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n })\n .toUpperCase();\n }\n\n return `${hexTime()}-${hash}`;\n}\n\nexport function hexTime(): string {\n // 32 bit representations of new Date().getTime() and performance.now()\n let dateNumber = 0;\n let perfNumber = 0;\n\n // Result of zero-fill right shift is always positive\n dateNumber = new Date().getTime() >>> 0;\n\n try {\n perfNumber = performance.now() >>> 0;\n } catch (err) {\n perfNumber = 0;\n }\n\n const output = Math.abs(dateNumber + perfNumber)\n .toString(16)\n .toLowerCase();\n\n // Ensure the output is exactly 8 characters\n return output.padStart(8, '0');\n}\n\n/**\n * Gets the values of _shopify_y and _shopify_s cookies from the provided cookie string.\n * @deprecated Use getTrackingValues instead.\n */\nexport function getShopifyCookies(cookies: string): ShopifyCookies {\n const trackingValues = getTrackingValues(cookies);\n\n return {\n [SHOPIFY_Y]: trackingValues.uniqueToken,\n [SHOPIFY_S]: trackingValues.visitToken,\n };\n}\n"],"names":[],"mappings":";;AAIA,MAAM,YAAY;AAEX,SAAS,YAAoB;AAClC,MAAI,OAAO;AAEP,MAAA;AACF,UAAM,SAAiB,OAAO;AACxB,UAAA,oBAAoB,IAAI,YAAY,EAAE;AAC5C,WAAO,gBAAgB,iBAAiB;AAGxC,QAAI,IAAI;AACR,WAAO,UACJ,QAAQ,QAAQ,CAAC,MAAsB;AAChC,YAAA,IAAI,kBAAkB,CAAC,IAAI;AACjC,YAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AACtC;AACO,aAAA,EAAE,SAAS,EAAE;AAAA,IACrB,CAAA,EACA,YAAY;AAAA,WACR,KAAK;AAEZ,WAAO,UACJ,QAAQ,QAAQ,CAAC,MAAsB;AACtC,YAAM,IAAK,KAAK,OAAO,IAAI,KAAM;AACjC,YAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AAC/B,aAAA,EAAE,SAAS,EAAE;AAAA,IACrB,CAAA,EACA,YAAY;AAAA,EAAA;AAGjB,SAAO,GAAG,QAAA,CAAS,IAAI,IAAI;AAC7B;AAEO,SAAS,UAAkB;AAEhC,MAAI,aAAa;AACjB,MAAI,aAAa;AAGjB,gBAAiB,oBAAA,QAAO,QAAc,MAAA;AAElC,MAAA;AACW,iBAAA,YAAY,UAAU;AAAA,WAC5B,KAAK;AACC,iBAAA;AAAA,EAAA;AAGT,QAAA,SAAS,KAAK,IAAI,aAAa,UAAU,EAC5C,SAAS,EAAE,EACX,YAAY;AAGR,SAAA,OAAO,SAAS,GAAG,GAAG;AAC/B;AAMO,SAAS,kBAAkB,SAAiC;AAC3D,QAAA,iBAAiB,kBAAkB,OAAO;AAEzC,SAAA;AAAA,IACL,CAAC,SAAS,GAAG,eAAe;AAAA,IAC5B,CAAC,SAAS,GAAG,eAAe;AAAA,EAC9B;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"flatten-connection.mjs","sources":["../../src/flatten-connection.ts"],"sourcesContent":["import type {PartialDeep} from 'type-fest';\n\n/**\n * The `flattenConnection` utility transforms a connection object from the Storefront API (for example, [Product-related connections](https://shopify.dev/api/storefront/reference/products/product)) into a flat array of nodes.\n * The utility works with either `nodes` or `edges.node`.\n *\n * If `connection` is null or undefined, will return an empty array instead in production. In development, an error will be thrown.\n */\nexport function flattenConnection<\n ConnectionGeneric extends\n | PartialDeep<ConnectionEdges, {recurseIntoArrays: true}>\n | PartialDeep<ConnectionNodes, {recurseIntoArrays: true}>\n | ConnectionEdges\n | ConnectionNodes,\n>(\n connection?: ConnectionGeneric,\n): ConnectionGeneric extends\n | {\n edges: Array<{node: infer ConnectionBaseType}>;\n }\n | {\n nodes: Array<infer ConnectionBaseType>;\n }\n ? // if it's not a PartialDeep, then return the infered type\n ConnectionBaseType[]\n : ConnectionGeneric extends\n | PartialDeep<\n {edges: {node: Array<infer ConnectionBaseType>}},\n {recurseIntoArrays: true}\n >\n | PartialDeep<\n {\n nodes: Array<infer ConnectionBaseType>;\n },\n {recurseIntoArrays: true}\n >\n ? // if it is a PartialDeep, return a PartialDeep inferred type\n PartialDeep<ConnectionBaseType[], {recurseIntoArrays: true}>\n : never {\n if (!connection) {\n const noConnectionErr = `flattenConnection(): needs a 'connection' to flatten, but received '${\n connection ?? ''\n }' instead.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noConnectionErr);\n } else {\n console.error(noConnectionErr + ` Returning an empty array`);\n // @ts-expect-error We don't want to crash prod, so return an empty array\n return [];\n }\n }\n\n if ('nodes' in connection) {\n // @ts-expect-error return type is failing\n return connection.nodes;\n }\n\n if ('edges' in connection && Array.isArray(connection.edges)) {\n // @ts-expect-error return type is failing\n return connection.edges.map((edge) => {\n if (!edge?.node) {\n throw new Error(\n 'flattenConnection(): Connection edges must contain nodes',\n );\n }\n return edge.node;\n }) as Array<unknown>;\n }\n\n if (__HYDROGEN_DEV__) {\n console.warn(\n `flattenConnection(): The connection did not contain either \"nodes\" or \"edges.node\". Returning an empty array.`,\n );\n }\n\n // @ts-expect-error We don't want to crash prod, so return an empty array\n return [];\n}\n\ntype ConnectionEdges = {\n edges: Array<{node: unknown}>;\n};\n\ntype ConnectionNodes = {\n nodes: Array<unknown>;\n};\n\n// This is only for documentation purposes, and it is not used in the code.\nexport interface ConnectionGenericForDoc {\n connection?: ConnectionEdges | ConnectionNodes;\n}\nexport type FlattenConnectionReturnForDoc = unknown[];\n"],"names":[],"mappings":"AAQO,SAAS,kBAOd,YAuBQ;AACR,MAAI,CAAC,YAAY;AACT,UAAA,kBAAkB,uEACtB,cAAc,EAChB;AACsB;AACd,YAAA,IAAI,MAAM,eAAe;AAAA,IAKjC;AAAA,EACF;AAEA,MAAI,WAAW,YAAY;AAEzB,WAAO,WAAW;AAAA,EACpB;AAEA,MAAI,WAAW,cAAc,MAAM,QAAQ,WAAW,KAAK,GAAG;AAE5D,WAAO,WAAW,MAAM,IAAI,CAAC,SAAS;AAChC,UAAA,EAAC,6BAAM,OAAM;AACf,cAAM,IAAI;AAAA,UACR;AAAA,QAAA;AAAA,MAEJ;AACA,aAAO,KAAK;AAAA,IAAA,CACb;AAAA,EACH;AAEsB;AACZ,YAAA;AAAA,MACN;AAAA,IAAA;AAAA,EAEJ;AAGA,SAAO;AACT;"}
1
+ {"version":3,"file":"flatten-connection.mjs","sources":["../../src/flatten-connection.ts"],"sourcesContent":["import type {PartialDeep} from 'type-fest';\n\n/**\n * The `flattenConnection` utility transforms a connection object from the Storefront API (for example, [Product-related connections](https://shopify.dev/api/storefront/reference/products/product)) into a flat array of nodes.\n * The utility works with either `nodes` or `edges.node`.\n *\n * If `connection` is null or undefined, will return an empty array instead in production. In development, an error will be thrown.\n */\nexport function flattenConnection<\n ConnectionGeneric extends\n | PartialDeep<ConnectionEdges, {recurseIntoArrays: true}>\n | PartialDeep<ConnectionNodes, {recurseIntoArrays: true}>\n | ConnectionEdges\n | ConnectionNodes,\n>(\n connection?: ConnectionGeneric,\n): ConnectionGeneric extends\n | {\n edges: Array<{node: infer ConnectionBaseType}>;\n }\n | {\n nodes: Array<infer ConnectionBaseType>;\n }\n ? // if it's not a PartialDeep, then return the infered type\n ConnectionBaseType[]\n : ConnectionGeneric extends\n | PartialDeep<\n {edges: {node: Array<infer ConnectionBaseType>}},\n {recurseIntoArrays: true}\n >\n | PartialDeep<\n {\n nodes: Array<infer ConnectionBaseType>;\n },\n {recurseIntoArrays: true}\n >\n ? // if it is a PartialDeep, return a PartialDeep inferred type\n PartialDeep<ConnectionBaseType[], {recurseIntoArrays: true}>\n : never {\n if (!connection) {\n const noConnectionErr = `flattenConnection(): needs a 'connection' to flatten, but received '${\n connection ?? ''\n }' instead.`;\n if (__HYDROGEN_DEV__) {\n throw new Error(noConnectionErr);\n } else {\n console.error(noConnectionErr + ` Returning an empty array`);\n // @ts-expect-error We don't want to crash prod, so return an empty array\n return [];\n }\n }\n\n if ('nodes' in connection) {\n // @ts-expect-error return type is failing\n return connection.nodes;\n }\n\n if ('edges' in connection && Array.isArray(connection.edges)) {\n // @ts-expect-error return type is failing\n return connection.edges.map((edge) => {\n if (!edge?.node) {\n throw new Error(\n 'flattenConnection(): Connection edges must contain nodes',\n );\n }\n return edge.node;\n }) as Array<unknown>;\n }\n\n if (__HYDROGEN_DEV__) {\n console.warn(\n `flattenConnection(): The connection did not contain either \"nodes\" or \"edges.node\". Returning an empty array.`,\n );\n }\n\n // @ts-expect-error We don't want to crash prod, so return an empty array\n return [];\n}\n\ntype ConnectionEdges = {\n edges: Array<{node: unknown}>;\n};\n\ntype ConnectionNodes = {\n nodes: Array<unknown>;\n};\n\n// This is only for documentation purposes, and it is not used in the code.\nexport interface ConnectionGenericForDoc {\n connection?: ConnectionEdges | ConnectionNodes;\n}\nexport type FlattenConnectionReturnForDoc = unknown[];\n"],"names":[],"mappings":"AAQO,SAAS,kBAOd,YAuBU;AACV,MAAI,CAAC,YAAY;AACT,UAAA,kBAAkB,uEACtB,cAAc,EAChB;AACsB;AACd,YAAA,IAAI,MAAM,eAAe;AAAA,IAAA;AAAA,EAKjC;AAGF,MAAI,WAAW,YAAY;AAEzB,WAAO,WAAW;AAAA,EAAA;AAGpB,MAAI,WAAW,cAAc,MAAM,QAAQ,WAAW,KAAK,GAAG;AAE5D,WAAO,WAAW,MAAM,IAAI,CAAC,SAAS;AAChC,UAAA,EAAC,6BAAM,OAAM;AACf,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MAAA;AAEF,aAAO,KAAK;AAAA,IAAA,CACb;AAAA,EAAA;AAGmB;AACZ,YAAA;AAAA,MACN;AAAA,IACF;AAAA,EAAA;AAIF,SAAO,CAAC;AACV;"}
@@ -143,8 +143,7 @@ function checkProductVariantParam(variant, key, currentValidParamState, checkAll
143
143
  }
144
144
  function getAdjacentAndFirstAvailableVariants(product) {
145
145
  const checkedProduct = checkProductParam(product);
146
- if (!checkedProduct.options)
147
- return [];
146
+ if (!checkedProduct.options) return [];
148
147
  const availableVariants = {};
149
148
  checkedProduct.options.map((option) => {
150
149
  var _a;
@@ -174,8 +173,7 @@ function getAdjacentAndFirstAvailableVariants(product) {
174
173
  }
175
174
  function getProductOptions(product) {
176
175
  const checkedProduct = checkProductParam(product, true);
177
- if (!checkedProduct.options)
178
- return [];
176
+ if (!checkedProduct.options) return [];
179
177
  const {
180
178
  options,
181
179
  selectedOrFirstAvailableVariant: selectedVariant,
@@ -1 +1 @@
1
- {"version":3,"file":"getProductOptions.mjs","sources":["../../src/getProductOptions.ts"],"sourcesContent":["import {isOptionValueCombinationInEncodedVariant} from './optionValueDecoder.js';\nimport type {\n Product,\n ProductOption,\n ProductOptionValue,\n ProductVariant,\n SelectedOption,\n} from './storefront-api-types';\n\nexport type RecursivePartial<T> = {\n [P in keyof T]?: RecursivePartial<T[P]>;\n};\ntype ProductOptionsMapping = Record<string, Record<string, number>>;\ntype ProductOptionValueState = {\n variant: ProductVariant;\n handle: string;\n variantUriQuery: string;\n selected: boolean;\n exists: boolean;\n available: boolean;\n isDifferentProduct: boolean;\n};\ntype MappedProductOptionValue = ProductOptionValue & ProductOptionValueState;\n\n/**\n * Creates a mapping of product options to their index for matching encoded values\n * For example, a product option of\n * [\n * \\{\n * name: 'Color',\n * optionValues: [\\{name: 'Red'\\}, \\{name: 'Blue'\\}]\n * \\},\n * \\{\n * name: 'Size',\n * optionValues: [\\{name: 'Small'\\}, \\{name: 'Medium'\\}, \\{name: 'Large'\\}]\n * \\}\n * ]\n * Would return\n * \\{\n * 'Color': \\{Red: 0, Blue: 1\\},\n * 'Size': \\{Small: 0, Medium: 1, Large: 2\\}\n * \\}\n */\nfunction mapProductOptions(options: ProductOption[]): ProductOptionsMapping {\n return Object.assign(\n {},\n ...options.map((option: ProductOption) => {\n return {\n [option.name]: Object.assign(\n {},\n ...(option?.optionValues\n ? option.optionValues.map((value, index) => {\n return {[value.name]: index};\n })\n : []),\n ),\n } as Record<string, number>;\n }),\n );\n}\n\n/**\n * Converts the product option into an Object\\<key, value\\> for building query params\n * For example, a selected product option of\n * [\n * \\{\n * name: 'Color',\n * value: 'Red',\n * \\},\n * \\{\n * name: 'Size',\n * value: 'Medium',\n * \\}\n * ]\n * Would return\n * \\{\n * Color: 'Red',\n * Size: 'Medium',\n * \\}\n */\nexport function mapSelectedProductOptionToObject(\n options: Pick<SelectedOption, 'name' | 'value'>[],\n): Record<string, string> {\n return Object.assign(\n {},\n ...options.map((key) => {\n return {[key.name]: key.value};\n }),\n ) as Record<string, string>;\n}\n\n/**\n * Returns the JSON stringify result of mapSelectedProductOptionToObject\n */\nfunction mapSelectedProductOptionToObjectAsString(\n options: Pick<SelectedOption, 'name' | 'value'>[],\n): string {\n return JSON.stringify(mapSelectedProductOptionToObject(options));\n}\n\n/**\n * Encode the selected product option as a key for mapping to the encoded variants\n * For example, a selected product option of\n * [\n * \\{\n * name: 'Color',\n * value: 'Red',\n * \\},\n * \\{\n * name: 'Size',\n * value: 'Medium',\n * \\}\n * ]\n * Would return\n * JSON.stringify(\\{\n * Color: 'Red',\n * Size: 'Medium',\n * \\})\n */\nfunction encodeSelectedProductOptionAsKey(\n selectedOption:\n | Pick<SelectedOption, 'name' | 'value'>[]\n | Record<string, string>,\n): string {\n if (Array.isArray(selectedOption)) {\n return JSON.stringify(\n Object.assign(\n {},\n ...selectedOption.map((option) => ({[option.name]: option.value})),\n ),\n );\n } else {\n return JSON.stringify(selectedOption);\n }\n}\n\n/**\n * Build the encoding array for the given selected options. For example, if we have\n * the following productOptionMappings:\n *\n * \\{\n * 'Color': \\{Red: 0, Blue: 1\\},\n * 'Size': \\{Small: 0, Medium: 1, Large: 2\\}\n * \\}\n *\n * A selectedOption of\n *\n * \\{\n * Color: 'Red',\n * Size: 'Medium',\n * \\}\n *\n * `buildEncodingArrayFromSelectedOptions` will produce\n *\n * [0,1]\n *\n * If in the case where a selected option doesn't exists in the mapping array, for example:\n *\n * \\{\n * Color: 'Red',\n * Fabric: 'Cotton',\n * Size: 'Medium',\n * \\}\n *\n * `buildEncodingArrayFromSelectedOptions` will still produce\n *\n * [0,1]\n *\n * This can be caused by when we do not have all the product\n * option information for the loading optimistic variant\n */\nfunction buildEncodingArrayFromSelectedOptions(\n selectedOption: Record<string, string>,\n productOptionMappings: ProductOptionsMapping,\n): Array<number> {\n const encoding = Object.keys(selectedOption).map((key) => {\n return productOptionMappings[key]\n ? productOptionMappings[key][selectedOption[key]]\n : null;\n });\n return encoding.filter((code) => code !== null);\n}\n\n/**\n * Takes an array of product variants and maps them to an object with the encoded selected option values as the key.\n * For example, a product variant of\n * [\n * \\{\n * id: 1,\n * selectedOptions: [\n * \\{name: 'Color', value: 'Red'\\},\n * \\{name: 'Size', value: 'Small'\\},\n * ],\n * \\},\n * \\{\n * id: 2,\n * selectedOptions: [\n * \\{name: 'Color', value: 'Red'\\},\n * \\{name: 'Size', value: 'Medium'\\},\n * ],\n * \\}\n * ]\n * Would return\n * \\{\n * '[0,0]': \\{id: 1, selectedOptions: [\\{name: 'Color', value: 'Red'\\}, \\{name: 'Size', value: 'Small'\\}]\\},\n * '[0,1]': \\{id: 2, selectedOptions: [\\{name: 'Color', value: 'Red'\\}, \\{name: 'Size', value: 'Medium'\\}]\\},\n * \\}\n */\nfunction mapVariants(\n variants: ProductVariant[],\n): Record<string, ProductVariant> {\n return Object.assign(\n {},\n ...variants.map((variant) => {\n const variantKey = encodeSelectedProductOptionAsKey(\n variant.selectedOptions || [],\n );\n return {[variantKey]: variant};\n }),\n ) as Record<string, ProductVariant>;\n}\n\nexport type MappedProductOptions = Omit<ProductOption, 'optionValues'> & {\n optionValues: MappedProductOptionValue[];\n};\n\nconst PRODUCT_INPUTS = [\n 'options',\n 'selectedOrFirstAvailableVariant',\n 'adjacentVariants',\n];\n\nconst PRODUCT_INPUTS_EXTRA = [\n 'handle',\n 'encodedVariantExistence',\n 'encodedVariantAvailability',\n];\n\nfunction logErrorAndReturnFalse(key: string): boolean {\n console.error(\n `[h2:error:getProductOptions] product.${key} is missing. Make sure you query for this field from the Storefront API.`,\n );\n return false;\n}\n\nexport function checkProductParam(\n product: RecursivePartial<Product>,\n checkAll = false,\n): Product {\n let validParam = true;\n const productKeys = Object.keys(product);\n\n // Check product input\n (checkAll\n ? [...PRODUCT_INPUTS, ...PRODUCT_INPUTS_EXTRA]\n : PRODUCT_INPUTS\n ).forEach((key) => {\n if (!productKeys.includes(key)) {\n validParam = logErrorAndReturnFalse(key);\n }\n });\n\n // Check for nested options requirements\n if (product.options) {\n const firstOption = product?.options[0];\n\n if (checkAll && !firstOption?.name) {\n validParam = logErrorAndReturnFalse('options.name');\n }\n\n // Check for options.optionValues\n if (product?.options[0]?.optionValues) {\n let firstOptionValues = product.options[0].optionValues[0];\n\n // Check for options.optionValues.name\n if (checkAll && !firstOptionValues?.name) {\n validParam = logErrorAndReturnFalse('options.optionValues.name');\n }\n\n // It is possible for firstSelectableVariant to be null\n firstOptionValues = product.options[0].optionValues.filter(\n (value) => !!value?.firstSelectableVariant,\n )[0];\n\n // Check for options.optionValues.firstSelectableVariant\n if (firstOptionValues?.firstSelectableVariant) {\n // check product variant\n validParam = checkProductVariantParam(\n firstOptionValues.firstSelectableVariant,\n 'options.optionValues.firstSelectableVariant',\n validParam,\n checkAll,\n );\n }\n } else {\n validParam = logErrorAndReturnFalse('options.optionValues');\n }\n }\n\n // Check for nested selectedOrFirstAvailableVariant requirements\n if (product.selectedOrFirstAvailableVariant) {\n validParam = checkProductVariantParam(\n product.selectedOrFirstAvailableVariant,\n 'selectedOrFirstAvailableVariant',\n validParam,\n checkAll,\n );\n }\n\n // Check for nested adjacentVariants requirements\n if (!!product.adjacentVariants && product.adjacentVariants[0]) {\n validParam = checkProductVariantParam(\n product.adjacentVariants[0],\n 'adjacentVariants',\n validParam,\n checkAll,\n );\n }\n\n return (validParam ? product : {}) as Product;\n}\n\nfunction checkProductVariantParam(\n variant: RecursivePartial<ProductVariant>,\n key: string,\n currentValidParamState: boolean,\n checkAll: boolean,\n): boolean {\n let validParam = currentValidParamState;\n\n if (checkAll && !variant.product?.handle) {\n validParam = logErrorAndReturnFalse(`${key}.product.handle`);\n }\n if (variant.selectedOptions) {\n const firstSelectedOption = variant.selectedOptions[0];\n if (!firstSelectedOption?.name) {\n validParam = logErrorAndReturnFalse(`${key}.selectedOptions.name`);\n }\n if (!firstSelectedOption?.value) {\n validParam = logErrorAndReturnFalse(`${key}.selectedOptions.value`);\n }\n } else {\n validParam = logErrorAndReturnFalse(`${key}.selectedOptions`);\n }\n\n return validParam;\n}\n\n/**\n * Finds all the variants provided by adjacentVariants, options.optionValues.firstAvailableVariant,\n * and selectedOrFirstAvailableVariant and return them in a single array\n */\nexport function getAdjacentAndFirstAvailableVariants(\n product: RecursivePartial<Product>,\n): ProductVariant[] {\n // Checks for valid product input\n const checkedProduct = checkProductParam(product);\n\n if (!checkedProduct.options) return [];\n\n const availableVariants: Record<string, ProductVariant> = {};\n checkedProduct.options.map((option) => {\n option.optionValues?.map((value) => {\n if (value.firstSelectableVariant) {\n const variantKey = mapSelectedProductOptionToObjectAsString(\n value.firstSelectableVariant.selectedOptions,\n );\n availableVariants[variantKey] = value.firstSelectableVariant;\n }\n });\n });\n\n checkedProduct.adjacentVariants.map((variant) => {\n const variantKey = mapSelectedProductOptionToObjectAsString(\n variant.selectedOptions,\n );\n availableVariants[variantKey] = variant;\n });\n\n const selectedVariant = checkedProduct.selectedOrFirstAvailableVariant;\n if (selectedVariant) {\n const variantKey = mapSelectedProductOptionToObjectAsString(\n selectedVariant.selectedOptions,\n );\n availableVariants[variantKey] = selectedVariant;\n }\n\n return Object.values(availableVariants);\n}\n\n/**\n * Returns a product options array with its relevant information\n * about the variant\n */\nexport function getProductOptions(\n product: RecursivePartial<Product>,\n): MappedProductOptions[] {\n // Checks for valid product input\n const checkedProduct = checkProductParam(product, true);\n\n if (!checkedProduct.options) return [];\n\n const {\n options,\n selectedOrFirstAvailableVariant: selectedVariant,\n adjacentVariants,\n encodedVariantExistence,\n encodedVariantAvailability,\n handle: productHandle,\n } = checkedProduct;\n\n // The available product options is dictated by the selected options of the current variant:\n // Filter out un-used options (Happens on parent combined listing product)\n const selectedOptionKeys = selectedVariant?.selectedOptions.map(\n (option) => option.name,\n );\n const filteredOptions = options.filter((option) => {\n return selectedOptionKeys && selectedOptionKeys.indexOf(option.name) >= 0;\n });\n\n // Get a mapping of product option names to their index for matching encoded values\n const productOptionMappings = mapProductOptions(options);\n\n // Get the adjacent variants mapped to the encoded selected option values\n const variants = mapVariants(\n selectedVariant ? [selectedVariant, ...adjacentVariants] : adjacentVariants,\n );\n\n // Get the key:value version of selected options for building url query params\n const selectedOptions = mapSelectedProductOptionToObject(\n selectedVariant ? selectedVariant.selectedOptions : [],\n );\n\n const productOptions = filteredOptions.map((option, optionIndex) => {\n return {\n ...option,\n optionValues: option.optionValues.map((value) => {\n const targetOptionParams = {...selectedOptions}; // Clones the selected options\n\n // Modify the selected option value to the current option value\n targetOptionParams[option.name] = value.name;\n\n // Encode the new selected option values as a key for mapping to the product variants\n const targetKey = encodeSelectedProductOptionAsKey(\n targetOptionParams || [],\n );\n const encodingKey = buildEncodingArrayFromSelectedOptions(\n targetOptionParams || [],\n productOptionMappings,\n );\n\n // Top-down option check for existence and availability\n const topDownKey = encodingKey.slice(0, optionIndex + 1);\n const exists = isOptionValueCombinationInEncodedVariant(\n topDownKey,\n encodedVariantExistence || '',\n );\n const available = isOptionValueCombinationInEncodedVariant(\n topDownKey,\n encodedVariantAvailability || '',\n );\n\n // Get the variant for the current option value if exists, else use the first selectable variant\n const variant: ProductVariant =\n variants[targetKey] || value.firstSelectableVariant;\n\n // Build the query params for this option value\n let variantOptionParam = {};\n if (variant) {\n variantOptionParam = mapSelectedProductOptionToObject(\n variant.selectedOptions || [],\n );\n }\n const searchParams = new URLSearchParams(variantOptionParam);\n const handle = variant?.product?.handle || productHandle;\n\n return {\n ...value,\n variant,\n handle,\n variantUriQuery: searchParams.toString(),\n selected: selectedOptions[option.name] === value.name,\n exists,\n available,\n isDifferentProduct: handle !== productHandle,\n };\n }),\n };\n });\n\n return productOptions;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getProductOptions.mjs","sources":["../../src/getProductOptions.ts"],"sourcesContent":["import {isOptionValueCombinationInEncodedVariant} from './optionValueDecoder.js';\nimport type {\n Product,\n ProductOption,\n ProductOptionValue,\n ProductVariant,\n SelectedOption,\n} from './storefront-api-types';\n\nexport type RecursivePartial<T> = {\n [P in keyof T]?: RecursivePartial<T[P]>;\n};\ntype ProductOptionsMapping = Record<string, Record<string, number>>;\ntype ProductOptionValueState = {\n variant: ProductVariant;\n handle: string;\n variantUriQuery: string;\n selected: boolean;\n exists: boolean;\n available: boolean;\n isDifferentProduct: boolean;\n};\ntype MappedProductOptionValue = ProductOptionValue & ProductOptionValueState;\n\n/**\n * Creates a mapping of product options to their index for matching encoded values\n * For example, a product option of\n * [\n * \\{\n * name: 'Color',\n * optionValues: [\\{name: 'Red'\\}, \\{name: 'Blue'\\}]\n * \\},\n * \\{\n * name: 'Size',\n * optionValues: [\\{name: 'Small'\\}, \\{name: 'Medium'\\}, \\{name: 'Large'\\}]\n * \\}\n * ]\n * Would return\n * \\{\n * 'Color': \\{Red: 0, Blue: 1\\},\n * 'Size': \\{Small: 0, Medium: 1, Large: 2\\}\n * \\}\n */\nfunction mapProductOptions(options: ProductOption[]): ProductOptionsMapping {\n return Object.assign(\n {},\n ...options.map((option: ProductOption) => {\n return {\n [option.name]: Object.assign(\n {},\n ...(option?.optionValues\n ? option.optionValues.map((value, index) => {\n return {[value.name]: index};\n })\n : []),\n ),\n } as Record<string, number>;\n }),\n );\n}\n\n/**\n * Converts the product option into an Object\\<key, value\\> for building query params\n * For example, a selected product option of\n * [\n * \\{\n * name: 'Color',\n * value: 'Red',\n * \\},\n * \\{\n * name: 'Size',\n * value: 'Medium',\n * \\}\n * ]\n * Would return\n * \\{\n * Color: 'Red',\n * Size: 'Medium',\n * \\}\n */\nexport function mapSelectedProductOptionToObject(\n options: Pick<SelectedOption, 'name' | 'value'>[],\n): Record<string, string> {\n return Object.assign(\n {},\n ...options.map((key) => {\n return {[key.name]: key.value};\n }),\n ) as Record<string, string>;\n}\n\n/**\n * Returns the JSON stringify result of mapSelectedProductOptionToObject\n */\nfunction mapSelectedProductOptionToObjectAsString(\n options: Pick<SelectedOption, 'name' | 'value'>[],\n): string {\n return JSON.stringify(mapSelectedProductOptionToObject(options));\n}\n\n/**\n * Encode the selected product option as a key for mapping to the encoded variants\n * For example, a selected product option of\n * [\n * \\{\n * name: 'Color',\n * value: 'Red',\n * \\},\n * \\{\n * name: 'Size',\n * value: 'Medium',\n * \\}\n * ]\n * Would return\n * JSON.stringify(\\{\n * Color: 'Red',\n * Size: 'Medium',\n * \\})\n */\nfunction encodeSelectedProductOptionAsKey(\n selectedOption:\n | Pick<SelectedOption, 'name' | 'value'>[]\n | Record<string, string>,\n): string {\n if (Array.isArray(selectedOption)) {\n return JSON.stringify(\n Object.assign(\n {},\n ...selectedOption.map((option) => ({[option.name]: option.value})),\n ),\n );\n } else {\n return JSON.stringify(selectedOption);\n }\n}\n\n/**\n * Build the encoding array for the given selected options. For example, if we have\n * the following productOptionMappings:\n *\n * \\{\n * 'Color': \\{Red: 0, Blue: 1\\},\n * 'Size': \\{Small: 0, Medium: 1, Large: 2\\}\n * \\}\n *\n * A selectedOption of\n *\n * \\{\n * Color: 'Red',\n * Size: 'Medium',\n * \\}\n *\n * `buildEncodingArrayFromSelectedOptions` will produce\n *\n * [0,1]\n *\n * If in the case where a selected option doesn't exists in the mapping array, for example:\n *\n * \\{\n * Color: 'Red',\n * Fabric: 'Cotton',\n * Size: 'Medium',\n * \\}\n *\n * `buildEncodingArrayFromSelectedOptions` will still produce\n *\n * [0,1]\n *\n * This can be caused by when we do not have all the product\n * option information for the loading optimistic variant\n */\nfunction buildEncodingArrayFromSelectedOptions(\n selectedOption: Record<string, string>,\n productOptionMappings: ProductOptionsMapping,\n): Array<number> {\n const encoding = Object.keys(selectedOption).map((key) => {\n return productOptionMappings[key]\n ? productOptionMappings[key][selectedOption[key]]\n : null;\n });\n return encoding.filter((code) => code !== null);\n}\n\n/**\n * Takes an array of product variants and maps them to an object with the encoded selected option values as the key.\n * For example, a product variant of\n * [\n * \\{\n * id: 1,\n * selectedOptions: [\n * \\{name: 'Color', value: 'Red'\\},\n * \\{name: 'Size', value: 'Small'\\},\n * ],\n * \\},\n * \\{\n * id: 2,\n * selectedOptions: [\n * \\{name: 'Color', value: 'Red'\\},\n * \\{name: 'Size', value: 'Medium'\\},\n * ],\n * \\}\n * ]\n * Would return\n * \\{\n * '[0,0]': \\{id: 1, selectedOptions: [\\{name: 'Color', value: 'Red'\\}, \\{name: 'Size', value: 'Small'\\}]\\},\n * '[0,1]': \\{id: 2, selectedOptions: [\\{name: 'Color', value: 'Red'\\}, \\{name: 'Size', value: 'Medium'\\}]\\},\n * \\}\n */\nfunction mapVariants(\n variants: ProductVariant[],\n): Record<string, ProductVariant> {\n return Object.assign(\n {},\n ...variants.map((variant) => {\n const variantKey = encodeSelectedProductOptionAsKey(\n variant.selectedOptions || [],\n );\n return {[variantKey]: variant};\n }),\n ) as Record<string, ProductVariant>;\n}\n\nexport type MappedProductOptions = Omit<ProductOption, 'optionValues'> & {\n optionValues: MappedProductOptionValue[];\n};\n\nconst PRODUCT_INPUTS = [\n 'options',\n 'selectedOrFirstAvailableVariant',\n 'adjacentVariants',\n];\n\nconst PRODUCT_INPUTS_EXTRA = [\n 'handle',\n 'encodedVariantExistence',\n 'encodedVariantAvailability',\n];\n\nfunction logErrorAndReturnFalse(key: string): boolean {\n console.error(\n `[h2:error:getProductOptions] product.${key} is missing. Make sure you query for this field from the Storefront API.`,\n );\n return false;\n}\n\nexport function checkProductParam(\n product: RecursivePartial<Product>,\n checkAll = false,\n): Product {\n let validParam = true;\n const productKeys = Object.keys(product);\n\n // Check product input\n (checkAll\n ? [...PRODUCT_INPUTS, ...PRODUCT_INPUTS_EXTRA]\n : PRODUCT_INPUTS\n ).forEach((key) => {\n if (!productKeys.includes(key)) {\n validParam = logErrorAndReturnFalse(key);\n }\n });\n\n // Check for nested options requirements\n if (product.options) {\n const firstOption = product?.options[0];\n\n if (checkAll && !firstOption?.name) {\n validParam = logErrorAndReturnFalse('options.name');\n }\n\n // Check for options.optionValues\n if (product?.options[0]?.optionValues) {\n let firstOptionValues = product.options[0].optionValues[0];\n\n // Check for options.optionValues.name\n if (checkAll && !firstOptionValues?.name) {\n validParam = logErrorAndReturnFalse('options.optionValues.name');\n }\n\n // It is possible for firstSelectableVariant to be null\n firstOptionValues = product.options[0].optionValues.filter(\n (value) => !!value?.firstSelectableVariant,\n )[0];\n\n // Check for options.optionValues.firstSelectableVariant\n if (firstOptionValues?.firstSelectableVariant) {\n // check product variant\n validParam = checkProductVariantParam(\n firstOptionValues.firstSelectableVariant,\n 'options.optionValues.firstSelectableVariant',\n validParam,\n checkAll,\n );\n }\n } else {\n validParam = logErrorAndReturnFalse('options.optionValues');\n }\n }\n\n // Check for nested selectedOrFirstAvailableVariant requirements\n if (product.selectedOrFirstAvailableVariant) {\n validParam = checkProductVariantParam(\n product.selectedOrFirstAvailableVariant,\n 'selectedOrFirstAvailableVariant',\n validParam,\n checkAll,\n );\n }\n\n // Check for nested adjacentVariants requirements\n if (!!product.adjacentVariants && product.adjacentVariants[0]) {\n validParam = checkProductVariantParam(\n product.adjacentVariants[0],\n 'adjacentVariants',\n validParam,\n checkAll,\n );\n }\n\n return (validParam ? product : {}) as Product;\n}\n\nfunction checkProductVariantParam(\n variant: RecursivePartial<ProductVariant>,\n key: string,\n currentValidParamState: boolean,\n checkAll: boolean,\n): boolean {\n let validParam = currentValidParamState;\n\n if (checkAll && !variant.product?.handle) {\n validParam = logErrorAndReturnFalse(`${key}.product.handle`);\n }\n if (variant.selectedOptions) {\n const firstSelectedOption = variant.selectedOptions[0];\n if (!firstSelectedOption?.name) {\n validParam = logErrorAndReturnFalse(`${key}.selectedOptions.name`);\n }\n if (!firstSelectedOption?.value) {\n validParam = logErrorAndReturnFalse(`${key}.selectedOptions.value`);\n }\n } else {\n validParam = logErrorAndReturnFalse(`${key}.selectedOptions`);\n }\n\n return validParam;\n}\n\n/**\n * Finds all the variants provided by adjacentVariants, options.optionValues.firstAvailableVariant,\n * and selectedOrFirstAvailableVariant and return them in a single array\n */\nexport function getAdjacentAndFirstAvailableVariants(\n product: RecursivePartial<Product>,\n): ProductVariant[] {\n // Checks for valid product input\n const checkedProduct = checkProductParam(product);\n\n if (!checkedProduct.options) return [];\n\n const availableVariants: Record<string, ProductVariant> = {};\n checkedProduct.options.map((option) => {\n option.optionValues?.map((value) => {\n if (value.firstSelectableVariant) {\n const variantKey = mapSelectedProductOptionToObjectAsString(\n value.firstSelectableVariant.selectedOptions,\n );\n availableVariants[variantKey] = value.firstSelectableVariant;\n }\n });\n });\n\n checkedProduct.adjacentVariants.map((variant) => {\n const variantKey = mapSelectedProductOptionToObjectAsString(\n variant.selectedOptions,\n );\n availableVariants[variantKey] = variant;\n });\n\n const selectedVariant = checkedProduct.selectedOrFirstAvailableVariant;\n if (selectedVariant) {\n const variantKey = mapSelectedProductOptionToObjectAsString(\n selectedVariant.selectedOptions,\n );\n availableVariants[variantKey] = selectedVariant;\n }\n\n return Object.values(availableVariants);\n}\n\n/**\n * Returns a product options array with its relevant information\n * about the variant\n */\nexport function getProductOptions(\n product: RecursivePartial<Product>,\n): MappedProductOptions[] {\n // Checks for valid product input\n const checkedProduct = checkProductParam(product, true);\n\n if (!checkedProduct.options) return [];\n\n const {\n options,\n selectedOrFirstAvailableVariant: selectedVariant,\n adjacentVariants,\n encodedVariantExistence,\n encodedVariantAvailability,\n handle: productHandle,\n } = checkedProduct;\n\n // The available product options is dictated by the selected options of the current variant:\n // Filter out un-used options (Happens on parent combined listing product)\n const selectedOptionKeys = selectedVariant?.selectedOptions.map(\n (option) => option.name,\n );\n const filteredOptions = options.filter((option) => {\n return selectedOptionKeys && selectedOptionKeys.indexOf(option.name) >= 0;\n });\n\n // Get a mapping of product option names to their index for matching encoded values\n const productOptionMappings = mapProductOptions(options);\n\n // Get the adjacent variants mapped to the encoded selected option values\n const variants = mapVariants(\n selectedVariant ? [selectedVariant, ...adjacentVariants] : adjacentVariants,\n );\n\n // Get the key:value version of selected options for building url query params\n const selectedOptions = mapSelectedProductOptionToObject(\n selectedVariant ? selectedVariant.selectedOptions : [],\n );\n\n const productOptions = filteredOptions.map((option, optionIndex) => {\n return {\n ...option,\n optionValues: option.optionValues.map((value) => {\n const targetOptionParams = {...selectedOptions}; // Clones the selected options\n\n // Modify the selected option value to the current option value\n targetOptionParams[option.name] = value.name;\n\n // Encode the new selected option values as a key for mapping to the product variants\n const targetKey = encodeSelectedProductOptionAsKey(\n targetOptionParams || [],\n );\n const encodingKey = buildEncodingArrayFromSelectedOptions(\n targetOptionParams || [],\n productOptionMappings,\n );\n\n // Top-down option check for existence and availability\n const topDownKey = encodingKey.slice(0, optionIndex + 1);\n const exists = isOptionValueCombinationInEncodedVariant(\n topDownKey,\n encodedVariantExistence || '',\n );\n const available = isOptionValueCombinationInEncodedVariant(\n topDownKey,\n encodedVariantAvailability || '',\n );\n\n // Get the variant for the current option value if exists, else use the first selectable variant\n const variant: ProductVariant =\n variants[targetKey] || value.firstSelectableVariant;\n\n // Build the query params for this option value\n let variantOptionParam = {};\n if (variant) {\n variantOptionParam = mapSelectedProductOptionToObject(\n variant.selectedOptions || [],\n );\n }\n const searchParams = new URLSearchParams(variantOptionParam);\n const handle = variant?.product?.handle || productHandle;\n\n return {\n ...value,\n variant,\n handle,\n variantUriQuery: searchParams.toString(),\n selected: selectedOptions[option.name] === value.name,\n exists,\n available,\n isDifferentProduct: handle !== productHandle,\n };\n }),\n };\n });\n\n return productOptions;\n}\n"],"names":[],"mappings":"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"}
@@ -28,6 +28,7 @@ import { RichText } from "./RichText.mjs";
28
28
  import { ShopifyProvider, useShop } from "./ShopifyProvider.mjs";
29
29
  import { ShopPayButton } from "./ShopPayButton.mjs";
30
30
  import { createStorefrontClient } from "./storefront-client.mjs";
31
+ import { SHOPIFY_UNIQUE_TOKEN_HEADER, SHOPIFY_VISIT_TOKEN_HEADER, getTrackingValues } from "./tracking-utils.mjs";
31
32
  import { useMoney } from "./useMoney.mjs";
32
33
  import { useSelectedOptionInUrlParam } from "./useSelectedOptionInUrlParam.mjs";
33
34
  import { useShopifyCookies } from "./useShopifyCookies.mjs";
@@ -56,6 +57,8 @@ export {
56
57
  SHOPIFY_STOREFRONT_ID_HEADER,
57
58
  SHOPIFY_STOREFRONT_S_HEADER,
58
59
  SHOPIFY_STOREFRONT_Y_HEADER,
60
+ SHOPIFY_UNIQUE_TOKEN_HEADER,
61
+ SHOPIFY_VISIT_TOKEN_HEADER,
59
62
  SHOPIFY_Y,
60
63
  ShopPayButton,
61
64
  ShopifyProvider,
@@ -69,6 +72,7 @@ export {
69
72
  getClientBrowserParameters,
70
73
  getProductOptions,
71
74
  getShopifyCookies,
75
+ getTrackingValues,
72
76
  isOptionValueCombinationInEncodedVariant,
73
77
  mapSelectedProductOptionToObject,
74
78
  parseGid,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"load-script.mjs","sources":["../../src/load-script.tsx"],"sourcesContent":["import {useState, useEffect} from 'react';\n\nconst SCRIPTS_LOADED: Record<string, Promise<boolean>> = {};\n\ntype LoadScriptOptions = {\n module?: boolean;\n in?: 'head' | 'body';\n attributes?: Record<string, string>;\n};\n\nexport function loadScript(\n src: string,\n options?: LoadScriptOptions,\n): Promise<boolean> {\n const isScriptLoaded = SCRIPTS_LOADED[src];\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (isScriptLoaded) {\n return isScriptLoaded;\n }\n\n const promise = new Promise<boolean>((resolve, reject) => {\n const script = document.createElement('script');\n if (options?.module) {\n script.type = 'module';\n } else {\n script.type = 'text/javascript';\n }\n script.src = src;\n script.onload = (): void => {\n resolve(true);\n };\n script.onerror = (): void => {\n reject(false);\n };\n if (options?.in === 'head') {\n document.head.appendChild(script);\n } else {\n document.body.appendChild(script);\n }\n\n const attributes = options?.attributes;\n if (attributes) {\n Object.keys(attributes).forEach((key) => {\n script.setAttribute(key, attributes[key]);\n });\n }\n });\n\n SCRIPTS_LOADED[src] = promise;\n\n return promise;\n}\n\ntype LoadScriptParams = Parameters<typeof loadScript>;\n\n/**\n * The `useLoadScript` hook loads an external script tag in the browser. It allows React components to lazy-load large third-party dependencies.\n */\nexport function useLoadScript(\n url: LoadScriptParams[0],\n options?: LoadScriptParams[1],\n): ScriptState {\n const [status, setStatus] = useState<ScriptState>('loading');\n\n useEffect(\n () => {\n loadScript(url, options)\n .then(() => setStatus('done'))\n .catch(() => setStatus('error'));\n },\n // Ignore options changes since it won't trigger a new load.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [url],\n );\n\n return status;\n}\n\ntype ScriptState = 'loading' | 'done' | 'error';\n"],"names":[],"mappings":";AAEA,MAAM,iBAAmD,CAAA;AAQzC,SAAA,WACd,KACA,SACkB;AACZ,QAAA,iBAAiB,eAAe,GAAG;AAGzC,MAAI,gBAAgB;AACX,WAAA;AAAA,EACT;AAEA,QAAM,UAAU,IAAI,QAAiB,CAAC,SAAS,WAAW;AAClD,UAAA,SAAS,SAAS,cAAc,QAAQ;AAC9C,QAAI,mCAAS,QAAQ;AACnB,aAAO,OAAO;AAAA,IAAA,OACT;AACL,aAAO,OAAO;AAAA,IAChB;AACA,WAAO,MAAM;AACb,WAAO,SAAS,MAAY;AAC1B,cAAQ,IAAI;AAAA,IAAA;AAEd,WAAO,UAAU,MAAY;AAC3B,aAAO,KAAK;AAAA,IAAA;AAEV,SAAA,mCAAS,QAAO,QAAQ;AACjB,eAAA,KAAK,YAAY,MAAM;AAAA,IAAA,OAC3B;AACI,eAAA,KAAK,YAAY,MAAM;AAAA,IAClC;AAEA,UAAM,aAAa,mCAAS;AAC5B,QAAI,YAAY;AACd,aAAO,KAAK,UAAU,EAAE,QAAQ,CAAC,QAAQ;AACvC,eAAO,aAAa,KAAK,WAAW,GAAG,CAAC;AAAA,MAAA,CACzC;AAAA,IACH;AAAA,EAAA,CACD;AAED,iBAAe,GAAG,IAAI;AAEf,SAAA;AACT;AAOgB,SAAA,cACd,KACA,SACa;AACb,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAsB,SAAS;AAE3D;AAAA,IACE,MAAM;AACJ,iBAAW,KAAK,OAAO,EACpB,KAAK,MAAM,UAAU,MAAM,CAAC,EAC5B,MAAM,MAAM,UAAU,OAAO,CAAC;AAAA,IACnC;AAAA;AAAA;AAAA,IAGA,CAAC,GAAG;AAAA,EAAA;AAGC,SAAA;AACT;"}
1
+ {"version":3,"file":"load-script.mjs","sources":["../../src/load-script.tsx"],"sourcesContent":["import {useState, useEffect} from 'react';\n\nconst SCRIPTS_LOADED: Record<string, Promise<boolean>> = {};\n\ntype LoadScriptOptions = {\n module?: boolean;\n in?: 'head' | 'body';\n attributes?: Record<string, string>;\n};\n\nexport function loadScript(\n src: string,\n options?: LoadScriptOptions,\n): Promise<boolean> {\n const isScriptLoaded = SCRIPTS_LOADED[src];\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (isScriptLoaded) {\n return isScriptLoaded;\n }\n\n const promise = new Promise<boolean>((resolve, reject) => {\n const script = document.createElement('script');\n if (options?.module) {\n script.type = 'module';\n } else {\n script.type = 'text/javascript';\n }\n script.src = src;\n script.onload = (): void => {\n resolve(true);\n };\n script.onerror = (): void => {\n reject(false);\n };\n if (options?.in === 'head') {\n document.head.appendChild(script);\n } else {\n document.body.appendChild(script);\n }\n\n const attributes = options?.attributes;\n if (attributes) {\n Object.keys(attributes).forEach((key) => {\n script.setAttribute(key, attributes[key]);\n });\n }\n });\n\n SCRIPTS_LOADED[src] = promise;\n\n return promise;\n}\n\ntype LoadScriptParams = Parameters<typeof loadScript>;\n\n/**\n * The `useLoadScript` hook loads an external script tag in the browser. It allows React components to lazy-load large third-party dependencies.\n */\nexport function useLoadScript(\n url: LoadScriptParams[0],\n options?: LoadScriptParams[1],\n): ScriptState {\n const [status, setStatus] = useState<ScriptState>('loading');\n\n useEffect(\n () => {\n loadScript(url, options)\n .then(() => setStatus('done'))\n .catch(() => setStatus('error'));\n },\n // Ignore options changes since it won't trigger a new load.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [url],\n );\n\n return status;\n}\n\ntype ScriptState = 'loading' | 'done' | 'error';\n"],"names":[],"mappings":";AAEA,MAAM,iBAAmD,CAAC;AAQ1C,SAAA,WACd,KACA,SACkB;AACZ,QAAA,iBAAiB,eAAe,GAAG;AAGzC,MAAI,gBAAgB;AACX,WAAA;AAAA,EAAA;AAGT,QAAM,UAAU,IAAI,QAAiB,CAAC,SAAS,WAAW;AAClD,UAAA,SAAS,SAAS,cAAc,QAAQ;AAC9C,QAAI,mCAAS,QAAQ;AACnB,aAAO,OAAO;AAAA,IAAA,OACT;AACL,aAAO,OAAO;AAAA,IAAA;AAEhB,WAAO,MAAM;AACb,WAAO,SAAS,MAAY;AAC1B,cAAQ,IAAI;AAAA,IACd;AACA,WAAO,UAAU,MAAY;AAC3B,aAAO,KAAK;AAAA,IACd;AACI,SAAA,mCAAS,QAAO,QAAQ;AACjB,eAAA,KAAK,YAAY,MAAM;AAAA,IAAA,OAC3B;AACI,eAAA,KAAK,YAAY,MAAM;AAAA,IAAA;AAGlC,UAAM,aAAa,mCAAS;AAC5B,QAAI,YAAY;AACd,aAAO,KAAK,UAAU,EAAE,QAAQ,CAAC,QAAQ;AACvC,eAAO,aAAa,KAAK,WAAW,GAAG,CAAC;AAAA,MAAA,CACzC;AAAA,IAAA;AAAA,EACH,CACD;AAED,iBAAe,GAAG,IAAI;AAEf,SAAA;AACT;AAOgB,SAAA,cACd,KACA,SACa;AACb,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAsB,SAAS;AAE3D;AAAA,IACE,MAAM;AACJ,iBAAW,KAAK,OAAO,EACpB,KAAK,MAAM,UAAU,MAAM,CAAC,EAC5B,MAAM,MAAM,UAAU,OAAO,CAAC;AAAA,IACnC;AAAA;AAAA;AAAA,IAGA,CAAC,GAAG;AAAA,EACN;AAEO,SAAA;AACT;"}
@@ -14,20 +14,17 @@ PERFORMANCE OF THIS SOFTWARE.
14
14
  ***************************************************************************** */
15
15
  function t(t2, n2) {
16
16
  var e2 = "function" == typeof Symbol && t2[Symbol.iterator];
17
- if (!e2)
18
- return t2;
17
+ if (!e2) return t2;
19
18
  var r2, i2, o2 = e2.call(t2), a2 = [];
20
19
  try {
21
- for (; (void 0 === n2 || n2-- > 0) && !(r2 = o2.next()).done; )
22
- a2.push(r2.value);
20
+ for (; (void 0 === n2 || n2-- > 0) && !(r2 = o2.next()).done; ) a2.push(r2.value);
23
21
  } catch (t3) {
24
22
  i2 = { error: t3 };
25
23
  } finally {
26
24
  try {
27
25
  r2 && !r2.done && (e2 = o2.return) && e2.call(o2);
28
26
  } finally {
29
- if (i2)
30
- throw i2.error;
27
+ if (i2) throw i2.error;
31
28
  }
32
29
  }
33
30
  return a2;
@@ -81,17 +78,14 @@ function s(n2, i2) {
81
78
  try {
82
79
  for (var h = function(t2) {
83
80
  var n3 = "function" == typeof Symbol && Symbol.iterator, e3 = n3 && t2[n3], r2 = 0;
84
- if (e3)
85
- return e3.call(t2);
86
- if (t2 && "number" == typeof t2.length)
87
- return { next: function() {
88
- return t2 && r2 >= t2.length && (t2 = void 0), { value: t2 && t2[r2++], done: !t2 };
89
- } };
81
+ if (e3) return e3.call(t2);
82
+ if (t2 && "number" == typeof t2.length) return { next: function() {
83
+ return t2 && r2 >= t2.length && (t2 = void 0), { value: t2 && t2[r2++], done: !t2 };
84
+ } };
90
85
  throw new TypeError(n3 ? "Object is not iterable." : "Symbol.iterator is not defined.");
91
86
  }(m), b = h.next(); !b.done; b = h.next()) {
92
87
  var S = b.value;
93
- if (void 0 === S)
94
- return c(p, g);
88
+ if (void 0 === S) return c(p, g);
95
89
  var w = "string" == typeof S ? { target: S } : S, j = w.target, E = w.actions, R = void 0 === E ? [] : E, N = w.cond, O = void 0 === N ? function() {
96
90
  return true;
97
91
  } : N, _ = void 0 === j, k = null != j ? j : p, T = n2.states[k];
@@ -110,8 +104,7 @@ function s(n2, i2) {
110
104
  try {
111
105
  b && !b.done && (l3 = h.return) && l3.call(h);
112
106
  } finally {
113
- if (s3)
114
- throw s3.error;
107
+ if (s3) throw s3.error;
115
108
  }
116
109
  }
117
110
  }
@@ -138,8 +131,7 @@ function v(t2) {
138
131
  if (o3) {
139
132
  var u2 = "object" == typeof o3 ? o3 : { context: t2.config.context, value: o3 };
140
133
  r2 = { value: u2.value, actions: [], context: u2.context, matches: a(u2.value) };
141
- } else
142
- r2 = t2.initialState;
134
+ } else r2 = t2.initialState;
143
135
  return i2 = n.Running, l(r2, e), c2;
144
136
  }, stop: function() {
145
137
  return i2 = n.Stopped, o2.clear(), c2;
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../../../../node_modules/@xstate/fsm/es/index.js"],"sourcesContent":["/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nfunction t(t,n){var e=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!e)return t;var r,i,o=e.call(t),a=[];try{for(;(void 0===n||n-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(e=o.return)&&e.call(o)}finally{if(i)throw i.error}}return a}var n;!function(t){t[t.NotStarted=0]=\"NotStarted\",t[t.Running=1]=\"Running\",t[t.Stopped=2]=\"Stopped\"}(n||(n={}));var e={type:\"xstate.init\"};function r(t){return void 0===t?[]:[].concat(t)}function i(t){return{type:\"xstate.assign\",assignment:t}}function o(t,n){return\"string\"==typeof(t=\"string\"==typeof t&&n&&n[t]?n[t]:t)?{type:t}:\"function\"==typeof t?{type:t.name,exec:t}:t}function a(t){return function(n){return t===n}}function u(t){return\"string\"==typeof t?{type:t}:t}function c(t,n){return{value:t,context:n,actions:[],changed:!1,matches:a(t)}}function f(t,n,e){var r=n,i=!1;return[t.filter((function(t){if(\"xstate.assign\"===t.type){i=!0;var n=Object.assign({},r);return\"function\"==typeof t.assignment?n=t.assignment(r,e):Object.keys(t.assignment).forEach((function(i){n[i]=\"function\"==typeof t.assignment[i]?t.assignment[i](r,e):t.assignment[i]})),r=n,!1}return!0})),r,i]}function s(n,i){void 0===i&&(i={});var s=t(f(r(n.states[n.initial].entry).map((function(t){return o(t,i.actions)})),n.context,e),2),l=s[0],v=s[1],y={config:n,_options:i,initialState:{value:n.initial,actions:l,context:v,matches:a(n.initial)},transition:function(e,i){var s,l,v=\"string\"==typeof e?{value:e,context:n.context}:e,p=v.value,g=v.context,d=u(i),x=n.states[p];if(x.on){var m=r(x.on[d.type]);try{for(var h=function(t){var n=\"function\"==typeof Symbol&&Symbol.iterator,e=n&&t[n],r=0;if(e)return e.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(n?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}(m),b=h.next();!b.done;b=h.next()){var S=b.value;if(void 0===S)return c(p,g);var w=\"string\"==typeof S?{target:S}:S,j=w.target,E=w.actions,R=void 0===E?[]:E,N=w.cond,O=void 0===N?function(){return!0}:N,_=void 0===j,k=null!=j?j:p,T=n.states[k];if(O(g,d)){var q=t(f((_?r(R):[].concat(x.exit,R,T.entry).filter((function(t){return t}))).map((function(t){return o(t,y._options.actions)})),g,d),3),z=q[0],A=q[1],B=q[2],C=null!=j?j:p;return{value:C,context:A,actions:z,changed:j!==p||z.length>0||B,matches:a(C)}}}}catch(t){s={error:t}}finally{try{b&&!b.done&&(l=h.return)&&l.call(h)}finally{if(s)throw s.error}}}return c(p,g)}};return y}var l=function(t,n){return t.actions.forEach((function(e){var r=e.exec;return r&&r(t.context,n)}))};function v(t){var r=t.initialState,i=n.NotStarted,o=new Set,c={_machine:t,send:function(e){i===n.Running&&(r=t.transition(r,e),l(r,u(e)),o.forEach((function(t){return t(r)})))},subscribe:function(t){return o.add(t),t(r),{unsubscribe:function(){return o.delete(t)}}},start:function(o){if(o){var u=\"object\"==typeof o?o:{context:t.config.context,value:o};r={value:u.value,actions:[],context:u.context,matches:a(u.value)}}else r=t.initialState;return i=n.Running,l(r,e),c},stop:function(){return i=n.Stopped,o.clear(),c},get state(){return r},get status(){return i}};return c}export{n as InterpreterStatus,i as assign,s as createMachine,v as interpret};\n"],"names":["t","n","e","r","i","o","a","s","l","v","c","u"],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA,SAAS,EAAEA,IAAEC,IAAE;AAAC,MAAIC,KAAE,cAAY,OAAO,UAAQF,GAAE,OAAO,QAAQ;AAAE,MAAG,CAACE;AAAE,WAAOF;AAAE,MAAIG,IAAEC,IAAEC,KAAEH,GAAE,KAAKF,EAAC,GAAEM,KAAE,CAAE;AAAC,MAAG;AAAC,YAAM,WAASL,MAAGA,OAAK,MAAI,EAAEE,KAAEE,GAAE,KAAI,GAAI;AAAM,MAAAC,GAAE,KAAKH,GAAE,KAAK;AAAA,EAAC,SAAOH,IAAE;AAAC,IAAAI,KAAE,EAAC,OAAMJ,GAAC;AAAA,EAAC,UAAC;AAAQ,QAAG;AAAC,MAAAG,MAAG,CAACA,GAAE,SAAOD,KAAEG,GAAE,WAASH,GAAE,KAAKG,EAAC;AAAA,IAAC,UAAC;AAAQ,UAAGD;AAAE,cAAMA,GAAE;AAAA,IAAK;AAAA,EAAC;AAAC,SAAOE;AAAC;AAAI,IAAC;AAAE,CAAC,SAASN,IAAE;AAAC,EAAAA,GAAEA,GAAE,aAAW,CAAC,IAAE,cAAaA,GAAEA,GAAE,UAAQ,CAAC,IAAE,WAAUA,GAAEA,GAAE,UAAQ,CAAC,IAAE;AAAS,EAAE,MAAI,IAAE,CAAE,EAAC;AAAE,IAAI,IAAE,EAAC,MAAK,cAAa;AAAE,SAAS,EAAEA,IAAE;AAAC,SAAO,WAASA,KAAE,CAAE,IAAC,GAAG,OAAOA,EAAC;AAAC;AAAC,SAAS,EAAEA,IAAE;AAAC,SAAM,EAAC,MAAK,iBAAgB,YAAWA,GAAC;AAAC;AAAC,SAAS,EAAEA,IAAEC,IAAE;AAAC,SAAM,YAAU,QAAOD,KAAE,YAAU,OAAOA,MAAGC,MAAGA,GAAED,EAAC,IAAEC,GAAED,EAAC,IAAEA,MAAG,EAAC,MAAKA,GAAC,IAAE,cAAY,OAAOA,KAAE,EAAC,MAAKA,GAAE,MAAK,MAAKA,GAAC,IAAEA;AAAC;AAAC,SAAS,EAAEA,IAAE;AAAC,SAAO,SAASC,IAAE;AAAC,WAAOD,OAAIC;AAAA,EAAC;AAAC;AAAC,SAAS,EAAED,IAAE;AAAC,SAAM,YAAU,OAAOA,KAAE,EAAC,MAAKA,GAAC,IAAEA;AAAC;AAAC,SAAS,EAAEA,IAAEC,IAAE;AAAC,SAAM,EAAC,OAAMD,IAAE,SAAQC,IAAE,SAAQ,CAAA,GAAG,SAAQ,OAAG,SAAQ,EAAED,EAAC,EAAC;AAAC;AAAC,SAAS,EAAEA,IAAEC,IAAEC,IAAE;AAAC,MAAIC,KAAEF,IAAEG,KAAE;AAAG,SAAM,CAACJ,GAAE,OAAQ,SAASA,IAAE;AAAC,QAAG,oBAAkBA,GAAE,MAAK;AAAC,MAAAI,KAAE;AAAG,UAAIH,KAAE,OAAO,OAAO,CAAA,GAAGE,EAAC;AAAE,aAAM,cAAY,OAAOH,GAAE,aAAWC,KAAED,GAAE,WAAWG,IAAED,EAAC,IAAE,OAAO,KAAKF,GAAE,UAAU,EAAE,QAAS,SAASI,IAAE;AAAC,QAAAH,GAAEG,EAAC,IAAE,cAAY,OAAOJ,GAAE,WAAWI,EAAC,IAAEJ,GAAE,WAAWI,EAAC,EAAED,IAAED,EAAC,IAAEF,GAAE,WAAWI,EAAC;AAAA,MAAC,CAAC,GAAGD,KAAEF,IAAE;AAAA,IAAE;AAAC,WAAM;AAAA,EAAE,CAAG,GAACE,IAAEC,EAAC;AAAC;AAAC,SAAS,EAAEH,IAAEG,IAAE;AAAC,aAASA,OAAIA,KAAE,CAAE;AAAE,MAAIG,KAAE,EAAE,EAAE,EAAEN,GAAE,OAAOA,GAAE,OAAO,EAAE,KAAK,EAAE,IAAK,SAASD,IAAE;AAAC,WAAO,EAAEA,IAAEI,GAAE,OAAO;AAAA,EAAC,CAAG,GAACH,GAAE,SAAQ,CAAC,GAAE,CAAC,GAAEO,KAAED,GAAE,CAAC,GAAEE,KAAEF,GAAE,CAAC,GAAE,IAAE,EAAC,QAAON,IAAE,UAASG,IAAE,cAAa,EAAC,OAAMH,GAAE,SAAQ,SAAQO,IAAE,SAAQC,IAAE,SAAQ,EAAER,GAAE,OAAO,EAAC,GAAE,YAAW,SAASC,IAAEE,IAAE;AAAC,QAAIG,IAAEC,IAAEC,KAAE,YAAU,OAAOP,KAAE,EAAC,OAAMA,IAAE,SAAQD,GAAE,QAAO,IAAEC,IAAE,IAAEO,GAAE,OAAM,IAAEA,GAAE,SAAQ,IAAE,EAAEL,EAAC,GAAE,IAAEH,GAAE,OAAO,CAAC;AAAE,QAAG,EAAE,IAAG;AAAC,UAAI,IAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;AAAE,UAAG;AAAC,iBAAQ,IAAE,SAASD,IAAE;AAAC,cAAIC,KAAE,cAAY,OAAO,UAAQ,OAAO,UAASC,KAAED,MAAGD,GAAEC,EAAC,GAAEE,KAAE;AAAE,cAAGD;AAAE,mBAAOA,GAAE,KAAKF,EAAC;AAAE,cAAGA,MAAG,YAAU,OAAOA,GAAE;AAAO,mBAAM,EAAC,MAAK,WAAU;AAAC,qBAAOA,MAAGG,MAAGH,GAAE,WAASA,KAAE,SAAQ,EAAC,OAAMA,MAAGA,GAAEG,IAAG,GAAE,MAAK,CAACH,GAAC;AAAA,YAAC,EAAC;AAAE,gBAAM,IAAI,UAAUC,KAAE,4BAA0B,iCAAiC;AAAA,QAAC,EAAE,CAAC,GAAE,IAAE,EAAE,QAAO,CAAC,EAAE,MAAK,IAAE,EAAE,KAAM,GAAC;AAAC,cAAI,IAAE,EAAE;AAAM,cAAG,WAAS;AAAE,mBAAO,EAAE,GAAE,CAAC;AAAE,cAAI,IAAE,YAAU,OAAO,IAAE,EAAC,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,SAAQ,IAAE,WAAS,IAAE,KAAG,GAAE,IAAE,EAAE,MAAK,IAAE,WAAS,IAAE,WAAU;AAAC,mBAAM;AAAA,UAAE,IAAE,GAAE,IAAE,WAAS,GAAE,IAAE,QAAM,IAAE,IAAE,GAAE,IAAEA,GAAE,OAAO,CAAC;AAAE,cAAG,EAAE,GAAE,CAAC,GAAE;AAAC,gBAAI,IAAE,EAAE,GAAG,IAAE,EAAE,CAAC,IAAE,CAAE,EAAC,OAAO,EAAE,MAAK,GAAE,EAAE,KAAK,EAAE,OAAQ,SAASD,IAAE;AAAC,qBAAOA;AAAA,YAAC,CAAC,GAAI,IAAK,SAASA,IAAE;AAAC,qBAAO,EAAEA,IAAE,EAAE,SAAS,OAAO;AAAA,YAAC,IAAI,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,QAAM,IAAE,IAAE;AAAE,mBAAM,EAAC,OAAM,GAAE,SAAQ,GAAE,SAAQ,GAAE,SAAQ,MAAI,KAAG,EAAE,SAAO,KAAG,GAAE,SAAQ,EAAE,CAAC,EAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,SAAOA,IAAE;AAAC,QAAAO,KAAE,EAAC,OAAMP,GAAC;AAAA,MAAC,UAAC;AAAQ,YAAG;AAAC,eAAG,CAAC,EAAE,SAAOQ,KAAE,EAAE,WAASA,GAAE,KAAK,CAAC;AAAA,QAAC,UAAC;AAAQ,cAAGD;AAAE,kBAAMA,GAAE;AAAA,QAAK;AAAA,MAAC;AAAA,IAAC;AAAC,WAAO,EAAE,GAAE,CAAC;AAAA,EAAC,EAAC;AAAE,SAAO;AAAC;AAAC,IAAI,IAAE,SAASP,IAAEC,IAAE;AAAC,SAAOD,GAAE,QAAQ,QAAS,SAASE,IAAE;AAAC,QAAIC,KAAED,GAAE;AAAK,WAAOC,MAAGA,GAAEH,GAAE,SAAQC,EAAC;AAAA,EAAC;AAAG;AAAE,SAAS,EAAED,IAAE;AAAC,MAAIG,KAAEH,GAAE,cAAaI,KAAE,EAAE,YAAWC,KAAE,oBAAI,OAAIK,KAAE,EAAC,UAASV,IAAE,MAAK,SAASE,IAAE;AAAC,IAAAE,OAAI,EAAE,YAAUD,KAAEH,GAAE,WAAWG,IAAED,EAAC,GAAE,EAAEC,IAAE,EAAED,EAAC,CAAC,GAAEG,GAAE,QAAS,SAASL,IAAE;AAAC,aAAOA,GAAEG,EAAC;AAAA,IAAC,CAAC;AAAA,EAAG,GAAE,WAAU,SAASH,IAAE;AAAC,WAAOK,GAAE,IAAIL,EAAC,GAAEA,GAAEG,EAAC,GAAE,EAAC,aAAY,WAAU;AAAC,aAAOE,GAAE,OAAOL,EAAC;AAAA,IAAC,EAAC;AAAA,EAAC,GAAE,OAAM,SAASK,IAAE;AAAC,QAAGA,IAAE;AAAC,UAAIM,KAAE,YAAU,OAAON,KAAEA,KAAE,EAAC,SAAQL,GAAE,OAAO,SAAQ,OAAMK,GAAC;AAAE,MAAAF,KAAE,EAAC,OAAMQ,GAAE,OAAM,SAAQ,CAAE,GAAC,SAAQA,GAAE,SAAQ,SAAQ,EAAEA,GAAE,KAAK,EAAC;AAAA,IAAC;AAAM,MAAAR,KAAEH,GAAE;AAAa,WAAOI,KAAE,EAAE,SAAQ,EAAED,IAAE,CAAC,GAAEO;AAAA,EAAC,GAAE,MAAK,WAAU;AAAC,WAAON,KAAE,EAAE,SAAQC,GAAE,MAAO,GAACK;AAAA,EAAC,GAAE,IAAI,QAAO;AAAC,WAAOP;AAAA,EAAC,GAAE,IAAI,SAAQ;AAAC,WAAOC;AAAA,EAAC,EAAC;AAAE,SAAOM;AAAC;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../../../node_modules/@xstate/fsm/es/index.js"],"sourcesContent":["/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nfunction t(t,n){var e=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!e)return t;var r,i,o=e.call(t),a=[];try{for(;(void 0===n||n-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(e=o.return)&&e.call(o)}finally{if(i)throw i.error}}return a}var n;!function(t){t[t.NotStarted=0]=\"NotStarted\",t[t.Running=1]=\"Running\",t[t.Stopped=2]=\"Stopped\"}(n||(n={}));var e={type:\"xstate.init\"};function r(t){return void 0===t?[]:[].concat(t)}function i(t){return{type:\"xstate.assign\",assignment:t}}function o(t,n){return\"string\"==typeof(t=\"string\"==typeof t&&n&&n[t]?n[t]:t)?{type:t}:\"function\"==typeof t?{type:t.name,exec:t}:t}function a(t){return function(n){return t===n}}function u(t){return\"string\"==typeof t?{type:t}:t}function c(t,n){return{value:t,context:n,actions:[],changed:!1,matches:a(t)}}function f(t,n,e){var r=n,i=!1;return[t.filter((function(t){if(\"xstate.assign\"===t.type){i=!0;var n=Object.assign({},r);return\"function\"==typeof t.assignment?n=t.assignment(r,e):Object.keys(t.assignment).forEach((function(i){n[i]=\"function\"==typeof t.assignment[i]?t.assignment[i](r,e):t.assignment[i]})),r=n,!1}return!0})),r,i]}function s(n,i){void 0===i&&(i={});var s=t(f(r(n.states[n.initial].entry).map((function(t){return o(t,i.actions)})),n.context,e),2),l=s[0],v=s[1],y={config:n,_options:i,initialState:{value:n.initial,actions:l,context:v,matches:a(n.initial)},transition:function(e,i){var s,l,v=\"string\"==typeof e?{value:e,context:n.context}:e,p=v.value,g=v.context,d=u(i),x=n.states[p];if(x.on){var m=r(x.on[d.type]);try{for(var h=function(t){var n=\"function\"==typeof Symbol&&Symbol.iterator,e=n&&t[n],r=0;if(e)return e.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(n?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}(m),b=h.next();!b.done;b=h.next()){var S=b.value;if(void 0===S)return c(p,g);var w=\"string\"==typeof S?{target:S}:S,j=w.target,E=w.actions,R=void 0===E?[]:E,N=w.cond,O=void 0===N?function(){return!0}:N,_=void 0===j,k=null!=j?j:p,T=n.states[k];if(O(g,d)){var q=t(f((_?r(R):[].concat(x.exit,R,T.entry).filter((function(t){return t}))).map((function(t){return o(t,y._options.actions)})),g,d),3),z=q[0],A=q[1],B=q[2],C=null!=j?j:p;return{value:C,context:A,actions:z,changed:j!==p||z.length>0||B,matches:a(C)}}}}catch(t){s={error:t}}finally{try{b&&!b.done&&(l=h.return)&&l.call(h)}finally{if(s)throw s.error}}}return c(p,g)}};return y}var l=function(t,n){return t.actions.forEach((function(e){var r=e.exec;return r&&r(t.context,n)}))};function v(t){var r=t.initialState,i=n.NotStarted,o=new Set,c={_machine:t,send:function(e){i===n.Running&&(r=t.transition(r,e),l(r,u(e)),o.forEach((function(t){return t(r)})))},subscribe:function(t){return o.add(t),t(r),{unsubscribe:function(){return o.delete(t)}}},start:function(o){if(o){var u=\"object\"==typeof o?o:{context:t.config.context,value:o};r={value:u.value,actions:[],context:u.context,matches:a(u.value)}}else r=t.initialState;return i=n.Running,l(r,e),c},stop:function(){return i=n.Stopped,o.clear(),c},get state(){return r},get status(){return i}};return c}export{n as InterpreterStatus,i as assign,s as createMachine,v as interpret};\n"],"names":["t","n","e","r","i","o","a","s","l","v","c","u"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,25 +1,21 @@
1
1
  import { interpret as v, createMachine as s, InterpreterStatus as n } from "../../fsm/es/index.mjs";
2
2
  import { useRef, useState, useEffect, useCallback } from "react";
3
3
  import index from "../../../use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.mjs";
4
- import { w as withSelectorExports } from "../../../use-sync-external-store/shim/with-selector.mjs";
4
+ import { w as withSelectorExports } from "../../../../_virtual/with-selector.mjs";
5
5
  import useConstant from "./useConstant.mjs";
6
6
  var __read = function(o, n2) {
7
7
  var m = typeof Symbol === "function" && o[Symbol.iterator];
8
- if (!m)
9
- return o;
8
+ if (!m) return o;
10
9
  var i = m.call(o), r, ar = [], e;
11
10
  try {
12
- while ((n2 === void 0 || n2-- > 0) && !(r = i.next()).done)
13
- ar.push(r.value);
11
+ while ((n2 === void 0 || n2-- > 0) && !(r = i.next()).done) ar.push(r.value);
14
12
  } catch (error) {
15
13
  e = { error };
16
14
  } finally {
17
15
  try {
18
- if (r && !r.done && (m = i["return"]))
19
- m.call(i);
16
+ if (r && !r.done && (m = i["return"])) m.call(i);
20
17
  } finally {
21
- if (e)
22
- throw e.error;
18
+ if (e) throw e.error;
23
19
  }
24
20
  }
25
21
  return ar;