@shopify/hydrogen 2026.10.0-preview.3 → 2026.10.0-preview.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.md +2 -2
  2. package/dist/cli/index.mjs +131 -29
  3. package/dist/client/client.mjs +2 -2
  4. package/dist/client/errors.d.mts +19 -19
  5. package/dist/client/errors.mjs +19 -16
  6. package/dist/client/errors.mjs.map +1 -1
  7. package/dist/client/types.d.mts +91 -10
  8. package/dist/core/analytics/cart-tracker.d.mts +14 -0
  9. package/dist/core/analytics/cart-tracker.mjs +15 -1
  10. package/dist/core/analytics/cart-tracker.mjs.map +1 -1
  11. package/dist/core/analytics/custom-consent.mjs +12 -0
  12. package/dist/core/analytics/custom-consent.mjs.map +1 -0
  13. package/dist/core/analytics/events.d.mts +7 -0
  14. package/dist/core/analytics/events.mjs +7 -0
  15. package/dist/core/analytics/events.mjs.map +1 -1
  16. package/dist/core/analytics/index.d.mts +1 -1
  17. package/dist/core/analytics/types.d.mts +152 -16
  18. package/dist/core/cart/actions.d.mts +47 -3
  19. package/dist/core/cart/actions.mjs +27 -0
  20. package/dist/core/cart/actions.mjs.map +1 -1
  21. package/dist/core/cart/attach-quantity-input.d.mts +26 -0
  22. package/dist/core/cart/attach-quantity-input.mjs +26 -0
  23. package/dist/core/cart/attach-quantity-input.mjs.map +1 -1
  24. package/dist/core/cart/cart.d.mts +106 -6
  25. package/dist/core/cart/cart.mjs +41 -0
  26. package/dist/core/cart/cart.mjs.map +1 -1
  27. package/dist/core/cart/cookie.d.mts +15 -0
  28. package/dist/core/cart/cookie.mjs +15 -0
  29. package/dist/core/cart/cookie.mjs.map +1 -1
  30. package/dist/core/cart/form.d.mts +61 -0
  31. package/dist/core/cart/form.mjs +18 -0
  32. package/dist/core/cart/form.mjs.map +1 -1
  33. package/dist/core/cart/get-cart.d.mts +43 -2
  34. package/dist/core/cart/get-cart.mjs +33 -0
  35. package/dist/core/cart/get-cart.mjs.map +1 -1
  36. package/dist/core/cart/index.d.mts +1 -1
  37. package/dist/core/cart/quantity.d.mts +17 -0
  38. package/dist/core/cart/quantity.mjs +17 -0
  39. package/dist/core/cart/quantity.mjs.map +1 -1
  40. package/dist/core/cart/queries.d.mts +402 -369
  41. package/dist/core/cart/queries.mjs +2 -1
  42. package/dist/core/cart/queries.mjs.map +1 -1
  43. package/dist/core/cart/server-handlers.d.mts +69 -0
  44. package/dist/core/cart/server-handlers.mjs +2 -10
  45. package/dist/core/cart/server-handlers.mjs.map +1 -1
  46. package/dist/core/cart/state.d.mts +133 -0
  47. package/dist/core/cart/state.mjs +8 -0
  48. package/dist/core/cart/state.mjs.map +1 -1
  49. package/dist/core/collection/collection.d.mts +18 -2
  50. package/dist/core/collection/collection.mjs +11 -0
  51. package/dist/core/collection/collection.mjs.map +1 -1
  52. package/dist/core/collection/index.d.mts +1 -1
  53. package/dist/core/collection/reconciler.d.mts +13 -4
  54. package/dist/core/collection/reconciler.mjs.map +1 -1
  55. package/dist/core/collection/state.d.mts +7 -2
  56. package/dist/core/collection/state.mjs.map +1 -1
  57. package/dist/core/collection/url.d.mts +3 -0
  58. package/dist/core/collection/url.mjs.map +1 -1
  59. package/dist/core/constants.d.mts +1 -1
  60. package/dist/core/constants.mjs +2 -2
  61. package/dist/core/constants.mjs.map +1 -1
  62. package/dist/core/headers.mjs +2 -2
  63. package/dist/core/headers.mjs.map +1 -1
  64. package/dist/core/index.d.mts +5 -5
  65. package/dist/core/logging/logging.mjs.map +1 -1
  66. package/dist/core/money/format.mjs +6 -3
  67. package/dist/core/money/format.mjs.map +1 -1
  68. package/dist/core/observable.mjs +0 -3
  69. package/dist/core/observable.mjs.map +1 -1
  70. package/dist/core/predictive-search/form.d.mts +1 -0
  71. package/dist/core/predictive-search/form.mjs +1 -0
  72. package/dist/core/predictive-search/form.mjs.map +1 -1
  73. package/dist/core/predictive-search/index.d.mts +1 -1
  74. package/dist/core/predictive-search/queries.d.mts +40 -4
  75. package/dist/core/predictive-search/queries.mjs +7 -1
  76. package/dist/core/predictive-search/queries.mjs.map +1 -1
  77. package/dist/core/predictive-search/search.d.mts +43 -10
  78. package/dist/core/predictive-search/search.mjs +34 -0
  79. package/dist/core/predictive-search/search.mjs.map +1 -1
  80. package/dist/core/predictive-search/server-handlers.d.mts +31 -5
  81. package/dist/core/predictive-search/server-handlers.mjs +5 -3
  82. package/dist/core/predictive-search/server-handlers.mjs.map +1 -1
  83. package/dist/core/predictive-search/store.d.mts +3 -1
  84. package/dist/core/predictive-search/store.mjs.map +1 -1
  85. package/dist/core/predictive-search/url.d.mts +50 -8
  86. package/dist/core/predictive-search/url.mjs +9 -0
  87. package/dist/core/predictive-search/url.mjs.map +1 -1
  88. package/dist/core/product/options.d.mts +2 -2
  89. package/dist/core/product/options.mjs +2 -2
  90. package/dist/core/product/options.mjs.map +1 -1
  91. package/dist/core/product/product-form.d.mts +33 -1
  92. package/dist/core/product/product-form.mjs +30 -0
  93. package/dist/core/product/product-form.mjs.map +1 -1
  94. package/dist/core/product/state.d.mts +41 -0
  95. package/dist/core/product/url.d.mts +6 -0
  96. package/dist/core/product/url.mjs.map +1 -1
  97. package/dist/core/request-context.d.mts +2 -5
  98. package/dist/core/request-context.mjs +13 -39
  99. package/dist/core/request-context.mjs.map +1 -1
  100. package/dist/core/request-routing/handle-shopify-routes.mjs +2 -1
  101. package/dist/core/request-routing/handle-shopify-routes.mjs.map +1 -1
  102. package/dist/core/request-routing/interceptors/ajax-api.mjs +1 -1
  103. package/dist/core/request-routing/interceptors/api-proxy.mjs +1 -1
  104. package/dist/core/request-routing/interceptors/checkout.mjs +19 -6
  105. package/dist/core/request-routing/interceptors/checkout.mjs.map +1 -1
  106. package/dist/core/request-routing/interceptors/mcp-proxy.mjs +1 -1
  107. package/dist/core/request-routing/interceptors/proxy.mjs +20 -5
  108. package/dist/core/request-routing/interceptors/proxy.mjs.map +1 -1
  109. package/dist/core/request-routing/interceptors/query-param-redirect.mjs +5 -11
  110. package/dist/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -1
  111. package/dist/core/request-routing/interceptors/sfapi-proxy.mjs +19 -1
  112. package/dist/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -1
  113. package/dist/core/request-routing/interceptors/ucp-mcp-proxy.mjs +1 -1
  114. package/dist/core/request-routing/interceptors/well-known.mjs +1 -1
  115. package/dist/core/shopify-scripts/analytics.mjs +2 -2
  116. package/dist/core/shopify-scripts/analytics.mjs.map +1 -1
  117. package/dist/core/shopify-scripts/constants.mjs +1 -1
  118. package/dist/core/shopify-scripts/constants.mjs.map +1 -1
  119. package/dist/core/shopify-scripts/global.mjs +5 -1
  120. package/dist/core/shopify-scripts/global.mjs.map +1 -1
  121. package/dist/core/shopify-scripts/initialize.d.mts +1 -0
  122. package/dist/core/shopify-scripts/initialize.mjs +10 -3
  123. package/dist/core/shopify-scripts/initialize.mjs.map +1 -1
  124. package/dist/core/shopify-scripts/types.d.mts +1 -0
  125. package/dist/core/url.mjs +20 -2
  126. package/dist/core/url.mjs.map +1 -1
  127. package/dist/customer-account/client.d.mts +128 -4
  128. package/dist/customer-account/client.mjs +27 -1
  129. package/dist/customer-account/client.mjs.map +1 -1
  130. package/dist/customer-account/errors.d.mts +46 -0
  131. package/dist/customer-account/errors.mjs +46 -0
  132. package/dist/customer-account/errors.mjs.map +1 -1
  133. package/dist/customer-account/graphql.d.mts +68 -0
  134. package/dist/customer-account/graphql.mjs +47 -0
  135. package/dist/customer-account/graphql.mjs.map +1 -1
  136. package/dist/customer-account/session.d.mts +114 -23
  137. package/dist/customer-account/session.mjs +27 -12
  138. package/dist/customer-account/session.mjs.map +1 -1
  139. package/dist/customer-account/type-resolver.d.mts +23 -0
  140. package/dist/customer-account-api-types.d.ts +570 -374
  141. package/dist/customer-account.schema.json +2981 -1527
  142. package/dist/development/client/client.mjs +2 -2
  143. package/dist/development/client/errors.d.mts +19 -19
  144. package/dist/development/client/errors.mjs +20 -20
  145. package/dist/development/client/errors.mjs.map +1 -1
  146. package/dist/development/client/types.d.mts +91 -10
  147. package/dist/development/core/analytics/cart-tracker.d.mts +14 -0
  148. package/dist/development/core/analytics/cart-tracker.mjs +15 -1
  149. package/dist/development/core/analytics/cart-tracker.mjs.map +1 -1
  150. package/dist/development/core/analytics/custom-consent.mjs +12 -0
  151. package/dist/development/core/analytics/custom-consent.mjs.map +1 -0
  152. package/dist/development/core/analytics/events.d.mts +7 -0
  153. package/dist/development/core/analytics/events.mjs +7 -0
  154. package/dist/development/core/analytics/events.mjs.map +1 -1
  155. package/dist/development/core/analytics/index.d.mts +1 -1
  156. package/dist/development/core/analytics/types.d.mts +152 -16
  157. package/dist/development/core/cart/actions.d.mts +47 -3
  158. package/dist/development/core/cart/actions.mjs +27 -0
  159. package/dist/development/core/cart/actions.mjs.map +1 -1
  160. package/dist/development/core/cart/attach-quantity-input.d.mts +26 -0
  161. package/dist/development/core/cart/attach-quantity-input.mjs +26 -0
  162. package/dist/development/core/cart/attach-quantity-input.mjs.map +1 -1
  163. package/dist/development/core/cart/cart.d.mts +106 -6
  164. package/dist/development/core/cart/cart.mjs +41 -0
  165. package/dist/development/core/cart/cart.mjs.map +1 -1
  166. package/dist/development/core/cart/cookie.d.mts +15 -0
  167. package/dist/development/core/cart/cookie.mjs +15 -0
  168. package/dist/development/core/cart/cookie.mjs.map +1 -1
  169. package/dist/development/core/cart/form.d.mts +61 -0
  170. package/dist/development/core/cart/form.mjs +18 -0
  171. package/dist/development/core/cart/form.mjs.map +1 -1
  172. package/dist/development/core/cart/get-cart.d.mts +43 -2
  173. package/dist/development/core/cart/get-cart.mjs +33 -0
  174. package/dist/development/core/cart/get-cart.mjs.map +1 -1
  175. package/dist/development/core/cart/index.d.mts +1 -1
  176. package/dist/development/core/cart/quantity.d.mts +17 -0
  177. package/dist/development/core/cart/quantity.mjs +17 -0
  178. package/dist/development/core/cart/quantity.mjs.map +1 -1
  179. package/dist/development/core/cart/queries.d.mts +402 -369
  180. package/dist/development/core/cart/queries.mjs +2 -1
  181. package/dist/development/core/cart/queries.mjs.map +1 -1
  182. package/dist/development/core/cart/server-handlers.d.mts +69 -0
  183. package/dist/development/core/cart/server-handlers.mjs +2 -10
  184. package/dist/development/core/cart/server-handlers.mjs.map +1 -1
  185. package/dist/development/core/cart/state.d.mts +133 -0
  186. package/dist/development/core/cart/state.mjs +8 -0
  187. package/dist/development/core/cart/state.mjs.map +1 -1
  188. package/dist/development/core/collection/collection.d.mts +18 -2
  189. package/dist/development/core/collection/collection.mjs +11 -0
  190. package/dist/development/core/collection/collection.mjs.map +1 -1
  191. package/dist/development/core/collection/index.d.mts +1 -1
  192. package/dist/development/core/collection/reconciler.d.mts +13 -4
  193. package/dist/development/core/collection/reconciler.mjs.map +1 -1
  194. package/dist/development/core/collection/state.d.mts +7 -2
  195. package/dist/development/core/collection/state.mjs.map +1 -1
  196. package/dist/development/core/collection/url.d.mts +3 -0
  197. package/dist/development/core/collection/url.mjs.map +1 -1
  198. package/dist/development/core/constants.mjs +1 -1
  199. package/dist/development/core/constants.mjs.map +1 -1
  200. package/dist/development/core/development.d.mts +5 -5
  201. package/dist/development/core/headers.mjs +2 -2
  202. package/dist/development/core/headers.mjs.map +1 -1
  203. package/dist/development/core/index.d.mts +4 -4
  204. package/dist/development/core/logging/logging.mjs.map +1 -1
  205. package/dist/development/core/money/format.mjs +6 -3
  206. package/dist/development/core/money/format.mjs.map +1 -1
  207. package/dist/development/core/observable.mjs +0 -3
  208. package/dist/development/core/observable.mjs.map +1 -1
  209. package/dist/development/core/predictive-search/form.d.mts +1 -0
  210. package/dist/development/core/predictive-search/form.mjs +1 -0
  211. package/dist/development/core/predictive-search/form.mjs.map +1 -1
  212. package/dist/development/core/predictive-search/index.d.mts +1 -1
  213. package/dist/development/core/predictive-search/queries.d.mts +40 -4
  214. package/dist/development/core/predictive-search/queries.mjs +7 -1
  215. package/dist/development/core/predictive-search/queries.mjs.map +1 -1
  216. package/dist/development/core/predictive-search/search.d.mts +43 -10
  217. package/dist/development/core/predictive-search/search.mjs +34 -0
  218. package/dist/development/core/predictive-search/search.mjs.map +1 -1
  219. package/dist/development/core/predictive-search/server-handlers.d.mts +31 -5
  220. package/dist/development/core/predictive-search/server-handlers.mjs +5 -3
  221. package/dist/development/core/predictive-search/server-handlers.mjs.map +1 -1
  222. package/dist/development/core/predictive-search/store.d.mts +3 -1
  223. package/dist/development/core/predictive-search/store.mjs.map +1 -1
  224. package/dist/development/core/predictive-search/url.d.mts +50 -8
  225. package/dist/development/core/predictive-search/url.mjs +9 -0
  226. package/dist/development/core/predictive-search/url.mjs.map +1 -1
  227. package/dist/development/core/product/options.d.mts +2 -2
  228. package/dist/development/core/product/options.mjs +2 -2
  229. package/dist/development/core/product/options.mjs.map +1 -1
  230. package/dist/development/core/product/product-form.d.mts +33 -1
  231. package/dist/development/core/product/product-form.mjs +30 -0
  232. package/dist/development/core/product/product-form.mjs.map +1 -1
  233. package/dist/development/core/product/state.d.mts +41 -0
  234. package/dist/development/core/product/url.d.mts +6 -0
  235. package/dist/development/core/product/url.mjs.map +1 -1
  236. package/dist/development/core/request-context.d.mts +2 -5
  237. package/dist/development/core/request-context.mjs +13 -39
  238. package/dist/development/core/request-context.mjs.map +1 -1
  239. package/dist/development/core/request-routing/handle-shopify-routes.mjs +2 -1
  240. package/dist/development/core/request-routing/handle-shopify-routes.mjs.map +1 -1
  241. package/dist/development/core/request-routing/interceptors/ajax-api.mjs +1 -1
  242. package/dist/development/core/request-routing/interceptors/api-proxy.mjs +1 -1
  243. package/dist/development/core/request-routing/interceptors/checkout.mjs +19 -6
  244. package/dist/development/core/request-routing/interceptors/checkout.mjs.map +1 -1
  245. package/dist/development/core/request-routing/interceptors/mcp-proxy.mjs +1 -1
  246. package/dist/development/core/request-routing/interceptors/proxy.mjs +20 -5
  247. package/dist/development/core/request-routing/interceptors/proxy.mjs.map +1 -1
  248. package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs +5 -11
  249. package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -1
  250. package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs +19 -1
  251. package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -1
  252. package/dist/development/core/request-routing/interceptors/ucp-mcp-proxy.mjs +1 -1
  253. package/dist/development/core/request-routing/interceptors/well-known.mjs +1 -1
  254. package/dist/development/core/shopify-scripts/analytics.mjs +2 -2
  255. package/dist/development/core/shopify-scripts/analytics.mjs.map +1 -1
  256. package/dist/development/core/shopify-scripts/constants.mjs +1 -1
  257. package/dist/development/core/shopify-scripts/constants.mjs.map +1 -1
  258. package/dist/development/core/shopify-scripts/global.mjs +5 -1
  259. package/dist/development/core/shopify-scripts/global.mjs.map +1 -1
  260. package/dist/development/core/shopify-scripts/initialize.d.mts +1 -0
  261. package/dist/development/core/shopify-scripts/initialize.mjs +10 -3
  262. package/dist/development/core/shopify-scripts/initialize.mjs.map +1 -1
  263. package/dist/development/core/shopify-scripts/types.d.mts +1 -0
  264. package/dist/development/core/url.mjs +20 -2
  265. package/dist/development/core/url.mjs.map +1 -1
  266. package/dist/development/customer-account/session.d.mts +69 -13
  267. package/dist/development/customer-account/session.mjs +4 -0
  268. package/dist/development/customer-account/session.mjs.map +1 -1
  269. package/dist/development/globals.d.mts +2 -4
  270. package/dist/development/graphql/generated/graphql-env.d.mts +459 -16
  271. package/dist/development/graphql/generated/storefront-api-types.d.mts +1 -1
  272. package/dist/development/graphql/graphql.d.mts +33 -0
  273. package/dist/development/graphql/graphql.mjs +30 -0
  274. package/dist/development/graphql/graphql.mjs.map +1 -1
  275. package/dist/development/graphql/type-resolver.d.mts +14 -0
  276. package/dist/development/react/cart.d.mts +85 -14
  277. package/dist/development/react/cart.mjs +123 -3
  278. package/dist/development/react/cart.mjs.map +1 -1
  279. package/dist/development/react/collection.d.mts +2 -4
  280. package/dist/development/react/collection.mjs.map +1 -1
  281. package/dist/development/react/index.d.mts +7 -5
  282. package/dist/development/react/index.mjs +2 -2
  283. package/dist/development/react/predictive-search.d.mts +68 -7
  284. package/dist/development/react/predictive-search.mjs +54 -12
  285. package/dist/development/react/predictive-search.mjs.map +1 -1
  286. package/dist/development/react/product.d.mts +1 -0
  287. package/dist/development/react/product.mjs +5 -2
  288. package/dist/development/react/product.mjs.map +1 -1
  289. package/dist/development/react/shopify-scripts.mjs +1 -0
  290. package/dist/development/react/shopify-scripts.mjs.map +1 -1
  291. package/dist/development/vue/cart.d.mts +85 -6
  292. package/dist/development/vue/cart.mjs +95 -0
  293. package/dist/development/vue/cart.mjs.map +1 -1
  294. package/dist/development/vue/collection.d.mts +83 -5
  295. package/dist/development/vue/collection.mjs +52 -0
  296. package/dist/development/vue/collection.mjs.map +1 -1
  297. package/dist/development/vue/index.d.mts +6 -4
  298. package/dist/development/vue/predictive-search.d.mts +53 -6
  299. package/dist/development/vue/predictive-search.mjs +33 -0
  300. package/dist/development/vue/predictive-search.mjs.map +1 -1
  301. package/dist/development/vue/product.d.mts +6 -2
  302. package/dist/development/vue/product.mjs.map +1 -1
  303. package/dist/development/vue/shopify-scripts.d.mts +21 -3
  304. package/dist/development/vue/shopify-scripts.mjs +1 -0
  305. package/dist/development/vue/shopify-scripts.mjs.map +1 -1
  306. package/dist/globals.d.mts +2 -4
  307. package/dist/graphql/generated/customer-account-graphql-env.d.mts +1717 -1090
  308. package/dist/graphql/generated/graphql-env.d.mts +459 -16
  309. package/dist/graphql/generated/storefront-api-types.d.mts +1 -1
  310. package/dist/graphql/graphql.d.mts +33 -0
  311. package/dist/graphql/graphql.mjs +30 -0
  312. package/dist/graphql/graphql.mjs.map +1 -1
  313. package/dist/graphql/type-resolver.d.mts +14 -0
  314. package/dist/react/cart.d.mts +85 -14
  315. package/dist/react/cart.mjs +123 -3
  316. package/dist/react/cart.mjs.map +1 -1
  317. package/dist/react/collection.d.mts +2 -4
  318. package/dist/react/collection.mjs.map +1 -1
  319. package/dist/react/index.d.mts +7 -5
  320. package/dist/react/index.mjs +2 -2
  321. package/dist/react/predictive-search.d.mts +68 -7
  322. package/dist/react/predictive-search.mjs +54 -12
  323. package/dist/react/predictive-search.mjs.map +1 -1
  324. package/dist/react/product.d.mts +1 -0
  325. package/dist/react/product.mjs +5 -2
  326. package/dist/react/product.mjs.map +1 -1
  327. package/dist/react/shopify-scripts.mjs +1 -0
  328. package/dist/react/shopify-scripts.mjs.map +1 -1
  329. package/dist/storefront-api-types.d.ts +165 -20
  330. package/dist/storefront.schema.json +782 -57
  331. package/dist/vite/customer-account.mjs +191 -0
  332. package/dist/vite/customer-account.mjs.map +1 -0
  333. package/dist/vite/local-https.mjs +13 -29
  334. package/dist/vite/local-https.mjs.map +1 -1
  335. package/dist/vite/mkcert.mjs +1 -1
  336. package/dist/vue/cart.d.mts +85 -6
  337. package/dist/vue/cart.mjs +95 -0
  338. package/dist/vue/cart.mjs.map +1 -1
  339. package/dist/vue/collection.d.mts +83 -5
  340. package/dist/vue/collection.mjs +52 -0
  341. package/dist/vue/collection.mjs.map +1 -1
  342. package/dist/vue/index.d.mts +6 -4
  343. package/dist/vue/predictive-search.d.mts +53 -6
  344. package/dist/vue/predictive-search.mjs +33 -0
  345. package/dist/vue/predictive-search.mjs.map +1 -1
  346. package/dist/vue/product.d.mts +6 -2
  347. package/dist/vue/product.mjs.map +1 -1
  348. package/dist/vue/shopify-scripts.d.mts +21 -3
  349. package/dist/vue/shopify-scripts.mjs +1 -0
  350. package/dist/vue/shopify-scripts.mjs.map +1 -1
  351. package/package.json +5 -2
  352. package/skills/hydrogen-analytics/SKILL.md +6 -5
  353. package/skills/hydrogen-analytics/references/custom-consent.md +52 -0
  354. package/skills/hydrogen-analytics/references/react.md +1 -1
  355. package/skills/hydrogen-customer-account/SKILL.md +3 -3
  356. package/skills/hydrogen-local-https/SKILL.md +22 -7
  357. package/skills/hydrogen-request-handlers/SKILL.md +5 -5
  358. package/skills/hydrogen-request-handlers/references/nuxt.md +0 -6
  359. package/skills/hydrogen-setup/references/analytics.md +24 -23
  360. package/skills/hydrogen-setup/steps/1-inspect-app.md +1 -1
  361. package/skills/hydrogen-setup/steps/2-scaffold.md +1 -1
  362. package/skills/hydrogen-smoke-test/SKILL.md +2 -2
  363. package/skills/hydrogen-storefront-client/SKILL.md +0 -2
  364. package/ts-plugin/package.json +5 -0
  365. package/dist/core/shopify-scripts/deprecated-cookies.mjs +0 -98
  366. package/dist/core/shopify-scripts/deprecated-cookies.mjs.map +0 -1
  367. package/dist/core/shopify-scripts/utils/cookie-domain.mjs +0 -43
  368. package/dist/core/shopify-scripts/utils/cookie-domain.mjs.map +0 -1
  369. package/dist/core/shopify-scripts/utils/tracking-values.mjs +0 -65
  370. package/dist/core/shopify-scripts/utils/tracking-values.mjs.map +0 -1
  371. package/dist/core/shopify-scripts/utils/uuid.mjs +0 -17
  372. package/dist/core/shopify-scripts/utils/uuid.mjs.map +0 -1
  373. package/dist/development/core/shopify-scripts/deprecated-cookies.mjs +0 -98
  374. package/dist/development/core/shopify-scripts/deprecated-cookies.mjs.map +0 -1
  375. package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs +0 -43
  376. package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs.map +0 -1
  377. package/dist/development/core/shopify-scripts/utils/tracking-values.mjs +0 -65
  378. package/dist/development/core/shopify-scripts/utils/tracking-values.mjs.map +0 -1
  379. package/dist/development/core/shopify-scripts/utils/uuid.mjs +0 -17
  380. package/dist/development/core/shopify-scripts/utils/uuid.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"attach-quantity-input.mjs","names":[],"sources":["../../../src/core/cart/attach-quantity-input.ts"],"sourcesContent":["const FIRST_SUBMIT_BUTTON_SELECTOR = \"button:not([type=button])\";\n\nexport function attachQuantityInput(\n inputEl: HTMLInputElement,\n formEl: HTMLFormElement,\n): () => void {\n const firstSubmitButton = formEl.querySelector(\n FIRST_SUBMIT_BUTTON_SELECTOR,\n ) as HTMLButtonElement | null;\n\n if (\n !firstSubmitButton ||\n firstSubmitButton.name !== \"intent\" ||\n firstSubmitButton.value !== \"set\"\n ) {\n throw new Error(\n `The first button in cart form must have a name of \"intent\" and value of \"set\". Your UI will not behave as expected.`,\n { cause: formEl },\n );\n }\n\n const handleChange = (e: Event) => {\n if (formEl.isConnected && e.target === inputEl) {\n formEl.requestSubmit(firstSubmitButton);\n }\n };\n\n inputEl.addEventListener(\"change\", handleChange);\n\n return () => {\n inputEl.removeEventListener(\"change\", handleChange);\n };\n}\n"],"mappings":";AAAA,MAAM,+BAA+B;AAErC,SAAgB,oBACd,SACA,QACY;CACZ,MAAM,oBAAoB,OAAO,cAC/B,6BACD;AAED,KACE,CAAC,qBACD,kBAAkB,SAAS,YAC3B,kBAAkB,UAAU,MAE5B,OAAM,IAAI,MACR,uHACA,EAAE,OAAO,QAAQ,CAClB;CAGH,MAAM,gBAAgB,MAAa;AACjC,MAAI,OAAO,eAAe,EAAE,WAAW,QACrC,QAAO,cAAc,kBAAkB;;AAI3C,SAAQ,iBAAiB,UAAU,aAAa;AAEhD,cAAa;AACX,UAAQ,oBAAoB,UAAU,aAAa"}
