mirror of
https://github.com/oven-sh/bun
synced 2026-02-16 22:01:47 +00:00
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> Co-authored-by: nektro <nektro@users.noreply.github.com> Co-authored-by: cirospaciari <ciro.spaciari@gmail.com>
28 lines
584 B
JavaScript
28 lines
584 B
JavaScript
"use strict";
|
|
|
|
const assert = require("assert");
|
|
const kLimit = Symbol("limit");
|
|
const kCallback = Symbol("callback");
|
|
const common = require("./");
|
|
|
|
class Countdown {
|
|
constructor(limit, cb) {
|
|
assert.strictEqual(typeof limit, "number");
|
|
assert.strictEqual(typeof cb, "function");
|
|
this[kLimit] = limit;
|
|
this[kCallback] = common.mustCall(cb);
|
|
}
|
|
|
|
dec() {
|
|
assert(this[kLimit] > 0, "Countdown expired");
|
|
if (--this[kLimit] === 0) this[kCallback]();
|
|
return this[kLimit];
|
|
}
|
|
|
|
get remaining() {
|
|
return this[kLimit];
|
|
}
|
|
}
|
|
|
|
module.exports = Countdown;
|