Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 'use client' /** * Wait for window.cv to be ready using a Promise. */ export async function waitForCv(timeoutMs: number = 10000): Promise<boolean> { console.log('[waitForCv] waitForCv called') if (typeof window === 'undefined') { console.log('[waitForCv] window is undefined') return false } // Check if already ready const cv = (window as unknown as { cv?: { imread?: unknown } }).cv if (cv && typeof cv.imread === 'function') { console.log('[waitForCv] already ready') return true } console.log('[waitForCv] not ready, starting to poll') // Poll until ready return new Promise<boolean>((resolve) => { const startTime = Date.now() let checkCount = 0 const check = () => { checkCount++ const cv = (window as unknown as { cv?: { imread?: unknown } }).cv const ready = !!(cv && typeof cv.imread === 'function') if (checkCount <= 5 || checkCount % 20 === 0) { console.log(`[waitForCv] check #${checkCount}, ready=${ready}`) } if (ready) { console.log(`[waitForCv] ready after ${checkCount} checks`) resolve(true) } else if (Date.now() - startTime > timeoutMs) { console.log('[waitForCv] timed out') resolve(false) } else { setTimeout(check, 100) } } check() }) } |