1
+ {"version":3,"file":"attach-quantity-input.mjs","names":[],"sources":["../../../src/core/cart/attach-quantity-input.ts"],"sourcesContent":["const FIRST_SUBMIT_BUTTON_SELECTOR = \"button:not([type=button])\";\n\n/**\n * Attaches interactive quantity behavior to a DOM `<input>` inside a cart form.\n *\n * When the input's value changes, the form is automatically submitted via the\n * first submit button (which must carry `name=\"intent\" value=\"set\"`). Returns\n * a cleanup function that removes the event listener.\n *\n * The form must contain a `\"set\"` button as its first submit element — use\n * `register(\"set\")` from `createCartFormRegister` to produce it.\n *\n * @throws If the form's first submit button is not a `name=\"intent\" value=\"set\"` button.\n *\n * @example\n * ```ts\n * const input = document.querySelector<HTMLInputElement>('input[name=\"quantity\"]');\n * const form = input?.closest('form');\n *\n * if (input && form) {\n * const detach = attachQuantityInput(input, form);\n * // Input changes now auto-submit the form\n *\n * // Clean up when unmounting\n * detach();\n * }\n * ```\n */\nexport function attachQuantityInput(\n inputEl: HTMLInputElement,\n formEl: HTMLFormElement,\n): () => void {\n const firstSubmitButton = formEl.querySelector(\n FIRST_SUBMIT_BUTTON_SELECTOR,\n ) as HTMLButtonElement | null;\n\n if (\n !firstSubmitButton ||\n firstSubmitButton.name !== \"intent\" ||\n firstSubmitButton.value !== \"set\"\n ) {\n throw new Error(\n `The first button in cart form must have a name of \"intent\" and value of \"set\". Your UI will not behave as expected.`,\n { cause: formEl },\n );\n }\n\n const handleChange = (e: Event) => {\n if (formEl.isConnected && e.target === inputEl) {\n formEl.requestSubmit(firstSubmitButton);\n }\n };\n\n inputEl.addEventListener(\"change\", handleChange);\n\n return () => {\n inputEl.removeEventListener(\"change\", handleChange);\n };\n}\n"],"mappings":";AAAA,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BrC,SAAgB,oBACd,SACA,QACY;CACZ,MAAM,oBAAoB,OAAO,cAC/B,6BACD;AAED,KACE,CAAC,qBACD,kBAAkB,SAAS,YAC3B,kBAAkB,UAAU,MAE5B,OAAM,IAAI,MACR,uHACA,EAAE,OAAO,QAAQ,CAClB;CAGH,MAAM,gBAAgB,MAAa;AACjC,MAAI,OAAO,eAAe,EAAE,WAAW,QACrC,QAAO,cAAc,kBAAkB;;AAI3C,SAAQ,iBAAiB,UAAU,aAAa;AAEhD,cAAa;AACX,UAAQ,oBAAoB,UAAU,aAAa"}
@@ -1,37 +1,137 @@
1
1
  import { CartData, CartState } from "./state.mjs";
