| 173 | } |
| 174 | |
| 175 | function setTimer( |
| 176 | callback: (...args: unknown[]) => unknown, |
| 177 | delay = 0, |
| 178 | args: unknown[], |
| 179 | repeat = false, |
| 180 | ): number { |
| 181 | const id: number = timerId.next().value; |
| 182 | delay = Math.max(repeat ? 1 : 0, Math.floor(delay)); |
| 183 | const due: number = now + delay; |
| 184 | let dueNode: DueNode | null = dueTree.find({ due } as DueNode); |
| 185 | if (dueNode === null) { |
| 186 | dueNode = { due, timers: [] }; |
| 187 | dueTree.insert(dueNode); |
| 188 | } |
| 189 | dueNode.timers.push({ |
| 190 | id, |
| 191 | callback, |
| 192 | args, |
| 193 | delay, |
| 194 | due, |
| 195 | repeat, |
| 196 | }); |
| 197 | dueNodes.set(id, dueNode); |
| 198 | return id; |
| 199 | } |
| 200 | |
| 201 | function fakeAbortSignalTimeout(delay: number): AbortSignal { |
| 202 | const aborter = new AbortController(); |