25 lines
690 B
TypeScript
25 lines
690 B
TypeScript
import type { ClockPort } from "../../application/ports/clock-port.ts";
|
|
|
|
export const systemClock: ClockPort = Object.freeze({
|
|
now: () => Date.now(),
|
|
sleep(milliseconds, signal) {
|
|
return new Promise((resolve, reject) => {
|
|
if (signal?.aborted) {
|
|
reject(signal.reason);
|
|
return;
|
|
}
|
|
|
|
const timer = setTimeout(() => {
|
|
signal?.removeEventListener("abort", onAbort);
|
|
resolve();
|
|
}, milliseconds);
|
|
const onAbort = () => {
|
|
clearTimeout(timer);
|
|
signal?.removeEventListener("abort", onAbort);
|
|
reject(signal?.reason);
|
|
};
|
|
signal?.addEventListener("abort", onAbort, { once: true });
|
|
});
|
|
},
|
|
});
|