@shopify/hydrogen 2026.4.5 → 2026.10.0-preview.2

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 (764) hide show
  1. package/README.md +73 -13
  2. package/bin/hydrogen.mjs +7 -0
  3. package/dist/cli/index.mjs +647 -0
  4. package/dist/client/client.d.mts +34 -0
  5. package/dist/client/client.mjs +206 -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 +37 -0
  50. package/dist/core/cart/cart.mjs +1707 -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 +71 -0
  87. package/dist/core/collection/url.mjs +376 -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 +43 -0
  93. package/dist/core/headers.mjs.map +1 -0
  94. package/dist/core/index.d.mts +56 -0
  95. package/dist/core/index.mjs +45 -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/accept-variant-id.mjs +98 -0
  133. package/dist/core/product/accept-variant-id.mjs.map +1 -0
  134. package/dist/core/product/form.d.mts +63 -0
  135. package/dist/core/product/form.mjs +44 -0
  136. package/dist/core/product/form.mjs.map +1 -0
  137. package/dist/core/product/index.d.mts +5 -0
  138. package/dist/core/product/options.d.mts +43 -0
  139. package/dist/core/product/options.mjs +296 -0
  140. package/dist/core/product/options.mjs.map +1 -0
  141. package/dist/core/product/product-form.d.mts +72 -0
  142. package/dist/core/product/product-form.mjs +158 -0
  143. package/dist/core/product/product-form.mjs.map +1 -0
  144. package/dist/core/product/state.d.mts +68 -0
  145. package/dist/core/product/url.d.mts +47 -0
  146. package/dist/core/product/url.mjs +69 -0
  147. package/dist/core/product/url.mjs.map +1 -0
  148. package/dist/core/request-context.d.mts +75 -0
  149. package/dist/core/request-context.mjs +141 -0
  150. package/dist/core/request-context.mjs.map +1 -0
  151. package/dist/core/request-routing/handle-shopify-redirects.d.mts +17 -0
  152. package/dist/core/request-routing/handle-shopify-redirects.mjs +31 -0
  153. package/dist/core/request-routing/handle-shopify-redirects.mjs.map +1 -0
  154. package/dist/core/request-routing/handle-shopify-routes.d.mts +14 -0
  155. package/dist/core/request-routing/handle-shopify-routes.mjs +42 -0
  156. package/dist/core/request-routing/handle-shopify-routes.mjs.map +1 -0
  157. package/dist/core/request-routing/interceptors/admin-redirect.mjs +12 -0
  158. package/dist/core/request-routing/interceptors/admin-redirect.mjs.map +1 -0
  159. package/dist/core/request-routing/interceptors/ajax-api.mjs +16 -0
  160. package/dist/core/request-routing/interceptors/ajax-api.mjs.map +1 -0
  161. package/dist/core/request-routing/interceptors/api-proxy.mjs +20 -0
  162. package/dist/core/request-routing/interceptors/api-proxy.mjs.map +1 -0
  163. package/dist/core/request-routing/interceptors/checkout.mjs +58 -0
  164. package/dist/core/request-routing/interceptors/checkout.mjs.map +1 -0
  165. package/dist/core/request-routing/interceptors/mcp-proxy.mjs +23 -0
  166. package/dist/core/request-routing/interceptors/mcp-proxy.mjs.map +1 -0
  167. package/dist/core/request-routing/interceptors/proxy.mjs +73 -0
  168. package/dist/core/request-routing/interceptors/proxy.mjs.map +1 -0
  169. package/dist/core/request-routing/interceptors/query-param-redirect.mjs +22 -0
  170. package/dist/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -0
  171. package/dist/core/request-routing/interceptors/sfapi-proxy.mjs +27 -0
  172. package/dist/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -0
  173. package/dist/core/request-routing/interceptors/standard-routes.mjs +19 -0
  174. package/dist/core/request-routing/interceptors/standard-routes.mjs.map +1 -0
  175. package/dist/core/request-routing/interceptors/url-redirects.mjs +27 -0
  176. package/dist/core/request-routing/interceptors/url-redirects.mjs.map +1 -0
  177. package/dist/core/request-routing/interceptors/well-known.mjs +22 -0
  178. package/dist/core/request-routing/interceptors/well-known.mjs.map +1 -0
  179. package/dist/core/request-routing/registered-routes.d.mts +7 -0
  180. package/dist/core/request-routing/registered-routes.mjs +72 -0
  181. package/dist/core/request-routing/registered-routes.mjs.map +1 -0
  182. package/dist/core/request-routing/route-types.d.mts +56 -0
  183. package/dist/core/request-routing/safe-apply-response-headers.mjs +16 -0
  184. package/dist/core/request-routing/safe-apply-response-headers.mjs.map +1 -0
  185. package/dist/core/shop-pay/shop-pay.d.mts +102 -0
  186. package/dist/core/shop-pay/shop-pay.mjs +289 -0
  187. package/dist/core/shop-pay/shop-pay.mjs.map +1 -0
  188. package/dist/core/shopify-scripts/analytics.mjs +26 -0
  189. package/dist/core/shopify-scripts/analytics.mjs.map +1 -0
  190. package/dist/core/shopify-scripts/consent.mjs +17 -0
  191. package/dist/core/shopify-scripts/consent.mjs.map +1 -0
  192. package/dist/core/shopify-scripts/constants.mjs +19 -0
  193. package/dist/core/shopify-scripts/constants.mjs.map +1 -0
  194. package/dist/core/shopify-scripts/deprecated-cookies.mjs +97 -0
  195. package/dist/core/shopify-scripts/deprecated-cookies.mjs.map +1 -0
  196. package/dist/core/shopify-scripts/global.d.mts +1 -0
  197. package/dist/core/shopify-scripts/global.mjs +86 -0
  198. package/dist/core/shopify-scripts/global.mjs.map +1 -0
  199. package/dist/core/shopify-scripts/index.d.mts +27 -0
  200. package/dist/core/shopify-scripts/index.mjs +135 -0
  201. package/dist/core/shopify-scripts/index.mjs.map +1 -0
  202. package/dist/core/shopify-scripts/initialize.d.mts +18 -0
  203. package/dist/core/shopify-scripts/initialize.mjs +27 -0
  204. package/dist/core/shopify-scripts/initialize.mjs.map +1 -0
  205. package/dist/core/shopify-scripts/page-view.mjs +49 -0
  206. package/dist/core/shopify-scripts/page-view.mjs.map +1 -0
  207. package/dist/core/shopify-scripts/perfkit.mjs +33 -0
  208. package/dist/core/shopify-scripts/perfkit.mjs.map +1 -0
  209. package/dist/core/shopify-scripts/render.d.mts +1 -0
  210. package/dist/core/shopify-scripts/render.mjs +23 -0
  211. package/dist/core/shopify-scripts/render.mjs.map +1 -0
  212. package/dist/core/shopify-scripts/types.d.mts +76 -0
  213. package/dist/core/shopify-scripts/utils/cookie-domain.mjs +43 -0
  214. package/dist/core/shopify-scripts/utils/cookie-domain.mjs.map +1 -0
  215. package/dist/core/shopify-scripts/utils/inline-script.mjs +8 -0
  216. package/dist/core/shopify-scripts/utils/inline-script.mjs.map +1 -0
  217. package/dist/core/shopify-scripts/utils/navigation.mjs +46 -0
  218. package/dist/core/shopify-scripts/utils/navigation.mjs.map +1 -0
  219. package/dist/core/shopify-scripts/utils/tracking-values.mjs +65 -0
  220. package/dist/core/shopify-scripts/utils/tracking-values.mjs.map +1 -0
  221. package/dist/core/shopify-scripts/utils/uuid.mjs +17 -0
  222. package/dist/core/shopify-scripts/utils/uuid.mjs.map +1 -0
  223. package/dist/core/shopify-scripts/webmcp.mjs +22 -0
  224. package/dist/core/shopify-scripts/webmcp.mjs.map +1 -0
  225. package/dist/core/standard-routes/build.d.mts +34 -0
  226. package/dist/core/standard-routes/build.mjs +54 -0
  227. package/dist/core/standard-routes/build.mjs.map +1 -0
  228. package/dist/core/standard-routes/defaults.mjs +31 -0
  229. package/dist/core/standard-routes/defaults.mjs.map +1 -0
  230. package/dist/core/standard-routes/match.mjs +108 -0
  231. package/dist/core/standard-routes/match.mjs.map +1 -0
  232. package/dist/core/standard-routes/path.mjs +58 -0
  233. package/dist/core/standard-routes/path.mjs.map +1 -0
  234. package/dist/core/standard-routes/redirects.mjs +51 -0
  235. package/dist/core/standard-routes/redirects.mjs.map +1 -0
  236. package/dist/core/standard-routes/types.d.mts +95 -0
  237. package/dist/core/url.mjs +42 -0
  238. package/dist/core/url.mjs.map +1 -0
  239. package/dist/core/utils/load-script.mjs +34 -0
  240. package/dist/core/utils/load-script.mjs.map +1 -0
  241. package/dist/core/utils/parse-gid.mjs +33 -0
  242. package/dist/core/utils/parse-gid.mjs.map +1 -0
  243. package/dist/core/utils/record.mjs +8 -0
  244. package/dist/core/utils/record.mjs.map +1 -0
  245. package/dist/customer-account/client.d.mts +50 -0
  246. package/dist/customer-account/client.mjs +239 -0
  247. package/dist/customer-account/client.mjs.map +1 -0
  248. package/dist/customer-account/errors.d.mts +28 -0
  249. package/dist/customer-account/errors.mjs +39 -0
  250. package/dist/customer-account/errors.mjs.map +1 -0
  251. package/dist/customer-account/graphql.d.mts +29 -0
  252. package/dist/customer-account/graphql.mjs +39 -0
  253. package/dist/customer-account/graphql.mjs.map +1 -0
  254. package/dist/customer-account/index.d.mts +7 -0
  255. package/dist/customer-account/index.mjs +7 -0
  256. package/dist/customer-account/session.d.mts +117 -0
  257. package/dist/customer-account/session.mjs +733 -0
  258. package/dist/customer-account/session.mjs.map +1 -0
  259. package/dist/customer-account/type-resolver.d.mts +11 -0
  260. package/dist/customer-account-api-types.d.ts +3269 -3270
  261. package/dist/customer-account.schema.json +50753 -1
  262. package/dist/development/_virtual/_@oxc-project_runtime@0.127.0/helpers/taggedTemplateLiteral.mjs +7 -0
  263. package/dist/development/client/client.d.mts +34 -0
  264. package/dist/development/client/client.mjs +206 -0
  265. package/dist/development/client/client.mjs.map +1 -0
  266. package/dist/development/client/errors.d.mts +48 -0
  267. package/dist/development/client/errors.mjs +57 -0
  268. package/dist/development/client/errors.mjs.map +1 -0
  269. package/dist/development/client/index.d.mts +4 -0
  270. package/dist/development/client/types.d.mts +147 -0
  271. package/dist/development/core/analytics/cart-tracker.d.mts +8 -0
  272. package/dist/development/core/analytics/cart-tracker.mjs +144 -0
  273. package/dist/development/core/analytics/cart-tracker.mjs.map +1 -0
  274. package/dist/development/core/analytics/events.d.mts +15 -0
  275. package/dist/development/core/analytics/events.mjs +15 -0
  276. package/dist/development/core/analytics/events.mjs.map +1 -0
  277. package/dist/development/core/analytics/index.d.mts +3 -0
  278. package/dist/development/core/analytics/types.d.mts +143 -0
  279. package/dist/development/core/analytics/utils/flatten-connection.d.mts +19 -0
  280. package/dist/development/core/analytics/utils/flatten-connection.mjs +25 -0
  281. package/dist/development/core/analytics/utils/flatten-connection.mjs.map +1 -0
  282. package/dist/development/core/cache/cache-status.mjs +17 -0
  283. package/dist/development/core/cache/cache-status.mjs.map +1 -0
  284. package/dist/development/core/cache/fetch-with-cache.d.mts +43 -0
  285. package/dist/development/core/cache/fetch-with-cache.mjs +188 -0
  286. package/dist/development/core/cache/fetch-with-cache.mjs.map +1 -0
  287. package/dist/development/core/cache/key.d.mts +6 -0
  288. package/dist/development/core/cache/key.mjs +27 -0
  289. package/dist/development/core/cache/key.mjs.map +1 -0
  290. package/dist/development/core/cache/run-with-cache.d.mts +36 -0
  291. package/dist/development/core/cache/run-with-cache.mjs +114 -0
  292. package/dist/development/core/cache/run-with-cache.mjs.map +1 -0
  293. package/dist/development/core/cache/store.d.mts +19 -0
  294. package/dist/development/core/cache/store.mjs +62 -0
  295. package/dist/development/core/cache/store.mjs.map +1 -0
  296. package/dist/development/core/cache/strategies.d.mts +39 -0
  297. package/dist/development/core/cache/strategies.mjs +70 -0
  298. package/dist/development/core/cache/strategies.mjs.map +1 -0
  299. package/dist/development/core/cart/actions.d.mts +50 -0
  300. package/dist/development/core/cart/actions.mjs +240 -0
  301. package/dist/development/core/cart/actions.mjs.map +1 -0
  302. package/dist/development/core/cart/attach-quantity-input.d.mts +5 -0
  303. package/dist/development/core/cart/attach-quantity-input.mjs +17 -0
  304. package/dist/development/core/cart/attach-quantity-input.mjs.map +1 -0
  305. package/dist/development/core/cart/buyer-identity-sync.d.mts +19 -0
  306. package/dist/development/core/cart/buyer-identity-sync.mjs +6 -0
  307. package/dist/development/core/cart/buyer-identity-sync.mjs.map +1 -0
  308. package/dist/development/core/cart/cart.d.mts +37 -0
  309. package/dist/development/core/cart/cart.mjs +1707 -0
  310. package/dist/development/core/cart/cart.mjs.map +1 -0
  311. package/dist/development/core/cart/cookie.d.mts +5 -0
  312. package/dist/development/core/cart/cookie.mjs +28 -0
  313. package/dist/development/core/cart/cookie.mjs.map +1 -0
  314. package/dist/development/core/cart/form.d.mts +130 -0
  315. package/dist/development/core/cart/form.mjs +75 -0
  316. package/dist/development/core/cart/form.mjs.map +1 -0
  317. package/dist/development/core/cart/get-cart.d.mts +25 -0
  318. package/dist/development/core/cart/get-cart.mjs +32 -0
  319. package/dist/development/core/cart/get-cart.mjs.map +1 -0
  320. package/dist/development/core/cart/index.d.mts +10 -0
  321. package/dist/development/core/cart/quantity.d.mts +10 -0
  322. package/dist/development/core/cart/quantity.mjs +14 -0
  323. package/dist/development/core/cart/quantity.mjs.map +1 -0
  324. package/dist/development/core/cart/queries.d.mts +4296 -0
  325. package/dist/development/core/cart/queries.mjs +70 -0
  326. package/dist/development/core/cart/queries.mjs.map +1 -0
  327. package/dist/development/core/cart/server-handlers.d.mts +82 -0
  328. package/dist/development/core/cart/server-handlers.mjs +322 -0
  329. package/dist/development/core/cart/server-handlers.mjs.map +1 -0
  330. package/dist/development/core/cart/state.d.mts +137 -0
  331. package/dist/development/core/cart/state.mjs +76 -0
  332. package/dist/development/core/cart/state.mjs.map +1 -0
  333. package/dist/development/core/cart/sync-quantity-inputs.mjs +16 -0
  334. package/dist/development/core/cart/sync-quantity-inputs.mjs.map +1 -0
  335. package/dist/development/core/collection/collection.d.mts +134 -0
  336. package/dist/development/core/collection/collection.mjs +170 -0
  337. package/dist/development/core/collection/collection.mjs.map +1 -0
  338. package/dist/development/core/collection/index.d.mts +6 -0
  339. package/dist/development/core/collection/reconciler.d.mts +32 -0
  340. package/dist/development/core/collection/reconciler.mjs +89 -0
  341. package/dist/development/core/collection/reconciler.mjs.map +1 -0
  342. package/dist/development/core/collection/state.d.mts +66 -0
  343. package/dist/development/core/collection/state.mjs +20 -0
  344. package/dist/development/core/collection/state.mjs.map +1 -0
  345. package/dist/development/core/collection/url.d.mts +71 -0
  346. package/dist/development/core/collection/url.mjs +376 -0
  347. package/dist/development/core/collection/url.mjs.map +1 -0
  348. package/dist/development/core/constants.mjs +7 -0
  349. package/dist/development/core/constants.mjs.map +1 -0
  350. package/dist/development/core/development.d.mts +56 -0
  351. package/dist/development/core/development.mjs +45 -0
  352. package/dist/development/core/headers.mjs +43 -0
  353. package/dist/development/core/headers.mjs.map +1 -0
  354. package/dist/development/core/index.d.mts +54 -0
  355. package/dist/development/core/logging/logging.d.mts +21 -0
  356. package/dist/development/core/logging/logging.mjs +99 -0
  357. package/dist/development/core/logging/logging.mjs.map +1 -0
  358. package/dist/development/core/logging/types.d.mts +40 -0
  359. package/dist/development/core/logging/types.mjs +18 -0
  360. package/dist/development/core/logging/types.mjs.map +1 -0
  361. package/dist/development/core/money/cache.mjs +25 -0
  362. package/dist/development/core/money/cache.mjs.map +1 -0
  363. package/dist/development/core/money/format.d.mts +15 -0
  364. package/dist/development/core/money/format.mjs +243 -0
  365. package/dist/development/core/money/format.mjs.map +1 -0
  366. package/dist/development/core/money/types.d.mts +47 -0
  367. package/dist/development/core/observable.mjs +46 -0
  368. package/dist/development/core/observable.mjs.map +1 -0
  369. package/dist/development/core/predictive-search/constants.d.mts +5 -0
  370. package/dist/development/core/predictive-search/constants.mjs +6 -0
  371. package/dist/development/core/predictive-search/constants.mjs.map +1 -0
  372. package/dist/development/core/predictive-search/form.d.mts +31 -0
  373. package/dist/development/core/predictive-search/form.mjs +31 -0
  374. package/dist/development/core/predictive-search/form.mjs.map +1 -0
  375. package/dist/development/core/predictive-search/index.d.mts +6 -0
  376. package/dist/development/core/predictive-search/queries.d.mts +118 -0
  377. package/dist/development/core/predictive-search/queries.mjs +81 -0
  378. package/dist/development/core/predictive-search/queries.mjs.map +1 -0
  379. package/dist/development/core/predictive-search/search.d.mts +32 -0
  380. package/dist/development/core/predictive-search/search.mjs +74 -0
  381. package/dist/development/core/predictive-search/search.mjs.map +1 -0
  382. package/dist/development/core/predictive-search/server-handlers.d.mts +36 -0
  383. package/dist/development/core/predictive-search/server-handlers.mjs +113 -0
  384. package/dist/development/core/predictive-search/server-handlers.mjs.map +1 -0
  385. package/dist/development/core/predictive-search/store.d.mts +44 -0
  386. package/dist/development/core/predictive-search/store.mjs +224 -0
  387. package/dist/development/core/predictive-search/store.mjs.map +1 -0
  388. package/dist/development/core/predictive-search/url.d.mts +41 -0
  389. package/dist/development/core/predictive-search/url.mjs +71 -0
  390. package/dist/development/core/predictive-search/url.mjs.map +1 -0
  391. package/dist/development/core/product/accept-variant-id.mjs +98 -0
  392. package/dist/development/core/product/accept-variant-id.mjs.map +1 -0
  393. package/dist/development/core/product/form.d.mts +63 -0
  394. package/dist/development/core/product/form.mjs +44 -0
  395. package/dist/development/core/product/form.mjs.map +1 -0
  396. package/dist/development/core/product/index.d.mts +5 -0
  397. package/dist/development/core/product/options.d.mts +43 -0
  398. package/dist/development/core/product/options.mjs +296 -0
  399. package/dist/development/core/product/options.mjs.map +1 -0
  400. package/dist/development/core/product/product-form.d.mts +72 -0
  401. package/dist/development/core/product/product-form.mjs +158 -0
  402. package/dist/development/core/product/product-form.mjs.map +1 -0
  403. package/dist/development/core/product/state.d.mts +68 -0
  404. package/dist/development/core/product/url.d.mts +47 -0
  405. package/dist/development/core/product/url.mjs +69 -0
  406. package/dist/development/core/product/url.mjs.map +1 -0
  407. package/dist/development/core/request-context.d.mts +75 -0
  408. package/dist/development/core/request-context.mjs +141 -0
  409. package/dist/development/core/request-context.mjs.map +1 -0
  410. package/dist/development/core/request-routing/handle-shopify-redirects.d.mts +17 -0
  411. package/dist/development/core/request-routing/handle-shopify-redirects.mjs +31 -0
  412. package/dist/development/core/request-routing/handle-shopify-redirects.mjs.map +1 -0
  413. package/dist/development/core/request-routing/handle-shopify-routes.d.mts +1 -0
  414. package/dist/development/core/request-routing/handle-shopify-routes.development.d.mts +11 -0
  415. package/dist/development/core/request-routing/handle-shopify-routes.development.mjs +16 -0
  416. package/dist/development/core/request-routing/handle-shopify-routes.development.mjs.map +1 -0
  417. package/dist/development/core/request-routing/handle-shopify-routes.mjs +42 -0
  418. package/dist/development/core/request-routing/handle-shopify-routes.mjs.map +1 -0
  419. package/dist/development/core/request-routing/interceptors/admin-redirect.mjs +12 -0
  420. package/dist/development/core/request-routing/interceptors/admin-redirect.mjs.map +1 -0
  421. package/dist/development/core/request-routing/interceptors/ajax-api.mjs +16 -0
  422. package/dist/development/core/request-routing/interceptors/ajax-api.mjs.map +1 -0
  423. package/dist/development/core/request-routing/interceptors/api-proxy.mjs +20 -0
  424. package/dist/development/core/request-routing/interceptors/api-proxy.mjs.map +1 -0
  425. package/dist/development/core/request-routing/interceptors/checkout.mjs +58 -0
  426. package/dist/development/core/request-routing/interceptors/checkout.mjs.map +1 -0
  427. package/dist/development/core/request-routing/interceptors/graphiql.mjs +46 -0
  428. package/dist/development/core/request-routing/interceptors/graphiql.mjs.map +1 -0
  429. package/dist/development/core/request-routing/interceptors/mcp-proxy.mjs +23 -0
  430. package/dist/development/core/request-routing/interceptors/mcp-proxy.mjs.map +1 -0
  431. package/dist/development/core/request-routing/interceptors/proxy.mjs +73 -0
  432. package/dist/development/core/request-routing/interceptors/proxy.mjs.map +1 -0
  433. package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs +22 -0
  434. package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -0
  435. package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs +27 -0
  436. package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -0
  437. package/dist/development/core/request-routing/interceptors/standard-routes.mjs +19 -0
  438. package/dist/development/core/request-routing/interceptors/standard-routes.mjs.map +1 -0
  439. package/dist/development/core/request-routing/interceptors/url-redirects.mjs +27 -0
  440. package/dist/development/core/request-routing/interceptors/url-redirects.mjs.map +1 -0
  441. package/dist/development/core/request-routing/interceptors/well-known.mjs +22 -0
  442. package/dist/development/core/request-routing/interceptors/well-known.mjs.map +1 -0
  443. package/dist/development/core/request-routing/registered-routes.d.mts +7 -0
  444. package/dist/development/core/request-routing/registered-routes.mjs +72 -0
  445. package/dist/development/core/request-routing/registered-routes.mjs.map +1 -0
  446. package/dist/development/core/request-routing/route-types.d.mts +56 -0
  447. package/dist/development/core/request-routing/safe-apply-response-headers.mjs +16 -0
  448. package/dist/development/core/request-routing/safe-apply-response-headers.mjs.map +1 -0
  449. package/dist/development/core/shop-pay/shop-pay.d.mts +102 -0
  450. package/dist/development/core/shop-pay/shop-pay.mjs +289 -0
  451. package/dist/development/core/shop-pay/shop-pay.mjs.map +1 -0
  452. package/dist/development/core/shopify-scripts/analytics.mjs +26 -0
  453. package/dist/development/core/shopify-scripts/analytics.mjs.map +1 -0
  454. package/dist/development/core/shopify-scripts/consent.mjs +17 -0
  455. package/dist/development/core/shopify-scripts/consent.mjs.map +1 -0
  456. package/dist/development/core/shopify-scripts/constants.mjs +19 -0
  457. package/dist/development/core/shopify-scripts/constants.mjs.map +1 -0
  458. package/dist/development/core/shopify-scripts/deprecated-cookies.mjs +97 -0
  459. package/dist/development/core/shopify-scripts/deprecated-cookies.mjs.map +1 -0
  460. package/dist/development/core/shopify-scripts/global.d.mts +1 -0
  461. package/dist/development/core/shopify-scripts/global.mjs +86 -0
  462. package/dist/development/core/shopify-scripts/global.mjs.map +1 -0
  463. package/dist/development/core/shopify-scripts/index.d.mts +27 -0
  464. package/dist/development/core/shopify-scripts/index.mjs +145 -0
  465. package/dist/development/core/shopify-scripts/index.mjs.map +1 -0
  466. package/dist/development/core/shopify-scripts/initialize.d.mts +18 -0
  467. package/dist/development/core/shopify-scripts/initialize.mjs +27 -0
  468. package/dist/development/core/shopify-scripts/initialize.mjs.map +1 -0
  469. package/dist/development/core/shopify-scripts/page-view.mjs +49 -0
  470. package/dist/development/core/shopify-scripts/page-view.mjs.map +1 -0
  471. package/dist/development/core/shopify-scripts/perfkit.mjs +33 -0
  472. package/dist/development/core/shopify-scripts/perfkit.mjs.map +1 -0
  473. package/dist/development/core/shopify-scripts/render.d.mts +1 -0
  474. package/dist/development/core/shopify-scripts/render.mjs +23 -0
  475. package/dist/development/core/shopify-scripts/render.mjs.map +1 -0
  476. package/dist/development/core/shopify-scripts/types.d.mts +76 -0
  477. package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs +43 -0
  478. package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs.map +1 -0
  479. package/dist/development/core/shopify-scripts/utils/inline-script.mjs +8 -0
  480. package/dist/development/core/shopify-scripts/utils/inline-script.mjs.map +1 -0
  481. package/dist/development/core/shopify-scripts/utils/navigation.mjs +46 -0
  482. package/dist/development/core/shopify-scripts/utils/navigation.mjs.map +1 -0
  483. package/dist/development/core/shopify-scripts/utils/tracking-values.mjs +65 -0
  484. package/dist/development/core/shopify-scripts/utils/tracking-values.mjs.map +1 -0
  485. package/dist/development/core/shopify-scripts/utils/uuid.mjs +17 -0
  486. package/dist/development/core/shopify-scripts/utils/uuid.mjs.map +1 -0
  487. package/dist/development/core/shopify-scripts/webmcp.mjs +22 -0
  488. package/dist/development/core/shopify-scripts/webmcp.mjs.map +1 -0
  489. package/dist/development/core/standard-routes/build.d.mts +34 -0
  490. package/dist/development/core/standard-routes/build.mjs +54 -0
  491. package/dist/development/core/standard-routes/build.mjs.map +1 -0
  492. package/dist/development/core/standard-routes/defaults.mjs +31 -0
  493. package/dist/development/core/standard-routes/defaults.mjs.map +1 -0
  494. package/dist/development/core/standard-routes/match.mjs +108 -0
  495. package/dist/development/core/standard-routes/match.mjs.map +1 -0
  496. package/dist/development/core/standard-routes/path.mjs +58 -0
  497. package/dist/development/core/standard-routes/path.mjs.map +1 -0
  498. package/dist/development/core/standard-routes/redirects.mjs +51 -0
  499. package/dist/development/core/standard-routes/redirects.mjs.map +1 -0
  500. package/dist/development/core/standard-routes/types.d.mts +95 -0
  501. package/dist/development/core/types.d.mts +11 -0
  502. package/dist/development/core/url.mjs +42 -0
  503. package/dist/development/core/url.mjs.map +1 -0
  504. package/dist/development/core/utils/load-script.mjs +34 -0
  505. package/dist/development/core/utils/load-script.mjs.map +1 -0
  506. package/dist/development/core/utils/parse-gid.mjs +33 -0
  507. package/dist/development/core/utils/parse-gid.mjs.map +1 -0
  508. package/dist/development/customer-account/session.d.mts +46 -0
  509. package/dist/development/customer-account/session.mjs +21 -0
  510. package/dist/development/customer-account/session.mjs.map +1 -0
  511. package/dist/development/globals.d.mts +64 -0
  512. package/dist/development/graphql/generated/customer-account-api-types.d.mts +13 -0
  513. package/dist/development/graphql/generated/graphql-env.d.mts +19280 -0
  514. package/dist/development/graphql/generated/storefront-api-types.d.mts +47 -0
  515. package/dist/development/graphql/graphql.d.mts +40 -0
  516. package/dist/development/graphql/graphql.mjs +16 -0
  517. package/dist/development/graphql/graphql.mjs.map +1 -0
  518. package/dist/development/graphql/index.d.mts +2 -0
  519. package/dist/development/graphql/scalars.d.mts +15 -0
  520. package/dist/development/graphql/type-resolver.d.mts +229 -0
  521. package/dist/development/react/cart.d.mts +44 -0
  522. package/dist/development/react/cart.mjs +155 -0
  523. package/dist/development/react/cart.mjs.map +1 -0
  524. package/dist/development/react/collection.d.mts +91 -0
  525. package/dist/development/react/collection.mjs +129 -0
  526. package/dist/development/react/collection.mjs.map +1 -0
  527. package/dist/development/react/index.d.mts +13 -0
  528. package/dist/development/react/index.mjs +10 -0
  529. package/dist/development/react/predictive-search.d.mts +49 -0
  530. package/dist/development/react/predictive-search.mjs +133 -0
  531. package/dist/development/react/predictive-search.mjs.map +1 -0
  532. package/dist/development/react/product.d.mts +72 -0
  533. package/dist/development/react/product.mjs +127 -0
  534. package/dist/development/react/product.mjs.map +1 -0
  535. package/dist/development/react/shop-pay.d.mts +9 -0
  536. package/dist/development/react/shop-pay.mjs +16 -0
  537. package/dist/development/react/shop-pay.mjs.map +1 -0
  538. package/dist/development/react/shopify-scripts.d.mts +20 -0
  539. package/dist/development/react/shopify-scripts.mjs +39 -0
  540. package/dist/development/react/shopify-scripts.mjs.map +1 -0
  541. package/dist/development/vendor/standard-actions.d.mts +134 -0
  542. package/dist/development/vendor/standard-events.d.mts +1107 -0
  543. package/dist/development/vue/cart.d.mts +46 -0
  544. package/dist/development/vue/cart.mjs +122 -0
  545. package/dist/development/vue/cart.mjs.map +1 -0
  546. package/dist/development/vue/collection.d.mts +46 -0
  547. package/dist/development/vue/collection.mjs +108 -0
  548. package/dist/development/vue/collection.mjs.map +1 -0
  549. package/dist/development/vue/index.d.mts +11 -0
  550. package/dist/development/vue/index.mjs +8 -0
  551. package/dist/development/vue/predictive-search.d.mts +124 -0
  552. package/dist/development/vue/predictive-search.mjs +171 -0
  553. package/dist/development/vue/predictive-search.mjs.map +1 -0
  554. package/dist/development/vue/product.d.mts +57 -0
  555. package/dist/development/vue/product.mjs +167 -0
  556. package/dist/development/vue/product.mjs.map +1 -0
  557. package/dist/development/vue/shop-pay.d.mts +25 -0
  558. package/dist/development/vue/shop-pay.mjs +35 -0
  559. package/dist/development/vue/shop-pay.mjs.map +1 -0
  560. package/dist/development/vue/shopify-scripts.d.mts +127 -0
  561. package/dist/development/vue/shopify-scripts.mjs +79 -0
  562. package/dist/development/vue/shopify-scripts.mjs.map +1 -0
  563. package/dist/globals.d.mts +64 -0
  564. package/dist/graphql/generated/customer-account-api-types.d.mts +13 -0
  565. package/dist/graphql/generated/customer-account-graphql-env.d.mts +22170 -0
  566. package/dist/graphql/generated/graphql-env.d.mts +19280 -0
  567. package/dist/graphql/generated/storefront-api-types.d.mts +47 -0
  568. package/dist/graphql/graphql.d.mts +40 -0
  569. package/dist/graphql/graphql.mjs +16 -0
  570. package/dist/graphql/graphql.mjs.map +1 -0
  571. package/dist/graphql/index.d.mts +2 -0
  572. package/dist/graphql/scalars.d.mts +26 -0
  573. package/dist/graphql/type-resolver.d.mts +229 -0
  574. package/dist/react/cart.d.mts +44 -0
  575. package/dist/react/cart.mjs +155 -0
  576. package/dist/react/cart.mjs.map +1 -0
  577. package/dist/react/collection.d.mts +91 -0
  578. package/dist/react/collection.mjs +129 -0
  579. package/dist/react/collection.mjs.map +1 -0
  580. package/dist/react/index.d.mts +13 -0
  581. package/dist/react/index.mjs +10 -0
  582. package/dist/react/predictive-search.d.mts +49 -0
  583. package/dist/react/predictive-search.mjs +133 -0
  584. package/dist/react/predictive-search.mjs.map +1 -0
  585. package/dist/react/product.d.mts +72 -0
  586. package/dist/react/product.mjs +127 -0
  587. package/dist/react/product.mjs.map +1 -0
  588. package/dist/react/shop-pay.d.mts +9 -0
  589. package/dist/react/shop-pay.mjs +16 -0
  590. package/dist/react/shop-pay.mjs.map +1 -0
  591. package/dist/react/shopify-scripts.d.mts +20 -0
  592. package/dist/react/shopify-scripts.mjs +39 -0
  593. package/dist/react/shopify-scripts.mjs.map +1 -0
  594. package/dist/storefront-api-types.d.ts +2351 -2390
  595. package/dist/storefront.schema.json +41534 -1
  596. package/dist/ts-plugin/index.cjs +68 -0
  597. package/dist/ts-plugin/index.cjs.map +1 -0
  598. package/dist/ts-plugin/index.d.cts +4 -0
  599. package/dist/vendor/standard-actions.d.mts +134 -0
  600. package/dist/vendor/standard-events.d.mts +1107 -0
  601. package/dist/vite/certificate-prompt.mjs +24 -0
  602. package/dist/vite/certificate-prompt.mjs.map +1 -0
  603. package/dist/vite/index.d.mts +2 -0
  604. package/dist/vite/index.mjs +3 -0
  605. package/dist/vite/local-https.d.mts +47 -0
  606. package/dist/vite/local-https.mjs +276 -0
  607. package/dist/vite/local-https.mjs.map +1 -0
  608. package/dist/vite/mkcert.mjs +141 -0
  609. package/dist/vite/mkcert.mjs.map +1 -0
  610. package/dist/vue/cart.d.mts +46 -0
  611. package/dist/vue/cart.mjs +122 -0
  612. package/dist/vue/cart.mjs.map +1 -0
  613. package/dist/vue/collection.d.mts +46 -0
  614. package/dist/vue/collection.mjs +108 -0
  615. package/dist/vue/collection.mjs.map +1 -0
  616. package/dist/vue/index.d.mts +11 -0
  617. package/dist/vue/index.mjs +8 -0
  618. package/dist/vue/predictive-search.d.mts +124 -0
  619. package/dist/vue/predictive-search.mjs +171 -0
  620. package/dist/vue/predictive-search.mjs.map +1 -0
  621. package/dist/vue/product.d.mts +57 -0
  622. package/dist/vue/product.mjs +167 -0
  623. package/dist/vue/product.mjs.map +1 -0
  624. package/dist/vue/shop-pay.d.mts +25 -0
  625. package/dist/vue/shop-pay.mjs +35 -0
  626. package/dist/vue/shop-pay.mjs.map +1 -0
  627. package/dist/vue/shopify-scripts.d.mts +127 -0
  628. package/dist/vue/shopify-scripts.mjs +79 -0
  629. package/dist/vue/shopify-scripts.mjs.map +1 -0
  630. package/package.json +116 -86
  631. package/skills/hydrogen-analytics/SKILL.md +80 -0
  632. package/skills/hydrogen-analytics/references/react.md +160 -0
  633. package/skills/hydrogen-analytics/references/vue.md +80 -0
  634. package/skills/hydrogen-cart-drawer/SKILL.md +248 -0
  635. package/skills/hydrogen-cart-drawer/references/accessibility.md +109 -0
  636. package/skills/hydrogen-cart-drawer/references/css.md +67 -0
  637. package/skills/hydrogen-cart-ui/SKILL.md +224 -0
  638. package/skills/hydrogen-cart-ui/references/nextjs.md +89 -0
  639. package/skills/hydrogen-cart-ui/references/react.md +285 -0
  640. package/skills/hydrogen-cart-ui/references/vue.md +228 -0
  641. package/skills/hydrogen-collection-browser/SKILL.md +83 -0
  642. package/skills/hydrogen-collection-browser/references/nextjs.md +118 -0
  643. package/skills/hydrogen-collection-browser/references/nuxt.md +108 -0
  644. package/skills/hydrogen-collection-browser/references/react.md +301 -0
  645. package/skills/hydrogen-customer-account/SKILL.md +107 -0
  646. package/skills/hydrogen-image/SKILL.md +65 -0
  647. package/skills/hydrogen-local-https/SKILL.md +142 -0
  648. package/skills/hydrogen-markets/SKILL.md +221 -0
  649. package/skills/hydrogen-markets/references/nextjs.md +157 -0
  650. package/skills/hydrogen-money/SKILL.md +67 -0
  651. package/skills/hydrogen-oxygen/SKILL.md +245 -0
  652. package/skills/hydrogen-oxygen/references/react-router.md +230 -0
  653. package/skills/hydrogen-predictive-search/SKILL.md +130 -0
  654. package/skills/hydrogen-predictive-search/references/react.md +32 -0
  655. package/skills/hydrogen-predictive-search/references/vue.md +40 -0
  656. package/skills/hydrogen-request-handlers/SKILL.md +107 -0
  657. package/skills/hydrogen-request-handlers/references/frameworks.md +179 -0
  658. package/skills/hydrogen-request-handlers/references/nextjs.md +137 -0
  659. package/skills/hydrogen-request-handlers/references/nuxt.md +215 -0
  660. package/skills/hydrogen-routing/SKILL.md +171 -0
  661. package/skills/hydrogen-setup/SKILL.md +50 -0
  662. package/skills/hydrogen-setup/references/analytics.md +624 -0
  663. package/skills/hydrogen-setup/steps/1-inspect-app.md +62 -0
  664. package/skills/hydrogen-setup/steps/10-analytics.md +10 -0
  665. package/skills/hydrogen-setup/steps/11-verify.md +31 -0
  666. package/skills/hydrogen-setup/steps/2-scaffold.md +86 -0
  667. package/skills/hydrogen-setup/steps/3-build-home-page.md +37 -0
  668. package/skills/hydrogen-setup/steps/4-collection-and-search.md +14 -0
  669. package/skills/hydrogen-setup/steps/5-cart.md +10 -0
  670. package/skills/hydrogen-setup/steps/6-product-detail-page.md +416 -0
  671. package/skills/hydrogen-setup/steps/7-shopify-runtime-scripts.md +69 -0
  672. package/skills/hydrogen-setup/steps/8-cart-drawer-and-navbar.md +35 -0
  673. package/skills/hydrogen-setup/steps/9-account-page.md +54 -0
  674. package/skills/hydrogen-shop-pay/SKILL.md +79 -0
  675. package/skills/hydrogen-shop-pay/references/core.md +66 -0
  676. package/skills/hydrogen-shop-pay/references/react.md +50 -0
  677. package/skills/hydrogen-shop-pay/references/vue.md +39 -0
  678. package/skills/hydrogen-smoke-test/SKILL.md +205 -0
  679. package/skills/hydrogen-storefront-client/SKILL.md +322 -0
  680. package/skills/hydrogen-storefront-client/references/astro.md +125 -0
  681. package/skills/hydrogen-storefront-client/references/caching.md +25 -0
  682. package/skills/hydrogen-storefront-client/references/nextjs.md +121 -0
  683. package/skills/hydrogen-storefront-client/references/nuxt.md +121 -0
  684. package/skills/hydrogen-storefront-client/references/query-validation.md +95 -0
  685. package/skills/hydrogen-storefront-client/references/react-router.md +81 -0
  686. package/skills/hydrogen-storefront-client/references/solidstart.md +131 -0
  687. package/skills/hydrogen-storefront-client/references/sveltekit.md +169 -0
  688. package/skills/hydrogen-variant-form/SKILL.md +267 -0
  689. package/skills/hydrogen-variant-form/references/nextjs.md +207 -0
  690. package/skills/hydrogen-variant-form/references/nuxt.md +95 -0
  691. package/skills/hydrogen-variant-form/references/react.md +71 -0
  692. package/dist/dev/get-virtual-routes-H72465VB.js +0 -74
  693. package/dist/dev/hydrogen-routes.d.ts +0 -5
  694. package/dist/dev/hydrogen-routes.js +0 -25
  695. package/dist/development/get-virtual-routes-ACFZHU42.js +0 -71
  696. package/dist/development/get-virtual-routes-ACFZHU42.js.map +0 -1
  697. package/dist/development/index.cjs +0 -6978
  698. package/dist/development/index.cjs.map +0 -1
  699. package/dist/development/index.js +0 -6631
  700. package/dist/development/index.js.map +0 -1
  701. package/dist/development/log-seo-tags-IG37ONQ2.js +0 -74
  702. package/dist/development/log-seo-tags-IG37ONQ2.js.map +0 -1
  703. package/dist/development/react-router-preset.d.ts +0 -45
  704. package/dist/development/react-router-preset.js +0 -49
  705. package/dist/development/react-router-preset.js.map +0 -1
  706. package/dist/index.cjs +0 -1
  707. package/dist/oxygen/index.d.ts +0 -197
  708. package/dist/oxygen/index.js +0 -107
  709. package/dist/production/get-virtual-routes-ZZEGQQDV.js +0 -3
  710. package/dist/production/get-virtual-routes-ZZEGQQDV.js.map +0 -1
  711. package/dist/production/index.cjs +0 -1019
  712. package/dist/production/index.cjs.map +0 -1
  713. package/dist/production/index.d.cts +0 -3260
  714. package/dist/production/index.d.ts +0 -3260
  715. package/dist/production/index.js +0 -1019
  716. package/dist/production/index.js.map +0 -1
  717. package/dist/production/log-seo-tags-TY72EQWZ.js +0 -2
  718. package/dist/production/log-seo-tags-TY72EQWZ.js.map +0 -1
  719. package/dist/production/react-router-preset.d.ts +0 -45
  720. package/dist/production/react-router-preset.js +0 -11
  721. package/dist/react-router.d.ts +0 -75
  722. package/dist/vite/chunk-4O5OI3OO.js +0 -127
  723. package/dist/vite/chunk-FAQ7TVHC.js +0 -9
  724. package/dist/vite/chunk-QXBQVDMY.js +0 -68
  725. package/dist/vite/compat-date.d.ts +0 -3
  726. package/dist/vite/compat-date.js +0 -6
  727. package/dist/vite/get-virtual-routes.d.ts +0 -21
  728. package/dist/vite/get-virtual-routes.js +0 -74
  729. package/dist/vite/hydrogen-middleware.d.ts +0 -9
  730. package/dist/vite/hydrogen-middleware.js +0 -7
  731. package/dist/vite/plugin.d.ts +0 -22
  732. package/dist/vite/plugin.js +0 -171
  733. package/dist/vite/request-events.d.ts +0 -144
  734. package/dist/vite/request-events.js +0 -10
  735. package/dist/vite/types.d.ts +0 -5
  736. package/dist/vite/types.js +0 -0
  737. package/dist/vite/virtual-routes/assets/debug-network.css +0 -609
  738. package/dist/vite/virtual-routes/assets/favicon-dark.svg +0 -20
  739. package/dist/vite/virtual-routes/assets/favicon.svg +0 -28
  740. package/dist/vite/virtual-routes/assets/inter-variable-font.woff2 +0 -0
  741. package/dist/vite/virtual-routes/assets/jetbrainsmono-variable-font.woff2 +0 -0
  742. package/dist/vite/virtual-routes/assets/styles.css +0 -249
  743. package/dist/vite/virtual-routes/components/FlameChartWrapper.jsx +0 -123
  744. package/dist/vite/virtual-routes/components/HydrogenLogoBaseBW.jsx +0 -32
  745. package/dist/vite/virtual-routes/components/HydrogenLogoBaseColor.jsx +0 -47
  746. package/dist/vite/virtual-routes/components/IconBanner.jsx +0 -292
  747. package/dist/vite/virtual-routes/components/IconClose.jsx +0 -38
  748. package/dist/vite/virtual-routes/components/IconDiscard.jsx +0 -44
  749. package/dist/vite/virtual-routes/components/IconError.jsx +0 -61
  750. package/dist/vite/virtual-routes/components/IconGithub.jsx +0 -23
  751. package/dist/vite/virtual-routes/components/IconTwitter.jsx +0 -21
  752. package/dist/vite/virtual-routes/components/Layout.jsx +0 -7
  753. package/dist/vite/virtual-routes/components/RequestDetails.jsx +0 -171
  754. package/dist/vite/virtual-routes/components/RequestTable.jsx +0 -91
  755. package/dist/vite/virtual-routes/components/RequestWaterfall.jsx +0 -151
  756. package/dist/vite/virtual-routes/layout.jsx +0 -33
  757. package/dist/vite/virtual-routes/lib/useDebugNetworkServer.jsx +0 -178
  758. package/dist/vite/virtual-routes/routes/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.jsx +0 -37
  759. package/dist/vite/virtual-routes/routes/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.tsx +0 -79
  760. package/dist/vite/virtual-routes/routes/graphiql.jsx +0 -5
  761. package/dist/vite/virtual-routes/routes/index.jsx +0 -265
  762. package/dist/vite/virtual-routes/routes/subrequest-profiler.jsx +0 -243
  763. package/dist/vite/virtual-routes/virtual-root-with-layout.jsx +0 -63
  764. package/dist/vite/virtual-routes/virtual-root.jsx +0 -67
