@shopify/hydrogen 2023.4.0 → 2023.4.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.
@@ -5,8 +5,8 @@ var serverRuntime = require('@remix-run/server-runtime');
5
5
  var react = require('react');
6
6
  var react$1 = require('@remix-run/react');
7
7
 
8
- var Ee=Object.defineProperty;var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ie=(e,t)=>{for(var n in t)Ee(e,n,{get:t[n],enumerable:!0});};var me={};Ie(me,{default:()=>ge,logSeoTags:()=>de});function ge({headTags:e}){return de(e),null}function de(e){console.log(" "),console.log("%cSEO Meta Tags",`${Ze}`),console.log(" "),e.forEach(t=>{if(t.tag==="script"){if(console.log("%c\u2022 JSON LD ",V),t.children)try{console.table(JSON.parse(t.children),["name","content"]);}catch{console.log(t.children);}}else {if(console.log(`%c\u2022 ${t.tag} `,V),t.children)if(typeof t.children=="string")console.log(`\u21B3 ${t.children}`);else try{Object.entries(JSON.parse(t.children)).map(([n,r])=>console.log(`\u21B3 ${r}`));}catch{console.log(t.children);}if(t.props.property==="og:image:url"){let n=t.props.content;et(n).then(r=>{let o=`font-size: 400px; padding: 10px; background: white url(${r}) no-repeat center; background-size: contain;`;console.log("%c\u2022 Share image preview",V),console.log("%c ",o),console.log(`\u21B3 ${n}`);}).catch(r=>{console.error(r);});}Object.entries(t.props).map(([n,r])=>{console.log(`\u21B3 ${n} \u2192 ${r}`);});}console.log(" ");});}async function et(e){let r=await(await(await fetch(e)).blob()).arrayBuffer();return `data:image/png;base64,${tt(r)}`}function tt(e){let t="",n=new Uint8Array(e),r=n.byteLength;for(let o=0;o<r;o++)t+=String.fromCharCode(n[o]);return btoa(t)}var V,Ze,ye=Ae(()=>{V="text-transform: uppercase;",Ze="text-transform: uppercase; font-weight: bold; text-transform: uppercase;font-weight: bold";});function Y(e){let t=Array.isArray(e)?e:[e],n="";for(let r of t)r!=null&&(typeof r=="object"?!!r.body&&typeof r.body=="string"?n+=r.body:n+=JSON.stringify(r):n+=r);return n}var q="public",Oe="private",ke="no-store",z={maxAge:"max-age",staleWhileRevalidate:"stale-while-revalidate",sMaxAge:"s-maxage",staleIfError:"stale-if-error"};function b(e){let t=[];return Object.keys(e).forEach(n=>{n==="mode"?t.push(e[n]):z[n]&&t.push(`${z[n]}=${e[n]}`);}),t.join(", ")}function j(){return {mode:ke}}function X(e){if(e?.mode&&e?.mode!==q&&e?.mode!==Oe)throw Error("'mode' must be either 'public' or 'private'")}function g(e){return X(e),{mode:q,maxAge:1,staleWhileRevalidate:9,...e}}function H(e){return X(e),{mode:q,maxAge:3600,staleWhileRevalidate:82800,...e}}function _(e){return e}function w(e){return String(e).includes("__proto__")?JSON.parse(e,Pe):JSON.parse(e)}function Pe(e,t){if(e!=="__proto__")return t}function R(e,t){return e&&t?{...e,...t}:e||g()}function v(e){return b(R(e))}async function Le(e,t){if(!e)return;let n=await e.match(t);if(!n){t.url;return}return t.url,n}async function Me(e,t,n,r){if(!e)return;let o=R(r);t.headers.set("cache-control",v(R(o,{maxAge:(o.maxAge||0)+(o.staleWhileRevalidate||0)})));let a=v(R(o));n.headers.set("cache-control",a),n.headers.set("real-cache-control",a),n.headers.set("cache-put-date",new Date().toUTCString()),t.url,await e.put(t,n);}async function Ue(e,t){!e||(t.url,await e.delete(t));}function qe(e,t){let n=t.headers.get("cache-put-date"),r=t.headers.get("real-cache-control"),o=0;if(r){let i=r.match(/max-age=(\d*)/);i&&i.length>1&&(o=parseFloat(i[1]));}if(!n)return !1;let c=(new Date().valueOf()-new Date(n).valueOf())/1e3>o;return c&&(e.url,void 0),c}var E={get:Le,set:Me,delete:Ue,generateDefaultCacheControlHeader:v,isStale:qe};function N(e){return `https://shopify.dev/?${e}`}function je(e){return e||g()}async function Z(e,t){if(!e)return;let n=N(t),r=new Request(n),o=await E.get(e,r);if(!o)return;let a=await o.text();try{return [w(a),o]}catch{return [a,o]}}async function D(e,t,n,r){if(!e)return;let o=N(t),a=new Request(o),s=new Response(JSON.stringify(n));await E.set(e,a,s,je(r));}function ee(e,t){return E.isStale(new Request(N(e)),t)}function He(e,t){return [e,{status:t.status,statusText:t.statusText,headers:Array.from(t.headers.entries())}]}function te([e,t]){return [e,new Response(e,t)]}var re=e=>!e?.errors,$=new Set;async function F(e,t,{strategy:n=g(),cacheInstance:r,shouldCacheResult:o=()=>!0,waitUntil:a}){if(!r||!n)return t();let s=Y([...typeof e=="string"?[e]:e]),c=await Z(r,s);if(c){let[l,f]=c;if(!$.has(s)&&ee(s,f)){$.add(s);let d=Promise.resolve().then(async()=>{try{let h=await t();o(h)&&await D(r,s,h,n);}catch(h){h.message&&(h.message="SWR in sub-request failed: "+h.message),console.error(h);}finally{$.delete(s);}});a?.(d);}return l}let i=await t();if(o(i)){let l=D(r,s,i,n);a?.(l);}return i}async function ne(e,t,{cacheInstance:n,cache:r,cacheKey:o=[e,t],shouldCacheResponse:a=()=>!0,waitUntil:s,returnType:c="json"}={}){return !r&&(!t.method||t.method==="GET")&&(r=g()),F(o,async()=>{let i=await fetch(e,t),l;try{l=await i[c]();}catch{l=await i.text();}return He(l,i)},{cacheInstance:n,waitUntil:s,strategy:r??null,shouldCacheResult:i=>a(...te(i))}).then(te)}var oe="Custom-Storefront-Request-Group-ID",ae="Shopify-Storefront-Buyer-IP";function se(){return typeof crypto<"u"&&!!crypto.randomUUID?crypto.randomUUID():`weak-${Math.random().toString(16).substring(2)}`}var ie=new Set,B=e=>{ie.has(e)||(console.warn(e),ie.add(e));};var W="2023.4.0";var he=class extends Error{},Fe=e=>e instanceof he,Be=/(^|}\s)query[\s({]/im,We=/(^|}\s)mutation[\s({]/im;function pe(e){return e.replace(/\s*#.*$/gm,"").replace(/\s+/gm," ").trim()}var Ge={language:"EN",country:"US"};function _t({storefrontHeaders:e,cache:t,waitUntil:n,buyerIp:r,i18n:o,requestGroupId:a,storefrontId:s,...c}){t||B("Storefront API client created without a cache instance. This may slow down your sub-requests.");let{getPublicTokenHeaders:i,getPrivateTokenHeaders:l,getStorefrontApiUrl:f,getShopifyDomain:d}=hydrogenReact.createStorefrontClient(c),m=(c.privateStorefrontToken?l:i)({contentType:"json"});if(m[oe]=e?.requestGroupId||a||se(),(e?.buyerIp||r)&&(m[ae]=e?.buyerIp||r||""),s&&(m[hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER]=s),(m["user-agent"]=`Hydrogen ${W}`),e&&e.cookie){let p=hydrogenReact.getShopifyCookies(e.cookie??"");p[hydrogenReact.SHOPIFY_Y]&&(m[hydrogenReact.SHOPIFY_STOREFRONT_Y_HEADER]=p[hydrogenReact.SHOPIFY_Y]),p[hydrogenReact.SHOPIFY_S]&&(m[hydrogenReact.SHOPIFY_STOREFRONT_S_HEADER]=p[hydrogenReact.SHOPIFY_S]);}e||B('"requestGroupId" and "buyerIp" will be deprecated in the next calendar release. Please use "getStorefrontHeaders"');async function C({query:p,mutation:S,variables:k,cache:Ce,headers:T=[],storefrontApiVersion:Te}){let be=T instanceof Headers?Object.fromEntries(T.entries()):Array.isArray(T)?Object.fromEntries(T):T;p=p??S;let P={...k};o&&(!k?.country&&/\$country/.test(p)&&(P.country=o.country),!k?.language&&/\$language/.test(p)&&(P.language=o.language));let xe=f({storefrontApiVersion:Te}),we={method:"POST",headers:{...m,...be},body:JSON.stringify({query:p,variables:P})},[L,M]=await ne(xe,we,{cacheInstance:S?void 0:t,cache:Ce||g(),shouldCacheResponse:re,waitUntil:n});if(!M.ok){let U;try{U=w(L);}catch{U=[{message:L}];}ue(M,U);}let{data:Re,errors:J}=L;return J?.length&&ue(M,J,he),Re}return {storefront:{query:(p,S)=>{if(p=pe(p),We.test(p))throw new Error("storefront.query cannot execute mutations");return C({...S,query:p})},mutate:(p,S)=>{if(p=pe(p),Be.test(p))throw new Error("storefront.mutate cannot execute queries");return C({...S,mutation:p})},cache:t,CacheNone:j,CacheLong:H,CacheShort:g,CacheCustom:_,generateCacheControlHeader:b,getPublicTokenHeaders:i,getPrivateTokenHeaders:l,getShopifyDomain:d,getApiUrl:f,isApiError:Fe,i18n:o??Ge}}}function ue(e,t,n=Error){let r=e.headers.get("x-request-id"),o=r?` - Request ID: ${r}`:"";if(t){let a=typeof t=="string"?t:t.map(s=>s.message).join(`
9
- `);throw new n(a+o)}throw new n(`API response error: ${e.status}`+o)}function $t({cache:e,waitUntil:t}){return (n,r,o)=>F(n,o,{strategy:r,cacheInstance:e,waitUntil:t})}var G=class{#e;constructor(){this.#e=new Map;}add(t){throw new Error("Method not implemented. Use `put` instead.")}addAll(t){throw new Error("Method not implemented. Use `put` instead.")}matchAll(t,n){throw new Error("Method not implemented. Use `match` instead.")}async put(t,n){if(t.method!=="GET")throw new TypeError("Cannot cache response to non-GET request.");if(n.status===206)throw new TypeError("Cannot cache response to a range request (206 Partial Content).");if(n.headers.get("vary")?.includes("*"))throw new TypeError("Cannot cache response with 'Vary: *' header.");this.#e.set(t.url,{body:new Uint8Array(await n.arrayBuffer()),status:n.status,headers:[...n.headers],timestamp:Date.now()});}async match(t){if(t.method!=="GET")return;let n=this.#e.get(t.url);if(!n)return;let{body:r,timestamp:o,...a}=n,s=new Headers(a.headers),c=s.get("cache-control")||s.get("real-cache-control")||"",i=parseInt(c.match(/max-age=(\d+)/)?.[1]||"0",10),l=parseInt(c.match(/stale-while-revalidate=(\d+)/)?.[1]||"0",10),f=(Date.now()-o)/1e3;if(f>i+l){this.#e.delete(t.url);return}let h=f>i;return s.set("cache",h?"STALE":"HIT"),s.set("date",new Date(o).toUTCString()),new Response(r,{status:a.status??200,headers:s})}async delete(t){return this.#e.has(t.url)?(this.#e.delete(t.url),!0):!1}keys(t){let n=[];for(let r of this.#e.keys())(!t||t.url===r)&&n.push(new Request(r));return Promise.resolve(n)}};async function Qe({storefront:e,request:t,response:n=new Response("Not Found",{status:404})}){let{pathname:r,search:o}=new URL(t.url),a=r+o;try{let{urlRedirects:s}=await e.query(Je,{variables:{query:"path:"+a}}),c=s?.edges?.[0]?.node?.target;if(c)return new Response(null,{status:302,headers:{location:c}});let i=new URLSearchParams(o),l=i.get("return_to")||i.get("redirect");if(l){if(Ve(l))return serverRuntime.redirect(l);console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${a} to ${l}`);}}catch(s){console.error(`Failed to fetch redirects from Storefront API for route ${a}`,s);}return n}function Ve(e){try{new URL(e);}catch{return !0}return !1}var Je=`#graphql
8
+ var Oe=Object.defineProperty;var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var Le=(e,t)=>{for(var n in t)Oe(e,n,{get:t[n],enumerable:!0});};var Se={};Le(Se,{default:()=>ye,logSeoTags:()=>me});function ye({headTags:e}){return me(e),null}function me(e){console.log(" "),console.log("%cSEO Meta Tags",`${nt}`),console.log(" "),e.forEach(t=>{if(t.tag==="script"){if(console.log("%c\u2022 JSON LD ",z),t.children)try{console.table(JSON.parse(t.children),["name","content"]);}catch{console.log(t.children);}}else {if(console.log(`%c\u2022 ${t.tag} `,z),t.children)if(typeof t.children=="string")console.log(`\u21B3 ${t.children}`);else try{Object.entries(JSON.parse(t.children)).map(([n,r])=>console.log(`\u21B3 ${r}`));}catch{console.log(t.children);}if(t.props.property==="og:image:url"){let n=t.props.content;ot(n).then(r=>{let o=`font-size: 400px; padding: 10px; background: white url(${r}) no-repeat center; background-size: contain;`;console.log("%c\u2022 Share image preview",z),console.log("%c ",o),console.log(`\u21B3 ${n}`);}).catch(r=>{console.error(r);});}Object.entries(t.props).map(([n,r])=>{console.log(`\u21B3 ${n} \u2192 ${r}`);});}console.log(" ");});}async function ot(e){let r=await(await(await fetch(e)).blob()).arrayBuffer();return `data:image/png;base64,${at(r)}`}function at(e){let t="",n=new Uint8Array(e),r=n.byteLength;for(let o=0;o<r;o++)t+=String.fromCharCode(n[o]);return btoa(t)}var z,nt,Ce=Ae(()=>{z="text-transform: uppercase;",nt="text-transform: uppercase; font-weight: bold; text-transform: uppercase;font-weight: bold";});function Z(e){let t=Array.isArray(e)?e:[e],n="";for(let r of t)r!=null&&(typeof r=="object"?!!r.body&&typeof r.body=="string"?n+=r.body:n+=JSON.stringify(r):n+=r);return n}var U="public",ve="private",Me="no-store",ee={maxAge:"max-age",staleWhileRevalidate:"stale-while-revalidate",sMaxAge:"s-maxage",staleIfError:"stale-if-error"};function w(e){let t=[];return Object.keys(e).forEach(n=>{n==="mode"?t.push(e[n]):ee[n]&&t.push(`${ee[n]}=${e[n]}`);}),t.join(", ")}function H(){return {mode:Me}}function te(e){if(e?.mode&&e?.mode!==U&&e?.mode!==ve)throw Error("'mode' must be either 'public' or 'private'")}function y(e){return te(e),{mode:U,maxAge:1,staleWhileRevalidate:9,...e}}function j(e){return te(e),{mode:U,maxAge:3600,staleWhileRevalidate:82800,...e}}function G(e){return e}function R(e){return String(e).includes("__proto__")?JSON.parse(e,qe):JSON.parse(e)}function qe(e,t){if(e!=="__proto__")return t}function I(e,t){return e&&t?{...e,...t}:e||y()}function _(e){return w(I(e))}async function Ne(e,t){if(!e)return;let n=await e.match(t);if(!n){t.url;return}return t.url,n}async function Ue(e,t,n,r){if(!e)return;let o=I(r);t.headers.set("cache-control",_(I(o,{maxAge:(o.maxAge||0)+(o.staleWhileRevalidate||0)})));let a=_(I(o));n.headers.set("cache-control",a),n.headers.set("real-cache-control",a),n.headers.set("cache-put-date",new Date().toUTCString()),t.url,await e.put(t,n);}async function He(e,t){!e||(t.url,await e.delete(t));}function je(e,t){let n=t.headers.get("cache-put-date"),r=t.headers.get("real-cache-control"),o=0;if(r){let c=r.match(/max-age=(\d*)/);c&&c.length>1&&(o=parseFloat(c[1]));}if(!n)return !1;let i=(new Date().valueOf()-new Date(n).valueOf())/1e3>o;return i&&(e.url,void 0),i}var k={get:Ne,set:Ue,delete:He,generateDefaultCacheControlHeader:_,isStale:je};function $(e){return `https://shopify.dev/?${e}`}function Ge(e){return e||y()}async function re(e,t){if(!e)return;let n=$(t),r=new Request(n),o=await k.get(e,r);if(!o)return;let a=await o.text();try{return [R(a),o]}catch{return [a,o]}}async function D(e,t,n,r){if(!e)return;let o=$(t),a=new Request(o),s=new Response(JSON.stringify(n));await k.set(e,a,s,Ge(r));}function ne(e,t){return k.isStale(new Request($(e)),t)}function _e(e,t){return [e,{status:t.status,statusText:t.statusText,headers:Array.from(t.headers.entries())}]}function oe([e,t]){return [e,new Response(e,t)]}var ae=e=>!e?.errors,V=new Set;async function F(e,t,{strategy:n=y(),cacheInstance:r,shouldCacheResult:o=()=>!0,waitUntil:a}){if(!r||!n)return t();let s=Z([...typeof e=="string"?[e]:e]),i=await re(r,s);if(i){let[l,p]=i;if(!V.has(s)&&ne(s,p)){V.add(s);let f=Promise.resolve().then(async()=>{try{let g=await t();o(g)&&await D(r,s,g,n);}catch(g){g.message&&(g.message="SWR in sub-request failed: "+g.message),console.error(g);}finally{V.delete(s);}});a?.(f);}return l}let c=await t();if(o(c)){let l=D(r,s,c,n);a?.(l);}return c}async function se(e,t,{cacheInstance:n,cache:r,cacheKey:o=[e,t],shouldCacheResponse:a=()=>!0,waitUntil:s,returnType:i="json"}={}){return !r&&(!t.method||t.method==="GET")&&(r=y()),F(o,async()=>{let c=await fetch(e,t),l;try{l=await c[i]();}catch{l=await c.text();}return _e(l,c)},{cacheInstance:n,waitUntil:s,strategy:r??null,shouldCacheResult:c=>a(...oe(c))}).then(oe)}var ie="Custom-Storefront-Request-Group-ID";function ce(){return typeof crypto<"u"&&!!crypto.randomUUID?crypto.randomUUID():`weak-${Math.random().toString(16).substring(2)}`}var le=new Set,Q=e=>{le.has(e)||(console.warn(e),le.add(e));};var W="2023.4.2";var de=class extends Error{},We=e=>e instanceof de,Be=/(^|}\s)query[\s({]/im,Ke=/(^|}\s)mutation[\s({]/im;function ge(e){return e.replace(/\s*#.*$/gm,"").replace(/\s+/gm," ").trim()}var Je={language:"EN",country:"US"};function Wt(e){let{storefrontHeaders:t,cache:n,waitUntil:r,buyerIp:o,i18n:a,requestGroupId:s,storefrontId:i,...c}=e;n||Q("Storefront API client created without a cache instance. This may slow down your sub-requests.");let{getPublicTokenHeaders:l,getPrivateTokenHeaders:p,getStorefrontApiUrl:f,getShopifyDomain:g}=hydrogenReact.createStorefrontClient(c),h=(c.privateStorefrontToken?p:l)({contentType:"json",buyerIp:t?.buyerIp||o});if(h[ie]=t?.requestGroupId||s||ce(),i&&(h[hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER]=i),(h["user-agent"]=`Hydrogen ${W}`),t&&t.cookie){let u=hydrogenReact.getShopifyCookies(t.cookie??"");u[hydrogenReact.SHOPIFY_Y]&&(h[hydrogenReact.SHOPIFY_STOREFRONT_Y_HEADER]=u[hydrogenReact.SHOPIFY_Y]),u[hydrogenReact.SHOPIFY_S]&&(h[hydrogenReact.SHOPIFY_STOREFRONT_S_HEADER]=u[hydrogenReact.SHOPIFY_S]);}t||Q('"requestGroupId" and "buyerIp" will be deprecated in the next calendar release. Please use "getStorefrontHeaders"');async function m({query:u,mutation:T,variables:L,cache:we,headers:x=[],storefrontApiVersion:Pe}){let Re=x instanceof Headers?Object.fromEntries(x.entries()):Array.isArray(x)?Object.fromEntries(x):x;u=u??T;let v={...L};a&&(!L?.country&&/\$country/.test(u)&&(v.country=a.country),!L?.language&&/\$language/.test(u)&&(v.language=a.language));let Ie=f({storefrontApiVersion:Pe}),ke={method:"POST",headers:{...h,...Re},body:JSON.stringify({query:u,variables:v})},[M,q]=await se(Ie,ke,{cacheInstance:T?void 0:n,cache:we||y(),shouldCacheResponse:ae,waitUntil:r});if(!q.ok){let N;try{N=R(M);}catch{N=[{message:M}];}fe(q,N);}let{data:Ee,errors:X}=M;return X?.length&&fe(q,X,de),Ee}return {storefront:{query:(u,T)=>{if(u=ge(u),Ke.test(u))throw new Error("storefront.query cannot execute mutations");return m({...T,query:u})},mutate:(u,T)=>{if(u=ge(u),Be.test(u))throw new Error("storefront.mutate cannot execute queries");return m({...T,mutation:u})},cache:n,CacheNone:H,CacheLong:j,CacheShort:y,CacheCustom:G,generateCacheControlHeader:w,getPublicTokenHeaders:l,getPrivateTokenHeaders:p,getShopifyDomain:g,getApiUrl:f,isApiError:We,i18n:a??Je}}}function fe(e,t,n=Error){let r=e.headers.get("x-request-id"),o=r?` - Request ID: ${r}`:"";if(t){let a=typeof t=="string"?t:t.map(s=>s.message).join(`
9
+ `);throw new n(a+o)}throw new n(`API response error: ${e.status}`+o)}function zt(e){let{cache:t,waitUntil:n}=e;return function(o,a,s){return F(o,s,{strategy:a,cacheInstance:t,waitUntil:n})}}var B=class{#e;constructor(){this.#e=new Map;}add(t){throw new Error("Method not implemented. Use `put` instead.")}addAll(t){throw new Error("Method not implemented. Use `put` instead.")}matchAll(t,n){throw new Error("Method not implemented. Use `match` instead.")}async put(t,n){if(t.method!=="GET")throw new TypeError("Cannot cache response to non-GET request.");if(n.status===206)throw new TypeError("Cannot cache response to a range request (206 Partial Content).");if(n.headers.get("vary")?.includes("*"))throw new TypeError("Cannot cache response with 'Vary: *' header.");this.#e.set(t.url,{body:new Uint8Array(await n.arrayBuffer()),status:n.status,headers:[...n.headers],timestamp:Date.now()});}async match(t){if(t.method!=="GET")return;let n=this.#e.get(t.url);if(!n)return;let{body:r,timestamp:o,...a}=n,s=new Headers(a.headers),i=s.get("cache-control")||s.get("real-cache-control")||"",c=parseInt(i.match(/max-age=(\d+)/)?.[1]||"0",10),l=parseInt(i.match(/stale-while-revalidate=(\d+)/)?.[1]||"0",10),p=(Date.now()-o)/1e3;if(p>c+l){this.#e.delete(t.url);return}let g=p>c;return s.set("cache",g?"STALE":"HIT"),s.set("date",new Date(o).toUTCString()),new Response(r,{status:a.status??200,headers:s})}async delete(t){return this.#e.has(t.url)?(this.#e.delete(t.url),!0):!1}keys(t){let n=[];for(let r of this.#e.keys())(!t||t.url===r)&&n.push(new Request(r));return Promise.resolve(n)}};async function Ye(e){let{storefront:t,request:n,response:r=new Response("Not Found",{status:404})}=e,{pathname:o,search:a}=new URL(n.url),s=o+a;try{let{urlRedirects:i}=await t.query(Ze,{variables:{query:"path:"+s}}),c=i?.edges?.[0]?.node?.target;if(c)return new Response(null,{status:302,headers:{location:c}});let l=new URLSearchParams(a),p=l.get("return_to")||l.get("redirect");if(p){if(Xe(p))return serverRuntime.redirect(p);console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${s} to ${p}`);}}catch(i){console.error(`Failed to fetch redirects from Storefront API for route ${s}`,i);}return r}function Xe(e){try{new URL(e);}catch{return !0}return !1}var Ze=`#graphql
10
10
  query redirects($query: String) {
11
11
  urlRedirects(first: 1, query: $query) {
12
12
  edges {
@@ -16,7 +16,7 @@ var Ee=Object.defineProperty;var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ie=(e,t)=>{
16
16
  }
17
17
  }
18
18
  }
19
- `;function Ye({context:e}){let t=e?.storefront;if(!t)throw new Error("GraphiQL: Hydrogen's storefront client must be injected in the loader context.");let n=t.getApiUrl(),r=t.getPublicTokenHeaders()["X-Shopify-Storefront-Access-Token"];return new Response(`
19
+ `;var et=async function({context:t}){let n=t?.storefront;if(!n)throw new Error("GraphiQL: Hydrogen's storefront client must be injected in the loader context.");let r=n.getApiUrl(),o=n.getPublicTokenHeaders()["X-Shopify-Storefront-Access-Token"];return new Response(`
20
20
  <!DOCTYPE html>
21
21
  <html lang="en">
22
22
  <head>
@@ -57,9 +57,9 @@ var Ee=Object.defineProperty;var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ie=(e,t)=>{
57
57
  ReactDOM.render(
58
58
  React.createElement(GraphiQL, {
59
59
  fetcher: GraphiQL.createFetcher({
60
- url: '${n}',
60
+ url: '${r}',
61
61
  headers: {
62
- 'X-Shopify-Storefront-Access-Token': '${r}',
62
+ 'X-Shopify-Storefront-Access-Token': '${o}',
63
63
  }
64
64
  }),
65
65
  defaultEditorToolsVisibility: true,
@@ -70,7 +70,7 @@ var Ee=Object.defineProperty;var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ie=(e,t)=>{
70
70
  <\/script>
71
71
  </body>
72
72
  </html>
73
- `,{status:200,headers:{"content-type":"text/html"}})}var y="Error in SEO input: ",A={title:{validate:e=>{if(typeof e!="string")throw new Error(y.concat("`title` should be a string"));if(typeof e=="string"&&e.length>120)throw new Error(y.concat("`title` should not be longer than 120 characters"));return e}},description:{validate:e=>{if(typeof e!="string")throw new Error(y.concat("`description` should be a string"));if(typeof e=="string"&&e.length>155)throw new Error(y.concat("`description` should not be longer than 155 characters"));return e}},url:{validate:e=>{if(typeof e!="string")throw new Error(y.concat("`url` should be a string"));if(typeof e=="string"&&!e.startsWith("http"))throw new Error(y.concat("`url` should be a valid URL"));return e}},handle:{validate:e=>{if(typeof e!="string")throw new Error(y.concat("`handle` should be a string"));if(typeof e=="string"&&!e.startsWith("@"))throw new Error(y.concat("`handle` should start with `@`"));return e}}};function fe(e){let t=[];for(let n of Object.keys(e))switch(n){case"title":{let r=I(A.title,e.title),o=ze(e?.titleTemplate,r);if(!o)break;t.push(u("title",{title:o}),u("meta",{property:"og:title",content:o}),u("meta",{name:"twitter:title",content:o}));break}case"description":{let r=I(A.description,e.description);if(!r)break;t.push(u("meta",{name:"description",content:r}),u("meta",{property:"og:description",content:r}),u("meta",{name:"twitter:description",content:r}));break}case"url":{let r=I(A.url,e.url);if(!r)break;t.push(u("link",{rel:"canonical",href:r}),u("meta",{property:"og:url",content:r}));break}case"handle":{let r=I(A.handle,e.handle);if(!r)break;t.push(u("meta",{name:"twitter:site",content:r}),u("meta",{name:"twitter:creator",content:r}));break}case"media":{let r,o=Q(e.media);for(let a of o)if(typeof a=="string"&&t.push(u("meta",{name:"og:image",content:a})),a&&typeof a=="object"){let s=a.type||"image",c=a?{url:a?.url,secure_url:a?.url,type:Xe(a.url),width:a?.width,height:a?.height,alt:a?.altText}:{};for(let i of Object.keys(c))c[i]&&(r=c[i],t.push(u("meta",{property:`og:${s}:${i}`,content:r},c.url)));}break}case"jsonLd":{let r=Q(e.jsonLd),o=0;for(let a of r){if(typeof a!="object")continue;let s=u("script",{type:"application/ld+json",children:JSON.stringify(a)},`json-ld-${a?.["@type"]||a?.name||o++}`);t.push(s);}break}case"alternates":{let r=Q(e.alternates);for(let o of r){if(!o)continue;let{language:a,url:s,default:c}=o,i=a?`${a}${c?"-default":""}`:void 0;t.push(u("link",{rel:"alternate",hrefLang:i,href:s}));}break}case"robots":{if(!e.robots)break;let{maxImagePreview:r,maxSnippet:o,maxVideoPreview:a,noArchive:s,noFollow:c,noImageIndex:i,noIndex:l,noSnippet:f,noTranslate:d,unavailableAfter:h}=e.robots,m=[s&&"noarchive",i&&"noimageindex",f&&"nosnippet",d&&"notranslate",r&&`max-image-preview:${r}`,o&&`max-snippet:${o}`,a&&`max-video-preview:${a}`,h&&`unavailable_after:${h}`],C=(l?"noindex":"index")+","+(c?"nofollow":"follow");for(let p of m)p&&(C+=`,${p}`);t.push(u("meta",{name:"robots",content:C}));break}}return t.flat().sort((n,r)=>n.key.localeCompare(r.key))}function u(e,t,n){let r={tag:e,props:{},key:""};return e==="title"?(r.children=t.title,r.key=K(r),r):e==="script"?(r.children=typeof t.children=="string"?t.children:"",r.key=K(r,n),delete t.children,r.props=t,r):(r.props=t,Object.keys(r.props).forEach(o=>!r.props[o]&&delete r.props[o]),r.key=K(r,n),r)}function K(e,t){let{tag:n,props:r}=e;if(n==="title")return "0-title";if(n==="meta"){let o=r.content===t&&typeof r.property=="string"&&!r.property.endsWith("secure_url")&&"0";return [n,...[t,o],r.property||r.name].filter(s=>s).join("-")}return n==="link"?[n,r.rel,r.hrefLang||r.media].filter(a=>a).join("-").replace(/\s+/g,"-"):n==="script"?`${n}-${t}`:`${n}-${r.type}`}function ze(e,t){if(!!t)return e?typeof e=="function"?e(t):e.replace("%s",t??""):t}function Xe(e){switch(e&&e.split(".").pop()){case"svg":return "image/svg+xml";case"png":return "image/png";case"gif":return "image/gif";case"swf":return "application/x-shockwave-flash";case"mp3":return "audio/mpeg";case"jpg":case"jpeg":default:return "image/jpeg"}}function Q(e){return Array.isArray(e)?e:[e]}function I(e,t){try{return e.validate(t)}catch(n){return console.warn(n.message),t}}var it=react.lazy(()=>Promise.resolve().then(()=>(ye(),me)));function ct({debug:e}){let t=react$1.useMatches(),n=react$1.useLocation(),r=react.useMemo(()=>t.flatMap(s=>{let{handle:c,...i}=s,l={...i,...n},f=c?.seo,d=i?.data?.seo;return !f&&!d?[]:f?O(c.seo,l):[d]}).reduce((s,c)=>{Object.keys(c).forEach(l=>!c[l]&&delete c[l]);let{jsonLd:i}=c;return i?s?.jsonLd?Array.isArray(i)?{...s,...c,jsonLd:[...s.jsonLd,...i]}:{...s,...c,jsonLd:[...s.jsonLd,i]}:{...s,...c,jsonLd:[i]}:{...s,...c}},{}),[t,n]),{html:o,loggerMarkup:a}=react.useMemo(()=>{let s=fe(r),c=s.map(l=>l.tag==="script"?react.createElement(l.tag,{...l.props,key:l.key,dangerouslySetInnerHTML:{__html:l.children}}):react.createElement(l.tag,{...l.props,key:l.key},l.children)),i=react.createElement(react.Suspense,{fallback:null},react.createElement(it,{headTags:s}));return {html:c,loggerMarkup:i}},[r]);return react.createElement(react.Fragment,null,o,e&&a)}function O(e,...t){if(e instanceof Function)return O(e(...t),...t);let n={};return Array.isArray(e)?(n=e.reduce((r,o)=>[...r,O(o)],[]),n):e instanceof Object?(Object.entries(e).forEach(([o,a])=>{n[o]=O(a,...t);}),n):e}
73
+ `,{status:200,headers:{"content-type":"text/html"}})};var S="Error in SEO input: ",E={title:{validate:e=>{if(typeof e!="string")throw new Error(S.concat("`title` should be a string"));if(typeof e=="string"&&e.length>120)throw new Error(S.concat("`title` should not be longer than 120 characters"));return e}},description:{validate:e=>{if(typeof e!="string")throw new Error(S.concat("`description` should be a string"));if(typeof e=="string"&&e.length>155)throw new Error(S.concat("`description` should not be longer than 155 characters"));return e}},url:{validate:e=>{if(typeof e!="string")throw new Error(S.concat("`url` should be a string"));if(typeof e=="string"&&!e.startsWith("http"))throw new Error(S.concat("`url` should be a valid URL"));return e}},handle:{validate:e=>{if(typeof e!="string")throw new Error(S.concat("`handle` should be a string"));if(typeof e=="string"&&!e.startsWith("@"))throw new Error(S.concat("`handle` should start with `@`"));return e}}};function he(e){let t=[];for(let n of Object.keys(e))switch(n){case"title":{let r=O(E.title,e.title),o=tt(e?.titleTemplate,r);if(!o)break;t.push(d("title",{title:o}),d("meta",{property:"og:title",content:o}),d("meta",{name:"twitter:title",content:o}));break}case"description":{let r=O(E.description,e.description);if(!r)break;t.push(d("meta",{name:"description",content:r}),d("meta",{property:"og:description",content:r}),d("meta",{name:"twitter:description",content:r}));break}case"url":{let r=O(E.url,e.url);if(!r)break;t.push(d("link",{rel:"canonical",href:r}),d("meta",{property:"og:url",content:r}));break}case"handle":{let r=O(E.handle,e.handle);if(!r)break;t.push(d("meta",{name:"twitter:site",content:r}),d("meta",{name:"twitter:creator",content:r}));break}case"media":{let r,o=J(e.media);for(let a of o)if(typeof a=="string"&&t.push(d("meta",{name:"og:image",content:a})),a&&typeof a=="object"){let s=a.type||"image",i=a?{url:a?.url,secure_url:a?.url,type:rt(a.url),width:a?.width,height:a?.height,alt:a?.altText}:{};for(let c of Object.keys(i))i[c]&&(r=i[c],t.push(d("meta",{property:`og:${s}:${c}`,content:r},i.url)));}break}case"jsonLd":{let r=J(e.jsonLd),o=0;for(let a of r){if(typeof a!="object")continue;let s=d("script",{type:"application/ld+json",children:JSON.stringify(a)},`json-ld-${a?.["@type"]||a?.name||o++}`);t.push(s);}break}case"alternates":{let r=J(e.alternates);for(let o of r){if(!o)continue;let{language:a,url:s,default:i}=o,c=a?`${a}${i?"-default":""}`:void 0;t.push(d("link",{rel:"alternate",hrefLang:c,href:s}));}break}case"robots":{if(!e.robots)break;let{maxImagePreview:r,maxSnippet:o,maxVideoPreview:a,noArchive:s,noFollow:i,noImageIndex:c,noIndex:l,noSnippet:p,noTranslate:f,unavailableAfter:g}=e.robots,b=[s&&"noarchive",c&&"noimageindex",p&&"nosnippet",f&&"notranslate",r&&`max-image-preview:${r}`,o&&`max-snippet:${o}`,a&&`max-video-preview:${a}`,g&&`unavailable_after:${g}`],h=(l?"noindex":"index")+","+(i?"nofollow":"follow");for(let m of b)m&&(h+=`,${m}`);t.push(d("meta",{name:"robots",content:h}));break}}return t.flat().sort((n,r)=>n.key.localeCompare(r.key))}function d(e,t,n){let r={tag:e,props:{},key:""};return e==="title"?(r.children=t.title,r.key=K(r),r):e==="script"?(r.children=typeof t.children=="string"?t.children:"",r.key=K(r,n),delete t.children,r.props=t,r):(r.props=t,Object.keys(r.props).forEach(o=>!r.props[o]&&delete r.props[o]),r.key=K(r,n),r)}function K(e,t){let{tag:n,props:r}=e;if(n==="title")return "0-title";if(n==="meta"){let o=r.content===t&&typeof r.property=="string"&&!r.property.endsWith("secure_url")&&"0";return [n,...[t,o],r.property||r.name].filter(s=>s).join("-")}return n==="link"?[n,r.rel,r.hrefLang||r.media].filter(a=>a).join("-").replace(/\s+/g,"-"):n==="script"?`${n}-${t}`:`${n}-${r.type}`}function tt(e,t){if(!!t)return e?typeof e=="function"?e(t):e.replace("%s",t??""):t}function rt(e){switch(e&&e.split(".").pop()){case"svg":return "image/svg+xml";case"png":return "image/png";case"gif":return "image/gif";case"swf":return "application/x-shockwave-flash";case"mp3":return "audio/mpeg";case"jpg":case"jpeg":default:return "image/jpeg"}}function J(e){return Array.isArray(e)?e:[e]}function O(e,t){try{return e.validate(t)}catch(n){return console.warn(n.message),t}}var ut=react.lazy(()=>Promise.resolve().then(()=>(Ce(),Se)));function gt({debug:e}){let t=react$1.useMatches(),n=react$1.useLocation(),r=react.useMemo(()=>t.flatMap(s=>{let{handle:i,...c}=s,l={...c,...n},p=i?.seo,f=c?.data?.seo;return !p&&!f?[]:p?A(i.seo,l):[f]}).reduce((s,i)=>{Object.keys(i).forEach(l=>!i[l]&&delete i[l]);let{jsonLd:c}=i;return c?s?.jsonLd?Array.isArray(c)?{...s,...i,jsonLd:[...s.jsonLd,...c]}:{...s,...i,jsonLd:[...s.jsonLd,c]}:{...s,...i,jsonLd:[c]}:{...s,...i}},{}),[t,n]),{html:o,loggerMarkup:a}=react.useMemo(()=>{let s=he(r),i=s.map(l=>l.tag==="script"?react.createElement(l.tag,{...l.props,key:l.key,dangerouslySetInnerHTML:{__html:l.children}}):react.createElement(l.tag,{...l.props,key:l.key},l.children)),c=react.createElement(react.Suspense,{fallback:null},react.createElement(ut,{headTags:s}));return {html:i,loggerMarkup:c}},[r]);return react.createElement(react.Fragment,null,o,e&&a)}function A(e,...t){if(e instanceof Function)return A(e(...t),...t);let n={};return Array.isArray(e)?(n=e.reduce((r,o)=>[...r,A(o)],[]),n):e instanceof Object?(Object.entries(e).forEach(([o,a])=>{n[o]=A(a,...t);}),n):e}function ht({connection:e,children:t=()=>(console.warn("<Pagination> requires children to work properly"),null)}){let r=react$1.useNavigation().state==="loading",{endCursor:o,hasNextPage:a,hasPreviousPage:s,nextPageUrl:i,nodes:c,previousPageUrl:l,startCursor:p}=yt(e),f=react.useMemo(()=>({pageInfo:{endCursor:o,hasPreviousPage:s,startCursor:p},nodes:c}),[o,s,p,c]),g=react.useMemo(()=>function(m){return a?react.createElement(react$1.Link,{preventScrollReset:!0,...m,to:i,state:f,replace:!0}):null},[a,i]),b=react.useMemo(()=>function(m){return s?react.createElement(react$1.Link,{preventScrollReset:!0,...m,to:l,state:f,replace:!0}):null},[s,l]);return t({state:f,hasNextPage:a,hasPreviousPage:s,isLoading:r,nextPageUrl:i,nodes:c,previousPageUrl:l,NextLink:g,PreviousLink:b})}function yt(e){let{state:t,search:n}=react$1.useLocation(),a=new URLSearchParams(n).get("direction")==="previous",s=react.useMemo(()=>!t||!t?.nodes?hydrogenReact.flattenConnection(e):a?[...hydrogenReact.flattenConnection(e),...t.nodes]:[...t.nodes,...hydrogenReact.flattenConnection(e)],[t,e]),i=react.useMemo(()=>{let p=t?.pageInfo?.startCursor===void 0?e.pageInfo.startCursor:t.pageInfo.startCursor,f=t?.pageInfo?.endCursor===void 0?e.pageInfo.endCursor:t.pageInfo.endCursor;t?.nodes&&(a?p=e.pageInfo.startCursor:f=e.pageInfo.endCursor);let g=t?.pageInfo?.hasPreviousPage===void 0?e.pageInfo.hasPreviousPage:t.pageInfo.hasPreviousPage,b=t?.pageInfo?.hasNextPage===void 0?e.pageInfo.hasNextPage:t.pageInfo.hasNextPage;return {startCursor:p,endCursor:f,hasPreviousPage:g,hasNextPage:b}},[a,t,e.pageInfo.hasNextPage,e.pageInfo.hasPreviousPage,e.pageInfo.startCursor,e.pageInfo.endCursor]),c=react.useMemo(()=>{let p=new URLSearchParams(n);return p.set("direction","previous"),i.startCursor&&p.set("cursor",i.startCursor),`?${p.toString()}`},[n,i.startCursor]),l=react.useMemo(()=>{let p=new URLSearchParams(n);return p.set("direction","next"),i.endCursor&&p.set("cursor",i.endCursor),`?${p.toString()}`},[n,i.endCursor]);return {...i,previousPageUrl:c,nextPageUrl:l,nodes:s}}function mt(e,t={pageBy:20}){if(!(e instanceof Request))throw new Error("getPaginationVariables must be called with the Request object passed to your loader function");let{pageBy:n}=t,r=new URLSearchParams(new URL(e.url).search),o=r.get("cursor")??void 0;return (r.get("direction")==="previous"?"previous":"next")==="previous"?{last:n,startCursor:o??null}:{first:n,endCursor:o??null}}
74
74
 
75
75
  Object.defineProperty(exports, 'AnalyticsEventName', {
76
76
  enumerable: true,
@@ -128,6 +128,10 @@ Object.defineProperty(exports, 'getShopifyCookies', {
128
128
  enumerable: true,
129
129
  get: function () { return hydrogenReact.getShopifyCookies; }
130
130
  });
131
+ Object.defineProperty(exports, 'parseGid', {
132
+ enumerable: true,
133
+ get: function () { return hydrogenReact.parseGid; }
134
+ });
131
135
  Object.defineProperty(exports, 'parseMetafield', {
132
136
  enumerable: true,
133
137
  get: function () { return hydrogenReact.parseMetafield; }
@@ -148,17 +152,19 @@ Object.defineProperty(exports, 'useShopifyCookies', {
148
152
  enumerable: true,
149
153
  get: function () { return hydrogenReact.useShopifyCookies; }
150
154
  });
151
- exports.CacheCustom = _;
152
- exports.CacheLong = H;
153
- exports.CacheNone = j;
154
- exports.CacheShort = g;
155
- exports.InMemoryCache = G;
156
- exports.Seo = ct;
157
- exports.createStorefrontClient = _t;
158
- exports.createWithCache_unstable = $t;
159
- exports.generateCacheControlHeader = b;
160
- exports.graphiqlLoader = Ye;
161
- exports.isStorefrontApiError = Fe;
162
- exports.storefrontRedirect = Qe;
155
+ exports.CacheCustom = G;
156
+ exports.CacheLong = j;
157
+ exports.CacheNone = H;
158
+ exports.CacheShort = y;
159
+ exports.InMemoryCache = B;
160
+ exports.Pagination__unstable = ht;
161
+ exports.Seo = gt;
162
+ exports.createStorefrontClient = Wt;
163
+ exports.createWithCache_unstable = zt;
164
+ exports.generateCacheControlHeader = w;
165
+ exports.getPaginationVariables__unstable = mt;
166
+ exports.graphiqlLoader = et;
167
+ exports.isStorefrontApiError = We;
168
+ exports.storefrontRedirect = Ye;
163
169
  //# sourceMappingURL=out.js.map
164
170
  //# sourceMappingURL=index.cjs.map