tty-aware-progress
Version:
[](https://travis-ci.org/bkniffler/tty-aware-progress)
34 lines (33 loc) • 1.39 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const progress_1 = __importDefault(require("progress"));
function createProgress(total, { stream = process.stderr } = {}) {
if (process.stderr.isTTY) {
const progress = new progress_1.default(`[:bar] :current/:total :percent :rate/s :etas `, {
total,
stream
});
return (numberOfTick = 1) => progress.tick(numberOfTick);
}
else {
let current = 0;
let percent = 0;
let start = +new Date();
return (numberOfTick = 1) => {
current += numberOfTick;
const ratio = Math.min(Math.max(current / total, 0), 1);
const value = Math.floor(ratio * 100);
if (value !== percent) {
percent = value;
const elapsed = +new Date() - start;
const eta = percent === 100 ? 0 : elapsed * (total / current - 1);
const rate = current / (elapsed / 1000);
stream.write(` ${percent}% ${Math.round(rate)}/s ${isNaN(eta) || !isFinite(eta) ? '0.0' : (eta / 1000).toFixed(1)}s`);
}
};
}
}
exports.default = createProgress;