diff --git a/utils/tasks.js b/utils/tasks.js index cbacb90..4efa56d 100644 --- a/utils/tasks.js +++ b/utils/tasks.js @@ -66,8 +66,12 @@ function injectDefaultConstructor(generator) { generator.option('host', { desc: 'Name of the host generator', - type: 'String', - required: true + type: 'String' + }); + + generator.option('yes', { + desc: 'Confirm all yesnos with yes', + type: 'Boolean' }); } @@ -116,8 +120,34 @@ function makeSubgenAware(generator) { */ function activateSubgen(generator) { if (!fs.existsSync(generator.subgenDest)) { - fs.symlinkSync(generator.subgenSrc, generator.subgenDest); - generator.genData.activation = utils.buildSuccess({}); + var done = generator.async(); + + const run = (shouldProceed) => { + + if (!shouldProceed) { + generator.env.error('Operation cancelled by user.'); + done(); + } + + fs.symlinkSync(generator.subgenSrc, generator.subgenDest); + generator.genData.activation = utils.buildSuccess({}); + + done(); + }; + + if (utils.shouldAutoConfirmYesnos(generator.options.yes)) { + run(true); + } else { + generator.prompt({ + type: 'confirm', + name: 'proceed', + message: `I will create a symlink\nfrom =>\t${generator.subgenSrc}\nin =>\t${generator.subgenDest}\nConfirm to proceed:` + }) + .then( + answers => run(answers.proceed) + ); + } + } else { const err = 'Subgen with name ' + generator.subgenName + ' is already activated. If you want to update it, make ' + 'sure to deactivate it first. This is a NOOP.'; @@ -132,8 +162,33 @@ function activateSubgen(generator) { */ function deactivateSubgen(generator) { if (fs.existsSync(generator.subgenDest)) { - fs.unlinkSync(generator.subgenDest); - generator.genData.deactivation = utils.buildSuccess({}); + var done = generator.async(); + + const run = (shouldProceed) => { + + if (!shouldProceed) { + generator.env.error('Operation cancelled by user.'); + done(); + } + + fs.unlinkSync(generator.subgenDest); + generator.genData.deactivation = utils.buildSuccess({}); + + done(); + }; + + if (utils.shouldAutoConfirmYesnos(generator.options.yes)) { + run(true); + } else { + generator.prompt({ + type: 'confirm', + name: 'proceed', + message: `I will remove this symlink\n=> ${generator.subgenDest}\nConfirm to proceed:` + }) + .then( + answers => run(answers.proceed) + ); + } } else { const err = `Subgen with name "${generator.subgenName}" doesn't seem to be activated. This is a NOOP.`; generator.genData.deactivation = utils.buildError(err); diff --git a/utils/utils.js b/utils/utils.js index 8a57d0b..7d22e22 100644 --- a/utils/utils.js +++ b/utils/utils.js @@ -206,6 +206,11 @@ function findExternalSubgens(prefixes, host, installed) { } +function shouldAutoConfirmYesnos(bool) { + return bool || false; +} + + /** * Returns package.json from a package's install path * @param dir base path of the installed package @@ -266,5 +271,6 @@ module.exports = { getSubgenBaseName, findExternalSubgens, populatePkgStoreFromPaths, + shouldAutoConfirmYesnos, sortCharArrByLength };