From c7b874447f4d4a2223e718f1cf6c7d4b09537eab Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Mon, 9 Sep 2024 17:17:52 -0700 Subject: [PATCH] Add missing timers.promises (#13834) Co-authored-by: Jarred-Sumner --- src/js/node/timers.ts | 32 ++++++++++++++++++++++++- test/js/node/timers/node-timers.test.ts | 7 +++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/src/js/node/timers.ts b/src/js/node/timers.ts index 7bbe39b921..91f8eb1609 100644 --- a/src/js/node/timers.ts +++ b/src/js/node/timers.ts @@ -1,4 +1,4 @@ -// Hardcoded module "node:timers" +const { throwNotImplemented } = require("internal/shared"); const { defineCustomPromisify } = require("internal/promisify"); // Lazily load node:timers/promises promisified functions onto the global timers. @@ -26,6 +26,7 @@ const { defineCustomPromisify } = require("internal/promisify"); }); } } +var timersPromisesValue; export default { setTimeout, @@ -34,4 +35,33 @@ export default { setImmediate, clearInterval, clearImmediate, + get promises() { + return (timersPromisesValue ??= require("node:timers/promises")); + }, + set promises(value) { + timersPromisesValue = value; + }, + active(timer) { + if ($isCallable(timer?.refresh)) { + timer.refresh(); + } else { + throwNotImplemented("'timers.active'"); + } + }, + unenroll(timer) { + if ($isCallable(timer?.refresh)) { + clearTimeout(timer); + return; + } + + throwNotImplemented("'timers.unenroll'"); + }, + enroll(timer, msecs) { + if ($isCallable(timer?.refresh)) { + timer.refresh(); + return; + } + + throwNotImplemented("'timers.enroll'"); + }, }; diff --git a/test/js/node/timers/node-timers.test.ts b/test/js/node/timers/node-timers.test.ts index 04623549c6..912365986a 100644 --- a/test/js/node/timers/node-timers.test.ts +++ b/test/js/node/timers/node-timers.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it, test } from "bun:test"; -import { clearInterval, clearTimeout, setInterval, setTimeout } from "node:timers"; +import { clearInterval, clearTimeout, promises, setInterval, setTimeout } from "node:timers"; import { promisify } from "util"; for (const fn of [setTimeout, setInterval]) { @@ -52,3 +52,8 @@ it("node.js util.promisify(setImmediate) works", async () => { }); }).toThrow("TestPassed"); }); + +it("timers.promises === timers/promises", async () => { + const ns = await import("node:timers/promises"); + expect(ns.default).toBe(promises); +});