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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | 'use client' /** * Bare minimum loader - NO imports at all, completely self-contained. */ function isOpenCVReady(): boolean { if (typeof window === 'undefined') return false const cv = (window as unknown as { cv?: { imread?: unknown } }).cv return !!(cv && typeof cv.imread === 'function') } // Using 'unknown' instead of importing CV type export async function loadOpenCVBare(): Promise<unknown> { // If already loaded on window, return it if (isOpenCVReady()) { return (window as unknown as { cv: unknown }).cv } // Load the script if (typeof window !== 'undefined') { const existingScript = document.querySelector('script[src="/opencv.js"]') if (!existingScript) { await new Promise<void>((resolve, reject) => { const script = document.createElement('script') script.src = '/opencv.js' script.async = true script.onload = () => { const checkReady = () => { if (isOpenCVReady()) { resolve() } else { const cv = ( window as unknown as { cv?: { onRuntimeInitialized?: () => void } } ).cv if (cv) { const previousCallback = cv.onRuntimeInitialized cv.onRuntimeInitialized = () => { previousCallback?.() resolve() } } else { reject(new Error('OpenCV.js loaded but cv not found')) } } } checkReady() } script.onerror = () => reject(new Error('Failed to load OpenCV.js')) document.head.appendChild(script) }) } else { // Script exists, wait for it to be ready await new Promise<void>((resolve, reject) => { const maxWait = 30000 const startTime = Date.now() const checkReady = () => { if (isOpenCVReady()) { resolve() } else if (Date.now() - startTime > maxWait) { reject(new Error('OpenCV.js loading timed out')) } else { const cv = ( window as unknown as { cv?: { onRuntimeInitialized?: () => void } } ).cv if (cv) { const previousCallback = cv.onRuntimeInitialized cv.onRuntimeInitialized = () => { previousCallback?.() resolve() } } else { setTimeout(checkReady, 100) } } } checkReady() }) } } return (window as unknown as { cv: unknown }).cv } |