@@ -0,0 +1,137 @@
1
+ import { CartErrorCode, CartWarningCode } from "../../graphql/generated/storefront-api-types.mjs";
2
+
3
+ //#region src/core/cart/state.d.ts
4
+ interface Money {
5
+ amount: string;
6
+ currencyCode: string;
7
+ }
8
+ interface CartCost {
9
+ subtotalAmount: Money;
10
+ totalAmount: Money;
11
+ checkoutChargeAmount: Money;
12
+ }
13
+ interface CartLineCost {
14
+ totalAmount: Money;
15
+ subtotalAmount: Money;
16
+ amountPerQuantity: Money;
17
+ compareAtAmountPerQuantity: Money | null;
18
+ }
19
+ interface CartLineMerchandise {
20
+ id: string;
21
+ title?: string;
22
+ selectedOptions?: Array<{
23
+ name: string;
24
+ value: string;
25
+ }>;
26
+ product: {
27
+ title: string;
28
+ handle?: string;
29
+ [key: string]: unknown;
30
+ };
31
+ image?: {
32
+ id?: string | null;
33
+ url: string;
34
+ altText?: string | null;
35
+ width?: number | null;
36
+ height?: number | null;
37
+ [key: string]: unknown;
38
+ } | null;
39
+ quantityAvailable?: number | null;
40
+ [key: string]: unknown;
41
+ }
42
+ interface CartLine {
43
+ id: string;
44
+ quantity: number;
45
+ attributes?: Attribute[];
46
+ cost: CartLineCost;
47
+ merchandise?: CartLineMerchandise;
48
+ sellingPlanAllocation?: {
49
+ sellingPlan: {
50
+ id: string;
51
+ };
52
+ } | null;
53
+ parentRelationship?: {
54
+ parent: {
55
+ id: string;
56
+ };
57
+ } | null;
58
+ lineComponents?: CartLine[];
59
+ }
60
+ interface CartLineConnection {
61
+ nodes: CartLine[];
62
+ [key: string]: unknown;
63
+ }
64
+ interface DiscountCode {
65
+ code: string;
66
+ applicable: boolean;
67
+ }
68
+ interface CartUserError {
69
+ code: CartErrorCode | null;
70
+ message: string;
71
+ field?: string[];
72
+ }
73
+ interface CartWarning {
74
+ code: CartWarningCode;
75
+ message: string;
76
+ }
77
+ interface CartErrorGroup {
78
+ userErrors: CartUserError[];
79
+ warnings: CartWarning[];
80
+ }
81
+ interface CartNetworkEntry {
82
+ message: string;
83
+ status?: number;
84
+ }
85
+ interface Attribute {
86
+ key: string;
87
+ value: string | null;
88
+ }
89
+ interface CartPending {
90
+ lines: Set<string>;
91
+ note: boolean;
92
+ attributes: boolean;
93
+ discountCodes: Set<string>;
94
+ cost?: boolean;
95
+ }
96
+ interface CartErrorState {
97
+ cart: CartErrorGroup;
98
+ lines: Map<string, CartErrorGroup>;
99
+ note: CartErrorGroup;
100
+ attributes: Map<string, CartErrorGroup>;
101
+ discountCodes: Map<string, CartErrorGroup>;
102
+ network: CartNetworkEntry[];
103
+ lastUpdatedAt: number;
104
+ cartUpdatedAt: number;
105
+ linesUpdatedAt: number;
106
+ noteUpdatedAt: number;
107
+ attributesUpdatedAt: number;
108
+ discountCodesUpdatedAt: number;
109
+ networkUpdatedAt: number;
110
+ }
111
+ interface CartData {
112
+ id: string | null;
113
+ checkoutUrl?: string | null;
114
+ totalQuantity: number;
115
+ cost: CartCost;
116
+ note?: string | null;
117
+ attributes: Attribute[];
118
+ lines: CartLineConnection;
119
+ discountCodes: DiscountCode[];
120
+ [key: string]: unknown;
121
+ }
122
+ interface CartState<TData extends CartData = CartData> {
123
+ data: TData;
124
+ loading: boolean;
125
+ /** Non-rejecting signal that resolves when the current full-cart load settles or is invalidated. */
126
+ readonly readyPromise?: PromiseLike<void>;
127
+ pending: CartPending;
128
+ revalidating?: boolean;
129
+ errors: CartErrorState;
130
+ }
131
+ declare function createEmptyErrorGroup(): CartErrorGroup;
132
+ declare function createEmptyCartErrors(): CartErrorState;
133
+ declare const EMPTY_CART_DATA: CartData;
134
+ declare const EMPTY_CART_STATE: CartState;
135
+ //#endregion
136
+ export { Attribute, CartCost, CartData, CartErrorGroup, CartErrorState, CartLine, CartLineConnection, CartLineCost, CartLineMerchandise, CartNetworkEntry, CartPending, CartState, CartUserError, CartWarning, DiscountCode, EMPTY_CART_DATA, EMPTY_CART_STATE, createEmptyCartErrors, createEmptyErrorGroup };
137
+ //# sourceMappingURL=state.d.mts.map
@@ -0,0 +1,76 @@
1
+ //#region src/core/cart/state.ts
2
+ function createEmptyPending() {
3
+ return {
4
+ lines: /* @__PURE__ */ new Set(),
5
+ note: false,
6
+ attributes: false,
7
+ discountCodes: /* @__PURE__ */ new Set(),
8
+ cost: false
9
+ };
10
+ }
11
+ function createEmptyErrorGroup() {
12
+ return {
13
+ userErrors: [],
14
+ warnings: []
15
+ };
16
+ }
17
+ function createEmptyCartErrors() {
18
+ return {
19
+ cart: createEmptyErrorGroup(),
20
+ lines: /* @__PURE__ */ new Map(),
21
+ note: createEmptyErrorGroup(),
22
+ attributes: /* @__PURE__ */ new Map(),
23
+ discountCodes: /* @__PURE__ */ new Map(),
24
+ network: [],
25
+ lastUpdatedAt: 0,
26
+ cartUpdatedAt: 0,
27
+ linesUpdatedAt: 0,
28
+ noteUpdatedAt: 0,
29
+ attributesUpdatedAt: 0,
30
+ discountCodesUpdatedAt: 0,
31
+ networkUpdatedAt: 0
32
+ };
33
+ }
34
+ const EMPTY_CART_DATA = Object.freeze({
35
+ id: null,
36
+ checkoutUrl: null,
37
+ totalQuantity: 0,
38
+ cost: Object.freeze({
39
+ subtotalAmount: Object.freeze({
40
+ amount: "0",
41
+ currencyCode: ""
42
+ }),
43
+ totalAmount: Object.freeze({
44
+ amount: "0",
45
+ currencyCode: ""
46
+ }),
47
+ checkoutChargeAmount: Object.freeze({
48
+ amount: "0",
49
+ currencyCode: ""
50
+ })
51
+ }),
52
+ note: "",
53
+ attributes: [],
54
+ lines: Object.freeze({ nodes: [] }),
55
+ discountCodes: []
56
+ });
57
+ function createCartState(data, { loading = false } = {}) {
58
+ return {
59
+ data,
60
+ loading,
61
+ pending: createEmptyPending(),
62
+ errors: createEmptyCartErrors()
63
+ };
64
+ }
65
+ function createEmptyCartState({ loading = true } = {}) {
66
+ return createCartState({
67
+ ...EMPTY_CART_DATA,
68
+ lines: { nodes: [] },
69
+ discountCodes: []
70
+ }, { loading });
71
+ }
72
+ const EMPTY_CART_STATE = createEmptyCartState();
73
+
74
+ //#endregion
75
+ export { EMPTY_CART_DATA, EMPTY_CART_STATE, createCartState, createEmptyCartErrors, createEmptyCartState, createEmptyErrorGroup };
76
+ //# sourceMappingURL=state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.mjs","names":[],"sources":["../../../src/core/cart/state.ts"],"sourcesContent":["import type { CartErrorCode, CartWarningCode } from \"../../graphql/generated/storefront-api-types\";\n\nexport interface Money {\n amount: string;\n currencyCode: string;\n}\n\nexport interface CartCost {\n subtotalAmount: Money;\n totalAmount: Money;\n checkoutChargeAmount: Money;\n}\n\nexport interface CartLineCost {\n totalAmount: Money;\n subtotalAmount: Money;\n amountPerQuantity: Money;\n compareAtAmountPerQuantity: Money | null;\n}\n\nexport interface CartLineMerchandise {\n id: string;\n title?: string;\n selectedOptions?: Array<{ name: string; value: string }>;\n product: {\n title: string;\n handle?: string;\n [key: string]: unknown;\n };\n image?: {\n id?: string | null;\n url: string;\n altText?: string | null;\n width?: number | null;\n height?: number | null;\n [key: string]: unknown;\n } | null;\n quantityAvailable?: number | null;\n [key: string]: unknown;\n}\n\nexport interface CartLine {\n id: string;\n quantity: number;\n attributes?: Attribute[];\n cost: CartLineCost;\n merchandise?: CartLineMerchandise;\n sellingPlanAllocation?: { sellingPlan: { id: string } } | null;\n parentRelationship?: { parent: { id: string } } | null;\n lineComponents?: CartLine[];\n}\n\nexport interface CartLineConnection {\n nodes: CartLine[];\n [key: string]: unknown;\n}\n\nexport interface DiscountCode {\n code: string;\n applicable: boolean;\n}\n\nexport interface CartUserError {\n code: CartErrorCode | null;\n message: string;\n field?: string[];\n}\n\nexport interface CartWarning {\n code: CartWarningCode;\n message: string;\n}\n\nexport interface CartErrorGroup {\n userErrors: CartUserError[];\n warnings: CartWarning[];\n}\n\nexport interface CartNetworkEntry {\n message: string;\n status?: number;\n}\n\nexport interface Attribute {\n key: string;\n value: string | null;\n}\n\nexport interface CartPending {\n lines: Set<string>;\n note: boolean;\n attributes: boolean;\n discountCodes: Set<string>;\n cost?: boolean;\n}\n\nexport interface CartErrorState {\n cart: CartErrorGroup;\n lines: Map<string, CartErrorGroup>;\n note: CartErrorGroup;\n attributes: Map<string, CartErrorGroup>;\n discountCodes: Map<string, CartErrorGroup>;\n network: CartNetworkEntry[];\n lastUpdatedAt: number;\n cartUpdatedAt: number;\n linesUpdatedAt: number;\n noteUpdatedAt: number;\n attributesUpdatedAt: number;\n discountCodesUpdatedAt: number;\n networkUpdatedAt: number;\n}\n\nexport interface CartData {\n id: string | null;\n checkoutUrl?: string | null;\n totalQuantity: number;\n cost: CartCost;\n note?: string | null;\n attributes: Attribute[];\n lines: CartLineConnection;\n discountCodes: DiscountCode[];\n [key: string]: unknown;\n}\n\nexport interface CartState<TData extends CartData = CartData> {\n data: TData;\n loading: boolean;\n /** Non-rejecting signal that resolves when the current full-cart load settles or is invalidated. */\n readonly readyPromise?: PromiseLike<void>;\n pending: CartPending;\n revalidating?: boolean;\n errors: CartErrorState;\n}\n\nexport function createEmptyPending(): CartPending {\n return {\n lines: new Set(),\n note: false,\n attributes: false,\n discountCodes: new Set(),\n cost: false,\n };\n}\n\nexport function createEmptyErrorGroup(): CartErrorGroup {\n return { userErrors: [], warnings: [] };\n}\n\nexport function createEmptyCartErrors(): CartErrorState {\n return {\n cart: createEmptyErrorGroup(),\n lines: new Map(),\n note: createEmptyErrorGroup(),\n attributes: new Map(),\n discountCodes: new Map(),\n network: [],\n lastUpdatedAt: 0,\n cartUpdatedAt: 0,\n linesUpdatedAt: 0,\n noteUpdatedAt: 0,\n attributesUpdatedAt: 0,\n discountCodesUpdatedAt: 0,\n networkUpdatedAt: 0,\n };\n}\n\nexport const EMPTY_CART_DATA: CartData = Object.freeze({\n id: null,\n checkoutUrl: null,\n totalQuantity: 0,\n cost: Object.freeze({\n subtotalAmount: Object.freeze({ amount: \"0\", currencyCode: \"\" }),\n totalAmount: Object.freeze({ amount: \"0\", currencyCode: \"\" }),\n checkoutChargeAmount: Object.freeze({ amount: \"0\", currencyCode: \"\" }),\n }),\n note: \"\",\n attributes: [] as Attribute[],\n lines: Object.freeze({ nodes: [] as CartLine[] }),\n discountCodes: [] as DiscountCode[],\n});\n\nexport function createCartState<TData extends CartData>(\n data: TData,\n { loading = false }: { loading?: boolean } = {},\n): CartState<TData> {\n return {\n data,\n loading,\n pending: createEmptyPending(),\n errors: createEmptyCartErrors(),\n };\n}\n\nexport function createEmptyCartState({ loading = true }: { loading?: boolean } = {}): CartState {\n return createCartState(\n {\n ...EMPTY_CART_DATA,\n lines: { nodes: [] },\n discountCodes: [],\n },\n { loading },\n );\n}\n\nexport const EMPTY_CART_STATE: CartState = createEmptyCartState();\n"],"mappings":";AAsIA,SAAgB,qBAAkC;AAChD,QAAO;EACL,uBAAO,IAAI,KAAK;EAChB,MAAM;EACN,YAAY;EACZ,+BAAe,IAAI,KAAK;EACxB,MAAM;EACP;;AAGH,SAAgB,wBAAwC;AACtD,QAAO;EAAE,YAAY,EAAE;EAAE,UAAU,EAAE;EAAE;;AAGzC,SAAgB,wBAAwC;AACtD,QAAO;EACL,MAAM,uBAAuB;EAC7B,uBAAO,IAAI,KAAK;EAChB,MAAM,uBAAuB;EAC7B,4BAAY,IAAI,KAAK;EACrB,+BAAe,IAAI,KAAK;EACxB,SAAS,EAAE;EACX,eAAe;EACf,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,qBAAqB;EACrB,wBAAwB;EACxB,kBAAkB;EACnB;;AAGH,MAAa,kBAA4B,OAAO,OAAO;CACrD,IAAI;CACJ,aAAa;CACb,eAAe;CACf,MAAM,OAAO,OAAO;EAClB,gBAAgB,OAAO,OAAO;GAAE,QAAQ;GAAK,cAAc;GAAI,CAAC;EAChE,aAAa,OAAO,OAAO;GAAE,QAAQ;GAAK,cAAc;GAAI,CAAC;EAC7D,sBAAsB,OAAO,OAAO;GAAE,QAAQ;GAAK,cAAc;GAAI,CAAC;EACvE,CAAC;CACF,MAAM;CACN,YAAY,EAAE;CACd,OAAO,OAAO,OAAO,EAAE,OAAO,EAAE,EAAgB,CAAC;CACjD,eAAe,EAAE;CAClB,CAAC;AAEF,SAAgB,gBACd,MACA,EAAE,UAAU,UAAiC,EAAE,EAC7B;AAClB,QAAO;EACL;EACA;EACA,SAAS,oBAAoB;EAC7B,QAAQ,uBAAuB;EAChC;;AAGH,SAAgB,qBAAqB,EAAE,UAAU,SAAgC,EAAE,EAAa;AAC9F,QAAO,gBACL;EACE,GAAG;EACH,OAAO,EAAE,OAAO,EAAE,EAAE;EACpB,eAAe,EAAE;EAClB,EACD,EAAE,SAAS,CACZ;;AAGH,MAAa,mBAA8B,sBAAsB"}
@@ -0,0 +1,16 @@
1
+ //#region src/core/cart/sync-quantity-inputs.ts
2
+ function syncQuantityInputs(updates, cartEndpoint) {
3
+ const forms = document.querySelectorAll(`form[action="${CSS.escape(cartEndpoint)}"]`);
4
+ for (const form of forms) for (const { id, quantity } of updates) {
5
+ if (!form.querySelector(`input[name="lineId"][value="${CSS.escape(id)}"]`)) continue;
6
+ const quantityInput = form.querySelector("input[name=\"quantity\"]");
7
+ if (!quantityInput) continue;
8
+ if (quantityInput.type === "hidden") continue;
9
+ if (document.activeElement === quantityInput) continue;
10
+ quantityInput.value = String(quantity);
11
+ }
12
+ }
13
+
14
+ //#endregion
15
+ export { syncQuantityInputs };
16
+ //# sourceMappingURL=sync-quantity-inputs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-quantity-inputs.mjs","names":[],"sources":["../../../src/core/cart/sync-quantity-inputs.ts"],"sourcesContent":["export function syncQuantityInputs(\n updates: Array<{ id: string; quantity: number }>,\n cartEndpoint: string,\n): void {\n const forms = document.querySelectorAll<HTMLFormElement>(\n `form[action=\"${CSS.escape(cartEndpoint)}\"]`,\n );\n\n for (const form of forms) {\n for (const { id, quantity } of updates) {\n const lineIdInput = form.querySelector<HTMLInputElement>(\n `input[name=\"lineId\"][value=\"${CSS.escape(id)}\"]`,\n );\n if (!lineIdInput) continue;\n\n const quantityInput = form.querySelector<HTMLInputElement>('input[name=\"quantity\"]');\n if (!quantityInput) continue;\n if (quantityInput.type === \"hidden\") continue;\n if (document.activeElement === quantityInput) continue;\n\n quantityInput.value = String(quantity);\n }\n }\n}\n"],"mappings":";AAAA,SAAgB,mBACd,SACA,cACM;CACN,MAAM,QAAQ,SAAS,iBACrB,gBAAgB,IAAI,OAAO,aAAa,CAAC,IAC1C;AAED,MAAK,MAAM,QAAQ,MACjB,MAAK,MAAM,EAAE,IAAI,cAAc,SAAS;AAItC,MAAI,CAHgB,KAAK,cACvB,+BAA+B,IAAI,OAAO,GAAG,CAAC,IAEhC,CAAE;EAElB,MAAM,gBAAgB,KAAK,cAAgC,2BAAyB;AACpF,MAAI,CAAC,cAAe;AACpB,MAAI,cAAc,SAAS,SAAU;AACrC,MAAI,SAAS,kBAAkB,cAAe;AAE9C,gBAAc,QAAQ,OAAO,SAAS"}
@@ -0,0 +1,134 @@
1
+ import { ProductCollectionSortKeys } from "../../graphql/generated/storefront-api-types.mjs";
2
+ import { ProductFilter } from "../../vendor/standard-events.mjs";
3
+ import { CollectionState } from "./state.mjs";
4
+
5
+ //#region src/core/collection/collection.d.ts
6
+ /** Snapshot from the framework loader for a single collection fetch. */
7
+ type CollectionData = {
8
+ /** URL-safe collection slug (e.g. `"shoes"`). */handle: string;
9
+ /**
10
+ * Search string this data snapshot was fetched for (with or without leading `?`).
11
+ * Compared against live {@link CreateCollectionStoreOptions.urlSearch} before settling.
12
+ */
13
+ dataSearch: string;
14
+ };
15
+ /**
16
+ * A reactive, framework-agnostic store for collection browse state.
17
+ *
18
+ * Manages filters and sorting — the user's *intent*. Server response
19
+ * data (products, productsCount, availableFilters) lives in the framework's
20
+ * loader data, not here.
21
+ *
22
+ * Mutations are synchronous state changes that set `status: "loading"`.
23
+ * The framework adapter navigates (URL change), the framework loader re-runs,
24
+ * and the adapter calls {@link settle} when fresh data arrives.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const store = createCollectionStore({
29
+ * data: { handle: "shoes", dataSearch: "" },
30
+ * });
31
+ *
32
+ * store.setFilters([{ tag: "sale" }]); // status → "loading"
33
+ * // ...framework fetches...
34
+ * store.settle(); // status → "idle"
35
+ * ```
36
+ */
37
+ type CollectionStore = {
38
+ /** Returns the current snapshot of collection browse state. */getState(): CollectionState;
39
+ /**
40
+ * Registers a listener invoked on every state change. Returns an unsubscribe function.
41
+ * @param listener - Callback receiving the new state snapshot
42
+ */
43
+ subscribe(listener: (state: CollectionState) => void): () => void;
44
+ /**
45
+ * Replaces the active product filters.
46
+ * Sets `status: "loading"` — call {@link settle} when the framework fetch completes.
47
+ */
48
+ setFilters(filters: ProductFilter[]): void;
49
+ /**
50
+ * Adds the filter if not active, removes it if already active.
51
+ * Sets `status: "loading"` — call {@link settle} when the framework fetch completes.
52
+ */
53
+ toggleFilter(filter: ProductFilter): void;
54
+ /**
55
+ * Changes the sort order.
56
+ * Sets `status: "loading"` — call {@link settle} when the framework fetch completes.
57
+ */
58
+ setSortKey(sortKey: ProductCollectionSortKeys, reverse?: boolean): void;
59
+ /**
60
+ * Resets filters and sort to defaults.
61
+ * Sets `status: "loading"` — call {@link settle} when the framework fetch completes.
62
+ */
63
+ reset(): void;
64
+ /**
65
+ * Returns `true` when URL params and current browse state describe the same filters and sort.
66
+ */
67
+ matchesParams(searchParams: URLSearchParams): boolean;
68
+ /**
69
+ * Applies URL search params to the store when they differ from current state.
70
+ * Used when the framework router reports an external URL change (back/forward).
71
+ */
72
+ syncFromParams(searchParams: URLSearchParams): void;
73
+ /**
74
+ * Signals that the framework fetch completed and fresh data is available.
75
+ * Resets `status` to `"idle"`.
76
+ */
77
+ settle(): void;
78
+ /**
79
+ * Serializes the store's current filter/sort state into URL search params.
80
+ * Only includes store-owned keys (`filter.*`, `sort_by`).
81
+ */
82
+ serializeToParams(): URLSearchParams;
83
+ /**
84
+ * Builds a URL string that removes the given filter from the current params.
85
+ * Useful for rendering "remove filter" links/buttons.
86
+ */
87
+ getFilterRemovalUrl(filter: ProductFilter): string;
88
+ /**
89
+ * Parses `FormData` from the submitted form into collection params and applies them.
90
+ * Callers must call `event.preventDefault()` before invoking this method.
91
+ */
92
+ handleFormSubmit(event: SubmitEvent): void;
93
+ /**
94
+ * Replaces the callback that runs after user filter/sort changes. Framework
95
+ * adapters use this to trigger navigation. Pass `null` to remove.
96
+ */
97
+ setOnBrowseChange(callback: (() => void) | null): void;
98
+ /**
99
+ * Parses a Storefront API filter input JSON string (e.g. from
100
+ * `FilterValue.input`) and toggles the resulting filter.
101
+ * No-op if `input` is not valid JSON.
102
+ */
103
+ toggleFilterInput(input: string): void;
104
+ /**
105
+ * Parses a Liquid-compatible `sort_by` value (e.g. `"price-ascending"`) and
106
+ * applies the corresponding sort key and direction.
107
+ */
108
+ setSortByValue(sortByValue: string): void;
109
+ };
110
+ /** Options for creating a new {@link CollectionStore}. */
111
+ type CreateCollectionStoreOptions = {
112
+ /** Collection metadata from the framework loader. */data: CollectionData;
113
+ /**
114
+ * Live URL search string from the framework router (with or without leading `?`).
115
+ * Falls back to `data.dataSearch` when omitted.
116
+ */
117
+ urlSearch?: string;
118
+ /**
119
+ * Called after user-initiated filter/sort changes.
120
+ * Framework adapters use this to trigger navigation. Not called by
121
+ * {@link CollectionStore.syncFromParams} or {@link CollectionStore.settle}.
122
+ */
123
+ onBrowseChange?: () => void;
124
+ };
125
+ /**
126
+ * Creates a new collection store for the given collection handle.
127
+ *
128
+ * The store manages browse intent (filters, sort) only.
129
+ * Server response data lives in the framework's loader.
130
+ */
131
+ declare function createCollectionStore(options: CreateCollectionStoreOptions): CollectionStore;
132
+ //#endregion
133
+ export { CollectionData, CollectionStore, CreateCollectionStoreOptions, createCollectionStore };
134
+ //# sourceMappingURL=collection.d.mts.map
@@ -0,0 +1,170 @@
1
+ import { createObservable } from "../observable.mjs";
2
+ import { createInitialCollectionState } from "./state.mjs";
3
+ import { collectionParamsMatchState, filterEquals, getFilterRemovalUrl, isDirectionalSortKey, parseCollectionParams, parseSortByValue, serializeCollectionParams } from "./url.mjs";
4
+
5
+ //#region src/core/collection/collection.ts
6
+ /**
7
+ * Creates a new collection store for the given collection handle.
8
+ *
9
+ * The store manages browse intent (filters, sort) only.
10
+ * Server response data lives in the framework's loader.
11
+ */
12
+ function createCollectionStore(options) {
13
+ const context = {
14
+ observable: createObservable(buildInitialState(options)),
15
+ handle: options.data.handle,
16
+ onBrowseChange: options.onBrowseChange ?? null
17
+ };
18
+ return {
19
+ getState: () => context.observable.state,
20
+ subscribe: (listener) => context.observable.subscribe(listener),
21
+ setFilters: (filters) => applyBrowseChange(context, { filters: normalizeFilters(filters) }),
22
+ toggleFilter: (filter) => toggleFilter(context, filter),
23
+ setSortKey: (sortKey, reverse) => applyBrowseChange(context, {
24
+ sortKey,
25
+ reverse: reverse ?? false
26
+ }),
27
+ reset: () => resetStore(context),
28
+ matchesParams: (searchParams) => matchesParams(context, searchParams),
29
+ syncFromParams: (searchParams) => syncFromParams(context, searchParams),
30
+ settle: () => settleStore(context),
31
+ serializeToParams: () => serializeCollectionParams(context.observable.state),
32
+ getFilterRemovalUrl: (filter) => getFilterRemovalUrl(serializeCollectionParams(context.observable.state), filter),
33
+ handleFormSubmit: (event) => handleFormSubmit(context, event),
34
+ setOnBrowseChange: (callback) => {
35
+ context.onBrowseChange = callback;
36
+ },
37
+ toggleFilterInput: (input) => toggleFilterInput(context, input),
38
+ setSortByValue: (sortByValue) => setSortByValue(context, sortByValue)
39
+ };
40
+ }
41
+ function buildInitialState(options) {
42
+ const base = createInitialCollectionState(options.data.handle);
43
+ const search = options.urlSearch ?? options.data.dataSearch;
44
+ if (search) {
45
+ const parsed = parseCollectionParams(new URLSearchParams(search));
46
+ base.filters = parsed.filters;
47
+ base.sortKey = parsed.sortKey;
48
+ base.reverse = normalizeReverse(parsed.sortKey, parsed.reverse);
49
+ }
50
+ return base;
51
+ }
52
+ /**
53
+ * Drops `reverse` for sort keys that do not support direction.
54
+ * Only `PRICE`, `TITLE`, `CREATED`, and `ID` honor ascending/descending.
55
+ *
56
+ * @example normalizeReverse("BEST_SELLING", true) // → false
57
+ * @example normalizeReverse("PRICE", true) // → true
58
+ */
59
+ function normalizeReverse(sortKey, reverse) {
60
+ if (!sortKey || !isDirectionalSortKey(sortKey)) return false;
61
+ return reverse;
62
+ }
63
+ function applyBrowseChange(context, change, notify = true) {
64
+ context.observable.setState((prev) => {
65
+ const merged = {
66
+ ...prev,
67
+ ...change,
68
+ status: "loading"
69
+ };
70
+ merged.reverse = normalizeReverse(merged.sortKey, merged.reverse);
71
+ return merged;
72
+ });
73
+ if (notify) context.onBrowseChange?.();
74
+ }
75
+ function toggleFilter(context, filter) {
76
+ const current = context.observable.state.filters;
77
+ applyBrowseChange(context, { filters: current.some((f) => filterEquals(f, filter)) ? current.filter((f) => !filterEquals(f, filter)) : normalizeFilters([...current, filter]) });
78
+ }
79
+ function normalizeFilters(filters) {
80
+ const normalized = [];
81
+ for (const filter of filters) {
82
+ if (filter.available != null) {
83
+ const existingAvailabilityIndex = normalized.findIndex((candidate) => {
84
+ return candidate.available != null;
85
+ });
86
+ if (existingAvailabilityIndex !== -1) {
87
+ normalized.splice(existingAvailabilityIndex, 1);
88
+ continue;
89
+ }
90
+ }
91
+ normalized.push(filter);
92
+ }
93
+ return normalized;
94
+ }
95
+ function resetStore(context) {
96
+ const initial = createInitialCollectionState(context.handle);
97
+ applyBrowseChange(context, {
98
+ filters: initial.filters,
99
+ sortKey: initial.sortKey,
100
+ reverse: initial.reverse
101
+ });
102
+ }
103
+ function matchesParams(context, searchParams) {
104
+ return collectionParamsMatchState(searchParams, context.observable.state);
105
+ }
106
+ function syncFromParams(context, searchParams) {
107
+ if (matchesParams(context, searchParams)) return;
108
+ const parsed = parseCollectionParams(searchParams);
109
+ if (context.observable.state.status === "loading") {
110
+ context.observable.setState((prev) => ({
111
+ ...prev,
112
+ filters: parsed.filters,
113
+ sortKey: parsed.sortKey,
114
+ reverse: normalizeReverse(parsed.sortKey, parsed.reverse),
115
+ status: "loading"
116
+ }));
117
+ return;
118
+ }
119
+ /**
120
+ * URL already changes, so we don't need to notify to call onBrowseChange
121
+ * again which would cause a double navigate.
122
+ */
123
+ applyBrowseChange(context, {
124
+ filters: parsed.filters,
125
+ sortKey: parsed.sortKey,
126
+ reverse: parsed.reverse
127
+ }, false);
128
+ }
129
+ function settleStore(context) {
130
+ context.observable.setState((prev) => {
131
+ if (prev.status === "idle") return prev;
132
+ return {
133
+ ...prev,
134
+ status: "idle"
135
+ };
136
+ });
137
+ }
138
+ function handleFormSubmit(context, event) {
139
+ if (!(event.target instanceof HTMLFormElement)) throw new TypeError(`Expected event.target to be an HTMLFormElement, got ${event.target}`);
140
+ const formData = new FormData(event.target);
141
+ const formParams = new URLSearchParams();
142
+ for (const [key, value] of formData.entries()) if (typeof value === "string") formParams.append(key, value);
143
+ const parsed = parseCollectionParams(formParams);
144
+ const change = { filters: normalizeFilters(parsed.filters) };
145
+ if (formParams.has("sort_by")) {
146
+ change.sortKey = parsed.sortKey;
147
+ change.reverse = parsed.reverse;
148
+ }
149
+ applyBrowseChange(context, change);
150
+ }
151
+ function toggleFilterInput(context, input) {
152
+ let parsed;
153
+ try {
154
+ parsed = JSON.parse(input);
155
+ } catch {
156
+ return;
157
+ }
158
+ toggleFilter(context, parsed);
159
+ }
160
+ function setSortByValue(context, sortByValue) {
161
+ const { sortKey, reverse } = parseSortByValue(sortByValue);
162
+ applyBrowseChange(context, {
163
+ sortKey: sortKey ?? "COLLECTION_DEFAULT",
164
+ reverse: reverse ?? false
165
+ });
166
+ }
167
+
168
+ //#endregion
169
+ export { createCollectionStore };
170
+ //# sourceMappingURL=collection.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.mjs","names":[],"sources":["../../../src/core/collection/collection.ts"],"sourcesContent":["import type { ProductCollectionSortKeys } from \"../../graphql/generated/storefront-api-types\";\nimport { createObservable } from \"../observable\";\nimport type { CollectionState, ProductFilter } from \"./state\";\nimport { createInitialCollectionState } from \"./state\";\nimport {\n collectionParamsMatchState,\n filterEquals,\n getFilterRemovalUrl,\n isDirectionalSortKey,\n parseCollectionParams,\n parseSortByValue,\n serializeCollectionParams,\n} from \"./url\";\n\n/** Snapshot from the framework loader for a single collection fetch. */\nexport type CollectionData = {\n /** URL-safe collection slug (e.g. `\"shoes\"`). */\n handle: string;\n /**\n * Search string this data snapshot was fetched for (with or without leading `?`).\n * Compared against live {@link CreateCollectionStoreOptions.urlSearch} before settling.\n */\n dataSearch: string;\n};\n\n/**\n * A reactive, framework-agnostic store for collection browse state.\n *\n * Manages filters and sorting — the user's *intent*. Server response\n * data (products, productsCount, availableFilters) lives in the framework's\n * loader data, not here.\n *\n * Mutations are synchronous state changes that set `status: \"loading\"`.\n * The framework adapter navigates (URL change), the framework loader re-runs,\n * and the adapter calls {@link settle} when fresh data arrives.\n *\n * @example\n * ```ts\n * const store = createCollectionStore({\n * data: { handle: \"shoes\", dataSearch: \"\" },\n * });\n *\n * store.setFilters([{ tag: \"sale\" }]); // status → \"loading\"\n * // ...framework fetches...\n * store.settle(); // status → \"idle\"\n * ```\n */\nexport type CollectionStore = {\n /** Returns the current snapshot of collection browse state. */\n getState(): CollectionState;\n\n /**\n * Registers a listener invoked on every state change. Returns an unsubscribe function.\n * @param listener - Callback receiving the new state snapshot\n */\n subscribe(listener: (state: CollectionState) => void): () => void;\n\n /**\n * Replaces the active product filters.\n * Sets `status: \"loading\"` — call {@link settle} when the framework fetch completes.\n */\n setFilters(filters: ProductFilter[]): void;\n\n /**\n * Adds the filter if not active, removes it if already active.\n * Sets `status: \"loading\"` — call {@link settle} when the framework fetch completes.\n */\n toggleFilter(filter: ProductFilter): void;\n\n /**\n * Changes the sort order.\n * Sets `status: \"loading\"` — call {@link settle} when the framework fetch completes.\n */\n setSortKey(sortKey: ProductCollectionSortKeys, reverse?: boolean): void;\n\n /**\n * Resets filters and sort to defaults.\n * Sets `status: \"loading\"` — call {@link settle} when the framework fetch completes.\n */\n reset(): void;\n\n /**\n * Returns `true` when URL params and current browse state describe the same filters and sort.\n */\n matchesParams(searchParams: URLSearchParams): boolean;\n\n /**\n * Applies URL search params to the store when they differ from current state.\n * Used when the framework router reports an external URL change (back/forward).\n */\n syncFromParams(searchParams: URLSearchParams): void;\n\n /**\n * Signals that the framework fetch completed and fresh data is available.\n * Resets `status` to `\"idle\"`.\n */\n settle(): void;\n\n /**\n * Serializes the store's current filter/sort state into URL search params.\n * Only includes store-owned keys (`filter.*`, `sort_by`).\n */\n serializeToParams(): URLSearchParams;\n\n /**\n * Builds a URL string that removes the given filter from the current params.\n * Useful for rendering \"remove filter\" links/buttons.\n */\n getFilterRemovalUrl(filter: ProductFilter): string;\n\n /**\n * Parses `FormData` from the submitted form into collection params and applies them.\n * Callers must call `event.preventDefault()` before invoking this method.\n */\n handleFormSubmit(event: SubmitEvent): void;\n\n /**\n * Replaces the callback that runs after user filter/sort changes. Framework\n * adapters use this to trigger navigation. Pass `null` to remove.\n */\n setOnBrowseChange(callback: (() => void) | null): void;\n\n /**\n * Parses a Storefront API filter input JSON string (e.g. from\n * `FilterValue.input`) and toggles the resulting filter.\n * No-op if `input` is not valid JSON.\n */\n toggleFilterInput(input: string): void;\n\n /**\n * Parses a Liquid-compatible `sort_by` value (e.g. `\"price-ascending\"`) and\n * applies the corresponding sort key and direction.\n */\n setSortByValue(sortByValue: string): void;\n};\n\n/** Options for creating a new {@link CollectionStore}. */\nexport type CreateCollectionStoreOptions = {\n /** Collection metadata from the framework loader. */\n data: CollectionData;\n /**\n * Live URL search string from the framework router (with or without leading `?`).\n * Falls back to `data.dataSearch` when omitted.\n */\n urlSearch?: string;\n /**\n * Called after user-initiated filter/sort changes.\n * Framework adapters use this to trigger navigation. Not called by\n * {@link CollectionStore.syncFromParams} or {@link CollectionStore.settle}.\n */\n onBrowseChange?: () => void;\n};\n\ntype CollectionStoreContext = {\n observable: ReturnType<typeof createObservable<CollectionState>>;\n handle: string;\n onBrowseChange: (() => void) | null;\n};\n\n/**\n * Creates a new collection store for the given collection handle.\n *\n * The store manages browse intent (filters, sort) only.\n * Server response data lives in the framework's loader.\n */\nexport function createCollectionStore(options: CreateCollectionStoreOptions): CollectionStore {\n const initialState = buildInitialState(options);\n\n const context: CollectionStoreContext = {\n observable: createObservable<CollectionState>(initialState),\n handle: options.data.handle,\n onBrowseChange: options.onBrowseChange ?? null,\n };\n\n return {\n getState: () => context.observable.state,\n subscribe: (listener) => context.observable.subscribe(listener),\n setFilters: (filters) => applyBrowseChange(context, { filters: normalizeFilters(filters) }),\n toggleFilter: (filter) => toggleFilter(context, filter),\n setSortKey: (sortKey, reverse) =>\n applyBrowseChange(context, { sortKey, reverse: reverse ?? false }),\n reset: () => resetStore(context),\n matchesParams: (searchParams) => matchesParams(context, searchParams),\n syncFromParams: (searchParams) => syncFromParams(context, searchParams),\n settle: () => settleStore(context),\n serializeToParams: () => serializeCollectionParams(context.observable.state),\n getFilterRemovalUrl: (filter) =>\n getFilterRemovalUrl(serializeCollectionParams(context.observable.state), filter),\n handleFormSubmit: (event) => handleFormSubmit(context, event),\n setOnBrowseChange: (callback) => {\n context.onBrowseChange = callback;\n },\n toggleFilterInput: (input) => toggleFilterInput(context, input),\n setSortByValue: (sortByValue) => setSortByValue(context, sortByValue),\n };\n}\n\nfunction buildInitialState(options: CreateCollectionStoreOptions): CollectionState {\n const base = createInitialCollectionState(options.data.handle);\n\n const search = options.urlSearch ?? options.data.dataSearch;\n if (search) {\n const parsed = parseCollectionParams(new URLSearchParams(search));\n base.filters = parsed.filters;\n base.sortKey = parsed.sortKey;\n base.reverse = normalizeReverse(parsed.sortKey, parsed.reverse);\n }\n\n return base;\n}\n\ntype BrowseChange = Partial<Pick<CollectionState, \"filters\" | \"sortKey\" | \"reverse\">>;\n\n/**\n * Drops `reverse` for sort keys that do not support direction.\n * Only `PRICE`, `TITLE`, `CREATED`, and `ID` honor ascending/descending.\n *\n * @example normalizeReverse(\"BEST_SELLING\", true) // → false\n * @example normalizeReverse(\"PRICE\", true) // → true\n */\nfunction normalizeReverse(\n sortKey: ProductCollectionSortKeys | undefined,\n reverse: boolean,\n): boolean {\n if (!sortKey || !isDirectionalSortKey(sortKey)) return false;\n return reverse;\n}\n\nfunction applyBrowseChange(\n context: CollectionStoreContext,\n change: BrowseChange,\n notify = true,\n): void {\n context.observable.setState((prev) => {\n const merged = { ...prev, ...change, status: \"loading\" as const };\n merged.reverse = normalizeReverse(merged.sortKey, merged.reverse);\n return merged;\n });\n if (notify) {\n context.onBrowseChange?.();\n }\n}\n\nfunction toggleFilter(context: CollectionStoreContext, filter: ProductFilter): void {\n const current = context.observable.state.filters;\n const isActive = current.some((f) => filterEquals(f, filter));\n\n const next = isActive\n ? current.filter((f) => !filterEquals(f, filter))\n : normalizeFilters([...current, filter]);\n\n applyBrowseChange(context, { filters: next });\n}\n\nfunction normalizeFilters(filters: ProductFilter[]): ProductFilter[] {\n const normalized: ProductFilter[] = [];\n\n for (const filter of filters) {\n if (filter.available != null) {\n // Availability is a single boolean facet. Duplicate availability params\n // (filter.v.availability=1&filter.v.availability=0) mean no filter, so\n // keeping both values here prevents the provider from settling navigation.\n const existingAvailabilityIndex = normalized.findIndex((candidate) => {\n return candidate.available != null;\n });\n\n if (existingAvailabilityIndex !== -1) {\n normalized.splice(existingAvailabilityIndex, 1);\n continue;\n }\n }\n\n normalized.push(filter);\n }\n\n return normalized;\n}\n\nfunction resetStore(context: CollectionStoreContext): void {\n const initial = createInitialCollectionState(context.handle);\n applyBrowseChange(context, {\n filters: initial.filters,\n sortKey: initial.sortKey,\n reverse: initial.reverse,\n });\n}\n\nfunction matchesParams(context: CollectionStoreContext, searchParams: URLSearchParams): boolean {\n return collectionParamsMatchState(searchParams, context.observable.state);\n}\n\nfunction syncFromParams(context: CollectionStoreContext, searchParams: URLSearchParams): void {\n if (matchesParams(context, searchParams)) return;\n\n const parsed = parseCollectionParams(searchParams);\n\n // URL caught up to an in-flight browse change — align state without re-entering loading.\n if (context.observable.state.status === \"loading\") {\n context.observable.setState((prev) => ({\n ...prev,\n filters: parsed.filters,\n sortKey: parsed.sortKey,\n reverse: normalizeReverse(parsed.sortKey, parsed.reverse),\n status: \"loading\",\n }));\n return;\n }\n\n /**\n * URL already changes, so we don't need to notify to call onBrowseChange\n * again which would cause a double navigate.\n */\n applyBrowseChange(\n context,\n {\n filters: parsed.filters,\n sortKey: parsed.sortKey,\n reverse: parsed.reverse,\n },\n false,\n );\n}\n\nfunction settleStore(context: CollectionStoreContext): void {\n context.observable.setState((prev) => {\n if (prev.status === \"idle\") return prev;\n return { ...prev, status: \"idle\" };\n });\n}\n\nfunction handleFormSubmit(context: CollectionStoreContext, event: SubmitEvent): void {\n if (!(event.target instanceof HTMLFormElement)) {\n throw new TypeError(`Expected event.target to be an HTMLFormElement, got ${event.target}`);\n }\n\n const formData = new FormData(event.target);\n const formParams = new URLSearchParams();\n\n for (const [key, value] of formData.entries()) {\n if (typeof value === \"string\") {\n formParams.append(key, value);\n }\n }\n\n const parsed = parseCollectionParams(formParams);\n\n const change: BrowseChange = {\n filters: normalizeFilters(parsed.filters),\n };\n\n if (formParams.has(\"sort_by\")) {\n change.sortKey = parsed.sortKey;\n change.reverse = parsed.reverse;\n }\n\n applyBrowseChange(context, change);\n}\n\nfunction toggleFilterInput(context: CollectionStoreContext, input: string): void {\n let parsed: ProductFilter;\n try {\n parsed = JSON.parse(input) as ProductFilter;\n } catch {\n return;\n }\n toggleFilter(context, parsed);\n}\n\nfunction setSortByValue(context: CollectionStoreContext, sortByValue: string): void {\n const { sortKey, reverse } = parseSortByValue(sortByValue);\n applyBrowseChange(context, {\n sortKey: sortKey ?? \"COLLECTION_DEFAULT\",\n reverse: reverse ?? false,\n });\n}\n"],"mappings":";;;;;;;;;;;AAqKA,SAAgB,sBAAsB,SAAwD;CAG5F,MAAM,UAAkC;EACtC,YAAY,iBAHO,kBAAkB,QAGqB,CAAC;EAC3D,QAAQ,QAAQ,KAAK;EACrB,gBAAgB,QAAQ,kBAAkB;EAC3C;AAED,QAAO;EACL,gBAAgB,QAAQ,WAAW;EACnC,YAAY,aAAa,QAAQ,WAAW,UAAU,SAAS;EAC/D,aAAa,YAAY,kBAAkB,SAAS,EAAE,SAAS,iBAAiB,QAAQ,EAAE,CAAC;EAC3F,eAAe,WAAW,aAAa,SAAS,OAAO;EACvD,aAAa,SAAS,YACpB,kBAAkB,SAAS;GAAE;GAAS,SAAS,WAAW;GAAO,CAAC;EACpE,aAAa,WAAW,QAAQ;EAChC,gBAAgB,iBAAiB,cAAc,SAAS,aAAa;EACrE,iBAAiB,iBAAiB,eAAe,SAAS,aAAa;EACvE,cAAc,YAAY,QAAQ;EAClC,yBAAyB,0BAA0B,QAAQ,WAAW,MAAM;EAC5E,sBAAsB,WACpB,oBAAoB,0BAA0B,QAAQ,WAAW,MAAM,EAAE,OAAO;EAClF,mBAAmB,UAAU,iBAAiB,SAAS,MAAM;EAC7D,oBAAoB,aAAa;AAC/B,WAAQ,iBAAiB;;EAE3B,oBAAoB,UAAU,kBAAkB,SAAS,MAAM;EAC/D,iBAAiB,gBAAgB,eAAe,SAAS,YAAY;EACtE;;AAGH,SAAS,kBAAkB,SAAwD;CACjF,MAAM,OAAO,6BAA6B,QAAQ,KAAK,OAAO;CAE9D,MAAM,SAAS,QAAQ,aAAa,QAAQ,KAAK;AACjD,KAAI,QAAQ;EACV,MAAM,SAAS,sBAAsB,IAAI,gBAAgB,OAAO,CAAC;AACjE,OAAK,UAAU,OAAO;AACtB,OAAK,UAAU,OAAO;AACtB,OAAK,UAAU,iBAAiB,OAAO,SAAS,OAAO,QAAQ;;AAGjE,QAAO;;;;;;;;;AAYT,SAAS,iBACP,SACA,SACS;AACT,KAAI,CAAC,WAAW,CAAC,qBAAqB,QAAQ,CAAE,QAAO;AACvD,QAAO;;AAGT,SAAS,kBACP,SACA,QACA,SAAS,MACH;AACN,SAAQ,WAAW,UAAU,SAAS;EACpC,MAAM,SAAS;GAAE,GAAG;GAAM,GAAG;GAAQ,QAAQ;GAAoB;AACjE,SAAO,UAAU,iBAAiB,OAAO,SAAS,OAAO,QAAQ;AACjE,SAAO;GACP;AACF,KAAI,OACF,SAAQ,kBAAkB;;AAI9B,SAAS,aAAa,SAAiC,QAA6B;CAClF,MAAM,UAAU,QAAQ,WAAW,MAAM;AAOzC,mBAAkB,SAAS,EAAE,SANZ,QAAQ,MAAM,MAAM,aAAa,GAAG,OAAO,CAEvC,GACjB,QAAQ,QAAQ,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,GAC/C,iBAAiB,CAAC,GAAG,SAAS,OAAO,CAAC,EAEE,CAAC;;AAG/C,SAAS,iBAAiB,SAA2C;CACnE,MAAM,aAA8B,EAAE;AAEtC,MAAK,MAAM,UAAU,SAAS;AAC5B,MAAI,OAAO,aAAa,MAAM;GAI5B,MAAM,4BAA4B,WAAW,WAAW,cAAc;AACpE,WAAO,UAAU,aAAa;KAC9B;AAEF,OAAI,8BAA8B,IAAI;AACpC,eAAW,OAAO,2BAA2B,EAAE;AAC/C;;;AAIJ,aAAW,KAAK,OAAO;;AAGzB,QAAO;;AAGT,SAAS,WAAW,SAAuC;CACzD,MAAM,UAAU,6BAA6B,QAAQ,OAAO;AAC5D,mBAAkB,SAAS;EACzB,SAAS,QAAQ;EACjB,SAAS,QAAQ;EACjB,SAAS,QAAQ;EAClB,CAAC;;AAGJ,SAAS,cAAc,SAAiC,cAAwC;AAC9F,QAAO,2BAA2B,cAAc,QAAQ,WAAW,MAAM;;AAG3E,SAAS,eAAe,SAAiC,cAAqC;AAC5F,KAAI,cAAc,SAAS,aAAa,CAAE;CAE1C,MAAM,SAAS,sBAAsB,aAAa;AAGlD,KAAI,QAAQ,WAAW,MAAM,WAAW,WAAW;AACjD,UAAQ,WAAW,UAAU,UAAU;GACrC,GAAG;GACH,SAAS,OAAO;GAChB,SAAS,OAAO;GAChB,SAAS,iBAAiB,OAAO,SAAS,OAAO,QAAQ;GACzD,QAAQ;GACT,EAAE;AACH;;;;;;AAOF,mBACE,SACA;EACE,SAAS,OAAO;EAChB,SAAS,OAAO;EAChB,SAAS,OAAO;EACjB,EACD,MACD;;AAGH,SAAS,YAAY,SAAuC;AAC1D,SAAQ,WAAW,UAAU,SAAS;AACpC,MAAI,KAAK,WAAW,OAAQ,QAAO;AACnC,SAAO;GAAE,GAAG;GAAM,QAAQ;GAAQ;GAClC;;AAGJ,SAAS,iBAAiB,SAAiC,OAA0B;AACnF,KAAI,EAAE,MAAM,kBAAkB,iBAC5B,OAAM,IAAI,UAAU,uDAAuD,MAAM,SAAS;CAG5F,MAAM,WAAW,IAAI,SAAS,MAAM,OAAO;CAC3C,MAAM,aAAa,IAAI,iBAAiB;AAExC,MAAK,MAAM,CAAC,KAAK,UAAU,SAAS,SAAS,CAC3C,KAAI,OAAO,UAAU,SACnB,YAAW,OAAO,KAAK,MAAM;CAIjC,MAAM,SAAS,sBAAsB,WAAW;CAEhD,MAAM,SAAuB,EAC3B,SAAS,iBAAiB,OAAO,QAAQ,EAC1C;AAED,KAAI,WAAW,IAAI,UAAU,EAAE;AAC7B,SAAO,UAAU,OAAO;AACxB,SAAO,UAAU,OAAO;;AAG1B,mBAAkB,SAAS,OAAO;;AAGpC,SAAS,kBAAkB,SAAiC,OAAqB;CAC/E,IAAI;AACJ,KAAI;AACF,WAAS,KAAK,MAAM,MAAM;SACpB;AACN;;AAEF,cAAa,SAAS,OAAO;;AAG/B,SAAS,eAAe,SAAiC,aAA2B;CAClF,MAAM,EAAE,SAAS,YAAY,iBAAiB,YAAY;AAC1D,mBAAkB,SAAS;EACzB,SAAS,WAAW;EACpB,SAAS,WAAW;EACrB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ProductCollectionSortKeys } from "../../graphql/generated/storefront-api-types.mjs";
2
+ import { ProductFilter } from "../../vendor/standard-events.mjs";
3
+ import { AvailableFilter, AvailableFilterValue, CollectionState, FilterPresentation, FilterType, createInitialCollectionState } from "./state.mjs";
4
+ import { CollectionData, CollectionStore, CreateCollectionStoreOptions, createCollectionStore } from "./collection.mjs";
5
+ import { CollectionReconciler, ReconcilerCallbacks, createCollectionReconciler } from "./reconciler.mjs";
6
+ import { CollectionParams, filterEquals, getFilterRemovalUrl, getSortByValue, isFilterInputActive, normalizeCollectionSearch, parseCollectionParams, parseSortByValue, serializeCollectionParams } from "./url.mjs";
@@ -0,0 +1,32 @@
1
+ import { CollectionStore } from "./collection.mjs";
2
+
3
+ //#region src/core/collection/reconciler.d.ts
4
+ type ReconcilerCallbacks = {
5
+ getStore: () => CollectionStore;
6
+ readUrlSearch: () => string;
7
+ emitChange: (searchString: string) => void;
8
+ };
9
+ type CollectionReconciler = {
10
+ /**
11
+ * URL ↔ store reconciliation state machine. Call whenever urlSearch,
12
+ * dataSearch, or store state changes.
13
+ */
14
+ reconcile(urlSearch: string, dataSearch: string): void;
15
+ /**
16
+ * Callback for {@link CollectionStore.setOnBrowseChange}. Merges current
17
+ * URL params with store state, tracks the pending navigation, and emits.
18
+ */
19
+ handleBrowseChange(): void; /** Clears pending navigation state (call when the store is recreated). */
20
+ reset(newPrevUrlSearch: string): void;
21
+ };
22
+ /**
23
+ * Creates a framework-agnostic reconciler that manages the state machine for
24
+ * keeping the URL, server data, and store in sync during browse-change chains.
25
+ *
26
+ * Framework adapters delegate to this so the reconciliation logic
27
+ * lives in one place.
28
+ */
29
+ declare function createCollectionReconciler(callbacks: ReconcilerCallbacks, initialPrevUrlSearch?: string): CollectionReconciler;
30
+ //#endregion
31
+ export { CollectionReconciler, ReconcilerCallbacks, createCollectionReconciler };
32
+ //# sourceMappingURL=reconciler.d.mts.map