feat: define clean architecture layers and ports
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* @typedef {{
|
||||
* now(): number,
|
||||
* sleep(milliseconds: number, signal?: AbortSignal): Promise<void>
|
||||
* }} ClockPort
|
||||
*/
|
||||
|
||||
export const systemClock = Object.freeze({
|
||||
now: () => Date.now(),
|
||||
sleep(milliseconds, signal) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (signal?.aborted) {
|
||||
reject(signal.reason);
|
||||
return;
|
||||
}
|
||||
|
||||
const timer = setTimeout(resolve, milliseconds);
|
||||
signal?.addEventListener(
|
||||
"abort",
|
||||
() => {
|
||||
clearTimeout(timer);
|
||||
reject(signal.reason);
|
||||
},
|
||||
{ once: true },
|
||||
);
|
||||
});
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user