snips-sam
Version:
The Snips Assistant Manager
50 lines (41 loc) • 1.4 kB
text/typescript
import { Stream } from './stream';
import { flatMap } from '../utils/functions';
const inquirer = require('inquirer');
export class Prompt {
public stream: Stream;
constructor(stream: Stream) {
this.stream = stream;
}
waitForKeypress = async (question: string, completionBlock: () => any) => {
this.stream.loading(question);
return this.waitForInput(completionBlock);
}
promptList = async (name: string, question: string, answers: string[]): Promise<string> => {
return inquirer.prompt([
{
name,
type: 'list',
message: question,
choices: answers,
},
]);
}
promptQuestions = async (questions: any[]) => {
const questionsFlat = flatMap(questions, (value, index, array) => value);
return inquirer.prompt(questionsFlat);
}
waitForInput = async (preBlock: () => any) => {
if (process.stdin.setRawMode !== undefined) {
process.stdin.setRawMode(true);
}
return new Promise((resolve) => {
process.stdin.on('data', (input) => {
if (process.stdin.setRawMode !== undefined) {
process.stdin.setRawMode(false);
}
preBlock();
return resolve(input);
});
});
}
}