UNPKG

react-native-integrate

Version:

Automate integration of additional code into React Native projects

53 lines (52 loc) 1.82 kB
"use strict"; 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();