Simon Priet e69a613a37 feat: Created a mini nodeJS server with NewMan for testing without PostMan GUI.
This will mimic a run in a CD/CI environment or docker container.
2021-09-08 14:01:19 +02:00

124 lines
3.1 KiB
JavaScript

const _GenericBar = require('./generic-bar');
const _options = require('./options');
// Progress-Bar constructor
module.exports = class SingleBar extends _GenericBar{
constructor(options, preset){
super(_options.parse(options, preset));
// the update timer
this.timer = null;
// disable synchronous updates in notty mode
if (this.options.noTTYOutput && this.terminal.isTTY() === false){
this.options.synchronousUpdate = false;
}
// update interval
this.schedulingRate = (this.terminal.isTTY() ? this.options.throttleTime : this.options.notTTYSchedule);
}
// internal render function
render(){
// stop timer
if (this.timer){
clearTimeout(this.timer);
this.timer = null;
}
// run internal rendering
super.render();
// add new line in notty mode!
if (this.options.noTTYOutput && this.terminal.isTTY() === false){
this.terminal.newline();
}
// next update
this.timer = setTimeout(this.render.bind(this), this.schedulingRate);
}
update(current, payload){
// timer inactive ?
if (!this.timer) {
return;
}
super.update(current, payload);
// trigger synchronous update ?
// check for throttle time
if (this.options.synchronousUpdate && (this.lastRedraw + this.options.throttleTime*2) < Date.now()){
// force update
this.render();
}
}
// start the progress bar
start(total, startValue, payload){
// progress updates are only visible in TTY mode!
if (this.options.noTTYOutput === false && this.terminal.isTTY() === false){
return;
}
// save current cursor settings
this.terminal.cursorSave();
// hide the cursor ?
if (this.options.hideCursor === true){
this.terminal.cursor(false);
}
// disable line wrapping ?
if (this.options.linewrap === false){
this.terminal.lineWrapping(false);
}
// initialize bar
super.start(total, startValue, payload);
// redraw on start!
this.render();
}
// stop the bar
stop(){
// timer inactive ?
if (!this.timer) {
return;
}
// trigger final rendering
this.render();
// restore state
super.stop();
// stop timer
clearTimeout(this.timer);
this.timer = null;
// cursor hidden ?
if (this.options.hideCursor === true){
this.terminal.cursor(true);
}
// re-enable line wrapping ?
if (this.options.linewrap === false){
this.terminal.lineWrapping(true);
}
// restore cursor on complete (position + settings)
this.terminal.cursorRestore();
// clear line on complete ?
if (this.options.clearOnComplete){
this.terminal.cursorTo(0, null);
this.terminal.clearLine();
}else{
// new line on complete
this.terminal.newline();
}
}
}