@shopify/hydrogen 2026.4.4 → 2026.10.0-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (754) hide show
  1. package/README.md +73 -13
  2. package/bin/hydrogen.mjs +7 -0
  3. package/dist/cli/index.mjs +330 -0
  4. package/dist/client/client.d.mts +34 -0
  5. package/dist/client/client.mjs +193 -0
  6. package/dist/client/client.mjs.map +1 -0
  7. package/dist/client/errors.d.mts +48 -0
  8. package/dist/client/errors.mjs +52 -0
  9. package/dist/client/errors.mjs.map +1 -0
  10. package/dist/client/index.d.mts +4 -0
  11. package/dist/client/types.d.mts +147 -0
  12. package/dist/core/analytics/cart-tracker.d.mts +8 -0
  13. package/dist/core/analytics/cart-tracker.mjs +144 -0
  14. package/dist/core/analytics/cart-tracker.mjs.map +1 -0
  15. package/dist/core/analytics/events.d.mts +15 -0
  16. package/dist/core/analytics/events.mjs +15 -0
  17. package/dist/core/analytics/events.mjs.map +1 -0
  18. package/dist/core/analytics/index.d.mts +3 -0
  19. package/dist/core/analytics/types.d.mts +143 -0
  20. package/dist/core/analytics/utils/flatten-connection.d.mts +19 -0
  21. package/dist/core/analytics/utils/flatten-connection.mjs +25 -0
  22. package/dist/core/analytics/utils/flatten-connection.mjs.map +1 -0
  23. package/dist/core/cache/cache-status.mjs +17 -0
  24. package/dist/core/cache/cache-status.mjs.map +1 -0
  25. package/dist/core/cache/fetch-with-cache.d.mts +43 -0
  26. package/dist/core/cache/fetch-with-cache.mjs +188 -0
  27. package/dist/core/cache/fetch-with-cache.mjs.map +1 -0
  28. package/dist/core/cache/key.d.mts +6 -0
  29. package/dist/core/cache/key.mjs +27 -0
  30. package/dist/core/cache/key.mjs.map +1 -0
  31. package/dist/core/cache/run-with-cache.d.mts +36 -0
  32. package/dist/core/cache/run-with-cache.mjs +114 -0
  33. package/dist/core/cache/run-with-cache.mjs.map +1 -0
  34. package/dist/core/cache/store.d.mts +19 -0
  35. package/dist/core/cache/store.mjs +62 -0
  36. package/dist/core/cache/store.mjs.map +1 -0
  37. package/dist/core/cache/strategies.d.mts +39 -0
  38. package/dist/core/cache/strategies.mjs +70 -0
  39. package/dist/core/cache/strategies.mjs.map +1 -0
  40. package/dist/core/cart/actions.d.mts +50 -0
  41. package/dist/core/cart/actions.mjs +240 -0
  42. package/dist/core/cart/actions.mjs.map +1 -0
  43. package/dist/core/cart/attach-quantity-input.d.mts +5 -0
  44. package/dist/core/cart/attach-quantity-input.mjs +17 -0
  45. package/dist/core/cart/attach-quantity-input.mjs.map +1 -0
  46. package/dist/core/cart/buyer-identity-sync.d.mts +23 -0
  47. package/dist/core/cart/buyer-identity-sync.mjs +9 -0
  48. package/dist/core/cart/buyer-identity-sync.mjs.map +1 -0
  49. package/dist/core/cart/cart.d.mts +32 -0
  50. package/dist/core/cart/cart.mjs +1687 -0
  51. package/dist/core/cart/cart.mjs.map +1 -0
  52. package/dist/core/cart/cookie.d.mts +5 -0
  53. package/dist/core/cart/cookie.mjs +28 -0
  54. package/dist/core/cart/cookie.mjs.map +1 -0
  55. package/dist/core/cart/form.d.mts +130 -0
  56. package/dist/core/cart/form.mjs +75 -0
  57. package/dist/core/cart/form.mjs.map +1 -0
  58. package/dist/core/cart/get-cart.d.mts +25 -0
  59. package/dist/core/cart/get-cart.mjs +32 -0
  60. package/dist/core/cart/get-cart.mjs.map +1 -0
  61. package/dist/core/cart/index.d.mts +10 -0
  62. package/dist/core/cart/quantity.d.mts +10 -0
  63. package/dist/core/cart/quantity.mjs +14 -0
  64. package/dist/core/cart/quantity.mjs.map +1 -0
  65. package/dist/core/cart/queries.d.mts +4296 -0
  66. package/dist/core/cart/queries.mjs +70 -0
  67. package/dist/core/cart/queries.mjs.map +1 -0
  68. package/dist/core/cart/server-handlers.d.mts +82 -0
  69. package/dist/core/cart/server-handlers.mjs +322 -0
  70. package/dist/core/cart/server-handlers.mjs.map +1 -0
  71. package/dist/core/cart/state.d.mts +137 -0
  72. package/dist/core/cart/state.mjs +76 -0
  73. package/dist/core/cart/state.mjs.map +1 -0
  74. package/dist/core/cart/sync-quantity-inputs.mjs +16 -0
  75. package/dist/core/cart/sync-quantity-inputs.mjs.map +1 -0
  76. package/dist/core/collection/collection.d.mts +134 -0
  77. package/dist/core/collection/collection.mjs +170 -0
  78. package/dist/core/collection/collection.mjs.map +1 -0
  79. package/dist/core/collection/index.d.mts +6 -0
  80. package/dist/core/collection/reconciler.d.mts +32 -0
  81. package/dist/core/collection/reconciler.mjs +89 -0
  82. package/dist/core/collection/reconciler.mjs.map +1 -0
  83. package/dist/core/collection/state.d.mts +66 -0
  84. package/dist/core/collection/state.mjs +20 -0
  85. package/dist/core/collection/state.mjs.map +1 -0
  86. package/dist/core/collection/url.d.mts +70 -0
  87. package/dist/core/collection/url.mjs +367 -0
  88. package/dist/core/collection/url.mjs.map +1 -0
  89. package/dist/core/constants.d.mts +5 -0
  90. package/dist/core/constants.mjs +8 -0
  91. package/dist/core/constants.mjs.map +1 -0
  92. package/dist/core/headers.mjs +44 -0
  93. package/dist/core/headers.mjs.map +1 -0
  94. package/dist/core/index.d.mts +55 -0
  95. package/dist/core/index.mjs +44 -0
  96. package/dist/core/logging/logging.d.mts +21 -0
  97. package/dist/core/logging/logging.mjs +99 -0
  98. package/dist/core/logging/logging.mjs.map +1 -0
  99. package/dist/core/logging/types.d.mts +40 -0
  100. package/dist/core/logging/types.mjs +18 -0
  101. package/dist/core/logging/types.mjs.map +1 -0
  102. package/dist/core/money/cache.mjs +25 -0
  103. package/dist/core/money/cache.mjs.map +1 -0
  104. package/dist/core/money/format.d.mts +15 -0
  105. package/dist/core/money/format.mjs +243 -0
  106. package/dist/core/money/format.mjs.map +1 -0
  107. package/dist/core/money/types.d.mts +47 -0
  108. package/dist/core/observable.mjs +46 -0
  109. package/dist/core/observable.mjs.map +1 -0
  110. package/dist/core/predictive-search/constants.d.mts +5 -0
  111. package/dist/core/predictive-search/constants.mjs +6 -0
  112. package/dist/core/predictive-search/constants.mjs.map +1 -0
  113. package/dist/core/predictive-search/form.d.mts +31 -0
  114. package/dist/core/predictive-search/form.mjs +31 -0
  115. package/dist/core/predictive-search/form.mjs.map +1 -0
  116. package/dist/core/predictive-search/index.d.mts +6 -0
  117. package/dist/core/predictive-search/queries.d.mts +118 -0
  118. package/dist/core/predictive-search/queries.mjs +81 -0
  119. package/dist/core/predictive-search/queries.mjs.map +1 -0
  120. package/dist/core/predictive-search/search.d.mts +32 -0
  121. package/dist/core/predictive-search/search.mjs +74 -0
  122. package/dist/core/predictive-search/search.mjs.map +1 -0
  123. package/dist/core/predictive-search/server-handlers.d.mts +36 -0
  124. package/dist/core/predictive-search/server-handlers.mjs +113 -0
  125. package/dist/core/predictive-search/server-handlers.mjs.map +1 -0
  126. package/dist/core/predictive-search/store.d.mts +44 -0
  127. package/dist/core/predictive-search/store.mjs +224 -0
  128. package/dist/core/predictive-search/store.mjs.map +1 -0
  129. package/dist/core/predictive-search/url.d.mts +41 -0
  130. package/dist/core/predictive-search/url.mjs +71 -0
  131. package/dist/core/predictive-search/url.mjs.map +1 -0
  132. package/dist/core/product/form.d.mts +63 -0
  133. package/dist/core/product/form.mjs +44 -0
  134. package/dist/core/product/form.mjs.map +1 -0
  135. package/dist/core/product/index.d.mts +4 -0
  136. package/dist/core/product/options.d.mts +40 -0
  137. package/dist/core/product/options.mjs +291 -0
  138. package/dist/core/product/options.mjs.map +1 -0
  139. package/dist/core/product/product-form.d.mts +72 -0
  140. package/dist/core/product/product-form.mjs +158 -0
  141. package/dist/core/product/product-form.mjs.map +1 -0
  142. package/dist/core/product/state.d.mts +68 -0
  143. package/dist/core/request-context.d.mts +70 -0
  144. package/dist/core/request-context.mjs +120 -0
  145. package/dist/core/request-context.mjs.map +1 -0
  146. package/dist/core/request-routing/handle-shopify-redirects.d.mts +17 -0
  147. package/dist/core/request-routing/handle-shopify-redirects.mjs +31 -0
  148. package/dist/core/request-routing/handle-shopify-redirects.mjs.map +1 -0
  149. package/dist/core/request-routing/handle-shopify-routes.d.mts +14 -0
  150. package/dist/core/request-routing/handle-shopify-routes.mjs +42 -0
  151. package/dist/core/request-routing/handle-shopify-routes.mjs.map +1 -0
  152. package/dist/core/request-routing/interceptors/admin-redirect.mjs +12 -0
  153. package/dist/core/request-routing/interceptors/admin-redirect.mjs.map +1 -0
  154. package/dist/core/request-routing/interceptors/agent-proxy.mjs +19 -0
  155. package/dist/core/request-routing/interceptors/agent-proxy.mjs.map +1 -0
  156. package/dist/core/request-routing/interceptors/ajax-api.mjs +16 -0
  157. package/dist/core/request-routing/interceptors/ajax-api.mjs.map +1 -0
  158. package/dist/core/request-routing/interceptors/api-proxy.mjs +20 -0
  159. package/dist/core/request-routing/interceptors/api-proxy.mjs.map +1 -0
  160. package/dist/core/request-routing/interceptors/checkout.mjs +58 -0
  161. package/dist/core/request-routing/interceptors/checkout.mjs.map +1 -0
  162. package/dist/core/request-routing/interceptors/mcp-proxy.mjs +23 -0
  163. package/dist/core/request-routing/interceptors/mcp-proxy.mjs.map +1 -0
  164. package/dist/core/request-routing/interceptors/proxy.mjs +68 -0
  165. package/dist/core/request-routing/interceptors/proxy.mjs.map +1 -0
  166. package/dist/core/request-routing/interceptors/query-param-redirect.mjs +22 -0
  167. package/dist/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -0
  168. package/dist/core/request-routing/interceptors/sfapi-proxy.mjs +27 -0
  169. package/dist/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -0
  170. package/dist/core/request-routing/interceptors/standard-routes.mjs +19 -0
  171. package/dist/core/request-routing/interceptors/standard-routes.mjs.map +1 -0
  172. package/dist/core/request-routing/interceptors/url-redirects.mjs +27 -0
  173. package/dist/core/request-routing/interceptors/url-redirects.mjs.map +1 -0
  174. package/dist/core/request-routing/interceptors/well-known.mjs +19 -0
  175. package/dist/core/request-routing/interceptors/well-known.mjs.map +1 -0
  176. package/dist/core/request-routing/registered-routes.d.mts +7 -0
  177. package/dist/core/request-routing/registered-routes.mjs +59 -0
  178. package/dist/core/request-routing/registered-routes.mjs.map +1 -0
  179. package/dist/core/request-routing/route-types.d.mts +51 -0
  180. package/dist/core/request-routing/safe-apply-response-headers.mjs +16 -0
  181. package/dist/core/request-routing/safe-apply-response-headers.mjs.map +1 -0
  182. package/dist/core/shop-pay/shop-pay.d.mts +102 -0
  183. package/dist/core/shop-pay/shop-pay.mjs +289 -0
  184. package/dist/core/shop-pay/shop-pay.mjs.map +1 -0
  185. package/dist/core/shopify-scripts/analytics.mjs +26 -0
  186. package/dist/core/shopify-scripts/analytics.mjs.map +1 -0
  187. package/dist/core/shopify-scripts/consent.mjs +17 -0
  188. package/dist/core/shopify-scripts/consent.mjs.map +1 -0
  189. package/dist/core/shopify-scripts/constants.mjs +19 -0
  190. package/dist/core/shopify-scripts/constants.mjs.map +1 -0
  191. package/dist/core/shopify-scripts/deprecated-cookies.mjs +97 -0
  192. package/dist/core/shopify-scripts/deprecated-cookies.mjs.map +1 -0
  193. package/dist/core/shopify-scripts/global.d.mts +1 -0
  194. package/dist/core/shopify-scripts/global.mjs +86 -0
  195. package/dist/core/shopify-scripts/global.mjs.map +1 -0
  196. package/dist/core/shopify-scripts/index.d.mts +27 -0
  197. package/dist/core/shopify-scripts/index.mjs +135 -0
  198. package/dist/core/shopify-scripts/index.mjs.map +1 -0
  199. package/dist/core/shopify-scripts/initialize.d.mts +18 -0
  200. package/dist/core/shopify-scripts/initialize.mjs +27 -0
  201. package/dist/core/shopify-scripts/initialize.mjs.map +1 -0
  202. package/dist/core/shopify-scripts/page-view.mjs +49 -0
  203. package/dist/core/shopify-scripts/page-view.mjs.map +1 -0
  204. package/dist/core/shopify-scripts/perfkit.mjs +33 -0
  205. package/dist/core/shopify-scripts/perfkit.mjs.map +1 -0
  206. package/dist/core/shopify-scripts/render.d.mts +1 -0
  207. package/dist/core/shopify-scripts/render.mjs +23 -0
  208. package/dist/core/shopify-scripts/render.mjs.map +1 -0
  209. package/dist/core/shopify-scripts/types.d.mts +76 -0
  210. package/dist/core/shopify-scripts/utils/cookie-domain.mjs +43 -0
  211. package/dist/core/shopify-scripts/utils/cookie-domain.mjs.map +1 -0
  212. package/dist/core/shopify-scripts/utils/inline-script.mjs +8 -0
  213. package/dist/core/shopify-scripts/utils/inline-script.mjs.map +1 -0
  214. package/dist/core/shopify-scripts/utils/navigation.mjs +46 -0
  215. package/dist/core/shopify-scripts/utils/navigation.mjs.map +1 -0
  216. package/dist/core/shopify-scripts/utils/tracking-values.mjs +65 -0
  217. package/dist/core/shopify-scripts/utils/tracking-values.mjs.map +1 -0
  218. package/dist/core/shopify-scripts/utils/uuid.mjs +17 -0
  219. package/dist/core/shopify-scripts/utils/uuid.mjs.map +1 -0
  220. package/dist/core/shopify-scripts/webmcp.mjs +22 -0
  221. package/dist/core/shopify-scripts/webmcp.mjs.map +1 -0
  222. package/dist/core/standard-routes/build.d.mts +34 -0
  223. package/dist/core/standard-routes/build.mjs +54 -0
  224. package/dist/core/standard-routes/build.mjs.map +1 -0
  225. package/dist/core/standard-routes/defaults.mjs +31 -0
  226. package/dist/core/standard-routes/defaults.mjs.map +1 -0
  227. package/dist/core/standard-routes/match.mjs +108 -0
  228. package/dist/core/standard-routes/match.mjs.map +1 -0
  229. package/dist/core/standard-routes/path.mjs +58 -0
  230. package/dist/core/standard-routes/path.mjs.map +1 -0
  231. package/dist/core/standard-routes/redirects.mjs +51 -0
  232. package/dist/core/standard-routes/redirects.mjs.map +1 -0
  233. package/dist/core/standard-routes/types.d.mts +95 -0
  234. package/dist/core/url.mjs +35 -0
  235. package/dist/core/url.mjs.map +1 -0
  236. package/dist/core/utils/load-script.mjs +34 -0
  237. package/dist/core/utils/load-script.mjs.map +1 -0
  238. package/dist/core/utils/parse-gid.mjs +33 -0
  239. package/dist/core/utils/parse-gid.mjs.map +1 -0
  240. package/dist/core/utils/record.mjs +8 -0
  241. package/dist/core/utils/record.mjs.map +1 -0
  242. package/dist/customer-account/client.d.mts +50 -0
  243. package/dist/customer-account/client.mjs +239 -0
  244. package/dist/customer-account/client.mjs.map +1 -0
  245. package/dist/customer-account/errors.d.mts +28 -0
  246. package/dist/customer-account/errors.mjs +39 -0
  247. package/dist/customer-account/errors.mjs.map +1 -0
  248. package/dist/customer-account/graphql.d.mts +29 -0
  249. package/dist/customer-account/graphql.mjs +39 -0
  250. package/dist/customer-account/graphql.mjs.map +1 -0
  251. package/dist/customer-account/index.d.mts +7 -0
  252. package/dist/customer-account/index.mjs +7 -0
  253. package/dist/customer-account/session.d.mts +117 -0
  254. package/dist/customer-account/session.mjs +733 -0
  255. package/dist/customer-account/session.mjs.map +1 -0
  256. package/dist/customer-account/type-resolver.d.mts +11 -0
  257. package/dist/customer-account-api-types.d.ts +3269 -3270
  258. package/dist/customer-account.schema.json +50753 -1
  259. package/dist/development/_virtual/_@oxc-project_runtime@0.127.0/helpers/taggedTemplateLiteral.mjs +7 -0
  260. package/dist/development/client/client.d.mts +34 -0
  261. package/dist/development/client/client.mjs +193 -0
  262. package/dist/development/client/client.mjs.map +1 -0
  263. package/dist/development/client/errors.d.mts +48 -0
  264. package/dist/development/client/errors.mjs +57 -0
  265. package/dist/development/client/errors.mjs.map +1 -0
  266. package/dist/development/client/index.d.mts +4 -0
  267. package/dist/development/client/types.d.mts +147 -0
  268. package/dist/development/core/analytics/cart-tracker.d.mts +8 -0
  269. package/dist/development/core/analytics/cart-tracker.mjs +144 -0
  270. package/dist/development/core/analytics/cart-tracker.mjs.map +1 -0
  271. package/dist/development/core/analytics/events.d.mts +15 -0
  272. package/dist/development/core/analytics/events.mjs +15 -0
  273. package/dist/development/core/analytics/events.mjs.map +1 -0
  274. package/dist/development/core/analytics/index.d.mts +3 -0
  275. package/dist/development/core/analytics/types.d.mts +143 -0
  276. package/dist/development/core/analytics/utils/flatten-connection.d.mts +19 -0
  277. package/dist/development/core/analytics/utils/flatten-connection.mjs +25 -0
  278. package/dist/development/core/analytics/utils/flatten-connection.mjs.map +1 -0
  279. package/dist/development/core/cache/cache-status.mjs +17 -0
  280. package/dist/development/core/cache/cache-status.mjs.map +1 -0
  281. package/dist/development/core/cache/fetch-with-cache.d.mts +43 -0
  282. package/dist/development/core/cache/fetch-with-cache.mjs +188 -0
  283. package/dist/development/core/cache/fetch-with-cache.mjs.map +1 -0
  284. package/dist/development/core/cache/key.d.mts +6 -0
  285. package/dist/development/core/cache/key.mjs +27 -0
  286. package/dist/development/core/cache/key.mjs.map +1 -0
  287. package/dist/development/core/cache/run-with-cache.d.mts +36 -0
  288. package/dist/development/core/cache/run-with-cache.mjs +114 -0
  289. package/dist/development/core/cache/run-with-cache.mjs.map +1 -0
  290. package/dist/development/core/cache/store.d.mts +19 -0
  291. package/dist/development/core/cache/store.mjs +62 -0
  292. package/dist/development/core/cache/store.mjs.map +1 -0
  293. package/dist/development/core/cache/strategies.d.mts +39 -0
  294. package/dist/development/core/cache/strategies.mjs +70 -0
  295. package/dist/development/core/cache/strategies.mjs.map +1 -0
  296. package/dist/development/core/cart/actions.d.mts +50 -0
  297. package/dist/development/core/cart/actions.mjs +240 -0
  298. package/dist/development/core/cart/actions.mjs.map +1 -0
  299. package/dist/development/core/cart/attach-quantity-input.d.mts +5 -0
  300. package/dist/development/core/cart/attach-quantity-input.mjs +17 -0
  301. package/dist/development/core/cart/attach-quantity-input.mjs.map +1 -0
  302. package/dist/development/core/cart/buyer-identity-sync.d.mts +19 -0
  303. package/dist/development/core/cart/buyer-identity-sync.mjs +6 -0
  304. package/dist/development/core/cart/buyer-identity-sync.mjs.map +1 -0
  305. package/dist/development/core/cart/cart.d.mts +32 -0
  306. package/dist/development/core/cart/cart.mjs +1687 -0
  307. package/dist/development/core/cart/cart.mjs.map +1 -0
  308. package/dist/development/core/cart/cookie.d.mts +5 -0
  309. package/dist/development/core/cart/cookie.mjs +28 -0
  310. package/dist/development/core/cart/cookie.mjs.map +1 -0
  311. package/dist/development/core/cart/form.d.mts +130 -0
  312. package/dist/development/core/cart/form.mjs +75 -0
  313. package/dist/development/core/cart/form.mjs.map +1 -0
  314. package/dist/development/core/cart/get-cart.d.mts +25 -0
  315. package/dist/development/core/cart/get-cart.mjs +32 -0
  316. package/dist/development/core/cart/get-cart.mjs.map +1 -0
  317. package/dist/development/core/cart/index.d.mts +10 -0
  318. package/dist/development/core/cart/quantity.d.mts +10 -0
  319. package/dist/development/core/cart/quantity.mjs +14 -0
  320. package/dist/development/core/cart/quantity.mjs.map +1 -0
  321. package/dist/development/core/cart/queries.d.mts +4296 -0
  322. package/dist/development/core/cart/queries.mjs +70 -0
  323. package/dist/development/core/cart/queries.mjs.map +1 -0
  324. package/dist/development/core/cart/server-handlers.d.mts +82 -0
  325. package/dist/development/core/cart/server-handlers.mjs +322 -0
  326. package/dist/development/core/cart/server-handlers.mjs.map +1 -0
  327. package/dist/development/core/cart/state.d.mts +137 -0
  328. package/dist/development/core/cart/state.mjs +76 -0
  329. package/dist/development/core/cart/state.mjs.map +1 -0
  330. package/dist/development/core/cart/sync-quantity-inputs.mjs +16 -0
  331. package/dist/development/core/cart/sync-quantity-inputs.mjs.map +1 -0
  332. package/dist/development/core/collection/collection.d.mts +134 -0
  333. package/dist/development/core/collection/collection.mjs +170 -0
  334. package/dist/development/core/collection/collection.mjs.map +1 -0
  335. package/dist/development/core/collection/index.d.mts +6 -0
  336. package/dist/development/core/collection/reconciler.d.mts +32 -0
  337. package/dist/development/core/collection/reconciler.mjs +89 -0
  338. package/dist/development/core/collection/reconciler.mjs.map +1 -0
  339. package/dist/development/core/collection/state.d.mts +66 -0
  340. package/dist/development/core/collection/state.mjs +20 -0
  341. package/dist/development/core/collection/state.mjs.map +1 -0
  342. package/dist/development/core/collection/url.d.mts +70 -0
  343. package/dist/development/core/collection/url.mjs +367 -0
  344. package/dist/development/core/collection/url.mjs.map +1 -0
  345. package/dist/development/core/constants.mjs +7 -0
  346. package/dist/development/core/constants.mjs.map +1 -0
  347. package/dist/development/core/development.d.mts +55 -0
  348. package/dist/development/core/development.mjs +44 -0
  349. package/dist/development/core/headers.mjs +44 -0
  350. package/dist/development/core/headers.mjs.map +1 -0
  351. package/dist/development/core/index.d.mts +53 -0
  352. package/dist/development/core/logging/logging.d.mts +21 -0
  353. package/dist/development/core/logging/logging.mjs +99 -0
  354. package/dist/development/core/logging/logging.mjs.map +1 -0
  355. package/dist/development/core/logging/types.d.mts +40 -0
  356. package/dist/development/core/logging/types.mjs +18 -0
  357. package/dist/development/core/logging/types.mjs.map +1 -0
  358. package/dist/development/core/money/cache.mjs +25 -0
  359. package/dist/development/core/money/cache.mjs.map +1 -0
  360. package/dist/development/core/money/format.d.mts +15 -0
  361. package/dist/development/core/money/format.mjs +243 -0
  362. package/dist/development/core/money/format.mjs.map +1 -0
  363. package/dist/development/core/money/types.d.mts +47 -0
  364. package/dist/development/core/observable.mjs +46 -0
  365. package/dist/development/core/observable.mjs.map +1 -0
  366. package/dist/development/core/predictive-search/constants.d.mts +5 -0
  367. package/dist/development/core/predictive-search/constants.mjs +6 -0
  368. package/dist/development/core/predictive-search/constants.mjs.map +1 -0
  369. package/dist/development/core/predictive-search/form.d.mts +31 -0
  370. package/dist/development/core/predictive-search/form.mjs +31 -0
  371. package/dist/development/core/predictive-search/form.mjs.map +1 -0
  372. package/dist/development/core/predictive-search/index.d.mts +6 -0
  373. package/dist/development/core/predictive-search/queries.d.mts +118 -0
  374. package/dist/development/core/predictive-search/queries.mjs +81 -0
  375. package/dist/development/core/predictive-search/queries.mjs.map +1 -0
  376. package/dist/development/core/predictive-search/search.d.mts +32 -0
  377. package/dist/development/core/predictive-search/search.mjs +74 -0
  378. package/dist/development/core/predictive-search/search.mjs.map +1 -0
  379. package/dist/development/core/predictive-search/server-handlers.d.mts +36 -0
  380. package/dist/development/core/predictive-search/server-handlers.mjs +113 -0
  381. package/dist/development/core/predictive-search/server-handlers.mjs.map +1 -0
  382. package/dist/development/core/predictive-search/store.d.mts +44 -0
  383. package/dist/development/core/predictive-search/store.mjs +224 -0
  384. package/dist/development/core/predictive-search/store.mjs.map +1 -0
  385. package/dist/development/core/predictive-search/url.d.mts +41 -0
  386. package/dist/development/core/predictive-search/url.mjs +71 -0
  387. package/dist/development/core/predictive-search/url.mjs.map +1 -0
  388. package/dist/development/core/product/form.d.mts +63 -0
  389. package/dist/development/core/product/form.mjs +44 -0
  390. package/dist/development/core/product/form.mjs.map +1 -0
  391. package/dist/development/core/product/index.d.mts +4 -0
  392. package/dist/development/core/product/options.d.mts +40 -0
  393. package/dist/development/core/product/options.mjs +291 -0
  394. package/dist/development/core/product/options.mjs.map +1 -0
  395. package/dist/development/core/product/product-form.d.mts +72 -0
  396. package/dist/development/core/product/product-form.mjs +158 -0
  397. package/dist/development/core/product/product-form.mjs.map +1 -0
  398. package/dist/development/core/product/state.d.mts +68 -0
  399. package/dist/development/core/request-context.d.mts +70 -0
  400. package/dist/development/core/request-context.mjs +120 -0
  401. package/dist/development/core/request-context.mjs.map +1 -0
  402. package/dist/development/core/request-routing/handle-shopify-redirects.d.mts +17 -0
  403. package/dist/development/core/request-routing/handle-shopify-redirects.mjs +31 -0
  404. package/dist/development/core/request-routing/handle-shopify-redirects.mjs.map +1 -0
  405. package/dist/development/core/request-routing/handle-shopify-routes.d.mts +1 -0
  406. package/dist/development/core/request-routing/handle-shopify-routes.development.d.mts +11 -0
  407. package/dist/development/core/request-routing/handle-shopify-routes.development.mjs +16 -0
  408. package/dist/development/core/request-routing/handle-shopify-routes.development.mjs.map +1 -0
  409. package/dist/development/core/request-routing/handle-shopify-routes.mjs +42 -0
  410. package/dist/development/core/request-routing/handle-shopify-routes.mjs.map +1 -0
  411. package/dist/development/core/request-routing/interceptors/admin-redirect.mjs +12 -0
  412. package/dist/development/core/request-routing/interceptors/admin-redirect.mjs.map +1 -0
  413. package/dist/development/core/request-routing/interceptors/agent-proxy.mjs +19 -0
  414. package/dist/development/core/request-routing/interceptors/agent-proxy.mjs.map +1 -0
  415. package/dist/development/core/request-routing/interceptors/ajax-api.mjs +16 -0
  416. package/dist/development/core/request-routing/interceptors/ajax-api.mjs.map +1 -0
  417. package/dist/development/core/request-routing/interceptors/api-proxy.mjs +20 -0
  418. package/dist/development/core/request-routing/interceptors/api-proxy.mjs.map +1 -0
  419. package/dist/development/core/request-routing/interceptors/checkout.mjs +58 -0
  420. package/dist/development/core/request-routing/interceptors/checkout.mjs.map +1 -0
  421. package/dist/development/core/request-routing/interceptors/graphiql.mjs +46 -0
  422. package/dist/development/core/request-routing/interceptors/graphiql.mjs.map +1 -0
  423. package/dist/development/core/request-routing/interceptors/mcp-proxy.mjs +23 -0
  424. package/dist/development/core/request-routing/interceptors/mcp-proxy.mjs.map +1 -0
  425. package/dist/development/core/request-routing/interceptors/proxy.mjs +68 -0
  426. package/dist/development/core/request-routing/interceptors/proxy.mjs.map +1 -0
  427. package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs +22 -0
  428. package/dist/development/core/request-routing/interceptors/query-param-redirect.mjs.map +1 -0
  429. package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs +27 -0
  430. package/dist/development/core/request-routing/interceptors/sfapi-proxy.mjs.map +1 -0
  431. package/dist/development/core/request-routing/interceptors/standard-routes.mjs +19 -0
  432. package/dist/development/core/request-routing/interceptors/standard-routes.mjs.map +1 -0
  433. package/dist/development/core/request-routing/interceptors/url-redirects.mjs +27 -0
  434. package/dist/development/core/request-routing/interceptors/url-redirects.mjs.map +1 -0
  435. package/dist/development/core/request-routing/interceptors/well-known.mjs +19 -0
  436. package/dist/development/core/request-routing/interceptors/well-known.mjs.map +1 -0
  437. package/dist/development/core/request-routing/registered-routes.d.mts +7 -0
  438. package/dist/development/core/request-routing/registered-routes.mjs +59 -0
  439. package/dist/development/core/request-routing/registered-routes.mjs.map +1 -0
  440. package/dist/development/core/request-routing/route-types.d.mts +51 -0
  441. package/dist/development/core/request-routing/safe-apply-response-headers.mjs +16 -0
  442. package/dist/development/core/request-routing/safe-apply-response-headers.mjs.map +1 -0
  443. package/dist/development/core/shop-pay/shop-pay.d.mts +102 -0
  444. package/dist/development/core/shop-pay/shop-pay.mjs +289 -0
  445. package/dist/development/core/shop-pay/shop-pay.mjs.map +1 -0
  446. package/dist/development/core/shopify-scripts/analytics.mjs +26 -0
  447. package/dist/development/core/shopify-scripts/analytics.mjs.map +1 -0
  448. package/dist/development/core/shopify-scripts/consent.mjs +17 -0
  449. package/dist/development/core/shopify-scripts/consent.mjs.map +1 -0
  450. package/dist/development/core/shopify-scripts/constants.mjs +19 -0
  451. package/dist/development/core/shopify-scripts/constants.mjs.map +1 -0
  452. package/dist/development/core/shopify-scripts/deprecated-cookies.mjs +97 -0
  453. package/dist/development/core/shopify-scripts/deprecated-cookies.mjs.map +1 -0
  454. package/dist/development/core/shopify-scripts/global.d.mts +1 -0
  455. package/dist/development/core/shopify-scripts/global.mjs +86 -0
  456. package/dist/development/core/shopify-scripts/global.mjs.map +1 -0
  457. package/dist/development/core/shopify-scripts/index.d.mts +27 -0
  458. package/dist/development/core/shopify-scripts/index.mjs +145 -0
  459. package/dist/development/core/shopify-scripts/index.mjs.map +1 -0
  460. package/dist/development/core/shopify-scripts/initialize.d.mts +18 -0
  461. package/dist/development/core/shopify-scripts/initialize.mjs +27 -0
  462. package/dist/development/core/shopify-scripts/initialize.mjs.map +1 -0
  463. package/dist/development/core/shopify-scripts/page-view.mjs +49 -0
  464. package/dist/development/core/shopify-scripts/page-view.mjs.map +1 -0
  465. package/dist/development/core/shopify-scripts/perfkit.mjs +33 -0
  466. package/dist/development/core/shopify-scripts/perfkit.mjs.map +1 -0
  467. package/dist/development/core/shopify-scripts/render.d.mts +1 -0
  468. package/dist/development/core/shopify-scripts/render.mjs +23 -0
  469. package/dist/development/core/shopify-scripts/render.mjs.map +1 -0
  470. package/dist/development/core/shopify-scripts/types.d.mts +76 -0
  471. package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs +43 -0
  472. package/dist/development/core/shopify-scripts/utils/cookie-domain.mjs.map +1 -0
  473. package/dist/development/core/shopify-scripts/utils/inline-script.mjs +8 -0
  474. package/dist/development/core/shopify-scripts/utils/inline-script.mjs.map +1 -0
  475. package/dist/development/core/shopify-scripts/utils/navigation.mjs +46 -0
  476. package/dist/development/core/shopify-scripts/utils/navigation.mjs.map +1 -0
  477. package/dist/development/core/shopify-scripts/utils/tracking-values.mjs +65 -0
  478. package/dist/development/core/shopify-scripts/utils/tracking-values.mjs.map +1 -0
  479. package/dist/development/core/shopify-scripts/utils/uuid.mjs +17 -0
  480. package/dist/development/core/shopify-scripts/utils/uuid.mjs.map +1 -0
  481. package/dist/development/core/shopify-scripts/webmcp.mjs +22 -0
  482. package/dist/development/core/shopify-scripts/webmcp.mjs.map +1 -0
  483. package/dist/development/core/standard-routes/build.d.mts +34 -0
  484. package/dist/development/core/standard-routes/build.mjs +54 -0
  485. package/dist/development/core/standard-routes/build.mjs.map +1 -0
  486. package/dist/development/core/standard-routes/defaults.mjs +31 -0
  487. package/dist/development/core/standard-routes/defaults.mjs.map +1 -0
  488. package/dist/development/core/standard-routes/match.mjs +108 -0
  489. package/dist/development/core/standard-routes/match.mjs.map +1 -0
  490. package/dist/development/core/standard-routes/path.mjs +58 -0
  491. package/dist/development/core/standard-routes/path.mjs.map +1 -0
  492. package/dist/development/core/standard-routes/redirects.mjs +51 -0
  493. package/dist/development/core/standard-routes/redirects.mjs.map +1 -0
  494. package/dist/development/core/standard-routes/types.d.mts +95 -0
  495. package/dist/development/core/types.d.mts +11 -0
  496. package/dist/development/core/url.mjs +35 -0
  497. package/dist/development/core/url.mjs.map +1 -0
  498. package/dist/development/core/utils/load-script.mjs +34 -0
  499. package/dist/development/core/utils/load-script.mjs.map +1 -0
  500. package/dist/development/core/utils/parse-gid.mjs +33 -0
  501. package/dist/development/core/utils/parse-gid.mjs.map +1 -0
  502. package/dist/development/customer-account/session.d.mts +46 -0
  503. package/dist/development/customer-account/session.mjs +21 -0
  504. package/dist/development/customer-account/session.mjs.map +1 -0
  505. package/dist/development/globals.d.mts +64 -0
  506. package/dist/development/graphql/generated/customer-account-api-types.d.mts +13 -0
  507. package/dist/development/graphql/generated/graphql-env.d.mts +19280 -0
  508. package/dist/development/graphql/generated/storefront-api-types.d.mts +47 -0
  509. package/dist/development/graphql/graphql.d.mts +40 -0
  510. package/dist/development/graphql/graphql.mjs +16 -0
  511. package/dist/development/graphql/graphql.mjs.map +1 -0
  512. package/dist/development/graphql/index.d.mts +2 -0
  513. package/dist/development/graphql/scalars.d.mts +15 -0
  514. package/dist/development/graphql/type-resolver.d.mts +229 -0
  515. package/dist/development/react/cart.d.mts +40 -0
  516. package/dist/development/react/cart.mjs +150 -0
  517. package/dist/development/react/cart.mjs.map +1 -0
  518. package/dist/development/react/collection.d.mts +91 -0
  519. package/dist/development/react/collection.mjs +129 -0
  520. package/dist/development/react/collection.mjs.map +1 -0
  521. package/dist/development/react/index.d.mts +13 -0
  522. package/dist/development/react/index.mjs +10 -0
  523. package/dist/development/react/predictive-search.d.mts +49 -0
  524. package/dist/development/react/predictive-search.mjs +133 -0
  525. package/dist/development/react/predictive-search.mjs.map +1 -0
  526. package/dist/development/react/product.d.mts +72 -0
  527. package/dist/development/react/product.mjs +127 -0
  528. package/dist/development/react/product.mjs.map +1 -0
  529. package/dist/development/react/shop-pay.d.mts +9 -0
  530. package/dist/development/react/shop-pay.mjs +16 -0
  531. package/dist/development/react/shop-pay.mjs.map +1 -0
  532. package/dist/development/react/shopify-scripts.d.mts +20 -0
  533. package/dist/development/react/shopify-scripts.mjs +39 -0
  534. package/dist/development/react/shopify-scripts.mjs.map +1 -0
  535. package/dist/development/vendor/standard-actions.d.mts +134 -0
  536. package/dist/development/vendor/standard-events.d.mts +1107 -0
  537. package/dist/development/vue/cart.d.mts +42 -0
  538. package/dist/development/vue/cart.mjs +118 -0
  539. package/dist/development/vue/cart.mjs.map +1 -0
  540. package/dist/development/vue/collection.d.mts +46 -0
  541. package/dist/development/vue/collection.mjs +108 -0
  542. package/dist/development/vue/collection.mjs.map +1 -0
  543. package/dist/development/vue/index.d.mts +11 -0
  544. package/dist/development/vue/index.mjs +8 -0
  545. package/dist/development/vue/predictive-search.d.mts +124 -0
  546. package/dist/development/vue/predictive-search.mjs +171 -0
  547. package/dist/development/vue/predictive-search.mjs.map +1 -0
  548. package/dist/development/vue/product.d.mts +57 -0
  549. package/dist/development/vue/product.mjs +167 -0
  550. package/dist/development/vue/product.mjs.map +1 -0
  551. package/dist/development/vue/shop-pay.d.mts +25 -0
  552. package/dist/development/vue/shop-pay.mjs +35 -0
  553. package/dist/development/vue/shop-pay.mjs.map +1 -0
  554. package/dist/development/vue/shopify-scripts.d.mts +127 -0
  555. package/dist/development/vue/shopify-scripts.mjs +79 -0
  556. package/dist/development/vue/shopify-scripts.mjs.map +1 -0
  557. package/dist/globals.d.mts +64 -0
  558. package/dist/graphql/generated/customer-account-api-types.d.mts +13 -0
  559. package/dist/graphql/generated/customer-account-graphql-env.d.mts +22170 -0
  560. package/dist/graphql/generated/graphql-env.d.mts +19280 -0
  561. package/dist/graphql/generated/storefront-api-types.d.mts +47 -0
  562. package/dist/graphql/graphql.d.mts +40 -0
  563. package/dist/graphql/graphql.mjs +16 -0
  564. package/dist/graphql/graphql.mjs.map +1 -0
  565. package/dist/graphql/index.d.mts +2 -0
  566. package/dist/graphql/scalars.d.mts +26 -0
  567. package/dist/graphql/type-resolver.d.mts +229 -0
  568. package/dist/react/cart.d.mts +40 -0
  569. package/dist/react/cart.mjs +150 -0
  570. package/dist/react/cart.mjs.map +1 -0
  571. package/dist/react/collection.d.mts +91 -0
  572. package/dist/react/collection.mjs +129 -0
  573. package/dist/react/collection.mjs.map +1 -0
  574. package/dist/react/index.d.mts +13 -0
  575. package/dist/react/index.mjs +10 -0
  576. package/dist/react/predictive-search.d.mts +49 -0
  577. package/dist/react/predictive-search.mjs +133 -0
  578. package/dist/react/predictive-search.mjs.map +1 -0
  579. package/dist/react/product.d.mts +72 -0
  580. package/dist/react/product.mjs +127 -0
  581. package/dist/react/product.mjs.map +1 -0
  582. package/dist/react/shop-pay.d.mts +9 -0
  583. package/dist/react/shop-pay.mjs +16 -0
  584. package/dist/react/shop-pay.mjs.map +1 -0
  585. package/dist/react/shopify-scripts.d.mts +20 -0
  586. package/dist/react/shopify-scripts.mjs +39 -0
  587. package/dist/react/shopify-scripts.mjs.map +1 -0
  588. package/dist/storefront-api-types.d.ts +2351 -2390
  589. package/dist/storefront.schema.json +41534 -1
  590. package/dist/ts-plugin/index.cjs +68 -0
  591. package/dist/ts-plugin/index.cjs.map +1 -0
  592. package/dist/ts-plugin/index.d.cts +4 -0
  593. package/dist/vendor/standard-actions.d.mts +134 -0
  594. package/dist/vendor/standard-events.d.mts +1107 -0
  595. package/dist/vite/index.d.mts +2 -0
  596. package/dist/vite/index.mjs +3 -0
  597. package/dist/vite/local-https.d.mts +35 -0
  598. package/dist/vite/local-https.mjs +202 -0
  599. package/dist/vite/local-https.mjs.map +1 -0
  600. package/dist/vue/cart.d.mts +42 -0
  601. package/dist/vue/cart.mjs +118 -0
  602. package/dist/vue/cart.mjs.map +1 -0
  603. package/dist/vue/collection.d.mts +46 -0
  604. package/dist/vue/collection.mjs +108 -0
  605. package/dist/vue/collection.mjs.map +1 -0
  606. package/dist/vue/index.d.mts +11 -0
  607. package/dist/vue/index.mjs +8 -0
  608. package/dist/vue/predictive-search.d.mts +124 -0
  609. package/dist/vue/predictive-search.mjs +171 -0
  610. package/dist/vue/predictive-search.mjs.map +1 -0
  611. package/dist/vue/product.d.mts +57 -0
  612. package/dist/vue/product.mjs +167 -0
  613. package/dist/vue/product.mjs.map +1 -0
  614. package/dist/vue/shop-pay.d.mts +25 -0
  615. package/dist/vue/shop-pay.mjs +35 -0
  616. package/dist/vue/shop-pay.mjs.map +1 -0
  617. package/dist/vue/shopify-scripts.d.mts +127 -0
  618. package/dist/vue/shopify-scripts.mjs +79 -0
  619. package/dist/vue/shopify-scripts.mjs.map +1 -0
  620. package/package.json +116 -86
  621. package/skills/hydrogen-analytics/SKILL.md +80 -0
  622. package/skills/hydrogen-analytics/references/react.md +160 -0
  623. package/skills/hydrogen-analytics/references/vue.md +80 -0
  624. package/skills/hydrogen-cart-drawer/SKILL.md +248 -0
  625. package/skills/hydrogen-cart-drawer/references/accessibility.md +109 -0
  626. package/skills/hydrogen-cart-drawer/references/css.md +67 -0
  627. package/skills/hydrogen-cart-ui/SKILL.md +218 -0
  628. package/skills/hydrogen-cart-ui/references/nextjs.md +89 -0
  629. package/skills/hydrogen-cart-ui/references/react.md +263 -0
  630. package/skills/hydrogen-cart-ui/references/vue.md +204 -0
  631. package/skills/hydrogen-collection-browser/SKILL.md +80 -0
  632. package/skills/hydrogen-collection-browser/references/nextjs.md +118 -0
  633. package/skills/hydrogen-collection-browser/references/nuxt.md +108 -0
  634. package/skills/hydrogen-collection-browser/references/react.md +237 -0
  635. package/skills/hydrogen-customer-account/SKILL.md +107 -0
  636. package/skills/hydrogen-image/SKILL.md +65 -0
  637. package/skills/hydrogen-local-https/SKILL.md +144 -0
  638. package/skills/hydrogen-markets/SKILL.md +221 -0
  639. package/skills/hydrogen-markets/references/nextjs.md +157 -0
  640. package/skills/hydrogen-money/SKILL.md +67 -0
  641. package/skills/hydrogen-oxygen/SKILL.md +245 -0
  642. package/skills/hydrogen-oxygen/references/react-router.md +230 -0
  643. package/skills/hydrogen-predictive-search/SKILL.md +130 -0
  644. package/skills/hydrogen-predictive-search/references/react.md +32 -0
  645. package/skills/hydrogen-predictive-search/references/vue.md +40 -0
  646. package/skills/hydrogen-request-handlers/SKILL.md +90 -0
  647. package/skills/hydrogen-request-handlers/references/frameworks.md +174 -0
  648. package/skills/hydrogen-request-handlers/references/nextjs.md +136 -0
  649. package/skills/hydrogen-request-handlers/references/nuxt.md +214 -0
  650. package/skills/hydrogen-routing/SKILL.md +154 -0
  651. package/skills/hydrogen-setup/SKILL.md +50 -0
  652. package/skills/hydrogen-setup/references/analytics.md +624 -0
  653. package/skills/hydrogen-setup/steps/1-inspect-app.md +62 -0
  654. package/skills/hydrogen-setup/steps/10-analytics.md +10 -0
  655. package/skills/hydrogen-setup/steps/11-verify.md +31 -0
  656. package/skills/hydrogen-setup/steps/2-scaffold.md +86 -0
  657. package/skills/hydrogen-setup/steps/3-build-home-page.md +37 -0
  658. package/skills/hydrogen-setup/steps/4-collection-and-search.md +13 -0
  659. package/skills/hydrogen-setup/steps/5-cart.md +10 -0
  660. package/skills/hydrogen-setup/steps/6-product-detail-page.md +390 -0
  661. package/skills/hydrogen-setup/steps/7-shopify-runtime-scripts.md +69 -0
  662. package/skills/hydrogen-setup/steps/8-cart-drawer-and-navbar.md +35 -0
  663. package/skills/hydrogen-setup/steps/9-account-page.md +54 -0
  664. package/skills/hydrogen-shop-pay/SKILL.md +79 -0
  665. package/skills/hydrogen-shop-pay/references/core.md +66 -0
  666. package/skills/hydrogen-shop-pay/references/react.md +50 -0
  667. package/skills/hydrogen-shop-pay/references/vue.md +39 -0
  668. package/skills/hydrogen-smoke-test/SKILL.md +203 -0
  669. package/skills/hydrogen-storefront-client/SKILL.md +322 -0
  670. package/skills/hydrogen-storefront-client/references/astro.md +125 -0
  671. package/skills/hydrogen-storefront-client/references/caching.md +25 -0
  672. package/skills/hydrogen-storefront-client/references/nextjs.md +121 -0
  673. package/skills/hydrogen-storefront-client/references/nuxt.md +121 -0
  674. package/skills/hydrogen-storefront-client/references/query-validation.md +95 -0
  675. package/skills/hydrogen-storefront-client/references/react-router.md +81 -0
  676. package/skills/hydrogen-storefront-client/references/solidstart.md +131 -0
  677. package/skills/hydrogen-storefront-client/references/sveltekit.md +169 -0
  678. package/skills/hydrogen-variant-form/SKILL.md +250 -0
  679. package/skills/hydrogen-variant-form/references/nextjs.md +203 -0
  680. package/skills/hydrogen-variant-form/references/nuxt.md +95 -0
  681. package/skills/hydrogen-variant-form/references/react.md +71 -0
  682. package/dist/dev/get-virtual-routes-H72465VB.js +0 -74
  683. package/dist/dev/hydrogen-routes.d.ts +0 -5
  684. package/dist/dev/hydrogen-routes.js +0 -25
  685. package/dist/development/get-virtual-routes-ACFZHU42.js +0 -71
  686. package/dist/development/get-virtual-routes-ACFZHU42.js.map +0 -1
  687. package/dist/development/index.cjs +0 -6948
  688. package/dist/development/index.cjs.map +0 -1
  689. package/dist/development/index.js +0 -6601
  690. package/dist/development/index.js.map +0 -1
  691. package/dist/development/log-seo-tags-IG37ONQ2.js +0 -74
  692. package/dist/development/log-seo-tags-IG37ONQ2.js.map +0 -1
  693. package/dist/development/react-router-preset.d.ts +0 -45
  694. package/dist/development/react-router-preset.js +0 -49
  695. package/dist/development/react-router-preset.js.map +0 -1
  696. package/dist/index.cjs +0 -1
  697. package/dist/oxygen/index.d.ts +0 -197
  698. package/dist/oxygen/index.js +0 -107
  699. package/dist/production/get-virtual-routes-ZZEGQQDV.js +0 -3
  700. package/dist/production/get-virtual-routes-ZZEGQQDV.js.map +0 -1
  701. package/dist/production/index.cjs +0 -1019
  702. package/dist/production/index.cjs.map +0 -1
  703. package/dist/production/index.d.cts +0 -3260
  704. package/dist/production/index.d.ts +0 -3260
  705. package/dist/production/index.js +0 -1019
  706. package/dist/production/index.js.map +0 -1
  707. package/dist/production/log-seo-tags-TY72EQWZ.js +0 -2
  708. package/dist/production/log-seo-tags-TY72EQWZ.js.map +0 -1
  709. package/dist/production/react-router-preset.d.ts +0 -45
  710. package/dist/production/react-router-preset.js +0 -11
  711. package/dist/react-router.d.ts +0 -75
  712. package/dist/vite/chunk-4O5OI3OO.js +0 -127
  713. package/dist/vite/chunk-FAQ7TVHC.js +0 -9
  714. package/dist/vite/chunk-QXBQVDMY.js +0 -68
  715. package/dist/vite/compat-date.d.ts +0 -3
  716. package/dist/vite/compat-date.js +0 -6
  717. package/dist/vite/get-virtual-routes.d.ts +0 -21
  718. package/dist/vite/get-virtual-routes.js +0 -74
  719. package/dist/vite/hydrogen-middleware.d.ts +0 -9
  720. package/dist/vite/hydrogen-middleware.js +0 -7
  721. package/dist/vite/plugin.d.ts +0 -22
  722. package/dist/vite/plugin.js +0 -171
  723. package/dist/vite/request-events.d.ts +0 -144
  724. package/dist/vite/request-events.js +0 -10
  725. package/dist/vite/types.d.ts +0 -5
  726. package/dist/vite/types.js +0 -0
  727. package/dist/vite/virtual-routes/assets/debug-network.css +0 -609
  728. package/dist/vite/virtual-routes/assets/favicon-dark.svg +0 -20
  729. package/dist/vite/virtual-routes/assets/favicon.svg +0 -28
  730. package/dist/vite/virtual-routes/assets/inter-variable-font.woff2 +0 -0
  731. package/dist/vite/virtual-routes/assets/jetbrainsmono-variable-font.woff2 +0 -0
  732. package/dist/vite/virtual-routes/assets/styles.css +0 -249
  733. package/dist/vite/virtual-routes/components/FlameChartWrapper.jsx +0 -123
  734. package/dist/vite/virtual-routes/components/HydrogenLogoBaseBW.jsx +0 -32
  735. package/dist/vite/virtual-routes/components/HydrogenLogoBaseColor.jsx +0 -47
  736. package/dist/vite/virtual-routes/components/IconBanner.jsx +0 -292
  737. package/dist/vite/virtual-routes/components/IconClose.jsx +0 -38
  738. package/dist/vite/virtual-routes/components/IconDiscard.jsx +0 -44
  739. package/dist/vite/virtual-routes/components/IconError.jsx +0 -61
  740. package/dist/vite/virtual-routes/components/IconGithub.jsx +0 -23
  741. package/dist/vite/virtual-routes/components/IconTwitter.jsx +0 -21
  742. package/dist/vite/virtual-routes/components/Layout.jsx +0 -7
  743. package/dist/vite/virtual-routes/components/RequestDetails.jsx +0 -171
  744. package/dist/vite/virtual-routes/components/RequestTable.jsx +0 -91
  745. package/dist/vite/virtual-routes/components/RequestWaterfall.jsx +0 -151
  746. package/dist/vite/virtual-routes/layout.jsx +0 -33
  747. package/dist/vite/virtual-routes/lib/useDebugNetworkServer.jsx +0 -178
  748. package/dist/vite/virtual-routes/routes/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.jsx +0 -37
  749. package/dist/vite/virtual-routes/routes/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.tsx +0 -79
  750. package/dist/vite/virtual-routes/routes/graphiql.jsx +0 -5
  751. package/dist/vite/virtual-routes/routes/index.jsx +0 -265
  752. package/dist/vite/virtual-routes/routes/subrequest-profiler.jsx +0 -243
  753. package/dist/vite/virtual-routes/virtual-root-with-layout.jsx +0 -63
  754. package/dist/vite/virtual-routes/virtual-root.jsx +0 -67
