diff options
| author | 2023-02-22 19:07:27 -0800 | |
|---|---|---|
| committer | 2023-02-22 19:07:27 -0800 | |
| commit | 2a1558e4d6fc2e7abbb9a6f4abc3cc4bb2d49c59 (patch) | |
| tree | 62c4562c4a86b90e8456657ebecd2a416d06721d /src/bun.js/node_timers.exports.js | |
| parent | 0911bd3af2aceca487f3159f20c0400fb45bdc92 (diff) | |
| download | bun-2a1558e4d6fc2e7abbb9a6f4abc3cc4bb2d49c59.tar.gz bun-2a1558e4d6fc2e7abbb9a6f4abc3cc4bb2d49c59.tar.zst bun-2a1558e4d6fc2e7abbb9a6f4abc3cc4bb2d49c59.zip | |
[breaking] Return Node.js `Timeout` objects in `setTimeout`, `setInterval`, and `setImmediate`
Fixes #2129 #880
Diffstat (limited to 'src/bun.js/node_timers.exports.js')
| -rw-r--r-- | src/bun.js/node_timers.exports.js | 105 |
1 files changed, 1 insertions, 104 deletions
diff --git a/src/bun.js/node_timers.exports.js b/src/bun.js/node_timers.exports.js index d1f3e81e7..52dec5baa 100644 --- a/src/bun.js/node_timers.exports.js +++ b/src/bun.js/node_timers.exports.js @@ -1,110 +1,7 @@ // This implementation isn't 100% correct // Ref/unref does not impact whether the process is kept alive -var clear = Symbol("clear"); -class Timeout { - #id; - #refCount = 1; - #clearFunction; - - constructor(id, clearFunction) { - this.#id = id; - this.#refCount = 1; - this.#clearFunction = clearFunction; - } - - ref() { - this.#refCount += 1; - } - - hasRef() { - return this.#refCount > 0; - } - - [clear]() { - this.#refCount = 0; - var clearFunction = this.#clearFunction; - if (clearFunction) { - this.#clearFunction = null; - clearFunction(this.#id); - } - } - - unref() { - this.#refCount -= 1; - var clearFunction = this.#clearFunction; - if (clearFunction && this.#refCount === 0) { - this.#clearFunction = null; - clearFunction(this.#id); - } - } -} -var { - setTimeout: setTimeout_, - setImmediate: setImmediate_, - clearTimeout: clearTimeout_, - setInterval: setInterval_, - clearInterval: clearInterval_, -} = globalThis; - -export function setImmediate(callback, ...args) { - if (typeof callback !== "function") { - throw new TypeError("callback must be a function"); - } - var cleared = false; - function clearImmediate(id) { - cleared = true; - } - - const wrapped = function (callback, args) { - if (cleared) { - return; - } - cleared = true; - try { - callback(...args); - } catch (e) { - reportError(e); - } finally { - } - }; - - return new Timeout(setImmediate_(wrapped, callback, args), clearImmediate); -} - -export function setTimeout(callback, delay, ...args) { - if (typeof callback !== "function") { - throw new TypeError("callback must be a function"); - } - - return new Timeout(setTimeout_.apply(globalThis, arguments), clearTimeout_); -} - -export function setInterval(callback, delay, ...args) { - if (typeof callback !== "function") { - throw new TypeError("callback must be a function"); - } - - return new Timeout(setInterval_.apply(globalThis, arguments), clearInterval_); -} - -export function clearTimeout(id) { - if (id && typeof id === "object" && id[clear]) { - id[clear](); - return; - } - - clearTimeout_(id); -} - -export function clearInterval(id) { - if (id && typeof id === "object" && id[clear]) { - id[clear](); - return; - } - - clearInterval_(id); -} +export var { setTimeout, clearTimeout, setInterval, setImmediate, clearInterval, clearImmediate } = globalThis; export default { setInterval, |
