@shopify/hydrogen 2026.4.4 → 2026.10.0-preview.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 (754) hide show
  1. package/README.md +73 -13
  2. package/bin/hydrogen.mjs +7 -0
  3. package/dist/cli/index.mjs +330 -0
  4. package/dist/client/client.d.mts +34 -0
  5. package/dist/client/client.mjs +193 -0
  6. package/dist/client/client.mjs.map +1 -0
  7. package/dist/client/errors.d.mts +48 -0
  8. package/dist/client/errors.mjs +52 -0
  9. package/dist/client/errors.mjs.map +1 -0
  10. package/dist/client/index.d.mts +4 -0
  11. package/dist/client/types.d.mts +147 -0
  12. package/dist/core/analytics/cart-tracker.d.mts +8 -0
  13. package/dist/core/analytics/cart-tracker.mjs +144 -0
  14. package/dist/core/analytics/cart-tracker.mjs.map +1 -0
  15. package/dist/core/analytics/events.d.mts +15 -0
  16. package/dist/core/analytics/events.mjs +15 -0
  17. package/dist/core/analytics/events.mjs.map +1 -0
  18. package/dist/core/analytics/index.d.mts +3 -0
  19. package/dist/core/analytics/types.d.mts +143 -0
  20. package/dist/core/analytics/utils/flatten-connection.d.mts +19 -0
  21. package/dist/core/analytics/utils/flatten-connection.mjs +25 -0
  22. package/dist/core/analytics/utils/flatten-connection.mjs.map +1 -0
  23. package/dist/core/cache/cache-status.mjs +17 -0
  24. package/dist/core/cache/cache-status.mjs.map +1 -0
  25. package/dist/core/cache/fetch-with-cache.d.mts +43 -0
  26. package/dist/core/cache/fetch-with-cache.mjs +188 -0
  27. package/dist/core/cache/fetch-with-cache.mjs.map +1 -0
  28. package/dist/core/cache/key.d.mts +6 -0
  29. package/dist/core/cache/key.mjs +27 -0
  30. package/dist/core/cache/key.mjs.map +1 -0
  31. package/dist/core/cache/run-with-cache.d.mts +36 -0
  32. package/dist/core/cache/run-with-cache.mjs +114 -0
  33. package/dist/core/cache/run-with-cache.mjs.map +1 -0
  34. package/dist/core/cache/store.d.mts +19 -0
  35. package/dist/core/cache/store.mjs +62 -0
  36. package/dist/core/cache/store.mjs.map +1 -0
  37. package/dist/core/cache/strategies.d.mts +39 -0
  38. package/dist/core/cache/strategies.mjs +70 -0
  39. package/dist/core/cache/strategies.mjs.map +1 -0
  40. package/dist/core/cart/actions.d.mts +50 -0
  41. package/dist/core/cart/actions.mjs +240 -0
  42. package/dist/core/cart/actions.mjs.map +1 -0
  43. package/dist/core/cart/attach-quantity-input.d.mts +5 -0
  44. package/dist/core/cart/attach-quantity-input.mjs +17 -0
  45. package/dist/core/cart/attach-quantity-input.mjs.map +1 -0
  46. package/dist/core/cart/buyer-identity-sync.d.mts +23 -0
  47. package/dist/core/cart/buyer-identity-sync.mjs +9 -0
  48. package/dist/core/cart/buyer-identity-sync.mjs.map +1 -0
  49. package/dist/core/cart/cart.d.mts +32 -0
  50. package/dist/core/cart/cart.mjs +1687 -0
  51. package/dist/core/cart/cart.mjs.map +1 -0
  52. package/dist/core/cart/cookie.d.mts +5 -0
  53. package/dist/core/cart/cookie.mjs +28 -0
  54. package/dist/core/cart/cookie.mjs.map +1 -0
  55. package/dist/core/cart/form.d.mts +130 -0
  56. package/dist/core/cart/form.mjs +75 -0
  57. package/dist/core/cart/form.mjs.map +1 -0
  58. package/dist/core/cart/get-cart.d.mts +25 -0
  59. package/dist/core/cart/get-cart.mjs +32 -0
  60. package/dist/core/cart/get-cart.mjs.map +1 -0
  61. package/dist/core/cart/index.d.mts +10 -0
  62. package/dist/core/cart/quantity.d.mts +10 -0
  63. package/dist/core/cart/quantity.mjs +14 -0
  64. package/dist/core/cart/quantity.mjs.map +1 -0
  65. package/dist/core/cart/queries.d.mts +4296 -0
  66. package/dist/core/cart/queries.mjs +70 -0
  67. package/dist/core/cart/queries.mjs.map +1 -0
  68. package/dist/core/cart/server-handlers.d.mts +82 -0
  69. package/dist/core/cart/server-handlers.mjs +322 -0
  70. package/dist/core/cart/server-handlers.mjs.map +1 -0
  71. package/dist/core/cart/state.d.mts +137 -0
  72. package/dist/core/cart/state.mjs +76 -0
  73. package/dist/core/cart/state.mjs.map +1 -0
  74. package/dist/core/cart/sync-quantity-inputs.mjs +16 -0
  75. package/dist/core/cart/sync-quantity-inputs.mjs.map +1 -0
  76. package/dist/core/collection/collection.d.mts +134 -0
  77. package/dist/core/collection/collection.mjs +170 -0
  78. package/dist/core/collection/collection.mjs.map +1 -0
  79. package/dist/core/collection/index.d.mts +6 -0
  80. package/dist/core/collection/reconciler.d.mts +32 -0
  81. package/dist/core/collection/reconciler.mjs +89 -0
  82. package/dist/core/collection/reconciler.mjs.map +1 -0
  83. package/dist/core/collection/state.d.mts +66 -0
  84. package/dist/core/collection/state.mjs +20 -0
  85. package/dist/core/collection/state.mjs.map +1 -0
  86. package/dist/core/collection/url.d.mts +70 -0
  87. package/dist/core/collection/url.mjs +367 -0
  88. package/dist/core/collection/url.mjs.map +1 -0
  89. package/dist/core/constants.d.mts +5 -0
  90. package/dist/core/constants.mjs +8 -0
  91. package/dist/core/constants.mjs.map +1 -0
  92. package/dist/core/headers.mjs +44 -0
  93. package/dist/core/headers.mjs.map +1 -0
  94. package/dist/core/index.d.mts +55 -0
  95. package/dist/core/index.mjs +44 -0
  96. package/dist/core/logging/logging.d.mts +21 -0
  97. package/dist/core/logging/logging.mjs +99 -0
  98. package/dist/core/logging/logging.mjs.map +1 -0
  99. package/dist/core/logging/types.d.mts +40 -0
  100. package/dist/core/logging/types.mjs +18 -0
  101. package/dist/core/logging/types.mjs.map +1 -0
  102. package/dist/core/money/cache.mjs +25 -0
  103. package/dist/core/money/cache.mjs.map +1 -0
  104. package/dist/core/money/format.d.mts +15 -0
  105. package/dist/core/money/format.mjs +243 -0
  106. package/dist/core/money/format.mjs.map +1 -0
  107. package/dist/core/money/types.d.mts +47 -0
  108. package/dist/core/observable.mjs +46 -0
  109. package/dist/core/observable.mjs.map +1 -0
  110. package/dist/core/predictive-search/constants.d.mts +5 -0
  111. package/dist/core/predictive-search/constants.mjs +6 -0
  112. package/dist/core/predictive-search/constants.mjs.map +1 -0
  113. package/dist/core/predictive-search/form.d.mts +31 -0
  114. package/dist/core/predictive-search/form.mjs +31 -0
  115. package/dist/core/predictive-search/form.mjs.map +1 -0
  116. package/dist/core/predictive-search/index.d.mts +6 -0
  117. package/dist/core/predictive-search/queries.d.mts +118 -0
  118. package/dist/core/predictive-search/queries.mjs +81 -0
  119. package/dist/core/predictive-search/queries.mjs.map +1 -0
  120. package/dist/core/predictive-search/search.d.mts +32 -0
  121. package/dist/core/predictive-search/search.mjs +74 -0
  122. package/dist/core/predictive-search/search.mjs.map +1 -0
  123. package/dist/core/predictive-search/server-handlers.d.mts +36 -0
  124. package/dist/core/predictive-search/server-handlers.mjs +113 -0
  125. package/dist/core/predictive-search/server-handlers.mjs.map +1 -0
  126. package/dist/core/predictive-search/store.d.mts +44 -0
  127. package/dist/core/predictive-search/store.mjs +224 -0
  128. package/dist/core/predictive-search/store.mjs.map +1 -0
  129. package/dist/core/predictive-search/url.d.mts +41 -0
  130. package/dist/core/predictive-search/url.mjs +71 -0
  131. package/dist/core/predictive-search/url.mjs.map +1 -0
  132. package/dist/core/product/form.d.mts +63 -0
  133. package/dist/core/product/form.mjs +44 -0
  134. package/dist/core/product/form.mjs.map +1 -0
  135. package/dist/core/product/index.d.mts +4 -0
  136. package/dist/core/product/options.d.mts +40 -0
  137. package/dist/core/product/options.mjs +291 -0
  138. package/dist/core/product/options.mjs.map +1 -0
  139. package/dist/core/product/product-form.d.mts +72 -0
  140. package/dist/core/product/product-form.mjs +158 -0
  141. package/dist/core/product/product-form.mjs.map +1 -0
  142. package/dist/core/product/state.d.mts +68 -0
  143. package/dist/core/request-context.d.mts +70 -0
  144. package/dist/core/request-context.mjs +120 -0
  145. package/dist/core/request-context.mjs.map +1 -0
  146. package/dist/core/request-routing/handle-shopify-redirects.d.mts +17 -0
  147. package/dist/core/request-routing/handle-shopify-redirects.mjs +31 -0
  148. package/dist/core/request-routing/handle-shopify-redirects.mjs.map +1 -0
  149. package/dist/core/request-routing/handle-shopify-routes.d.mts +14 -0
  150. package/dist/core/request-routing/handle-shopify-routes.mjs +42 -0
  151. package/dist/core/request-routing/handle-shopify-routes.mjs.map +1 -0
  152. package/dist/core/request-routing/interceptors/admin-redirect.mjs +12 -0
  153. package/dist/core/request-routing/interceptors/admin-redirect.mjs.map +1 -0
  154. package/dist/core/request-routing/interceptors/agent-proxy.mjs +19 -0
  155. package/dist/core/request-routing/interceptors/agent-proxy.mjs.map +1 -0
  156. package/dist/core/request-routing/interceptors/ajax-api.mjs +16 -0
  157. package/dist/core/request-routing/interceptors/ajax-api.mjs.map +1 -0
  158. package/dist/core/request-routing/interceptors/api-proxy.mjs +20 -0
  159. package/dist/core/request-routing/interceptors/api-proxy.mjs.map +1 -0
  160. package/dist/core/request-routing/interceptors/checkout.mjs +58 -0
  161. package/dist/core/request-routing/interceptors/checkout.mjs.map +1 -0
  162. package/dist/core/request-routing/interceptors/mcp-proxy.mjs +23 -0
  163. package/dist/core/request-routing/interceptors/mcp-proxy.mjs.map +1 -0
  164. package/dist/core/request-routing/interceptors/proxy.mjs +68 -0
  165. package/dist/core/request-routing/interceptors/proxy.mjs.map +1 -0
  166. package/dist/core/request-routing/interceptors/query-param-redirect.mjs +22 -0
  167. package/dist/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -0
  168. package/dist/core/request-routing/interceptors/sfapi-proxy.mjs +27 -0
  169. package/dist/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -0
  170. package/dist/core/request-routing/interceptors/standard-routes.mjs +19 -0
  171. package/dist/core/request-routing/interceptors/standard-routes.mjs.map +1 -0
  172. package/dist/core/request-routing/interceptors/url-redirects.mjs +27 -0
  173. package/dist/core/request-routing/interceptors/url-redirects.mjs.map +1 -0
  174. package/dist/core/request-routing/interceptors/well-known.mjs +19 -0
  175. package/dist/core/request-routing/interceptors/well-known.mjs.map +1 -0
  176. package/dist/core/request-routing/registered-routes.d.mts +7 -0
  177. package/dist/core/request-routing/registered-routes.mjs +59 -0
  178. package/dist/core/request-routing/registered-routes.mjs.map +1 -0
  179. package/dist/core/request-routing/route-types.d.mts +51 -0
  180. package/dist/core/request-routing/safe-apply-response-headers.mjs +16 -0
  181. package/dist/core/request-routing/safe-apply-response-headers.mjs.map +1 -0
  182. package/dist/core/shop-pay/shop-pay.d.mts +102 -0
  183. package/dist/core/shop-pay/shop-pay.mjs +289 -0
  184. package/dist/core/shop-pay/shop-pay.mjs.map +1 -0
  185. package/dist/core/shopify-scripts/analytics.mjs +26 -0
  186. package/dist/core/shopify-scripts/analytics.mjs.map +1 -0
  187. package/dist/core/shopify-scripts/consent.mjs +17 -0
  188. package/dist/core/shopify-scripts/consent.mjs.map +1 -0
  189. package/dist/core/shopify-scripts/constants.mjs +19 -0
  190. package/dist/core/shopify-scripts/constants.mjs.map +1 -0
  191. package/dist/core/shopify-scripts/deprecated-cookies.mjs +97 -0
  192. package/dist/core/shopify-scripts/deprecated-cookies.mjs.map +1 -0
  193. package/dist/core/shopify-scripts/global.d.mts +1 -0
  194. package/dist/core/shopify-scripts/global.mjs +86 -0
  195. package/dist/core/shopify-scripts/global.mjs.map +1 -0
  196. package/dist/core/shopify-scripts/index.d.mts +27 -0
  197. package/dist/core/shopify-scripts/index.mjs +135 -0
  198. package/dist/core/shopify-scripts/index.mjs.map +1 -0
  199. package/dist/core/shopify-scripts/initialize.d.mts +18 -0
  200. package/dist/core/shopify-scripts/initialize.mjs +27 -0
  201. package/dist/core/shopify-scripts/initialize.mjs.map +1 -0
  202. package/dist/core/shopify-scripts/page-view.mjs +49 -0
  203. package/dist/core/shopify-scripts/page-view.mjs.map +1 -0
  204. package/dist/core/shopify-scripts/perfkit.mjs +33 -0
  205. package/dist/core/shopify-scripts/perfkit.mjs.map +1 -0
  206. package/dist/core/shopify-scripts/render.d.mts +1 -0
  207. package/dist/core/shopify-scripts/render.mjs +23 -0
  208. package/dist/core/shopify-scripts/render.mjs.map +1 -0
  209. package/dist/core/shopify-scripts/types.d.mts +76 -0
  210. package/dist/core/shopify-scripts/utils/cookie-domain.mjs +43 -0
  211. package/dist/core/shopify-scripts/utils/cookie-domain.mjs.map +1 -0
  212. package/dist/core/shopify-scripts/utils/inline-script.mjs +8 -0
  213. package/dist/core/shopify-scripts/utils/inline-script.mjs.map +1 -0
  214. package/dist/core/shopify-scripts/utils/navigation.mjs +46 -0
  215. package/dist/core/shopify-scripts/utils/navigation.mjs.map +1 -0
  216. package/dist/core/shopify-scripts/utils/tracking-values.mjs +65 -0
  217. package/dist/core/shopify-scripts/utils/tracking-values.mjs.map +1 -0
  218. package/dist/core/shopify-scripts/utils/uuid.mjs +17 -0
  219. package/dist/core/shopify-scripts/utils/uuid.mjs.map +1 -0
  220. package/dist/core/shopify-scripts/webmcp.mjs +22 -0
  221. package/dist/core/shopify-scripts/webmcp.mjs.map +1 -0
  222. package/dist/core/standard-routes/build.d.mts +34 -0
  223. package/dist/core/standard-routes/build.mjs +54 -0
  224. package/dist/core/standard-routes/build.mjs.map +1 -0
  225. package/dist/core/standard-routes/defaults.mjs +31 -0
  226. package/dist/core/standard-routes/defaults.mjs.map +1 -0
  227. package/dist/core/standard-routes/match.mjs +108 -0
  228. package/dist/core/standard-routes/match.mjs.map +1 -0
  229. package/dist/core/standard-routes/path.mjs +58 -0
  230. package/dist/core/standard-routes/path.mjs.map +1 -0
  231. package/dist/core/standard-routes/redirects.mjs +51 -0
  232. package/dist/core/standard-routes/redirects.mjs.map +1 -0
  233. package/dist/core/standard-routes/types.d.mts +95 -0
  234. package/dist/core/url.mjs +35 -0
  235. package/dist/core/url.mjs.map +1 -0
  236. package/dist/core/utils/load-script.mjs +34 -0
  237. package/dist/core/utils/load-script.mjs.map +1 -0
  238. package/dist/core/utils/parse-gid.mjs +33 -0
  239. package/dist/core/utils/parse-gid.mjs.map +1 -0
  240. package/dist/core/utils/record.mjs +8 -0
  241. package/dist/core/utils/record.mjs.map +1 -0
  242. package/dist/customer-account/client.d.mts +50 -0
  243. package/dist/customer-account/client.mjs +239 -0
  244. package/dist/customer-account/client.mjs.map +1 -0
  245. package/dist/customer-account/errors.d.mts +28 -0
  246. package/dist/customer-account/errors.mjs +39 -0
  247. package/dist/customer-account/errors.mjs.map +1 -0
  248. package/dist/customer-account/graphql.d.mts +29 -0
  249. package/dist/customer-account/graphql.mjs +39 -0
  250. package/dist/customer-account/graphql.mjs.map +1 -0
  251. package/dist/customer-account/index.d.mts +7 -0
  252. package/dist/customer-account/index.mjs +7 -0
  253. package/dist/customer-account/session.d.mts +117 -0
  254. package/dist/customer-account/session.mjs +733 -0
  255. package/dist/customer-account/session.mjs.map +1 -0
  256. package/dist/customer-account/type-resolver.d.mts +11 -0
  257. package/dist/customer-account-api-types.d.ts +3269 -3270
  258. package/dist/customer-account.schema.json +50753 -1
  259. package/dist/development/_virtual/_@oxc-project_runtime@0.127.0/helpers/taggedTemplateLiteral.mjs +7 -0
  260. package/dist/development/client/client.d.mts +34 -0
  261. package/dist/development/client/client.mjs +193 -0
  262. package/dist/development/client/client.mjs.map +1 -0
  263. package/dist/development/client/errors.d.mts +48 -0
  264. package/dist/development/client/errors.mjs +57 -0
  265. package/dist/development/client/errors.mjs.map +1 -0
  266. package/dist/development/client/index.d.mts +4 -0
  267. package/dist/development/client/types.d.mts +147 -0
  268. package/dist/development/core/analytics/cart-tracker.d.mts +8 -0
  269. package/dist/development/core/analytics/cart-tracker.mjs +144 -0
  270. package/dist/development/core/analytics/cart-tracker.mjs.map +1 -0
  271. package/dist/development/core/analytics/events.d.mts +15 -0
  272. package/dist/development/core/analytics/events.mjs +15 -0
  273. package/dist/development/core/analytics/events.mjs.map +1 -0
  274. package/dist/development/core/analytics/index.d.mts +3 -0
  275. package/dist/development/core/analytics/types.d.mts +143 -0
  276. package/dist/development/core/analytics/utils/flatten-connection.d.mts +19 -0
  277. package/dist/development/core/analytics/utils/flatten-connection.mjs +25 -0
  278. package/dist/development/core/analytics/utils/flatten-connection.mjs.map +1 -0
  279. package/dist/development/core/cache/cache-status.mjs +17 -0
  280. package/dist/development/core/cache/cache-status.mjs.map +1 -0
  281. package/dist/development/core/cache/fetch-with-cache.d.mts +43 -0
  282. package/dist/development/core/cache/fetch-with-cache.mjs +188 -0
  283. package/dist/development/core/cache/fetch-with-cache.mjs.map +1 -0
  284. package/dist/development/core/cache/key.d.mts +6 -0
  285. package/dist/development/core/cache/key.mjs +27 -0
  286. package/dist/development/core/cache/key.mjs.map +1 -0
  287. package/dist/development/core/cache/run-with-cache.d.mts +36 -0
  288. package/dist/development/core/cache/run-with-cache.mjs +114 -0
  289. package/dist/development/core/cache/run-with-cache.mjs.map +1 -0
  290. package/dist/development/core/cache/store.d.mts +19 -0
  291. package/dist/development/core/cache/store.mjs +62 -0
  292. package/dist/development/core/cache/store.mjs.map +1 -0
  293. package/dist/development/core/cache/strategies.d.mts +39 -0
  294. package/dist/development/core/cache/strategies.mjs +70 -0
  295. package/dist/development/core/cache/strategies.mjs.map +1 -0
  296. package/dist/development/core/cart/actions.d.mts +50 -0
  297. package/dist/development/core/cart/actions.mjs +240 -0
  298. package/dist/development/core/cart/actions.mjs.map +1 -0
  299. package/dist/development/core/cart/attach-quantity-input.d.mts +5 -0
  300. package/dist/development/core/cart/attach-quantity-input.mjs +17 -0
  301. package/dist/development/core/cart/attach-quantity-input.mjs.map +1 -0
  302. package/dist/development/core/cart/buyer-identity-sync.d.mts +19 -0
  303. package/dist/development/core/cart/buyer-identity-sync.mjs +6 -0
  304. package/dist/development/core/cart/buyer-identity-sync.mjs.map +1 -0
  305. package/dist/development/core/cart/cart.d.mts +32 -0
  306. package/dist/development/core/cart/cart.mjs +1687 -0
  307. package/dist/development/core/cart/cart.mjs.map +1 -0
  308. package/dist/development/core/cart/cookie.d.mts +5 -0
  309. package/dist/development/core/cart/cookie.mjs +28 -0
  310. package/dist/development/core/cart/cookie.mjs.map +1 -0
  311. package/dist/development/core/cart/form.d.mts +130 -0
  312. package/dist/development/core/cart/form.mjs +75 -0
  313. package/dist/development/core/cart/form.mjs.map +1 -0
  314. package/dist/development/core/cart/get-cart.d.mts +25 -0
  315. package/dist/development/core/cart/get-cart.mjs +32 -0
  316. package/dist/development/core/cart/get-cart.mjs.map +1 -0
  317. package/dist/development/core/cart/index.d.mts +10 -0
  318. package/dist/development/core/cart/quantity.d.mts +10 -0
  319. package/dist/development/core/cart/quantity.mjs +14 -0
  320. package/dist/development/core/cart/quantity.mjs.map +1 -0
  321. package/dist/development/core/cart/queries.d.mts +4296 -0
  322. package/dist/development/core/cart/queries.mjs +70 -0
  323. package/dist/development/core/cart/queries.mjs.map +1 -0
  324. package/dist/development/core/cart/server-handlers.d.mts +82 -0
  325. package/dist/development/core/cart/server-handlers.mjs +322 -0
  326. package/dist/development/core/cart/server-handlers.mjs.map +1 -0
  327. package/dist/development/core/cart/state.d.mts +137 -0
  328. package/dist/development/core/cart/state.mjs +76 -0
  329. package/dist/development/core/cart/state.mjs.map +1 -0
  330. package/dist/development/core/cart/sync-quantity-inputs.mjs +16 -0
  331. package/dist/development/core/cart/sync-quantity-inputs.mjs.map +1 -0
  332. package/dist/development/core/collection/collection.d.mts +134 -0
  333. package/dist/development/core/collection/collection.mjs +170 -0
  334. package/dist/development/core/collection/collection.mjs.map +1 -0
  335. package/dist/development/core/collection/index.d.mts +6 -0
  336. package/dist/development/core/collection/reconciler.d.mts +32 -0
  337. package/dist/development/core/collection/reconciler.mjs +89 -0
  338. package/dist/development/core/collection/reconciler.mjs.map +1 -0
  339. package/dist/development/core/collection/state.d.mts +66 -0
  340. package/dist/development/core/collection/state.mjs +20 -0
  341. package/dist/development/core/collection/state.mjs.map +1 -0
  342. package/dist/development/core/collection/url.d.mts +70 -0
  343. package/dist/development/core/collection/url.mjs +367 -0
  344. package/dist/development/core/collection/url.mjs.map +1 -0
  345. package/dist/development/core/constants.mjs +7 -0
  346. package/dist/development/core/constants.mjs.map +1 -0
  347. package/dist/development/core/development.d.mts +55 -0
  348. package/dist/development/core/development.mjs +44 -0
  349. package/dist/development/core/headers.mjs +44 -0
  350. package/dist/development/core/headers.mjs.map +1 -0
  351. package/dist/development/core/index.d.mts +53 -0
  352. package/dist/development/core/logging/logging.d.mts +21 -0
  353. package/dist/development/core/logging/logging.mjs +99 -0
  354. package/dist/development/core/logging/logging.mjs.map +1 -0
  355. package/dist/development/core/logging/types.d.mts +40 -0
  356. package/dist/development/core/logging/types.mjs +18 -0
  357. package/dist/development/core/logging/types.mjs.map +1 -0
  358. package/dist/development/core/money/cache.mjs +25 -0
  359. package/dist/development/core/money/cache.mjs.map +1 -0
  360. package/dist/development/core/money/format.d.mts +15 -0
  361. package/dist/development/core/money/format.mjs +243 -0
  362. package/dist/development/core/money/format.mjs.map +1 -0
  363. package/dist/development/core/money/types.d.mts +47 -0
  364. package/dist/development/core/observable.mjs +46 -0
  365. package/dist/development/core/observable.mjs.map +1 -0
  366. package/dist/development/core/predictive-search/constants.d.mts +5 -0
  367. package/dist/development/core/predictive-search/constants.mjs +6 -0
  368. package/dist/development/core/predictive-search/constants.mjs.map +1 -0
  369. package/dist/development/core/predictive-search/form.d.mts +31 -0
  370. package/dist/development/core/predictive-search/form.mjs +31 -0
  371. package/dist/development/core/predictive-search/form.mjs.map +1 -0
  372. package/dist/development/core/predictive-search/index.d.mts +6 -0
  373. package/dist/development/core/predictive-search/queries.d.mts +118 -0
  374. package/dist/development/core/predictive-search/queries.mjs +81 -0
  375. package/dist/development/core/predictive-search/queries.mjs.map +1 -0
  376. package/dist/development/core/predictive-search/search.d.mts +32 -0
  377. package/dist/development/core/predictive-search/search.mjs +74 -0
  378. package/dist/development/core/predictive-search/search.mjs.map +1 -0
  379. package/dist/development/core/predictive-search/server-handlers.d.mts +36 -0
  380. package/dist/development/core/predictive-search/server-handlers.mjs +113 -0
  381. package/dist/development/core/predictive-search/server-handlers.mjs.map +1 -0
  382. package/dist/development/core/predictive-search/store.d.mts +44 -0
  383. package/dist/development/core/predictive-search/store.mjs +224 -0
  384. package/dist/development/core/predictive-search/store.mjs.map +1 -0
  385. package/dist/development/core/predictive-search/url.d.mts +41 -0
  386. package/dist/development/core/predictive-search/url.mjs +71 -0
  387. package/dist/development/core/predictive-search/url.mjs.map +1 -0
  388. package/dist/development/core/product/form.d.mts +63 -0
  389. package/dist/development/core/product/form.mjs +44 -0
  390. package/dist/development/core/product/form.mjs.map +1 -0
  391. package/dist/development/core/product/index.d.mts +4 -0
  392. package/dist/development/core/product/options.d.mts +40 -0
  393. package/dist/development/core/product/options.mjs +291 -0
  394. package/dist/development/core/product/options.mjs.map +1 -0
  395. package/dist/development/core/product/product-form.d.mts +72 -0
  396. package/dist/development/core/product/product-form.mjs +158 -0
  397. package/dist/development/core/product/product-form.mjs.map +1 -0
  398. package/dist/development/core/product/state.d.mts +68 -0
  399. package/dist/development/core/request-context.d.mts +70 -0
  400. package/dist/development/core/request-context.mjs +120 -0
  401. package/dist/development/core/request-context.mjs.map +1 -0
  402. package/dist/development/core/request-routing/handle-shopify-redirects.d.mts +17 -0
  403. package/dist/development/core/request-routing/handle-shopify-redirects.mjs +31 -0
  404. package/dist/development/core/request-routing/handle-shopify-redirects.mjs.map +1 -0
  405. package/dist/development/core/request-routing/handle-shopify-routes.d.mts +1 -0
  406. package/dist/development/core/request-routing/handle-shopify-routes.development.d.mts +11 -0
  407. package/dist/development/core/request-routing/handle-shopify-routes.development.mjs +16 -0
  408. package/dist/development/core/request-routing/handle-shopify-routes.development.mjs.map +1 -0
  409. package/dist/development/core/request-routing/handle-shopify-routes.mjs +42 -0
  410. package/dist/development/core/request-routing/handle-shopify-routes.mjs.map +1 -0
  411. package/dist/development/core/request-routing/interceptors/admin-redirect.mjs +12 -0
  412. package/dist/development/core/request-routing/interceptors/admin-redirect.mjs.map +1 -0
  413. package/dist/development/core/request-routing/interceptors/agent-proxy.mjs +19 -0
  414. package/dist/development/core/request-routing/interceptors/agent-proxy.mjs.map +1 -0
  415. package/dist/development/core/request-routing/interceptors/ajax-api.mjs +16 -0
  416. package/dist/development/core/request-routing/interceptors/ajax-api.mjs.map +1 -0
  417. package/dist/development/core/request-routing/interceptors/api-proxy.mjs +20 -0
  418. package/dist/development/core/request-routing/interceptors/api-proxy.mjs.map +1 -0
  419. package/dist/development/core/request-routing/interceptors/checkout.mjs +58 -0
  420. package/dist/development/core/request-routing/interceptors/checkout.mjs.map +1 -0
  421. package/dist/development/core/request-routing/interceptors/graphiql.mjs +46 -0
  422. package/dist/development/core/request-routing/interceptors/graphiql.mjs.map +1 -0
  423. package/dist/development/core/request-routing/interceptors/mcp-proxy.mjs +23 -0
  424. package/dist/development/core/request-routing/interceptors/mcp-proxy.mjs.map +1 -0
  425. package/dist/development/core/request-routing/interceptors/proxy.mjs +68 -0
  426. package/dist/development/core/request-routing/interceptors/proxy.mjs.map +1 -0
  427. package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs +22 -0
  428. package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -0
  429. package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs +27 -0
  430. package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -0
  431. package/dist/development/core/request-routing/interceptors/standard-routes.mjs +19 -0
  432. package/dist/development/core/request-routing/interceptors/standard-routes.mjs.map +1 -0
  433. package/dist/development/core/request-routing/interceptors/url-redirects.mjs +27 -0
  434. package/dist/development/core/request-routing/interceptors/url-redirects.mjs.map +1 -0
  435. package/dist/development/core/request-routing/interceptors/well-known.mjs +19 -0
  436. package/dist/development/core/request-routing/interceptors/well-known.mjs.map +1 -0
  437. package/dist/development/core/request-routing/registered-routes.d.mts +7 -0
  438. package/dist/development/core/request-routing/registered-routes.mjs +59 -0
  439. package/dist/development/core/request-routing/registered-routes.mjs.map +1 -0
  440. package/dist/development/core/request-routing/route-types.d.mts +51 -0
  441. package/dist/development/core/request-routing/safe-apply-response-headers.mjs +16 -0
  442. package/dist/development/core/request-routing/safe-apply-response-headers.mjs.map +1 -0
  443. package/dist/development/core/shop-pay/shop-pay.d.mts +102 -0
  444. package/dist/development/core/shop-pay/shop-pay.mjs +289 -0
  445. package/dist/development/core/shop-pay/shop-pay.mjs.map +1 -0
  446. package/dist/development/core/shopify-scripts/analytics.mjs +26 -0
  447. package/dist/development/core/shopify-scripts/analytics.mjs.map +1 -0
  448. package/dist/development/core/shopify-scripts/consent.mjs +17 -0
  449. package/dist/development/core/shopify-scripts/consent.mjs.map +1 -0
  450. package/dist/development/core/shopify-scripts/constants.mjs +19 -0
  451. package/dist/development/core/shopify-scripts/constants.mjs.map +1 -0
  452. package/dist/development/core/shopify-scripts/deprecated-cookies.mjs +97 -0
  453. package/dist/development/core/shopify-scripts/deprecated-cookies.mjs.map +1 -0
  454. package/dist/development/core/shopify-scripts/global.d.mts +1 -0
  455. package/dist/development/core/shopify-scripts/global.mjs +86 -0
  456. package/dist/development/core/shopify-scripts/global.mjs.map +1 -0
  457. package/dist/development/core/shopify-scripts/index.d.mts +27 -0
  458. package/dist/development/core/shopify-scripts/index.mjs +145 -0
  459. package/dist/development/core/shopify-scripts/index.mjs.map +1 -0
  460. package/dist/development/core/shopify-scripts/initialize.d.mts +18 -0
  461. package/dist/development/core/shopify-scripts/initialize.mjs +27 -0
  462. package/dist/development/core/shopify-scripts/initialize.mjs.map +1 -0
  463. package/dist/development/core/shopify-scripts/page-view.mjs +49 -0
  464. package/dist/development/core/shopify-scripts/page-view.mjs.map +1 -0
  465. package/dist/development/core/shopify-scripts/perfkit.mjs +33 -0
  466. package/dist/development/core/shopify-scripts/perfkit.mjs.map +1 -0
  467. package/dist/development/core/shopify-scripts/render.d.mts +1 -0
  468. package/dist/development/core/shopify-scripts/render.mjs +23 -0
  469. package/dist/development/core/shopify-scripts/render.mjs.map +1 -0
  470. package/dist/development/core/shopify-scripts/types.d.mts +76 -0
  471. package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs +43 -0
  472. package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs.map +1 -0
  473. package/dist/development/core/shopify-scripts/utils/inline-script.mjs +8 -0
  474. package/dist/development/core/shopify-scripts/utils/inline-script.mjs.map +1 -0
  475. package/dist/development/core/shopify-scripts/utils/navigation.mjs +46 -0
  476. package/dist/development/core/shopify-scripts/utils/navigation.mjs.map +1 -0
  477. package/dist/development/core/shopify-scripts/utils/tracking-values.mjs +65 -0
  478. package/dist/development/core/shopify-scripts/utils/tracking-values.mjs.map +1 -0
  479. package/dist/development/core/shopify-scripts/utils/uuid.mjs +17 -0
  480. package/dist/development/core/shopify-scripts/utils/uuid.mjs.map +1 -0
  481. package/dist/development/core/shopify-scripts/webmcp.mjs +22 -0
  482. package/dist/development/core/shopify-scripts/webmcp.mjs.map +1 -0
  483. package/dist/development/core/standard-routes/build.d.mts +34 -0
  484. package/dist/development/core/standard-routes/build.mjs +54 -0
  485. package/dist/development/core/standard-routes/build.mjs.map +1 -0
  486. package/dist/development/core/standard-routes/defaults.mjs +31 -0
  487. package/dist/development/core/standard-routes/defaults.mjs.map +1 -0
  488. package/dist/development/core/standard-routes/match.mjs +108 -0
  489. package/dist/development/core/standard-routes/match.mjs.map +1 -0
  490. package/dist/development/core/standard-routes/path.mjs +58 -0
  491. package/dist/development/core/standard-routes/path.mjs.map +1 -0
  492. package/dist/development/core/standard-routes/redirects.mjs +51 -0
  493. package/dist/development/core/standard-routes/redirects.mjs.map +1 -0
  494. package/dist/development/core/standard-routes/types.d.mts +95 -0
  495. package/dist/development/core/types.d.mts +11 -0
  496. package/dist/development/core/url.mjs +35 -0
  497. package/dist/development/core/url.mjs.map +1 -0
  498. package/dist/development/core/utils/load-script.mjs +34 -0
  499. package/dist/development/core/utils/load-script.mjs.map +1 -0
  500. package/dist/development/core/utils/parse-gid.mjs +33 -0
  501. package/dist/development/core/utils/parse-gid.mjs.map +1 -0
  502. package/dist/development/customer-account/session.d.mts +46 -0
  503. package/dist/development/customer-account/session.mjs +21 -0
  504. package/dist/development/customer-account/session.mjs.map +1 -0
  505. package/dist/development/globals.d.mts +64 -0
  506. package/dist/development/graphql/generated/customer-account-api-types.d.mts +13 -0
  507. package/dist/development/graphql/generated/graphql-env.d.mts +19280 -0
  508. package/dist/development/graphql/generated/storefront-api-types.d.mts +47 -0
  509. package/dist/development/graphql/graphql.d.mts +40 -0
  510. package/dist/development/graphql/graphql.mjs +16 -0
  511. package/dist/development/graphql/graphql.mjs.map +1 -0
  512. package/dist/development/graphql/index.d.mts +2 -0
  513. package/dist/development/graphql/scalars.d.mts +15 -0
  514. package/dist/development/graphql/type-resolver.d.mts +229 -0
  515. package/dist/development/react/cart.d.mts +40 -0
  516. package/dist/development/react/cart.mjs +150 -0
  517. package/dist/development/react/cart.mjs.map +1 -0
  518. package/dist/development/react/collection.d.mts +91 -0
  519. package/dist/development/react/collection.mjs +129 -0
  520. package/dist/development/react/collection.mjs.map +1 -0
  521. package/dist/development/react/index.d.mts +13 -0
  522. package/dist/development/react/index.mjs +10 -0
  523. package/dist/development/react/predictive-search.d.mts +49 -0
  524. package/dist/development/react/predictive-search.mjs +133 -0
  525. package/dist/development/react/predictive-search.mjs.map +1 -0
  526. package/dist/development/react/product.d.mts +72 -0
  527. package/dist/development/react/product.mjs +127 -0
  528. package/dist/development/react/product.mjs.map +1 -0
  529. package/dist/development/react/shop-pay.d.mts +9 -0
  530. package/dist/development/react/shop-pay.mjs +16 -0
  531. package/dist/development/react/shop-pay.mjs.map +1 -0
  532. package/dist/development/react/shopify-scripts.d.mts +20 -0
  533. package/dist/development/react/shopify-scripts.mjs +39 -0
  534. package/dist/development/react/shopify-scripts.mjs.map +1 -0
  535. package/dist/development/vendor/standard-actions.d.mts +134 -0
  536. package/dist/development/vendor/standard-events.d.mts +1107 -0
  537. package/dist/development/vue/cart.d.mts +42 -0
  538. package/dist/development/vue/cart.mjs +118 -0
  539. package/dist/development/vue/cart.mjs.map +1 -0
  540. package/dist/development/vue/collection.d.mts +46 -0
  541. package/dist/development/vue/collection.mjs +108 -0
  542. package/dist/development/vue/collection.mjs.map +1 -0
  543. package/dist/development/vue/index.d.mts +11 -0
  544. package/dist/development/vue/index.mjs +8 -0
  545. package/dist/development/vue/predictive-search.d.mts +124 -0
  546. package/dist/development/vue/predictive-search.mjs +171 -0
  547. package/dist/development/vue/predictive-search.mjs.map +1 -0
  548. package/dist/development/vue/product.d.mts +57 -0
  549. package/dist/development/vue/product.mjs +167 -0
  550. package/dist/development/vue/product.mjs.map +1 -0
  551. package/dist/development/vue/shop-pay.d.mts +25 -0
  552. package/dist/development/vue/shop-pay.mjs +35 -0
  553. package/dist/development/vue/shop-pay.mjs.map +1 -0
  554. package/dist/development/vue/shopify-scripts.d.mts +127 -0
  555. package/dist/development/vue/shopify-scripts.mjs +79 -0
  556. package/dist/development/vue/shopify-scripts.mjs.map +1 -0
  557. package/dist/globals.d.mts +64 -0
  558. package/dist/graphql/generated/customer-account-api-types.d.mts +13 -0
  559. package/dist/graphql/generated/customer-account-graphql-env.d.mts +22170 -0
  560. package/dist/graphql/generated/graphql-env.d.mts +19280 -0
  561. package/dist/graphql/generated/storefront-api-types.d.mts +47 -0
  562. package/dist/graphql/graphql.d.mts +40 -0
  563. package/dist/graphql/graphql.mjs +16 -0
  564. package/dist/graphql/graphql.mjs.map +1 -0
  565. package/dist/graphql/index.d.mts +2 -0
  566. package/dist/graphql/scalars.d.mts +26 -0
  567. package/dist/graphql/type-resolver.d.mts +229 -0
  568. package/dist/react/cart.d.mts +40 -0
  569. package/dist/react/cart.mjs +150 -0
  570. package/dist/react/cart.mjs.map +1 -0
  571. package/dist/react/collection.d.mts +91 -0
  572. package/dist/react/collection.mjs +129 -0
  573. package/dist/react/collection.mjs.map +1 -0
  574. package/dist/react/index.d.mts +13 -0
  575. package/dist/react/index.mjs +10 -0
  576. package/dist/react/predictive-search.d.mts +49 -0
  577. package/dist/react/predictive-search.mjs +133 -0
  578. package/dist/react/predictive-search.mjs.map +1 -0
  579. package/dist/react/product.d.mts +72 -0
  580. package/dist/react/product.mjs +127 -0
  581. package/dist/react/product.mjs.map +1 -0
  582. package/dist/react/shop-pay.d.mts +9 -0
  583. package/dist/react/shop-pay.mjs +16 -0
  584. package/dist/react/shop-pay.mjs.map +1 -0
  585. package/dist/react/shopify-scripts.d.mts +20 -0
  586. package/dist/react/shopify-scripts.mjs +39 -0
  587. package/dist/react/shopify-scripts.mjs.map +1 -0
  588. package/dist/storefront-api-types.d.ts +2351 -2390
  589. package/dist/storefront.schema.json +41534 -1
  590. package/dist/ts-plugin/index.cjs +68 -0
  591. package/dist/ts-plugin/index.cjs.map +1 -0
  592. package/dist/ts-plugin/index.d.cts +4 -0
  593. package/dist/vendor/standard-actions.d.mts +134 -0
  594. package/dist/vendor/standard-events.d.mts +1107 -0
  595. package/dist/vite/index.d.mts +2 -0
  596. package/dist/vite/index.mjs +3 -0
  597. package/dist/vite/local-https.d.mts +35 -0
  598. package/dist/vite/local-https.mjs +202 -0
  599. package/dist/vite/local-https.mjs.map +1 -0
  600. package/dist/vue/cart.d.mts +42 -0
  601. package/dist/vue/cart.mjs +118 -0
  602. package/dist/vue/cart.mjs.map +1 -0
  603. package/dist/vue/collection.d.mts +46 -0
  604. package/dist/vue/collection.mjs +108 -0
  605. package/dist/vue/collection.mjs.map +1 -0
  606. package/dist/vue/index.d.mts +11 -0
  607. package/dist/vue/index.mjs +8 -0
  608. package/dist/vue/predictive-search.d.mts +124 -0
  609. package/dist/vue/predictive-search.mjs +171 -0
  610. package/dist/vue/predictive-search.mjs.map +1 -0
  611. package/dist/vue/product.d.mts +57 -0
  612. package/dist/vue/product.mjs +167 -0
  613. package/dist/vue/product.mjs.map +1 -0
  614. package/dist/vue/shop-pay.d.mts +25 -0
  615. package/dist/vue/shop-pay.mjs +35 -0
  616. package/dist/vue/shop-pay.mjs.map +1 -0
  617. package/dist/vue/shopify-scripts.d.mts +127 -0
  618. package/dist/vue/shopify-scripts.mjs +79 -0
  619. package/dist/vue/shopify-scripts.mjs.map +1 -0
  620. package/package.json +116 -86
  621. package/skills/hydrogen-analytics/SKILL.md +80 -0
  622. package/skills/hydrogen-analytics/references/react.md +160 -0
  623. package/skills/hydrogen-analytics/references/vue.md +80 -0
  624. package/skills/hydrogen-cart-drawer/SKILL.md +248 -0
  625. package/skills/hydrogen-cart-drawer/references/accessibility.md +109 -0
  626. package/skills/hydrogen-cart-drawer/references/css.md +67 -0
  627. package/skills/hydrogen-cart-ui/SKILL.md +218 -0
  628. package/skills/hydrogen-cart-ui/references/nextjs.md +89 -0
  629. package/skills/hydrogen-cart-ui/references/react.md +263 -0
  630. package/skills/hydrogen-cart-ui/references/vue.md +204 -0
  631. package/skills/hydrogen-collection-browser/SKILL.md +80 -0
  632. package/skills/hydrogen-collection-browser/references/nextjs.md +118 -0
  633. package/skills/hydrogen-collection-browser/references/nuxt.md +108 -0
  634. package/skills/hydrogen-collection-browser/references/react.md +237 -0
  635. package/skills/hydrogen-customer-account/SKILL.md +107 -0
  636. package/skills/hydrogen-image/SKILL.md +65 -0
  637. package/skills/hydrogen-local-https/SKILL.md +144 -0
  638. package/skills/hydrogen-markets/SKILL.md +221 -0
  639. package/skills/hydrogen-markets/references/nextjs.md +157 -0
  640. package/skills/hydrogen-money/SKILL.md +67 -0
  641. package/skills/hydrogen-oxygen/SKILL.md +245 -0
  642. package/skills/hydrogen-oxygen/references/react-router.md +230 -0
  643. package/skills/hydrogen-predictive-search/SKILL.md +130 -0
  644. package/skills/hydrogen-predictive-search/references/react.md +32 -0
  645. package/skills/hydrogen-predictive-search/references/vue.md +40 -0
  646. package/skills/hydrogen-request-handlers/SKILL.md +90 -0
  647. package/skills/hydrogen-request-handlers/references/frameworks.md +174 -0
  648. package/skills/hydrogen-request-handlers/references/nextjs.md +136 -0
  649. package/skills/hydrogen-request-handlers/references/nuxt.md +214 -0
  650. package/skills/hydrogen-routing/SKILL.md +154 -0
  651. package/skills/hydrogen-setup/SKILL.md +50 -0
  652. package/skills/hydrogen-setup/references/analytics.md +624 -0
  653. package/skills/hydrogen-setup/steps/1-inspect-app.md +62 -0
  654. package/skills/hydrogen-setup/steps/10-analytics.md +10 -0
  655. package/skills/hydrogen-setup/steps/11-verify.md +31 -0
  656. package/skills/hydrogen-setup/steps/2-scaffold.md +86 -0
  657. package/skills/hydrogen-setup/steps/3-build-home-page.md +37 -0
  658. package/skills/hydrogen-setup/steps/4-collection-and-search.md +13 -0
  659. package/skills/hydrogen-setup/steps/5-cart.md +10 -0
  660. package/skills/hydrogen-setup/steps/6-product-detail-page.md +390 -0
  661. package/skills/hydrogen-setup/steps/7-shopify-runtime-scripts.md +69 -0
  662. package/skills/hydrogen-setup/steps/8-cart-drawer-and-navbar.md +35 -0
  663. package/skills/hydrogen-setup/steps/9-account-page.md +54 -0
  664. package/skills/hydrogen-shop-pay/SKILL.md +79 -0
  665. package/skills/hydrogen-shop-pay/references/core.md +66 -0
  666. package/skills/hydrogen-shop-pay/references/react.md +50 -0
  667. package/skills/hydrogen-shop-pay/references/vue.md +39 -0
  668. package/skills/hydrogen-smoke-test/SKILL.md +203 -0
  669. package/skills/hydrogen-storefront-client/SKILL.md +322 -0
  670. package/skills/hydrogen-storefront-client/references/astro.md +125 -0
  671. package/skills/hydrogen-storefront-client/references/caching.md +25 -0
  672. package/skills/hydrogen-storefront-client/references/nextjs.md +121 -0
  673. package/skills/hydrogen-storefront-client/references/nuxt.md +121 -0
  674. package/skills/hydrogen-storefront-client/references/query-validation.md +95 -0
  675. package/skills/hydrogen-storefront-client/references/react-router.md +81 -0
  676. package/skills/hydrogen-storefront-client/references/solidstart.md +131 -0
  677. package/skills/hydrogen-storefront-client/references/sveltekit.md +169 -0
  678. package/skills/hydrogen-variant-form/SKILL.md +250 -0
  679. package/skills/hydrogen-variant-form/references/nextjs.md +203 -0
  680. package/skills/hydrogen-variant-form/references/nuxt.md +95 -0
  681. package/skills/hydrogen-variant-form/references/react.md +71 -0
  682. package/dist/dev/get-virtual-routes-H72465VB.js +0 -74
  683. package/dist/dev/hydrogen-routes.d.ts +0 -5
  684. package/dist/dev/hydrogen-routes.js +0 -25
  685. package/dist/development/get-virtual-routes-ACFZHU42.js +0 -71
  686. package/dist/development/get-virtual-routes-ACFZHU42.js.map +0 -1
  687. package/dist/development/index.cjs +0 -6948
  688. package/dist/development/index.cjs.map +0 -1
  689. package/dist/development/index.js +0 -6601
  690. package/dist/development/index.js.map +0 -1
  691. package/dist/development/log-seo-tags-IG37ONQ2.js +0 -74
  692. package/dist/development/log-seo-tags-IG37ONQ2.js.map +0 -1
  693. package/dist/development/react-router-preset.d.ts +0 -45
  694. package/dist/development/react-router-preset.js +0 -49
  695. package/dist/development/react-router-preset.js.map +0 -1
  696. package/dist/index.cjs +0 -1
  697. package/dist/oxygen/index.d.ts +0 -197
  698. package/dist/oxygen/index.js +0 -107
  699. package/dist/production/get-virtual-routes-ZZEGQQDV.js +0 -3
  700. package/dist/production/get-virtual-routes-ZZEGQQDV.js.map +0 -1
  701. package/dist/production/index.cjs +0 -1019
  702. package/dist/production/index.cjs.map +0 -1
  703. package/dist/production/index.d.cts +0 -3260
  704. package/dist/production/index.d.ts +0 -3260
  705. package/dist/production/index.js +0 -1019
  706. package/dist/production/index.js.map +0 -1
  707. package/dist/production/log-seo-tags-TY72EQWZ.js +0 -2
  708. package/dist/production/log-seo-tags-TY72EQWZ.js.map +0 -1
  709. package/dist/production/react-router-preset.d.ts +0 -45
  710. package/dist/production/react-router-preset.js +0 -11
  711. package/dist/react-router.d.ts +0 -75
  712. package/dist/vite/chunk-4O5OI3OO.js +0 -127
  713. package/dist/vite/chunk-FAQ7TVHC.js +0 -9
  714. package/dist/vite/chunk-QXBQVDMY.js +0 -68
  715. package/dist/vite/compat-date.d.ts +0 -3
  716. package/dist/vite/compat-date.js +0 -6
  717. package/dist/vite/get-virtual-routes.d.ts +0 -21
  718. package/dist/vite/get-virtual-routes.js +0 -74
  719. package/dist/vite/hydrogen-middleware.d.ts +0 -9
  720. package/dist/vite/hydrogen-middleware.js +0 -7
  721. package/dist/vite/plugin.d.ts +0 -22
  722. package/dist/vite/plugin.js +0 -171
  723. package/dist/vite/request-events.d.ts +0 -144
  724. package/dist/vite/request-events.js +0 -10
  725. package/dist/vite/types.d.ts +0 -5
  726. package/dist/vite/types.js +0 -0
  727. package/dist/vite/virtual-routes/assets/debug-network.css +0 -609
  728. package/dist/vite/virtual-routes/assets/favicon-dark.svg +0 -20
  729. package/dist/vite/virtual-routes/assets/favicon.svg +0 -28
  730. package/dist/vite/virtual-routes/assets/inter-variable-font.woff2 +0 -0
  731. package/dist/vite/virtual-routes/assets/jetbrainsmono-variable-font.woff2 +0 -0
  732. package/dist/vite/virtual-routes/assets/styles.css +0 -249
  733. package/dist/vite/virtual-routes/components/FlameChartWrapper.jsx +0 -123
  734. package/dist/vite/virtual-routes/components/HydrogenLogoBaseBW.jsx +0 -32
  735. package/dist/vite/virtual-routes/components/HydrogenLogoBaseColor.jsx +0 -47
  736. package/dist/vite/virtual-routes/components/IconBanner.jsx +0 -292
  737. package/dist/vite/virtual-routes/components/IconClose.jsx +0 -38
  738. package/dist/vite/virtual-routes/components/IconDiscard.jsx +0 -44
  739. package/dist/vite/virtual-routes/components/IconError.jsx +0 -61
  740. package/dist/vite/virtual-routes/components/IconGithub.jsx +0 -23
  741. package/dist/vite/virtual-routes/components/IconTwitter.jsx +0 -21
  742. package/dist/vite/virtual-routes/components/Layout.jsx +0 -7
  743. package/dist/vite/virtual-routes/components/RequestDetails.jsx +0 -171
  744. package/dist/vite/virtual-routes/components/RequestTable.jsx +0 -91
  745. package/dist/vite/virtual-routes/components/RequestWaterfall.jsx +0 -151
  746. package/dist/vite/virtual-routes/layout.jsx +0 -33
  747. package/dist/vite/virtual-routes/lib/useDebugNetworkServer.jsx +0 -178
  748. package/dist/vite/virtual-routes/routes/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.jsx +0 -37
  749. package/dist/vite/virtual-routes/routes/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.tsx +0 -79
  750. package/dist/vite/virtual-routes/routes/graphiql.jsx +0 -5
  751. package/dist/vite/virtual-routes/routes/index.jsx +0 -265
  752. package/dist/vite/virtual-routes/routes/subrequest-profiler.jsx +0 -243
  753. package/dist/vite/virtual-routes/virtual-root-with-layout.jsx +0 -63
  754. package/dist/vite/virtual-routes/virtual-root.jsx +0 -67
