Add missing timers.promises (#13834)

Co-authored-by: Jarred-Sumner <Jarred-Sumner@users.noreply.github.com>
This commit is contained in:
Jarred Sumner
2024-09-09 17:17:52 -07:00
committed by GitHub
parent 282b92d6e1
commit c7b874447f
2 changed files with 37 additions and 2 deletions

View File

@@ -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'");
},
};

View File

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