UNPKG

@ethersphere/swarm-cli

Version:
208 lines (207 loc) 7.5 kB
"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;