eas-cli
Version:
EAS command line tool
66 lines (65 loc) • 2.43 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createProgressTracker = void 0;
const tslib_1 = require("tslib");
const chalk_1 = tslib_1.__importDefault(require("chalk"));
const node_crypto_1 = require("node:crypto");
const timer_1 = require("./timer");
const ora_1 = require("../ora");
function createProgressTracker({ total, message, completedMessage, }) {
let bar = null;
let calcTotal = total ?? 0;
let transferredSoFar = 0;
let current = 0;
const timerLabel = String((0, node_crypto_1.randomUUID)());
const getMessage = (v, total) => {
const ratio = Math.min(Math.max(v, 0), 1);
const percent = Math.floor(ratio * 100);
return typeof message === 'string'
? `${message} ${percent.toFixed(0)}%`
: message(ratio, total);
};
return ({ progress, isComplete, error }) => {
if (progress) {
if (!bar && (progress.total !== undefined || total !== undefined)) {
calcTotal = total ?? progress.total;
bar = (0, ora_1.ora)(getMessage(0, calcTotal)).start();
(0, timer_1.startTimer)(timerLabel);
}
if (progress.total) {
calcTotal = progress.total;
}
if (bar) {
let percentage = 0;
if (progress.percent) {
percentage = progress.percent;
}
else {
current += progress.transferred - transferredSoFar;
percentage = current / calcTotal;
}
bar.text = getMessage(percentage, calcTotal);
}
transferredSoFar = progress.transferred;
}
if (!bar) {
return;
}
if (isComplete) {
const duration = (0, timer_1.endTimer)(timerLabel);
const prettyTime = (0, timer_1.formatMilliseconds)(duration);
if (error) {
bar.fail();
}
else if (isComplete) {
if (typeof completedMessage === 'string') {
bar.succeed(`${completedMessage} ${chalk_1.default.dim(prettyTime)}`);
}
else {
bar.succeed(completedMessage(prettyTime));
}
}
}
};
}
exports.createProgressTracker = createProgressTracker;
;