// @ts-nocheck class Semaphore { constructor(count) { this.count = count this.waiting = [] } acquire() { return new Promise(resolve => { if (this.count > 0) { this.count-- resolve() } else { this.waiting.push(resolve) } }) } release() { if (this.waiting.length > 0) { const resolve = this.waiting.shift() resolve() } else { this.count++ } } } let semaphore = new Semaphore(1) let reader = new FileReader() export const fileToBase64 = (file) => new Promise(async (resolve, reject) => { if (!reader) { reader = new FileReader() } await semaphore.acquire() reader.readAsDataURL(file) reader.onload = () => { const dataUrl = reader.result if (typeof dataUrl === "string") { const base64String = dataUrl.split(',')[1] reader.onload = null reader.onerror = null resolve(base64String) } else { reader.onload = null reader.onerror = null reject(new Error('Invalid data URL')) } semaphore.release() } reader.onerror = (error) => { reader.onload = null reader.onerror = null reject(error) semaphore.release() } })