1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const deps_1 = require("./deps");
|
4 | class Prompt extends deps_1.default.Base {
|
5 | prompt(name, inputOptions = {}) {
|
6 | const options = Object.assign({ isTTY: !!(process.env.TERM !== 'dumb' && process.stdin.isTTY), name, prompt: name ? deps_1.default.chalk.dim(`${name}: `) : deps_1.default.chalk.dim('> '), type: 'normal' }, inputOptions);
|
7 | switch (options.type) {
|
8 | case 'normal':
|
9 | return this.normal(options);
|
10 | case 'mask':
|
11 | case 'hide':
|
12 | return deps_1.default.passwordPrompt(options.prompt, { method: options.type });
|
13 | default:
|
14 | throw new Error(`unexpected type ${options.type}`);
|
15 | }
|
16 | }
|
17 | normal(options, retries = 100) {
|
18 | if (retries < 0)
|
19 | throw new Error('no input');
|
20 | return new Promise(resolve => {
|
21 | process.stdin.setEncoding('utf8');
|
22 | this.stderr.write(options.prompt);
|
23 | process.stdin.resume();
|
24 | process.stdin.once('data', data => {
|
25 | process.stdin.pause();
|
26 | data = data.trim();
|
27 | if (data === '') {
|
28 | resolve(this.normal(options, retries - 1));
|
29 | }
|
30 | else {
|
31 | resolve(data);
|
32 | }
|
33 | });
|
34 | });
|
35 | }
|
36 | }
|
37 | exports.default = Prompt;
|