@shopify/hydrogen-react 2026.4.0 → 2026.4.1

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 (263) hide show
  1. package/dist/browser-dev/AddToCartButton.mjs.map +1 -1
  2. package/dist/browser-dev/BuyNowButton.mjs.map +1 -1
  3. package/dist/browser-dev/CartCheckoutButton.mjs.map +1 -1
  4. package/dist/browser-dev/CartCost.mjs.map +1 -1
  5. package/dist/browser-dev/CartLineProvider.mjs.map +1 -1
  6. package/dist/browser-dev/CartLineQuantity.mjs.map +1 -1
  7. package/dist/browser-dev/CartLineQuantityAdjustButton.mjs.map +1 -1
  8. package/dist/browser-dev/CartProvider.mjs.map +1 -1
  9. package/dist/browser-dev/ExternalVideo.mjs.map +1 -1
  10. package/dist/browser-dev/Image.mjs.map +1 -1
  11. package/dist/browser-dev/MediaFile.mjs.map +1 -1
  12. package/dist/browser-dev/ModelViewer.mjs.map +1 -1
  13. package/dist/browser-dev/Money.mjs.map +1 -1
  14. package/dist/browser-dev/ProductPrice.mjs.map +1 -1
  15. package/dist/browser-dev/ProductProvider.mjs.map +1 -1
  16. package/dist/browser-dev/RichText.mjs.map +1 -1
  17. package/dist/browser-dev/ShopPayButton.mjs.map +1 -1
  18. package/dist/browser-dev/ShopifyProvider.mjs.map +1 -1
  19. package/dist/browser-dev/Video.mjs.map +1 -1
  20. package/dist/browser-dev/analytics-constants.mjs.map +1 -1
  21. package/dist/browser-dev/analytics-utils.mjs.map +1 -1
  22. package/dist/browser-dev/analytics.mjs.map +1 -1
  23. package/dist/browser-dev/cart-queries.mjs +43 -81
  24. package/dist/browser-dev/cart-queries.mjs.map +1 -1
  25. package/dist/browser-dev/codegen.helpers.mjs.map +1 -1
  26. package/dist/browser-dev/cookies-utils.mjs.map +1 -1
  27. package/dist/browser-dev/flatten-connection.mjs.map +1 -1
  28. package/dist/browser-dev/getProductOptions.mjs.map +1 -1
  29. package/dist/browser-dev/load-script.mjs.map +1 -1
  30. package/dist/browser-dev/optionValueDecoder.mjs.map +1 -1
  31. package/dist/browser-dev/packages/hydrogen-react/package.json.mjs +1 -1
  32. package/dist/browser-dev/parse-metafield.mjs.map +1 -1
  33. package/dist/browser-dev/storefront-client.mjs.map +1 -1
  34. package/dist/browser-dev/tracking-utils.mjs.map +1 -1
  35. package/dist/browser-dev/useMoney.mjs.map +1 -1
  36. package/dist/browser-dev/useSelectedOptionInUrlParam.mjs.map +1 -1
  37. package/dist/browser-dev/useShopifyCookies.mjs.map +1 -1
  38. package/dist/browser-prod/AddToCartButton.mjs.map +1 -1
  39. package/dist/browser-prod/BuyNowButton.mjs.map +1 -1
  40. package/dist/browser-prod/CartCheckoutButton.mjs.map +1 -1
  41. package/dist/browser-prod/CartCost.mjs.map +1 -1
  42. package/dist/browser-prod/CartLineProvider.mjs.map +1 -1
  43. package/dist/browser-prod/CartLineQuantity.mjs.map +1 -1
  44. package/dist/browser-prod/CartLineQuantityAdjustButton.mjs.map +1 -1
  45. package/dist/browser-prod/CartProvider.mjs.map +1 -1
  46. package/dist/browser-prod/ExternalVideo.mjs.map +1 -1
  47. package/dist/browser-prod/Image.mjs.map +1 -1
  48. package/dist/browser-prod/MediaFile.mjs.map +1 -1
  49. package/dist/browser-prod/ModelViewer.mjs.map +1 -1
  50. package/dist/browser-prod/Money.mjs.map +1 -1
  51. package/dist/browser-prod/ProductPrice.mjs.map +1 -1
  52. package/dist/browser-prod/ProductProvider.mjs.map +1 -1
  53. package/dist/browser-prod/RichText.mjs.map +1 -1
  54. package/dist/browser-prod/ShopPayButton.mjs.map +1 -1
  55. package/dist/browser-prod/ShopifyProvider.mjs.map +1 -1
  56. package/dist/browser-prod/Video.mjs.map +1 -1
  57. package/dist/browser-prod/analytics-constants.mjs.map +1 -1
  58. package/dist/browser-prod/analytics-utils.mjs.map +1 -1
  59. package/dist/browser-prod/analytics.mjs.map +1 -1
  60. package/dist/browser-prod/cart-queries.mjs +43 -81
  61. package/dist/browser-prod/cart-queries.mjs.map +1 -1
  62. package/dist/browser-prod/codegen.helpers.mjs.map +1 -1
  63. package/dist/browser-prod/cookies-utils.mjs.map +1 -1
  64. package/dist/browser-prod/flatten-connection.mjs.map +1 -1
  65. package/dist/browser-prod/getProductOptions.mjs.map +1 -1
  66. package/dist/browser-prod/load-script.mjs.map +1 -1
  67. package/dist/browser-prod/optionValueDecoder.mjs.map +1 -1
  68. package/dist/browser-prod/packages/hydrogen-react/package.json.mjs +1 -1
  69. package/dist/browser-prod/parse-metafield.mjs.map +1 -1
  70. package/dist/browser-prod/storefront-client.mjs.map +1 -1
  71. package/dist/browser-prod/tracking-utils.mjs.map +1 -1
  72. package/dist/browser-prod/useMoney.mjs.map +1 -1
  73. package/dist/browser-prod/useSelectedOptionInUrlParam.mjs.map +1 -1
  74. package/dist/browser-prod/useShopifyCookies.mjs.map +1 -1
  75. package/dist/node-dev/AddToCartButton.js.map +1 -1
  76. package/dist/node-dev/AddToCartButton.mjs.map +1 -1
  77. package/dist/node-dev/BuyNowButton.js.map +1 -1
  78. package/dist/node-dev/BuyNowButton.mjs.map +1 -1
  79. package/dist/node-dev/CartCheckoutButton.js.map +1 -1
  80. package/dist/node-dev/CartCheckoutButton.mjs.map +1 -1
  81. package/dist/node-dev/CartCost.js.map +1 -1
  82. package/dist/node-dev/CartCost.mjs.map +1 -1
  83. package/dist/node-dev/CartLineProvider.js.map +1 -1
  84. package/dist/node-dev/CartLineProvider.mjs.map +1 -1
  85. package/dist/node-dev/CartLineQuantity.js.map +1 -1
  86. package/dist/node-dev/CartLineQuantity.mjs.map +1 -1
  87. package/dist/node-dev/CartLineQuantityAdjustButton.js.map +1 -1
  88. package/dist/node-dev/CartLineQuantityAdjustButton.mjs.map +1 -1
  89. package/dist/node-dev/CartProvider.js.map +1 -1
  90. package/dist/node-dev/CartProvider.mjs.map +1 -1
  91. package/dist/node-dev/ExternalVideo.js.map +1 -1
  92. package/dist/node-dev/ExternalVideo.mjs.map +1 -1
  93. package/dist/node-dev/Image.js.map +1 -1
  94. package/dist/node-dev/Image.mjs.map +1 -1
  95. package/dist/node-dev/MediaFile.js.map +1 -1
  96. package/dist/node-dev/MediaFile.mjs.map +1 -1
  97. package/dist/node-dev/ModelViewer.js.map +1 -1
  98. package/dist/node-dev/ModelViewer.mjs.map +1 -1
  99. package/dist/node-dev/Money.js.map +1 -1
  100. package/dist/node-dev/Money.mjs.map +1 -1
  101. package/dist/node-dev/ProductPrice.js.map +1 -1
  102. package/dist/node-dev/ProductPrice.mjs.map +1 -1
  103. package/dist/node-dev/ProductProvider.js.map +1 -1
  104. package/dist/node-dev/ProductProvider.mjs.map +1 -1
  105. package/dist/node-dev/RichText.js.map +1 -1
  106. package/dist/node-dev/RichText.mjs.map +1 -1
  107. package/dist/node-dev/ShopPayButton.js.map +1 -1
  108. package/dist/node-dev/ShopPayButton.mjs.map +1 -1
  109. package/dist/node-dev/ShopifyProvider.js.map +1 -1
  110. package/dist/node-dev/ShopifyProvider.mjs.map +1 -1
  111. package/dist/node-dev/Video.js.map +1 -1
  112. package/dist/node-dev/Video.mjs.map +1 -1
  113. package/dist/node-dev/analytics-constants.js.map +1 -1
  114. package/dist/node-dev/analytics-constants.mjs.map +1 -1
  115. package/dist/node-dev/analytics-utils.js.map +1 -1
  116. package/dist/node-dev/analytics-utils.mjs.map +1 -1
  117. package/dist/node-dev/analytics.js.map +1 -1
  118. package/dist/node-dev/analytics.mjs.map +1 -1
  119. package/dist/node-dev/cart-queries.js +43 -81
  120. package/dist/node-dev/cart-queries.js.map +1 -1
  121. package/dist/node-dev/cart-queries.mjs +43 -81
  122. package/dist/node-dev/cart-queries.mjs.map +1 -1
  123. package/dist/node-dev/codegen.helpers.js.map +1 -1
  124. package/dist/node-dev/codegen.helpers.mjs.map +1 -1
  125. package/dist/node-dev/cookies-utils.js.map +1 -1
  126. package/dist/node-dev/cookies-utils.mjs.map +1 -1
  127. package/dist/node-dev/flatten-connection.js.map +1 -1
  128. package/dist/node-dev/flatten-connection.mjs.map +1 -1
  129. package/dist/node-dev/getProductOptions.js.map +1 -1
  130. package/dist/node-dev/getProductOptions.mjs.map +1 -1
  131. package/dist/node-dev/load-script.js.map +1 -1
  132. package/dist/node-dev/load-script.mjs.map +1 -1
  133. package/dist/node-dev/optionValueDecoder.js.map +1 -1
  134. package/dist/node-dev/optionValueDecoder.mjs.map +1 -1
  135. package/dist/node-dev/packages/hydrogen-react/package.json.js +1 -1
  136. package/dist/node-dev/packages/hydrogen-react/package.json.mjs +1 -1
  137. package/dist/node-dev/parse-metafield.js.map +1 -1
  138. package/dist/node-dev/parse-metafield.mjs.map +1 -1
  139. package/dist/node-dev/storefront-client.js.map +1 -1
  140. package/dist/node-dev/storefront-client.mjs.map +1 -1
  141. package/dist/node-dev/tracking-utils.js.map +1 -1
  142. package/dist/node-dev/tracking-utils.mjs.map +1 -1
  143. package/dist/node-dev/useMoney.js.map +1 -1
  144. package/dist/node-dev/useMoney.mjs.map +1 -1
  145. package/dist/node-dev/useSelectedOptionInUrlParam.js.map +1 -1
  146. package/dist/node-dev/useSelectedOptionInUrlParam.mjs.map +1 -1
  147. package/dist/node-dev/useShopifyCookies.js.map +1 -1
  148. package/dist/node-dev/useShopifyCookies.mjs.map +1 -1
  149. package/dist/node-prod/AddToCartButton.js.map +1 -1
  150. package/dist/node-prod/AddToCartButton.mjs.map +1 -1
  151. package/dist/node-prod/BuyNowButton.js.map +1 -1
  152. package/dist/node-prod/BuyNowButton.mjs.map +1 -1
  153. package/dist/node-prod/CartCheckoutButton.js.map +1 -1
  154. package/dist/node-prod/CartCheckoutButton.mjs.map +1 -1
  155. package/dist/node-prod/CartCost.js.map +1 -1
  156. package/dist/node-prod/CartCost.mjs.map +1 -1
  157. package/dist/node-prod/CartLineProvider.js.map +1 -1
  158. package/dist/node-prod/CartLineProvider.mjs.map +1 -1
  159. package/dist/node-prod/CartLineQuantity.js.map +1 -1
  160. package/dist/node-prod/CartLineQuantity.mjs.map +1 -1
  161. package/dist/node-prod/CartLineQuantityAdjustButton.js.map +1 -1
  162. package/dist/node-prod/CartLineQuantityAdjustButton.mjs.map +1 -1
  163. package/dist/node-prod/CartProvider.js.map +1 -1
  164. package/dist/node-prod/CartProvider.mjs.map +1 -1
  165. package/dist/node-prod/ExternalVideo.js.map +1 -1
  166. package/dist/node-prod/ExternalVideo.mjs.map +1 -1
  167. package/dist/node-prod/Image.js.map +1 -1
  168. package/dist/node-prod/Image.mjs.map +1 -1
  169. package/dist/node-prod/MediaFile.js.map +1 -1
  170. package/dist/node-prod/MediaFile.mjs.map +1 -1
  171. package/dist/node-prod/ModelViewer.js.map +1 -1
  172. package/dist/node-prod/ModelViewer.mjs.map +1 -1
  173. package/dist/node-prod/Money.js.map +1 -1
  174. package/dist/node-prod/Money.mjs.map +1 -1
  175. package/dist/node-prod/ProductPrice.js.map +1 -1
  176. package/dist/node-prod/ProductPrice.mjs.map +1 -1
  177. package/dist/node-prod/ProductProvider.js.map +1 -1
  178. package/dist/node-prod/ProductProvider.mjs.map +1 -1
  179. package/dist/node-prod/RichText.js.map +1 -1
  180. package/dist/node-prod/RichText.mjs.map +1 -1
  181. package/dist/node-prod/ShopPayButton.js.map +1 -1
  182. package/dist/node-prod/ShopPayButton.mjs.map +1 -1
  183. package/dist/node-prod/ShopifyProvider.js.map +1 -1
  184. package/dist/node-prod/ShopifyProvider.mjs.map +1 -1
  185. package/dist/node-prod/Video.js.map +1 -1
  186. package/dist/node-prod/Video.mjs.map +1 -1
  187. package/dist/node-prod/analytics-constants.js.map +1 -1
  188. package/dist/node-prod/analytics-constants.mjs.map +1 -1
  189. package/dist/node-prod/analytics-utils.js.map +1 -1
  190. package/dist/node-prod/analytics-utils.mjs.map +1 -1
  191. package/dist/node-prod/analytics.js.map +1 -1
  192. package/dist/node-prod/analytics.mjs.map +1 -1
  193. package/dist/node-prod/cart-queries.js +43 -81
  194. package/dist/node-prod/cart-queries.js.map +1 -1
  195. package/dist/node-prod/cart-queries.mjs +43 -81
  196. package/dist/node-prod/cart-queries.mjs.map +1 -1
  197. package/dist/node-prod/codegen.helpers.js.map +1 -1
  198. package/dist/node-prod/codegen.helpers.mjs.map +1 -1
  199. package/dist/node-prod/cookies-utils.js.map +1 -1
  200. package/dist/node-prod/cookies-utils.mjs.map +1 -1
  201. package/dist/node-prod/flatten-connection.js.map +1 -1
  202. package/dist/node-prod/flatten-connection.mjs.map +1 -1
  203. package/dist/node-prod/getProductOptions.js.map +1 -1
  204. package/dist/node-prod/getProductOptions.mjs.map +1 -1
  205. package/dist/node-prod/load-script.js.map +1 -1
  206. package/dist/node-prod/load-script.mjs.map +1 -1
  207. package/dist/node-prod/optionValueDecoder.js.map +1 -1
  208. package/dist/node-prod/optionValueDecoder.mjs.map +1 -1
  209. package/dist/node-prod/packages/hydrogen-react/package.json.js +1 -1
  210. package/dist/node-prod/packages/hydrogen-react/package.json.mjs +1 -1
  211. package/dist/node-prod/parse-metafield.js.map +1 -1
  212. package/dist/node-prod/parse-metafield.mjs.map +1 -1
  213. package/dist/node-prod/storefront-client.js.map +1 -1
  214. package/dist/node-prod/storefront-client.mjs.map +1 -1
  215. package/dist/node-prod/tracking-utils.js.map +1 -1
  216. package/dist/node-prod/tracking-utils.mjs.map +1 -1
  217. package/dist/node-prod/useMoney.js.map +1 -1
  218. package/dist/node-prod/useMoney.mjs.map +1 -1
  219. package/dist/node-prod/useSelectedOptionInUrlParam.js.map +1 -1
  220. package/dist/node-prod/useSelectedOptionInUrlParam.mjs.map +1 -1
  221. package/dist/node-prod/useShopifyCookies.js.map +1 -1
  222. package/dist/node-prod/useShopifyCookies.mjs.map +1 -1
  223. package/dist/types/AddToCartButton.d.ts +2 -0
  224. package/dist/types/BuyNowButton.d.ts +2 -0
  225. package/dist/types/CartCheckoutButton.d.ts +2 -0
  226. package/dist/types/CartCost.d.ts +2 -0
  227. package/dist/types/CartLineProvider.d.ts +2 -0
  228. package/dist/types/CartLineQuantity.d.ts +2 -0
  229. package/dist/types/CartLineQuantityAdjustButton.d.ts +1 -0
  230. package/dist/types/CartProvider.d.ts +7 -1
  231. package/dist/types/ExternalVideo.d.ts +4 -0
  232. package/dist/types/Image.d.ts +2 -0
  233. package/dist/types/MediaFile.d.ts +4 -0
  234. package/dist/types/ModelViewer.d.ts +1 -0
  235. package/dist/types/Money.d.ts +1 -0
  236. package/dist/types/ProductPrice.d.ts +2 -0
  237. package/dist/types/ProductProvider.d.ts +2 -0
  238. package/dist/types/RichText.d.ts +2 -0
  239. package/dist/types/ShopPayButton.d.ts +1 -0
  240. package/dist/types/ShopifyProvider.d.ts +2 -0
  241. package/dist/types/Video.d.ts +2 -0
  242. package/dist/types/analytics-constants.d.ts +9 -0
  243. package/dist/types/analytics-types.d.ts +1 -0
  244. package/dist/types/analytics-utils.d.ts +1 -0
  245. package/dist/types/analytics.d.ts +6 -1
  246. package/dist/types/cart-queries.d.ts +13 -9
  247. package/dist/types/codegen.helpers.d.ts +2 -0
  248. package/dist/types/cookies-utils.d.ts +2 -1
  249. package/dist/types/flatten-connection.d.ts +3 -0
  250. package/dist/types/getProductOptions.d.ts +3 -0
  251. package/dist/types/load-script.d.ts +3 -1
  252. package/dist/types/optionValueDecoder.d.ts +3 -0
  253. package/dist/types/parse-metafield.d.ts +1 -0
  254. package/dist/types/storefront-client.d.ts +1 -0
  255. package/dist/types/tracking-utils.d.ts +2 -2
  256. package/dist/types/useMoney.d.ts +1 -0
  257. package/dist/types/useSelectedOptionInUrlParam.d.ts +1 -0
  258. package/dist/types/useShopifyCookies.d.ts +1 -0
  259. package/dist/umd/hydrogen-react.dev.js +44 -82
  260. package/dist/umd/hydrogen-react.dev.js.map +1 -1
  261. package/dist/umd/hydrogen-react.prod.js +43 -88
  262. package/dist/umd/hydrogen-react.prod.js.map +1 -1
  263. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-constants.js","sources":["../../src/analytics-constants.ts"],"sourcesContent":["export const AnalyticsEventName = {\n PAGE_VIEW: 'PAGE_VIEW',\n ADD_TO_CART: 'ADD_TO_CART',\n PAGE_VIEW_2: 'PAGE_VIEW_2',\n COLLECTION_VIEW: 'COLLECTION_VIEW',\n PRODUCT_VIEW: 'PRODUCT_VIEW',\n SEARCH_VIEW: 'SEARCH_VIEW',\n} as const;\n\nexport const AnalyticsPageType: AnalyticsPageType = {\n article: 'article',\n blog: 'blog',\n captcha: 'captcha',\n cart: 'cart',\n collection: 'collection',\n customersAccount: 'customers/account',\n customersActivateAccount: 'customers/activate_account',\n customersAddresses: 'customers/addresses',\n customersLogin: 'customers/login',\n customersOrder: 'customers/order',\n customersRegister: 'customers/register',\n customersResetPassword: 'customers/reset_password',\n giftCard: 'gift_card',\n home: 'index',\n listCollections: 'list-collections',\n forbidden: '403',\n notFound: '404',\n page: 'page',\n password: 'password',\n product: 'product',\n policy: 'policy',\n search: 'search',\n} as const;\n\nexport const ShopifySalesChannel: ShopifySalesChannel = {\n hydrogen: 'hydrogen',\n headless: 'headless',\n} as const;\n\nexport const ShopifyAppId = {\n hydrogen: '6167201',\n headless: '12875497473',\n} as const;\n\n/**\n * These duplicated interface declaration is so that we can generate proper documentation\n * for these public facing constants\n */\nexport interface AnalyticsEventName {\n /** Page view */\n PAGE_VIEW: 'PAGE_VIEW';\n /** Add to cart */\n ADD_TO_CART: 'ADD_TO_CART';\n}\n\nexport interface AnalyticsPageType {\n article: 'article';\n blog: 'blog';\n captcha: 'captcha';\n cart: 'cart';\n collection: 'collection';\n customersAccount: 'customers/account';\n customersActivateAccount: 'customers/activate_account';\n customersAddresses: 'customers/addresses';\n customersLogin: 'customers/login';\n customersOrder: 'customers/order';\n customersRegister: 'customers/register';\n customersResetPassword: 'customers/reset_password';\n giftCard: 'gift_card';\n home: 'index';\n listCollections: 'list-collections';\n forbidden: '403';\n notFound: '404';\n page: 'page';\n password: 'password';\n product: 'product';\n policy: 'policy';\n search: 'search';\n}\n\nexport interface ShopifySalesChannel {\n /** Shopify Hydrogen sales channel */\n hydrogen: 'hydrogen';\n /** Shopify Headless sales channel */\n headless: 'headless';\n}\n"],"names":[],"mappings":";;AAAO,MAAM,qBAAqB;AAAA,EAChC,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,aAAa;AACf;AAEO,MAAM,oBAAuC;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV;AAEO,MAAM,sBAA2C;AAAA,EACtD,UAAU;AAAA,EACV,UAAU;AACZ;AAEO,MAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AACZ;;;;;"}