2
2
 
3
3
  //#region src/core/cart/cart.d.ts
4
+ /** Timeout (in milliseconds) for cart loads and mutations. */
4
5
  declare const STANDARD_ACTION_TIMEOUT_IN_MS = 30000;
6
+ /**
7
+ * Error thrown when the cart endpoint responds with a non-2xx status.
8
+ *
9
+ * Carries the HTTP {@link CartNetworkError.status | status} code so callers
10
+ * can distinguish transient failures from permanent ones.
11
+ */
5
12
  declare class CartNetworkError extends Error {
6
13
  readonly status: number;
7
14
  constructor(status: number);
8
15
  }
16
+ /**
17
+ * A reactive, framework-agnostic cart state machine.
18
+ *
19
+ * The store manages optimistic mutations and server reconciliation — the client's
20
+ * *intent*. Cart-level costs and totals are always server-authoritative, but
21
+ * line-level data (quantity, estimated cost) and discount applicability are
22
+ * projected optimistically until the server response arrives.
23
+ *
24
+ * Mutations are dispatched via {@link CartStore.handleFormSubmit} (from HTML
25
+ * forms) or through Shopify Standard Action `shopify:cart:*` events.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * const store = createCartStore({
30
+ * initialData: { cart: loaderData.cart },
31
+ * });
32
+ *
33
+ * store.connect();
34
+ *
35
+ * const unsubscribe = store.subscribe((state) => {
36
+ * renderCart(state.data);
37
+ * });
38
+ *
39
+ * store.destroy();
40
+ * ```
41
+ */
9
42
  type CartStore = {
10
- connect(): void;
11
- destroy(): void;
12
- hydrate(data: CartData): void;
43
+ /**
44
+ * Activates the store — starts listening for Shopify standard action events
45
+ * and triggers the initial cart load if no `initialData` was provided.
46
+ * Idempotent; no-op without `document` (SSR-safe).
47
+ */
48
+ connect(): void; /** Tears down the store — cancels in-flight requests, removes event listeners, releases resources. */
49
+ destroy(): void; /** Replaces the settled cart data with a fresh server response. */
50
+ hydrate(data: CartData): void; /** Returns the current {@link CartState}, with optimistic projections applied on top of settled data. */
13
51
  getState(): CartState;
14
- subscribe(listener: (state: CartState) => void): () => void;
52
+ /**
53
+ * Registers a listener invoked on every state change. Returns an unsubscribe function.
54
+ * Compatible with React's `useSyncExternalStore`.
55
+ *
56
+ * @param listener - Callback receiving the new {@link CartState} snapshot
57
+ */
58
+ subscribe(listener: (state: CartState) => void): () => void; /** Triggers a full cart load from the server endpoint. */
15
59
  fetch(): Promise<void>;
16
60
  /**
17
61
  * Reconciles the cart after an out-of-band mutation: revalidates the current
18
62
  * cart, or loads one when none is present yet (e.g. just created server-side).
19
63
  */
20
- refresh(): void;
64
+ refresh(): void; /** Resets the store — aborts in-flight requests, clears data and errors, and re-fetches when connected. */
21
65
  reset(): void;
66
+ /**
67
+ * Intercepts a native `SubmitEvent` from a cart form, parses the intent and
68
+ * field values, and dispatches the matching transaction.
69
+ *
70
+ * The submitter's `value` attribute determines the action — `"add"`,
71
+ * `"increase"`, `"decrease"`, `"remove"`, `"set"`, `"discount-apply"`,
72
+ * `"discount-remove"`, `"note-update"`, or `"attributes-update"`. An empty
73
+ * value with a `merchandiseId` field is treated as `"add"`.
74
+ *
75
+ * The returned promise rejects with a `TypeError` if `event.target` is not
76
+ * a form or `event.submitter` is missing, and with an `Error` if the
77
+ * submitter's value is not a recognized intent.
78
+ */
22
79
  handleFormSubmit(event: SubmitEvent, eventDetail?: Record<string, unknown>): Promise<void>;
23
80
  };
