import{d as h}from"./_index.DsovQ8IZ.min.js";import{y as n}from"./_scheduler.DOZJZeMb.min.js";const{signal:a,abort:u}=new AbortController;window.addEventListener("beforeunload",()=>{try{u("navigation")}catch{}});class d{constructor(e=5,t=10){this.batchSize=e,this.debounceTime=t,this.processBatch=h(this.processBatch.bind(this),this.debounceTime)}cache=new Map;pendingRequests=new Map;inFlightRequests=new Set;batchQueue=new Set;addRequest(e){return this.cache.has(e)?Promise.resolve(this.cache.get(e)?.cloneNode(!0)):new Promise(t=>{this.inFlightRequests.has(e)?this.addToPendingRequests(e,t):(this.addToPendingRequests(e,t),this.batchQueue.add(e),this.inFlightRequests.add(e),this.processBatch())})}addToPendingRequests(e,t){this.pendingRequests.has(e)||this.pendingRequests.set(e,[]),this.pendingRequests.get(e).push(t)}processBatch(){const e=Array.from(this.batchQueue).slice(0,this.batchSize);this.batchQueue=new Set(Array.from(this.batchQueue).slice(this.batchSize)),e.length!==0&&this.sendBatch(e).finally(()=>{this.batchQueue.size>0&&this.processBatch()})}async sendBatch(e){try{await Promise.allSettled(e.map(async t=>{const s=await fetch(`/products/${t}?view=card-content`,{signal:a});if(!s.ok)throw new Error("Failed to fetch product cards");const i=await s.text(),o=document.createRange().createContextualFragment(i);await n();const r=o.querySelector(`product-card[product-handle="${t}"]`);this.cache.set(t,r),this.resolveProductPromises(t,r),this.inFlightRequests.delete(t)}))}catch(t){console.error("Error fetching product cards:",t),e.forEach(s=>{this.resolveProductPromises(s,null),this.inFlightRequests.delete(s)})}}resolveProductPromises(e,t){const s=this.pendingRequests.get(e);s&&(s.forEach(i=>i(t?.cloneNode(!0))),this.pendingRequests.delete(e))}}const f=new d;export{f as p};