From ba770ade7ced6f13c0817cd0a569be5832046a9e Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Fri, 5 Apr 2024 05:42:05 -0700 Subject: [PATCH 1/3] wip --- README.md | 24 +- packages/plop/package.json | 2 + packages/plop/src/console-out.js | 45 ++- packages/plop/src/input-processing.js | 4 +- packages/plop/src/plop.js | 1 + .../input-processing.spec.js.snap | 1 + .../tests/examples/typescript/plopfile.ts | 2 +- .../tests/examples/typescript/tsconfig.json | 2 +- .../plop/tests/examples/wrap-plop/index.js | 4 +- packages/plop/tests/typescript.spec.js | 2 +- yarn.lock | 327 ++++++++++++++++++ 11 files changed, 388 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index e5c5b68..e82b704 100644 --- a/README.md +++ b/README.md @@ -140,9 +140,9 @@ Because [context switching is expensive](https://www.petrikainulainen.net/softwa # Plopfile API The plopfile api is the collection of methods that are exposed by the `plop` object. Most of the work is done by [`setGenerator`](#setgenerator) but this section documents the other methods that you may also find useful in your plopfile. -## TypeScript Declarations +## TypeScript Support -`plop` bundles TypeScript declarations. Whether or not you write your plopfile in TypeScript, many editors will offer code assistance via these declarations. +`plop` bundles TypeScript declarations and supports `plopfile.ts` using `plop --init-ts`. Whether or not you write your plopfile in TypeScript, many editors will offer code assistance via these declarations. ```javascript // plopfile.ts @@ -270,7 +270,7 @@ Property | Type | Default | Description -------- | ---- | ------- | ----------- **description** | *[String]* | | short description of what this generator does **prompts** | *Array[[InquirerQuestion](https://github.com/SBoudrias/Inquirer.js/blob/master/packages/inquirer/README.md/#question)]* | | questions to ask the user -**actions** | *Array[[ActionConfig](#interface-actionconfig)]* | | actions to perform +**actions** | *Array[[ActionConfig](#interface-actionconfig)] / Function[[DynamicActionsFunction](#interface-dynamicactionsfunction)]* | | actions to perform > If your list of actions needs to be dynamic, take a look at [using a dynamic actions array.](#using-a-dynamic-actions-array) @@ -299,6 +299,24 @@ Property | Type | Default | Description > Instead of an Action Object, a [function can also be used](#custom-action-function) +### *Interface* `DynamicActionsFunction` + +The dynamic actions function is a function that accepts an *Answers* collection and returns *Array[[ActionConfig](#interface-actionconfig)]* or *Promise*. + +**Example** + +```js +plop.setGenerator('test', { + actions: async (answers)=>{ + return Promise.resolve([ + ...ActionConfig... + ...ActionConfig... + ...ActionConfig... + ]) + } +}); +``` + ## Other Methods Method | Parameters | Returns | Description ------ | ---------- | ------- | ----------- diff --git a/packages/plop/package.json b/packages/plop/package.json index a229955..bd3599a 100644 --- a/packages/plop/package.json +++ b/packages/plop/package.json @@ -33,6 +33,7 @@ }, "devDependencies": { "cli-testing-library": "^2.0.2", + "glob": "^10.3.12", "inquirer-directory": "^2.2.0", "nyc": "^15.1.0", "plop-pack-fancy-comments": "^0.2.1", @@ -48,6 +49,7 @@ "minimist": "^1.2.8", "node-plop": "^0.32.0", "ora": "^8.0.0", + "tsx": "^4.7.2", "v8flags": "^4.0.1" }, "engines": { diff --git a/packages/plop/src/console-out.js b/packages/plop/src/console-out.js index 7999df6..83ded10 100644 --- a/packages/plop/src/console-out.js +++ b/packages/plop/src/console-out.js @@ -62,6 +62,7 @@ function displayHelpScreen() { " -t, --show-type-names " + chalk.dim("Show type names instead of abbreviations"), " -i, --init " + chalk.dim("Generate a basic plopfile.js"), + " --init-ts " + chalk.dim("Generate a basic plopfile.ts"), " -v, --version " + chalk.dim("Print current version"), " -f, --force " + chalk.dim("Run the generator forcefully"), "", @@ -89,25 +90,35 @@ function displayHelpScreen() { ); } -function createInitPlopfile(force = false) { - var initString = - "export default function (plop) {\n\n" + - "\tplop.setGenerator('basics', {\n" + - "\t\tdescription: 'this is a skeleton plopfile',\n" + - "\t\tprompts: [],\n" + - "\t\tactions: []\n" + - "\t});\n\n" + - "};"; +function createInitPlopfile(force = false, useTypescript = false) { + var initString = (()=>{ + if(useTypescript) { + return "import type { NodePlopAPI } from 'plop'\n" + + "\n" + + "export default async function (plop: NodePlopAPI) {\n" + + "\n" + + "}\n" + + "\n"; + } else { + return "export default function (plop) {\n\n" + + "\tplop.setGenerator('basics', {\n" + + "\t\tdescription: 'this is a skeleton plopfile',\n" + + "\t\tprompts: [],\n" + + "\t\tactions: []\n" + + "\t});\n\n" + + "};"; + } + })(); - if (fs.existsSync(process.cwd() + "/plopfile.js") && force === false) { - throw Error('"plopfile.js" already exists at this location.'); - } - - if (fs.existsSync(process.cwd() + "/plopfile.cjs") && force === false) { - throw Error('"plopfile.cjs" already exists at this location.'); - } + [`js`, `cjs`, `ts`].forEach(ext => { + const name = `plopfile.${ext}`; + if (fs.existsSync(process.cwd() + `/${name}`) && force === false) { + throw Error(`"${name}" already exists at this location.`); + } + }); - fs.writeFileSync(process.cwd() + "/plopfile.js", initString); + const outExt = useTypescript ? `ts` : `js` + fs.writeFileSync(process.cwd() + `/plopfile.${outExt}`, initString); } const typeDisplay = { diff --git a/packages/plop/src/input-processing.js b/packages/plop/src/input-processing.js index 94189b9..d887d75 100644 --- a/packages/plop/src/input-processing.js +++ b/packages/plop/src/input-processing.js @@ -70,10 +70,10 @@ function handleArgFlags(env) { } // handle request for initializing a new plopfile - if (argv.init || argv.i) { + if (argv.init || argv.i || argv[`init-ts`]) { const force = argv.force === true || argv.f === true || false; try { - out.createInitPlopfile(force); + out.createInitPlopfile(force, argv[`init-ts`]); process.exit(0); } catch (err) { console.error(chalk.red("[PLOP] ") + err.message); diff --git a/packages/plop/src/plop.js b/packages/plop/src/plop.js index 251c75e..41ad92b 100644 --- a/packages/plop/src/plop.js +++ b/packages/plop/src/plop.js @@ -1,5 +1,6 @@ #!/usr/bin/env node +import "tsx"; import ora from "ora"; import path from "node:path"; import Liftoff from "liftoff"; diff --git a/packages/plop/tests/__snapshots__/input-processing.spec.js.snap b/packages/plop/tests/__snapshots__/input-processing.spec.js.snap index 4342dda..e3bd294 100644 --- a/packages/plop/tests/__snapshots__/input-processing.spec.js.snap +++ b/packages/plop/tests/__snapshots__/input-processing.spec.js.snap @@ -11,6 +11,7 @@ Options: -h, --help Show this help display -t, --show-type-names Show type names instead of abbreviations -i, --init Generate a basic plopfile.js + --init-ts Generate a basic plopfile.ts -v, --version Print current version -f, --force Run the generator forcefully diff --git a/packages/plop/tests/examples/typescript/plopfile.ts b/packages/plop/tests/examples/typescript/plopfile.ts index 59806d5..03f0dd7 100644 --- a/packages/plop/tests/examples/typescript/plopfile.ts +++ b/packages/plop/tests/examples/typescript/plopfile.ts @@ -7,7 +7,7 @@ module.exports = function (plop: NodePlopAPI) { { type: "input", name: "name", - message: "What is your name?", + message: "What is your Typescript name?", validate: function (value) { if (/.+/.test(value)) { return true; diff --git a/packages/plop/tests/examples/typescript/tsconfig.json b/packages/plop/tests/examples/typescript/tsconfig.json index dac20cc..97a51cf 100644 --- a/packages/plop/tests/examples/typescript/tsconfig.json +++ b/packages/plop/tests/examples/typescript/tsconfig.json @@ -8,7 +8,7 @@ "strict": true, "baseUrl": "./", "paths": { - "plop": ["../../src/plop.d.ts"] + "plop": ["../../../src/plop.d.ts"] } } } diff --git a/packages/plop/tests/examples/wrap-plop/index.js b/packages/plop/tests/examples/wrap-plop/index.js index 9746dea..cdeeb49 100644 --- a/packages/plop/tests/examples/wrap-plop/index.js +++ b/packages/plop/tests/examples/wrap-plop/index.js @@ -1,5 +1,6 @@ #!/usr/bin/env node import path from "node:path"; +import { globSync } from "glob"; import minimist from "minimist"; import { Plop, run } from "../../../instrumented/src/plop.js"; @@ -13,8 +14,9 @@ Plop.prepare( { cwd: argv.cwd, preload: argv.preload || [], + // Use the plopfile in cwd if available, otherwise use the default plopfile // In order for `plop` to always pick up the `plopfile.js` despite the CWD, you must use `__dirname` - configPath: path.join(__dirname, "plopfile.cjs"), + configPath: globSync(`plopfile.{cjs,js,ts}`, { cwd: argv.cwd, absolute: true })[0] || path.join(__dirname, "plopfile.cjs"), completion: argv.completion, // This will merge the `plop` argv and the generator argv. // This means that you don't need to use `--` anymore diff --git a/packages/plop/tests/typescript.spec.js b/packages/plop/tests/typescript.spec.js index 1ca6fe3..06e7954 100644 --- a/packages/plop/tests/typescript.spec.js +++ b/packages/plop/tests/typescript.spec.js @@ -16,5 +16,5 @@ test("support typescript out of the box", async () => { cwd: resolve(__dirname, "./examples/typescript"), }); - expect(await findByText("What is your name?")).toBeInTheConsole(); + expect(await findByText("What is your Typescript name?")).toBeInTheConsole(); }); diff --git a/yarn.lock b/yarn.lock index 202067b..cc057a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -599,6 +599,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/aix-ppc64@npm:0.19.12" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/android-arm64@npm:0.19.10" @@ -606,6 +613,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/android-arm64@npm:0.19.12" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/android-arm@npm:0.19.10" @@ -613,6 +627,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/android-arm@npm:0.19.12" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/android-x64@npm:0.19.10" @@ -620,6 +641,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/android-x64@npm:0.19.12" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/darwin-arm64@npm:0.19.10" @@ -627,6 +655,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/darwin-arm64@npm:0.19.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/darwin-x64@npm:0.19.10" @@ -634,6 +669,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/darwin-x64@npm:0.19.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/freebsd-arm64@npm:0.19.10" @@ -641,6 +683,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/freebsd-arm64@npm:0.19.12" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/freebsd-x64@npm:0.19.10" @@ -648,6 +697,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/freebsd-x64@npm:0.19.12" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/linux-arm64@npm:0.19.10" @@ -655,6 +711,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-arm64@npm:0.19.12" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/linux-arm@npm:0.19.10" @@ -662,6 +725,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-arm@npm:0.19.12" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/linux-ia32@npm:0.19.10" @@ -669,6 +739,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-ia32@npm:0.19.12" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/linux-loong64@npm:0.19.10" @@ -676,6 +753,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-loong64@npm:0.19.12" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/linux-mips64el@npm:0.19.10" @@ -683,6 +767,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-mips64el@npm:0.19.12" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/linux-ppc64@npm:0.19.10" @@ -690,6 +781,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-ppc64@npm:0.19.12" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/linux-riscv64@npm:0.19.10" @@ -697,6 +795,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-riscv64@npm:0.19.12" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/linux-s390x@npm:0.19.10" @@ -704,6 +809,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-s390x@npm:0.19.12" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/linux-x64@npm:0.19.10" @@ -711,6 +823,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/linux-x64@npm:0.19.12" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/netbsd-x64@npm:0.19.10" @@ -718,6 +837,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/netbsd-x64@npm:0.19.12" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/openbsd-x64@npm:0.19.10" @@ -725,6 +851,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/openbsd-x64@npm:0.19.12" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/sunos-x64@npm:0.19.10" @@ -732,6 +865,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/sunos-x64@npm:0.19.12" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/win32-arm64@npm:0.19.10" @@ -739,6 +879,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/win32-arm64@npm:0.19.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/win32-ia32@npm:0.19.10" @@ -746,6 +893,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/win32-ia32@npm:0.19.12" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.19.10": version: 0.19.10 resolution: "@esbuild/win32-x64@npm:0.19.10" @@ -753,6 +907,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.19.12": + version: 0.19.12 + resolution: "@esbuild/win32-x64@npm:0.19.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" @@ -3014,6 +3175,86 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:~0.19.10": + version: 0.19.12 + resolution: "esbuild@npm:0.19.12" + dependencies: + "@esbuild/aix-ppc64": "npm:0.19.12" + "@esbuild/android-arm": "npm:0.19.12" + "@esbuild/android-arm64": "npm:0.19.12" + "@esbuild/android-x64": "npm:0.19.12" + "@esbuild/darwin-arm64": "npm:0.19.12" + "@esbuild/darwin-x64": "npm:0.19.12" + "@esbuild/freebsd-arm64": "npm:0.19.12" + "@esbuild/freebsd-x64": "npm:0.19.12" + "@esbuild/linux-arm": "npm:0.19.12" + "@esbuild/linux-arm64": "npm:0.19.12" + "@esbuild/linux-ia32": "npm:0.19.12" + "@esbuild/linux-loong64": "npm:0.19.12" + "@esbuild/linux-mips64el": "npm:0.19.12" + "@esbuild/linux-ppc64": "npm:0.19.12" + "@esbuild/linux-riscv64": "npm:0.19.12" + "@esbuild/linux-s390x": "npm:0.19.12" + "@esbuild/linux-x64": "npm:0.19.12" + "@esbuild/netbsd-x64": "npm:0.19.12" + "@esbuild/openbsd-x64": "npm:0.19.12" + "@esbuild/sunos-x64": "npm:0.19.12" + "@esbuild/win32-arm64": "npm:0.19.12" + "@esbuild/win32-ia32": "npm:0.19.12" + "@esbuild/win32-x64": "npm:0.19.12" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 861fa8eb2428e8d6521a4b7c7930139e3f45e8d51a86985cc29408172a41f6b18df7b3401e7e5e2d528cdf83742da601ddfdc77043ddc4f1c715a8ddb2d8a255 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -3854,6 +4095,15 @@ __metadata: languageName: node linkType: hard +"get-tsconfig@npm:^4.7.2": + version: 4.7.3 + resolution: "get-tsconfig@npm:4.7.3" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 7397bb4f8aef936df4d9016555b662dcf5279f3c46428b7c7c1ff5e94ab2b87d018b3dda0f4bc1a28b154d5affd0eac5d014511172c085fd8a9cdff9ea7fe043 + languageName: node + linkType: hard + "getpass@npm:^0.1.1": version: 0.1.7 resolution: "getpass@npm:0.1.7" @@ -3896,6 +4146,21 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.3.12": + version: 10.3.12 + resolution: "glob@npm:10.3.12" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^2.3.6" + minimatch: "npm:^9.0.1" + minipass: "npm:^7.0.4" + path-scurry: "npm:^1.10.2" + bin: + glob: dist/esm/bin.mjs + checksum: 9e8186abc22dc824b5dd86cefd8e6b5621a72d1be7f68bacc0fd681e8c162ec5546660a6ec0553d6a74757a585e655956c7f8f1a6d24570e8d865c307323d178 + languageName: node + linkType: hard + "glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.0 resolution: "glob@npm:7.2.0" @@ -5002,6 +5267,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^2.3.6": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 6e6490d676af8c94a7b5b29b8fd5629f21346911ebe2e32931c2a54210134408171c24cee1a109df2ec19894ad04a429402a8438cbf5cc2794585d35428ace76 + languageName: node + linkType: hard + "jest-diff@npm:^27.5.1": version: 27.5.1 resolution: "jest-diff@npm:27.5.1" @@ -5393,6 +5671,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.2.0": + version: 10.2.0 + resolution: "lru-cache@npm:10.2.0" + checksum: 502ec42c3309c0eae1ce41afca471f831c278566d45a5273a0c51102dee31e0e250a62fa9029c3370988df33a14188a38e682c16143b794de78668de3643e302 + languageName: node + linkType: hard + "lru-cache@npm:^4.0.1": version: 4.1.5 resolution: "lru-cache@npm:4.1.5" @@ -5722,6 +6007,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^7.0.4": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: e864bd02ceb5e0707696d58f7ce3a0b89233f0d686ef0d447a66db705c0846a8dc6f34865cd85256c1472ff623665f616b90b8ff58058b2ad996c5de747d2d18 + languageName: node + linkType: hard + "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" @@ -6445,6 +6737,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.10.2": + version: 1.10.2 + resolution: "path-scurry@npm:1.10.2" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: a2bbbe8dc284c49dd9be78ca25f3a8b89300e0acc24a77e6c74824d353ef50efbf163e64a69f4330b301afca42d0e2229be0560d6d616ac4e99d48b4062016b1 + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -6581,6 +6883,7 @@ __metadata: "@types/liftoff": "npm:^4.0.3" chalk: "npm:^5.3.0" cli-testing-library: "npm:^2.0.2" + glob: "npm:^10.3.12" inquirer-directory: "npm:^2.2.0" interpret: "npm:^3.1.1" liftoff: "npm:^4.0.0" @@ -6590,6 +6893,7 @@ __metadata: ora: "npm:^8.0.0" plop-pack-fancy-comments: "npm:^0.2.1" queue-microtask: "npm:^1.2.3" + tsx: "npm:^4.7.2" v8flags: "npm:^4.0.1" vitest: "npm:^1.1.0" bin: @@ -6949,6 +7253,13 @@ __metadata: languageName: node linkType: hard +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 0763150adf303040c304009231314d1e84c6e5ebfa2d82b7d94e96a6e82bacd1dcc0b58ae257315f3c8adb89a91d8d0f12928241cba2df1680fbe6f60bf99b0e + languageName: node + linkType: hard + "resolve@npm:^1.10.0, resolve@npm:^1.20.0, resolve@npm:^1.3.2": version: 1.22.0 resolution: "resolve@npm:1.22.0" @@ -8101,6 +8412,22 @@ __metadata: languageName: node linkType: hard +"tsx@npm:^4.7.2": + version: 4.7.2 + resolution: "tsx@npm:4.7.2" + dependencies: + esbuild: "npm:~0.19.10" + fsevents: "npm:~2.3.3" + get-tsconfig: "npm:^4.7.2" + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.mjs + checksum: 3a06564f6926cc26bcdbf2752c361408d8e594a30abf15dc4639d4b964e98eedd3358c34ccd56ea15021519ebafe27a003d6cf26de0f530ea2cc34cb63fd0bfb + languageName: node + linkType: hard + "tty-table@npm:^4.1.5": version: 4.2.1 resolution: "tty-table@npm:4.2.1" From 2d7b174ec86d2ca02405f2a4f586e23aaa77ffed Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Fri, 5 Apr 2024 05:45:47 -0700 Subject: [PATCH 2/3] wip --- README.md | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/README.md b/README.md index e82b704..f8496da 100644 --- a/README.md +++ b/README.md @@ -270,7 +270,7 @@ Property | Type | Default | Description -------- | ---- | ------- | ----------- **description** | *[String]* | | short description of what this generator does **prompts** | *Array[[InquirerQuestion](https://github.com/SBoudrias/Inquirer.js/blob/master/packages/inquirer/README.md/#question)]* | | questions to ask the user -**actions** | *Array[[ActionConfig](#interface-actionconfig)] / Function[[DynamicActionsFunction](#interface-dynamicactionsfunction)]* | | actions to perform +**actions** | *Array[[ActionConfig](#interface-actionconfig)]* | | actions to perform > If your list of actions needs to be dynamic, take a look at [using a dynamic actions array.](#using-a-dynamic-actions-array) @@ -299,24 +299,6 @@ Property | Type | Default | Description > Instead of an Action Object, a [function can also be used](#custom-action-function) -### *Interface* `DynamicActionsFunction` - -The dynamic actions function is a function that accepts an *Answers* collection and returns *Array[[ActionConfig](#interface-actionconfig)]* or *Promise*. - -**Example** - -```js -plop.setGenerator('test', { - actions: async (answers)=>{ - return Promise.resolve([ - ...ActionConfig... - ...ActionConfig... - ...ActionConfig... - ]) - } -}); -``` - ## Other Methods Method | Parameters | Returns | Description ------ | ---------- | ------- | ----------- From 59edf3eb0112e46bfebe344f7bd4eee1283876f1 Mon Sep 17 00:00:00 2001 From: Ben Allfree Date: Fri, 5 Apr 2024 15:43:36 -0700 Subject: [PATCH 3/3] wip --- packages/plop/bin/plop.js | 3 ++- packages/plop/src/plop.js | 4 ++-- packages/plop/tests/examples/wrap-plop/index.js | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/plop/bin/plop.js b/packages/plop/bin/plop.js index 288ed45..7b8c713 100644 --- a/packages/plop/bin/plop.js +++ b/packages/plop/bin/plop.js @@ -2,11 +2,12 @@ const args = process.argv.slice(2); import { Plop, run } from "../src/plop.js"; import minimist from "minimist"; +import { cwd } from 'process'; const argv = minimist(args); Plop.prepare( { - cwd: argv.cwd, + cwd: argv.cwd || cwd(), preload: argv.preload || [], configPath: argv.plopfile, completion: argv.completion, diff --git a/packages/plop/src/plop.js b/packages/plop/src/plop.js index 41ad92b..ef5ae3a 100644 --- a/packages/plop/src/plop.js +++ b/packages/plop/src/plop.js @@ -1,6 +1,5 @@ #!/usr/bin/env node -import "tsx"; import ora from "ora"; import path from "node:path"; import Liftoff from "liftoff"; @@ -16,9 +15,10 @@ import * as out from "./console-out.js"; import { combineBypassData } from "./bypass.js"; import { getBypassAndGenerator, handleArgFlags } from "./input-processing.js"; +const extensions = { ...interpret.jsVariants, '.ts': 'tsx/dist/loader.cjs' } const Plop = new Liftoff({ name: "plop", - extensions: interpret.jsVariants, + extensions, v8flags: v8flags, }); diff --git a/packages/plop/tests/examples/wrap-plop/index.js b/packages/plop/tests/examples/wrap-plop/index.js index cdeeb49..344cbe7 100644 --- a/packages/plop/tests/examples/wrap-plop/index.js +++ b/packages/plop/tests/examples/wrap-plop/index.js @@ -1,5 +1,6 @@ #!/usr/bin/env node import path from "node:path"; +import { cwd } from 'process'; import { globSync } from "glob"; import minimist from "minimist"; import { Plop, run } from "../../../instrumented/src/plop.js"; @@ -12,7 +13,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); Plop.prepare( { - cwd: argv.cwd, + cwd: argv.cwd || cwd(), preload: argv.preload || [], // Use the plopfile in cwd if available, otherwise use the default plopfile // In order for `plop` to always pick up the `plopfile.js` despite the CWD, you must use `__dirname`