|
Server : LiteSpeed System : Linux barito.iixcp.rumahweb.net 5.14.0-611.49.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Apr 21 16:39:08 EDT 2026 x86_64 User : elvh3918 ( 1528) PHP Version : 8.2.31 Disable Function : mail Directory : /opt/alt/alt-nodejs20/root/lib/node_modules/npm/node_modules/proggy/lib/ |
// The tracker class is intentionally as naive as possible. it is just
// an ergonomic wrapper around process.emit('progress', ...)
const EE = require('events')
class Tracker extends EE {
constructor (name, key, total) {
super()
if (!name) {
throw new Error('proggy: Tracker needs a name')
}
if (typeof key === 'number' && !total) {
total = key
key = null
}
if (!total) {
total = 100
}
if (!key) {
key = name
}
this.done = false
this.name = name
this.key = key
this.value = 0
this.total = total
}
finish (metadata = {}) {
this.update(this.total, this.total, metadata)
}
update (value, total, metadata) {
if (!metadata) {
if (total && typeof total === 'object') {
metadata = total
} else {
metadata = {}
}
}
if (typeof total !== 'number') {
total = this.total
}
if (this.done) {
const msg = `proggy: updating completed tracker: ${JSON.stringify(this.key)}`
throw new Error(msg)
}
this.value = value
this.total = total
const done = this.value >= this.total
process.emit('progress', this.key, {
...metadata,
name: this.name,
key: this.key,
value,
total,
done,
})
if (done) {
this.done = true
this.emit('done')
}
}
}
module.exports = Tracker