@@ -0,0 +1,89 @@
1
+ import { collectionSearchEqual, mergeCollectionParams, normalizeCollectionSearch } from "./url.mjs";
2
+
3
+ //#region src/core/collection/reconciler.ts
4
+ /**
5
+ * Creates a framework-agnostic reconciler that manages the state machine for
6
+ * keeping the URL, server data, and store in sync during browse-change chains.
7
+ *
8
+ * Framework adapters delegate to this so the reconciliation logic
9
+ * lives in one place.
10
+ */
11
+ function createCollectionReconciler(callbacks, initialPrevUrlSearch = "") {
12
+ let pendingFilter = null;
13
+ let pendingUrls = /* @__PURE__ */ new Set();
14
+ let prevUrlSearch = initialPrevUrlSearch;
15
+ return {
16
+ handleBrowseChange() {
17
+ const store = callbacks.getStore();
18
+ const searchString = mergeCollectionParams(new URLSearchParams(callbacks.readUrlSearch()), store.getState()).toString();
19
+ pendingFilter = searchString;
20
+ pendingUrls.add(searchString);
21
+ callbacks.emitChange(searchString ? `?${searchString}` : "");
22
+ },
23
+ reset(newPrevUrlSearch) {
24
+ pendingFilter = null;
25
+ pendingUrls = /* @__PURE__ */ new Set();
26
+ prevUrlSearch = newPrevUrlSearch;
27
+ },
28
+ reconcile(urlSearch, dataSearch) {
29
+ const store = callbacks.getStore();
30
+ const pendingSearchEquals = (search) => [...pendingUrls].some((pending) => collectionSearchEqual(pending, search));
31
+ const pendingTargetMatchesUrl = pendingFilter != null && collectionSearchEqual(pendingFilter, urlSearch);
32
+ const trySettleFromServer = () => {
33
+ if (store.getState().status !== "loading") return false;
34
+ if (!collectionSearchEqual(dataSearch, urlSearch)) return false;
35
+ const incomingParams = new URLSearchParams(urlSearch);
36
+ if (!store.matchesParams(incomingParams)) store.syncFromParams(incomingParams);
37
+ store.settle();
38
+ return true;
39
+ };
40
+ const clearPendingIfSettled = () => {
41
+ if (!trySettleFromServer()) return false;
42
+ pendingFilter = null;
43
+ pendingUrls.clear();
44
+ return true;
45
+ };
46
+ if (clearPendingIfSettled()) return;
47
+ const urlSearchChanged = normalizeCollectionSearch(urlSearch) !== normalizeCollectionSearch(prevUrlSearch);
48
+ prevUrlSearch = urlSearch;
49
+ const reDispatchToPendingTarget = () => {
50
+ if (pendingFilter == null) return;
51
+ callbacks.emitChange(pendingFilter ? `?${pendingFilter}` : "");
52
+ };
53
+ const routerSettledOnIntermediateWithStaleTarget = pendingFilter != null && pendingSearchEquals(urlSearch) && !pendingTargetMatchesUrl && collectionSearchEqual(dataSearch, urlSearch);
54
+ const serverConfirmedIntermediateWhileTargeting = pendingFilter != null && pendingSearchEquals(dataSearch) && !collectionSearchEqual(dataSearch, pendingFilter) && !collectionSearchEqual(dataSearch, urlSearch);
55
+ if (pendingTargetMatchesUrl) {
56
+ if (trySettleFromServer()) {
57
+ pendingFilter = null;
58
+ pendingUrls.clear();
59
+ } else if (store.getState().status === "loading" && serverConfirmedIntermediateWhileTargeting) reDispatchToPendingTarget();
60
+ return;
61
+ }
62
+ if (pendingFilter != null) {
63
+ if (!urlSearchChanged) {
64
+ if (clearPendingIfSettled()) return;
65
+ if (routerSettledOnIntermediateWithStaleTarget) reDispatchToPendingTarget();
66
+ return;
67
+ }
68
+ if (pendingSearchEquals(urlSearch)) {
69
+ if (clearPendingIfSettled()) return;
70
+ if (routerSettledOnIntermediateWithStaleTarget) reDispatchToPendingTarget();
71
+ return;
72
+ }
73
+ pendingFilter = null;
74
+ pendingUrls.clear();
75
+ }
76
+ const incomingParams = new URLSearchParams(urlSearch);
77
+ if (store.matchesParams(incomingParams)) {
78
+ trySettleFromServer();
79
+ return;
80
+ }
81
+ store.syncFromParams(incomingParams);
82
+ trySettleFromServer();
83
+ }
84
+ };
85
+ }
86
+
87
+ //#endregion
88
+ export { createCollectionReconciler };
89
+ //# sourceMappingURL=reconciler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconciler.mjs","names":[],"sources":["../../../../src/core/collection/reconciler.ts"],"sourcesContent":["import type { CollectionStore } from \"./collection\";\nimport { collectionSearchEqual, mergeCollectionParams, normalizeCollectionSearch } from \"./url\";\n\nexport type ReconcilerCallbacks = {\n getStore: () => CollectionStore;\n readUrlSearch: () => string;\n emitChange: (searchString: string) => void;\n};\n\nexport type CollectionReconciler = {\n /**\n * URL ↔ store reconciliation state machine. Call whenever urlSearch,\n * dataSearch, or store state changes.\n */\n reconcile(urlSearch: string, dataSearch: string): void;\n /**\n * Callback for {@link CollectionStore.setOnBrowseChange}. Merges current\n * URL params with store state, tracks the pending navigation, and emits.\n */\n handleBrowseChange(): void;\n /** Clears pending navigation state (call when the store is recreated). */\n reset(newPrevUrlSearch: string): void;\n};\n\n/**\n * Creates a framework-agnostic reconciler that manages the state machine for\n * keeping the URL, server data, and store in sync during browse-change chains.\n *\n * Framework adapters delegate to this so the reconciliation logic\n * lives in one place.\n */\nexport function createCollectionReconciler(\n callbacks: ReconcilerCallbacks,\n initialPrevUrlSearch = \"\",\n): CollectionReconciler {\n let pendingFilter: string | null = null;\n let pendingUrls = new Set<string>();\n let prevUrlSearch = initialPrevUrlSearch;\n\n return {\n handleBrowseChange() {\n const store = callbacks.getStore();\n const merged = mergeCollectionParams(\n new URLSearchParams(callbacks.readUrlSearch()),\n store.getState(),\n );\n const searchString = merged.toString();\n pendingFilter = searchString;\n pendingUrls.add(searchString);\n callbacks.emitChange(searchString ? `?${searchString}` : \"\");\n },\n\n reset(newPrevUrlSearch: string) {\n pendingFilter = null;\n pendingUrls = new Set();\n prevUrlSearch = newPrevUrlSearch;\n },\n\n // State machine — four states:\n //\n // ┌─────────────────────────────────────────────────────────────────────┐\n // │ State A: No pending navigation (pendingFilter === null) │\n // │ • URL matches store → try settle if server data caught up │\n // │ • URL differs from store → syncFromParams, then try settle │\n // ├─────────────────────────────────────────────────────────────────────┤\n // │ State B: Pending — URL matches target (pendingTargetMatchesUrl) │\n // │ • Server data matches URL → settle, clear pending state │\n // │ • Server data stale (intermediate) → re-dispatch to target │\n // │ • Server data not yet arrived → wait (keep pending set) │\n // ├─────────────────────────────────────────────────────────────────────┤\n // │ State C: Pending — URL is intermediate (in pendingUrls) │\n // │ • Ignore URL change; if router settled here with server data │\n // │ confirming the intermediate, re-dispatch to the real target │\n // ├─────────────────────────────────────────────────────────────────────┤\n // │ State D: Pending — URL is unknown (not in pendingUrls) │\n // │ • External navigation (back/forward, <Link>) │\n // │ • Abandon pending state, fall through to State A │\n // └─────────────────────────────────────────────────────────────────────┘\n //\n // Rapid toggles (A on → B on → A off) produce multiple in-flight navigations.\n // pendingFilter tracks the latest target; pendingUrls tracks every URL\n // dispatched in the chain so intermediates can be distinguished from external navs.\n reconcile(urlSearch: string, dataSearch: string) {\n const store = callbacks.getStore();\n\n const pendingSearchEquals = (search: string): boolean =>\n [...pendingUrls].some((pending) => collectionSearchEqual(pending, search));\n\n const pendingTargetMatchesUrl =\n pendingFilter != null && collectionSearchEqual(pendingFilter, urlSearch);\n\n const trySettleFromServer = (): boolean => {\n if (store.getState().status !== \"loading\") return false;\n if (!collectionSearchEqual(dataSearch, urlSearch)) return false;\n\n const incomingParams = new URLSearchParams(urlSearch);\n if (!store.matchesParams(incomingParams)) {\n store.syncFromParams(incomingParams);\n }\n\n store.settle();\n return true;\n };\n\n const clearPendingIfSettled = (): boolean => {\n if (!trySettleFromServer()) return false;\n pendingFilter = null;\n pendingUrls.clear();\n return true;\n };\n\n if (clearPendingIfSettled()) return;\n\n const normalizedUrlSearch = normalizeCollectionSearch(urlSearch);\n const normalizedPrevUrlSearch = normalizeCollectionSearch(prevUrlSearch);\n const urlSearchChanged = normalizedUrlSearch !== normalizedPrevUrlSearch;\n prevUrlSearch = urlSearch;\n\n const reDispatchToPendingTarget = () => {\n if (pendingFilter == null) return;\n callbacks.emitChange(pendingFilter ? `?${pendingFilter}` : \"\");\n };\n\n const routerSettledOnIntermediateWithStaleTarget =\n pendingFilter != null &&\n pendingSearchEquals(urlSearch) &&\n !pendingTargetMatchesUrl &&\n collectionSearchEqual(dataSearch, urlSearch);\n\n const serverConfirmedIntermediateWhileTargeting =\n pendingFilter != null &&\n pendingSearchEquals(dataSearch) &&\n !collectionSearchEqual(dataSearch, pendingFilter) &&\n !collectionSearchEqual(dataSearch, urlSearch);\n\n if (pendingTargetMatchesUrl) {\n if (trySettleFromServer()) {\n pendingFilter = null;\n pendingUrls.clear();\n } else if (\n store.getState().status === \"loading\" &&\n serverConfirmedIntermediateWhileTargeting\n ) {\n reDispatchToPendingTarget();\n }\n return;\n }\n\n if (pendingFilter != null) {\n if (!urlSearchChanged) {\n if (clearPendingIfSettled()) return;\n if (routerSettledOnIntermediateWithStaleTarget) {\n reDispatchToPendingTarget();\n }\n return;\n }\n\n if (pendingSearchEquals(urlSearch)) {\n if (clearPendingIfSettled()) return;\n if (routerSettledOnIntermediateWithStaleTarget) {\n reDispatchToPendingTarget();\n }\n return;\n }\n\n pendingFilter = null;\n pendingUrls.clear();\n }\n\n const incomingParams = new URLSearchParams(urlSearch);\n\n if (store.matchesParams(incomingParams)) {\n trySettleFromServer();\n return;\n }\n\n store.syncFromParams(incomingParams);\n trySettleFromServer();\n },\n };\n}\n"],"mappings":";;;;;;;;;;AA+BA,SAAgB,2BACd,WACA,uBAAuB,IACD;CACtB,IAAI,gBAA+B;CACnC,IAAI,8BAAc,IAAI,KAAa;CACnC,IAAI,gBAAgB;AAEpB,QAAO;EACL,qBAAqB;GACnB,MAAM,QAAQ,UAAU,UAAU;GAKlC,MAAM,eAJS,sBACb,IAAI,gBAAgB,UAAU,eAAe,CAAC,EAC9C,MAAM,UAAU,CAES,CAAC,UAAU;AACtC,mBAAgB;AAChB,eAAY,IAAI,aAAa;AAC7B,aAAU,WAAW,eAAe,IAAI,iBAAiB,GAAG;;EAG9D,MAAM,kBAA0B;AAC9B,mBAAgB;AAChB,iCAAc,IAAI,KAAK;AACvB,mBAAgB;;EA2BlB,UAAU,WAAmB,YAAoB;GAC/C,MAAM,QAAQ,UAAU,UAAU;GAElC,MAAM,uBAAuB,WAC3B,CAAC,GAAG,YAAY,CAAC,MAAM,YAAY,sBAAsB,SAAS,OAAO,CAAC;GAE5E,MAAM,0BACJ,iBAAiB,QAAQ,sBAAsB,eAAe,UAAU;GAE1E,MAAM,4BAAqC;AACzC,QAAI,MAAM,UAAU,CAAC,WAAW,UAAW,QAAO;AAClD,QAAI,CAAC,sBAAsB,YAAY,UAAU,CAAE,QAAO;IAE1D,MAAM,iBAAiB,IAAI,gBAAgB,UAAU;AACrD,QAAI,CAAC,MAAM,cAAc,eAAe,CACtC,OAAM,eAAe,eAAe;AAGtC,UAAM,QAAQ;AACd,WAAO;;GAGT,MAAM,8BAAuC;AAC3C,QAAI,CAAC,qBAAqB,CAAE,QAAO;AACnC,oBAAgB;AAChB,gBAAY,OAAO;AACnB,WAAO;;AAGT,OAAI,uBAAuB,CAAE;GAI7B,MAAM,mBAFsB,0BAA0B,UAEV,KADZ,0BAA0B,cACc;AACxE,mBAAgB;GAEhB,MAAM,kCAAkC;AACtC,QAAI,iBAAiB,KAAM;AAC3B,cAAU,WAAW,gBAAgB,IAAI,kBAAkB,GAAG;;GAGhE,MAAM,6CACJ,iBAAiB,QACjB,oBAAoB,UAAU,IAC9B,CAAC,2BACD,sBAAsB,YAAY,UAAU;GAE9C,MAAM,4CACJ,iBAAiB,QACjB,oBAAoB,WAAW,IAC/B,CAAC,sBAAsB,YAAY,cAAc,IACjD,CAAC,sBAAsB,YAAY,UAAU;AAE/C,OAAI,yBAAyB;AAC3B,QAAI,qBAAqB,EAAE;AACzB,qBAAgB;AAChB,iBAAY,OAAO;eAEnB,MAAM,UAAU,CAAC,WAAW,aAC5B,0CAEA,4BAA2B;AAE7B;;AAGF,OAAI,iBAAiB,MAAM;AACzB,QAAI,CAAC,kBAAkB;AACrB,SAAI,uBAAuB,CAAE;AAC7B,SAAI,2CACF,4BAA2B;AAE7B;;AAGF,QAAI,oBAAoB,UAAU,EAAE;AAClC,SAAI,uBAAuB,CAAE;AAC7B,SAAI,2CACF,4BAA2B;AAE7B;;AAGF,oBAAgB;AAChB,gBAAY,OAAO;;GAGrB,MAAM,iBAAiB,IAAI,gBAAgB,UAAU;AAErD,OAAI,MAAM,cAAc,eAAe,EAAE;AACvC,yBAAqB;AACrB;;AAGF,SAAM,eAAe,eAAe;AACpC,wBAAqB;;EAExB"}
@@ -0,0 +1,66 @@
1
+ import { ProductCollectionSortKeys } from "../../graphql/generated/storefront-api-types.mjs";
2
+ import { ProductFilter } from "../../vendor/standard-events.mjs";
3
+
4
+ //#region src/core/collection/state.d.ts
5
+ /** How a filter option is visually presented in the storefront UI. */
6
+ type FilterPresentation = "IMAGE" | "SWATCH" | "TEXT";
7
+ /** The input mechanism a filter uses — boolean toggle, multi-select list, or price slider. */
8
+ type FilterType = "BOOLEAN" | "LIST" | "PRICE_RANGE" | (string & {});
9
+ interface BaseAvailableFilterValue {
10
+ /** Unique identifier for this filter value. */
11
+ id: string;
12
+ /** Human-readable label (e.g. "Red", "Nike", "$50–$100"). */
13
+ label: string;
14
+ /** Number of products matching this value in the current result set. */
15
+ count: number;
16
+ /** JSON-encoded `ProductFilter` input to apply this value. */
17
+ input: string;
18
+ }
19
+ type PickIfPresent<TValue, TKey extends PropertyKey> = TKey extends keyof TValue ? Pick<TValue, TKey> : {};
20
+ /**
21
+ * A single selectable value within an {@link AvailableFilter}.
22
+ *
23
+ * Pass your Storefront API query value type as `TValue` to expose query-selected
24
+ * visual fields such as `swatch`.
25
+ */
26
+ type AvailableFilterValue<TValue extends BaseAvailableFilterValue = BaseAvailableFilterValue> = BaseAvailableFilterValue & PickIfPresent<TValue, "swatch">;
27
+ /**
28
+ * A filter facet available for the current collection, returned by the
29
+ * Storefront API. Used to render filter UI (checkboxes, swatches, sliders).
30
+ */
31
+ interface AvailableFilter<TValue extends BaseAvailableFilterValue = BaseAvailableFilterValue> {
32
+ id: string;
33
+ label: string;
34
+ type: FilterType;
35
+ presentation?: FilterPresentation | null;
36
+ values: AvailableFilterValue<TValue>[];
37
+ }
38
+ /**
39
+ * Pure browse-intent state for a collection store. Represents what the user
40
+ * wants to see (filters, sort), not what the server returned.
41
+ *
42
+ * Server response data (productsCount, availableFilters, collection id) lives
43
+ * in the framework's loader data, not in the store.
44
+ */
45
+ interface CollectionState {
46
+ /** URL-safe slug identifying the collection (e.g. `"shoes"`). */
47
+ handle: string;
48
+ /** Active product filters, synced bidirectionally with URL params (`filter.*`). */
49
+ filters: ProductFilter[];
50
+ /** Storefront API sort key. `undefined` means the collection's default sort order. */
51
+ sortKey: ProductCollectionSortKeys | undefined;
52
+ /** When `true`, the sort direction is descending (maps to `sort_by` suffix `-descending`). */
53
+ reverse: boolean;
54
+ /** `"idle"` when browse state matches the last-loaded data, `"loading"` after a browse change before the framework fetch settles. */
55
+ status: "idle" | "loading";
56
+ }
57
+ /**
58
+ * Creates a blank {@link CollectionState} for the given collection handle.
59
+ * All browse fields start at their zero values.
60
+ *
61
+ * @param handle - URL-safe collection slug (e.g. `"shoes"`)
62
+ */
63
+ declare function createInitialCollectionState(handle: string): CollectionState;
64
+ //#endregion
65
+ export { AvailableFilter, AvailableFilterValue, CollectionState, FilterPresentation, FilterType, createInitialCollectionState };
66
+ //# sourceMappingURL=state.d.mts.map
@@ -0,0 +1,20 @@
1
+ //#region src/core/collection/state.ts
2
+ /**
3
+ * Creates a blank {@link CollectionState} for the given collection handle.
4
+ * All browse fields start at their zero values.
5
+ *
6
+ * @param handle - URL-safe collection slug (e.g. `"shoes"`)
7
+ */
8
+ function createInitialCollectionState(handle) {
9
+ return {
10
+ handle,
11
+ filters: [],
12
+ sortKey: void 0,
13
+ reverse: false,
14
+ status: "idle"
15
+ };
16
+ }
17
+
18
+ //#endregion
19
+ export { createInitialCollectionState };
20
+ //# sourceMappingURL=state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.mjs","names":[],"sources":["../../../../src/core/collection/state.ts"],"sourcesContent":["import type { ProductFilter } from \"../../../vendor/standard-events\";\nimport type { ProductCollectionSortKeys } from \"../../graphql/generated/storefront-api-types\";\n\nexport type { ProductCollectionSortKeys, ProductFilter };\n\n/** How a filter option is visually presented in the storefront UI. */\nexport type FilterPresentation = \"IMAGE\" | \"SWATCH\" | \"TEXT\";\n\n/** The input mechanism a filter uses — boolean toggle, multi-select list, or price slider. */\nexport type FilterType = \"BOOLEAN\" | \"LIST\" | \"PRICE_RANGE\" | (string & {});\n\ninterface BaseAvailableFilterValue {\n /** Unique identifier for this filter value. */\n id: string;\n /** Human-readable label (e.g. \"Red\", \"Nike\", \"$50–$100\"). */\n label: string;\n /** Number of products matching this value in the current result set. */\n count: number;\n /** JSON-encoded `ProductFilter` input to apply this value. */\n input: string;\n}\n\ntype PickIfPresent<TValue, TKey extends PropertyKey> = TKey extends keyof TValue\n ? Pick<TValue, TKey>\n : {};\n\n/**\n * A single selectable value within an {@link AvailableFilter}.\n *\n * Pass your Storefront API query value type as `TValue` to expose query-selected\n * visual fields such as `swatch`.\n */\nexport type AvailableFilterValue<\n TValue extends BaseAvailableFilterValue = BaseAvailableFilterValue,\n> = BaseAvailableFilterValue & PickIfPresent<TValue, \"swatch\">;\n\n/**\n * A filter facet available for the current collection, returned by the\n * Storefront API. Used to render filter UI (checkboxes, swatches, sliders).\n */\nexport interface AvailableFilter<\n TValue extends BaseAvailableFilterValue = BaseAvailableFilterValue,\n> {\n id: string;\n label: string;\n type: FilterType;\n presentation?: FilterPresentation | null;\n values: AvailableFilterValue<TValue>[];\n}\n\n/**\n * Pure browse-intent state for a collection store. Represents what the user\n * wants to see (filters, sort), not what the server returned.\n *\n * Server response data (productsCount, availableFilters, collection id) lives\n * in the framework's loader data, not in the store.\n */\nexport interface CollectionState {\n /** URL-safe slug identifying the collection (e.g. `\"shoes\"`). */\n handle: string;\n\n /** Active product filters, synced bidirectionally with URL params (`filter.*`). */\n filters: ProductFilter[];\n /** Storefront API sort key. `undefined` means the collection's default sort order. */\n sortKey: ProductCollectionSortKeys | undefined;\n /** When `true`, the sort direction is descending (maps to `sort_by` suffix `-descending`). */\n reverse: boolean;\n /** `\"idle\"` when browse state matches the last-loaded data, `\"loading\"` after a browse change before the framework fetch settles. */\n status: \"idle\" | \"loading\";\n}\n\n/**\n * Creates a blank {@link CollectionState} for the given collection handle.\n * All browse fields start at their zero values.\n *\n * @param handle - URL-safe collection slug (e.g. `\"shoes\"`)\n */\nexport function createInitialCollectionState(handle: string): CollectionState {\n return {\n handle,\n filters: [],\n sortKey: undefined,\n reverse: false,\n status: \"idle\",\n };\n}\n"],"mappings":";;;;;;;AA6EA,SAAgB,6BAA6B,QAAiC;AAC5E,QAAO;EACL;EACA,SAAS,EAAE;EACX,SAAS;EACT,SAAS;EACT,QAAQ;EACT"}
@@ -0,0 +1,70 @@
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/url.d.ts
6
+ /**
7
+ * Parsed collection URL parameters — the subset of {@link CollectionState}
8
+ * that is derived from the URL query string.
9
+ */
10
+ interface CollectionParams {
11
+ filters: ProductFilter[];
12
+ sortKey: ProductCollectionSortKeys | undefined;
13
+ reverse: boolean;
14
+ }
15
+ /**
16
+ * Extracts collection state from URL search params.
17
+ *
18
+ * Handles Liquid-compatible filter keys (`filter.p.*`, `filter.v.*`)
19
+ * and the `sort_by` param (with optional `-descending`/`-ascending` suffix).
20
+ *
21
+ * @param searchParams - URL search params to parse
22
+ */
23
+ declare function parseCollectionParams(searchParams: URLSearchParams): CollectionParams;
24
+ /**
25
+ * Serializes collection state into URL search params using Liquid-compatible keys.
26
+ *
27
+ * Only emits store-owned keys (`filter.*`, `sort_by`).
28
+ * Omits `sort_by` when `sortKey` is `undefined` (collection default).
29
+ *
30
+ * @param state - The filter/sort slice of collection state
31
+ */
32
+ declare function serializeCollectionParams(state: Pick<CollectionState, "filters" | "sortKey" | "reverse">): URLSearchParams;
33
+ /** Normalizes a router search string for comparison (strips a leading `?`). */
34
+ declare function normalizeCollectionSearch(search: string): string;
35
+ /**
36
+ * Builds a URL query string with the given filter removed from the current params.
37
+ *
38
+ * Returns `"?"` when removing the filter leaves no params. Useful for
39
+ * rendering "remove filter" links without updating store state.
40
+ */
41
+ declare function getFilterRemovalUrl(currentParams: URLSearchParams, filter: ProductFilter): string;
42
+ /**
43
+ * Converts a Storefront API sort key and direction into the Liquid-compatible
44
+ * `sort_by` param value (e.g. `"price-ascending"`, `"best-selling"`).
45
+ *
46
+ * Direction suffixes are only appended for sort keys that support them
47
+ * (`PRICE`, `TITLE`, `CREATED`, `ID`). Others (like `BEST_SELLING`) return
48
+ * the base value regardless of the `reverse` flag.
49
+ *
50
+ * @param sortKey - Storefront API `ProductCollectionSortKeys` enum value
51
+ * @param reverse - `true` for descending, `false` for ascending
52
+ */
53
+ declare function getSortByValue(sortKey: ProductCollectionSortKeys, reverse: boolean): string;
54
+ /**
55
+ * Parses a Liquid-compatible `sort_by` value back into the Storefront API
56
+ * sort key and direction. Inverse of {@link getSortByValue}.
57
+ *
58
+ * @param value - A `sort_by` param value (e.g. `"price-ascending"`, `"best-selling"`)
59
+ */
60
+ declare function parseSortByValue(value: string): {
61
+ sortKey: ProductCollectionSortKeys | undefined;
62
+ reverse: boolean;
63
+ };
64
+ /** Compares two individual {@link ProductFilter} objects for semantic equality. */
65
+ declare function filterEquals(a: ProductFilter, b: ProductFilter): boolean;
66
+ /** Returns `true` when `input` (a Storefront API filter JSON string) matches an active filter. */
67
+ declare function isFilterInputActive(activeFilters: ProductFilter[], input: string): boolean;
68
+ //#endregion
69
+ export { CollectionParams, filterEquals, getFilterRemovalUrl, getSortByValue, isFilterInputActive, normalizeCollectionSearch, parseCollectionParams, parseSortByValue, serializeCollectionParams };
70
+ //# sourceMappingURL=url.d.mts.map
@@ -0,0 +1,367 @@
1
+ //#region src/core/collection/url.ts
2
+ const SORT_BY_DESCENDING_SUFFIX = "-descending";
3
+ const SORT_BY_ASCENDING_SUFFIX = "-ascending";
4
+ const SORT_KEY_TO_SORT_BY = {
5
+ BEST_SELLING: "best-selling",
6
+ CREATED: "created",
7
+ PRICE: "price",
8
+ TITLE: "title",
9
+ MANUAL: "manual",
10
+ ID: "id",
11
+ RELEVANCE: "relevance",
12
+ COLLECTION_DEFAULT: "collection-default"
13
+ };
14
+ const SORT_BY_TO_SORT_KEY = Object.fromEntries(Object.entries(SORT_KEY_TO_SORT_BY).map(([key, value]) => [value, key]));
15
+ const STANDARD_EVENTS_COLLECTION_SORT_KEY = {
16
+ "best-selling": "BEST_SELLING",
17
+ "created-ascending": "CREATED",
18
+ "created-descending": "CREATED",
19
+ "price-ascending": "PRICE",
20
+ "price-descending": "PRICE",
21
+ "title-ascending": "TITLE",
22
+ "title-descending": "TITLE",
23
+ manual: "MANUAL"
24
+ };
25
+ /**
26
+ * Extracts collection state from URL search params.
27
+ *
28
+ * Handles Liquid-compatible filter keys (`filter.p.*`, `filter.v.*`)
29
+ * and the `sort_by` param (with optional `-descending`/`-ascending` suffix).
30
+ *
31
+ * @param searchParams - URL search params to parse
32
+ */
33
+ function parseCollectionParams(searchParams) {
34
+ return {
35
+ filters: parseProductFilters(searchParams),
36
+ sortKey: parseCollectionSortKey(searchParams),
37
+ reverse: searchParams.get("sort_by")?.endsWith(SORT_BY_DESCENDING_SUFFIX) ?? false
38
+ };
39
+ }
40
+ /**
41
+ * Serializes collection state into URL search params using Liquid-compatible keys.
42
+ *
43
+ * Only emits store-owned keys (`filter.*`, `sort_by`).
44
+ * Omits `sort_by` when `sortKey` is `undefined` (collection default).
45
+ *
46
+ * @param state - The filter/sort slice of collection state
47
+ */
48
+ function serializeCollectionParams(state) {
49
+ const params = new URLSearchParams();
50
+ for (const filter of state.filters) serializeFilter(params, filter);
51
+ if (state.sortKey) params.set("sort_by", getSortByValue(state.sortKey, state.reverse));
52
+ return params;
53
+ }
54
+ /** Returns `true` when the param key is owned by the collection store. */
55
+ function isStoreOwnedParam(key) {
56
+ return key === "sort_by" || key.startsWith("filter.");
57
+ }
58
+ /** Normalizes a router search string for comparison (strips a leading `?`). */
59
+ function normalizeCollectionSearch(search) {
60
+ return search.startsWith("?") ? search.slice(1) : search;
61
+ }
62
+ /**
63
+ * Merges store-owned params from `state` into `existing`, preserving
64
+ * non-store keys (e.g. `grid`, `view`) already present in the URL.
65
+ */
66
+ function mergeCollectionParams(existing, state) {
67
+ const merged = new URLSearchParams(existing);
68
+ for (const key of Array.from(merged.keys())) if (isStoreOwnedParam(key)) merged.delete(key);
69
+ for (const [key, value] of serializeCollectionParams(state)) merged.append(key, value);
70
+ return merged;
71
+ }
72
+ /** Returns `true` when two router search strings describe the same collection filters and sort. */
73
+ function collectionSearchEqual(a, b) {
74
+ const parsedA = parseCollectionParams(new URLSearchParams(normalizeCollectionSearch(a)));
75
+ const parsedB = parseCollectionParams(new URLSearchParams(normalizeCollectionSearch(b)));
76
+ return parsedA.sortKey === parsedB.sortKey && parsedA.reverse === parsedB.reverse && filtersEqual(parsedA.filters, parsedB.filters);
77
+ }
78
+ /** Returns `true` when URL params and collection browse state describe the same filters and sort. */
79
+ function collectionParamsMatchState(searchParams, state) {
80
+ const parsed = parseCollectionParams(searchParams);
81
+ return parsed.sortKey === state.sortKey && parsed.reverse === state.reverse && filtersEqual(parsed.filters, state.filters);
82
+ }
83
+ /**
84
+ * Builds a URL query string with the given filter removed from the current params.
85
+ *
86
+ * Returns `"?"` when removing the filter leaves no params. Useful for
87
+ * rendering "remove filter" links without updating store state.
88
+ */
89
+ function getFilterRemovalUrl(currentParams, filter) {
90
+ const result = new URLSearchParams(currentParams);
91
+ removeFilterParams(result, filter);
92
+ const serialized = result.toString();
93
+ return serialized ? `?${serialized}` : "?";
94
+ }
95
+ /** Returns `true` when the sort key supports ascending/descending direction suffixes. */
96
+ function isDirectionalSortKey(sortKey) {
97
+ return sortKey === "PRICE" || sortKey === "TITLE" || sortKey === "CREATED" || sortKey === "ID";
98
+ }
99
+ /**
100
+ * Converts a Storefront API sort key and direction into the Liquid-compatible
101
+ * `sort_by` param value (e.g. `"price-ascending"`, `"best-selling"`).
102
+ *
103
+ * Direction suffixes are only appended for sort keys that support them
104
+ * (`PRICE`, `TITLE`, `CREATED`, `ID`). Others (like `BEST_SELLING`) return
105
+ * the base value regardless of the `reverse` flag.
106
+ *
107
+ * @param sortKey - Storefront API `ProductCollectionSortKeys` enum value
108
+ * @param reverse - `true` for descending, `false` for ascending
109
+ */
110
+ function getSortByValue(sortKey, reverse) {
111
+ const base = SORT_KEY_TO_SORT_BY[sortKey] ?? sortKey.toLowerCase();
112
+ if (!isDirectionalSortKey(sortKey)) return base;
113
+ return reverse ? `${base}-descending` : `${base}-ascending`;
114
+ }
115
+ /**
116
+ * Parses a Liquid-compatible `sort_by` value back into the Storefront API
117
+ * sort key and direction. Inverse of {@link getSortByValue}.
118
+ *
119
+ * @param value - A `sort_by` param value (e.g. `"price-ascending"`, `"best-selling"`)
120
+ */
121
+ function parseSortByValue(value) {
122
+ if (value.endsWith(SORT_BY_DESCENDING_SUFFIX)) return {
123
+ sortKey: SORT_BY_TO_SORT_KEY[value.slice(0, -11)],
124
+ reverse: true
125
+ };
126
+ if (value.endsWith(SORT_BY_ASCENDING_SUFFIX)) return {
127
+ sortKey: SORT_BY_TO_SORT_KEY[value.slice(0, -10)],
128
+ reverse: false
129
+ };
130
+ return {
131
+ sortKey: SORT_BY_TO_SORT_KEY[value],
132
+ reverse: false
133
+ };
134
+ }
135
+ /**
136
+ * Mirrors `parseProductFilters` from storefront-standard-events.
137
+ *
138
+ * Keep this local because Hydrogen only vendors Standard Events
139
+ * declarations, so importing CollectionUpdateEvent would require runtime JS.
140
+ */
141
+ function parseProductFilters(searchParams) {
142
+ const filters = [];
143
+ const price = {};
144
+ const minPrice = searchParams.get("filter.v.price.gte");
145
+ const maxPrice = searchParams.get("filter.v.price.lte");
146
+ if (minPrice) price.min = parseLocalizedNumber(minPrice);
147
+ if (maxPrice) price.max = parseLocalizedNumber(maxPrice);
148
+ if (price.min !== void 0 || price.max !== void 0) filters.push({ price });
149
+ const availability = searchParams.getAll("filter.v.availability");
150
+ const inStock = availability.includes("1");
151
+ const outOfStock = availability.includes("0");
152
+ if (inStock && !outOfStock) filters.push({ available: true });
153
+ if (outOfStock && !inStock) filters.push({ available: false });
154
+ for (const productType of searchParams.getAll("filter.p.product_type")) filters.push({ productType });
155
+ for (const productVendor of searchParams.getAll("filter.p.vendor")) filters.push({ productVendor });
156
+ for (const tag of searchParams.getAll("filter.p.tag")) filters.push({ tag });
157
+ for (const [key, value] of searchParams) {
158
+ let match;
159
+ if (match = key.match(/^filter\.v\.option\.(.+)$/)) {
160
+ filters.push({ variantOption: {
161
+ name: decodeFilterKeyPart(match[1]),
162
+ value
163
+ } });
164
+ continue;
165
+ }
166
+ if (match = key.match(/^filter\.p\.m\.([^.]+)\.(.+)$/)) {
167
+ filters.push({ productMetafield: {
168
+ namespace: decodeFilterKeyPart(match[1]),
169
+ key: decodeFilterKeyPart(match[2]),
170
+ value
171
+ } });
172
+ continue;
173
+ }
174
+ if (match = key.match(/^filter\.v\.m\.([^.]+)\.(.+)$/)) {
175
+ filters.push({ variantMetafield: {
176
+ namespace: decodeFilterKeyPart(match[1]),
177
+ key: decodeFilterKeyPart(match[2]),
178
+ value
179
+ } });
180
+ continue;
181
+ }
182
+ if (match = key.match(/^filter\.v\.t\.([^.]+)\.(.+)$/)) filters.push({ taxonomyMetafield: {
183
+ key: `${decodeFilterKeyPart(match[1])}.${decodeFilterKeyPart(match[2])}`,
184
+ value
185
+ } });
186
+ }
187
+ return filters;
188
+ }
189
+ /** Mirrors `getCollectionSortKey` from storefront-standard-events. */
190
+ function parseCollectionSortKey(searchParams) {
191
+ const rawSortBy = searchParams.get("sort_by");
192
+ return rawSortBy ? STANDARD_EVENTS_COLLECTION_SORT_KEY[rawSortBy] : void 0;
193
+ }
194
+ function parseLocalizedNumber(value) {
195
+ try {
196
+ const locale = typeof window !== "undefined" ? window.Shopify?.locale : void 0;
197
+ const parts = new Intl.NumberFormat(locale ?? "en").formatToParts(1234.5);
198
+ const group = parts.find((part) => part.type === "group")?.value ?? ",";
199
+ const decimal = parts.find((part) => part.type === "decimal")?.value ?? ".";
200
+ const normalized = value.split(group).join("").replace(decimal, ".");
201
+ const number = Number(normalized);
202
+ if (!Number.isNaN(number)) return number;
203
+ } catch {}
204
+ return Number(value.replace(/[^\d.]/g, "")) || 0;
205
+ }
206
+ function decodeFilterKeyPart(value) {
207
+ return decodeURIComponent(value.replace(/\+/g, " "));
208
+ }
209
+ function getFilterParamEntries(filter) {
210
+ const entries = [];
211
+ if (filter.available != null) entries.push({
212
+ key: "filter.v.availability",
213
+ value: filter.available ? "1" : "0"
214
+ });
215
+ if (filter.price) {
216
+ if (filter.price.min != null) entries.push({
217
+ key: "filter.v.price.gte",
218
+ value: String(filter.price.min)
219
+ });
220
+ if (filter.price.max != null) entries.push({
221
+ key: "filter.v.price.lte",
222
+ value: String(filter.price.max)
223
+ });
224
+ }
225
+ if (filter.productType != null) entries.push({
226
+ key: "filter.p.product_type",
227
+ value: filter.productType
228
+ });
229
+ if (filter.productVendor != null) entries.push({
230
+ key: "filter.p.vendor",
231
+ value: filter.productVendor
232
+ });
233
+ if (filter.tag != null) entries.push({
234
+ key: "filter.p.tag",
235
+ value: filter.tag
236
+ });
237
+ if (filter.variantOption) entries.push({
238
+ key: `filter.v.option.${encodeURIComponent(filter.variantOption.name)}`,
239
+ value: filter.variantOption.value ?? ""
240
+ });
241
+ if (filter.productMetafield) {
242
+ const { namespace, key, value } = filter.productMetafield;
243
+ entries.push({
244
+ key: `filter.p.m.${encodeURIComponent(namespace)}.${encodeURIComponent(key)}`,
245
+ value: value ?? ""
246
+ });
247
+ }
248
+ if (filter.variantMetafield) {
249
+ const { namespace, key, value } = filter.variantMetafield;
250
+ entries.push({
251
+ key: `filter.v.m.${encodeURIComponent(namespace)}.${encodeURIComponent(key)}`,
252
+ value: value ?? ""
253
+ });
254
+ }
255
+ if (filter.taxonomyMetafield) {
256
+ const fullKey = filter.taxonomyMetafield.key;
257
+ const dotIdx = fullKey.indexOf(".");
258
+ const ns = dotIdx >= 0 ? fullKey.slice(0, dotIdx) : fullKey;
259
+ const k = dotIdx >= 0 ? fullKey.slice(dotIdx + 1) : "";
260
+ entries.push({
261
+ key: `filter.v.t.${encodeURIComponent(ns)}.${encodeURIComponent(k)}`,
262
+ value: filter.taxonomyMetafield.value
263
+ });
264
+ }
265
+ if (filter.category) entries.push({
266
+ key: "filter.p.category",
267
+ value: filter.category.id
268
+ });
269
+ return entries;
270
+ }
271
+ function serializeFilter(params, filter) {
272
+ for (const { key, value } of getFilterParamEntries(filter)) params.append(key, value);
273
+ }
274
+ function removeFilterParams(params, filter) {
275
+ for (const { key, value } of getFilterParamEntries(filter)) removeParamValue(params, key, value);
276
+ }
277
+ /** Compares two individual {@link ProductFilter} objects for semantic equality. */
278
+ function filterEquals(a, b) {
279
+ const kindA = filterKind(a);
280
+ if (kindA !== filterKind(b) || kindA == null) return false;
281
+ switch (kindA) {
282
+ case "tag": return a.tag === b.tag;
283
+ case "available": return a.available === b.available;
284
+ case "price": return priceRangeEquals(a.price, b.price);
285
+ case "productType": return a.productType === b.productType;
286
+ case "productVendor": return a.productVendor === b.productVendor;
287
+ case "variantOption": {
288
+ const aOpt = a.variantOption;
289
+ const bOpt = b.variantOption;
290
+ if (aOpt == null || bOpt == null) return false;
291
+ return aOpt.name === bOpt.name && (aOpt.value ?? "") === (bOpt.value ?? "");
292
+ }
293
+ case "productMetafield": {
294
+ const aMeta = a.productMetafield;
295
+ const bMeta = b.productMetafield;
296
+ if (aMeta == null || bMeta == null) return false;
297
+ return metafieldEquals(aMeta, bMeta);
298
+ }
299
+ case "variantMetafield": {
300
+ const aMeta = a.variantMetafield;
301
+ const bMeta = b.variantMetafield;
302
+ if (aMeta == null || bMeta == null) return false;
303
+ return metafieldEquals(aMeta, bMeta);
304
+ }
305
+ case "taxonomyMetafield": {
306
+ const aMeta = a.taxonomyMetafield;
307
+ const bMeta = b.taxonomyMetafield;
308
+ if (aMeta == null || bMeta == null) return false;
309
+ return aMeta.key === bMeta.key && aMeta.value === bMeta.value;
310
+ }
311
+ case "category": {
312
+ const aCat = a.category;
313
+ const bCat = b.category;
314
+ if (aCat == null || bCat == null) return false;
315
+ return aCat.id === bCat.id;
316
+ }
317
+ }
318
+ }
319
+ /** Returns `true` when `input` (a Storefront API filter JSON string) matches an active filter. */
320
+ function isFilterInputActive(activeFilters, input) {
321
+ let parsed;
322
+ try {
323
+ parsed = JSON.parse(input);
324
+ } catch {
325
+ return false;
326
+ }
327
+ return activeFilters.some((filter) => filterEquals(filter, parsed));
328
+ }
329
+ function filterKind(filter) {
330
+ if (filter.tag != null) return "tag";
331
+ if (filter.available != null) return "available";
332
+ if (filter.price != null) return "price";
333
+ if (filter.productType != null) return "productType";
334
+ if (filter.productVendor != null) return "productVendor";
335
+ if (filter.variantOption != null) return "variantOption";
336
+ if (filter.productMetafield != null) return "productMetafield";
337
+ if (filter.variantMetafield != null) return "variantMetafield";
338
+ if (filter.taxonomyMetafield != null) return "taxonomyMetafield";
339
+ if (filter.category != null) return "category";
340
+ return null;
341
+ }
342
+ function priceRangeEquals(a, b) {
343
+ if (a == null || b == null) return a === b;
344
+ return a.min === b.min && a.max === b.max;
345
+ }
346
+ function metafieldEquals(a, b) {
347
+ return a.namespace === b.namespace && a.key === b.key && (a.value ?? "") === (b.value ?? "");
348
+ }
349
+ function filtersEqual(a, b) {
350
+ if (a.length !== b.length) return false;
351
+ const remaining = [...b];
352
+ for (const filter of a) {
353
+ const index = remaining.findIndex((candidate) => filterEquals(filter, candidate));
354
+ if (index === -1) return false;
355
+ remaining.splice(index, 1);
356
+ }
357
+ return true;
358
+ }
359
+ function removeParamValue(params, name, value) {
360
+ const remaining = params.getAll(name).filter((v) => v !== value);
361
+ params.delete(name);
362
+ for (const v of remaining) params.append(name, v);
363
+ }
364
+
365
+ //#endregion
366
+ export { collectionParamsMatchState, collectionSearchEqual, filterEquals, getFilterRemovalUrl, getSortByValue, isDirectionalSortKey, isFilterInputActive, mergeCollectionParams, normalizeCollectionSearch, parseCollectionParams, parseSortByValue, serializeCollectionParams };
367
+ //# sourceMappingURL=url.mjs.map