.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / enquirer / lib / types / number.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/enquirer/lib/types/number.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/enquirer/lib/types/number.js
new file mode 100644 (file)
index 0000000..199a7c9
--- /dev/null
@@ -0,0 +1,86 @@
+'use strict';
+
+const StringPrompt = require('./string');
+
+class NumberPrompt extends StringPrompt {
+  constructor(options = {}) {
+    super({ style: 'number', ...options });
+    this.min = this.isValue(options.min) ? this.toNumber(options.min) : -Infinity;
+    this.max = this.isValue(options.max) ? this.toNumber(options.max) : Infinity;
+    this.delay = options.delay != null ? options.delay : 1000;
+    this.float = options.float !== false;
+    this.round = options.round === true || options.float === false;
+    this.major = options.major || 10;
+    this.minor = options.minor || 1;
+    this.initial = options.initial != null ? options.initial : '';
+    this.input = String(this.initial);
+    this.cursor = this.input.length;
+    this.cursorShow();
+  }
+
+  append(ch) {
+    if (!/[-+.]/.test(ch) || (ch === '.' && this.input.includes('.'))) {
+      return this.alert('invalid number');
+    }
+    return super.append(ch);
+  }
+
+  number(ch) {
+    return super.append(ch);
+  }
+
+  next() {
+    if (this.input && this.input !== this.initial) return this.alert();
+    if (!this.isValue(this.initial)) return this.alert();
+    this.input = this.initial;
+    this.cursor = String(this.initial).length;
+    return this.render();
+  }
+
+  up(number) {
+    let step = number || this.minor;
+    let num = this.toNumber(this.input);
+    if (num > this.max + step) return this.alert();
+    this.input = `${num + step}`;
+    return this.render();
+  }
+
+  down(number) {
+    let step = number || this.minor;
+    let num = this.toNumber(this.input);
+    if (num < this.min - step) return this.alert();
+    this.input = `${num - step}`;
+    return this.render();
+  }
+
+  shiftDown() {
+    return this.down(this.major);
+  }
+
+  shiftUp() {
+    return this.up(this.major);
+  }
+
+  format(input = this.input) {
+    if (typeof this.options.format === 'function') {
+      return this.options.format.call(this, input);
+    }
+    return this.styles.info(input);
+  }
+
+  toNumber(value = '') {
+    return this.float ? +value : Math.round(+value);
+  }
+
+  isValue(value) {
+    return /^[-+]?[0-9]+((\.)|(\.[0-9]+))?$/.test(value);
+  }
+
+  submit() {
+    let value = [this.input, this.initial].find(v => this.isValue(v));
+    this.value = this.toNumber(value || 0);
+    return super.submit();
+  }
+}
+
+module.exports = NumberPrompt;