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