plop
Advanced tools
Comparing version 3.0.1 to 3.0.2
{ | ||
"name": "plop", | ||
"version": "3.0.1", | ||
"version": "3.0.2", | ||
"description": "Micro-generator framework that makes it easy for an entire team to create files with a level of uniformity", | ||
@@ -34,3 +34,2 @@ "main": "./src/plop", | ||
"devDependencies": { | ||
"cli-testing-library": "1.0.0-alpha.9", | ||
"eslint": "^8.3.0", | ||
@@ -53,2 +52,3 @@ "eslint-config-prettier": "^8.3.0", | ||
"chalk": "^5.0.0", | ||
"cli-testing-library": "^1.0.0-alpha.10", | ||
"interpret": "^2.2.0", | ||
@@ -55,0 +55,0 @@ "liftoff": "^4.0.0", |
@@ -124,2 +124,3 @@ #!/usr/bin/env node | ||
function doThePlop(generator, bypassArr) { | ||
let failedActions = false; | ||
generator | ||
@@ -160,2 +161,3 @@ .runPrompts(bypassArr) | ||
progressSpinner.fail(line); | ||
failedActions = true; | ||
progressSpinner.start(); | ||
@@ -166,3 +168,6 @@ }; | ||
.runActions(answers, { onSuccess, onFailure, onComment }) | ||
.then(() => progressSpinner.stop()); | ||
.then(() => { | ||
progressSpinner.stop(); | ||
if (failedActions) process.exit(1); | ||
}); | ||
}) | ||
@@ -169,0 +174,0 @@ .catch(function (err) { |
@@ -16,3 +16,3 @@ import { resolve, dirname } from "node:path"; | ||
const { findByText, fireEvent } = await renderPlop(["addAndNameFile"], { | ||
const { findByText, userEvent } = await renderPlop(["addAndNameFile"], { | ||
cwd: resolve(__dirname, "./examples/add-action"), | ||
@@ -23,4 +23,4 @@ }); | ||
fireEvent.type("new-output"); | ||
fireEvent.enter(); | ||
userEvent.keyboard("new-output"); | ||
userEvent.keyboard("[Enter]"); | ||
@@ -32,4 +32,2 @@ await waitFor(() => fs.promises.stat(expectedFilePath)); | ||
expect(data).toMatch(/Hello/); | ||
fireEvent.sigterm(); | ||
}); | ||
@@ -42,3 +40,3 @@ | ||
const { findByText, fireEvent } = await renderPlop(["addAndChangeFile"], { | ||
const { findByText, userEvent } = await renderPlop(["addAndChangeFile"], { | ||
cwd: resolve(__dirname, "./examples/add-action"), | ||
@@ -49,4 +47,4 @@ }); | ||
fireEvent.type("Corbin"); | ||
fireEvent.enter(); | ||
userEvent.keyboard("Corbin"); | ||
userEvent.keyboard("[Enter]"); | ||
@@ -58,4 +56,2 @@ await waitFor(() => fs.promises.stat(expectedFilePath)); | ||
expect(data).toMatch(/Hi Corbin!/); | ||
fireEvent.sigterm(); | ||
}); | ||
@@ -62,0 +58,0 @@ |
@@ -9,43 +9,39 @@ import { resolve, dirname } from "node:path"; | ||
test("should load ESM file", async () => { | ||
const { findByText, fireEvent } = await renderPlop([], { | ||
const { findByText, userEvent } = await renderPlop([], { | ||
cwd: resolve(__dirname, "./examples/esm"), | ||
}); | ||
expect(await findByText("What is your name?")).toBeTruthy(); | ||
fireEvent.type("Joe"); | ||
userEvent.keyboard("Joe"); | ||
expect(await findByText("Joe")).toBeTruthy(); | ||
fireEvent.enter(); | ||
fireEvent.sigterm(); | ||
userEvent.keyboard("[Enter]"); | ||
}); | ||
test("should load MJS file", async () => { | ||
const { findByText, fireEvent } = await renderPlop([], { | ||
const { findByText, userEvent } = await renderPlop([], { | ||
cwd: resolve(__dirname, "./examples/mjs"), | ||
}); | ||
expect(await findByText("What is your name?")).toBeTruthy(); | ||
fireEvent.type("Joe"); | ||
userEvent.keyboard("Joe"); | ||
expect(await findByText("Joe")).toBeTruthy(); | ||
fireEvent.enter(); | ||
fireEvent.sigterm(); | ||
userEvent.keyboard("[Enter]"); | ||
}); | ||
test.only("should load CJS file", async () => { | ||
const { findByText, fireEvent } = await renderPlop([], { | ||
test("should load CJS file", async () => { | ||
const { findByText, userEvent } = await renderPlop([], { | ||
cwd: resolve(__dirname, "./examples/cjs"), | ||
}); | ||
expect(await findByText("What is your name?")).toBeTruthy(); | ||
fireEvent.type("Joe"); | ||
userEvent.keyboard("Joe"); | ||
expect(await findByText("Joe")).toBeTruthy(); | ||
fireEvent.enter(); | ||
fireEvent.sigterm(); | ||
userEvent.keyboard("[Enter]"); | ||
}); | ||
test("should load JS module='commonjs' file", async () => { | ||
const { findByText, fireEvent } = await renderPlop([], { | ||
const { findByText, userEvent } = await renderPlop([], { | ||
cwd: resolve(__dirname, "./examples/cjs-js"), | ||
}); | ||
expect(await findByText("What is your name?")).toBeTruthy(); | ||
fireEvent.type("Joe"); | ||
userEvent.keyboard("Joe"); | ||
expect(await findByText("Joe")).toBeTruthy(); | ||
fireEvent.enter(); | ||
fireEvent.sigterm(); | ||
userEvent.keyboard("[Enter]"); | ||
}); |
@@ -31,14 +31,13 @@ import { resolve, dirname } from "node:path"; | ||
test("should display inquirer prompts", async () => { | ||
const { findByText, fireEvent } = await renderPlop([], { | ||
const { findByText, userEvent } = await renderPlop([], { | ||
cwd: resolve(__dirname, "./examples/prompt-only"), | ||
}); | ||
expect(await findByText("What is your name?")).toBeTruthy(); | ||
fireEvent.type("Joe"); | ||
userEvent.keyboard("Joe"); | ||
expect(await findByText("Joe")).toBeTruthy(); | ||
fireEvent.enter(); | ||
fireEvent.sigterm(); | ||
userEvent.keyboard("[Enter]"); | ||
}); | ||
test("Should handle generator prompt", async () => { | ||
const { findByText, clear, fireEvent } = await renderPlop([""], { | ||
const { findByText, clear, userEvent } = await renderPlop([""], { | ||
cwd: resolve(__dirname, "./examples/javascript"), | ||
@@ -50,13 +49,11 @@ }); | ||
clear(); | ||
fireEvent.up(); | ||
fireEvent.down(); | ||
fireEvent.enter(); | ||
userEvent.keyboard("[ArrowUp]"); | ||
userEvent.keyboard("[ArrowDown]"); | ||
userEvent.keyboard("[Enter]"); | ||
expect(await findByText("this is a test")).toBeTruthy(); | ||
fireEvent.sigterm(); | ||
}); | ||
test("Should bypass generator prompt", async () => { | ||
const { findByText, fireEvent } = await renderPlop(["test"], { | ||
const { findByText } = await renderPlop(["test"], { | ||
cwd: resolve(__dirname, "./examples/javascript"), | ||
@@ -66,8 +63,6 @@ }); | ||
expect(await findByText("What is your name?")).toBeTruthy(); | ||
fireEvent.sigterm(); | ||
}); | ||
test("Should bypass prompt by input", async () => { | ||
const { queryByText, findByText, fireEvent } = await renderPlop(["Frank"], { | ||
const { queryByText, findByText } = await renderPlop(["Frank"], { | ||
cwd: resolve(__dirname, "./examples/prompt-only"), | ||
@@ -78,8 +73,6 @@ }); | ||
expect(await findByText("What pizza toppings do you like?")).toBeTruthy(); | ||
fireEvent.sigterm(); | ||
}); | ||
test("Should bypass prompt by input placeholder", async () => { | ||
const { queryByText, findByText, fireEvent } = await renderPlop( | ||
const { queryByText, findByText, userEvent } = await renderPlop( | ||
["_", "Cheese"], | ||
@@ -92,10 +85,8 @@ { | ||
expect(await findByText("What is your name?")).toBeTruthy(); | ||
fireEvent.enter(); | ||
userEvent.keyboard("[Enter]"); | ||
expect(await queryByText("What pizza toppings do you like?")).toBeFalsy(); | ||
fireEvent.sigterm(); | ||
}); | ||
test("Should bypass prompt by name", async () => { | ||
const { queryByText, findByText, fireEvent } = await renderPlop( | ||
const { queryByText, findByText } = await renderPlop( | ||
["--", "--name", "Frank"], | ||
@@ -109,6 +100,4 @@ { | ||
expect(await findByText("What pizza toppings do you like?")).toBeTruthy(); | ||
fireEvent.sigterm(); | ||
}); | ||
test.todo("Dynamic actions"); |
@@ -30,3 +30,2 @@ import fs from "node:fs"; | ||
expect(await findByText("What is your name?")).toBeTruthy(); | ||
fireEvent.sigterm(); | ||
}); | ||
@@ -44,3 +43,2 @@ | ||
expect(await findByText("What pizza toppings do you like?")).toBeTruthy(); | ||
fireEvent.sigterm(); | ||
}); | ||
@@ -58,3 +56,2 @@ | ||
expect(await findByText("What pizza toppings do you like?")).toBeTruthy(); | ||
fireEvent.sigterm(); | ||
}); | ||
@@ -76,4 +73,2 @@ | ||
expect(data).toMatch(/Hello/); | ||
fireEvent.sigterm(); | ||
}); |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
spdx disjunction for an artifact's license information
Licensespdx disjunction for an artifact's license information
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
spdx disjunction for an artifact's license information
Licensespdx disjunction for an artifact's license information
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
12
1
5
98981
9
67
1777
1
+ Added@babel/code-frame@7.24.7(transitive)
+ Added@babel/helper-validator-identifier@7.24.7(transitive)
+ Added@babel/highlight@7.24.7(transitive)
+ Added@babel/runtime@7.24.7(transitive)
+ Addedansi-styles@3.2.15.2.0(transitive)
+ Addedastral-regex@2.0.0(transitive)
+ Addedchalk@2.4.2(transitive)
+ Addedcli-testing-library@1.0.4(transitive)
+ Addedcolor-convert@1.9.3(transitive)
+ Addedcolor-name@1.1.3(transitive)
+ Addeddiff-sequences@27.5.1(transitive)
+ Addedhas-flag@3.0.0(transitive)
+ Addedjest-diff@27.5.1(transitive)
+ Addedjest-get-type@27.5.1(transitive)
+ Addedjest-matcher-utils@27.5.1(transitive)
+ Addedjs-tokens@4.0.0(transitive)
+ Addedlz-string@1.5.0(transitive)
+ Addedmin-indent@1.0.1(transitive)
+ Addedpicocolors@1.0.1(transitive)
+ Addedpretty-format@27.5.1(transitive)
+ Addedreact-is@17.0.2(transitive)
+ Addedredent@3.0.0(transitive)
+ Addedregenerator-runtime@0.14.1(transitive)
+ Addedslice-ansi@4.0.0(transitive)
+ Addedstrip-final-newline@2.0.0(transitive)
+ Addedstrip-indent@3.0.0(transitive)
+ Addedsupports-color@5.5.0(transitive)
+ Addedtree-kill@1.2.2(transitive)