1
+ {"version":3,"file":"analytics-constants.js","sources":["../../src/analytics-constants.ts"],"sourcesContent":["export const AnalyticsEventName = {\n PAGE_VIEW: 'PAGE_VIEW',\n ADD_TO_CART: 'ADD_TO_CART',\n PAGE_VIEW_2: 'PAGE_VIEW_2',\n COLLECTION_VIEW: 'COLLECTION_VIEW',\n PRODUCT_VIEW: 'PRODUCT_VIEW',\n SEARCH_VIEW: 'SEARCH_VIEW',\n} as const;\n\nexport const AnalyticsPageType: AnalyticsPageType = {\n article: 'article',\n blog: 'blog',\n captcha: 'captcha',\n cart: 'cart',\n collection: 'collection',\n customersAccount: 'customers/account',\n customersActivateAccount: 'customers/activate_account',\n customersAddresses: 'customers/addresses',\n customersLogin: 'customers/login',\n customersOrder: 'customers/order',\n customersRegister: 'customers/register',\n customersResetPassword: 'customers/reset_password',\n giftCard: 'gift_card',\n home: 'index',\n listCollections: 'list-collections',\n forbidden: '403',\n notFound: '404',\n page: 'page',\n password: 'password',\n product: 'product',\n policy: 'policy',\n search: 'search',\n} as const;\n\nexport const ShopifySalesChannel: ShopifySalesChannel = {\n hydrogen: 'hydrogen',\n headless: 'headless',\n} as const;\n\nexport const ShopifyAppId = {\n hydrogen: '6167201',\n headless: '12875497473',\n} as const;\n\n/**\n * These duplicated interface declaration is so that we can generate proper documentation\n * for these public facing constants\n */\n\n/**\n * Analytics event names accepted by Shopify analytics.\n * @publicDocs */\nexport interface AnalyticsEventName {\n /** Page view */\n PAGE_VIEW: 'PAGE_VIEW';\n /** Add to cart */\n ADD_TO_CART: 'ADD_TO_CART';\n}\n\n/**\n * Analytics page type values accepted by Shopify analytics.\n * @publicDocs */\nexport interface AnalyticsPageType {\n article: 'article';\n blog: 'blog';\n captcha: 'captcha';\n cart: 'cart';\n collection: 'collection';\n customersAccount: 'customers/account';\n customersActivateAccount: 'customers/activate_account';\n customersAddresses: 'customers/addresses';\n customersLogin: 'customers/login';\n customersOrder: 'customers/order';\n customersRegister: 'customers/register';\n customersResetPassword: 'customers/reset_password';\n giftCard: 'gift_card';\n home: 'index';\n listCollections: 'list-collections';\n forbidden: '403';\n notFound: '404';\n page: 'page';\n password: 'password';\n product: 'product';\n policy: 'policy';\n search: 'search';\n}\n\n/**\n * Analytics sales channel values accepted by Shopify analytics.\n * @publicDocs */\nexport interface ShopifySalesChannel {\n /** Shopify Hydrogen sales channel */\n hydrogen: 'hydrogen';\n /** Shopify Headless sales channel */\n headless: 'headless';\n}\n"],"names":[],"mappings":";;AAAO,MAAM,qBAAqB;AAAA,EAChC,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,aAAa;AACf;AAEO,MAAM,oBAAuC;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV;AAEO,MAAM,sBAA2C;AAAA,EACtD,UAAU;AAAA,EACV,UAAU;AACZ;AAEO,MAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AACZ;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-constants.mjs","sources":["../../src/analytics-constants.ts"],"sourcesContent":["export const AnalyticsEventName = {\n PAGE_VIEW: 'PAGE_VIEW',\n ADD_TO_CART: 'ADD_TO_CART',\n PAGE_VIEW_2: 'PAGE_VIEW_2',\n COLLECTION_VIEW: 'COLLECTION_VIEW',\n PRODUCT_VIEW: 'PRODUCT_VIEW',\n SEARCH_VIEW: 'SEARCH_VIEW',\n} as const;\n\nexport const AnalyticsPageType: AnalyticsPageType = {\n article: 'article',\n blog: 'blog',\n captcha: 'captcha',\n cart: 'cart',\n collection: 'collection',\n customersAccount: 'customers/account',\n customersActivateAccount: 'customers/activate_account',\n customersAddresses: 'customers/addresses',\n customersLogin: 'customers/login',\n customersOrder: 'customers/order',\n customersRegister: 'customers/register',\n customersResetPassword: 'customers/reset_password',\n giftCard: 'gift_card',\n home: 'index',\n listCollections: 'list-collections',\n forbidden: '403',\n notFound: '404',\n page: 'page',\n password: 'password',\n product: 'product',\n policy: 'policy',\n search: 'search',\n} as const;\n\nexport const ShopifySalesChannel: ShopifySalesChannel = {\n hydrogen: 'hydrogen',\n headless: 'headless',\n} as const;\n\nexport const ShopifyAppId = {\n hydrogen: '6167201',\n headless: '12875497473',\n} as const;\n\n/**\n * These duplicated interface declaration is so that we can generate proper documentation\n * for these public facing constants\n */\nexport interface AnalyticsEventName {\n /** Page view */\n PAGE_VIEW: 'PAGE_VIEW';\n /** Add to cart */\n ADD_TO_CART: 'ADD_TO_CART';\n}\n\nexport interface AnalyticsPageType {\n article: 'article';\n blog: 'blog';\n captcha: 'captcha';\n cart: 'cart';\n collection: 'collection';\n customersAccount: 'customers/account';\n customersActivateAccount: 'customers/activate_account';\n customersAddresses: 'customers/addresses';\n customersLogin: 'customers/login';\n customersOrder: 'customers/order';\n customersRegister: 'customers/register';\n customersResetPassword: 'customers/reset_password';\n giftCard: 'gift_card';\n home: 'index';\n listCollections: 'list-collections';\n forbidden: '403';\n notFound: '404';\n page: 'page';\n password: 'password';\n product: 'product';\n policy: 'policy';\n search: 'search';\n}\n\nexport interface ShopifySalesChannel {\n /** Shopify Hydrogen sales channel */\n hydrogen: 'hydrogen';\n /** Shopify Headless sales channel */\n headless: 'headless';\n}\n"],"names":[],"mappings":"AAAO,MAAM,qBAAqB;AAAA,EAChC,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,aAAa;AACf;AAEO,MAAM,oBAAuC;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV;AAEO,MAAM,sBAA2C;AAAA,EACtD,UAAU;AAAA,EACV,UAAU;AACZ;AAEO,MAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AACZ;"}
1
+ {"version":3,"file":"analytics-constants.mjs","sources":["../../src/analytics-constants.ts"],"sourcesContent":["export const AnalyticsEventName = {\n PAGE_VIEW: 'PAGE_VIEW',\n ADD_TO_CART: 'ADD_TO_CART',\n PAGE_VIEW_2: 'PAGE_VIEW_2',\n COLLECTION_VIEW: 'COLLECTION_VIEW',\n PRODUCT_VIEW: 'PRODUCT_VIEW',\n SEARCH_VIEW: 'SEARCH_VIEW',\n} as const;\n\nexport const AnalyticsPageType: AnalyticsPageType = {\n article: 'article',\n blog: 'blog',\n captcha: 'captcha',\n cart: 'cart',\n collection: 'collection',\n customersAccount: 'customers/account',\n customersActivateAccount: 'customers/activate_account',\n customersAddresses: 'customers/addresses',\n customersLogin: 'customers/login',\n customersOrder: 'customers/order',\n customersRegister: 'customers/register',\n customersResetPassword: 'customers/reset_password',\n giftCard: 'gift_card',\n home: 'index',\n listCollections: 'list-collections',\n forbidden: '403',\n notFound: '404',\n page: 'page',\n password: 'password',\n product: 'product',\n policy: 'policy',\n search: 'search',\n} as const;\n\nexport const ShopifySalesChannel: ShopifySalesChannel = {\n hydrogen: 'hydrogen',\n headless: 'headless',\n} as const;\n\nexport const ShopifyAppId = {\n hydrogen: '6167201',\n headless: '12875497473',\n} as const;\n\n/**\n * These duplicated interface declaration is so that we can generate proper documentation\n * for these public facing constants\n */\n\n/**\n * Analytics event names accepted by Shopify analytics.\n * @publicDocs */\nexport interface AnalyticsEventName {\n /** Page view */\n PAGE_VIEW: 'PAGE_VIEW';\n /** Add to cart */\n ADD_TO_CART: 'ADD_TO_CART';\n}\n\n/**\n * Analytics page type values accepted by Shopify analytics.\n * @publicDocs */\nexport interface AnalyticsPageType {\n article: 'article';\n blog: 'blog';\n captcha: 'captcha';\n cart: 'cart';\n collection: 'collection';\n customersAccount: 'customers/account';\n customersActivateAccount: 'customers/activate_account';\n customersAddresses: 'customers/addresses';\n customersLogin: 'customers/login';\n customersOrder: 'customers/order';\n customersRegister: 'customers/register';\n customersResetPassword: 'customers/reset_password';\n giftCard: 'gift_card';\n home: 'index';\n listCollections: 'list-collections';\n forbidden: '403';\n notFound: '404';\n page: 'page';\n password: 'password';\n product: 'product';\n policy: 'policy';\n search: 'search';\n}\n\n/**\n * Analytics sales channel values accepted by Shopify analytics.\n * @publicDocs */\nexport interface ShopifySalesChannel {\n /** Shopify Hydrogen sales channel */\n hydrogen: 'hydrogen';\n /** Shopify Headless sales channel */\n headless: 'headless';\n}\n"],"names":[],"mappings":"AAAO,MAAM,qBAAqB;AAAA,EAChC,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,aAAa;AACf;AAEO,MAAM,oBAAuC;AAAA,EAClD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,0BAA0B;AAAA,EAC1B,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,wBAAwB;AAAA,EACxB,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AACV;AAEO,MAAM,sBAA2C;AAAA,EACtD,UAAU;AAAA,EACV,UAAU;AACZ;AAEO,MAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,EACV,UAAU;AACZ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-utils.js","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":";;AAYO,SAAS,cACd,UACA,SACsB;AACtB,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB,KAAK,IAAA;AAAA,IAAI;AAAA,EAChC;AAEJ;AAgBO,SAAS,SAAS,KAAqC;AAC5D,QAAM,gBAA4B;AAAA,IAChC,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,cAAc,IAAI,gBAAA;AAAA,IAClB,MAAM;AAAA,EAAA;AAGR,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,EAAC,QAAQ,cAAc,UAAU,SAAQ,IAAI,IAAI,GAAG;AAC1D,UAAM,gBAAgB,SAAS,MAAM,GAAG;AACxC,UAAM,mBAAmB,cAAc,cAAc,SAAS,CAAC;AAC/D,UAAM,eAAe,cAAc,cAAc,SAAS,CAAC;AAE3D,QAAI,CAAC,oBAAoB,CAAC,cAAc;AACtC,aAAO;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,KAAA;AAAA,EAC1D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAQO,SAAS,UACd,eACA,eACwB;AACxB,MAAI,OAAO,kBAAkB,UAAU;AACrC,WAAO,CAAA;AAAA,EACT;AACA,SAAO,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,QAAI,OAAO;AACT,oBAAc,GAAG,IAAI;AAAA,IACvB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAOO,SAAS,cAAc,QAAyB;AACrD,MAAI,OAAO,aAAa,aAAa;AACnC,YAAQ;AAAA,MACN,GAAG,MAAM;AAAA,IAAA;AAEX,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;;;"}
1
+ {"version":3,"file":"analytics-utils.js","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 * @publicDocs\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":";;AAYO,SAAS,cACd,UACA,SACsB;AACtB,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB,KAAK,IAAA;AAAA,IAAI;AAAA,EAChC;AAEJ;AAiBO,SAAS,SAAS,KAAqC;AAC5D,QAAM,gBAA4B;AAAA,IAChC,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,cAAc,IAAI,gBAAA;AAAA,IAClB,MAAM;AAAA,EAAA;AAGR,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,EAAC,QAAQ,cAAc,UAAU,SAAQ,IAAI,IAAI,GAAG;AAC1D,UAAM,gBAAgB,SAAS,MAAM,GAAG;AACxC,UAAM,mBAAmB,cAAc,cAAc,SAAS,CAAC;AAC/D,UAAM,eAAe,cAAc,cAAc,SAAS,CAAC;AAE3D,QAAI,CAAC,oBAAoB,CAAC,cAAc;AACtC,aAAO;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,KAAA;AAAA,EAC1D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAQO,SAAS,UACd,eACA,eACwB;AACxB,MAAI,OAAO,kBAAkB,UAAU;AACrC,WAAO,CAAA;AAAA,EACT;AACA,SAAO,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,QAAI,OAAO;AACT,oBAAc,GAAG,IAAI;AAAA,IACvB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAOO,SAAS,cAAc,QAAyB;AACrD,MAAI,OAAO,aAAa,aAAa;AACnC,YAAQ;AAAA,MACN,GAAG,MAAM;AAAA,IAAA;AAEX,WAAO;AAAA,EACT;AACA,SAAO;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":"AAYO,SAAS,cACd,UACA,SACsB;AACtB,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB,KAAK,IAAA;AAAA,IAAI;AAAA,EAChC;AAEJ;AAgBO,SAAS,SAAS,KAAqC;AAC5D,QAAM,gBAA4B;AAAA,IAChC,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,cAAc,IAAI,gBAAA;AAAA,IAClB,MAAM;AAAA,EAAA;AAGR,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,EAAC,QAAQ,cAAc,UAAU,SAAQ,IAAI,IAAI,GAAG;AAC1D,UAAM,gBAAgB,SAAS,MAAM,GAAG;AACxC,UAAM,mBAAmB,cAAc,cAAc,SAAS,CAAC;AAC/D,UAAM,eAAe,cAAc,cAAc,SAAS,CAAC;AAE3D,QAAI,CAAC,oBAAoB,CAAC,cAAc;AACtC,aAAO;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,KAAA;AAAA,EAC1D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAQO,SAAS,UACd,eACA,eACwB;AACxB,MAAI,OAAO,kBAAkB,UAAU;AACrC,WAAO,CAAA;AAAA,EACT;AACA,SAAO,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,QAAI,OAAO;AACT,oBAAc,GAAG,IAAI;AAAA,IACvB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAOO,SAAS,cAAc,QAAyB;AACrD,MAAI,OAAO,aAAa,aAAa;AACnC,YAAQ;AAAA,MACN,GAAG,MAAM;AAAA,IAAA;AAEX,WAAO;AAAA,EACT;AACA,SAAO;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 * @publicDocs\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":"AAYO,SAAS,cACd,UACA,SACsB;AACtB,SAAO;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB,KAAK,IAAA;AAAA,IAAI;AAAA,EAChC;AAEJ;AAiBO,SAAS,SAAS,KAAqC;AAC5D,QAAM,gBAA4B;AAAA,IAChC,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,cAAc,IAAI,gBAAA;AAAA,IAClB,MAAM;AAAA,EAAA;AAGR,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,EAAC,QAAQ,cAAc,UAAU,SAAQ,IAAI,IAAI,GAAG;AAC1D,UAAM,gBAAgB,SAAS,MAAM,GAAG;AACxC,UAAM,mBAAmB,cAAc,cAAc,SAAS,CAAC;AAC/D,UAAM,eAAe,cAAc,cAAc,SAAS,CAAC;AAE3D,QAAI,CAAC,oBAAoB,CAAC,cAAc;AACtC,aAAO;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,KAAA;AAAA,EAC1D,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAQO,SAAS,UACd,eACA,eACwB;AACxB,MAAI,OAAO,kBAAkB,UAAU;AACrC,WAAO,CAAA;AAAA,EACT;AACA,SAAO,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,QAAI,OAAO;AACT,oBAAc,GAAG,IAAI;AAAA,IACvB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAOO,SAAS,cAAc,QAAyB;AACrD,MAAI,OAAO,aAAa,aAAa;AACnC,YAAQ;AAAA,MACN,GAAG,MAAM;AAAA,IAAA;AAEX,WAAO;AAAA,EACT;AACA,SAAO;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","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';\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';\nimport {getTrackingValues} from './tracking-utils.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":["AnalyticsEventName","trekkiePageView","customerPageView","customerAddToCart","customerPageView2","customerCollectionView","customerProductView","customerSearchView","errorIfServer","getTrackingValues"],"mappings":"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"}
1
+ {"version":3,"file":"analytics.js","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';\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';\nimport {getTrackingValues} from './tracking-utils.js';\n\n/**\n * Set user and session cookies and refresh the expiry time. If `event.payload.hasUserConsent` is false, no analytics event will happen.\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 * @publicDocs\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\n/**\n * If executed on server, this method will return empty string for each field.\n * @publicDocs\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":["AnalyticsEventName","trekkiePageView","customerPageView","customerAddToCart","customerPageView2","customerCollectionView","customerProductView","customerSearchView","errorIfServer","getTrackingValues"],"mappings":"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"}
@@ -1 +1 @@
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';\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';\nimport {getTrackingValues} from './tracking-utils.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
+ {"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';\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';\nimport {getTrackingValues} from './tracking-utils.js';\n\n/**\n * Set user and session cookies and refresh the expiry time. If `event.payload.hasUserConsent` is false, no analytics event will happen.\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 * @publicDocs\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\n/**\n * If executed on server, this method will return empty string for each field.\n * @publicDocs\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,21 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const CartLineAdd = (cartFragment) => (
3
+ function getInContextVariables(includeVisitorConsent) {
4
+ const base = `$country: CountryCode = ZZ
5
+ $language: LanguageCode`;
6
+ return includeVisitorConsent ? `${base}
7
+ $visitorConsent: VisitorConsent` : base;
8
+ }
9
+ function getInContextDirective(includeVisitorConsent) {
10
+ return includeVisitorConsent ? `@inContext(
11
+ country: $country
12
+ language: $language
13
+ visitorConsent: $visitorConsent
14
+ )` : `@inContext(
15
+ country: $country
16
+ language: $language
17
+ )`;
18
+ }
19
+ const CartLineAdd = (cartFragment, options = {}) => (
4
20
  /* GraphQL */
5
21
  `
6
22
  mutation CartLineAdd(
7
23
  $cartId: ID!
8
24
  $lines: [CartLineInput!]!
9
25
  $numCartLines: Int = 250
10
- $country: CountryCode = ZZ
11
- $language: LanguageCode
12
- $visitorConsent: VisitorConsent
26
+ ${getInContextVariables(options.includeVisitorConsent ?? false)}
13
27
  )
14
- @inContext(
15
- country: $country
16
- language: $language
17
- visitorConsent: $visitorConsent
18
- ) {
28
+ ${getInContextDirective(options.includeVisitorConsent ?? false)} {
19
29
  cartLinesAdd(cartId: $cartId, lines: $lines) {
20
30
  cart {
21
31
  ...CartFragment
@@ -26,21 +36,15 @@ const CartLineAdd = (cartFragment) => (
26
36
  ${cartFragment}
27
37
  `
28
38
  );
29
- const CartCreate = (cartFragment) => (
39
+ const CartCreate = (cartFragment, options = {}) => (
30
40
  /* GraphQL */
31
41
  `
32
42
  mutation CartCreate(
33
43
  $input: CartInput!
34
44
  $numCartLines: Int = 250
35
- $country: CountryCode = ZZ
36
- $language: LanguageCode
37
- $visitorConsent: VisitorConsent
45
+ ${getInContextVariables(options.includeVisitorConsent ?? false)}
38
46
  )
39
- @inContext(
40
- country: $country
41
- language: $language
42
- visitorConsent: $visitorConsent
43
- ) {
47
+ ${getInContextDirective(options.includeVisitorConsent ?? false)} {
44
48
  cartCreate(input: $input) {
45
49
  cart {
46
50
  ...CartFragment
@@ -51,22 +55,16 @@ const CartCreate = (cartFragment) => (
51
55
  ${cartFragment}
52
56
  `
53
57
  );
54
- const CartLineRemove = (cartFragment) => (
58
+ const CartLineRemove = (cartFragment, options = {}) => (
55
59
  /* GraphQL */
56
60
  `
57
61
  mutation CartLineRemove(
58
62
  $cartId: ID!
59
63
  $lines: [ID!]!
60
64
  $numCartLines: Int = 250
61
- $country: CountryCode = ZZ
62
- $language: LanguageCode
63
- $visitorConsent: VisitorConsent
65
+ ${getInContextVariables(options.includeVisitorConsent ?? false)}
64
66
  )
65
- @inContext(
66
- country: $country
67
- language: $language
68
- visitorConsent: $visitorConsent
69
- ) {
67
+ ${getInContextDirective(options.includeVisitorConsent ?? false)} {
70
68
  cartLinesRemove(cartId: $cartId, lineIds: $lines) {
71
69
  cart {
72
70
  ...CartFragment
@@ -77,22 +75,16 @@ const CartLineRemove = (cartFragment) => (
77
75
  ${cartFragment}
78
76
  `
79
77
  );
80
- const CartLineUpdate = (cartFragment) => (
78
+ const CartLineUpdate = (cartFragment, options = {}) => (
81
79
  /* GraphQL */
82
80
  `
83
81
  mutation CartLineUpdate(
84
82
  $cartId: ID!
85
83
  $lines: [CartLineUpdateInput!]!
86
84
  $numCartLines: Int = 250
87
- $country: CountryCode = ZZ
88
- $language: LanguageCode
89
- $visitorConsent: VisitorConsent
85
+ ${getInContextVariables(options.includeVisitorConsent ?? false)}
90
86
  )
91
- @inContext(
92
- country: $country
93
- language: $language
94
- visitorConsent: $visitorConsent
95
- ) {
87
+ ${getInContextDirective(options.includeVisitorConsent ?? false)} {
96
88
  cartLinesUpdate(cartId: $cartId, lines: $lines) {
97
89
  cart {
98
90
  ...CartFragment
@@ -103,22 +95,16 @@ const CartLineUpdate = (cartFragment) => (
103
95
  ${cartFragment}
104
96
  `
105
97
  );
106
- const CartNoteUpdate = (cartFragment) => (
98
+ const CartNoteUpdate = (cartFragment, options = {}) => (
107
99
  /* GraphQL */
108
100
  `
109
101
  mutation CartNoteUpdate(
110
102
  $cartId: ID!
111
103
  $note: String!
112
104
  $numCartLines: Int = 250
113
- $country: CountryCode = ZZ
114
- $language: LanguageCode
115
- $visitorConsent: VisitorConsent
105
+ ${getInContextVariables(options.includeVisitorConsent ?? false)}
116
106
  )
117
- @inContext(
118
- country: $country
119
- language: $language
120
- visitorConsent: $visitorConsent
121
- ) {
107
+ ${getInContextDirective(options.includeVisitorConsent ?? false)} {
122
108
  cartNoteUpdate(cartId: $cartId, note: $note) {
123
109
  cart {
124
110
  ...CartFragment
@@ -129,22 +115,16 @@ const CartNoteUpdate = (cartFragment) => (
129
115
  ${cartFragment}
130
116
  `
131
117
  );
132
- const CartBuyerIdentityUpdate = (cartFragment) => (
118
+ const CartBuyerIdentityUpdate = (cartFragment, options = {}) => (
133
119
  /* GraphQL */
134
120
  `
135
121
  mutation CartBuyerIdentityUpdate(
136
122
  $cartId: ID!
137
123
  $buyerIdentity: CartBuyerIdentityInput!
138
124
  $numCartLines: Int = 250
139
- $country: CountryCode = ZZ
140
- $language: LanguageCode
141
- $visitorConsent: VisitorConsent
125
+ ${getInContextVariables(options.includeVisitorConsent ?? false)}
142
126
  )
143
- @inContext(
144
- country: $country
145
- language: $language
146
- visitorConsent: $visitorConsent
147
- ) {
127
+ ${getInContextDirective(options.includeVisitorConsent ?? false)} {
148
128
  cartBuyerIdentityUpdate(cartId: $cartId, buyerIdentity: $buyerIdentity) {
149
129
  cart {
150
130
  ...CartFragment
@@ -155,22 +135,16 @@ const CartBuyerIdentityUpdate = (cartFragment) => (
155
135
  ${cartFragment}
156
136
  `
157
137
  );
158
- const CartAttributesUpdate = (cartFragment) => (
138
+ const CartAttributesUpdate = (cartFragment, options = {}) => (
159
139
  /* GraphQL */
160
140
  `
161
141
  mutation CartAttributesUpdate(
162
142
  $attributes: [AttributeInput!]!
163
143
  $cartId: ID!
164
144
  $numCartLines: Int = 250
165
- $country: CountryCode = ZZ
166
- $language: LanguageCode
167
- $visitorConsent: VisitorConsent
145
+ ${getInContextVariables(options.includeVisitorConsent ?? false)}
168
146
  )
169
- @inContext(
170
- country: $country
171
- language: $language
172
- visitorConsent: $visitorConsent
173
- ) {
147
+ ${getInContextDirective(options.includeVisitorConsent ?? false)} {
174
148
  cartAttributesUpdate(attributes: $attributes, cartId: $cartId) {
175
149
  cart {
176
150
  ...CartFragment
@@ -181,22 +155,16 @@ const CartAttributesUpdate = (cartFragment) => (
181
155
  ${cartFragment}
182
156
  `
183
157
  );
184
- const CartDiscountCodesUpdate = (cartFragment) => (
158
+ const CartDiscountCodesUpdate = (cartFragment, options = {}) => (
185
159
  /* GraphQL */
186
160
  `
187
161
  mutation CartDiscountCodesUpdate(
188
162
  $cartId: ID!
189
163
  $discountCodes: [String!]!
190
164
  $numCartLines: Int = 250
191
- $country: CountryCode = ZZ
192
- $language: LanguageCode
193
- $visitorConsent: VisitorConsent
165
+ ${getInContextVariables(options.includeVisitorConsent ?? false)}
194
166
  )
195
- @inContext(
196
- country: $country
197
- language: $language
198
- visitorConsent: $visitorConsent
199
- ) {
167
+ ${getInContextDirective(options.includeVisitorConsent ?? false)} {
200
168
  cartDiscountCodesUpdate(cartId: $cartId, discountCodes: $discountCodes) {
201
169
  cart {
202
170
  ...CartFragment
@@ -207,21 +175,15 @@ const CartDiscountCodesUpdate = (cartFragment) => (
207
175
  ${cartFragment}
208
176
  `
209
177
  );
210
- const CartQuery = (cartFragment) => (
178
+ const CartQuery = (cartFragment, options = {}) => (
211
179
  /* GraphQL */
212
180
  `
213
181
  query CartQuery(
214
182
  $id: ID!
215
183
  $numCartLines: Int = 250
216
- $country: CountryCode = ZZ
217
- $language: LanguageCode
218
- $visitorConsent: VisitorConsent
184
+ ${getInContextVariables(options.includeVisitorConsent ?? false)}
219
185
  )
220
- @inContext(
221
- country: $country
222
- language: $language
223
- visitorConsent: $visitorConsent
224
- ) {
186
+ ${getInContextDirective(options.includeVisitorConsent ?? false)} {
225
187
  cart(id: $id) {
226
188
  ...CartFragment
227
189
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cart-queries.js","sources":["../../src/cart-queries.ts"],"sourcesContent":["export const CartLineAdd = (cartFragment: string): string => /* GraphQL */ `\n mutation CartLineAdd(\n $cartId: ID!\n $lines: [CartLineInput!]!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n $language: LanguageCode\n $visitorConsent: VisitorConsent\n )\n @inContext(\n country: $country\n language: $language\n visitorConsent: $visitorConsent\n ) {\n cartLinesAdd(cartId: $cartId, lines: $lines) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartCreate = (cartFragment: string): string => /* GraphQL */ `\n mutation CartCreate(\n $input: CartInput!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n $language: LanguageCode\n $visitorConsent: VisitorConsent\n )\n @inContext(\n country: $country\n language: $language\n visitorConsent: $visitorConsent\n ) {\n cartCreate(input: $input) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartLineRemove = (cartFragment: string): string => /* GraphQL */ `\n mutation CartLineRemove(\n $cartId: ID!\n $lines: [ID!]!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n $language: LanguageCode\n $visitorConsent: VisitorConsent\n )\n @inContext(\n country: $country\n language: $language\n visitorConsent: $visitorConsent\n ) {\n cartLinesRemove(cartId: $cartId, lineIds: $lines) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartLineUpdate = (cartFragment: string): string => /* GraphQL */ `\n mutation CartLineUpdate(\n $cartId: ID!\n $lines: [CartLineUpdateInput!]!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n $language: LanguageCode\n $visitorConsent: VisitorConsent\n )\n @inContext(\n country: $country\n language: $language\n visitorConsent: $visitorConsent\n ) {\n cartLinesUpdate(cartId: $cartId, lines: $lines) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartNoteUpdate = (cartFragment: string): string => /* GraphQL */ `\n mutation CartNoteUpdate(\n $cartId: ID!\n $note: String!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n $language: LanguageCode\n $visitorConsent: VisitorConsent\n )\n @inContext(\n country: $country\n language: $language\n visitorConsent: $visitorConsent\n ) {\n cartNoteUpdate(cartId: $cartId, note: $note) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartBuyerIdentityUpdate = (\n cartFragment: string,\n): string => /* GraphQL */ `\n mutation CartBuyerIdentityUpdate(\n $cartId: ID!\n $buyerIdentity: CartBuyerIdentityInput!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n $language: LanguageCode\n $visitorConsent: VisitorConsent\n )\n @inContext(\n country: $country\n language: $language\n visitorConsent: $visitorConsent\n ) {\n cartBuyerIdentityUpdate(cartId: $cartId, buyerIdentity: $buyerIdentity) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartAttributesUpdate = (\n cartFragment: string,\n): string => /* GraphQL */ `\n mutation CartAttributesUpdate(\n $attributes: [AttributeInput!]!\n $cartId: ID!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n $language: LanguageCode\n $visitorConsent: VisitorConsent\n )\n @inContext(\n country: $country\n language: $language\n visitorConsent: $visitorConsent\n ) {\n cartAttributesUpdate(attributes: $attributes, cartId: $cartId) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartDiscountCodesUpdate = (\n cartFragment: string,\n): string => /* GraphQL */ `\n mutation CartDiscountCodesUpdate(\n $cartId: ID!\n $discountCodes: [String!]!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n $language: LanguageCode\n $visitorConsent: VisitorConsent\n )\n @inContext(\n country: $country\n language: $language\n visitorConsent: $visitorConsent\n ) {\n cartDiscountCodesUpdate(cartId: $cartId, discountCodes: $discountCodes) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartQuery = (cartFragment: string): string => /* GraphQL */ `\n query CartQuery(\n $id: ID!\n $numCartLines: Int = 250\n $country: CountryCode = ZZ\n $language: LanguageCode\n $visitorConsent: VisitorConsent\n )\n @inContext(\n country: $country\n language: $language\n visitorConsent: $visitorConsent\n ) {\n cart(id: $id) {\n ...CartFragment\n }\n }\n\n ${cartFragment}\n`;\n\nexport const defaultCartFragment = /* GraphQL */ `\n fragment CartFragment on Cart {\n id\n checkoutUrl\n totalQuantity\n buyerIdentity {\n countryCode\n customer {\n id\n email\n firstName\n lastName\n displayName\n }\n email\n phone\n }\n lines(first: $numCartLines) {\n edges {\n node {\n id\n quantity\n attributes {\n key\n value\n }\n cost {\n totalAmount {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n }\n merchandise {\n ... on ProductVariant {\n id\n availableForSale\n compareAtPrice {\n ...MoneyFragment\n }\n price {\n ...MoneyFragment\n }\n requiresShipping\n title\n image {\n ...ImageFragment\n }\n product {\n handle\n title\n id\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n }\n }\n cost {\n subtotalAmount {\n ...MoneyFragment\n }\n totalAmount {\n ...MoneyFragment\n }\n totalDutyAmount {\n ...MoneyFragment\n }\n totalTaxAmount {\n ...MoneyFragment\n }\n }\n note\n attributes {\n key\n value\n }\n discountCodes {\n code\n applicable\n }\n }\n\n fragment MoneyFragment on MoneyV2 {\n currencyCode\n amount\n }\n fragment ImageFragment on Image {\n id\n url\n altText\n width\n height\n }\n`;\n"],"names":[],"mappings":";;AAAO,MAAM,cAAc,CAAC;AAAA;AAAA,EAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqBvE,YAAY;AAAA;AAAA;AAGT,MAAM,aAAa,CAAC;AAAA;AAAA,EAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoBtE,YAAY;AAAA;AAAA;AAGT,MAAM,iBAAiB,CAAC;AAAA;AAAA,EAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqB1E,YAAY;AAAA;AAAA;AAGT,MAAM,iBAAiB,CAAC;AAAA;AAAA,EAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqB1E,YAAY;AAAA;AAAA;AAGT,MAAM,iBAAiB,CAAC;AAAA;AAAA,EAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqB1E,YAAY;AAAA;AAAA;AAGT,MAAM,0BAA0B,CACrC;AAAA;AAAA,EACyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqBvB,YAAY;AAAA;AAAA;AAGT,MAAM,uBAAuB,CAClC;AAAA;AAAA,EACyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqBvB,YAAY;AAAA;AAAA;AAGT,MAAM,0BAA0B,CACrC;AAAA;AAAA,EACyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqBvB,YAAY;AAAA;AAAA;AAGT,MAAM,YAAY,CAAC;AAAA;AAAA,EAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkBrE,YAAY;AAAA;AAAA;AAGT,MAAM;AAAA;AAAA,EAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;"}
1
+ {"version":3,"file":"cart-queries.js","sources":["../../src/cart-queries.ts"],"sourcesContent":["type CartQueryOptions = {\n includeVisitorConsent?: boolean;\n};\n\nfunction getInContextVariables(includeVisitorConsent: boolean): string {\n const base = `$country: CountryCode = ZZ\n $language: LanguageCode`;\n\n return includeVisitorConsent\n ? `${base}\n $visitorConsent: VisitorConsent`\n : base;\n}\n\nfunction getInContextDirective(includeVisitorConsent: boolean): string {\n return includeVisitorConsent\n ? `@inContext(\n country: $country\n language: $language\n visitorConsent: $visitorConsent\n )`\n : `@inContext(\n country: $country\n language: $language\n )`;\n}\n\nexport const CartLineAdd = (\n cartFragment: string,\n options: CartQueryOptions = {},\n): string => /* GraphQL */ `\n mutation CartLineAdd(\n $cartId: ID!\n $lines: [CartLineInput!]!\n $numCartLines: Int = 250\n ${getInContextVariables(options.includeVisitorConsent ?? false)}\n )\n ${getInContextDirective(options.includeVisitorConsent ?? false)} {\n cartLinesAdd(cartId: $cartId, lines: $lines) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartCreate = (\n cartFragment: string,\n options: CartQueryOptions = {},\n): string => /* GraphQL */ `\n mutation CartCreate(\n $input: CartInput!\n $numCartLines: Int = 250\n ${getInContextVariables(options.includeVisitorConsent ?? false)}\n )\n ${getInContextDirective(options.includeVisitorConsent ?? false)} {\n cartCreate(input: $input) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartLineRemove = (\n cartFragment: string,\n options: CartQueryOptions = {},\n): string => /* GraphQL */ `\n mutation CartLineRemove(\n $cartId: ID!\n $lines: [ID!]!\n $numCartLines: Int = 250\n ${getInContextVariables(options.includeVisitorConsent ?? false)}\n )\n ${getInContextDirective(options.includeVisitorConsent ?? false)} {\n cartLinesRemove(cartId: $cartId, lineIds: $lines) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartLineUpdate = (\n cartFragment: string,\n options: CartQueryOptions = {},\n): string => /* GraphQL */ `\n mutation CartLineUpdate(\n $cartId: ID!\n $lines: [CartLineUpdateInput!]!\n $numCartLines: Int = 250\n ${getInContextVariables(options.includeVisitorConsent ?? false)}\n )\n ${getInContextDirective(options.includeVisitorConsent ?? false)} {\n cartLinesUpdate(cartId: $cartId, lines: $lines) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartNoteUpdate = (\n cartFragment: string,\n options: CartQueryOptions = {},\n): string => /* GraphQL */ `\n mutation CartNoteUpdate(\n $cartId: ID!\n $note: String!\n $numCartLines: Int = 250\n ${getInContextVariables(options.includeVisitorConsent ?? false)}\n )\n ${getInContextDirective(options.includeVisitorConsent ?? false)} {\n cartNoteUpdate(cartId: $cartId, note: $note) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartBuyerIdentityUpdate = (\n cartFragment: string,\n options: CartQueryOptions = {},\n): string => /* GraphQL */ `\n mutation CartBuyerIdentityUpdate(\n $cartId: ID!\n $buyerIdentity: CartBuyerIdentityInput!\n $numCartLines: Int = 250\n ${getInContextVariables(options.includeVisitorConsent ?? false)}\n )\n ${getInContextDirective(options.includeVisitorConsent ?? false)} {\n cartBuyerIdentityUpdate(cartId: $cartId, buyerIdentity: $buyerIdentity) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartAttributesUpdate = (\n cartFragment: string,\n options: CartQueryOptions = {},\n): string => /* GraphQL */ `\n mutation CartAttributesUpdate(\n $attributes: [AttributeInput!]!\n $cartId: ID!\n $numCartLines: Int = 250\n ${getInContextVariables(options.includeVisitorConsent ?? false)}\n )\n ${getInContextDirective(options.includeVisitorConsent ?? false)} {\n cartAttributesUpdate(attributes: $attributes, cartId: $cartId) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartDiscountCodesUpdate = (\n cartFragment: string,\n options: CartQueryOptions = {},\n): string => /* GraphQL */ `\n mutation CartDiscountCodesUpdate(\n $cartId: ID!\n $discountCodes: [String!]!\n $numCartLines: Int = 250\n ${getInContextVariables(options.includeVisitorConsent ?? false)}\n )\n ${getInContextDirective(options.includeVisitorConsent ?? false)} {\n cartDiscountCodesUpdate(cartId: $cartId, discountCodes: $discountCodes) {\n cart {\n ...CartFragment\n }\n }\n }\n\n ${cartFragment}\n`;\n\nexport const CartQuery = (\n cartFragment: string,\n options: CartQueryOptions = {},\n): string => /* GraphQL */ `\n query CartQuery(\n $id: ID!\n $numCartLines: Int = 250\n ${getInContextVariables(options.includeVisitorConsent ?? false)}\n )\n ${getInContextDirective(options.includeVisitorConsent ?? false)} {\n cart(id: $id) {\n ...CartFragment\n }\n }\n\n ${cartFragment}\n`;\n\nexport const defaultCartFragment = /* GraphQL */ `\n fragment CartFragment on Cart {\n id\n checkoutUrl\n totalQuantity\n buyerIdentity {\n countryCode\n customer {\n id\n email\n firstName\n lastName\n displayName\n }\n email\n phone\n }\n lines(first: $numCartLines) {\n edges {\n node {\n id\n quantity\n attributes {\n key\n value\n }\n cost {\n totalAmount {\n amount\n currencyCode\n }\n compareAtAmountPerQuantity {\n amount\n currencyCode\n }\n }\n merchandise {\n ... on ProductVariant {\n id\n availableForSale\n compareAtPrice {\n ...MoneyFragment\n }\n price {\n ...MoneyFragment\n }\n requiresShipping\n title\n image {\n ...ImageFragment\n }\n product {\n handle\n title\n id\n }\n selectedOptions {\n name\n value\n }\n }\n }\n }\n }\n }\n cost {\n subtotalAmount {\n ...MoneyFragment\n }\n totalAmount {\n ...MoneyFragment\n }\n totalDutyAmount {\n ...MoneyFragment\n }\n totalTaxAmount {\n ...MoneyFragment\n }\n }\n note\n attributes {\n key\n value\n }\n discountCodes {\n code\n applicable\n }\n }\n\n fragment MoneyFragment on MoneyV2 {\n currencyCode\n amount\n }\n fragment ImageFragment on Image {\n id\n url\n altText\n width\n height\n }\n`;\n"],"names":[],"mappings":"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"}