58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
const { prompt } = require('enquirer');
|
|
const utils = require('./index');
|
|
|
|
/**
|
|
*
|
|
* @param packageName
|
|
* @param preMessage Message to show before the question
|
|
*/
|
|
async function promptInstallation(packageName, preMessage) {
|
|
const packageManager = utils.getPackageManager();
|
|
|
|
if (!packageManager) {
|
|
utils.logger.error("Can't find package manager");
|
|
process.exit(2);
|
|
}
|
|
|
|
if (preMessage) {
|
|
preMessage();
|
|
}
|
|
|
|
// yarn uses 'add' command, rest npm and pnpm both use 'install'
|
|
const commandToBeRun = `${packageManager} ${[packageManager === 'yarn' ? 'add' : 'install', '-D', packageName].join(' ')}`;
|
|
const { colors } = utils;
|
|
|
|
let installConfirm;
|
|
|
|
try {
|
|
({ installConfirm } = await prompt([
|
|
{
|
|
type: 'confirm',
|
|
name: 'installConfirm',
|
|
message: `Would you like to install '${colors.green(packageName)}' package? (That will run '${colors.green(
|
|
commandToBeRun,
|
|
)}')`,
|
|
initial: 'Y',
|
|
stdout: process.stderr,
|
|
},
|
|
]));
|
|
} catch (error) {
|
|
utils.logger.error(error);
|
|
process.exit(2);
|
|
}
|
|
|
|
if (installConfirm) {
|
|
try {
|
|
await utils.runCommand(commandToBeRun);
|
|
} catch (error) {
|
|
utils.logger.error(error);
|
|
process.exit(2);
|
|
}
|
|
|
|
return utils.packageExists(packageName);
|
|
}
|
|
|
|
process.exit(2);
|
|
}
|
|
|
|
module.exports = promptInstallation;
|