()
| 38 | let audioNapiPromise: Promise<AudioNapi> | null = null |
| 39 | |
| 40 | function loadAudioNapi(): Promise<AudioNapi> { |
| 41 | audioNapiPromise ??= (async () => { |
| 42 | const t0 = Date.now() |
| 43 | try { |
| 44 | const mod = (await import('audio-capture-napi')) as AudioNapi |
| 45 | // vendor/audio-capture-src/index.ts defers require(...node) until the |
| 46 | // first function call — trigger it here so timing reflects real cost. |
| 47 | mod.isNativeAudioAvailable() |
| 48 | audioNapi = mod |
| 49 | logForDebugging( |
| 50 | `[voice] audio-capture-napi loaded in ${Date.now() - t0}ms`, |
| 51 | ) |
| 52 | return mod |
| 53 | } catch (error) { |
| 54 | const message = |
| 55 | error instanceof Error ? error.message : 'unknown load error' |
| 56 | audioNapi = unavailableAudioNapi |
| 57 | logForDebugging( |
| 58 | `[voice] audio-capture-napi unavailable, falling back: ${message}`, |
| 59 | ) |
| 60 | return unavailableAudioNapi |
| 61 | } |
| 62 | })() |
| 63 | return audioNapiPromise |
| 64 | } |
| 65 | |
| 66 | // ─── Constants ─────────────────────────────────────────────────────── |
| 67 |
no test coverage detected