| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | const color = require('kleur');const Prompt = require('./prompt');const { style, clear } = require('../util');const { erase, cursor } = require('sisteransi');/** * ConfirmPrompt Base Element * @param {Object} opts Options * @param {String} opts.message Message * @param {Boolean} [opts.initial] Default value (true/false) * @param {Stream} [opts.stdin] The Readable stream to listen to * @param {Stream} [opts.stdout] The Writable stream to write readline data to * @param {String} [opts.yes] The "Yes" label * @param {String} [opts.yesOption] The "Yes" option when choosing between yes/no * @param {String} [opts.no] The "No" label * @param {String} [opts.noOption] The "No" option when choosing between yes/no */class ConfirmPrompt extends Prompt {  constructor(opts={}) {    super(opts);    this.msg = opts.message;    this.value = opts.initial;    this.initialValue = !!opts.initial;    this.yesMsg = opts.yes || 'yes';    this.yesOption = opts.yesOption || '(Y/n)';    this.noMsg = opts.no || 'no';    this.noOption = opts.noOption || '(y/N)';    this.render();  }  reset() {    this.value = this.initialValue;    this.fire();    this.render();  }  exit() {    this.abort();  }  abort() {    this.done = this.aborted = true;    this.fire();    this.render();    this.out.write('\n');    this.close();  }  submit() {    this.value = this.value || false;    this.done = true;    this.aborted = false;    this.fire();    this.render();    this.out.write('\n');    this.close();  }  _(c, key) {    if (c.toLowerCase() === 'y') {      this.value = true;      return this.submit();    }    if (c.toLowerCase() === 'n') {      this.value = false;      return this.submit();    }    return this.bell();  }  render() {    if (this.closed) return;    if (this.firstRender) this.out.write(cursor.hide);    else this.out.write(clear(this.outputText, this.out.columns));    super.render();    this.outputText = [      style.symbol(this.done, this.aborted),      color.bold(this.msg),      style.delimiter(this.done),      this.done ? (this.value ? this.yesMsg : this.noMsg)          : color.gray(this.initialValue ? this.yesOption : this.noOption)    ].join(' ');    this.out.write(erase.line + cursor.to(0) + this.outputText);  }}module.exports = ConfirmPrompt;
 |