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); +});