81
+ /** Actions for reconciling cart state after updates outside Standard Actions. */
82
+ type CartActions = Pick<CartStore, "refresh">;
24
83
  type CartInitialData<TData extends CartData = CartData> = {
25
84
  cart: TData | null;
26
85
  errors?: Array<{
27
86
  message: string;
28
87
  }>;
29
88
  };
89
+ /** Options for {@link createCartStore}. */
30
90
  type CreateCartStoreOptions<TData extends CartData = CartData> = {
91
+ /**
92
+ * Server-loaded cart data to hydrate the store with on creation.
93
+ *
94
+ * Accepts a synchronous value or a `PromiseLike` for streamed/deferred data.
95
+ * When omitted, the store starts empty and loads the cart on {@link CartStore.connect}.
96
+ */
31
97
  initialData?: CartInitialData<TData> | PromiseLike<CartInitialData<TData>>;
32
98
  };
99
+ /**
100
+ * Creates a new {@link CartStore} for the given initial data.
101
+ *
102
+ * The store is inert until {@link CartStore.connect} is called — no network
103
+ * requests are made and no event listeners are attached at creation time.
104
+ * Framework adapters call `connect()` on mount and `destroy()` on unmount.
105
+ *
106
+ * @example
107
+ * ```ts
108
+ * // With synchronous loader data
109
+ * const store = createCartStore({
110
+ * initialData: { cart: loaderData.cart },
111
+ * });
112
+ *
113
+ * // With deferred/streamed data
114
+ * const store = createCartStore({
115
+ * initialData: cartPromise,
116
+ * });
117
+ *
118
+ * // Empty — loads the cart on connect()
119
+ * const store = createCartStore();
120
+ * ```
121
+ */
33
122
  declare function createCartStore<TData extends CartData = CartData>(options?: CreateCartStoreOptions<TData>): CartStore;
