| 10 | let cursor = 0 |
| 11 | |
| 12 | const schedule = () => { |
| 13 | if (running) return |
| 14 | running = Promise.resolve() |
| 15 | .then(async () => { |
| 16 | while (cursor < jobs.length) { |
| 17 | const job = jobs[cursor++]! |
| 18 | if (job.type === "dispose") { |
| 19 | input.dispose(job.key) |
| 20 | continue |
| 21 | } |
| 22 | if (slots.get(job.key) === job) slots.delete(job.key) |
| 23 | const request = job.request |
| 24 | job.request = undefined |
| 25 | if (request) await input.run(request) |
| 26 | } |
| 27 | }) |
| 28 | .finally(() => { |
| 29 | jobs.splice(0, cursor) |
| 30 | cursor = 0 |
| 31 | running = undefined |
| 32 | if (jobs.length > 0) schedule() |
| 33 | }) |
| 34 | } |
| 35 | |
| 36 | return { |
| 37 | highlight(request: T) { |