File Explorer

/proc/self/root/proc/1/task/1/root/node24/lib/node_modules/npm/node_modules/proggy/lib

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

client.js2.5 KB · 115 lines
const EE = require('events')const onProgress = Symbol('onProgress')const bars = Symbol('bars')const listener = Symbol('listener')const normData = Symbol('normData')class Client extends EE {  constructor ({ normalize = false, stopOnDone = false } = {}) {    super()    this.normalize = !!normalize    this.stopOnDone = !!stopOnDone    this[bars] = new Map()    this[listener] = null  }   get size () {    return this[bars].size  }   get listening () {    return !!this[listener]  }   addListener (...args) {    return this.on(...args)  }   on (ev, ...args) {    if (ev === 'progress' && !this[listener]) {      this.start()    }    return super.on(ev, ...args)  }   off (ev, ...args) {    return this.removeListener(ev, ...args)  }   removeListener (ev, ...args) {    const ret = super.removeListener(ev, ...args)    if (ev === 'progress' && this.listeners(ev).length === 0) {      this.stop()    }    return ret  }   stop () {    if (this[listener]) {      process.removeListener('progress', this[listener])      this[listener] = null    }  }   start () {    if (!this[listener]) {      this[listener] = (...args) => this[onProgress](...args)      process.on('progress', this[listener])    }  }   [onProgress] (key, data) {    data = this[normData](key, data)    if (!this[bars].has(key)) {      this.emit('bar', key, data)    }    this[bars].set(key, data)    this.emit('progress', key, data)    if (data.done) {      this[bars].delete(key)      this.emit('barDone', key, data)      if (this.size === 0) {        if (this.stopOnDone) {          this.stop()        }        this.emit('done')      }    }  }   [normData] (key, data) {    const actualValue = data.value    const actualTotal = data.total    let value = actualValue    let total = actualTotal    const done = data.done || value >= total    if (this.normalize) {      const bar = this[bars].get(key)      total = 100      if (done) {        value = 100      } else {        // show value as a portion of 100        const pct = 100 * actualValue / actualTotal        if (bar) {          // don't ever go backwards, and don't stand still          // move at least 1% of the remaining value if it wouldn't move.          value = (pct > bar.value) ? pct            : (100 - bar.value) / 100 + bar.value        }      }    }    // include the key    return {      ...data,      key,      name: data.name || key,      value,      total,      actualValue,      actualTotal,      done,    }  }}module.exports = Client