123
+ /**
124
+ * Routes cart loads and mutations to a custom endpoint instead of the
125
+ * Standard Actions default handler.
126
+ *
127
+ * Logs a warning if called again with a different endpoint.
128
+ *
129
+ * @example
130
+ * ```ts
131
+ * configureCartEndpoint("/storefront/cart");
132
+ * ```
133
+ */
34
134
  declare function configureCartEndpoint(endpoint: string): void;
35
135
  //#endregion
36
- export { CartNetworkError, CartStore, CreateCartStoreOptions, STANDARD_ACTION_TIMEOUT_IN_MS, configureCartEndpoint, createCartStore };
136
+ export { CartActions, CartNetworkError, CartStore, CreateCartStoreOptions, STANDARD_ACTION_TIMEOUT_IN_MS, configureCartEndpoint, createCartStore };
37
137
  //# sourceMappingURL=cart.d.mts.map
@@ -23,7 +23,14 @@ const EMPTY_QUANTITY = 0;
23
23
  const FNV1A_OFFSET_BASIS = 2166136261;
24
24
  const FNV1A_PRIME = 16777619;
25
25
  const CART_REVALIDATION_ERROR_MESSAGE = "Something went wrong refreshing your cart. Please try again.";
26
+ /** Timeout (in milliseconds) for cart loads and mutations. */
26
27
  const STANDARD_ACTION_TIMEOUT_IN_MS = 3e4;
