UNPKG

tabtab

Version:

tab completion helpers, for node cli programs. Inspired by npm completion.

76 lines (65 loc) 1.93 kB
const inquirer = require('inquirer'); const path = require('path'); const debug = require('./utils/tabtabDebug')('tabtab:prompt'); /** * Asks user about SHELL and desired location. * * It is too difficult to check spawned SHELL, the user has to use chsh before * it is reflected in process.env.SHELL */ const prompt = () => { const ask = inquirer.createPromptModule(); const questions = [ { type: 'list', name: 'shell', message: 'Which Shell do you use ?', choices: ['bash', 'zsh', 'fish'], default: 'bash' } ]; const locations = { bash: '~/.bashrc', zsh: '~/.zshrc', fish: '~/.config/fish/config.fish' }; const finalAnswers = {}; return ask(questions) .then(answers => { const { shell } = answers; debug('answers', shell); const location = locations[shell]; debug(`Will install completion to ${location}`); Object.assign(finalAnswers, { location, shell }); return location; }) .then(location => ask({ type: 'confirm', name: 'locationOK', message: `We will install completion to ${location}, is it ok ?` }) ) .then(answers => { const { locationOK } = answers; if (locationOK) { debug('location is ok, return', finalAnswers); return finalAnswers; } // otherwise, ask for specific **absolute** path return ask({ name: 'userLocation', message: 'Which path then ? Must be absolute.', validate: input => { debug('Validating input', input); return path.isAbsolute(input); } }).then(lastAnswer => { const { userLocation } = lastAnswer; console.log(`Very well, we will install using ${userLocation}`); Object.assign(finalAnswers, { location: userLocation }); return finalAnswers; }); }); }; module.exports = prompt;