| 455 | |
| 456 | // Waits indefinitely for the script so pair it with Promise.race. |
| 457 | async function waitForScript( |
| 458 | model: DevTools.DebuggerModel, |
| 459 | scriptId: Protocol.Runtime.ScriptId, |
| 460 | signal: AbortSignal, |
| 461 | ) { |
| 462 | while (true) { |
| 463 | if (signal.aborted) { |
| 464 | throw signal.reason; |
| 465 | } |
| 466 | |
| 467 | const script = model.scriptForId(scriptId); |
| 468 | if (script) { |
| 469 | return script; |
| 470 | } |
| 471 | |
| 472 | await new Promise((resolve, reject) => { |
| 473 | signal.addEventListener('abort', () => reject(signal.reason), { |
| 474 | once: true, |
| 475 | }); |
| 476 | void model |
| 477 | .once( |
| 478 | 'ParsedScriptSource' as Parameters<DevTools.DebuggerModel['once']>[0], |
| 479 | ) |
| 480 | .then(resolve); |
| 481 | }); |
| 482 | } |
| 483 | } |