( pdfData: Uint8Array, width: number, height: number, pdfjsUrl: string )
| 131 | } |
| 132 | |
| 133 | function renderInWorker( |
| 134 | pdfData: Uint8Array, |
| 135 | width: number, |
| 136 | height: number, |
| 137 | pdfjsUrl: string |
| 138 | ): Promise<Blob | null> { |
| 139 | return new Promise((resolve) => { |
| 140 | const worker = getWorker(pdfjsUrl) |
| 141 | if (!worker) { |
| 142 | resolve(null) |
| 143 | return |
| 144 | } |
| 145 | |
| 146 | const id = ++_msgId |
| 147 | _pending.set(id, { |
| 148 | resolve, |
| 149 | reject: () => resolve(null), |
| 150 | }) |
| 151 | |
| 152 | // Transfer the buffer to avoid copying |
| 153 | const copy = pdfData.slice() // copy so caller retains original |
| 154 | worker.postMessage({ id, pdfData: copy, width, height, pdfjsUrl }, [copy.buffer]) |
| 155 | |
| 156 | // Timeout: if worker doesn't respond in 15s, give up |
| 157 | setTimeout(() => { |
| 158 | if (_pending.has(id)) { |
| 159 | _pending.delete(id) |
| 160 | resolve(null) |
| 161 | } |
| 162 | }, 15000) |
| 163 | }) |
| 164 | } |
| 165 | |
| 166 | // --------------------------------------------------------------------------- |
| 167 | // Public API |
no test coverage detected