@mail-core/cli
Version:
Инструментарий для написания cli-скриптов
76 lines • 2.45 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isSpinnerInstance = exports.spinnerFromPromise = exports.createSpinner = exports.stopAllSpinners = void 0;
const ora_1 = require("ora");
const ora = require("ora");
const interactive_1 = require("../interactive/interactive");
const __spinners__ = [];
function stopAllSpinners(as, text) {
__spinners__.forEach((spinner) => {
if (spinner.isSpinning) {
spinner[as](text);
}
});
}
exports.stopAllSpinners = stopAllSpinners;
function createSpinner() {
if (isPromiseLike(arguments[0])) {
return ora_1.promise(arguments[0], arguments[1]);
}
const options = Object.assign({ stream: process.stdout }, arguments[0]);
const spinner = ora(options);
const start = spinner.start;
spinner.start = function (...args) {
interactive_1.interactiveToolNewLine.touch(options.prefixText);
return start.apply(this, args);
};
__spinners__.push(spinner);
autoStart(spinner, options);
spinner.done = spinner.succeed;
spinner.status = function (text) {
const _priv = this;
if (!_priv._origText) {
_priv._origText = this.text;
}
if (text == null) {
if (_priv._origText) {
this.text = _priv._origText;
}
_priv._origText = undefined;
}
else {
this.text = `${_priv._origText}: ${text}`;
}
};
spinner.try = function (executer, complete) {
try {
const result = executer(this);
this.succeed();
complete && complete(this);
return result;
}
catch (err) {
this.fail();
complete && complete(this, err);
return undefined;
}
};
return spinner;
}
exports.createSpinner = createSpinner;
function spinnerFromPromise(action, options) {
createSpinner(action, options);
return action;
}
exports.spinnerFromPromise = spinnerFromPromise;
function isSpinnerInstance(val) {
return !!(val && typeof val === 'object' && typeof val.start === 'function');
}
exports.isSpinnerInstance = isSpinnerInstance;
function isPromiseLike(value) {
return value && typeof value.then === 'function';
}
function autoStart(spinner, options) {
spinner[options && options.autoStart !== false ? 'start' : 'stop']();
}
//# sourceMappingURL=spinner.js.map