diff options
author | Danijel Andjelkovic <adanijel99@gmail.com> | 2022-03-01 21:54:41 +0100 |
---|---|---|
committer | Danijel Andjelkovic <adanijel99@gmail.com> | 2022-03-01 21:54:41 +0100 |
commit | 6c8128f9fd5a5d0be115806c35a21b3d683df8d6 (patch) | |
tree | f46c2f6b3b9b294ff32bd75c08ccdc9e7a8cc4ef /sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/password.js | |
parent | 2400b84e95913665da6279114168148444b8f9ab (diff) | |
parent | 7d3640f824f46490b47bd95f1c5a16644f712068 (diff) |
Merge branch 'dev' of http://gitlab.pmf.kg.ac.rs/igrannonica/neuronstellar into logo
Diffstat (limited to 'sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/password.js')
-rw-r--r-- | sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/password.js | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/password.js b/sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/password.js new file mode 100644 index 00000000..840249d3 --- /dev/null +++ b/sandbox/testAppNevena/Front/node_modules/inquirer/lib/prompts/password.js @@ -0,0 +1,127 @@ +'use strict'; +/** + * `password` type prompt + */ + +const chalk = require('chalk'); +const { map, takeUntil } = require('rxjs/operators'); +const Base = require('./base'); +const observe = require('../utils/events'); + +function mask(input, maskChar) { + input = String(input); + maskChar = typeof maskChar === 'string' ? maskChar : '*'; + if (input.length === 0) { + return ''; + } + + return new Array(input.length + 1).join(maskChar); +} + +class PasswordPrompt extends Base { + /** + * Start the Inquiry session + * @param {Function} cb Callback when prompt is done + * @return {this} + */ + + _run(cb) { + this.done = cb; + + const events = observe(this.rl); + + // Once user confirm (enter key) + const submit = events.line.pipe(map(this.filterInput.bind(this))); + + const validation = this.handleSubmitEvents(submit); + validation.success.forEach(this.onEnd.bind(this)); + validation.error.forEach(this.onError.bind(this)); + + events.keypress + .pipe(takeUntil(validation.success)) + .forEach(this.onKeypress.bind(this)); + + // Init + this.render(); + + return this; + } + + /** + * Render the prompt to screen + * @return {PasswordPrompt} self + */ + + render(error) { + let message = this.getQuestion(); + let bottomContent = ''; + + if (this.status === 'answered') { + message += this.getMaskedValue(this.answer); + } else { + message += this.getMaskedValue(this.rl.line || ''); + } + + if (error) { + bottomContent = '\n' + chalk.red('>> ') + error; + } + + this.screen.render(message, bottomContent); + } + + getMaskedValue(value) { + if (this.status === 'answered') { + return this.opt.mask + ? chalk.cyan(mask(value, this.opt.mask)) + : chalk.italic.dim('[hidden]'); + } + return this.opt.mask + ? mask(value, this.opt.mask) + : chalk.italic.dim('[input is hidden] '); + } + + /** + * Mask value during async filter/validation. + */ + getSpinningValue(value) { + return this.getMaskedValue(value); + } + + /** + * When user press `enter` key + */ + + filterInput(input) { + if (!input) { + return this.opt.default == null ? '' : this.opt.default; + } + + return input; + } + + onEnd(state) { + this.status = 'answered'; + this.answer = state.value; + + // Re-render prompt + this.render(); + + this.screen.done(); + this.done(state.value); + } + + onError(state) { + this.render(state.isValid); + } + + onKeypress() { + // If user press a key, just clear the default value + if (this.opt.default) { + this.opt.default = undefined; + } + + this.render(); + } +} + +module.exports = PasswordPrompt; |