@shopify/hydrogen-react 0.0.0-next-ea3959b → 0.0.0-next-dada720

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 (291) hide show
  1. package/README.md +21 -21
  2. package/dist/browser-dev/AddToCartButton.mjs.map +1 -1
  3. package/dist/browser-dev/BuyNowButton.mjs.map +1 -1
  4. package/dist/browser-dev/CartCheckoutButton.mjs.map +1 -1
  5. package/dist/browser-dev/CartCost.mjs +25 -0
  6. package/dist/browser-dev/CartCost.mjs.map +1 -0
  7. package/dist/browser-dev/CartLinePrice.mjs +18 -0
  8. package/dist/browser-dev/CartLinePrice.mjs.map +1 -0
  9. package/dist/browser-dev/CartLineProvider.mjs +19 -0
  10. package/dist/browser-dev/CartLineProvider.mjs.map +1 -0
  11. package/dist/browser-dev/CartProvider.mjs.map +1 -1
  12. package/dist/browser-dev/ExternalVideo.mjs.map +1 -1
  13. package/dist/browser-dev/Image.mjs.map +1 -1
  14. package/dist/browser-dev/MediaFile.mjs.map +1 -1
  15. package/dist/browser-dev/ModelViewer.mjs.map +1 -1
  16. package/dist/browser-dev/ProductPrice.mjs.map +1 -1
  17. package/dist/browser-dev/ProductProvider.mjs.map +1 -1
  18. package/dist/browser-dev/ShopPayButton.mjs +10 -10
  19. package/dist/browser-dev/ShopPayButton.mjs.map +1 -1
  20. package/dist/browser-dev/ShopifyProvider.mjs +9 -21
  21. package/dist/browser-dev/ShopifyProvider.mjs.map +1 -1
  22. package/dist/browser-dev/analytics-constants.mjs +43 -0
  23. package/dist/browser-dev/analytics-constants.mjs.map +1 -0
  24. package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs +145 -0
  25. package/dist/browser-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -0
  26. package/dist/browser-dev/analytics-schema-trekkie-storefront-page-view.mjs +58 -0
  27. package/dist/browser-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -0
  28. package/dist/browser-dev/analytics-utils.mjs +49 -0
  29. package/dist/browser-dev/analytics-utils.mjs.map +1 -0
  30. package/dist/browser-dev/analytics.mjs +159 -0
  31. package/dist/browser-dev/analytics.mjs.map +1 -0
  32. package/dist/browser-dev/cart-hooks.mjs +5 -7
  33. package/dist/browser-dev/cart-hooks.mjs.map +1 -1
  34. package/dist/browser-dev/cookies-utils.mjs +50 -0
  35. package/dist/browser-dev/cookies-utils.mjs.map +1 -0
  36. package/dist/browser-dev/index.mjs +20 -2
  37. package/dist/browser-dev/index.mjs.map +1 -1
  38. package/dist/browser-dev/parse-metafield.mjs.map +1 -1
  39. package/dist/browser-dev/storefront-client.mjs +13 -12
  40. package/dist/browser-dev/storefront-client.mjs.map +1 -1
  41. package/dist/browser-dev/useMoney.mjs +2 -1
  42. package/dist/browser-dev/useMoney.mjs.map +1 -1
  43. package/dist/browser-dev/useShopifyCookies.mjs +41 -0
  44. package/dist/browser-dev/useShopifyCookies.mjs.map +1 -0
  45. package/dist/browser-prod/AddToCartButton.mjs.map +1 -1
  46. package/dist/browser-prod/BuyNowButton.mjs.map +1 -1
  47. package/dist/browser-prod/CartCheckoutButton.mjs.map +1 -1
  48. package/dist/browser-prod/CartCost.mjs +25 -0
  49. package/dist/browser-prod/CartCost.mjs.map +1 -0
  50. package/dist/browser-prod/CartLinePrice.mjs +18 -0
  51. package/dist/browser-prod/CartLinePrice.mjs.map +1 -0
  52. package/dist/browser-prod/CartLineProvider.mjs +19 -0
  53. package/dist/browser-prod/CartLineProvider.mjs.map +1 -0
  54. package/dist/browser-prod/CartProvider.mjs.map +1 -1
  55. package/dist/browser-prod/ExternalVideo.mjs.map +1 -1
  56. package/dist/browser-prod/Image.mjs.map +1 -1
  57. package/dist/browser-prod/MediaFile.mjs.map +1 -1
  58. package/dist/browser-prod/ModelViewer.mjs.map +1 -1
  59. package/dist/browser-prod/ProductPrice.mjs.map +1 -1
  60. package/dist/browser-prod/ProductProvider.mjs.map +1 -1
  61. package/dist/browser-prod/ShopPayButton.mjs +10 -10
  62. package/dist/browser-prod/ShopPayButton.mjs.map +1 -1
  63. package/dist/browser-prod/ShopifyProvider.mjs +9 -16
  64. package/dist/browser-prod/ShopifyProvider.mjs.map +1 -1
  65. package/dist/browser-prod/analytics-constants.mjs +43 -0
  66. package/dist/browser-prod/analytics-constants.mjs.map +1 -0
  67. package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs +145 -0
  68. package/dist/browser-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -0
  69. package/dist/browser-prod/analytics-schema-trekkie-storefront-page-view.mjs +58 -0
  70. package/dist/browser-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -0
  71. package/dist/browser-prod/analytics-utils.mjs +49 -0
  72. package/dist/browser-prod/analytics-utils.mjs.map +1 -0
  73. package/dist/browser-prod/analytics.mjs +158 -0
  74. package/dist/browser-prod/analytics.mjs.map +1 -0
  75. package/dist/browser-prod/cart-hooks.mjs +5 -7
  76. package/dist/browser-prod/cart-hooks.mjs.map +1 -1
  77. package/dist/browser-prod/cookies-utils.mjs +50 -0
  78. package/dist/browser-prod/cookies-utils.mjs.map +1 -0
  79. package/dist/browser-prod/index.mjs +20 -2
  80. package/dist/browser-prod/index.mjs.map +1 -1
  81. package/dist/browser-prod/parse-metafield.mjs.map +1 -1
  82. package/dist/browser-prod/storefront-client.mjs +13 -12
  83. package/dist/browser-prod/storefront-client.mjs.map +1 -1
  84. package/dist/browser-prod/useMoney.mjs +2 -1
  85. package/dist/browser-prod/useMoney.mjs.map +1 -1
  86. package/dist/browser-prod/useShopifyCookies.mjs +41 -0
  87. package/dist/browser-prod/useShopifyCookies.mjs.map +1 -0
  88. package/dist/node-dev/AddToCartButton.js.map +1 -1
  89. package/dist/node-dev/AddToCartButton.mjs.map +1 -1
  90. package/dist/node-dev/BuyNowButton.js.map +1 -1
  91. package/dist/node-dev/BuyNowButton.mjs.map +1 -1
  92. package/dist/node-dev/CartCheckoutButton.js.map +1 -1
  93. package/dist/node-dev/CartCheckoutButton.mjs.map +1 -1
  94. package/dist/node-dev/CartCost.js +25 -0
  95. package/dist/node-dev/CartCost.js.map +1 -0
  96. package/dist/node-dev/CartCost.mjs +25 -0
  97. package/dist/node-dev/CartCost.mjs.map +1 -0
  98. package/dist/node-dev/CartLinePrice.js +18 -0
  99. package/dist/node-dev/CartLinePrice.js.map +1 -0
  100. package/dist/node-dev/CartLinePrice.mjs +18 -0
  101. package/dist/node-dev/CartLinePrice.mjs.map +1 -0
  102. package/dist/node-dev/CartLineProvider.js +19 -0
  103. package/dist/node-dev/CartLineProvider.js.map +1 -0
  104. package/dist/node-dev/CartLineProvider.mjs +19 -0
  105. package/dist/node-dev/CartLineProvider.mjs.map +1 -0
  106. package/dist/node-dev/CartProvider.js.map +1 -1
  107. package/dist/node-dev/CartProvider.mjs.map +1 -1
  108. package/dist/node-dev/ExternalVideo.js.map +1 -1
  109. package/dist/node-dev/ExternalVideo.mjs.map +1 -1
  110. package/dist/node-dev/Image.js.map +1 -1
  111. package/dist/node-dev/Image.mjs.map +1 -1
  112. package/dist/node-dev/MediaFile.js.map +1 -1
  113. package/dist/node-dev/MediaFile.mjs.map +1 -1
  114. package/dist/node-dev/ModelViewer.js.map +1 -1
  115. package/dist/node-dev/ModelViewer.mjs.map +1 -1
  116. package/dist/node-dev/ProductPrice.js.map +1 -1
  117. package/dist/node-dev/ProductPrice.mjs.map +1 -1
  118. package/dist/node-dev/ProductProvider.js.map +1 -1
  119. package/dist/node-dev/ProductProvider.mjs.map +1 -1
  120. package/dist/node-dev/ShopPayButton.js +9 -9
  121. package/dist/node-dev/ShopPayButton.js.map +1 -1
  122. package/dist/node-dev/ShopPayButton.mjs +10 -10
  123. package/dist/node-dev/ShopPayButton.mjs.map +1 -1
  124. package/dist/node-dev/ShopifyProvider.js +9 -21
  125. package/dist/node-dev/ShopifyProvider.js.map +1 -1
  126. package/dist/node-dev/ShopifyProvider.mjs +9 -21
  127. package/dist/node-dev/ShopifyProvider.mjs.map +1 -1
  128. package/dist/node-dev/analytics-constants.js +43 -0
  129. package/dist/node-dev/analytics-constants.js.map +1 -0
  130. package/dist/node-dev/analytics-constants.mjs +43 -0
  131. package/dist/node-dev/analytics-constants.mjs.map +1 -0
  132. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js +145 -0
  133. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.js.map +1 -0
  134. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs +145 -0
  135. package/dist/node-dev/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -0
  136. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.js +58 -0
  137. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.js.map +1 -0
  138. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.mjs +58 -0
  139. package/dist/node-dev/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -0
  140. package/dist/node-dev/analytics-utils.js +49 -0
  141. package/dist/node-dev/analytics-utils.js.map +1 -0
  142. package/dist/node-dev/analytics-utils.mjs +49 -0
  143. package/dist/node-dev/analytics-utils.mjs.map +1 -0
  144. package/dist/node-dev/analytics.js +159 -0
  145. package/dist/node-dev/analytics.js.map +1 -0
  146. package/dist/node-dev/analytics.mjs +159 -0
  147. package/dist/node-dev/analytics.mjs.map +1 -0
  148. package/dist/node-dev/cart-hooks.js +4 -6
  149. package/dist/node-dev/cart-hooks.js.map +1 -1
  150. package/dist/node-dev/cart-hooks.mjs +5 -7
  151. package/dist/node-dev/cart-hooks.mjs.map +1 -1
  152. package/dist/node-dev/cookies-utils.js +50 -0
  153. package/dist/node-dev/cookies-utils.js.map +1 -0
  154. package/dist/node-dev/cookies-utils.mjs +50 -0
  155. package/dist/node-dev/cookies-utils.mjs.map +1 -0
  156. package/dist/node-dev/index.js +20 -2
  157. package/dist/node-dev/index.js.map +1 -1
  158. package/dist/node-dev/index.mjs +20 -2
  159. package/dist/node-dev/index.mjs.map +1 -1
  160. package/dist/node-dev/parse-metafield.js.map +1 -1
  161. package/dist/node-dev/parse-metafield.mjs.map +1 -1
  162. package/dist/node-dev/storefront-client.js +13 -12
  163. package/dist/node-dev/storefront-client.js.map +1 -1
  164. package/dist/node-dev/storefront-client.mjs +13 -12
  165. package/dist/node-dev/storefront-client.mjs.map +1 -1
  166. package/dist/node-dev/useMoney.js +2 -1
  167. package/dist/node-dev/useMoney.js.map +1 -1
  168. package/dist/node-dev/useMoney.mjs +2 -1
  169. package/dist/node-dev/useMoney.mjs.map +1 -1
  170. package/dist/node-dev/useShopifyCookies.js +41 -0
  171. package/dist/node-dev/useShopifyCookies.js.map +1 -0
  172. package/dist/node-dev/useShopifyCookies.mjs +41 -0
  173. package/dist/node-dev/useShopifyCookies.mjs.map +1 -0
  174. package/dist/node-prod/AddToCartButton.js.map +1 -1
  175. package/dist/node-prod/AddToCartButton.mjs.map +1 -1
  176. package/dist/node-prod/BuyNowButton.js.map +1 -1
  177. package/dist/node-prod/BuyNowButton.mjs.map +1 -1
  178. package/dist/node-prod/CartCheckoutButton.js.map +1 -1
  179. package/dist/node-prod/CartCheckoutButton.mjs.map +1 -1
  180. package/dist/node-prod/CartCost.js +25 -0
  181. package/dist/node-prod/CartCost.js.map +1 -0
  182. package/dist/node-prod/CartCost.mjs +25 -0
  183. package/dist/node-prod/CartCost.mjs.map +1 -0
  184. package/dist/node-prod/CartLinePrice.js +18 -0
  185. package/dist/node-prod/CartLinePrice.js.map +1 -0
  186. package/dist/node-prod/CartLinePrice.mjs +18 -0
  187. package/dist/node-prod/CartLinePrice.mjs.map +1 -0
  188. package/dist/node-prod/CartLineProvider.js +19 -0
  189. package/dist/node-prod/CartLineProvider.js.map +1 -0
  190. package/dist/node-prod/CartLineProvider.mjs +19 -0
  191. package/dist/node-prod/CartLineProvider.mjs.map +1 -0
  192. package/dist/node-prod/CartProvider.js.map +1 -1
  193. package/dist/node-prod/CartProvider.mjs.map +1 -1
  194. package/dist/node-prod/ExternalVideo.js.map +1 -1
  195. package/dist/node-prod/ExternalVideo.mjs.map +1 -1
  196. package/dist/node-prod/Image.js.map +1 -1
  197. package/dist/node-prod/Image.mjs.map +1 -1
  198. package/dist/node-prod/MediaFile.js.map +1 -1
  199. package/dist/node-prod/MediaFile.mjs.map +1 -1
  200. package/dist/node-prod/ModelViewer.js.map +1 -1
  201. package/dist/node-prod/ModelViewer.mjs.map +1 -1
  202. package/dist/node-prod/ProductPrice.js.map +1 -1
  203. package/dist/node-prod/ProductPrice.mjs.map +1 -1
  204. package/dist/node-prod/ProductProvider.js.map +1 -1
  205. package/dist/node-prod/ProductProvider.mjs.map +1 -1
  206. package/dist/node-prod/ShopPayButton.js +9 -9
  207. package/dist/node-prod/ShopPayButton.js.map +1 -1
  208. package/dist/node-prod/ShopPayButton.mjs +10 -10
  209. package/dist/node-prod/ShopPayButton.mjs.map +1 -1
  210. package/dist/node-prod/ShopifyProvider.js +9 -16
  211. package/dist/node-prod/ShopifyProvider.js.map +1 -1
  212. package/dist/node-prod/ShopifyProvider.mjs +9 -16
  213. package/dist/node-prod/ShopifyProvider.mjs.map +1 -1
  214. package/dist/node-prod/analytics-constants.js +43 -0
  215. package/dist/node-prod/analytics-constants.js.map +1 -0
  216. package/dist/node-prod/analytics-constants.mjs +43 -0
  217. package/dist/node-prod/analytics-constants.mjs.map +1 -0
  218. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js +145 -0
  219. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.js.map +1 -0
  220. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs +145 -0
  221. package/dist/node-prod/analytics-schema-custom-storefront-customer-tracking.mjs.map +1 -0
  222. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.js +58 -0
  223. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.js.map +1 -0
  224. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.mjs +58 -0
  225. package/dist/node-prod/analytics-schema-trekkie-storefront-page-view.mjs.map +1 -0
  226. package/dist/node-prod/analytics-utils.js +49 -0
  227. package/dist/node-prod/analytics-utils.js.map +1 -0
  228. package/dist/node-prod/analytics-utils.mjs +49 -0
  229. package/dist/node-prod/analytics-utils.mjs.map +1 -0
  230. package/dist/node-prod/analytics.js +158 -0
  231. package/dist/node-prod/analytics.js.map +1 -0
  232. package/dist/node-prod/analytics.mjs +158 -0
  233. package/dist/node-prod/analytics.mjs.map +1 -0
  234. package/dist/node-prod/cart-hooks.js +4 -6
  235. package/dist/node-prod/cart-hooks.js.map +1 -1
  236. package/dist/node-prod/cart-hooks.mjs +5 -7
  237. package/dist/node-prod/cart-hooks.mjs.map +1 -1
  238. package/dist/node-prod/cookies-utils.js +50 -0
  239. package/dist/node-prod/cookies-utils.js.map +1 -0
  240. package/dist/node-prod/cookies-utils.mjs +50 -0
  241. package/dist/node-prod/cookies-utils.mjs.map +1 -0
  242. package/dist/node-prod/index.js +20 -2
  243. package/dist/node-prod/index.js.map +1 -1
  244. package/dist/node-prod/index.mjs +20 -2
  245. package/dist/node-prod/index.mjs.map +1 -1
  246. package/dist/node-prod/parse-metafield.js.map +1 -1
  247. package/dist/node-prod/parse-metafield.mjs.map +1 -1
  248. package/dist/node-prod/storefront-client.js +13 -12
  249. package/dist/node-prod/storefront-client.js.map +1 -1
  250. package/dist/node-prod/storefront-client.mjs +13 -12
  251. package/dist/node-prod/storefront-client.mjs.map +1 -1
  252. package/dist/node-prod/useMoney.js +2 -1
  253. package/dist/node-prod/useMoney.js.map +1 -1
  254. package/dist/node-prod/useMoney.mjs +2 -1
  255. package/dist/node-prod/useMoney.mjs.map +1 -1
  256. package/dist/node-prod/useShopifyCookies.js +41 -0
  257. package/dist/node-prod/useShopifyCookies.js.map +1 -0
  258. package/dist/node-prod/useShopifyCookies.mjs +41 -0
  259. package/dist/node-prod/useShopifyCookies.mjs.map +1 -0
  260. package/dist/types/AddToCartButton.d.ts +3 -2
  261. package/dist/types/BuyNowButton.d.ts +7 -3
  262. package/dist/types/CartCheckoutButton.d.ts +6 -5
  263. package/dist/types/CartCost.d.ts +7 -5
  264. package/dist/types/CartLinePrice.d.ts +4 -4
  265. package/dist/types/CartLineProvider.d.ts +8 -6
  266. package/dist/types/CartProvider.d.ts +12 -2
  267. package/dist/types/ExternalVideo.d.ts +1 -2
  268. package/dist/types/Image.d.ts +5 -3
  269. package/dist/types/MediaFile.d.ts +12 -11
  270. package/dist/types/ModelViewer.d.ts +2 -2
  271. package/dist/types/ProductPrice.d.ts +1 -1
  272. package/dist/types/ProductProvider.d.ts +1 -1
  273. package/dist/types/ShopPayButton.d.ts +10 -10
  274. package/dist/types/ShopifyProvider.d.ts +35 -39
  275. package/dist/types/analytics-constants.d.ts +48 -0
  276. package/dist/types/analytics-schema-custom-storefront-customer-tracking.d.ts +3 -0
  277. package/dist/types/analytics-schema-trekkie-storefront-page-view.d.ts +2 -0
  278. package/dist/types/analytics-types.d.ts +108 -0
  279. package/dist/types/analytics-utils.d.ts +36 -0
  280. package/dist/types/analytics.d.ts +9 -0
  281. package/dist/types/cookies-utils.d.ts +4 -0
  282. package/dist/types/index.d.cts +11 -3
  283. package/dist/types/index.d.ts +11 -3
  284. package/dist/types/parse-metafield.d.ts +1 -3
  285. package/dist/types/storefront-client.d.ts +14 -14
  286. package/dist/types/useShopifyCookies.d.ts +14 -0
  287. package/dist/umd/hydrogen-react.dev.js +704 -172
  288. package/dist/umd/hydrogen-react.dev.js.map +1 -1
  289. package/dist/umd/hydrogen-react.prod.js +18 -16
  290. package/dist/umd/hydrogen-react.prod.js.map +1 -1
  291. package/package.json +12 -7
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const analyticsConstants = require("./analytics-constants.js");
4
+ const analyticsUtils = require("./analytics-utils.js");
5
+ const cookiesUtils = require("./cookies-utils.js");
6
+ const SCHEMA_ID = "custom_storefront_customer_tracking/1.0";
7
+ const PAGE_RENDERED_EVENT_NAME = "page_rendered";
8
+ const COLLECTION_PAGE_RENDERED_EVENT_NAME = "collection_page_rendered";
9
+ const PRODUCT_PAGE_RENDERED_EVENT_NAME = "product_page_rendered";
10
+ const PRODUCT_ADDED_TO_CART_EVENT_NAME = "product_added_to_cart";
11
+ const SEARCH_SUBMITTED_EVENT_NAME = "search_submitted";
12
+ function pageView(payload) {
13
+ const pageViewPayload = payload;
14
+ const additionalPayload = {
15
+ canonical_url: pageViewPayload.canonicalUrl || pageViewPayload.url,
16
+ customer_id: pageViewPayload.customerId
17
+ };
18
+ const pageType = pageViewPayload.pageType;
19
+ const pageViewEvents = [];
20
+ pageViewEvents.push(
21
+ analyticsUtils.schemaWrapper(
22
+ SCHEMA_ID,
23
+ analyticsUtils.addDataIf(
24
+ {
25
+ event_name: PAGE_RENDERED_EVENT_NAME,
26
+ ...additionalPayload
27
+ },
28
+ formatPayload(pageViewPayload)
29
+ )
30
+ )
31
+ );
32
+ switch (pageType) {
33
+ case analyticsConstants.AnalyticsPageType.collection:
34
+ pageViewEvents.push(
35
+ analyticsUtils.schemaWrapper(
36
+ SCHEMA_ID,
37
+ analyticsUtils.addDataIf(
38
+ {
39
+ event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,
40
+ ...additionalPayload,
41
+ collection_name: pageViewPayload.collectionHandle
42
+ },
43
+ formatPayload(pageViewPayload)
44
+ )
45
+ )
46
+ );
47
+ break;
48
+ case analyticsConstants.AnalyticsPageType.product:
49
+ pageViewEvents.push(
50
+ analyticsUtils.schemaWrapper(
51
+ SCHEMA_ID,
52
+ analyticsUtils.addDataIf(
53
+ {
54
+ event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,
55
+ ...additionalPayload,
56
+ products: formatProductPayload(pageViewPayload.products),
57
+ total_value: pageViewPayload.totalValue
58
+ },
59
+ formatPayload(pageViewPayload)
60
+ )
61
+ )
62
+ );
63
+ break;
64
+ case analyticsConstants.AnalyticsPageType.search:
65
+ pageViewEvents.push(
66
+ analyticsUtils.schemaWrapper(
67
+ SCHEMA_ID,
68
+ analyticsUtils.addDataIf(
69
+ {
70
+ event_name: SEARCH_SUBMITTED_EVENT_NAME,
71
+ ...additionalPayload,
72
+ search_string: pageViewPayload.searchString
73
+ },
74
+ formatPayload(pageViewPayload)
75
+ )
76
+ )
77
+ );
78
+ break;
79
+ }
80
+ return pageViewEvents;
81
+ }
82
+ function addToCart(payload) {
83
+ const addToCartPayload = payload;
84
+ const cartToken = analyticsUtils.parseGid(addToCartPayload.cartId);
85
+ const cart_token = (cartToken == null ? void 0 : cartToken.id) ? `${cartToken.id}` : null;
86
+ return [
87
+ analyticsUtils.schemaWrapper(
88
+ SCHEMA_ID,
89
+ analyticsUtils.addDataIf(
90
+ {
91
+ event_name: PRODUCT_ADDED_TO_CART_EVENT_NAME,
92
+ customerId: addToCartPayload.customerId,
93
+ cart_token,
94
+ total_value: addToCartPayload.totalValue,
95
+ products: formatProductPayload(addToCartPayload.products)
96
+ },
97
+ formatPayload(addToCartPayload)
98
+ )
99
+ )
100
+ ];
101
+ }
102
+ function formatPayload(payload) {
103
+ return {
104
+ source: payload.shopifySalesChannel || analyticsConstants.ShopifySalesChannel.headless,
105
+ hydrogenSubchannelId: payload.storefrontId || "0",
106
+ is_persistent_cookie: payload.hasUserConsent,
107
+ ccpa_enforced: false,
108
+ gdpr_enforced: false,
109
+ unique_token: payload.uniqueToken,
110
+ event_time: Date.now(),
111
+ event_id: cookiesUtils.buildUUID(),
112
+ event_source_url: payload.url,
113
+ referrer: payload.referrer,
114
+ user_agent: payload.userAgent,
115
+ navigation_type: payload.navigationType,
116
+ navigation_api: payload.navigationApi,
117
+ shop_id: parseInt(analyticsUtils.parseGid(payload.shopId).id),
118
+ currency: payload.currency
119
+ };
120
+ }
121
+ function formatProductPayload(products) {
122
+ return products ? products.map((p) => {
123
+ const product = analyticsUtils.addDataIf(
124
+ {
125
+ variant_gid: p.variantGid,
126
+ category: p.category,
127
+ sku: p.sku,
128
+ product_id: parseInt(analyticsUtils.parseGid(p.productGid).id),
129
+ variant_id: parseInt(analyticsUtils.parseGid(p.variantGid).id)
130
+ },
131
+ {
132
+ product_gid: p.productGid,
133
+ name: p.name,
134
+ variant: p.variantName || "",
135
+ brand: p.brand,
136
+ price: p.price,
137
+ quantity: Number(p.quantity || 0)
138
+ }
139
+ );
140
+ return JSON.stringify(product);
141
+ }) : [];
142
+ }
143
+ exports.addToCart = addToCart;
144
+ exports.pageView = pageView;
145
+ //# sourceMappingURL=analytics-schema-custom-storefront-customer-tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-schema-custom-storefront-customer-tracking.js","sources":["../../src/analytics-schema-custom-storefront-customer-tracking.ts"],"sourcesContent":["import {\n ShopifyAnalyticsPayload,\n ShopifyPageViewPayload,\n ShopifyAddToCartPayload,\n ShopifyMonorailPayload,\n ShopifyAnalyticsProduct,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsPageType, ShopifySalesChannel} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'custom_storefront_customer_tracking/1.0';\nconst PAGE_RENDERED_EVENT_NAME = 'page_rendered';\nconst COLLECTION_PAGE_RENDERED_EVENT_NAME = 'collection_page_rendered';\nconst PRODUCT_PAGE_RENDERED_EVENT_NAME = 'product_page_rendered';\nconst PRODUCT_ADDED_TO_CART_EVENT_NAME = 'product_added_to_cart';\nconst SEARCH_SUBMITTED_EVENT_NAME = 'search_submitted';\n\nexport function pageView(\n payload: ShopifyPageViewPayload\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = {\n canonical_url: pageViewPayload.canonicalUrl || pageViewPayload.url,\n customer_id: pageViewPayload.customerId,\n };\n const pageType = pageViewPayload.pageType;\n const pageViewEvents = [];\n\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n },\n formatPayload(pageViewPayload)\n )\n )\n );\n\n switch (pageType) {\n case AnalyticsPageType.collection:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n collection_name: pageViewPayload.collectionHandle,\n },\n formatPayload(pageViewPayload)\n )\n )\n );\n break;\n case AnalyticsPageType.product:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n products: formatProductPayload(pageViewPayload.products),\n total_value: pageViewPayload.totalValue,\n },\n formatPayload(pageViewPayload)\n )\n )\n );\n break;\n case AnalyticsPageType.search:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: SEARCH_SUBMITTED_EVENT_NAME,\n ...additionalPayload,\n search_string: pageViewPayload.searchString,\n },\n formatPayload(pageViewPayload)\n )\n )\n );\n break;\n }\n\n return pageViewEvents;\n}\n\nexport function addToCart(\n payload: ShopifyAddToCartPayload\n): ShopifyMonorailEvent[] {\n const addToCartPayload = payload;\n const cartToken = parseGid(addToCartPayload.cartId);\n const cart_token = cartToken?.id ? `${cartToken.id}` : null;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_ADDED_TO_CART_EVENT_NAME,\n customerId: addToCartPayload.customerId,\n cart_token,\n total_value: addToCartPayload.totalValue,\n products: formatProductPayload(addToCartPayload.products),\n },\n formatPayload(addToCartPayload)\n )\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyAnalyticsPayload\n): ShopifyMonorailPayload {\n return {\n source: payload.shopifySalesChannel || ShopifySalesChannel.headless,\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n is_persistent_cookie: payload.hasUserConsent,\n ccpa_enforced: false,\n gdpr_enforced: false,\n unique_token: payload.uniqueToken,\n event_time: Date.now(),\n event_id: buildUUID(),\n\n event_source_url: payload.url,\n referrer: payload.referrer,\n user_agent: payload.userAgent,\n navigation_type: payload.navigationType,\n navigation_api: payload.navigationApi,\n\n shop_id: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n };\n}\n\nfunction formatProductPayload(products?: ShopifyAnalyticsProduct[]): string[] {\n return products\n ? products.map((p: ShopifyAnalyticsProduct) => {\n const product = addDataIf(\n {\n variant_gid: p.variantGid,\n category: p.category,\n sku: p.sku,\n product_id: parseInt(parseGid(p.productGid).id),\n variant_id: parseInt(parseGid(p.variantGid).id),\n },\n {\n product_gid: p.productGid,\n name: p.name,\n variant: p.variantName || '',\n brand: p.brand,\n price: p.price,\n quantity: Number(p.quantity || 0),\n }\n );\n return JSON.stringify(product);\n })\n : [];\n}\n"],"names":["schemaWrapper","addDataIf","AnalyticsPageType","parseGid","ShopifySalesChannel","buildUUID"],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ import { AnalyticsPageType, ShopifySalesChannel } from "./analytics-constants.mjs";
2
+ import { schemaWrapper, addDataIf, parseGid } from "./analytics-utils.mjs";
3
+ import { buildUUID } from "./cookies-utils.mjs";
4
+ const SCHEMA_ID = "custom_storefront_customer_tracking/1.0";
5
+ const PAGE_RENDERED_EVENT_NAME = "page_rendered";
6
+ const COLLECTION_PAGE_RENDERED_EVENT_NAME = "collection_page_rendered";
7
+ const PRODUCT_PAGE_RENDERED_EVENT_NAME = "product_page_rendered";
8
+ const PRODUCT_ADDED_TO_CART_EVENT_NAME = "product_added_to_cart";
9
+ const SEARCH_SUBMITTED_EVENT_NAME = "search_submitted";
10
+ function pageView(payload) {
11
+ const pageViewPayload = payload;
12
+ const additionalPayload = {
13
+ canonical_url: pageViewPayload.canonicalUrl || pageViewPayload.url,
14
+ customer_id: pageViewPayload.customerId
15
+ };
16
+ const pageType = pageViewPayload.pageType;
17
+ const pageViewEvents = [];
18
+ pageViewEvents.push(
19
+ schemaWrapper(
20
+ SCHEMA_ID,
21
+ addDataIf(
22
+ {
23
+ event_name: PAGE_RENDERED_EVENT_NAME,
24
+ ...additionalPayload
25
+ },
26
+ formatPayload(pageViewPayload)
27
+ )
28
+ )
29
+ );
30
+ switch (pageType) {
31
+ case AnalyticsPageType.collection:
32
+ pageViewEvents.push(
33
+ schemaWrapper(
34
+ SCHEMA_ID,
35
+ addDataIf(
36
+ {
37
+ event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,
38
+ ...additionalPayload,
39
+ collection_name: pageViewPayload.collectionHandle
40
+ },
41
+ formatPayload(pageViewPayload)
42
+ )
43
+ )
44
+ );
45
+ break;
46
+ case AnalyticsPageType.product:
47
+ pageViewEvents.push(
48
+ schemaWrapper(
49
+ SCHEMA_ID,
50
+ addDataIf(
51
+ {
52
+ event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,
53
+ ...additionalPayload,
54
+ products: formatProductPayload(pageViewPayload.products),
55
+ total_value: pageViewPayload.totalValue
56
+ },
57
+ formatPayload(pageViewPayload)
58
+ )
59
+ )
60
+ );
61
+ break;
62
+ case AnalyticsPageType.search:
63
+ pageViewEvents.push(
64
+ schemaWrapper(
65
+ SCHEMA_ID,
66
+ addDataIf(
67
+ {
68
+ event_name: SEARCH_SUBMITTED_EVENT_NAME,
69
+ ...additionalPayload,
70
+ search_string: pageViewPayload.searchString
71
+ },
72
+ formatPayload(pageViewPayload)
73
+ )
74
+ )
75
+ );
76
+ break;
77
+ }
78
+ return pageViewEvents;
79
+ }
80
+ function addToCart(payload) {
81
+ const addToCartPayload = payload;
82
+ const cartToken = parseGid(addToCartPayload.cartId);
83
+ const cart_token = (cartToken == null ? void 0 : cartToken.id) ? `${cartToken.id}` : null;
84
+ return [
85
+ schemaWrapper(
86
+ SCHEMA_ID,
87
+ addDataIf(
88
+ {
89
+ event_name: PRODUCT_ADDED_TO_CART_EVENT_NAME,
90
+ customerId: addToCartPayload.customerId,
91
+ cart_token,
92
+ total_value: addToCartPayload.totalValue,
93
+ products: formatProductPayload(addToCartPayload.products)
94
+ },
95
+ formatPayload(addToCartPayload)
96
+ )
97
+ )
98
+ ];
99
+ }
100
+ function formatPayload(payload) {
101
+ return {
102
+ source: payload.shopifySalesChannel || ShopifySalesChannel.headless,
103
+ hydrogenSubchannelId: payload.storefrontId || "0",
104
+ is_persistent_cookie: payload.hasUserConsent,
105
+ ccpa_enforced: false,
106
+ gdpr_enforced: false,
107
+ unique_token: payload.uniqueToken,
108
+ event_time: Date.now(),
109
+ event_id: buildUUID(),
110
+ event_source_url: payload.url,
111
+ referrer: payload.referrer,
112
+ user_agent: payload.userAgent,
113
+ navigation_type: payload.navigationType,
114
+ navigation_api: payload.navigationApi,
115
+ shop_id: parseInt(parseGid(payload.shopId).id),
116
+ currency: payload.currency
117
+ };
118
+ }
119
+ function formatProductPayload(products) {
120
+ return products ? products.map((p) => {
121
+ const product = addDataIf(
122
+ {
123
+ variant_gid: p.variantGid,
124
+ category: p.category,
125
+ sku: p.sku,
126
+ product_id: parseInt(parseGid(p.productGid).id),
127
+ variant_id: parseInt(parseGid(p.variantGid).id)
128
+ },
129
+ {
130
+ product_gid: p.productGid,
131
+ name: p.name,
132
+ variant: p.variantName || "",
133
+ brand: p.brand,
134
+ price: p.price,
135
+ quantity: Number(p.quantity || 0)
136
+ }
137
+ );
138
+ return JSON.stringify(product);
139
+ }) : [];
140
+ }
141
+ export {
142
+ addToCart,
143
+ pageView
144
+ };
145
+ //# sourceMappingURL=analytics-schema-custom-storefront-customer-tracking.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-schema-custom-storefront-customer-tracking.mjs","sources":["../../src/analytics-schema-custom-storefront-customer-tracking.ts"],"sourcesContent":["import {\n ShopifyAnalyticsPayload,\n ShopifyPageViewPayload,\n ShopifyAddToCartPayload,\n ShopifyMonorailPayload,\n ShopifyAnalyticsProduct,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {AnalyticsPageType, ShopifySalesChannel} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'custom_storefront_customer_tracking/1.0';\nconst PAGE_RENDERED_EVENT_NAME = 'page_rendered';\nconst COLLECTION_PAGE_RENDERED_EVENT_NAME = 'collection_page_rendered';\nconst PRODUCT_PAGE_RENDERED_EVENT_NAME = 'product_page_rendered';\nconst PRODUCT_ADDED_TO_CART_EVENT_NAME = 'product_added_to_cart';\nconst SEARCH_SUBMITTED_EVENT_NAME = 'search_submitted';\n\nexport function pageView(\n payload: ShopifyPageViewPayload\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const additionalPayload = {\n canonical_url: pageViewPayload.canonicalUrl || pageViewPayload.url,\n customer_id: pageViewPayload.customerId,\n };\n const pageType = pageViewPayload.pageType;\n const pageViewEvents = [];\n\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n },\n formatPayload(pageViewPayload)\n )\n )\n );\n\n switch (pageType) {\n case AnalyticsPageType.collection:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: COLLECTION_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n collection_name: pageViewPayload.collectionHandle,\n },\n formatPayload(pageViewPayload)\n )\n )\n );\n break;\n case AnalyticsPageType.product:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_PAGE_RENDERED_EVENT_NAME,\n ...additionalPayload,\n products: formatProductPayload(pageViewPayload.products),\n total_value: pageViewPayload.totalValue,\n },\n formatPayload(pageViewPayload)\n )\n )\n );\n break;\n case AnalyticsPageType.search:\n pageViewEvents.push(\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: SEARCH_SUBMITTED_EVENT_NAME,\n ...additionalPayload,\n search_string: pageViewPayload.searchString,\n },\n formatPayload(pageViewPayload)\n )\n )\n );\n break;\n }\n\n return pageViewEvents;\n}\n\nexport function addToCart(\n payload: ShopifyAddToCartPayload\n): ShopifyMonorailEvent[] {\n const addToCartPayload = payload;\n const cartToken = parseGid(addToCartPayload.cartId);\n const cart_token = cartToken?.id ? `${cartToken.id}` : null;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n event_name: PRODUCT_ADDED_TO_CART_EVENT_NAME,\n customerId: addToCartPayload.customerId,\n cart_token,\n total_value: addToCartPayload.totalValue,\n products: formatProductPayload(addToCartPayload.products),\n },\n formatPayload(addToCartPayload)\n )\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyAnalyticsPayload\n): ShopifyMonorailPayload {\n return {\n source: payload.shopifySalesChannel || ShopifySalesChannel.headless,\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n is_persistent_cookie: payload.hasUserConsent,\n ccpa_enforced: false,\n gdpr_enforced: false,\n unique_token: payload.uniqueToken,\n event_time: Date.now(),\n event_id: buildUUID(),\n\n event_source_url: payload.url,\n referrer: payload.referrer,\n user_agent: payload.userAgent,\n navigation_type: payload.navigationType,\n navigation_api: payload.navigationApi,\n\n shop_id: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n };\n}\n\nfunction formatProductPayload(products?: ShopifyAnalyticsProduct[]): string[] {\n return products\n ? products.map((p: ShopifyAnalyticsProduct) => {\n const product = addDataIf(\n {\n variant_gid: p.variantGid,\n category: p.category,\n sku: p.sku,\n product_id: parseInt(parseGid(p.productGid).id),\n variant_id: parseInt(parseGid(p.variantGid).id),\n },\n {\n product_gid: p.productGid,\n name: p.name,\n variant: p.variantName || '',\n brand: p.brand,\n price: p.price,\n quantity: Number(p.quantity || 0),\n }\n );\n return JSON.stringify(product);\n })\n : [];\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const analyticsConstants = require("./analytics-constants.js");
4
+ const analyticsUtils = require("./analytics-utils.js");
5
+ const cookiesUtils = require("./cookies-utils.js");
6
+ const SCHEMA_ID = "trekkie_storefront_page_view/1.4";
7
+ const OXYGEN_DOMAIN = "myshopify.dev";
8
+ function pageView(payload) {
9
+ const pageViewPayload = payload;
10
+ const { id, resource } = analyticsUtils.parseGid(pageViewPayload.resourceId);
11
+ const resourceType = resource ? resource.toLowerCase() : void 0;
12
+ return [
13
+ analyticsUtils.schemaWrapper(
14
+ SCHEMA_ID,
15
+ analyticsUtils.addDataIf(
16
+ {
17
+ pageType: pageViewPayload.pageType,
18
+ customerId: pageViewPayload.customerId,
19
+ resourceType,
20
+ resourceId: parseInt(id)
21
+ },
22
+ formatPayload(pageViewPayload)
23
+ )
24
+ )
25
+ ];
26
+ }
27
+ function formatPayload(payload) {
28
+ return {
29
+ appClientId: payload.shopifySalesChannel ? analyticsConstants.ShopifyAppId[payload.shopifySalesChannel] : analyticsConstants.ShopifyAppId.headless,
30
+ isMerchantRequest: isMerchantRequest(payload.url),
31
+ hydrogenSubchannelId: payload.storefrontId || "0",
32
+ isPersistentCookie: payload.hasUserConsent,
33
+ uniqToken: payload.uniqueToken,
34
+ visitToken: payload.visitToken,
35
+ microSessionId: cookiesUtils.buildUUID(),
36
+ microSessionCount: 1,
37
+ url: payload.url,
38
+ path: payload.path,
39
+ search: payload.search,
40
+ referrer: payload.referrer,
41
+ title: payload.title,
42
+ shopId: parseInt(analyticsUtils.parseGid(payload.shopId).id),
43
+ currency: payload.currency,
44
+ contentLanguage: payload.acceptedLanguage || "en"
45
+ };
46
+ }
47
+ function isMerchantRequest(url) {
48
+ if (typeof url !== "string") {
49
+ return false;
50
+ }
51
+ const hostname = new URL(url).hostname;
52
+ if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === "localhost") {
53
+ return true;
54
+ }
55
+ return false;
56
+ }
57
+ exports.pageView = pageView;
58
+ //# sourceMappingURL=analytics-schema-trekkie-storefront-page-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-schema-trekkie-storefront-page-view.js","sources":["../../src/analytics-schema-trekkie-storefront-page-view.ts"],"sourcesContent":["import {\n ShopifyPageViewPayload,\n ShopifyMonorailPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {ShopifyAppId} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'trekkie_storefront_page_view/1.4';\nconst OXYGEN_DOMAIN = 'myshopify.dev';\n\nexport function pageView(\n payload: ShopifyPageViewPayload\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const {id, resource} = parseGid(pageViewPayload.resourceId);\n const resourceType = resource ? resource.toLowerCase() : undefined;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n pageType: pageViewPayload.pageType,\n customerId: pageViewPayload.customerId,\n resourceType,\n resourceId: parseInt(id),\n },\n formatPayload(pageViewPayload)\n )\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyPageViewPayload\n): ShopifyMonorailPayload {\n return {\n appClientId: payload.shopifySalesChannel\n ? ShopifyAppId[payload.shopifySalesChannel]\n : ShopifyAppId.headless,\n isMerchantRequest: isMerchantRequest(payload.url),\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n isPersistentCookie: payload.hasUserConsent,\n uniqToken: payload.uniqueToken,\n visitToken: payload.visitToken,\n microSessionId: buildUUID(),\n microSessionCount: 1,\n\n url: payload.url,\n path: payload.path,\n search: payload.search,\n referrer: payload.referrer,\n title: payload.title,\n\n shopId: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n contentLanguage: payload.acceptedLanguage || 'en',\n };\n}\n\nfunction isMerchantRequest(url: string): boolean {\n if (typeof url !== 'string') {\n return false;\n }\n const hostname = new URL(url).hostname;\n if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === 'localhost') {\n return true;\n }\n return false;\n}\n"],"names":["parseGid","schemaWrapper","addDataIf","ShopifyAppId","buildUUID"],"mappings":";;;;;AASA,MAAM,YAAY;AAClB,MAAM,gBAAgB;AAEf,SAAS,SACd,SACwB;AACxB,QAAM,kBAAkB;AACxB,QAAM,EAAC,IAAI,SAAA,IAAYA,eAAAA,SAAS,gBAAgB,UAAU;AAC1D,QAAM,eAAe,WAAW,SAAS,YAAgB,IAAA;AAClD,SAAA;AAAA,IACLC,eAAA;AAAA,MACE;AAAA,MACAC,eAAA;AAAA,QACE;AAAA,UACE,UAAU,gBAAgB;AAAA,UAC1B,YAAY,gBAAgB;AAAA,UAC5B;AAAA,UACA,YAAY,SAAS,EAAE;AAAA,QACzB;AAAA,QACA,cAAc,eAAe;AAAA,MAC/B;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,cACP,SACwB;AACjB,SAAA;AAAA,IACL,aAAa,QAAQ,sBACjBC,mBAAAA,aAAa,QAAQ,mBAAmB,IACxCA,mBAAAA,aAAa;AAAA,IACjB,mBAAmB,kBAAkB,QAAQ,GAAG;AAAA,IAChD,sBAAsB,QAAQ,gBAAgB;AAAA,IAE9C,oBAAoB,QAAQ;AAAA,IAC5B,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,IACpB,gBAAgBC,aAAAA,UAAU;AAAA,IAC1B,mBAAmB;AAAA,IAEnB,KAAK,QAAQ;AAAA,IACb,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,OAAO,QAAQ;AAAA,IAEf,QAAQ,SAASJ,eAAA,SAAS,QAAQ,MAAM,EAAE,EAAE;AAAA,IAC5C,UAAU,QAAQ;AAAA,IAClB,iBAAiB,QAAQ,oBAAoB;AAAA,EAAA;AAEjD;AAEA,SAAS,kBAAkB,KAAsB;AAC3C,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EACT;AACA,QAAM,WAAW,IAAI,IAAI,GAAG,EAAE;AAC9B,MAAI,SAAS,QAAQ,aAAa,MAAM,MAAM,aAAa,aAAa;AAC/D,WAAA;AAAA,EACT;AACO,SAAA;AACT;;"}
@@ -0,0 +1,58 @@
1
+ import { ShopifyAppId } from "./analytics-constants.mjs";
2
+ import { parseGid, schemaWrapper, addDataIf } from "./analytics-utils.mjs";
3
+ import { buildUUID } from "./cookies-utils.mjs";
4
+ const SCHEMA_ID = "trekkie_storefront_page_view/1.4";
5
+ const OXYGEN_DOMAIN = "myshopify.dev";
6
+ function pageView(payload) {
7
+ const pageViewPayload = payload;
8
+ const { id, resource } = parseGid(pageViewPayload.resourceId);
9
+ const resourceType = resource ? resource.toLowerCase() : void 0;
10
+ return [
11
+ schemaWrapper(
12
+ SCHEMA_ID,
13
+ addDataIf(
14
+ {
15
+ pageType: pageViewPayload.pageType,
16
+ customerId: pageViewPayload.customerId,
17
+ resourceType,
18
+ resourceId: parseInt(id)
19
+ },
20
+ formatPayload(pageViewPayload)
21
+ )
22
+ )
23
+ ];
24
+ }
25
+ function formatPayload(payload) {
26
+ return {
27
+ appClientId: payload.shopifySalesChannel ? ShopifyAppId[payload.shopifySalesChannel] : ShopifyAppId.headless,
28
+ isMerchantRequest: isMerchantRequest(payload.url),
29
+ hydrogenSubchannelId: payload.storefrontId || "0",
30
+ isPersistentCookie: payload.hasUserConsent,
31
+ uniqToken: payload.uniqueToken,
32
+ visitToken: payload.visitToken,
33
+ microSessionId: buildUUID(),
34
+ microSessionCount: 1,
35
+ url: payload.url,
36
+ path: payload.path,
37
+ search: payload.search,
38
+ referrer: payload.referrer,
39
+ title: payload.title,
40
+ shopId: parseInt(parseGid(payload.shopId).id),
41
+ currency: payload.currency,
42
+ contentLanguage: payload.acceptedLanguage || "en"
43
+ };
44
+ }
45
+ function isMerchantRequest(url) {
46
+ if (typeof url !== "string") {
47
+ return false;
48
+ }
49
+ const hostname = new URL(url).hostname;
50
+ if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === "localhost") {
51
+ return true;
52
+ }
53
+ return false;
54
+ }
55
+ export {
56
+ pageView
57
+ };
58
+ //# sourceMappingURL=analytics-schema-trekkie-storefront-page-view.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics-schema-trekkie-storefront-page-view.mjs","sources":["../../src/analytics-schema-trekkie-storefront-page-view.ts"],"sourcesContent":["import {\n ShopifyPageViewPayload,\n ShopifyMonorailPayload,\n ShopifyMonorailEvent,\n} from './analytics-types.js';\nimport {ShopifyAppId} from './analytics-constants.js';\nimport {addDataIf, schemaWrapper, parseGid} from './analytics-utils.js';\nimport {buildUUID} from './cookies-utils.js';\n\nconst SCHEMA_ID = 'trekkie_storefront_page_view/1.4';\nconst OXYGEN_DOMAIN = 'myshopify.dev';\n\nexport function pageView(\n payload: ShopifyPageViewPayload\n): ShopifyMonorailEvent[] {\n const pageViewPayload = payload;\n const {id, resource} = parseGid(pageViewPayload.resourceId);\n const resourceType = resource ? resource.toLowerCase() : undefined;\n return [\n schemaWrapper(\n SCHEMA_ID,\n addDataIf(\n {\n pageType: pageViewPayload.pageType,\n customerId: pageViewPayload.customerId,\n resourceType,\n resourceId: parseInt(id),\n },\n formatPayload(pageViewPayload)\n )\n ),\n ];\n}\n\nfunction formatPayload(\n payload: ShopifyPageViewPayload\n): ShopifyMonorailPayload {\n return {\n appClientId: payload.shopifySalesChannel\n ? ShopifyAppId[payload.shopifySalesChannel]\n : ShopifyAppId.headless,\n isMerchantRequest: isMerchantRequest(payload.url),\n hydrogenSubchannelId: payload.storefrontId || '0',\n\n isPersistentCookie: payload.hasUserConsent,\n uniqToken: payload.uniqueToken,\n visitToken: payload.visitToken,\n microSessionId: buildUUID(),\n microSessionCount: 1,\n\n url: payload.url,\n path: payload.path,\n search: payload.search,\n referrer: payload.referrer,\n title: payload.title,\n\n shopId: parseInt(parseGid(payload.shopId).id),\n currency: payload.currency,\n contentLanguage: payload.acceptedLanguage || 'en',\n };\n}\n\nfunction isMerchantRequest(url: string): boolean {\n if (typeof url !== 'string') {\n return false;\n }\n const hostname = new URL(url).hostname;\n if (hostname.indexOf(OXYGEN_DOMAIN) !== -1 || hostname === 'localhost') {\n return true;\n }\n return false;\n}\n"],"names":[],"mappings":";;;AASA,MAAM,YAAY;AAClB,MAAM,gBAAgB;AAEf,SAAS,SACd,SACwB;AACxB,QAAM,kBAAkB;AACxB,QAAM,EAAC,IAAI,SAAA,IAAY,SAAS,gBAAgB,UAAU;AAC1D,QAAM,eAAe,WAAW,SAAS,YAAgB,IAAA;AAClD,SAAA;AAAA,IACL;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,UACE,UAAU,gBAAgB;AAAA,UAC1B,YAAY,gBAAgB;AAAA,UAC5B;AAAA,UACA,YAAY,SAAS,EAAE;AAAA,QACzB;AAAA,QACA,cAAc,eAAe;AAAA,MAC/B;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,cACP,SACwB;AACjB,SAAA;AAAA,IACL,aAAa,QAAQ,sBACjB,aAAa,QAAQ,mBAAmB,IACxC,aAAa;AAAA,IACjB,mBAAmB,kBAAkB,QAAQ,GAAG;AAAA,IAChD,sBAAsB,QAAQ,gBAAgB;AAAA,IAE9C,oBAAoB,QAAQ;AAAA,IAC5B,WAAW,QAAQ;AAAA,IACnB,YAAY,QAAQ;AAAA,IACpB,gBAAgB,UAAU;AAAA,IAC1B,mBAAmB;AAAA,IAEnB,KAAK,QAAQ;AAAA,IACb,MAAM,QAAQ;AAAA,IACd,QAAQ,QAAQ;AAAA,IAChB,UAAU,QAAQ;AAAA,IAClB,OAAO,QAAQ;AAAA,IAEf,QAAQ,SAAS,SAAS,QAAQ,MAAM,EAAE,EAAE;AAAA,IAC5C,UAAU,QAAQ;AAAA,IAClB,iBAAiB,QAAQ,oBAAoB;AAAA,EAAA;AAEjD;AAEA,SAAS,kBAAkB,KAAsB;AAC3C,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EACT;AACA,QAAM,WAAW,IAAI,IAAI,GAAG,EAAE;AAC9B,MAAI,SAAS,QAAQ,aAAa,MAAM,MAAM,aAAa,aAAa;AAC/D,WAAA;AAAA,EACT;AACO,SAAA;AACT;"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function schemaWrapper(schemaId, payload) {
4
+ return {
5
+ schema_id: schemaId,
6
+ payload,
7
+ metadata: {
8
+ event_created_at_ms: Date.now()
9
+ }
10
+ };
11
+ }
12
+ function parseGid(gid) {
13
+ const defaultReturn = { id: "", resource: null };
14
+ if (typeof gid !== "string") {
15
+ return defaultReturn;
16
+ }
17
+ const matches = gid.match(/^gid:\/\/shopify\/(\w+)\/([a-z0-9]+)/);
18
+ if (!matches || matches.length === 1) {
19
+ return defaultReturn;
20
+ }
21
+ const id = matches[2] ?? null;
22
+ const resource = matches[1] ?? null;
23
+ return { id, resource };
24
+ }
25
+ function addDataIf(keyValuePairs, formattedData) {
26
+ if (typeof keyValuePairs !== "object") {
27
+ return {};
28
+ }
29
+ Object.entries(keyValuePairs).forEach(([key, value]) => {
30
+ if (value) {
31
+ formattedData[key] = value;
32
+ }
33
+ });
34
+ return formattedData;
35
+ }
36
+ function errorIfServer(fnName) {
37
+ if (typeof document === "undefined") {
38
+ console.error(
39
+ `${fnName} should only be used within the useEffect callback or event handlers`
40
+ );
41
+ return true;
42
+ }
43
+ return false;
44
+ }
45
+ exports.addDataIf = addDataIf;
46
+ exports.errorIfServer = errorIfServer;
47
+ exports.parseGid = parseGid;
48
+ exports.schemaWrapper = schemaWrapper;
49
+ //# sourceMappingURL=analytics-utils.js.map
@@ -0,0 +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 = {id: '', resource: null};\n\n if (typeof gid !== 'string') {\n return defaultReturn;\n }\n\n // TODO: add support for parsing query parameters on complex gids\n // Reference: https://shopify.dev/api/usage/gids\n const matches = gid.match(/^gid:\\/\\/shopify\\/(\\w+)\\/([a-z0-9]+)/);\n\n if (!matches || matches.length === 1) {\n return defaultReturn;\n }\n const id = matches[2] ?? null;\n const resource = matches[1] ?? null;\n\n return {id, resource};\n}\n\n/**\n * Filters properties from an object and returns a new object with only the properties that have a truthy value.\n * @param keyValuePairs - An object of key-value pairs\n * @param formattedData - An object which will hold the truthy values\n * @returns The formatted object\n **/\nexport function addDataIf(\n keyValuePairs: ShopifyMonorailPayload,\n formattedData: ShopifyMonorailPayload\n): ShopifyMonorailPayload {\n if (typeof keyValuePairs !== 'object') {\n return {};\n }\n Object.entries(keyValuePairs).forEach(([key, value]) => {\n if (value) {\n formattedData[key] = value;\n }\n });\n return formattedData;\n}\n\n/**\n * Utility that errors if a function is called on the server.\n * @param fnName - The name of the function\n * @returns A boolean\n **/\nexport function errorIfServer(fnName: string): boolean {\n if (typeof document === 'undefined') {\n console.error(\n `${fnName} should only be used within the useEffect callback or event handlers`\n );\n return true;\n }\n return false;\n}\n"],"names":[],"mappings":";;AAYgB,SAAA,cACd,UACA,SACsB;AACf,SAAA;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB,KAAK,IAAI;AAAA,IAChC;AAAA,EAAA;AAEJ;AAgBO,SAAS,SAAS,KAAqC;AAC5D,QAAM,gBAAgB,EAAC,IAAI,IAAI,UAAU,KAAI;AAEzC,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EACT;AAIM,QAAA,UAAU,IAAI,MAAM,sCAAsC;AAEhE,MAAI,CAAC,WAAW,QAAQ,WAAW,GAAG;AAC7B,WAAA;AAAA,EACT;AACM,QAAA,KAAK,QAAQ,CAAC,KAAK;AACnB,QAAA,WAAW,QAAQ,CAAC,KAAK;AAExB,SAAA,EAAC,IAAI;AACd;AAQgB,SAAA,UACd,eACA,eACwB;AACpB,MAAA,OAAO,kBAAkB,UAAU;AACrC,WAAO;EACT;AACO,SAAA,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,QAAI,OAAO;AACT,oBAAc,GAAG,IAAI;AAAA,IACvB;AAAA,EAAA,CACD;AACM,SAAA;AACT;AAOO,SAAS,cAAc,QAAyB;AACjD,MAAA,OAAO,aAAa,aAAa;AAC3B,YAAA;AAAA,MACN,GAAG;AAAA,IAAA;AAEE,WAAA;AAAA,EACT;AACO,SAAA;AACT;;;;;"}
@@ -0,0 +1,49 @@
1
+ function schemaWrapper(schemaId, payload) {
2
+ return {
3
+ schema_id: schemaId,
4
+ payload,
5
+ metadata: {
6
+ event_created_at_ms: Date.now()
7
+ }
8
+ };
9
+ }
10
+ function parseGid(gid) {
11
+ const defaultReturn = { id: "", resource: null };
12
+ if (typeof gid !== "string") {
13
+ return defaultReturn;
14
+ }
15
+ const matches = gid.match(/^gid:\/\/shopify\/(\w+)\/([a-z0-9]+)/);
16
+ if (!matches || matches.length === 1) {
17
+ return defaultReturn;
18
+ }
19
+ const id = matches[2] ?? null;
20
+ const resource = matches[1] ?? null;
21
+ return { id, resource };
22
+ }
23
+ function addDataIf(keyValuePairs, formattedData) {
24
+ if (typeof keyValuePairs !== "object") {
25
+ return {};
26
+ }
27
+ Object.entries(keyValuePairs).forEach(([key, value]) => {
28
+ if (value) {
29
+ formattedData[key] = value;
30
+ }
31
+ });
32
+ return formattedData;
33
+ }
34
+ function errorIfServer(fnName) {
35
+ if (typeof document === "undefined") {
36
+ console.error(
37
+ `${fnName} should only be used within the useEffect callback or event handlers`
38
+ );
39
+ return true;
40
+ }
41
+ return false;
42
+ }
43
+ export {
44
+ addDataIf,
45
+ errorIfServer,
46
+ parseGid,
47
+ schemaWrapper
48
+ };
49
+ //# sourceMappingURL=analytics-utils.mjs.map
@@ -0,0 +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 = {id: '', resource: null};\n\n if (typeof gid !== 'string') {\n return defaultReturn;\n }\n\n // TODO: add support for parsing query parameters on complex gids\n // Reference: https://shopify.dev/api/usage/gids\n const matches = gid.match(/^gid:\\/\\/shopify\\/(\\w+)\\/([a-z0-9]+)/);\n\n if (!matches || matches.length === 1) {\n return defaultReturn;\n }\n const id = matches[2] ?? null;\n const resource = matches[1] ?? null;\n\n return {id, resource};\n}\n\n/**\n * Filters properties from an object and returns a new object with only the properties that have a truthy value.\n * @param keyValuePairs - An object of key-value pairs\n * @param formattedData - An object which will hold the truthy values\n * @returns The formatted object\n **/\nexport function addDataIf(\n keyValuePairs: ShopifyMonorailPayload,\n formattedData: ShopifyMonorailPayload\n): ShopifyMonorailPayload {\n if (typeof keyValuePairs !== 'object') {\n return {};\n }\n Object.entries(keyValuePairs).forEach(([key, value]) => {\n if (value) {\n formattedData[key] = value;\n }\n });\n return formattedData;\n}\n\n/**\n * Utility that errors if a function is called on the server.\n * @param fnName - The name of the function\n * @returns A boolean\n **/\nexport function errorIfServer(fnName: string): boolean {\n if (typeof document === 'undefined') {\n console.error(\n `${fnName} should only be used within the useEffect callback or event handlers`\n );\n return true;\n }\n return false;\n}\n"],"names":[],"mappings":"AAYgB,SAAA,cACd,UACA,SACsB;AACf,SAAA;AAAA,IACL,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,qBAAqB,KAAK,IAAI;AAAA,IAChC;AAAA,EAAA;AAEJ;AAgBO,SAAS,SAAS,KAAqC;AAC5D,QAAM,gBAAgB,EAAC,IAAI,IAAI,UAAU,KAAI;AAEzC,MAAA,OAAO,QAAQ,UAAU;AACpB,WAAA;AAAA,EACT;AAIM,QAAA,UAAU,IAAI,MAAM,sCAAsC;AAEhE,MAAI,CAAC,WAAW,QAAQ,WAAW,GAAG;AAC7B,WAAA;AAAA,EACT;AACM,QAAA,KAAK,QAAQ,CAAC,KAAK;AACnB,QAAA,WAAW,QAAQ,CAAC,KAAK;AAExB,SAAA,EAAC,IAAI;AACd;AAQgB,SAAA,UACd,eACA,eACwB;AACpB,MAAA,OAAO,kBAAkB,UAAU;AACrC,WAAO;EACT;AACO,SAAA,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,QAAI,OAAO;AACT,oBAAc,GAAG,IAAI;AAAA,IACvB;AAAA,EAAA,CACD;AACM,SAAA;AACT;AAOO,SAAS,cAAc,QAAyB;AACjD,MAAA,OAAO,aAAa,aAAa;AAC3B,YAAA;AAAA,MACN,GAAG;AAAA,IAAA;AAEE,WAAA;AAAA,EACT;AACO,SAAA;AACT;"}