diff --git a/.changeset/spotty-feet-applaud.md b/.changeset/spotty-feet-applaud.md new file mode 100644 index 0000000..5b57e58 --- /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 02be669..e7ebe9f 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 be09eca..f9f4d27 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 5619176..bddae87 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 0000000..6a4a866 --- /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 30073c2..94b64c8 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 78b3b11..9c5f14a 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 () => {