| 524 | |
| 525 | // Waits indefinitely for the script so pair it with Promise.race. |
| 526 | async function waitForScript( |
| 527 | model: DevTools.DebuggerModel, |
| 528 | scriptId: Protocol.Runtime.ScriptId, |
| 529 | signal: AbortSignal, |
| 530 | ) { |
| 531 | while (true) { |
| 532 | if (signal.aborted) { |
| 533 | throw signal.reason; |
| 534 | } |
| 535 | |
| 536 | const script = model.scriptForId(scriptId); |
| 537 | if (script) { |
| 538 | return script; |
| 539 | } |
| 540 | |
| 541 | await new Promise((resolve, reject) => { |
| 542 | signal.addEventListener('abort', () => reject(signal.reason), { |
| 543 | once: true, |
| 544 | }); |
| 545 | void model |
| 546 | .once( |
| 547 | 'ParsedScriptSource' as Parameters<DevTools.DebuggerModel['once']>[0], |
| 548 | ) |
| 549 | .then(resolve); |
| 550 | }); |
| 551 | } |
| 552 | } |