28
+ /**
29
+ * Error thrown when the cart endpoint responds with a non-2xx status.
30
+ *
31
+ * Carries the HTTP {@link CartNetworkError.status | status} code so callers
32
+ * can distinguish transient failures from permanent ones.
33
+ */
27
34
  var CartNetworkError = class extends Error {
28
35
  status;
29
36
  constructor(status) {
@@ -1369,6 +1376,29 @@ function loadCartInStore(store, cartPromise) {
1369
1376
  store.observable.setReadyState(state);
1370
1377
  return promise;
1371
1378
  }
1379
+ /**
1380
+ * Creates a new {@link CartStore} for the given initial data.
1381
+ *
1382
+ * The store is inert until {@link CartStore.connect} is called — no network
1383
+ * requests are made and no event listeners are attached at creation time.
1384
+ * Framework adapters call `connect()` on mount and `destroy()` on unmount.
1385
+ *
1386
+ * @example
1387
+ * ```ts
1388
+ * // With synchronous loader data
1389
+ * const store = createCartStore({
1390
+ * initialData: { cart: loaderData.cart },
1391
+ * });
1392
+ *
1393
+ * // With deferred/streamed data
1394
+ * const store = createCartStore({
1395
+ * initialData: cartPromise,
1396
+ * });
1397
+ *
1398
+ * // Empty — loads the cart on connect()
1399
+ * const store = createCartStore();
1400
+ * ```
1401
+ */
1372
1402
  function createCartStore(options = {}) {
1373
1403
  const initialData = options.initialData;
1374
1404
  const asyncInitialData = isPromiseLike(initialData);
@@ -1521,6 +1551,17 @@ async function handleFormSubmitInStore(store, handlers, event, eventDetail) {
1521
1551
  })) });
1522
1552
  throw new Error(`Unknown cart form intent: "${intent}"`);
1523
1553
  }
1554
+ /**
1555
+ * Routes cart loads and mutations to a custom endpoint instead of the
1556
+ * Standard Actions default handler.
1557
+ *
1558
+ * Logs a warning if called again with a different endpoint.
1559
+ *
1560
+ * @example
1561
+ * ```ts
1562
+ * configureCartEndpoint("/storefront/cart");
1563
+ * ```
1564
+ */
1524
1565
  function configureCartEndpoint(endpoint) {
1525
1566
  if (configuredCartEndpoint === endpoint) return;
1526
1567
  if (configuredCartEndpoint !== null) log.warn(`configureCartEndpoint called with "${endpoint}" but already configured with "${configuredCartEndpoint}".`);