| 204 | type CleanupResult = { type: "ok" } | { type: "error"; error: unknown } | { type: "timeout" } |
| 205 | |
| 206 | function runCleanup(fn: () => unknown, ms: number): Promise<CleanupResult> { |
| 207 | return new Promise((resolve) => { |
| 208 | const timer = setTimeout(() => { |
| 209 | resolve({ type: "timeout" }) |
| 210 | }, ms) |
| 211 | |
| 212 | Promise.resolve() |
| 213 | .then(fn) |
| 214 | .then( |
| 215 | () => { |
| 216 | resolve({ type: "ok" }) |
| 217 | }, |
| 218 | (error) => { |
| 219 | resolve({ type: "error", error }) |
| 220 | }, |
| 221 | ) |
| 222 | .finally(() => { |
| 223 | clearTimeout(timer) |
| 224 | }) |
| 225 | }) |
| 226 | } |
| 227 | |
| 228 | function isTheme(value: unknown) { |
| 229 | if (!isRecord(value)) return false |