@ethersphere/swarm-cli
Version:
CLI tool for Bee
208 lines (207 loc) • 7.5 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CommandLog = exports.VerbosityLevel = void 0;
const chalk_1 = __importDefault(require("chalk"));
const inquirer_1 = require("inquirer");
const error_1 = require("../../utils/error");
const message_1 = require("../../utils/message");
const text_1 = require("../../utils/text");
const printer_1 = require("./printer");
var VerbosityLevel;
(function (VerbosityLevel) {
/** No output message, only at errors or result strings (e.g. hash of uploaded file) */
VerbosityLevel[VerbosityLevel["Quiet"] = 0] = "Quiet";
/** Formatted informal messages at end of operations, output row number is equal at same operations */
VerbosityLevel[VerbosityLevel["Normal"] = 1] = "Normal";
/** dim messages, gives info about state of the operation frequently. Default */
VerbosityLevel[VerbosityLevel["Verbose"] = 2] = "Verbose";
})(VerbosityLevel = exports.VerbosityLevel || (exports.VerbosityLevel = {}));
class CommandLog {
constructor(verbosityLevel) {
Object.defineProperty(this, "verbosityLevel", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
// Callable logging functions (instead of console.log)
/** Error messages */
Object.defineProperty(this, "error", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
/** Messages shown in all modes */
Object.defineProperty(this, "all", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
/** Identical with console.log */
Object.defineProperty(this, "log", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
/** Informal messages (e.g. Tips) */
Object.defineProperty(this, "info", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
/** Messages shown in quiet */
Object.defineProperty(this, "quiet", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
/** Messages shown in verbose */
Object.defineProperty(this, "verbose", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
/** Additional info, state of the process */
Object.defineProperty(this, "dim", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
/** Draw divider line to separate content in output */
Object.defineProperty(this, "divider", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this.verbosityLevel = verbosityLevel;
switch (verbosityLevel) {
case VerbosityLevel.Verbose:
this.error = printer_1.Printer.error;
this.quiet = printer_1.Printer.emptyFunction;
this.verbose = printer_1.Printer.log;
this.log = printer_1.Printer.log;
this.all = printer_1.Printer.log;
this.info = printer_1.Printer.info;
this.dim = printer_1.Printer.dimFunction;
this.divider = printer_1.Printer.divider;
break;
case VerbosityLevel.Normal:
this.error = printer_1.Printer.error;
this.quiet = printer_1.Printer.emptyFunction;
this.verbose = printer_1.Printer.emptyFunction;
this.log = printer_1.Printer.log;
this.all = printer_1.Printer.log;
this.info = printer_1.Printer.info;
this.dim = printer_1.Printer.emptyFunction;
this.divider = printer_1.Printer.divider;
break;
default:
// quiet
this.error = printer_1.Printer.error;
this.quiet = printer_1.Printer.log;
this.verbose = printer_1.Printer.emptyFunction;
this.log = printer_1.Printer.emptyFunction;
this.all = printer_1.Printer.log;
this.info = printer_1.Printer.emptyFunction;
this.dim = printer_1.Printer.emptyFunction;
this.divider = printer_1.Printer.emptyFunction;
}
}
async confirm(message) {
const { value } = await (0, inquirer_1.prompt)({
prefix: chalk_1.default.bold.cyan('?'),
type: 'confirm',
name: 'value',
message,
});
return value;
}
/**
* Ask for an arbitrary value
*
* @returns value
*/
async askForValue(message) {
const input = await (0, inquirer_1.prompt)({
prefix: chalk_1.default.bold.cyan('?'),
name: 'value',
message,
});
const { value } = input;
if (!value) {
(0, text_1.deletePreviousLine)();
throw new error_1.CommandLineError('No value specified');
}
(0, text_1.deletePreviousLine)();
return value;
}
/**
* Ask for password WITHOUT confirmation
*
* @returns password
*/
async askForPassword(message, clear = true) {
if (this.verbosityLevel === VerbosityLevel.Quiet) {
throw new error_1.CommandLineError(message_1.Message.optionNotDefined('password'));
}
const { value } = await (0, inquirer_1.prompt)({
prefix: chalk_1.default.bold.cyan('?'),
type: 'password',
name: 'value',
message,
});
if (!value) {
(0, text_1.deletePreviousLine)();
throw new error_1.CommandLineError('No password specified');
}
if (clear) {
(0, text_1.deletePreviousLine)();
}
return value;
}
/**
* Ask for password with confirmation
*
* @returns password
*/
async askForPasswordWithConfirmation(passwordMessage, confirmationMessage) {
const password = await this.askForPassword(passwordMessage, false);
const passwordAgain = await this.askForPassword(confirmationMessage, false);
if (password !== passwordAgain) {
throw new error_1.CommandLineError('The two passwords do not match');
}
return password;
}
async promptList(choices, message) {
const result = await (0, inquirer_1.prompt)({
prefix: chalk_1.default.bold.cyan('?'),
name: 'value',
type: 'list',
message,
choices,
loop: false,
});
(0, text_1.deletePreviousLine)();
return result.value;
}
async confirmAndDelete(message) {
const value = await this.confirm(message);
(0, text_1.deletePreviousLine)();
return value;
}
printBeeError(error, options) {
(0, error_1.errorHandler)(error, options);
}
}
exports.CommandLog = CommandLog;