From b89944ea8c4e9709c33491a87f80c81f7d378aeb Mon Sep 17 00:00:00 2001 From: Rosen Kanev Date: Wed, 1 Nov 2023 17:02:01 +0200 Subject: [PATCH] fix: Show generator description from external plopfiles A generator's description wasn't set properly when the generator was in an external plop file loaded with `plop.load("./another-plopfile.js")`. Fixes #247 --- .changeset/spotty-feet-applaud.md | 5 +++++ packages/node-plop/src/node-plop.js | 6 +++++- .../load-assets-from-plopfile.spec.js | 8 ++++++++ .../load-assets-from-plopfile/plopfile.js | 5 ++++- .../javascript/extra-generators.plopfile.js | 18 ++++++++++++++++++ .../plop/tests/examples/javascript/plopfile.js | 5 ++++- packages/plop/tests/input-processing.spec.js | 1 + 7 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 .changeset/spotty-feet-applaud.md create mode 100644 packages/plop/tests/examples/javascript/extra-generators.plopfile.js diff --git a/.changeset/spotty-feet-applaud.md b/.changeset/spotty-feet-applaud.md new file mode 100644 index 00000000..5b57e589 --- /dev/null +++ b/.changeset/spotty-feet-applaud.md @@ -0,0 +1,5 @@ +--- +"node-plop": patch +--- + +Show generator description from external plopfiles diff --git a/packages/node-plop/src/node-plop.js b/packages/node-plop/src/node-plop.js index 02be6695..e7ebe9f2 100644 --- a/packages/node-plop/src/node-plop.js +++ b/packages/node-plop/src/node-plop.js @@ -127,7 +127,11 @@ async function nodePlop(plopfilePath = "", plopCfg = {}) { genNameList, includeCfg === true || include.generators, setGenerator, - (proxyName) => ({ proxyName, proxy }), + (proxyName) => ({ + proxyName, + proxy, + description: proxy.getGenerator(proxyName).description, + }), ); loadAsset( proxy.getPartialList(), diff --git a/packages/node-plop/tests/load-assets-from-plopfile/load-assets-from-plopfile.spec.js b/packages/node-plop/tests/load-assets-from-plopfile/load-assets-from-plopfile.spec.js index be09eca7..f9f4d27b 100644 --- a/packages/node-plop/tests/load-assets-from-plopfile/load-assets-from-plopfile.spec.js +++ b/packages/node-plop/tests/load-assets-from-plopfile/load-assets-from-plopfile.spec.js @@ -20,6 +20,14 @@ describe("load-assets-from-plopfile", function () { expect(plop.getPartialList().length).toBe(0); }); + test("plop.load should preserve descriptions of generators", async function () { + const plop = await nodePlop(); + await plop.load(plopfilePath); + + expect(plop.getGeneratorList()[1].description).toBe(plop.getGenerator("generator2").description); + expect(plop.getGeneratorList()[1].description).toBe("this is a skeleton plopfile"); + }); + test("plop.load should be able to include a subset of generators", async function () { const plop = await nodePlop(); await plop.load(plopfilePath, {}, { generators: ["generator1"] }); diff --git a/packages/node-plop/tests/load-assets-from-plopfile/plopfile.js b/packages/node-plop/tests/load-assets-from-plopfile/plopfile.js index 56191766..bddae879 100644 --- a/packages/node-plop/tests/load-assets-from-plopfile/plopfile.js +++ b/packages/node-plop/tests/load-assets-from-plopfile/plopfile.js @@ -15,6 +15,9 @@ export default function (plop, config = {}) { actions: [{ type: "add", path: "src/{{name}}.txt" }], }; plop.setGenerator(`${cfg.prefix}generator1`, generatorObject); - plop.setGenerator(`${cfg.prefix}generator2`, generatorObject); + plop.setGenerator(`${cfg.prefix}generator2`, { + ...generatorObject, + description: "this is a skeleton plopfile", + }); plop.setGenerator(`${cfg.prefix}generator3`, generatorObject); } diff --git a/packages/plop/tests/examples/javascript/extra-generators.plopfile.js b/packages/plop/tests/examples/javascript/extra-generators.plopfile.js new file mode 100644 index 00000000..6a4a8661 --- /dev/null +++ b/packages/plop/tests/examples/javascript/extra-generators.plopfile.js @@ -0,0 +1,18 @@ +export default function (plop) { + plop.setGenerator("extra-generator1", { + description: "this is a skeleton plopfile", + prompts: [ + { + type: "input", + name: "name", + message: "What is your name?", + validate: function (value) { + if (/.+/.test(value)) { + return true; + } + return "name is required"; + }, + }, + ], + }); +} diff --git a/packages/plop/tests/examples/javascript/plopfile.js b/packages/plop/tests/examples/javascript/plopfile.js index 30073c23..94b64c89 100644 --- a/packages/plop/tests/examples/javascript/plopfile.js +++ b/packages/plop/tests/examples/javascript/plopfile.js @@ -2,7 +2,7 @@ import path from "path"; import fs from "fs"; import inquirerDirectory from "inquirer-directory"; -export default function (plop) { +export default async function (plop) { // starting prompt can be customized to display what you want // plop.setWelcomeMessage('[CUSTOM]'.yellow + ' What can I do for you?'); @@ -36,6 +36,9 @@ export default function (plop) { commentEnd: "", }); + // load generators from another plopfile in the project + await plop.load("./extra-generators.plopfile.js"); + const delayLog = (msg) => (answers) => new Promise((resolve) => { setTimeout(() => resolve(msg), 1000); diff --git a/packages/plop/tests/input-processing.spec.js b/packages/plop/tests/input-processing.spec.js index 78b3b11d..9c5f14a3 100644 --- a/packages/plop/tests/input-processing.spec.js +++ b/packages/plop/tests/input-processing.spec.js @@ -50,6 +50,7 @@ test("Should handle generator prompt", async () => { await userEvent.keyboard("[Enter]"); expect(await findByText("this is a test")).toBeInTheConsole(); + expect(await findByText("this is a skeleton plopfile")).toBeInTheConsole(); }); test("Should bypass generator prompt", async () => {