aboutsummaryrefslogtreecommitdiff
path: root/src/util/time.ts
diff options
context:
space:
mode:
authoramankumarsingh77 <amankumarsingh7702@gmal.com>2026-05-02 15:31:01 +0530
committeramankumarsingh77 <amankumarsingh7702@gmal.com>2026-05-02 15:31:01 +0530
commit310d0a7324477079022b178f1a83161e9e61fb1d (patch)
tree69e7bbad57cdffe8e8e174fbd6b84fa88388a7fe /src/util/time.ts
parent6759b6fd0ab435aa1e9fdb4591bd828b7a861a33 (diff)
feat(util): add result, time, and paths primitives for v0.3 rewrite
Diffstat (limited to 'src/util/time.ts')
-rw-r--r--src/util/time.ts29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/util/time.ts b/src/util/time.ts
new file mode 100644
index 0000000..73990ad
--- /dev/null
+++ b/src/util/time.ts
@@ -0,0 +1,29 @@
+export const sleep = (ms: number, signal?: AbortSignal): Promise<void> =>
+ new Promise((resolve, reject) => {
+ if (signal?.aborted) {
+ reject(new Error("aborted"));
+ return;
+ }
+ const timer = setTimeout(() => {
+ signal?.removeEventListener("abort", onAbort);
+ resolve();
+ }, ms);
+ const onAbort = (): void => {
+ clearTimeout(timer);
+ reject(new Error("aborted"));
+ };
+ signal?.addEventListener("abort", onAbort, { once: true });
+ });
+
+export type Deadline = {
+ readonly remainingMs: () => number;
+ readonly expired: () => boolean;
+};
+
+export const deadline = (totalMs: number): Deadline => {
+ const end = Date.now() + totalMs;
+ return {
+ remainingMs: () => Math.max(0, end - Date.now()),
+ expired: () => Date.now() >= end,
+ };
+};