| 467 | |
| 468 | // Waits indefinitely for the script so pair it with Promise.race. |
| 469 | async function waitForScript( |
| 470 | model: DevTools.DebuggerModel, |
| 471 | scriptId: Protocol.Runtime.ScriptId, |
| 472 | signal: AbortSignal, |
| 473 | ) { |
| 474 | while (true) { |
| 475 | if (signal.aborted) { |
| 476 | throw signal.reason; |
| 477 | } |
| 478 | |
| 479 | const script = model.scriptForId(scriptId); |
| 480 | if (script) { |
| 481 | return script; |
| 482 | } |
| 483 | |
| 484 | await new Promise((resolve, reject) => { |
| 485 | signal.addEventListener('abort', () => reject(signal.reason), { |
| 486 | once: true, |
| 487 | }); |
| 488 | void model |
| 489 | .once( |
| 490 | 'ParsedScriptSource' as Parameters<DevTools.DebuggerModel['once']>[0], |
| 491 | ) |
| 492 | .then(resolve); |
| 493 | }); |
| 494 | } |
| 495 | } |