react-native-integrate
Version:
Automate integration of additional code into React Native projects
53 lines (52 loc) • 1.82 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.progress = void 0;
const prompts_1 = require("@clack/prompts");
const picocolors_1 = __importDefault(require("picocolors"));
class Progress {
spinner;
options = {
title: '',
step: 0,
total: 1,
stage: '',
};
isActive = false;
setOptions(opts) {
Object.assign(this.options, opts);
if (this.isActive)
this.spinner?.message(this.drawMessage());
}
drawMessage() {
const stepRate = !this.options.total
? 0
: Math.min(1, Math.max(0, this.options.step / this.options.total));
const barSize = 20;
const scaledStep = Math.floor(stepRate * barSize);
const completeBars = new Array(scaledStep).fill('\u2588').join('');
const uncompleteBars = new Array(barSize - scaledStep)
.fill('\u2588')
.join('');
const bar = `${picocolors_1.default.cyan(completeBars)}${picocolors_1.default.dim(picocolors_1.default.gray(uncompleteBars))}`;
return `${this.options.title} [${bar}] ${picocolors_1.default.cyan(this.options.stage)}`;
}
display() {
if (!this.isActive) {
this.isActive = true;
this.spinner = (0, prompts_1.spinner)();
this.spinner.start(this.drawMessage());
}
}
hide() {
if (this.isActive) {
this.isActive = false;
this.spinner?.stop();
process.stdout.moveCursor(0, -2); // up one line
process.stdout.clearLine(1); // from cursor to end
}
}
}
exports.progress = new Progress();