// Planned: Custom worker with transferable objects // Note: This is a simplified example. Production requires error handling, // timeouts, and worker pool management (see Production Considerations section) const worker = new Worker(new URL('./pdf.worker.ts', import.meta.url)); export function parsePdfInWorker(file: File): Promise { return new Promise(async (resolve, reject) => { const buffer = await file.arrayBuffer(); // Set 30-second timeout for parsing const timeout = setTimeout(() => { reject(new Error('PDF parsing timeout - falling back to backend')); }, 30000); // Handle successful parsing worker.onmessage = (e) => { clearTimeout(timeout); if (e.data.error) { reject(new Error(e.data.error)); } else { resolve(e.data.text); } }; // Handle worker errors worker.onerror = (err) => { clearTimeout(timeout); reject(err); }; // Zero-copy transfer ownership to worker // After this line, 'buffer' becomes detached and unusable in main thread worker.postMessage({ buffer }, [buffer]); }); } __ __