From 12d0e9533871ff2a63c1e3a1efe2ed160b42885c Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Sun, 7 Apr 2024 05:50:08 -0700 Subject: [PATCH 1/2] wip --- packages/plop/bin/plop.js | 5 ++++- packages/plop/src/plop.js | 35 ++++++++++------------------------- 2 files changed, 14 insertions(+), 26 deletions(-) diff --git a/packages/plop/bin/plop.js b/packages/plop/bin/plop.js index 288ed45..00b1700 100644 --- a/packages/plop/bin/plop.js +++ b/packages/plop/bin/plop.js @@ -12,6 +12,9 @@ Plop.prepare( completion: argv.completion, }, function (env) { - Plop.execute(env, run); + Plop.execute(env, (env, argv) => run(env, argv).catch( err => { + console.error(chalk.red("[ERROR]"), err.message); + process.exit(1); + })); }, ); diff --git a/packages/plop/src/plop.js b/packages/plop/src/plop.js index 251c75e..a77f35b 100644 --- a/packages/plop/src/plop.js +++ b/packages/plop/src/plop.js @@ -60,7 +60,7 @@ async function run(env, _, passArgsBeforeDashes) { chalk.red("[PLOP] ") + "Something went wrong with reading your plop file", e, ); - return; + throw e; } const generators = plop.getGeneratorList(); const generatorNames = generators.map((v) => v.name); @@ -73,44 +73,33 @@ async function run(env, _, passArgsBeforeDashes) { const runGeneratorByName = (name) => { const generator = plop.getGenerator(name); const bypassData = combineBypassData(generator, bypassArr, plopArgV); - doThePlop(generator, bypassData); + return doThePlop(generator, bypassData); }; // hmmmm, couldn't identify a generator in the user's input if (!generators.length) { // no generators?! there's clearly something wrong here - console.error(chalk.red("[PLOP] ") + "No generator found in plopfile"); - process.exit(1); + throw new Error("No generator found in plopfile"); } else if (!generatorName && generators.length === 1) { // only one generator in this plopfile... let's assume they // want to run that one! - runGeneratorByName(generatorNames[0]); + await runGeneratorByName(generatorNames[0]); } else if (!generatorName && generators.length > 1 && !bypassArr.length) { // more than one generator? we'll have to ask the user which // one they want to run. - out + await out .chooseOptionFromList(generators, plop.getWelcomeMessage()) .then(runGeneratorByName) - .catch((err) => { - console.error( - chalk.red("[PLOP] ") + - "Something went wrong with selecting a generator", - err, - ); - }); } else if (generatorNames.includes(generatorName)) { // we have found the generator, run it! - runGeneratorByName(generatorName); + await runGeneratorByName(generatorName); } else { // we just can't make sense of your input... sorry :-( const fuzzyGenName = (generatorName + " " + args.join(" ")).trim(); - console.error( - chalk.red("[PLOP] ") + - 'Could not find a generator for "' + + throw new Error('Could not find a generator for "' + fuzzyGenName + '"', ); - process.exit(1); } return plop; } @@ -120,7 +109,7 @@ async function run(env, _, passArgsBeforeDashes) { // function doThePlop(generator, bypassArr) { let failedActions = false; - generator + return generator .runPrompts(bypassArr) .then(async (answers) => { return answers; @@ -161,15 +150,11 @@ function doThePlop(generator, bypassArr) { progressSpinner.start(); return generator .runActions(answers, { onSuccess, onFailure, onComment }) - .then(() => { + .finally(() => { progressSpinner.stop(); - if (failedActions) process.exit(1); + if (failedActions) throw new Error(`At least one action has failed.`); }); }) - .catch(function (err) { - console.error(chalk.red("[ERROR]"), err.message); - process.exit(1); - }); } export { Plop, run, progressSpinner }; From c5c458a901c0e3ea38dce0977602ebb7f3d12466 Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Sun, 7 Apr 2024 06:05:44 -0700 Subject: [PATCH 2/2] wip --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e5c5b68..8f2c57b 100644 --- a/README.md +++ b/README.md @@ -504,7 +504,11 @@ Plop.prepare({ configPath: path.join(__dirname, 'plopfile.js'), preload: argv.preload || [], completion: argv.completion -}, env => Plop.execute(env, run)); +}, env => Plop.execute(env, env => run(env).catch( err => { + console.error(err.message); + process.exit(1); + })) +); ``` And your `package.json` should look like the following: @@ -540,7 +544,10 @@ Plop.prepare({ ...env, dest: process.cwd() // this will make the destination path to be based on the cwd when calling the wrapper } - return run(options, undefined, true) + run(options, undefined, true).catch( err => { + console.error(err.message); + process.exit(1); + }) }) ) ```