CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
number.js250 linesDownload Raw Back to elements
1"use strict";2 3function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }4 5function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }6 7const color = require('kleur');8 9const Prompt = require('./prompt');10 11const _require = require('sisteransi'),12      cursor = _require.cursor,13      erase = _require.erase;14 15const _require2 = require('../util'),16      style = _require2.style,17      figures = _require2.figures,18      clear = _require2.clear,19      lines = _require2.lines;20 21const isNumber = /[0-9]/;22 23const isDef = any => any !== undefined;24 25const round = (number, precision) => {26  let factor = Math.pow(10, precision);27  return Math.round(number * factor) / factor;28};29/**30 * NumberPrompt Base Element31 * @param {Object} opts Options32 * @param {String} opts.message Message33 * @param {String} [opts.style='default'] Render style34 * @param {Number} [opts.initial] Default value35 * @param {Number} [opts.max=+Infinity] Max value36 * @param {Number} [opts.min=-Infinity] Min value37 * @param {Boolean} [opts.float=false] Parse input as floats38 * @param {Number} [opts.round=2] Round floats to x decimals39 * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys40 * @param {Function} [opts.validate] Validate function41 * @param {Stream} [opts.stdin] The Readable stream to listen to42 * @param {Stream} [opts.stdout] The Writable stream to write readline data to43 * @param {String} [opts.error] The invalid error label44 */45 46 47class NumberPrompt extends Prompt {48  constructor(opts = {}) {49    super(opts);50    this.transform = style.render(opts.style);51    this.msg = opts.message;52    this.initial = isDef(opts.initial) ? opts.initial : '';53    this.float = !!opts.float;54    this.round = opts.round || 2;55    this.inc = opts.increment || 1;56    this.min = isDef(opts.min) ? opts.min : -Infinity;57    this.max = isDef(opts.max) ? opts.max : Infinity;58    this.errorMsg = opts.error || `Please Enter A Valid Value`;59 60    this.validator = opts.validate || (() => true);61 62    this.color = `cyan`;63    this.value = ``;64    this.typed = ``;65    this.lastHit = 0;66    this.render();67  }68 69  set value(v) {70    if (!v && v !== 0) {71      this.placeholder = true;72      this.rendered = color.gray(this.transform.render(`${this.initial}`));73      this._value = ``;74    } else {75      this.placeholder = false;76      this.rendered = this.transform.render(`${round(v, this.round)}`);77      this._value = round(v, this.round);78    }79 80    this.fire();81  }82 83  get value() {84    return this._value;85  }86 87  parse(x) {88    return this.float ? parseFloat(x) : parseInt(x);89  }90 91  valid(c) {92    return c === `-` || c === `.` && this.float || isNumber.test(c);93  }94 95  reset() {96    this.typed = ``;97    this.value = ``;98    this.fire();99    this.render();100  }101 102  exit() {103    this.abort();104  }105 106  abort() {107    let x = this.value;108    this.value = x !== `` ? x : this.initial;109    this.done = this.aborted = true;110    this.error = false;111    this.fire();112    this.render();113    this.out.write(`\n`);114    this.close();115  }116 117  validate() {118    var _this = this;119 120    return _asyncToGenerator(function* () {121      let valid = yield _this.validator(_this.value);122 123      if (typeof valid === `string`) {124        _this.errorMsg = valid;125        valid = false;126      }127 128      _this.error = !valid;129    })();130  }131 132  submit() {133    var _this2 = this;134 135    return _asyncToGenerator(function* () {136      yield _this2.validate();137 138      if (_this2.error) {139        _this2.color = `red`;140 141        _this2.fire();142 143        _this2.render();144 145        return;146      }147 148      let x = _this2.value;149      _this2.value = x !== `` ? x : _this2.initial;150      _this2.done = true;151      _this2.aborted = false;152      _this2.error = false;153 154      _this2.fire();155 156      _this2.render();157 158      _this2.out.write(`\n`);159 160      _this2.close();161    })();162  }163 164  up() {165    this.typed = ``;166 167    if (this.value === '') {168      this.value = this.min - this.inc;169    }170 171    if (this.value >= this.max) return this.bell();172    this.value += this.inc;173    this.color = `cyan`;174    this.fire();175    this.render();176  }177 178  down() {179    this.typed = ``;180 181    if (this.value === '') {182      this.value = this.min + this.inc;183    }184 185    if (this.value <= this.min) return this.bell();186    this.value -= this.inc;187    this.color = `cyan`;188    this.fire();189    this.render();190  }191 192  delete() {193    let val = this.value.toString();194    if (val.length === 0) return this.bell();195    this.value = this.parse(val = val.slice(0, -1)) || ``;196 197    if (this.value !== '' && this.value < this.min) {198      this.value = this.min;199    }200 201    this.color = `cyan`;202    this.fire();203    this.render();204  }205 206  next() {207    this.value = this.initial;208    this.fire();209    this.render();210  }211 212  _(c, key) {213    if (!this.valid(c)) return this.bell();214    const now = Date.now();215    if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed216 217    this.typed += c;218    this.lastHit = now;219    this.color = `cyan`;220    if (c === `.`) return this.fire();221    this.value = Math.min(this.parse(this.typed), this.max);222    if (this.value > this.max) this.value = this.max;223    if (this.value < this.min) this.value = this.min;224    this.fire();225    this.render();226  }227 228  render() {229    if (this.closed) return;230 231    if (!this.firstRender) {232      if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));233      this.out.write(clear(this.outputText, this.out.columns));234    }235 236    super.render();237    this.outputError = ''; // Print prompt238 239    this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), !this.done || !this.done && !this.placeholder ? color[this.color]().underline(this.rendered) : this.rendered].join(` `); // Print error240 241    if (this.error) {242      this.outputError += this.errorMsg.split(`\n`).reduce((a, l, i) => a + `\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);243    }244 245    this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);246  }247 248}249 250module.exports = NumberPrompt;
basant307/AI_Governance_Project · CoolFace