@@ -0,0 +1,86 @@
1
+ import { matchStandardRouteUrl } from "../standard-routes/match.mjs";
2
+ import { resolveStandardRouteUrl } from "../standard-routes/redirects.mjs";
3
+ import { SHOPIFY_API_PROXY_PREFIX, isHydrogenServerHandoffPath } from "../url.mjs";
4
+ import { asInlineScript } from "./utils/inline-script.mjs";
5
+
6
+ //#region src/core/shopify-scripts/global.ts
7
+ const initializeShopifyGlobal = (scriptData) => decodeURIComponent("(function()%7Bfunction%20e(e)%7Blet%20t%3Dwindow%2Cn%3DObject.assign(t.Shopify%3F%3F%3D%7B%7D%2Ce%2C%7Bcomponents%3A%7Bconfig%3A%7BstoreDomain%3Awindow.location.origin%2Ccountry%3Ae.country%2Clanguage%3Ae.locale%7D%7D%7D)%3Bn.customerPrivacy.config.consentDomain%3Dwindow.location.host%7De(__SHOPIFY_SCRIPT_DATA__)%7D)()%3B").replace("__SHOPIFY_SCRIPT_DATA__", () => (JSON.stringify(scriptData) ?? "undefined").replace(/</g, "\\u003c").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"));
8
+ const DEFAULT_COUNTRY = "US";
9
+ const DEFAULT_LOCALE = "en";
10
+ const DEFAULT_ROUTES_ROOT = "/";
11
+ /**
12
+ * Returns the browser's `window.Shopify` object, creating it when needed.
13
+ *
14
+ * This is SSR-safe and returns `undefined` outside the browser.
15
+ */
16
+ function getShopifyGlobal() {
17
+ if (typeof window === "undefined") return void 0;
18
+ const shopifyWindow = window;
19
+ return shopifyWindow.Shopify ??= {};
20
+ }
21
+ /**
22
+ * Configures Shopify runtime routing hooks used by storefront scripts.
23
+ *
24
+ * This is SSR-safe and no-ops outside the browser.
25
+ */
26
+ function configureShopifyRouting({ navigate, routes }) {
27
+ const shopify = getShopifyGlobal();
28
+ if (!shopify) return;
29
+ const getRouteOptions = (url) => ({
30
+ baseUrl: window.location.href,
31
+ pathPrefix: shopify.routes?.root,
32
+ routeTemplates: routes ?? {},
33
+ url
34
+ });
35
+ shopify.routes ??= {};
36
+ shopify.routes.match = (url) => matchStandardRouteUrl(getRouteOptions(url));
37
+ shopify.routes.resolve = (url) => resolveStandardRouteUrl(getRouteOptions(url));
38
+ const navigateTo = navigate ?? documentNavigate;
39
+ shopify.routes.navigate = (url) => {
40
+ if (shouldHandoff(url)) return documentNavigate(url);
41
+ return navigateTo(shopify.routes?.resolve?.(url) ?? url);
42
+ };
43
+ shopify.navigate = shopify.routes.navigate;
44
+ }
45
+ function documentNavigate(url) {
46
+ window.location.assign(url);
47
+ }
48
+ function shouldHandoff(url) {
49
+ try {
50
+ const parsedUrl = new URL(url, window.location.href);
51
+ return parsedUrl.origin === window.location.origin && isHydrogenServerHandoffPath(parsedUrl.pathname);
52
+ } catch {
53
+ return false;
54
+ }
55
+ }
56
+ function getShopifyRoutesRoot(pathPrefix) {
57
+ const normalizedPathPrefix = pathPrefix?.trim().replace(/^\/+/, "").replace(/\/+$/, "") ?? "";
58
+ return normalizedPathPrefix ? `/${normalizedPathPrefix}/` : DEFAULT_ROUTES_ROOT;
59
+ }
60
+ function normalizeMyshopifyDomain(domain) {
61
+ return domain.trim().replace(/^https?:\/\//i, "").replace(/\/+$/, "");
62
+ }
63
+ /**
64
+ * Builds the inline bootstrap script that initializes `window.Shopify` for storefront scripts.
65
+ */
66
+ function getShopifyGlobalBootstrapScript({ i18n, shop }) {
67
+ const config = {
68
+ country: i18n?.country ?? DEFAULT_COUNTRY,
69
+ ...i18n?.currency !== void 0 ? { currency: { active: i18n.currency.toUpperCase() } } : {},
70
+ locale: (i18n?.language ?? DEFAULT_LOCALE).toLowerCase(),
71
+ routes: {
72
+ root: getShopifyRoutesRoot(i18n?.pathPrefix),
73
+ apiProxyPrefix: SHOPIFY_API_PROXY_PREFIX
74
+ },
75
+ shop: normalizeMyshopifyDomain(shop.myshopifyDomain),
76
+ customerPrivacy: {
77
+ config: { isHeadless: true },
78
+ consentStatus: "pending"
79
+ }
80
+ };
81
+ return asInlineScript(initializeShopifyGlobal)(config);
82
+ }
83
+
84
+ //#endregion
85
+ export { configureShopifyRouting, getShopifyGlobal, getShopifyGlobalBootstrapScript };
86
+ //# sourceMappingURL=global.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.mjs","names":[],"sources":["../../../../src/core/shopify-scripts/global.ts"],"sourcesContent":["import type { ShopifyGlobal } from \"../../globals\";\nimport type { I18nConfig } from \"../request-context\";\nimport {\n matchStandardRouteUrl,\n resolveStandardRouteUrl,\n type ShopifyRouteTemplates,\n} from \"../standard-routes/index\";\nimport { SHOPIFY_API_PROXY_PREFIX, isHydrogenServerHandoffPath } from \"../url\";\nimport initializeShopifyGlobal from \"./global-script\" with { type: \"script\" };\nimport type { ShopifyScriptsI18n } from \"./types\";\nimport type { ShopifyScriptsShop } from \"./types\";\nimport { asInlineScript } from \"./utils/inline-script\";\n\nexport type ShopifyGlobalConfig = {\n country: I18nConfig[\"country\"];\n currency?: NonNullable<ShopifyGlobal[\"currency\"]>;\n locale: Lowercase<I18nConfig[\"language\"]>;\n customerPrivacy: {\n config: NonNullable<ShopifyGlobal[\"customerPrivacy\"][\"config\"]>;\n consentStatus: NonNullable<ShopifyGlobal[\"customerPrivacy\"][\"consentStatus\"]>;\n };\n routes: {\n root: string;\n apiProxyPrefix: string;\n };\n shop: string;\n};\n\nexport type IncompleteCustomerPrivacy = Partial<\n Omit<ShopifyGlobal[\"customerPrivacy\"], \"config\">\n> & {\n config?: Partial<NonNullable<ShopifyGlobal[\"customerPrivacy\"][\"config\"]>>;\n};\n\nexport type IncompleteShopifyGlobal = Partial<Omit<ShopifyGlobal, \"customerPrivacy\" | \"routes\">> & {\n customerPrivacy?: IncompleteCustomerPrivacy;\n routes?: Partial<ShopifyGlobal[\"routes\"]> & Record<string, unknown>;\n [key: string]: unknown;\n};\n\nconst DEFAULT_COUNTRY: ShopifyGlobalConfig[\"country\"] = \"US\";\nconst DEFAULT_LOCALE: ShopifyGlobalConfig[\"locale\"] = \"en\";\nconst DEFAULT_ROUTES_ROOT: ShopifyGlobalConfig[\"routes\"][\"root\"] = \"/\";\n\n/**\n * Returns the browser's `window.Shopify` object, creating it when needed.\n *\n * This is SSR-safe and returns `undefined` outside the browser.\n */\nexport function getShopifyGlobal(): IncompleteShopifyGlobal | undefined {\n if (typeof window === \"undefined\") return undefined;\n\n const shopifyWindow: { Shopify?: IncompleteShopifyGlobal } = window;\n return (shopifyWindow.Shopify ??= {});\n}\n\n/**\n * Configures Shopify runtime routing hooks used by storefront scripts.\n *\n * This is SSR-safe and no-ops outside the browser.\n */\nexport function configureShopifyRouting({\n navigate,\n routes,\n}: {\n navigate?: ShopifyGlobal[\"routes\"][\"navigate\"];\n routes?: ShopifyRouteTemplates;\n}) {\n const shopify = getShopifyGlobal();\n if (!shopify) return;\n\n const getRouteOptions = (url: string) => ({\n baseUrl: window.location.href,\n pathPrefix: shopify.routes?.root,\n routeTemplates: routes ?? {},\n url,\n });\n\n shopify.routes ??= {};\n shopify.routes.match = (url) => matchStandardRouteUrl(getRouteOptions(url));\n shopify.routes.resolve = (url) => resolveStandardRouteUrl(getRouteOptions(url));\n\n const navigateTo = navigate ?? documentNavigate;\n shopify.routes.navigate = (url) => {\n if (shouldHandoff(url)) {\n return documentNavigate(url);\n }\n\n return navigateTo(shopify.routes?.resolve?.(url) ?? url);\n };\n // Deprecated, kept for temporary backwards compat with WebMCP\n shopify.navigate = shopify.routes.navigate;\n}\n\nfunction documentNavigate(url: string): void {\n window.location.assign(url);\n}\n\nfunction shouldHandoff(url: string): boolean {\n try {\n const parsedUrl = new URL(url, window.location.href);\n\n return (\n parsedUrl.origin === window.location.origin && isHydrogenServerHandoffPath(parsedUrl.pathname)\n );\n } catch {\n return false;\n }\n}\n\nfunction getShopifyRoutesRoot(pathPrefix: I18nConfig[\"pathPrefix\"]): string {\n const normalizedPathPrefix = pathPrefix?.trim().replace(/^\\/+/, \"\").replace(/\\/+$/, \"\") ?? \"\";\n\n return normalizedPathPrefix ? `/${normalizedPathPrefix}/` : DEFAULT_ROUTES_ROOT;\n}\n\nfunction normalizeMyshopifyDomain(domain: string): string {\n return domain\n .trim()\n .replace(/^https?:\\/\\//i, \"\")\n .replace(/\\/+$/, \"\");\n}\n\n/**\n * Builds the inline bootstrap script that initializes `window.Shopify` for storefront scripts.\n */\nexport function getShopifyGlobalBootstrapScript({\n i18n,\n shop,\n}: {\n i18n?: ShopifyScriptsI18n;\n shop: ShopifyScriptsShop;\n}): string {\n const config: ShopifyGlobalConfig = {\n country: i18n?.country ?? DEFAULT_COUNTRY,\n ...(i18n?.currency !== undefined ? { currency: { active: i18n.currency.toUpperCase() } } : {}),\n // oxlint-disable-next-line typescript/consistent-type-assertions\n locale: (i18n?.language ?? DEFAULT_LOCALE).toLowerCase() as Lowercase<\n ShopifyGlobalConfig[\"locale\"]\n >,\n routes: {\n root: getShopifyRoutesRoot(i18n?.pathPrefix),\n apiProxyPrefix: SHOPIFY_API_PROXY_PREFIX,\n },\n shop: normalizeMyshopifyDomain(shop.myshopifyDomain),\n customerPrivacy: {\n config: {\n isHeadless: true,\n },\n consentStatus: \"pending\",\n },\n };\n\n return asInlineScript(initializeShopifyGlobal)(config);\n}\n"],"mappings":";;;;;;AAQA,MAAM,2BAAyB,eAAe,mBAAsB,sUAAS,CAAA,QAAA,kCAAA,KAAA,UAAA,WAAA,IAAA,aAAA,QAAA,MAAA,UAAA,CAAA,QAAA,WAAA,UAAA,CAAA,QAAA,WAAA,UAAA,CAAA;AAgC7E,MAAM,kBAAkD;AACxD,MAAM,iBAAgD;AACtD,MAAM,sBAA6D;;;;;;AAOnE,SAAgB,mBAAwD;AACtE,KAAI,OAAO,WAAW,YAAa,QAAO;CAE1C,MAAM,gBAAuD;AAC7D,QAAQ,cAAc,YAAY,EAAE;;;;;;;AAQtC,SAAgB,wBAAwB,EACtC,UACA,UAIC;CACD,MAAM,UAAU,kBAAkB;AAClC,KAAI,CAAC,QAAS;CAEd,MAAM,mBAAmB,SAAiB;EACxC,SAAS,OAAO,SAAS;EACzB,YAAY,QAAQ,QAAQ;EAC5B,gBAAgB,UAAU,EAAE;EAC5B;EACD;AAED,SAAQ,WAAW,EAAE;AACrB,SAAQ,OAAO,SAAS,QAAQ,sBAAsB,gBAAgB,IAAI,CAAC;AAC3E,SAAQ,OAAO,WAAW,QAAQ,wBAAwB,gBAAgB,IAAI,CAAC;CAE/E,MAAM,aAAa,YAAY;AAC/B,SAAQ,OAAO,YAAY,QAAQ;AACjC,MAAI,cAAc,IAAI,CACpB,QAAO,iBAAiB,IAAI;AAG9B,SAAO,WAAW,QAAQ,QAAQ,UAAU,IAAI,IAAI,IAAI;;AAG1D,SAAQ,WAAW,QAAQ,OAAO;;AAGpC,SAAS,iBAAiB,KAAmB;AAC3C,QAAO,SAAS,OAAO,IAAI;;AAG7B,SAAS,cAAc,KAAsB;AAC3C,KAAI;EACF,MAAM,YAAY,IAAI,IAAI,KAAK,OAAO,SAAS,KAAK;AAEpD,SACE,UAAU,WAAW,OAAO,SAAS,UAAU,4BAA4B,UAAU,SAAQ;SAEzF;AACN,SAAO;;;AAIX,SAAS,qBAAqB,YAA8C;CAC1E,MAAM,uBAAuB,YAAY,MAAM,CAAC,QAAQ,QAAQ,GAAG,CAAC,QAAQ,QAAQ,GAAG,IAAI;AAE3F,QAAO,uBAAuB,IAAI,qBAAqB,KAAK;;AAG9D,SAAS,yBAAyB,QAAwB;AACxD,QAAO,OACJ,MAAK,CACL,QAAQ,iBAAiB,GAAE,CAC3B,QAAQ,QAAQ,GAAG;;;;;AAMxB,SAAgB,gCAAgC,EAC9C,MACA,QAIS;CACT,MAAM,SAA8B;EAClC,SAAS,MAAM,WAAW;EAC1B,GAAI,MAAM,aAAa,SAAY,EAAE,UAAU,EAAE,QAAQ,KAAK,SAAS,aAAa,EAAE,EAAE,GAAG,EAAE;EAE7F,SAAS,MAAM,YAAY,gBAAgB,aAAa;EAGxD,QAAQ;GACN,MAAM,qBAAqB,MAAM,WAAW;GAC5C,gBAAgB;GACjB;EACD,MAAM,yBAAyB,KAAK,gBAAgB;EACpD,iBAAiB;GACf,QAAQ,EACN,YAAY,MACb;GACD,eAAe;GAChB;EACF;AAED,QAAO,eAAe,wBAAwB,CAAC,OAAO"}
@@ -0,0 +1,27 @@
1
+ import { ShopifyRoutesOptions, ShopifyScriptTagDescriptor, ShopifyScriptTagDescriptors, ShopifyScriptTagsOptions, ShopifyScriptsAnalyticsConfig, ShopifyScriptsI18n, ShopifyScriptsOptions, ShopifyScriptsShop } from "./types.mjs";
2
+ import { initializeShopifyScripts } from "./initialize.mjs";
3
+ //#region src/core/shopify-scripts/index.d.ts
4
+ /**
5
+ * Returns grouped Shopify storefront script/link descriptors for SSR frameworks and bindings.
6
+ *
7
+ * Framework bindings wrap this with `initializeShopifyScripts()` to form their `ShopifyScripts`
8
+ * component. Frameworks without a binding can render these descriptors during SSR and call
9
+ * `initializeShopifyScripts()` during browser hydration.
10
+ */
11
+ declare function getShopifyScriptTags({
12
+ analytics,
13
+ consent,
14
+ debug,
15
+ i18n,
16
+ nonce,
17
+ shop,
18
+ shopifyAnalytics,
19
+ inbox
20
+ }: ShopifyScriptTagsOptions): ShopifyScriptTagDescriptors;
21
+ /**
22
+ * Renders all Shopify storefront script/link descriptors to HTML strings.
23
+ */
24
+ declare function renderShopifyScriptTags(options: ShopifyScriptTagsOptions): string[];
25
+ //#endregion
26
+ export { getShopifyScriptTags, renderShopifyScriptTags };
27
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,145 @@
1
+ import { getShopifyAnalyticsBusScript, getShopifyAnalyticsConfig } from "./analytics.mjs";
2
+ import { SHOPIFY_CDN_ORIGIN, SHOPIFY_CONSENT_API_SCRIPT, SHOPIFY_CONSENT_SCRIPT_ID, SHOPIFY_INBOX_SCRIPT, SHOPIFY_PERF_KIT_SCRIPT, SHOPIFY_PRIVACY_BANNER_SCRIPT, SHOPIFY_SHOP_APP_ORIGIN, SHOPIFY_STOREFRONT_ANALYTICS_SCRIPT, SHOPIFY_STOREFRONT_STANDARD_ACTIONS_SCRIPT, SHOPIFY_STOREFRONT_STANDARD_EVENTS_INSPECTOR_SCRIPT, SHOPIFY_STOREFRONT_STANDARD_EVENTS_SCRIPT, SHOPIFY_STOREFRONT_WEBMCP_SCRIPT, VISITOR_CONSENT_COLLECTED_EVENT } from "./constants.mjs";
3
+ import { getShopifyConsentTrackingScript } from "./consent.mjs";
4
+ import { getShopifyGlobal, getShopifyGlobalBootstrapScript } from "./global.mjs";
5
+ import { getPerfKitScript } from "./perfkit.mjs";
6
+ import { renderShopifyScriptTag } from "./render.mjs";
7
+ import { initializeShopifyScripts } from "./initialize.mjs";
8
+
9
+ //#region src/core/shopify-scripts/index.ts
10
+ /**
11
+ * Returns grouped Shopify storefront script/link descriptors for SSR frameworks and bindings.
12
+ *
13
+ * Framework bindings wrap this with `initializeShopifyScripts()` to form their `ShopifyScripts`
14
+ * component. Frameworks without a binding can render these descriptors during SSR and call
15
+ * `initializeShopifyScripts()` during browser hydration.
16
+ */
17
+ function getShopifyScriptTags({ analytics, consent, debug, i18n, nonce, shop, shopifyAnalytics = true, inbox = false }) {
18
+ const nonceAttributes = nonce !== void 0 ? { nonce } : void 0;
19
+ const analyticsConfig = getShopifyAnalyticsConfig({
20
+ analytics,
21
+ consent,
22
+ shop
23
+ });
24
+ const links = [
25
+ {
26
+ tagName: "link",
27
+ attributes: {
28
+ rel: "preconnect",
29
+ href: SHOPIFY_CDN_ORIGIN
30
+ }
31
+ },
32
+ {
33
+ tagName: "link",
34
+ attributes: {
35
+ rel: "preconnect",
36
+ href: SHOPIFY_SHOP_APP_ORIGIN
37
+ }
38
+ },
39
+ {
40
+ tagName: "link",
41
+ attributes: {
42
+ rel: "prefetch",
43
+ as: "script",
44
+ href: SHOPIFY_STOREFRONT_STANDARD_EVENTS_SCRIPT,
45
+ crossorigin: "anonymous"
46
+ }
47
+ }
48
+ ];
49
+ const scripts = [{
50
+ tagName: "script",
51
+ attributes: {
52
+ id: "shopify-global-bootstrap",
53
+ ...nonceAttributes
54
+ },
55
+ innerHTML: getShopifyGlobalBootstrapScript({
56
+ i18n,
57
+ shop
58
+ })
59
+ }, {
60
+ tagName: "script",
61
+ attributes: {
62
+ id: "shopify-standard-actions",
63
+ type: "module",
64
+ crossorigin: "anonymous",
65
+ ...nonceAttributes,
66
+ src: SHOPIFY_STOREFRONT_STANDARD_ACTIONS_SCRIPT
67
+ }
68
+ }];
69
+ if (debug?.standardEventsInspector) scripts.push({
70
+ tagName: "script",
71
+ attributes: {
72
+ id: "shopify-standard-events-inspector",
73
+ defer: true,
74
+ crossorigin: "anonymous",
75
+ ...nonceAttributes,
76
+ src: SHOPIFY_STOREFRONT_STANDARD_EVENTS_INSPECTOR_SCRIPT
77
+ }
78
+ });
79
+ if (inbox) scripts.push({
80
+ tagName: "script",
81
+ attributes: {
82
+ id: "shopify-inbox",
83
+ type: "module",
84
+ async: true,
85
+ crossorigin: "anonymous",
86
+ ...nonceAttributes,
87
+ src: SHOPIFY_INBOX_SCRIPT
88
+ }
89
+ });
90
+ scripts.push({
91
+ tagName: "script",
92
+ attributes: {
93
+ id: SHOPIFY_CONSENT_SCRIPT_ID,
94
+ async: true,
95
+ crossorigin: "anonymous",
96
+ ...nonceAttributes,
97
+ src: consent?.mode === "default-banner" ? SHOPIFY_PRIVACY_BANNER_SCRIPT : SHOPIFY_CONSENT_API_SCRIPT
98
+ }
99
+ });
100
+ scripts.push({
101
+ tagName: "script",
102
+ attributes: {
103
+ id: "shopify-consent-bootstrap",
104
+ ...nonceAttributes
105
+ },
106
+ innerHTML: getShopifyConsentTrackingScript(consent)
107
+ });
108
+ scripts.push({
109
+ tagName: "script",
110
+ attributes: {
111
+ id: "shopify-analytics-bus",
112
+ ...nonceAttributes
113
+ },
114
+ innerHTML: getShopifyAnalyticsBusScript(analyticsConfig)
115
+ });
116
+ if (shopifyAnalytics) scripts.push({
117
+ tagName: "script",
118
+ attributes: {
119
+ id: "shopify-storefront-analytics",
120
+ async: true,
121
+ crossorigin: "anonymous",
122
+ ...nonceAttributes,
123
+ src: SHOPIFY_STOREFRONT_ANALYTICS_SCRIPT
124
+ }
125
+ });
126
+ const perfKitScript = getPerfKitScript(shop, nonceAttributes);
127
+ if (perfKitScript) scripts.push(perfKitScript);
128
+ return {
129
+ links,
130
+ scripts,
131
+ get tags() {
132
+ return [...links, ...scripts];
133
+ }
134
+ };
135
+ }
136
+ /**
137
+ * Renders all Shopify storefront script/link descriptors to HTML strings.
138
+ */
139
+ function renderShopifyScriptTags(options) {
140
+ return getShopifyScriptTags(options).tags.map(renderShopifyScriptTag);
141
+ }
142
+
143
+ //#endregion
144
+ export { getShopifyScriptTags, renderShopifyScriptTags };
145
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/core/shopify-scripts/index.ts"],"sourcesContent":["import { getShopifyAnalyticsBusScript, getShopifyAnalyticsConfig } from \"./analytics\";\nimport { getShopifyConsentTrackingScript } from \"./consent\";\nimport {\n SHOPIFY_CONSENT_API_SCRIPT,\n SHOPIFY_CDN_ORIGIN,\n SHOPIFY_CONSENT_SCRIPT_ID,\n SHOPIFY_PRIVACY_BANNER_SCRIPT,\n SHOPIFY_SHOP_APP_ORIGIN,\n SHOPIFY_INBOX_SCRIPT,\n SHOPIFY_STOREFRONT_ANALYTICS_SCRIPT,\n SHOPIFY_STOREFRONT_STANDARD_ACTIONS_SCRIPT,\n SHOPIFY_STOREFRONT_STANDARD_EVENTS_INSPECTOR_SCRIPT,\n SHOPIFY_STOREFRONT_STANDARD_EVENTS_SCRIPT,\n} from \"./constants\";\nimport { getShopifyGlobalBootstrapScript } from \"./global\";\nimport { getPerfKitScript } from \"./perfkit\";\nimport { renderShopifyScriptTag } from \"./render\";\nimport type {\n ShopifyLinkDescriptor,\n ShopifyScriptDescriptor,\n ShopifyScriptTagDescriptors,\n ShopifyScriptTagsOptions,\n} from \"./types\";\n\nexport {\n SHOPIFY_CDN_ORIGIN,\n SHOPIFY_CONSENT_API_SCRIPT,\n SHOPIFY_PERF_KIT_SCRIPT,\n SHOPIFY_PRIVACY_BANNER_SCRIPT,\n SHOPIFY_SHOP_APP_ORIGIN,\n SHOPIFY_INBOX_SCRIPT,\n SHOPIFY_STOREFRONT_ANALYTICS_SCRIPT,\n SHOPIFY_STOREFRONT_STANDARD_ACTIONS_SCRIPT,\n SHOPIFY_STOREFRONT_STANDARD_EVENTS_SCRIPT,\n SHOPIFY_STOREFRONT_WEBMCP_SCRIPT,\n VISITOR_CONSENT_COLLECTED_EVENT,\n} from \"./constants\";\nexport { getShopifyGlobal, getShopifyGlobalBootstrapScript } from \"./global\";\nexport { initializeShopifyScripts } from \"./initialize\";\nexport { renderShopifyScriptTag } from \"./render\";\nexport type {\n ShopifyScriptsAnalyticsConfig,\n ShopifyRoutesOptions,\n ShopifyScriptTagDescriptor,\n ShopifyScriptTagDescriptors,\n ShopifyScriptTagsOptions,\n ShopifyScriptsOptions,\n ShopifyScriptsI18n,\n ShopifyScriptsShop,\n} from \"./types\";\n\n/**\n * Returns grouped Shopify storefront script/link descriptors for SSR frameworks and bindings.\n *\n * Framework bindings wrap this with `initializeShopifyScripts()` to form their `ShopifyScripts`\n * component. Frameworks without a binding can render these descriptors during SSR and call\n * `initializeShopifyScripts()` during browser hydration.\n */\nexport function getShopifyScriptTags({\n analytics,\n consent,\n debug,\n i18n,\n nonce,\n shop,\n shopifyAnalytics = true,\n inbox = false,\n}: ShopifyScriptTagsOptions): ShopifyScriptTagDescriptors {\n const nonceAttributes = nonce !== undefined ? { nonce } : undefined;\n const analyticsConfig = getShopifyAnalyticsConfig({ analytics, consent, shop });\n\n const links: ShopifyLinkDescriptor[] = [\n {\n tagName: \"link\",\n attributes: {\n rel: \"preconnect\",\n href: SHOPIFY_CDN_ORIGIN,\n },\n },\n {\n tagName: \"link\",\n attributes: {\n rel: \"preconnect\",\n href: SHOPIFY_SHOP_APP_ORIGIN,\n },\n },\n {\n tagName: \"link\",\n attributes: {\n rel: \"prefetch\",\n as: \"script\",\n href: SHOPIFY_STOREFRONT_STANDARD_EVENTS_SCRIPT,\n crossorigin: \"anonymous\",\n },\n },\n ];\n const scripts: ShopifyScriptDescriptor[] = [\n {\n tagName: \"script\",\n attributes: { id: \"shopify-global-bootstrap\", ...nonceAttributes },\n innerHTML: getShopifyGlobalBootstrapScript({ i18n, shop }),\n },\n {\n tagName: \"script\",\n attributes: {\n id: \"shopify-standard-actions\",\n type: \"module\",\n crossorigin: \"anonymous\",\n ...nonceAttributes,\n src: SHOPIFY_STOREFRONT_STANDARD_ACTIONS_SCRIPT,\n },\n },\n ];\n\n if (__DEV__ && debug?.standardEventsInspector) {\n scripts.push({\n tagName: \"script\",\n attributes: {\n id: \"shopify-standard-events-inspector\",\n defer: true,\n crossorigin: \"anonymous\",\n ...nonceAttributes,\n src: SHOPIFY_STOREFRONT_STANDARD_EVENTS_INSPECTOR_SCRIPT,\n },\n });\n }\n\n if (inbox) {\n scripts.push({\n tagName: \"script\",\n attributes: {\n id: \"shopify-inbox\",\n type: \"module\",\n async: true,\n crossorigin: \"anonymous\",\n ...nonceAttributes,\n src: SHOPIFY_INBOX_SCRIPT,\n },\n });\n }\n\n // Keep this async consent library immediately before the inline consent bootstrap.\n // Parser-inserted async scripts execute in a later task, so the following inline\n // script can attach a load listener before the library runs.\n scripts.push({\n tagName: \"script\",\n attributes: {\n id: SHOPIFY_CONSENT_SCRIPT_ID,\n async: true,\n crossorigin: \"anonymous\",\n ...nonceAttributes,\n src:\n consent?.mode === \"default-banner\"\n ? SHOPIFY_PRIVACY_BANNER_SCRIPT\n : SHOPIFY_CONSENT_API_SCRIPT,\n },\n });\n // This must run immediately after the consent library tag so it can find that\n // tag and attach its load listener before consent-tracking-api/privacy-banner executes.\n scripts.push({\n tagName: \"script\",\n attributes: { id: \"shopify-consent-bootstrap\", ...nonceAttributes },\n innerHTML: getShopifyConsentTrackingScript(consent),\n });\n\n // This must run after getShopifyConsentTrackingScript because that script\n // temporarily annotates visitorConsentCollected events for the analytics bus.\n scripts.push({\n tagName: \"script\",\n attributes: { id: \"shopify-analytics-bus\", ...nonceAttributes },\n innerHTML: getShopifyAnalyticsBusScript(analyticsConfig),\n });\n\n if (shopifyAnalytics) {\n scripts.push({\n tagName: \"script\",\n attributes: {\n id: \"shopify-storefront-analytics\",\n async: true,\n crossorigin: \"anonymous\",\n ...nonceAttributes,\n src: SHOPIFY_STOREFRONT_ANALYTICS_SCRIPT,\n },\n });\n }\n\n const perfKitScript = getPerfKitScript(shop, nonceAttributes);\n if (perfKitScript) {\n scripts.push(perfKitScript);\n }\n\n return {\n links,\n scripts,\n get tags() {\n return [...links, ...scripts];\n },\n };\n}\n\n/**\n * Renders all Shopify storefront script/link descriptors to HTML strings.\n */\nexport function renderShopifyScriptTags(options: ShopifyScriptTagsOptions): string[] {\n return getShopifyScriptTags(options).tags.map(renderShopifyScriptTag);\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA0DA,SAAgB,qBAAqB,EACnC,WACA,SACA,OACA,MACA,OACA,MACA,mBAAmB,MACnB,QAAQ,SACgD;CACxD,MAAM,kBAAkB,UAAU,SAAY,EAAE,OAAO,GAAG;CAC1D,MAAM,kBAAkB,0BAA0B;EAAE;EAAW;EAAS;EAAM,CAAC;CAE/E,MAAM,QAAiC;EACrC;GACE,SAAS;GACT,YAAY;IACV,KAAK;IACL,MAAM;IACP;GACF;EACD;GACE,SAAS;GACT,YAAY;IACV,KAAK;IACL,MAAM;IACP;GACF;EACD;GACE,SAAS;GACT,YAAY;IACV,KAAK;IACL,IAAI;IACJ,MAAM;IACN,aAAa;IACd;GACF;EACF;CACD,MAAM,UAAqC,CACzC;EACE,SAAS;EACT,YAAY;GAAE,IAAI;GAA4B,GAAG;GAAiB;EAClE,WAAW,gCAAgC;GAAE;GAAM;GAAM,CAAC;EAC3D,EACD;EACE,SAAS;EACT,YAAY;GACV,IAAI;GACJ,MAAM;GACN,aAAa;GACb,GAAG;GACH,KAAK;GACN;EACF,CACF;AAED,KAAe,OAAO,wBACpB,SAAQ,KAAK;EACX,SAAS;EACT,YAAY;GACV,IAAI;GACJ,OAAO;GACP,aAAa;GACb,GAAG;GACH,KAAK;GACN;EACF,CAAC;AAGJ,KAAI,MACF,SAAQ,KAAK;EACX,SAAS;EACT,YAAY;GACV,IAAI;GACJ,MAAM;GACN,OAAO;GACP,aAAa;GACb,GAAG;GACH,KAAK;GACN;EACF,CAAC;AAMJ,SAAQ,KAAK;EACX,SAAS;EACT,YAAY;GACV,IAAI;GACJ,OAAO;GACP,aAAa;GACb,GAAG;GACH,KACE,SAAS,SAAS,mBACd,gCACA;GACP;EACF,CAAC;AAGF,SAAQ,KAAK;EACX,SAAS;EACT,YAAY;GAAE,IAAI;GAA6B,GAAG;GAAiB;EACnE,WAAW,gCAAgC,QAAQ;EACpD,CAAC;AAIF,SAAQ,KAAK;EACX,SAAS;EACT,YAAY;GAAE,IAAI;GAAyB,GAAG;GAAiB;EAC/D,WAAW,6BAA6B,gBAAgB;EACzD,CAAC;AAEF,KAAI,iBACF,SAAQ,KAAK;EACX,SAAS;EACT,YAAY;GACV,IAAI;GACJ,OAAO;GACP,aAAa;GACb,GAAG;GACH,KAAK;GACN;EACF,CAAC;CAGJ,MAAM,gBAAgB,iBAAiB,MAAM,gBAAgB;AAC7D,KAAI,cACF,SAAQ,KAAK,cAAc;AAG7B,QAAO;EACL;EACA;EACA,IAAI,OAAO;AACT,UAAO,CAAC,GAAG,OAAO,GAAG,QAAQ;;EAEhC;;;;;AAMH,SAAgB,wBAAwB,SAA6C;AACnF,QAAO,qBAAqB,QAAQ,CAAC,KAAK,IAAI,uBAAuB"}
@@ -0,0 +1,18 @@
1
+ import { InitializeShopifyScriptsOptions } from "./types.mjs";
2
+
3
+ //#region src/core/shopify-scripts/initialize.d.ts
4
+ /**
5
+ * Initializes Shopify browser script behavior for frameworks without a Hydrogen binding.
6
+ *
7
+ * This is the browser hydration half of `getShopifyScriptTags()`: framework bindings combine both
8
+ * into a `ShopifyScripts` component, while custom integrations can render script tags during SSR
9
+ * and call this helper from their browser lifecycle.
10
+ */
11
+ declare function initializeShopifyScripts({
12
+ navigate,
13
+ routes,
14
+ webMcp
15
+ }: InitializeShopifyScriptsOptions): Promise<boolean | void>;
16
+ //#endregion
17
+ export { initializeShopifyScripts };
18
+ //# sourceMappingURL=initialize.d.mts.map
@@ -0,0 +1,27 @@
1
+ import { configureShopifyRouting } from "./global.mjs";
2
+ import { initializeDeprecatedCookies } from "./deprecated-cookies.mjs";
3
+ import { initializeShopifyPageViewEvents } from "./page-view.mjs";
4
+ import { loadShopifyWebMcpTools } from "./webmcp.mjs";
5
+
6
+ //#region src/core/shopify-scripts/initialize.ts
7
+ /**
8
+ * Initializes Shopify browser script behavior for frameworks without a Hydrogen binding.
9
+ *
10
+ * This is the browser hydration half of `getShopifyScriptTags()`: framework bindings combine both
11
+ * into a `ShopifyScripts` component, while custom integrations can render script tags during SSR
12
+ * and call this helper from their browser lifecycle.
13
+ */
14
+ function initializeShopifyScripts({ navigate, routes, webMcp = true }) {
15
+ configureShopifyRouting({
16
+ navigate,
17
+ routes
18
+ });
19
+ initializeDeprecatedCookies();
20
+ initializeShopifyPageViewEvents();
21
+ if (!webMcp) return Promise.resolve();
22
+ return loadShopifyWebMcpTools();
23
+ }
24
+
25
+ //#endregion
26
+ export { initializeShopifyScripts };
27
+ //# sourceMappingURL=initialize.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize.mjs","names":[],"sources":["../../../../src/core/shopify-scripts/initialize.ts"],"sourcesContent":["import { initializeDeprecatedCookies } from \"./deprecated-cookies\";\nimport { configureShopifyRouting } from \"./global\";\nimport { initializeShopifyPageViewEvents } from \"./page-view\";\nimport type { InitializeShopifyScriptsOptions } from \"./types\";\nimport { loadShopifyWebMcpTools } from \"./webmcp\";\n\n/**\n * Initializes Shopify browser script behavior for frameworks without a Hydrogen binding.\n *\n * This is the browser hydration half of `getShopifyScriptTags()`: framework bindings combine both\n * into a `ShopifyScripts` component, while custom integrations can render script tags during SSR\n * and call this helper from their browser lifecycle.\n */\nexport function initializeShopifyScripts({\n navigate,\n routes,\n webMcp = true,\n}: InitializeShopifyScriptsOptions): Promise<boolean | void> {\n configureShopifyRouting({ navigate, routes });\n initializeDeprecatedCookies();\n initializeShopifyPageViewEvents();\n\n if (!webMcp) return Promise.resolve();\n\n return loadShopifyWebMcpTools();\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAgB,yBAAyB,EACvC,UACA,QACA,SAAS,QACkD;AAC3D,yBAAwB;EAAE;EAAU;EAAQ,CAAC;AAC7C,8BAA6B;AAC7B,kCAAiC;AAEjC,KAAI,CAAC,OAAQ,QAAO,QAAQ,SAAS;AAErC,QAAO,wBAAwB"}
@@ -0,0 +1,49 @@
1
+ import { SHOPIFY_PERF_KIT_SCRIPT_ID } from "./constants.mjs";
2
+ import { observeNavigation } from "./utils/navigation.mjs";
3
+
4
+ //#region src/core/shopify-scripts/page-view.ts
5
+ let cleanupPageViewEvents;
6
+ const getPageKey = () => `${window.location.pathname}${window.location.search}`;
7
+ const getPageTemplate = (url = window.location.href) => window.Shopify?.routes?.match?.(url)?.pageTemplateName ?? "unknown";
8
+ const importStandardEventsFromCDN = () => import("https://cdn.shopify.com/storefront/standard-events.js");
9
+ function initializeShopifyPageViewEvents(importStandardEvents = importStandardEventsFromCDN) {
10
+ if (cleanupPageViewEvents) return cleanupPageViewEvents;
11
+ document.getElementById(SHOPIFY_PERF_KIT_SCRIPT_ID)?.setAttribute("data-page-type", getPageTemplate());
12
+ const standardEventsPromise = importStandardEvents().catch(() => void 0);
13
+ let lastPageKey = getPageKey();
14
+ let scheduledNavigation;
15
+ const emitPageView = () => {
16
+ const page = {
17
+ template: getPageTemplate(),
18
+ title: document.title,
19
+ url: window.location.href
20
+ };
21
+ standardEventsPromise.then((StandardEvents) => {
22
+ if (!StandardEvents) return;
23
+ document.dispatchEvent(new StandardEvents.PageViewEvent({ page }));
24
+ });
25
+ };
26
+ const stopObservingNavigation = observeNavigation(() => {
27
+ const pageKey = getPageKey();
28
+ if (pageKey === lastPageKey) return;
29
+ lastPageKey = pageKey;
30
+ if (scheduledNavigation !== void 0) cancelAnimationFrame(scheduledNavigation);
31
+ scheduledNavigation = requestAnimationFrame(() => {
32
+ scheduledNavigation = void 0;
33
+ emitPageView();
34
+ });
35
+ });
36
+ if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", emitPageView, { once: true });
37
+ else emitPageView();
38
+ cleanupPageViewEvents = () => {
39
+ document.removeEventListener("DOMContentLoaded", emitPageView);
40
+ stopObservingNavigation();
41
+ if (scheduledNavigation !== void 0) cancelAnimationFrame(scheduledNavigation);
42
+ cleanupPageViewEvents = void 0;
43
+ };
44
+ return cleanupPageViewEvents;
45
+ }
46
+
47
+ //#endregion
48
+ export { initializeShopifyPageViewEvents };
49
+ //# sourceMappingURL=page-view.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-view.mjs","names":[],"sources":["../../../../src/core/shopify-scripts/page-view.ts"],"sourcesContent":["import type * as StandardEventsModule from \"../../../vendor/standard-events\";\nimport { SHOPIFY_PERF_KIT_SCRIPT_ID } from \"./constants\";\nimport { observeNavigation } from \"./utils/navigation\";\n\nlet cleanupPageViewEvents: (() => void) | undefined;\n\nconst getPageKey = () => `${window.location.pathname}${window.location.search}`;\nconst getPageTemplate = (url = window.location.href) =>\n window.Shopify?.routes?.match?.(url)?.pageTemplateName ?? \"unknown\";\n\n// Keep this URL inline so consumer bundlers such as Vite recognize it as an external import.\nconst importStandardEventsFromCDN: () => Promise<\n Pick<typeof StandardEventsModule, \"PageViewEvent\">\n> = () =>\n // @ts-expect-error CDN package without automatic types\n import(\"https://cdn.shopify.com/storefront/standard-events.js\");\n\nexport function initializeShopifyPageViewEvents(\n importStandardEvents = importStandardEventsFromCDN,\n) {\n if (cleanupPageViewEvents) return cleanupPageViewEvents;\n\n // Update the PerfKit script with the current page type since it\n // might miss the initial page view if it was loaded after the script.\n document\n .getElementById(SHOPIFY_PERF_KIT_SCRIPT_ID)\n ?.setAttribute(\"data-page-type\", getPageTemplate());\n\n const standardEventsPromise = importStandardEvents().catch(() => undefined);\n let lastPageKey = getPageKey();\n let scheduledNavigation: number | undefined;\n\n const emitPageView = () => {\n const page = {\n template: getPageTemplate(),\n title: document.title,\n url: window.location.href,\n } satisfies StandardEventsModule.PageViewEvent[\"page\"];\n\n void standardEventsPromise.then((StandardEvents) => {\n if (!StandardEvents) return;\n document.dispatchEvent(new StandardEvents.PageViewEvent({ page }));\n });\n };\n\n const stopObservingNavigation = observeNavigation(() => {\n const pageKey = getPageKey();\n if (pageKey === lastPageKey) return;\n\n lastPageKey = pageKey;\n if (scheduledNavigation !== undefined) {\n cancelAnimationFrame(scheduledNavigation);\n }\n scheduledNavigation = requestAnimationFrame(() => {\n scheduledNavigation = undefined;\n emitPageView();\n });\n });\n\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", emitPageView, { once: true });\n } else {\n emitPageView();\n }\n\n cleanupPageViewEvents = () => {\n document.removeEventListener(\"DOMContentLoaded\", emitPageView);\n stopObservingNavigation();\n if (scheduledNavigation !== undefined) cancelAnimationFrame(scheduledNavigation);\n cleanupPageViewEvents = undefined;\n };\n\n return cleanupPageViewEvents;\n}\n"],"mappings":";;;;AAIA,IAAI;AAEJ,MAAM,mBAAmB,GAAG,OAAO,SAAS,WAAW,OAAO,SAAS;AACvE,MAAM,mBAAmB,MAAM,OAAO,SAAS,SAC7C,OAAO,SAAS,QAAQ,QAAQ,IAAI,EAAE,oBAAoB;AAG5D,MAAM,oCAIJ,OAAO;AAET,SAAgB,gCACd,uBAAuB,6BACvB;AACA,KAAI,sBAAuB,QAAO;AAIlC,UACG,eAAe,2BAA2B,EACzC,aAAa,kBAAkB,iBAAiB,CAAC;CAErD,MAAM,wBAAwB,sBAAsB,CAAC,YAAY,OAAU;CAC3E,IAAI,cAAc,YAAY;CAC9B,IAAI;CAEJ,MAAM,qBAAqB;EACzB,MAAM,OAAO;GACX,UAAU,iBAAiB;GAC3B,OAAO,SAAS;GAChB,KAAK,OAAO,SAAS;GACtB;AAED,EAAK,sBAAsB,MAAM,mBAAmB;AAClD,OAAI,CAAC,eAAgB;AACrB,YAAS,cAAc,IAAI,eAAe,cAAc,EAAE,MAAM,CAAC,CAAC;IAClE;;CAGJ,MAAM,0BAA0B,wBAAwB;EACtD,MAAM,UAAU,YAAY;AAC5B,MAAI,YAAY,YAAa;AAE7B,gBAAc;AACd,MAAI,wBAAwB,OAC1B,sBAAqB,oBAAoB;AAE3C,wBAAsB,4BAA4B;AAChD,yBAAsB;AACtB,iBAAc;IACd;GACF;AAEF,KAAI,SAAS,eAAe,UAC1B,UAAS,iBAAiB,oBAAoB,cAAc,EAAE,MAAM,MAAM,CAAC;KAE3E,eAAc;AAGhB,+BAA8B;AAC5B,WAAS,oBAAoB,oBAAoB,aAAa;AAC9D,2BAAyB;AACzB,MAAI,wBAAwB,OAAW,sBAAqB,oBAAoB;AAChF,0BAAwB;;AAG1B,QAAO"}
@@ -0,0 +1,33 @@
1
+ import { SHOPIFY_PERF_KIT_SCRIPT, SHOPIFY_PERF_KIT_SCRIPT_ID } from "./constants.mjs";
2
+
3
+ //#region src/core/shopify-scripts/perfkit.ts
4
+ const SHOPIFY_SHOP_ID_PATTERN = /^\d+$/;
5
+ function getPerfKitScript(shop, extraAttributes) {
6
+ if (!shop.storefrontId) return;
7
+ const shopId = parseNumericShopId(shop.shopId);
8
+ if (!shopId) return;
9
+ return {
10
+ tagName: "script",
11
+ attributes: {
12
+ id: SHOPIFY_PERF_KIT_SCRIPT_ID,
13
+ ...extraAttributes,
14
+ async: true,
15
+ src: SHOPIFY_PERF_KIT_SCRIPT,
16
+ "data-application": "hydrogen",
17
+ "data-shop-id": shopId,
18
+ "data-storefront-id": shop.storefrontId,
19
+ "data-monorail-region": "global",
20
+ "data-spa-mode": "true",
21
+ "data-resource-timing-sampling-rate": "10"
22
+ }
23
+ };
24
+ }
25
+ function parseNumericShopId(shopId) {
26
+ const parsedShopId = shopId.split("/").pop();
27
+ if (!parsedShopId) return;
28
+ return SHOPIFY_SHOP_ID_PATTERN.test(parsedShopId) ? parsedShopId : void 0;
29
+ }
30
+
31
+ //#endregion
32
+ export { getPerfKitScript };
33
+ //# sourceMappingURL=perfkit.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perfkit.mjs","names":[],"sources":["../../../../src/core/shopify-scripts/perfkit.ts"],"sourcesContent":["import { SHOPIFY_PERF_KIT_SCRIPT, SHOPIFY_PERF_KIT_SCRIPT_ID } from \"./constants\";\nimport type {\n ShopifyScriptDescriptor,\n ShopifyScriptsShop,\n ShopifyScriptTagAttributes,\n} from \"./types\";\n\nconst SHOPIFY_SHOP_ID_PATTERN = /^\\d+$/;\n\nexport function getPerfKitScript(\n shop: ShopifyScriptsShop,\n extraAttributes?: Pick<ShopifyScriptTagAttributes, \"nonce\">,\n): ShopifyScriptDescriptor | undefined {\n if (!shop.storefrontId) return;\n\n const shopId = parseNumericShopId(shop.shopId);\n if (!shopId) return;\n\n return {\n tagName: \"script\",\n attributes: {\n id: SHOPIFY_PERF_KIT_SCRIPT_ID,\n ...extraAttributes,\n async: true,\n src: SHOPIFY_PERF_KIT_SCRIPT,\n \"data-application\": \"hydrogen\",\n \"data-shop-id\": shopId,\n \"data-storefront-id\": shop.storefrontId,\n \"data-monorail-region\": \"global\",\n \"data-spa-mode\": \"true\",\n \"data-resource-timing-sampling-rate\": \"10\",\n },\n };\n}\n\nfunction parseNumericShopId(shopId: ShopifyScriptsShop[\"shopId\"]): string | undefined {\n const parsedShopId = shopId.split(\"/\").pop();\n if (!parsedShopId) return;\n\n return SHOPIFY_SHOP_ID_PATTERN.test(parsedShopId) ? parsedShopId : undefined;\n}\n"],"mappings":";;;AAOA,MAAM,0BAA0B;AAEhC,SAAgB,iBACd,MACA,iBACqC;AACrC,KAAI,CAAC,KAAK,aAAc;CAExB,MAAM,SAAS,mBAAmB,KAAK,OAAO;AAC9C,KAAI,CAAC,OAAQ;AAEb,QAAO;EACL,SAAS;EACT,YAAY;GACV,IAAI;GACJ,GAAG;GACH,OAAO;GACP,KAAK;GACL,oBAAoB;GACpB,gBAAgB;GAChB,sBAAsB,KAAK;GAC3B,wBAAwB;GACxB,iBAAiB;GACjB,sCAAsC;GACvC;EACF;;AAGH,SAAS,mBAAmB,QAA0D;CACpF,MAAM,eAAe,OAAO,MAAM,IAAI,CAAC,KAAK;AAC5C,KAAI,CAAC,aAAc;AAEnB,QAAO,wBAAwB,KAAK,aAAa,GAAG,eAAe"}
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,23 @@
1
+ //#region src/core/shopify-scripts/render.ts
2
+ /**
3
+ * Renders a Shopify script/link descriptor to an HTML string.
4
+ */
5
+ function renderShopifyScriptTag({ tagName, attributes, innerHTML }) {
6
+ const serializedAttributes = Object.entries(attributes ?? {}).map(renderHtmlAttribute).filter((attribute) => Boolean(attribute)).join(" ");
7
+ const openingTag = serializedAttributes ? `<${tagName} ${serializedAttributes}>` : `<${tagName}>`;
8
+ if (tagName === "link") return openingTag;
9
+ return `${openingTag}${innerHTML ?? ""}<\/script>`;
10
+ }
11
+ function renderHtmlAttribute([name, value]) {
12
+ if (value === false) return;
13
+ const serializedName = name.toLowerCase();
14
+ if (value === true) return serializedName;
15
+ return `${serializedName}="${escapeHtmlAttribute(value)}"`;
16
+ }
17
+ function escapeHtmlAttribute(value) {
18
+ return value.replace(/&/g, "&amp;").replace(/"/g, "&quot;");
19
+ }
20
+
21
+ //#endregion
22
+ export { renderShopifyScriptTag };
23
+ //# sourceMappingURL=render.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.mjs","names":[],"sources":["../../../../src/core/shopify-scripts/render.ts"],"sourcesContent":["import type { ShopifyAttributeValue, ShopifyScriptTagDescriptor } from \"./types\";\n\n/**\n * Renders a Shopify script/link descriptor to an HTML string.\n */\nexport function renderShopifyScriptTag({\n tagName,\n attributes,\n innerHTML,\n}: ShopifyScriptTagDescriptor): string {\n const serializedAttributes = Object.entries(attributes ?? {})\n .map(renderHtmlAttribute)\n .filter((attribute): attribute is string => Boolean(attribute))\n .join(\" \");\n const openingTag = serializedAttributes ? `<${tagName} ${serializedAttributes}>` : `<${tagName}>`;\n\n if (tagName === \"link\") return openingTag;\n\n return `${openingTag}${innerHTML ?? \"\"}</script>`;\n}\n\nfunction renderHtmlAttribute([name, value]: [string, ShopifyAttributeValue]): string | undefined {\n if (value === false) return;\n\n const serializedName = name.toLowerCase();\n if (value === true) return serializedName;\n\n return `${serializedName}=\"${escapeHtmlAttribute(value)}\"`;\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n}\n"],"mappings":";;;;AAKA,SAAgB,uBAAuB,EACrC,SACA,YACA,aACqC;CACrC,MAAM,uBAAuB,OAAO,QAAQ,cAAc,EAAE,CAAC,CAC1D,IAAI,oBAAoB,CACxB,QAAQ,cAAmC,QAAQ,UAAU,CAAC,CAC9D,KAAK,IAAI;CACZ,MAAM,aAAa,uBAAuB,IAAI,QAAQ,GAAG,qBAAqB,KAAK,IAAI,QAAQ;AAE/F,KAAI,YAAY,OAAQ,QAAO;AAE/B,QAAO,GAAG,aAAa,aAAa,GAAG;;AAGzC,SAAS,oBAAoB,CAAC,MAAM,QAA6D;AAC/F,KAAI,UAAU,MAAO;CAErB,MAAM,iBAAiB,KAAK,aAAa;AACzC,KAAI,UAAU,KAAM,QAAO;AAE3B,QAAO,GAAG,eAAe,IAAI,oBAAoB,MAAM,CAAC;;AAG1D,SAAS,oBAAoB,OAAuB;AAClD,QAAO,MAAM,QAAQ,MAAM,QAAQ,CAAC,QAAQ,MAAM,SAAS"}
@@ -0,0 +1,76 @@
1
+ import { I18nConfig } from "../request-context.mjs";
2
+ import { ShopifyRouteTemplates } from "../standard-routes/types.mjs";
3
+ import { ShopifyGlobal } from "../../globals.mjs";
4
+ import { ConsentConfig, ShopAnalyticsChannel, StorefrontAnalyticsConfig } from "../analytics/types.mjs";
5
+
6
+ //#region src/core/shopify-scripts/types.d.ts
7
+ type ShopifyScriptsAnalyticsConfig = {
8
+ channel?: ShopAnalyticsChannel;
9
+ customData?: StorefrontAnalyticsConfig["customData"];
10
+ };
11
+ type ShopifyScriptsI18n = Pick<I18nConfig, "country" | "language"> & Partial<Pick<I18nConfig, "pathPrefix">> & {
12
+ currency?: string;
13
+ };
14
+ type ShopifyCrossOrigin = "" | "anonymous" | "use-credentials";
15
+ type ShopifyDataAttributes = {
16
+ [name: `data-${string}`]: string;
17
+ };
18
+ type ShopifyScriptTagAttributes = ShopifyDataAttributes & Partial<{
19
+ async: boolean;
20
+ crossorigin: ShopifyCrossOrigin;
21
+ defer: boolean;
22
+ id: string;
23
+ nonce: string;
24
+ src: string;
25
+ type: string;
26
+ }>;
27
+ type ShopifyLinkTagAttributes = Partial<{
28
+ as: "script";
29
+ crossorigin: ShopifyCrossOrigin;
30
+ href: string;
31
+ rel: "preconnect" | "prefetch";
32
+ }>;
33
+ type ShopifyScriptDescriptor = {
34
+ tagName: "script";
35
+ attributes?: ShopifyScriptTagAttributes;
36
+ innerHTML?: string;
37
+ };
38
+ type ShopifyLinkDescriptor = {
39
+ tagName: "link";
40
+ attributes: ShopifyLinkTagAttributes;
41
+ innerHTML?: never;
42
+ };
43
+ type ShopifyScriptTagDescriptor = ShopifyScriptDescriptor | ShopifyLinkDescriptor;
44
+ type ShopifyScriptTagDescriptors = {
45
+ /** Link descriptors for framework head APIs that split links from scripts. */readonly links: readonly ShopifyLinkDescriptor[]; /** Script descriptors for framework head APIs that split scripts from links. */
46
+ readonly scripts: readonly ShopifyScriptDescriptor[]; /** All generated descriptors as a mixed list, with links before scripts. */
47
+ readonly tags: readonly ShopifyScriptTagDescriptor[];
48
+ };
49
+ type ShopifyScriptsShop = {
50
+ shopId: string;
51
+ storefrontId: string; /** The shop's permanent `*.myshopify.com` domain, exposed as `window.Shopify.shop`. */
52
+ myshopifyDomain: string;
53
+ };
54
+ type ShopifyScriptTagsOptions = {
55
+ analytics?: ShopifyScriptsAnalyticsConfig;
56
+ consent?: ConsentConfig;
57
+ debug?: {
58
+ /** Loads Shopify's standard events inspector in development builds. */standardEventsInspector?: boolean;
59
+ };
60
+ i18n?: ShopifyScriptsI18n; /** Loads Inbox. Render `<shopify-chat>` where you want the chat UI to appear. */
61
+ inbox?: boolean;
62
+ nonce?: string;
63
+ shop: ShopifyScriptsShop;
64
+ shopifyAnalytics?: boolean;
65
+ };
66
+ type ShopifyRoutesOptions = {
67
+ navigate?: ShopifyGlobal["routes"]["navigate"];
68
+ routes?: ShopifyRouteTemplates;
69
+ };
70
+ type InitializeShopifyScriptsOptions = ShopifyRoutesOptions & {
71
+ webMcp?: boolean;
72
+ };
73
+ type ShopifyScriptsOptions = ShopifyScriptTagsOptions & InitializeShopifyScriptsOptions;
74
+ //#endregion
75
+ export { InitializeShopifyScriptsOptions, ShopifyRoutesOptions, ShopifyScriptTagDescriptor, ShopifyScriptTagDescriptors, ShopifyScriptTagsOptions, ShopifyScriptsAnalyticsConfig, ShopifyScriptsI18n, ShopifyScriptsOptions, ShopifyScriptsShop };
76
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1,43 @@
1
+ //#region src/core/shopify-scripts/utils/cookie-domain.ts
2
+ function normalizeHost(host) {
3
+ return host.replace(/^https?:\/\//, "").split("/")[0]?.split(":")[0]?.replace(/^\./, "").toLowerCase() ?? "";
4
+ }
5
+ function isIpAddress(host) {
6
+ return /^\d{1,3}(?:\.\d{1,3}){3}$/.test(host) || host.includes(":");
7
+ }
8
+ function canUseDomainCookie(domain) {
9
+ if (typeof document === "undefined") return false;
10
+ const name = `hydrogen_domain_probe_${Math.random().toString(36).slice(2)}`;
11
+ const nameValuePair = `${name}=1`;
12
+ const cookie = `${nameValuePair}; domain=${domain}; path=/; SameSite=Lax`;
13
+ const cleanup = `${name}=; domain=${domain}; path=/; max-age=0; SameSite=Lax`;
14
+ try {
15
+ document.cookie = cookie;
16
+ const found = document.cookie.split(";").some((part) => part.trim() === nameValuePair);
17
+ document.cookie = cleanup;
18
+ return found;
19
+ } catch {
20
+ return false;
21
+ }
22
+ }
23
+ /**
24
+ * Finds the broadest wildcard cookie domain the current document can set for a
25
+ * host. Browsers reject public suffixes like `.com` and `.co.uk`, so probing is
26
+ * the only reliable way to find the earliest usable wildcard without shipping a
27
+ * public suffix list.
28
+ */
29
+ function findWritableCookieDomain(host, probe = canUseDomainCookie) {
30
+ const normalizedHost = normalizeHost(host);
31
+ if (!normalizedHost || normalizedHost === "localhost" || isIpAddress(normalizedHost)) return "";
32
+ const parts = normalizedHost.split(".").filter(Boolean);
33
+ if (parts.length < 2) return "";
34
+ for (let index = parts.length - 2; index >= 0; index--) {
35
+ const domain = `.${parts.slice(index).join(".")}`;
36
+ if (probe(domain)) return domain;
37
+ }
38
+ return "";
39
+ }
40
+
41
+ //#endregion
42
+ export { findWritableCookieDomain };
43
+ //# sourceMappingURL=cookie-domain.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-domain.mjs","names":[],"sources":["../../../../../src/core/shopify-scripts/utils/cookie-domain.ts"],"sourcesContent":["function normalizeHost(host: string): string {\n const withoutProtocol = host.replace(/^https?:\\/\\//, \"\");\n return withoutProtocol.split(\"/\")[0]?.split(\":\")[0]?.replace(/^\\./, \"\").toLowerCase() ?? \"\";\n}\n\nfunction isIpAddress(host: string): boolean {\n return /^\\d{1,3}(?:\\.\\d{1,3}){3}$/.test(host) || host.includes(\":\");\n}\n\nfunction canUseDomainCookie(domain: string): boolean {\n if (typeof document === \"undefined\") return false;\n\n const name = `hydrogen_domain_probe_${Math.random().toString(36).slice(2)}`;\n const value = \"1\";\n const nameValuePair = `${name}=${value}`;\n const cookie = `${nameValuePair}; domain=${domain}; path=/; SameSite=Lax`;\n const cleanup = `${name}=; domain=${domain}; path=/; max-age=0; SameSite=Lax`;\n\n try {\n document.cookie = cookie;\n const found = document.cookie.split(\";\").some((part) => part.trim() === nameValuePair);\n document.cookie = cleanup;\n return found;\n } catch {\n return false;\n }\n}\n\n/**\n * Finds the broadest wildcard cookie domain the current document can set for a\n * host. Browsers reject public suffixes like `.com` and `.co.uk`, so probing is\n * the only reliable way to find the earliest usable wildcard without shipping a\n * public suffix list.\n */\nexport function findWritableCookieDomain(\n host: string,\n probe: (domain: string) => boolean = canUseDomainCookie,\n): string {\n const normalizedHost = normalizeHost(host);\n if (!normalizedHost || normalizedHost === \"localhost\" || isIpAddress(normalizedHost)) return \"\";\n\n const parts = normalizedHost.split(\".\").filter(Boolean);\n if (parts.length < 2) return \"\";\n\n for (let index = parts.length - 2; index >= 0; index--) {\n const domain = `.${parts.slice(index).join(\".\")}`;\n if (probe(domain)) return domain;\n }\n\n return \"\";\n}\n"],"mappings":";AAAA,SAAS,cAAc,MAAsB;AAE3C,QADwB,KAAK,QAAQ,gBAAgB,GAC/B,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,QAAQ,OAAO,GAAG,CAAC,aAAa,IAAI;;AAG3F,SAAS,YAAY,MAAuB;AAC1C,QAAO,4BAA4B,KAAK,KAAK,IAAI,KAAK,SAAS,IAAI;;AAGrE,SAAS,mBAAmB,QAAyB;AACnD,KAAI,OAAO,aAAa,YAAa,QAAO;CAE5C,MAAM,OAAO,yBAAyB,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE;CAEzE,MAAM,gBAAgB,GAAG,KAAK;CAC9B,MAAM,SAAS,GAAG,cAAc,WAAW,OAAO;CAClD,MAAM,UAAU,GAAG,KAAK,YAAY,OAAO;AAE3C,KAAI;AACF,WAAS,SAAS;EAClB,MAAM,QAAQ,SAAS,OAAO,MAAM,IAAI,CAAC,MAAM,SAAS,KAAK,MAAM,KAAK,cAAc;AACtF,WAAS,SAAS;AAClB,SAAO;SACD;AACN,SAAO;;;;;;;;;AAUX,SAAgB,yBACd,MACA,QAAqC,oBAC7B;CACR,MAAM,iBAAiB,cAAc,KAAK;AAC1C,KAAI,CAAC,kBAAkB,mBAAmB,eAAe,YAAY,eAAe,CAAE,QAAO;CAE7F,MAAM,QAAQ,eAAe,MAAM,IAAI,CAAC,OAAO,QAAQ;AACvD,KAAI,MAAM,SAAS,EAAG,QAAO;AAE7B,MAAK,IAAI,QAAQ,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS;EACtD,MAAM,SAAS,IAAI,MAAM,MAAM,MAAM,CAAC,KAAK,IAAI;AAC/C,MAAI,MAAM,OAAO,CAAE,QAAO;;AAG5B,QAAO"}
@@ -0,0 +1,8 @@
1
+ //#region src/core/shopify-scripts/utils/inline-script.ts
2
+ function asInlineScript(script) {
3
+ return script;
4
+ }
5
+
6
+ //#endregion
7
+ export { asInlineScript };
8
+ //# sourceMappingURL=inline-script.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline-script.mjs","names":[],"sources":["../../../../../src/core/shopify-scripts/utils/inline-script.ts"],"sourcesContent":["type InlineScriptSource = (...args: never[]) => unknown;\n\ntype InlineScriptFactory<T extends InlineScriptSource> = (...args: Parameters<T>) => string;\n\nexport function asInlineScript<T extends InlineScriptSource>(script: T): InlineScriptFactory<T>;\nexport function asInlineScript(script: InlineScriptSource) {\n return script;\n}\n"],"mappings":";AAKA,SAAgB,eAAe,QAA4B;AACzD,QAAO"}