(status: "load" | "error" | "timeout")
| 150 | const startedAt = Date.now(); |
| 151 | let timeoutId: number | null = null; |
| 152 | const settle = (status: "load" | "error" | "timeout") => { |
| 153 | if (settled) return; |
| 154 | settled = true; |
| 155 | if (timeoutId != null) { |
| 156 | window.clearTimeout(timeoutId); |
| 157 | } |
| 158 | resolve({ |
| 159 | status, |
| 160 | elapsedMs: Math.max(0, Date.now() - startedAt), |
| 161 | }); |
| 162 | }; |
| 163 | scriptEl.addEventListener("load", () => settle("load"), { once: true }); |
| 164 | scriptEl.addEventListener("error", () => settle("error"), { once: true }); |
| 165 | timeoutId = window.setTimeout(() => settle("timeout"), EXTERNAL_SCRIPT_LOAD_TIMEOUT_MS); |
no test coverage detected