mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
Add missing timers.promises (#13834)
Co-authored-by: Jarred-Sumner <Jarred-Sumner@users.noreply.github.com>
This commit is contained in:
@@ -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'");
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user